diff --git a/.gitee/ISSUE_TEMPLATE.en.md b/.gitee/ISSUE_TEMPLATE.en.md deleted file mode 100644 index 458911819fd4e6cbadc9228ff1d2f3e0a4d39d06..0000000000000000000000000000000000000000 --- a/.gitee/ISSUE_TEMPLATE.en.md +++ /dev/null @@ -1,23 +0,0 @@ -**Is this a BUG REPORT or FEATURE REQUEST?**: - -> Uncomment only one, leave it on its own line: -> -> - bug -> -> - feature - - -**What happened**: - -**What you expected to happen**: - -**How to reproduce it (as minimally and precisely as possible)**: - -**Anything else we need to know?**: - -**Environment**: -- Version: -- OS (e.g. from /etc/os-release): -- Kernel (e.g. `uname -a`): -- Install tools: -- Others: diff --git a/.gitee/ISSUE_TEMPLATE.zh-CN.md b/.gitee/ISSUE_TEMPLATE.zh-CN.md deleted file mode 100644 index d83eeb568385f4b57166ad51ccb6c414f5f061b7..0000000000000000000000000000000000000000 --- a/.gitee/ISSUE_TEMPLATE.zh-CN.md +++ /dev/null @@ -1,22 +0,0 @@ -**这是一个bug还是新特性?**: - -> 以下两者二选一,请保留一项: -> -> - bug -> -> - 特性 - - -**发生结果**: - -**期望结果**: - -**如何重现(尽量详细)**: - -**补充说明?**: - -**环境情况**: -- 版本: -- 操作系统版本 (e.g. from /etc/os-release): -- 内核版本 (e.g. `uname -a`): -- 其它: diff --git a/.gitee/PULL_REQUEST_TEMPLATE.en.md b/.gitee/PULL_REQUEST_TEMPLATE.en.md deleted file mode 100644 index fb9f653795bc13e5cced21eb4e7a96d655a23c59..0000000000000000000000000000000000000000 --- a/.gitee/PULL_REQUEST_TEMPLATE.en.md +++ /dev/null @@ -1,15 +0,0 @@ - - -**What this PR does / why we need it**: - -**Which issue this PR fixes** *(optional, in `fixes #(, fixes #, ...)` format, will close that issue when PR gets merged)*: fixes # - -**Special notes for your reviewer**: - -**Release note**: - -```release-note -``` diff --git a/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md b/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md deleted file mode 100644 index f731c6335b44ab9a37a3006406ddbe062bc3fa86..0000000000000000000000000000000000000000 --- a/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md +++ /dev/null @@ -1,15 +0,0 @@ - - -**PR功能描述 / 为什么需要这个合入**: - -**该PR关联的issue** *(格式为fixes #, 或者resolves #)*: fixes # - -**希望检视人员了解**: - -**Release note**: - -```release-note -``` diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 1516e93b72f23cfe2ab4c75ea88b19a12ccc9a1a..0000000000000000000000000000000000000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -public -resources/_gen diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index d7c6119bfa7e3a01bbe2b405dc1f125890462a72..0000000000000000000000000000000000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,167 +0,0 @@ -# How to contribute - -### Brief Introduction - -This project is [Apache 2.0](LICENSE) licensed and accepts contributions via pull requests. This document outlines some of the conventions on commit message formatting, contact points for developers and other resources to make getting your contribution easier. - -Before you start, NOTICE that ```master``` branch is development version. ```stable``` branch -provided for customers and users. So all code modifications SHOULD be submitted to -```master``` branch, ```stable``` branch won't accept any commits. - -This repository is integrated by website which will provide the final outline, so please only maintain docs in this repository. -anything others like styles, js are maintained in website as a combined hugo theme. - -Contents oranganized by hugo book which is a framework helping build our own book. -please refer to hugo book [website](https://github.com/alex-shpak/hugo-book) for more detailed information. - -All files are written with MarkDown syntax, please note: If you want to add internal links, -be careful to point to the .html pages corresponding to the .md pages of the folder. - -### Debug local - -This doc only provides running test on linux, please prepare linux server before running -following commands. - -1. Install hugo on server - -hugo can be installed easily after nodejs is ready. - -``` -curl -L https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_0.56.3_Linux-64bit.tar.gz | tar -xz && \ - mv hugo /usr/local/bin/ -``` - -2. Running this repository locally - -``` -hugo serve --bind 0.0.0.0 --port 80 --baseUrl / -``` - -The website will serving on http://your-server-ip:80 - - -### Debug with docker - -1. Build Image - -``` -docker build -t docs:v0.0.1 . -``` - -note: here ```docs``` is the image name, you can change it as you need. - -2. Running in container - -``` -docker run -p 80:80 -d docs:v0.0.1 > docs.pid -``` - -The website will serving on http://your-server-ip:80 - -3. Stopping the container - -``` -docker rm -f `cat docs.pid` && rm -f docs.pid -``` - -***Note***: -The defalut language(en) will serving on http://your-server-ip/ -Other language(zh) will serving on http://your-server-ip/zh - -### Add/Modify file - -Before openning a PR, running locally and have a check would be good step that will help -your commits be merged quickly. - -There are two kinds of Markdown file, one is the content files which locates in ```content/docs``` folder. -the other one is the menu file which locates in ```content/menu``` folder. please remember to update menu if -adding new file. - -Note: menu file home file name must be named ```home.md```. - -## Getting help - -- IRC: TODO -- Mail: TODO - -## Report issues - -A great way to contribute to the project is to send a detailed report when you encounter an issue. We always appreciate a well-written, thorough bug report and feature propose, and will thank you for it! - -### Issues format - -When reporting issues, refer to this format: - -- Is this a BUG REPORT or FEATURE REQUEST? -- What happened? -- What you expected to happen? -- What happened? -- How to reproduce it (as minimally and precisely as possible) -- Anything else we need to know? -- Environment - -See more about [ISSUE_TEMPLATE](.github/ISSUE_TEMPLATE.md). - -## Submit pull requests - -If you are a beginner and expect this project as the gate to open source world, this tutorial is one of the best -choices for you. Just follow the guidance and you will find the pleasure to becoming a contributor. - -### Step 1: Fork repository - -Before making modifications of this project, you need to make sure that this project have been forked to your own -repository. It means that there will be parallel development between this repo and your own repo, so be careful -to avoid the inconsistency between these two repos. - -### Step 2: Clone the remote repository - -If you want to download the code to the local machine, ```git``` is the best way: -``` -git clone https://your_repo_url/projectname.git -``` - -### Step 3: Develop code locally - -To avoid inconsistency between multiple branches, we SUGGEST checking out to a new branch: -``` -git checkout -b new_branch_name origin/master -``` -Then you can change the code arbitrarily. - -### Step 4: Push the code to the remote repository - -After updating the code, you should push the update in the formal way: -``` -git add . -git status (Check the update status) -git commit -m "Your commit title" -git commit --amend (Add the concrete description of your commit) -git push origin new_branch_name -``` - -### Step 5: Pull a request to repository - -In the last step, your need to pull a compare request between your new branch and development branch. After -finishing the pull request, the CI will be automatically set up for building test. - -### Pull requests format - -When submitting pull requests, refer to this format: - -- What this PR does / why we need it? -- Which issue this PR fixes? -- Special notes for your reviewer -- Release note - -See more about [PULL_REQUEST_TEMPLATE](.github/PULL_REQUEST_TEMPLATE.md). - -### Code style - -```TO BE DEFINED``` - - - - - - - diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index c2012b2450287d3d54be186d230e4efcf98f3f73..0000000000000000000000000000000000000000 --- a/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -FROM nginx - -MAINTAINER Edward Lee - -RUN apt-get update && \ - apt install curl -y && \ - apt-get install git -y - -ENV HUGO_VERSION=0.68.1 - -RUN mkdir -p /usr/local/src && \ - cd /usr/local/src && \ - curl -L https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz | tar -xz && \ - mv hugo /usr/local/bin/ - -COPY . /src/ -RUN cd /src/ && /usr/local/bin/hugo -b / && \ - cp -rf /src/public/* /usr/share/nginx/html/ && \ - chmod -R 755 /usr/share/nginx/html - -ENV RUN_USER nginx -ENV RUN_GROUP nginx -EXPOSE 80 -ENTRYPOINT nginx -g "daemon off;" diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64..0000000000000000000000000000000000000000 --- a/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/README-en.md b/README-en.md deleted file mode 100644 index 3715c1b9a700b9fb9986d3f39b7c48477e26da8c..0000000000000000000000000000000000000000 --- a/README-en.md +++ /dev/null @@ -1,46 +0,0 @@ -# openEuler DOCS - -### Introduction - -DOCS contains all documents of the openEuler community, including the release notes, OS installation guide, administrator guide, virtualization, container, and A-Tune user guides, and application development guide. - -### Searching for a Document in DOCS - -Open the **content** folder. The folder contains documents in Chinese (**zh** folder) and English (**en** folder). The English document is used as an example. In the **en** folder, the **docs** folder contains the content of a specific document, and the **menu** folder contains the overview of the document. -Open the **docs** folder. The relationship between guides and folders is as follows: -* **A-Tune**: *A-Tune User Guide* -* **Administrator**: *Administrator Guide* -* **ApplicationDev**: *Application Development Guide* -* **Container**: *Container User Guide* -* **Installation**: *Installation Guide* -* **Quickstart**: *Quick Start* -* **Releasenotes**: *Release Notes* -* **Virtualization**: *Virtualization Application Guide* - - -### Modifying a Document - -When the openEuler version information is updated, the documents herein also need to be updated. Thank you for providing updates. - -### Checking the Relationship Between Versions and Branches -The DOCS contains the following three branches: - -* **master**: development branch, which is the default branch -* **stable-1.0\_Base**: 1.0 Base version branch, which is displayed in **DOCS** > **1.0 BASE** on the [openEuler community website](https://openeuler.org/) -* **stable-20.03\_LTS**: 20.03 LTS version branch, which is displayed in **DOCS** > **20.03 LTS** on the [openEuler community website](https://openeuler.org/) - -### Participating in SIG -Create or reply to an issue: You can discuss an issue by creating or replying to an issue. -Submit a Pull Request (PR): You can participate in SIG by submitting a PR. -Submit comments: You can submit comments on issues or PRs. -We are always pleased to receive PRs from you. - -### Member -#### Maintainer List -- Rudy_Tan (@rudy_tan) -- amyMaYun (@amy_mayun) -- fhxing (@fhxing168) - -### Contacting Us -E-mails: dev@openeuler.org -IRC: #openeuler-doc \ No newline at end of file diff --git a/README.md b/README.md index c84d8fee9e82481d4cc330ae2c6e45ce1df7283b..8b5e85a76f86afb486fa3d8ccef3912ddb6c9676 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,66 @@ -# openEuler 文档 - -### 介绍 - -Docs包含了openEuler社区的所有文档,包括发行说明、操作系统安装,管理员指南,虚拟化和容器的使用指导,A-Tune使用指导,应用开发指导等内容。 -### 如何在Docs中查找文档 - -打开“content”文件夹,该文件夹包含了中文(“zh”文件夹)和英文(“en”文件夹)两种语言文档,以中文文档举例进行说明。 -在“zh”文件夹中,“docs”文件夹包含了具体文档的内容,“menu”包含了文档的大纲内容。 -打开“docs”文件夹,各手册和文件夹对应关系如下。 -* A-Tune文件夹对应:A-Tune用户指南 -* Adminnistration文件夹对应手册为:管理员指南 -* ApplicationDev文件夹对应手册为:应用开发指南 -* Container文件夹对应手册为:容器用户指南 -* Installation文件夹对应手册为:安装指南 -* Quickstart文件夹对应手册为:快速入门 -* Releasenotes文件夹对应手册为:发行说明 -* Virtualization文件夹对应手册为:虚拟化应用指南 - - -### 如何修改文档 - -当openEuler版本信息有刷新时,这里文档也需要刷新。很感谢您愿意提供刷新内容。 -请阅读[资料开发流程指导](https://gitee.com/lss410313/docs/wikis/Home)进行操作参考。 - -### 如何查看版本分支对应关系 -Docs包含了如下3个分支: -* master:开发分支,为默认分支。 -* stable-1.0_Base:1.0 Base版本分支,分支内容呈现在[openEuler社区](https://openeuler.org/)网站“文档->1.0 BASE。 -* stable-20.03_LTS:20.03 LTS版本分支,分支内容呈现在[openEuler社区](https://openeuler.org/)网站“文档->20.03 LTS”。 - -### 如何参与SIG -建立或回复 issue:欢迎通过建立或回复 issue 来讨论。 -提交PR:欢迎通过提交PR的方式参与SIG。具体操作方法可参考[PR提交指南](https://gitee.com/openeuler/community/blob/master/zh/contributors/pull-request.md)。 -提交评论:欢迎在issue或PR中提交评论。 -重要的事说三遍:欢迎提交 PR!欢迎提交 PR!欢迎提交 PR! - -### 成员 -#### Maintainer 列表 -- Rudy_Tan(@rudy_tan) -- amyMaYun(@amy_mayun) -- fhxing(@fhxing168) - -### 如何联系我们 -邮件列表: dev@openeuler.org +# openEuler 文档 + +[English](./README-en.md) | 简体中文 + +### 介绍 + +Docs包含了openEuler社区的所有文档,包括发行说明、操作系统安装、管理员指南、虚拟化和容器的使用指导、A-Tune使用指导和应用开发指导等内容。 + +### 如何在Docs中查找文档 + +打开“docs”文件夹,该文件夹包含了中文(“zh”文件夹)和英文(“en”文件夹)两种语言文档,以中文文档举例进行说明。 +在“zh”文件夹中,进入到目录docs/zh/docs/20.03_LTS_SP3,“docs”文件夹包含了具体文档的内容,“menu”包含了文档的大纲内容。 +打开“docs”文件夹,各手册和文件夹对应关系如下: + +| 文件夹 | 手册 | +|-----|----| +| A-Tune | A-Tune用户指南 | +| Adminnistration | 管理员指南 | +| ApplicationDev | 应用开发指南 | +| Container | 容器用户指南 | +| Installation | 安装指南 | +| Quickstart | 快速入门 | +| Releasenotes | 发行说明 | +| SecHarden | 安全加固指南 | +| Virtualization | 虚拟化应用指南 | +| userguide | openEuler工具集用户指南 | +| StratoVirt | StratoVrit虚拟化用户指南 | +| Kubernetes | Kubernetes集群部署指南 | +| HA | HA用户指南 | +| Thirdparty_migration | 第三方软件安装指南 | +| Desktop | 桌面环境用户指南 | + + + +### 如何修改文档 + +当openEuler版本信息有刷新时,这里文档也需要刷新。很感谢您愿意提供刷新内容。 +请阅读[资料开发流程指导](https://gitee.com/lss410313/docs/wikis/Home)进行操作参考。 + +### 如何查看版本分支对应关系 + +Docs当前使用如下4个分支: +| 分支 | 说明 | 内容呈现 | +|-----|----|----| +| master | 开发分支,为默认分支|| +| stable2-1.0_Base | 1.0 Base版本分支 | 分支内容呈现在[openEuler社区](https://openeuler.org/)网站“文档->1.0 BASE | +| stable2-20.03_LTS | 20.03 LTS版本分支 | 分支内容呈现在[openEuler社区](https://openeuler.org/)网站“文档->20.03 LTS | +| stable2-20.09 | 20.09 版本分支 | 分支内容呈现在[openEuler社区](https://openeuler.org/)网站“文档->20.09 | + + +### 如何参与SIG + +建立或回复 issue:欢迎通过建立或回复 issue 来讨论。 +提交PR:欢迎通过提交PR的方式参与SIG。具体操作方法可参考[PR提交指南](https://gitee.com/openeuler/community/blob/master/zh/contributors/pull-request.md)。 +提交评论:欢迎在issue或PR中提交评论。 您也可以通过网站文档页的“意见反馈”对文档进行评论。 +重要的事说三遍:欢迎提交 PR!欢迎提交 PR!欢迎提交 PR! + +### 成员 +#### Maintainer 列表 +- Rudy_Tan[@rudy_tan](https://gitee.com/rudy_tan) +- amyMaYun[@amy_mayun](https://gitee.com/amy_mayun) +- lanlanbenming[@lanlanbenming](https://gitee.com/lanlanbenming) + +### 如何联系我们 +邮件列表: doc@openeuler.org IRC: #openeuler-doc \ No newline at end of file diff --git a/archetypes/default.md b/archetypes/default.md deleted file mode 100644 index 00e77bd79be44872c0b29256b03799c2fb00c10d..0000000000000000000000000000000000000000 --- a/archetypes/default.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "{{ replace .Name "-" " " | title }}" -date: {{ .Date }} -draft: true ---- - diff --git a/assets/_custom.scss b/assets/_custom.scss deleted file mode 100644 index 9132fb60596fd0cce86d47583cba560f13bc7a95..0000000000000000000000000000000000000000 --- a/assets/_custom.scss +++ /dev/null @@ -1 +0,0 @@ -@import "variables"; diff --git a/config.toml b/config.toml deleted file mode 100644 index ffde1551e438cd8963e1682fa5d1d8645eec6c90..0000000000000000000000000000000000000000 --- a/config.toml +++ /dev/null @@ -1,68 +0,0 @@ -# hugo server --minify --themesDir ... --baseURL=http://0.0.0.0:1313/example - -baseURL = '/' -title = 'Hugo Book' -theme = 'project' -disableKinds = ['taxonomy', 'taxonomyTerm'] -# themesDir = '../..' - -# Book configuration -disablePathToLower = true -enableGitInfo = true -defaultContentLanguage = "en" -defaultContentLanguageInSubdir = false - -uglyURLs = true - -# Code highlight -# pygmentsStyle = 'monokailight' -pygmentsCodeFences = true - -[params] - # (Optional, default 6) Set how many table of contents levels to be showed on page. - # Use false to hide ToC, note that 0 will default to 6 (https://gohugo.io/functions/default/) - # You can also specify this parameter per page in front matter - BookToC = 3 - - # (Optional, default none) Set leaf bundle to render as side menu - # When not specified file structure and weights will be used - BookMenuBundle = '/menu' - - # (Optional, default docs) Specify section of content to render as menu - # You can also set value to '*' to render all sections to menu - #BookSection = 'docs' - - # (Optional) This value is duplicate of $link-color for making active link highlight in menu bundle mode - # BookMenuBundleActiveLinkColor = '\#004ed0' - - # Set source repository location. - # Used for 'Last Modified' and 'Edit this page' links. - BookRepo = 'https://gitee.com/openeuler/docs' - - # Enable "Edit this page" links for 'doc' page type. - # Disabled by default. Uncomment to enable. Requires 'BookRepo' param. - # Path must point to 'content' directory of repo. - BookEditPath = 'master/content' - - # Configure the date format used on the pages - # - In git information - # - In blog posts - BookDateFormat = 'Jan 2, 2006' - - # (Optional, default true) Enables search function with lunr.js, - # Index is built on fly, therefore it might slowdown your website. - BookSearch = true - - bookFlatSection = true - bookHidden = true - - -[languages] - -[languages.en] - languageCode = "en-us" - contentDir = "content/en" - -[languages.zh] - languageCode = "zh-cn" - contentDir = "content/zh" diff --git a/config.yaml b/config.yaml deleted file mode 100644 index 59d0ddc5a69c14e3094489dabec67dc5c68deffe..0000000000000000000000000000000000000000 --- a/config.yaml +++ /dev/null @@ -1,50 +0,0 @@ -# hugo server --minify --themesDir ... --baseURL=http://0.0.0.0:1313/example - -baseURL: https://example.com/ -title: Hugo Book -theme: hugo-book -disableKinds: ['taxonomy', 'taxonomyTerm'] -# themesDir: ../.. - -# Book configuration -disablePathToLower: true -enableGitInfo: true - -# Code highlight -# pygmentsStyle: monokailight -pygmentsCodeFences: true - -params: - # (Optional, default 6) Set how many table of contents levels to be showed on page. - # Use false/off to hide ToC, note that 0 will default to 6 (https://gohugo.io/functions/default/) - # You can also specify this parameter per page in front matter - BookToC: 3 - - # (Optional, default none) Set leaf bundle to render as side menu - # When not specified file structure and weights will be used - BookMenuBundle: /menu - - # (Optional, default docs) Specify section of content to render as menu - # You can also set value to '*' to render all sections to menu - BookSection: docs - - # (Optional) This value is duplicate of $link-color for making active link highlight in menu bundle mode - # BookMenuBundleActiveLinkColor: "\#004ed0" - - # Set source repository location. - # Used for 'Last Modified' and 'Edit this page' links. - BookRepo: https://github.com/alex-shpak/hugo-book - - # Enable "Edit this page" links for 'doc' page type. - # Disabled by default. Uncomment to enable. Requires 'BookRepo' param. - # Path must point to 'content' directory of repo. - BookEditPath: edit/master/exampleSite/content - - # Configure the date format used on the pages - # - In git information - # - In blog posts - BookDateFormat: 'Jan 2, 2006' - - # (Optional, default true) Enables search function with lunr.js, - # Index is built on fly, therefore it might slowdown your website. - BookSearch: true diff --git a/content/en/docs/A-Tune/figures/en-us_image_0227497000.png b/content/en/docs/A-Tune/figures/en-us_image_0227497000.png deleted file mode 100644 index 3df66e5f25177cba7fe65cfb859fab860bfb7b46..0000000000000000000000000000000000000000 Binary files a/content/en/docs/A-Tune/figures/en-us_image_0227497000.png and /dev/null differ diff --git a/content/en/docs/A-Tune/figures/en-us_image_0227497343.png b/content/en/docs/A-Tune/figures/en-us_image_0227497343.png deleted file mode 100644 index b614ad05d1f687b344f6bc1ff2f7e72938968aee..0000000000000000000000000000000000000000 Binary files a/content/en/docs/A-Tune/figures/en-us_image_0227497343.png and /dev/null differ diff --git a/content/en/docs/A-Tune/getting-to-know-a-tune.md b/content/en/docs/A-Tune/getting-to-know-a-tune.md deleted file mode 100644 index 03415ded0cdc5fe96a42f1d872a45dde1ede6c4d..0000000000000000000000000000000000000000 --- a/content/en/docs/A-Tune/getting-to-know-a-tune.md +++ /dev/null @@ -1,179 +0,0 @@ -# Getting to Know A-Tune - -- [Getting to Know A-Tune](#getting-to-know-a-tune) - - [Introduction](#introduction) - - [Architecture](#architecture) - - [Supported Features and Service Models](#supported-features-and-service-models) - - - -## Introduction - -An operating system \(OS\) is basic software that connects applications and hardware. It is critical for users to adjust OS and application configurations and make full use of software and hardware capabilities to achieve optimal service performance. However, numerous workload types and varied applications run on the OS, and the requirements on resources are different. Currently, the application environment composed of hardware and software involves more than 7000 configuration objects. As the service complexity and optimization objects increase, the time cost for optimization increases exponentially. As a result, optimization efficiency decreases sharply. Optimization becomes complex and brings great challenges to users. - -Second, as infrastructure software, the OS provides a large number of software and hardware management capabilities. The capability required varies in different scenarios. Therefore, capabilities need to be enabled or disabled depending on scenarios, and a combination of capabilities will maximize the optimal performance of applications. - -In addition, the actual business embraces hundreds and thousands of scenarios, and each scenario involves a wide variety of hardware configurations for computing, network, and storage. The lab cannot list all applications, business scenarios, and hardware combinations. - -To address the preceding challenges, openEuler launches A-Tune. - -A-Tune is an AI-based engine that optimizes system performance. It uses AI technologies to precisely profile business scenarios, discover and infer business characteristics, so as to make intelligent decisions, match with the optimal system parameter configuration combination, and give recommendations, ensuring the optimal business running status. - -![](figures/en-us_image_0227497000.png) - -## Architecture - -The following figure shows the A-Tune core technical architecture, which consists of intelligent decision-making, system profile, and interaction system. - -- Intelligent decision-making layer: consists of the awareness and decision-making subsystems, which implements intelligent awareness of applications and system optimization decision-making, respectively. -- System profile layer: consists of the labeling and learning subsystems. The labeling subsystem is used to cluster service models, and the learning subsystem is used to learn and classify service models. -- Interaction system layer: monitors and configures various system resources and executes optimization policies. - -![](figures/en-us_image_0227497343.png) - -## Supported Features and Service Models - -### Supported Features - -[Table 1](#table1919220557576) describes the main features supported by A-Tune, feature maturity, and usage suggestions. - -**Table 1** Feature maturity - - - - - - - - - - - - - - - - - - - - -

Feature

-

Maturity

-

Usage Suggestion

-

Auto optimization of 11 applications in seven workload types

-

Tested

-

Pilot

-

User-defined workload types and service models

-

Tested

-

Pilot

-

Automatic parameter optimization

-

Tested

-

Pilot

-
- -### Supported Service Models - -Based on the workload characteristics of applications, A-Tune classifies services into seven types. For details about the workload characteristics of each type and the applications supported by A-Tune, see [Table 2](#table2819164611311). - -**Table 2** Supported workload types and applications - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Workload

-

Type

-

Workload Characteristic

-

Supported Application

-

default

-

Default type

-

The usage of CPU, memory bandwidth, network, and I/O resources is low.

-

N/A

-

webserver

-

HTTPS application

-

The CPU usage is high.

-

Nginx

-

big_database

-

Database

-
  • Relational database

    Read: The usage of CPU, memory bandwidth, and network is high.

    -

    Write: The usage of I/O is high.

    -
-
  • Non-relational database

    The usage of CPU and I/O is high.

    -
-

MongoDB, MySQL, PostgreSQL, and MariaDB

-

big_data

-

Big data

-

The usage of CPU and I/O is high.

-

Hadoop and Spark

-

in-memory_computing

-

Memory-intensive application

-

The usage of CPU and memory bandwidth is high.

-

SPECjbb2015

-

in-memory_database

-

Computing- and network-intensive application

-

The usage of a single-core CPU is high, and the network usage is high in multi-instance scenarios.

-

Redis

-

single_computer_intensive_jobs

-

Computing-intensive application

-

The usage of a single-core CPU is high, and the usage of memory bandwidth of some subitems is high.

-

SPECCPU2006

-

communication

-

Network-intensive application

-

The usage of CPU and network is high.

-

Dubbo

-

idle

-

System in idle state

-

The system is in idle state and no applications are running.

-

N/A

-
- diff --git a/content/en/docs/Administration/faqs.md b/content/en/docs/Administration/faqs.md deleted file mode 100644 index 5fc145d13b938d547d649182d524a22e2eb9c73d..0000000000000000000000000000000000000000 --- a/content/en/docs/Administration/faqs.md +++ /dev/null @@ -1,164 +0,0 @@ -# FAQs - - -- [FAQs](#faqs) - - [Why Is the Memory Usage of the libvirtd Service Queried by Running the systemctl and top Commands Different?](#why-is-the-memory-usage-of-the-libvirtd-service-queried-by-running-the-systemctl-and-top-commands-different) - - [An Error Occurs When stripsize Is Set to 4 During RAID 0 Volume Configuration](#an-error-occurs-when-stripsize-is-set-to-4-during-raid-0-volume-configuration) - - [Failed to Compile MariaDB Using rpmbuild](#failed-to-compile-mariadb-using-rpmbuild) - - [Failed to Start the SNTP Service Using the Default Configuration](#failed-to-start-the-sntp-service-using-the-default-configuration) - - [Installation Failure Caused by Software Package Conflict, File Conflict, or Missing Software Package](#installation-failure-caused-by-software-package-conflict-file-conflict-or-missing-software-package) - - -## 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. - -## 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. - -## 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: - -``` -+ 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: - -``` -%global runtest 1 -``` - -After the modification: - -``` -%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. - -## 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**. - -## 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\): - -``` -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\): - -``` -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: - -``` -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. - - ``` - # 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. - - ``` - # 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. - - ``` - # dnf remove python2-blivet-1:3.1.1-5.noarch - ``` - - - Add the **\-\-allowerasing** parameter when upgrading the software package. - - ``` - # yum update blivet-data-1:3.1.1-5.noarch -y --allowerasing - ``` - -3. Perform the upgrade again. diff --git "a/content/en/docs/Container/figures/\345\256\211\345\205\250\345\256\271\345\231\250\346\241\206\346\236\2661.png" "b/content/en/docs/Container/figures/\345\256\211\345\205\250\345\256\271\345\231\250\346\241\206\346\236\2661.png" deleted file mode 100644 index 2e8b48bdbd0766ec513e0654212cd16613eff826..0000000000000000000000000000000000000000 Binary files "a/content/en/docs/Container/figures/\345\256\211\345\205\250\345\256\271\345\231\250\346\241\206\346\236\2661.png" and /dev/null differ diff --git a/content/en/docs/Installation/figures/adding-the-inst-noverifyssl-parameter.png b/content/en/docs/Installation/figures/adding-the-inst-noverifyssl-parameter.png deleted file mode 100644 index f56a7dd0c45acf8a4c3a735ed623eaccd19bfaef..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/adding-the-inst-noverifyssl-parameter.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/advanced-user-configuration.png b/content/en/docs/Installation/figures/advanced-user-configuration.png deleted file mode 100644 index c7d708ba1b466b514c978b738f67b15723f8bc2e..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/advanced-user-configuration.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/completing-the-installation.png b/content/en/docs/Installation/figures/completing-the-installation.png deleted file mode 100644 index 6e7fb79328124e1eb03d7c2aa57d4bcb3b592d3c..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/completing-the-installation.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/creating-a-user.png b/content/en/docs/Installation/figures/creating-a-user.png deleted file mode 100644 index 8203597a9f82d2aac03987fd9c381d55eb6b40c8..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/creating-a-user.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/disk-encryption-password.png b/content/en/docs/Installation/figures/disk-encryption-password.png deleted file mode 100644 index ba84e060133644910ff199376e11d2929cfe8d47..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/disk-encryption-password.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/error-message.png b/content/en/docs/Installation/figures/error-message.png deleted file mode 100644 index 0349567af5b1695a611b8c32219b469bcf2170e8..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/error-message.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/installation-process.png b/content/en/docs/Installation/figures/installation-process.png deleted file mode 100644 index 202ef0ce7f371417d6371867c1f3bfff6d07cd91..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/installation-process.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/installation-summary.png b/content/en/docs/Installation/figures/installation-summary.png deleted file mode 100644 index d74f2eeae91338c4e8a9a9c03b19361df89ac388..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/installation-summary.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/installation-wizard.png b/content/en/docs/Installation/figures/installation-wizard.png deleted file mode 100644 index 0ee099a675eee71fdeb3ba3ad0f30e0be20d7af3..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/installation-wizard.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/manual-partitioning-page.png b/content/en/docs/Installation/figures/manual-partitioning-page.png deleted file mode 100644 index c14540e86c178f28d34be24eebd8c487ca377783..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/manual-partitioning-page.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/password-of-the-root-account.png b/content/en/docs/Installation/figures/password-of-the-root-account.png deleted file mode 100644 index 16f77d9ce59c0bf082915c2e958513fcc6244af9..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/password-of-the-root-account.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/selecting-a-language.png b/content/en/docs/Installation/figures/selecting-a-language.png deleted file mode 100644 index 2f41e205b0c8f97eee950e8ce3f44b953f1c2c71..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/selecting-a-language.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/selecting-installation-software.png b/content/en/docs/Installation/figures/selecting-installation-software.png deleted file mode 100644 index 79ea7b97705c91af1fa6cd8fb47a0a15fa3607cf..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/selecting-installation-software.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/semi-automatic-installation.png b/content/en/docs/Installation/figures/semi-automatic-installation.png deleted file mode 100644 index dcdfb60e3e77594c59cfbaaece61881347cd4032..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/semi-automatic-installation.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/setting-a-system-language.png b/content/en/docs/Installation/figures/setting-a-system-language.png deleted file mode 100644 index 79f6d5b959abaa20d077e3d0d82a2cb05bc428d6..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/setting-a-system-language.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/setting-date-and-time.png b/content/en/docs/Installation/figures/setting-date-and-time.png deleted file mode 100644 index 9a18de4816560da52bd5e6f6a5d8c0f1a0ddde13..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/setting-date-and-time.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/setting-the-installation-destination.png b/content/en/docs/Installation/figures/setting-the-installation-destination.png deleted file mode 100644 index 7dd9ba0fd65069492156fc31d3b9adbc7965de98..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/setting-the-installation-destination.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/setting-the-installation-source.png b/content/en/docs/Installation/figures/setting-the-installation-source.png deleted file mode 100644 index 94990f7c3071d7153203a2d75cf6632b1505beda..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/setting-the-installation-source.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/setting-the-keyboard-layout.png b/content/en/docs/Installation/figures/setting-the-keyboard-layout.png deleted file mode 100644 index 9aa9d72da79ca7d89c36949926ff272edc83592c..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/setting-the-keyboard-layout.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/setting-the-network-and-host-name.png b/content/en/docs/Installation/figures/setting-the-network-and-host-name.png deleted file mode 100644 index ddfb08fac47b8b4681cca2f5ce18c4258f365ac0..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/setting-the-network-and-host-name.png and /dev/null differ diff --git a/content/en/docs/Installation/figures/starting-installation.png b/content/en/docs/Installation/figures/starting-installation.png deleted file mode 100644 index fb9ca40b29b63430744920c88e8069a92a3d2ff2..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Installation/figures/starting-installation.png and /dev/null differ diff --git a/content/en/docs/Installation/installation-preparations.md b/content/en/docs/Installation/installation-preparations.md deleted file mode 100644 index d2c7c150e474250a861a0d9f47c4869ecb53600d..0000000000000000000000000000000000000000 --- a/content/en/docs/Installation/installation-preparations.md +++ /dev/null @@ -1,255 +0,0 @@ -# Installation Preparations - -This section describes the compatibility of the hardware and software and the related configurations and preparations required for the installation. - - - -- [Installation Preparations](#installation-preparations) - - [Obtaining the Installation Source](#obtaining-the-installation-source) - - [Release Package Integrity Check](#release-package-integrity-check) - - [Introduction](#introduction) - - [Prerequisites](#prerequisites) - - [Procedure](#procedure) - - [Installation Requirements for PMs](#installation-requirements-for-pms) - - [Hardware Compatibility](#hardware-compatibility) - - [Minimum Hardware Specifications](#minimum-hardware-specifications) - - [Installation Requirements for VMs](#installation-requirements-for-vms) - - [Virtualization Platform Compatibility](#virtualization-platform-compatibility) - - [Minimum Virtualization Space](#minimum-virtualization-space) - - - -## Obtaining the Installation Source - -Obtain the openEuler release package and verification file before the installation. - -Perform the following operations to obtain the openEuler release package: - -1. Log in to the [openEuler Community](https://openeuler.org) website. -2. Click **Download**. -3. Click the link provided after **Download ISO**. The download list is displayed. -4. Click **openEuler-20.03-LTS**. The openEuler 20.03 LTS version download list is displayed. -5. Click **ISO**. The ISO download list is displayed. - - **aarch64**: ISO image file of the AArch64 architecture - - **x86\_64**: ISO image file of the x86\_64 architecture - - **source**: ISO image file of the openEuler source code - -6. Select the openEuler release package and verification file to be downloaded based on the architecture of the environment to be installed. - - If the AArch64 architecture is used: - 1. Click **aarch64**. - 2. Click **openEuler-20.03-LTS-aarch64-dvd.iso** to download the openEuler release package to the local host. - 3. Click **openEuler-20.03-LTS-aarch64-dvd.iso.sha256sum** to download the openEuler verification file to the local host. - - - If the x86\_64 architecture is used: - 1. Click **x86\_64**. - 2. Click **openEuler-20.03-LTS-x86\_64-dvd.iso** to download the openEuler release package to the local host. - 3. Click **openEuler-20.03-LTS-x86\_64-dvd.iso.sha256sum** to download the openEuler verification file to the local host. - -## Release Package Integrity Check - ->![](C:/Users/Administrator/Downloads/openDocs/docs/content/en/docs/Installation/public_sys-resources/icon-note.gif) **NOTE:** ->This section describes how to verify the integrity of the release package in the AArch64 architecture. The procedure for verifying the integrity of the release package in the x86\_64 architecture is the same. - -### Introduction - -To prevent the software package from being incompletely downloaded due to network or storage device faults during transmission, you need to verify the integrity of the software package after obtaining it. Only the software packages that pass the verification can be installed. - -Compare the verification value recorded in the verification file with the .iso file verification value calculated manually to check whether the software package passes the verification. If the verification values are consistent, the .iso file is not damaged. If they are inconsistent, you can confirm that the file is damaged and you need to obtain the file again. - -### Prerequisites - -Before verifying the integrity of the release package, you need to prepare the following files: - -ISO file: **openEuler-20.03-LTS-aarch64-dvd.iso** - -Verification file: **openEuler-20.03-LTS-aarch64-dvd.iso.sha256sum** - -### Procedure - -To verify the file integrity, perform the following operations: - -1. Obtain the verification value in the verification file. Run the following command: - - ``` - #cat openEuler-20.03-LTS-aarch64-dvd.iso.sha256sum - ``` - -2. Calculate the SHA256 verification value of the file. Run the following command: - - ``` - #sha256sum openEuler-20.03-LTS-aarch64-dvd.iso - ``` - - After the command is run, the verification value is displayed. - -3. Check whether the values calculated in step 1 and step 2 are consistent. - - If the verification values are consistent, the .iso file is not damaged. If they are inconsistent, you can confirm that the file is damaged and you need to obtain the file again. - -## Installation Requirements for PMs - -To install the openEuler OS on a PM, the PM must meet the following hardware compatibility and minimum hardware requirements. - -### Hardware Compatibility - -You need to take hardware compatibility into account during openEuler installation. [Table 1](#table14948632047) describes the types of supported servers. - ->![](C:/Users/Administrator/Downloads/openDocs/docs/content/en/docs/Installation/public_sys-resources/icon-note.gif) **NOTE:** -> ->- TaiShan 200 servers are backed by Huawei Kunpeng 920 processors. ->- Currently, only Huawei TaiShan and FusionServer Pro servers are supported. More servers from other vendors will be supported in the future. - -**Table 1** Supported servers - - - - - - - - - - - - - - - - - -

Server Type

-

Server Name

-

Server Model

-

Rack server

-

TaiShan 200

-

2280 balanced model

-

Rack server

-

FusionServer Pro

-

FusionServer Pro 2288H V5

-
NOTE:

The server must be configured with the Avago SAS3508 RAID controller card and the LOM-X722 NIC.

-
-
- -### Minimum Hardware Specifications - -[Table 2](#tff48b99c9bf24b84bb602c53229e2541) lists the minimum hardware specifications supported by openEuler. - -**Table 2** Minimum hardware specifications - - - - - - - - - - - - - - - - - - - - - - - - - -

Component

-

Minimum Hardware Specifications

-

Description

-

Architecture

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

CPU

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

-

-

Memory

-

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

-

-

-

Hard disk

-

≥ 120 GB (for better user experience)

-

The hard disk supports IDE, SATA, SAS interfaces.

-
- -## Installation Requirements for VMs - -To install the openEuler OS on a VM, the VM must meet the following hardware compatibility and minimum hardware requirements. - -### Virtualization Platform Compatibility - -When installing openEuler, pay attention to the compatibility of the virtualization platform. Currently, the following virtualization platforms are supported: - -- A virtualization platform created by the virtualization components \(openEuler as the host OS and QEMU and KVM provided in the release package\) of openEuler -- x86 virtualization platform of Huawei public cloud - -### Minimum Virtualization Space - -[Table 3](#tff48b99c9bf24b84bb602c53229e2541) lists the minimum virtualization space required by openEuler. - -**Table 3** Minimum virtualization space - - - - - - - - - - - - - - - - - - - - - - - - - -

Component

-

Minimum Virtualization Space

-

Description

-

Architecture

-
  • AArch64
  • x86_64
-

-

-

CPU

-

Two CPUs

-

-

-

Memory

-

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

-

-

-

Hard disk

-

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

-

-

-
- - - - - - - - - - - - - - - - - - - diff --git a/content/en/docs/Quickstart/figures/advanced-user-configuration.png b/content/en/docs/Quickstart/figures/advanced-user-configuration.png deleted file mode 100644 index c7d708ba1b466b514c978b738f67b15723f8bc2e..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Quickstart/figures/advanced-user-configuration.png and /dev/null differ diff --git a/content/en/docs/Quickstart/figures/completing-the-installation.png b/content/en/docs/Quickstart/figures/completing-the-installation.png deleted file mode 100644 index 6e7fb79328124e1eb03d7c2aa57d4bcb3b592d3c..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Quickstart/figures/completing-the-installation.png and /dev/null differ diff --git a/content/en/docs/Quickstart/figures/creating-a-user.png b/content/en/docs/Quickstart/figures/creating-a-user.png deleted file mode 100644 index 8203597a9f82d2aac03987fd9c381d55eb6b40c8..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Quickstart/figures/creating-a-user.png and /dev/null differ diff --git a/content/en/docs/Quickstart/figures/installation-summary.png b/content/en/docs/Quickstart/figures/installation-summary.png deleted file mode 100644 index d74f2eeae91338c4e8a9a9c03b19361df89ac388..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Quickstart/figures/installation-summary.png and /dev/null differ diff --git a/content/en/docs/Quickstart/figures/installation-wizard.png b/content/en/docs/Quickstart/figures/installation-wizard.png deleted file mode 100644 index 0ee099a675eee71fdeb3ba3ad0f30e0be20d7af3..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Quickstart/figures/installation-wizard.png and /dev/null differ diff --git a/content/en/docs/Quickstart/figures/password-of-the-root-account.png b/content/en/docs/Quickstart/figures/password-of-the-root-account.png deleted file mode 100644 index 16f77d9ce59c0bf082915c2e958513fcc6244af9..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Quickstart/figures/password-of-the-root-account.png and /dev/null differ diff --git a/content/en/docs/Quickstart/figures/selecting-a-language.png b/content/en/docs/Quickstart/figures/selecting-a-language.png deleted file mode 100644 index 2f41e205b0c8f97eee950e8ce3f44b953f1c2c71..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Quickstart/figures/selecting-a-language.png and /dev/null differ diff --git a/content/en/docs/Quickstart/figures/selecting-installation-software.png b/content/en/docs/Quickstart/figures/selecting-installation-software.png deleted file mode 100644 index 79ea7b97705c91af1fa6cd8fb47a0a15fa3607cf..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Quickstart/figures/selecting-installation-software.png and /dev/null differ diff --git a/content/en/docs/Quickstart/figures/setting-the-installation-destination.png b/content/en/docs/Quickstart/figures/setting-the-installation-destination.png deleted file mode 100644 index 7dd9ba0fd65069492156fc31d3b9adbc7965de98..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Quickstart/figures/setting-the-installation-destination.png and /dev/null differ diff --git a/content/en/docs/Quickstart/figures/starting-installation.png b/content/en/docs/Quickstart/figures/starting-installation.png deleted file mode 100644 index fb9ca40b29b63430744920c88e8069a92a3d2ff2..0000000000000000000000000000000000000000 Binary files a/content/en/docs/Quickstart/figures/starting-installation.png and /dev/null differ diff --git a/content/en/docs/Quickstart/quick-start.md b/content/en/docs/Quickstart/quick-start.md deleted file mode 100644 index aec39101da082efdc375548a4fe42db476f92dfa..0000000000000000000000000000000000000000 --- a/content/en/docs/Quickstart/quick-start.md +++ /dev/null @@ -1,338 +0,0 @@ -# Quick Start - -This document uses openEuler 20.03 LTS installed on the TaiShan 200 server as an example to describe how to quickly install and use openEuler OS. For details about the installation requirements and methods, see [openEuler 20.03 LTS Installation Guide](https://openeuler.org/en/docs/20.03_LTS/docs/Installation/Installation.html). - - -- [Quick Start](#quick-start) - - [Installation Preparations](#installation-preparations) - - [Obtaining the Installation Source](#obtaining-the-installation-source) - - [Release Package Integrity Check](#release-package-integrity-check) - - [Starting the Installation](#starting-the-installation) - - [Installation](#installation) - - [Viewing System Information](#viewing-system-information) - - - -## Installation Preparations - -- Hardware Compatibility - - [Table 1](#table14948632047) describes the types of supported servers. - - **Table 1** Supported servers - - - - - - - - - - - - - - - - -

Server Type

-

Server Name

-

Server Model

-

Rack server

-

TaiShan 200

-

2280 balanced model

-

Rack server

-

FusionServer Pro

-

FusionServer Pro 2288H V5

-
NOTE:

The server must be configured with the Avago SAS3508 RAID controller card and the LOM-X722 NIC.

-
-
- -- Minimum Hardware Specifications - - [Table 2](#tff48b99c9bf24b84bb602c53229e2541) lists the minimum hardware specifications supported by openEuler. - - **Table 2** Minimum hardware specifications - - - - - - - - - - - - - - - - - - - - - - - - -

Component

-

Minimum Hardware Specifications

-

Description

-

Architecture

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

CPU

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

-

-

Memory

-

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

-

-

-

Hard disk

-

≥ 120 GB (for better user experience)

-

The hard disk supports IDE, SATA, SAS interfaces.

-
- - -## Obtaining the Installation Source - -Perform the following operations to obtain the openEuler release package: - -1. Log in to the [openEuler Community](https://openeuler.org) website. -2. Click **Download**. -3. Click the link provided after **Download ISO**. The download list is displayed. -4. Click **openEuler-20.03-LTS**. The openEuler 20.03 LTS version download list is displayed. -5. Click **ISO**. The ISO download list is displayed. - - **aarch64**: ISO image file of the AArch64 architecture - - **x86\_64**: ISO image file of the x86\_64 architecture - - **source**: ISO image file of the openEuler source code - -6. Select the openEuler release package and verification file to be downloaded based on the architecture of the environment to be installed. - - If the AArch64 architecture is used: - 1. Click **aarch64**. - 2. Click **openEuler-20.03-LTS-aarch64-dvd.iso** to download the openEuler release package to the local host. - 3. Click **openEuler-20.03-LTS-aarch64-dvd.iso.sha256sum** to download the openEuler verification file to the local host. - - - If the x86\_64 architecture is used: - 1. Click **x86\_64**. - 2. Click **openEuler-20.03-LTS-x86\_64-dvd.iso** to download the openEuler release package to the local host. - 3. Click **openEuler-20.03-LTS-x86\_64-dvd.iso.sha256sum** to download the openEuler verification file to the local host. - - - -## Release Package Integrity Check - -To prevent incomplete download of the software package due to network or storage device problems during the transmission, you can perform the following steps to check the integrity of the obtained openEuler software package: - -1. Obtain the verification value in the verification file. Run the following command: - - ``` - #cat openEuler-20.03-LTS-aarch64-dvd.iso.sha256sum - ``` - -2. Calculate the SHA256 verification value of the file. Run the following command: - - ``` - #sha256sum openEuler-20.03-LTS-aarch64-dvd.iso - ``` - - After the command is run, the verification value is displayed. - -3. Check whether the values calculated in step 1 and step 2 are consistent. - - If the verification values are consistent, the .iso file is not damaged. If they are inconsistent, you can confirm that the file is damaged and you need to obtain the file again. - - -## Starting the Installation - -1. Log in to the iBMC WebUI. - - For details, see [TaiShan 200 Server User Guide \(Model 2280\)](https://support.huawei.com/enterprise/en/doc/EDOC1100093459). - -2. Choose **Configuration** from the main menu, and select **Boot Device** from the navigation tree. The **Boot Device** page is displayed. - - Set **Effective** and **Boot Medium** to **One-time** and **DVD-ROM**, respectively, and click **Save**, as shown in [Figure 1](#fig1011938131018). - - **Figure 1** Setting the boot device - ![](figures/setting-the-boot-device.png "setting-the-boot-device") - -3. Choose **Remote Console** from the main menu. The **Remote Console** page is displayed. - - Select an integrated remote console as required to access the remote virtual console, for example, **Java Integrated Remote Console \(Shared\)**. - -4. On the toolbar, click the icon shown in the following figure. - - **Figure 2** Drive icon - ![](figures/drive-icon.png "drive-icon") - - An image dialog box is displayed, as shown in the following figure. - - **Figure 3** Image dialog box - ![](figures/image-dialog-box.png "image-dialog-box") - -5. Select **Image File** and then click **Browse**. The **Open** dialog box is displayed. -6. Select the image file and click **Open**. In the image dialog box, click **Connect**. If **Connect** changes to **Disconnect**, the virtual CD/DVD-ROM drive is connected to the server. -7. On the toolbar, click the restart icon shown in the following figure to restart the device. - - **Figure 4** Restart icon - ![](figures/restart-icon.png "restart-icon") - -8. A boot menu is displayed after the system restarts, as shown in [Figure 5](#fig1648754873314). - - >![](public_sys-resources/icon-note.gif) **NOTE:** - >- If you do not perform any operations within 1 minute, the system automatically selects the default option **Test this media & install openEuler 20.03 LTS** and enters the installation page. - >- During PM installation, if you cannot use the arrow keys to select boot options and the system does not respond after you press **Enter**, click ![](figures/en-us_image_0229420473.png) on the BMC page and configure **Key & Mouse Reset**. - - **Figure 5** Installation Wizard - - -9. On the installation wizard page, press **Enter** to select the default option **Test this media & install openEuler 20.03 LTS** to enter the GUI installation page. - -## Installation - -After entering the GUI installation page, perform the following operations to install the system: - -1. Set an installation language. The default language is English. You can change the language based on the site requirements, as shown in [Figure 6](#fig874344811484). - - **Figure 6** Selecting a language - - -2. On the **INSTALLATION SUMMARY** page, set configuration items based on the site requirements. - - - A configuration item with an alarm symbol must be configured. When the alarm symbol disappears, you can perform the next operation. - - A configuration item without an alarm symbol is configured by default. - - You can click **Begin Installation** to install the system only when all alarms are cleared. - - **Figure 7** Installation summary - - - 1. Select **Software Selection** to set configuration items. - - Based on the site requirements, select **Minimal Install** on the left box and select an add-on in the **Add-Ons for Selected Environment** area on the right, as shown in [Figure 8](#fig1133717611109). - - **Figure 8** Selecting installation software - - - >![](public_sys-resources/icon-note.gif) **NOTE:** - >- In **Minimal Install** mode, not all packages in the installation source will be installed. If the required package is not installed, you can mount the installation source to the local PC and configure a repo source, and use DNF to install the package. - >- If you select **Virtual Host**, the virtualization components QEMU, libvirt, and edk2 are installed by default. You can select whether to install the OVS component in the add-on area. - - After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. - - 2. Select **Installation Destination** to set configuration items. - - On the **INSTALLATION DESTINATION** page, select a local storage device. - - >![](public_sys-resources/icon-notice.gif) **NOTICE:** - >When selecting the device to be installed, you are advised not to use the NVMe SSD storage medium as the OS installation disk. - - You also need to configure the storage to partition the system. You can either manually configure partitions or select **Automatic** to automatically configure partitioning. Select **Automatic** if the software is installed in a new storage device or the data in the storage device is not required, as shown in [Figure 9](#fig153381468101). - - **Figure 9** Setting the installation destination - - - >![](public_sys-resources/icon-note.gif) **NOTE:** - >- During partitioning, to ensure system security and performance, you are advised to divide the device into the following partitions: **/boot**, **/var**, **/var/log**, **/var/log/audit**, **/home**, and **/tmp**. - >- If the system is configured with the swap partition, the swap partition is used when the physical memory of the system is insufficient. Although the swap partition can be used to expand the physical memory, if the swap partition is used due to insufficient memory, the system response slows and the system performance deteriorates. Therefore, you are not advised to configure the swap partition in the system with sufficient physical memory or the performance sensitive system. - >- If you need to split a logical volume group, select **Custom** to manually partition the logical volume group. On the **MANUAL PARTITIONING** page, click **Modify** in the **Volume Group** area to reconfigure the logical volume group. - - After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. - - 3. Set other configuration items. You can use the default values for other configuration items. - -3. Click **Begin Installation** to install the system, as shown in [Figure 10](#fig1717019357392). - - **Figure 10** Starting installation - - -4. Set the root user password. - - Click **Root Password**. In the displayed dialog box, as shown in [Figure 11](#en-us_topic_0186390266_en-us_topic_0122145909_fig1323165793018), enter a password and re-enter to confirm. - - >![](public_sys-resources/icon-note.gif) **NOTE:** - >The **root** password must be configured when you install software packages. Otherwise, the installation will fail. A **root** account is used for performing critical system administration tasks. It is not recommended to use this account for daily work or system access. - - The password of the **root** user must meet the password complexity requirements. Otherwise, the password configuration or user creation will fail. The password complexity requirements are as follows: - - - A password must contain at least eight characters. - - A password must contain at least three of the following types: uppercase letters, lowercase letters, digits, and special characters. - - A password must be different from the account name. - - A password cannot contain words in the dictionary. - - >![](public_sys-resources/icon-note.gif) **NOTE:** - > In the installed openEuler environment, you can run the `cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt` command to export the dictionary library file **dictionary.txt**, and then check whether the password is in the dictionary. - - **Figure 11** Password of the **root** account - - -5. Create a user. - - Click **User Creation**. [Figure 12](#en-us_topic_0186390266_en-us_topic_0122145909_fig1237715313319) shows the page for creating a user. Enter a username and set a password. The password complexity requirements are the same as those of the user **root**. By clicking **Advanced**, you can also configure a home directory and a user group, as shown in [Figure 13](#en-us_topic_0186390266_en-us_topic_0122145909_fig128716531312). - - **Figure 12** Creating a user - - - **Figure 13** Advanced user configuration - - - After configuration, click **Done** in the left-upper corner to switch back to the installation process page. - -6. After the installation is complete, restart the system. - - openEuler has been installed, as shown in [Figure 14](#en-us_topic_0186390267_en-us_topic_0122145917_fig1429512116338). Click **Reboot** to restart the system. - - **Figure 14** Completing the installation - - - -## Viewing System Information - -After the system is installed and restarted, the system CLI login page is displayed. Enter the username and password set during the installation to log in to openEuler OS and view the following system information. For details about system management and configuration, see the [openEuler 20.03 LTS Administrator Guide](https://openeuler.org/en/docs/20.03_LTS/docs/Administration/administration.html). - -- Run the following command to view the system information: - - ``` - cat /etc/os-release - ``` - - For example, the command and output are as follows: - - ``` - # cat /etc/os-release - NAME="openEuler" - VERSION="20.09" - ID="openEuler" - VERSION_ID="20.09" - PRETTY_NAME="openEuler 20.09" - ANSI_COLOR="0;31" - ``` - -- View system resource information. - - Run the following command to view the CPU information: - - ``` - lscpu - ``` - - Run the following command to view the memory information: - - ``` - free - ``` - - Run the following command to view the disk information: - - ``` - fdisk -l - ``` - -- Run the following command to view the IP address: - - ``` - ip addr - ``` - - diff --git a/content/en/docs/Releasenotes/common-vulnerabilities-and-exposures-(cve).md b/content/en/docs/Releasenotes/common-vulnerabilities-and-exposures-(cve).md deleted file mode 100644 index eadc4c0a4ef5e520bd7666df52848975ff96247d..0000000000000000000000000000000000000000 --- a/content/en/docs/Releasenotes/common-vulnerabilities-and-exposures-(cve).md +++ /dev/null @@ -1,4 +0,0 @@ -# Common Vulnerabilities and Exposures \(CVE\) - -For CVE involved in the version, see the [CVE list](https://cve.openeuler.org/#/CVE). - diff --git a/content/en/docs/Releasenotes/installing-the-os.md b/content/en/docs/Releasenotes/installing-the-os.md deleted file mode 100644 index bf34200af0a9f62c2c345a42b8f31b24253346d0..0000000000000000000000000000000000000000 --- a/content/en/docs/Releasenotes/installing-the-os.md +++ /dev/null @@ -1,193 +0,0 @@ -# Installing the OS - -## Release Package - -The following table lists the [openEuler release files](http://repo.openeuler.org/openEuler-20.03-LTS/), including the ISO release package, container image, VM image, and repo source that is used online. - -**Table 1** openEuler release files - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DirectoryTypeDescription
ISOISO release packageThe directory differentiates the ISO release packages for the AArch64, x86, and source, respectively. The details are as follows: -
    -
  • openEuler-20.03-LTS-aarch64-dvd.iso and openEuler-20.03-LTS-x86_64-dvd.iso are the openEuler basic installation software package ISO files for the AArch64 and x86 architectures, respectively. The ISO files contain basic components running on the openEuler OS and meet the basic requirements of developers.
  • -
  • openEuler-20.03-LTS-everything-aarch64-dvd.iso and openEuler-20.03-LTS-everything-x86_64-dvd.iso are the openEuler full software package ISO files for the AArch64 and x86 architectures, respectively. In addition to all software in the openEuler basic installation software package, the ISO files also contain the software packages that have been verified in the openEuler community, which meet the advanced requirements of developers.
  • -
  • openEuler-20.03-LTS-debuginfo-aarch64-dvd.iso and openEuler-20.03-LTS-debuginfo-x86_64-dvd.iso are the openEuler debugging software package ISO files for the AArch64 and x86 architectures, respectively. The ISO files contain the symbol table information required for debugging and are used for debugging software functions and performance.
  • -
  • openEuler-20.03-LTS-source-dvd.iso is the ISO file that contains all source code software packages of the openEuler community, which is used offline by developers.
  • -
-
Note: -

Each ISO release package has its own verification file, which is used to verify the integrity of the ISO release package.

-
-
docker_imgContainer imageThe openEuler container image, which provides only the basic bash environment, is used as the basic container image. The directory differentiates the container images for the AArch64 and x86 architectures, respectively. -
Note: -

Each container image has its own verification file, which is used to verify the integrity of the container image.

-
-
virtual_machine_imgVM image

The openEuler VM image provides only the basic running environment to shorten the VM deployment time. The directory differentiates the VM images for the AArch64 and x86 architectures, respectively.

-
说明: -
-
    -
  • The default password of the root user of the VM image is openEuler12#$. Change the password upon the first login.
  • -
  • Each VM image has its own verification file, which is used to verify the integrity of the VM image.
  • -
-
-
-
EPOLRepo sourceThe repo sources of the openEuler third-party software package are mainly contributed by third parties and communities, and are maintained by the providers. The directory differentiates the repo sources for the AArch64 and x86 architectures, respectively.
OSThe repo source of the openEuler basic installation software package provides the offline version upgrade function. The content of the software package is the same as that of the basic installation software package ISO in the ISO release package. The directory differentiates the repo sources for the AArch64 and x86 architectures, respectively.
debuginfoThe repo source of the openEuler debugging software package provides the online download function. The content of the software package is the same as that of the debugging software package ISO in the ISO release package. The directory differentiates the repo sources for the AArch64 and x86 architectures, respectively.
everythingThe repo source of the openEuler full software package provides the online download and version upgrade functions. The content of the software package is the same as that of the full software package ISO in the ISO release package. The directory differentiates the repo sources for the AArch64 and x86 architectures, respectively.
extrasThe repo source of the openEuler extended software package is used to release new software packages with added features. The directory differentiates the repo sources for the AArch64 and x86 architectures, respectively.
sourceThe repo source of all source code software packages in the openEuler community, which is used online by developers.
updateThe repo source of the openEuler upgrade software package, which is used to fix bugs and common vulnerabilities and exposures (CVE) in released versions and to update and release software with enhancements. It provides online download and software upgrade functions. The directory differentiates the repo sources for the AArch64 and x86 architectures, respectively.
- - - -## Minimal Hardware Specifications - -[Table 5](#en-us_topic_0182825778_tff48b99c9bf24b84bb602c53229e2541) lists the minimum hardware specifications for installing openEuler 20.03 LTS. - -**Table 5** Minimal hardware specifications - - - - - - - - - - - - - - - - -

Component

-

Minimal Hardware Specification

-

CPU

-

Kunpeng 920 (architecture: AArch64)

-

x86-64 (Skylake or later)

-

Memory

-

≥ 8 GB

-

Hard disk

-

≥ 120 GB

-
- -## Hardware Compatibility - -[Table 6](#en-us_topic_0227922427_table39822012) lists the typical configurations of servers and components supported by openEuler. openEuler will gradually support other servers in the future. Partners and developers are welcome to participate in the contribution and validation. - -**Table 6** Supported servers and typical configurations - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Vendor

-

Server

-

Server Model

-

Component

-

Typical Configuration

-

Huawei

-

TaiShan 200

-

2280 balanced model

-

CPU

-

HiSilicon Kunpeng 920

-

Memory

-

32G*4 2933MHz

-

RAID controller card

-

LSI SAS3508

-

Network

-

TM210

-

Huawei

-

FusionServer Pro

-

2288H V5 rack server

-

CPU

-

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

-

Memory

-

32*4 2400MHz

-

RAID controller card

-

LSI SAS3508

-

Network

-

X722

-
- diff --git a/content/en/docs/Releasenotes/key-features.md b/content/en/docs/Releasenotes/key-features.md deleted file mode 100644 index 9590ee5de7e7c3e07ea69341207b44d69c1db228..0000000000000000000000000000000000000000 --- a/content/en/docs/Releasenotes/key-features.md +++ /dev/null @@ -1,29 +0,0 @@ -# Key Features - -- iSula lightweight container solution, unified IoT, and edge and cloud computing container solutions - - Shortens a trace chain by three levels, and the memory usage of hundreds of containers is significantly lower than that of the Docker engine. - - Supports standard open-source container runtime interface \(CRI\) and open container initiative \(OCI\) and flexibly interconnects with multiple OCI runtimes such as runC and Kata. - - Secure container: combines the virtualization technology and container technology to ensure better isolation of secure containers. - - System container: supports local file system startup to implement quick deployment, and supports systemd deployment to improve user namespace isolation. - -- Kunpeng acceleration engine \(KAE\), supporting encryption and decryption acceleration - - Digest algorithm SM3, which supports asynchronous models. - - Symmetric encryption algorithm SM4, which supports asynchronous models and CTR, XTS, and CBC modes. - - Symmetric encryption algorithm AES, which supports asynchronous models and ECB, CTR, XTS, and CBC modes. - - Asymmetric algorithm RSA, which supports asynchronous models and key sizes 1024, 2048, 3072, and 4096. - - Key negotiation algorithm DH, which supports asynchronous models and key sizes 768, 1024, 1536, 2048, 3072, and 4096. - - -- A-Tune intelligent system performance optimization engine, inferring service features and configuring optimal system parameters to ensure optimal service running -- Enhancing the performance of glibc, zlib, and gzip and fully using the NEON instruction set of AArch64 to improve the basic library performance -- Kernel feature enhancement - - Supports ARM64 kernel hot patches. - - Numa Aware Qspinlock: reduces cache/bus conflicts across NUMA nodes. - - Optimizes the IOVA page table lookup and release algorithms to improve the performance of the IOMMU subsystem. - - Optimizes the implementation of CRC32 and checksum based on ARM64 instructions and pipeline features, greatly improving data verification performance. - - Supports ARM v8.4 Memory System Resource Partitioning and Monitoring \(MPAM\). -- virtualization feature enhancement - - Interruption virtualization optimization: The process for an IRQfd to inject an interrupt is optimized, greatly improving the performance of high-performance passthrough devices (sush as NICs and SSDs). - - Memory virtualization optimization: The Kunpeng hardware feature is used to improve the memory loading speed during VM startup. - - Storage virtualization optimization: NUMA affinity self-binding is optimized for the iSCSI module **kworker** to improve the I/O performance of IP SAN disks. - diff --git a/content/en/docs/Releasenotes/known-issues.md b/content/en/docs/Releasenotes/known-issues.md deleted file mode 100644 index aad4be328d247d0ea0bf51c9163aaf856318f4e1..0000000000000000000000000000000000000000 --- a/content/en/docs/Releasenotes/known-issues.md +++ /dev/null @@ -1,11 +0,0 @@ -# Known Issues - -- The FIPS boot mode of the kernel has not been fully authenticated. The FIPS boot may be abnormal. [I17Z18](https://gitee.com/src-openeuler/crypto-policies/issues/I17Z18?from=project-issue) -- When libvirt is used to start the GlusterFS VM, a 300-byte memory leak occurs each time. For details about the discussion, click [https://github.com/gluster/glusterfs/issues/818](https://github.com/gluster/glusterfs/issues/818). [I185CH](https://gitee.com/src-openeuler/glusterfs/issues/I185CH?from=project-issue) -- When the libvirt interface is used to continuously perform disk hot swap operations, there is a possibility that the hot remove interface returns a success message, but the disk is not removed and cannot be hot swapped again. You can stop the VM and then restart it. [I1C72L](https://gitee.com/src-openeuler/qemu/issues/I1C72L?from=project-issue) -- There is a low probability that an unknown installation exception occurs when the x86\_64 VM is used for installation. In this case, install the x86\_64 VM again. [I1C8HS](https://gitee.com/src-openeuler/anaconda/issues/I1C8HS?from=project-issue) -- CVE-2012-0039: When a local application calls the **g\_str\_hash** function, the application continuously consumes CPU resources, causing DoS attacks. This issue will not be resolved in the community. -- CVE-2015-9541: When Qt attempts to parse the abnormal SVG files which are constructed to launch exponential XML entity extension attacks, the memory may be insufficient. For details about the discussion, click [https://codereview.qt-project.org/c/qt/qtbase/+/293909](https://codereview.qt-project.org/c/qt/qtbase/+/293909). -- Before compiling some open-source packages, you need to install basic software such as GDB, GCC, and make. Otherwise, the compilation fails due to lack of dependency. -- AArch64 and x86\_64 have different definitions of the character type. As a result, an error is reported during the self-check using Coreutils, Augeas, and Diffutils. You can add the **--fsigned-char** compilation option to solve the problem. - diff --git a/content/en/docs/Releasenotes/release_notes.md b/content/en/docs/Releasenotes/release_notes.md deleted file mode 100644 index 2ddacc438016ed80eb04e163e1a17986ed0abb00..0000000000000000000000000000000000000000 --- a/content/en/docs/Releasenotes/release_notes.md +++ /dev/null @@ -1 +0,0 @@ -This document is the release notes for the openEuler 20.03 LTS release version. \ No newline at end of file diff --git a/content/en/docs/Releasenotes/resolved-issues.md b/content/en/docs/Releasenotes/resolved-issues.md deleted file mode 100644 index 5d2d7831aec011a3bc52381f88f5694db3097261..0000000000000000000000000000000000000000 --- a/content/en/docs/Releasenotes/resolved-issues.md +++ /dev/null @@ -1,75 +0,0 @@ -# Resolved Issues - -For details about the complete issue list, click [https://gitee.com/organizations/src-openeuler/issues](https://gitee.com/organizations/src-openeuler/issues). - -For details about the complete kernel submission records, click [https://gitee.com/openeuler/kernel/commits/openEuler-1.0-LTS](https://gitee.com/openeuler/kernel/commits/openEuler-1.0-LTS). - -[Table 1](#table249714911433) lists the resolved issues. - -**Table 1** Resolved issues - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Issue

-

Description

-

I1BJTF

-

[Kernel bug] The lscpu command on the ARM server cannot be used to display the CPU dominant frequency, and the CPU cache is incorrect.

-

I1BWPD

-

Failed to pull an image using the isula pull or curl pull command.

-

I1BV56

-

Delete redundant gpg sig file for shadow-4.6.

-

I1BV38

-

The unbuffer command is unavailable.

-

I1BA9B

-

The arping -w parameter is invalid.

-

I1AV3S

-

The oops error occurs when the latest LTP pty03 test case is executed.

-

I1AZ1I

-

500 scheduled tasks are started. After 4 to 5 minutes, the tasks cannot be processed and the system stops responding.

-

I1AH2C

-

The warning information captured when the Kata container fails to be started is insufficient for fault locating. More errors need to be printed.

-

I1AGXO

-

In kata-runtime remote mode, the kata-runtime kill is not called when the isula rm -f command is executed. As a result, residual data exists.

-

I1AF39

-

The soft lockup is found when the open function is triggered in the ext4 file system.

-

I1ADUD

-

Isulad breaks down when a pod is created using kubectl.

-
- diff --git a/content/en/menu/index.md b/content/en/menu/index.md deleted file mode 100644 index c954b2d3f2f749220a4042b26bdfe00f8b4334b4..0000000000000000000000000000000000000000 --- a/content/en/menu/index.md +++ /dev/null @@ -1,129 +0,0 @@ ---- -headless: true - - ---- - -- [Terms of Use]({{< relref "./docs/Releasenotes/terms-of-use.md" >}}) -- [Release Notes]({{< relref "./docs/Releasenotes/release_notes.md" >}}) - - [User Notice]({{< relref "./docs/Releasenotes/user-notice.md" >}}) - - [Introduction]({{< relref "./docs/Releasenotes/introduction.md" >}}) - - [Installing the OS]({{< relref "./docs/Releasenotes/installing-the-os.md" >}}) - - [Key Features]({{< relref "./docs/Releasenotes/key-features.md" >}}) - - [Known Issues]({{< relref "./docs/Releasenotes/known-issues.md" >}}) - - [Resolved Issues]({{< relref "./docs/Releasenotes/resolved-issues.md" >}}) - - [Common Vulnerabilities and Exposures \(CVE\)]({{< relref "./docs/Releasenotes/common-vulnerabilities-and-exposures-(cve).md" >}}) - - [Source Code]({{< relref "./docs/Releasenotes/source-code.md" >}}) - - [Contribution]({{< relref "./docs/Releasenotes/contribution.md" >}}) - - [Acknowledgement]({{< relref "./docs/Releasenotes/acknowledgement.md" >}}) - -- [Quick Start]({{< relref "./docs/Quickstart/quick-start.md" >}}) -- [Installation Guide]({{< relref "./docs/Installation/Installation.md" >}}) - - [Installation Preparations]({{< relref "./docs/Installation/installation-preparations.md" >}}) - - [Installation Mode]({{< relref "./docs/Installation/installation-mode.md" >}}) - - [Installation Guideline]({{< relref "./docs/Installation/installation-guideline.md" >}}) - - [Using Kickstart for Automatic Installation]({{< relref "./docs/Installation/using-kickstart-for-automatic-installation.md" >}}) - - [FAQs]({{< relref "./docs/Installation/faqs.md" >}}) - -- [Administrator Guide]({{< relref "./docs/Administration/administration.md" >}}) - - [Viewing System Information]({{< relref "./docs/Administration/viewing-system-information.md" >}}) - - [Basic Configuration]({{< relref "./docs/Administration/basic-configuration.md" >}}) - - [User and User Group Management]({{< relref "./docs/Administration/user-and-user-group-management.md" >}}) - - [Using the DNF to Manage Software Packages]({{< relref "./docs/Administration/using-the-dnf-to-manage-software-packages.md" >}}) - - [Service Management]({{< relref "./docs/Administration/service-management.md" >}}) - - [Process Management]({{< relref "./docs/Administration/process-management.md" >}}) - - [Configuring the Network]({{< relref "./docs/Administration/configuring-the-network.md" >}}) - - [Managing Hard Disks Through LVM]({{< relref "./docs/Administration/managing-hard-disks-through-lvm.md" >}}) - - [Using the KAE]({{< relref "./docs/Administration/using-the-kae.md" >}}) - - [Configuring Services]({{< relref "./docs/Administration/configuring-services.md" >}}) - - [Configuring the Repo Server]({{< relref "./docs/Administration/configuring-the-repo-server.md" >}}) - - [Configuring the FTP Server]({{< relref "./docs/Administration/configuring-the-ftp-server.md" >}}) - - [Configuring the Web Server]({{< relref "./docs/Administration/configuring-the-web-server.md" >}}) - - [Setting Up the Database Server]({{< relref "./docs/Administration/setting-up-the-database-server.md" >}}) - - [FAQs]({{< relref "./docs/Administration/faqs.md" >}}) - - -- [Virtualization User Guide]({{< relref "./docs/Virtualization/virtualization.md" >}}) - - [Introduction to Virtualization]({{< relref "./docs/Virtualization/introduction-to-virtualization.md" >}}) - - [Installation to Virtualization]({{< relref "./docs/Virtualization/installation-to-virtualization.md" >}}) - - [Environment Preparation]({{< relref "./docs/Virtualization/environment-preparation.md" >}}) - - [VM Configuration]({{< relref "./docs/Virtualization/vm-configuration.md" >}}) - - [Managing VMs]({{< relref "./docs/Virtualization/managing-vms.md" >}}) - - [VM Live Migration]({{< relref "./docs/Virtualization/vm-live-migration.md" >}}) - - [System Resource Management]({{< relref "./docs/Virtualization/system-resource-management.md" >}}) - - [Managing Devices]({{< relref "./docs/Virtualization/managing-devices.md" >}}) - - [Best Practices]({{< relref "./docs/Virtualization/best-practices.md" >}}) - - [Appendix]({{< relref "./docs/Virtualization/appendix.md" >}}) - - -- [Container User Guide]({{< relref "./docs/Container/container.md" >}}) - - [iSulad Container Engine]({{< relref "./docs/Container/isulad-container-engine.md" >}}) - - [Installation, Upgrade and Uninstallation]({{< relref "./docs/Container/installation-upgrade-Uninstallation.md" >}}) - - [Installation and Configuration]({{< relref "./docs/Container/installation-configuration.md" >}}) - - [Upgrade Methods]({{< relref "./docs/Container/upgrade-methods.md" >}}) - - [Uninstallation]({{< relref "./docs/Container/uninstallation.md" >}}) - - - [Application Scenarios]({{< relref "./docs/Container/application-scenarios.md" >}}) - - [Container Management]({{< ref "./docs/Container/container-management.md" >}}) - - [Interconnection with the CNI Network]({{< ref "./docs/Container/interconnection-with-the-cni-network.md" >}}) - - [Container Resource Management]({{< ref "./docs/Container/container-resource-management.md" >}}) - - [Privileged Container]({{< ref "./docs/Container/privileged-container.md" >}}) - - [CRI]({{< ref "./docs/Container/cri.md" >}}) - - [Image Management]({{< ref "./docs/Container/image-management.md" >}}) - - [Checking the Container Health Status]({{< ref "./docs/Container/checking-the-container-health-status.md" >}}) - - [Querying Information]({{< ref "./docs/Container/querying-information.md" >}}) - - [Security Features]({{< ref "./docs/Container/security-features.md" >}}) - - [Supporting OCI hooks]({{< ref "./docs/Container/supporting-oci-hooks.md" >}}) - - [Appendix]({{< ref "./docs/Container/appendix.md" >}}) - - - [System Container]({{< relref "./docs/Container/system-container.md" >}}) - - [Installation Guideline]({{< relref "./docs/Container/installation-guideline.md" >}}) - - [Usage Guide]({{< relref "./docs/Container/usage-guide.md" >}}) - - [Specifying Rootfs to Create a Container]({{< ref "./docs/Container/specifying-rootfs-to-create-a-container.md" >}}) - - [Using systemd to Start a Container]({{< ref "./docs/Container/using-systemd-to-start-a-container.md" >}}) - - [Reboot or Shutdown in a Container]({{< ref "./docs/Container/reboot-or-shutdown-in-a-container.md" >}}) - - [Configurable Cgroup Path]({{< ref "./docs/Container/configurable-cgroup-path.md" >}}) - - [Writable Namespace Kernel Parameters]({{< ref "./docs/Container/writable-namespace-kernel-parameters.md" >}}) - - [Shared Memory Channels]({{< ref "./docs/Container/shared-memory-channels.md" >}}) - - [Dynamically Loading the Kernel Module]({{< ref "./docs/Container/dynamically-loading-the-kernel-module.md" >}}) - - [Environment Variable Persisting]({{< ref "./docs/Container/environment-variable-persisting.md" >}}) - - [Maximum Number of Handles]({{< ref "./docs/Container/maximum-number-of-handles.md" >}}) - - [Security and Isolation]({{< ref "./docs/Container/security-and-isolation.md" >}}) - - [Dynamically Managing Container Resources \(syscontainer-tools\)]({{< ref "./docs/Container/dynamically-managing-container-resources-(syscontainer-tools).md" >}}) - - [Appendix]({{< ref "./docs/Container/appendix-1.md" >}}) - - - [Secure Container]({{< relref "./docs/Container/secure-container.md" >}}) - - [Installation and Deployment]({{< relref "./docs/Container/installation-and-deployment-1.md" >}}) - - [Application Scenarios]({{< relref "./docs/Container/application-scenarios-2.md" >}}) - - [Managing the Lifecycle of a Secure Container]({{< ref "./docs/Container/managing-the-lifecycle-of-a-secure-container.md" >}}) - - [Configuring Resources for a Secure Container]({{< ref "./docs/Container/configuring-resources-for-a-secure-container.md" >}}) - - [Configuring Networking for a Secure Container]({{< ref "./docs/Container/configuring-networking-for-a-secure-container.md" >}}) - - [Monitoring Secure Containers]({{< ref "./docs/Container/monitoring-secure-containers.md" >}}) - - [Appendix]({{< ref "./docs/Container/appendix-2.md" >}}) - - - [Docker Container]({{< relref "./docs/Container/docker-container.md" >}}) - - [Installation and Deployment]({{< relref "./docs/Container/installation-and-deployment-2.md" >}}) - - [Container Management]({{< ref "./docs/Container/container-management-1.md" >}}) - - [Image Management]({{< ref "./docs/Container/image-management-1.md" >}}) - - [Command Reference]({{< ref "./docs/Container/command-reference.md" >}}) - - [Container Engine]({{< ref "./docs/Container/container-engine.md" >}}) - - [Container Management]({{< ref "./docs/Container/container-management-2.md" >}}) - - [Image Management]({{< ref "./docs/Container/image-management-2.md" >}}) - - [Statistics]({{< ref "./docs/Container/statistics.md" >}}) - - -- [A-Tune User Guide]({{< relref "./docs/A-Tune/A-Tune.md" >}}) - - [Getting to Know A-Tune]({{< relref "./docs/A-Tune/getting-to-know-a-tune.md" >}}) - - [Installation and Deployment]({{< relref "./docs/A-Tune/installation-and-deployment.md" >}}) - - [Application Scenarios]({{< relref "./docs/A-Tune/application-scenarios.md" >}}) - - [FAQs]({{< relref "./docs/A-Tune/faqs.md" >}}) - - [Appendixes]({{< relref "./docs/A-Tune/appendixes.md" >}}) - - - -- [Application Development Guide]({{< relref "./docs/ApplicationDev/application-development.md" >}}) - - [Preparation]({{< relref "./docs/ApplicationDev/preparation.md" >}}) - - [Using GCC for Compilation]({{< relref "./docs/ApplicationDev/using-gcc-for-compilation.md" >}}) - - [Using Make for Compilation]({{< relref "./docs/ApplicationDev/using-make-for-compilation.md" >}}) - - [Using JDK for Compilation]({{< relref "./docs/ApplicationDev/using-jdk-for-compilation.md" >}}) - - [Building an RPM Package]({{< relref "./docs/ApplicationDev/building-an-rpm-package.md" >}}) \ No newline at end of file diff --git a/content/zh/docs/A-Tune/figures/zh-cn_image_0227497000.png b/content/zh/docs/A-Tune/figures/zh-cn_image_0227497000.png deleted file mode 100644 index db9b5ce8b6d211d54ea36930504cca415ddfb8ca..0000000000000000000000000000000000000000 Binary files a/content/zh/docs/A-Tune/figures/zh-cn_image_0227497000.png and /dev/null differ diff --git a/content/zh/docs/A-Tune/figures/zh-cn_image_0227497343.png b/content/zh/docs/A-Tune/figures/zh-cn_image_0227497343.png deleted file mode 100644 index 6db5a0793fe3068c7519d9a157abc856560e71b2..0000000000000000000000000000000000000000 Binary files a/content/zh/docs/A-Tune/figures/zh-cn_image_0227497343.png and /dev/null differ diff --git "a/content/zh/docs/A-Tune/\350\256\244\350\257\206A-Tune.md" "b/content/zh/docs/A-Tune/\350\256\244\350\257\206A-Tune.md" deleted file mode 100644 index 25ad1784b7ae566694af07a31cb79e5974d068e2..0000000000000000000000000000000000000000 --- "a/content/zh/docs/A-Tune/\350\256\244\350\257\206A-Tune.md" +++ /dev/null @@ -1,179 +0,0 @@ -# 认识A-Tune - - -- [认识A-Tune](#认识A-Tune) - - [简介](#简介) - - [架构](#架构) - - [支持特性与业务模型](#支持特性与业务模型) - - -## 简介 - -操作系统作为衔接应用和硬件的基础软件,如何调整系统和应用配置,充分发挥软硬件能力,从而使业务性能达到最优,对用户至关重要。然而,运行在操作系统上的业务类型成百上千,应用形态千差万别,对资源的要求各不相同。当前硬件和基础软件组成的应用环境涉及高达7000多个配置对象,随着业务复杂度和调优对象的增加,调优所需的时间成本呈指数级增长,导致调优效率急剧下降,调优成为了一项极其复杂的工程,给用户带来巨大挑战。 - -其次,操作系统作为基础设施软件,提供了大量的软硬件管理能力,每种能力适用场景不尽相同,并非对所有的应用场景都通用有益,因此,不同的场景需要开启或关闭不同的能力,组合使用系统提供的各种能力,才能发挥应用程序的最佳性能。 - -另外,实际业务场景成千上万,计算、网络、存储等硬件配置也层出不穷,实验室无法遍历穷举所有的应用和业务场景,以及不同的硬件组合。 - -为了应对上述挑战,openEuler推出了A-Tune。 - -A-Tune是一款基于AI开发的系统性能优化引擎,它利用人工智能技术,对业务场景建立精准的系统画像,感知并推理出业务特征,进而做出智能决策,匹配并推荐最佳的系统参数配置组合,使业务处于最佳运行状态。 - -![](figures/zh-cn_image_0227497000.png) - -## 架构 - -A-Tune核心技术架构如下图,主要包括智能决策、系统画像和交互系统三层。 - -- 智能决策层:包含感知和决策两个子系统,分别完成对应用的智能感知和对系统的调优决策。 -- 系统画像层:主要包括标注和学习系统,标注系统用于业务模型的聚类,学习系统用于业务模型的学习和分类。 -- 交互系统层:用于各类系统资源的监控和配置,调优策略执行在本层进行。 - -![](figures/zh-cn_image_0227497343.png) - -## 支持特性与业务模型 - -### 支持特性 - -A-Tune支持的主要特性、特性成熟度以及使用建议请参见[表1](#table1919220557576)。 - -**表 1** 特性成熟度 - - - - - - - - - - - - - - - - - - - - -

特性

-

成熟度

-

使用建议

-

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

-

已测试

-

试用

-

自定义负载类型和业务模型

-

已测试

-

试用

-

参数自调优

-

已测试

-

试用

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

负载模型

-

业务类型

-

负载特征

-

支持的应用

-

default

-

默认类型

-

CPU、内存带宽、网络、IO各维度资源使用率都不高

-

N/A

-

webserver

-

https应用

-

CPU使用率高

-

Nginx

-

big_database

-

数据库

-
  • 关系型数据库

    读: CPU、内存带宽、网络使用率高

    -

    写:IO使用率高

    -
-
  • 非关系型数据库

    CPU、IO使用率高

    -
-

MongoDB、MySQL、PostgreSQL、MariaDB

-

big_data

-

大数据

-

CPU、IO使用率较高

-

Hadoop、Spark

-

in-memory_computing

-

内存密集型应用

-

CPU、内存带宽使用率高

-

SPECjbb2015

-

in-memory_database

-

计算+网络密集型应用

-

CPU单核使用率高,多实例下网络使用率高

-

Redis

-

single_computer_intensive_jobs

-

计算密集型应用

-

CPU单核使用率高,部分子项内存带宽使用率高

-

SPECCPU2006

-

communication

-

网络密集型应用

-

CPU、网络使用率高

-

Dubbo

-

idle

-

系统idle

-

系统处于空闲状态,无任何应用运行

-

N/A

-
- diff --git a/content/zh/docs/Administration/FAQ-54.md b/content/zh/docs/Administration/FAQ-54.md deleted file mode 100644 index 4f2b420466c5793add418c2f551ce62c12d405cc..0000000000000000000000000000000000000000 --- a/content/zh/docs/Administration/FAQ-54.md +++ /dev/null @@ -1,179 +0,0 @@ -# FAQ - - -- [FAQ](#faq) - - [使用systemctl和top命令查询libvirtd服务占用内存不同](#使用systemctl和top命令查询libvirtd服务占用内存不同) - - [设置RAID0卷,参数stripsize设置为4时出错](#设置raid0卷参数stripsize设置为4时出错) - - [使用rpmbuild编译mariadb失败](#使用rpmbuild编译mariadb失败) - - [使用默认配置启动SNTP服务失败](#使用默认配置启动sntp服务失败) - - [安装时出现软件包冲突、文件冲突或缺少软件包导致安装失败](#安装时出现软件包冲突文件冲突或缺少软件包导致安装失败) - - - -## 使用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命令的内存占用率含义不同,所以查询结果不同。 - -## 设置RAID0卷,参数stripsize设置为4时出错 - -### 问题现象 - -设置RAID0卷,参数stripsize设置为4时出错。 - -### 原因分析 - -64K页表开启只能支持64K场景。 - -### 解决方法 - -不需要修改配置文件,openeuler执行lvcreate命令时,条带化规格支持的stripesize最小值为64KB,将参数stripesize设置为64。 - -## 使用rpmbuild编译mariadb失败 - -### 问题描述 - -如果使用root账号登录系统,并在该账号下使用rpmbuild命令编译mariadb源代码,会出现编译失败现象,提示: - -``` -+ echo 'mysql can'\''t run test as root' -mysql can't run test as root -+ exit 1 -``` - -### 原因分析 - -mariadb数据库不允许使用root权限的账号进行测试用例执行,所以会阻止编译过程(编译过程中会自动执行测试用例)。 - -### 解决方案 - -使用vi等文本编辑工具,修改mariadb.spec文件中runtest变量的值。 - -修改前: - -``` -%global runtest 1 -``` - -修改后: - -``` -%global runtest 0 -``` - -该修改关闭了编译阶段执行测试用例的功能,但不会影响编译和编译后的RPM包内容。 - -## 使用默认配置启动SNTP服务失败 - -### 问题现象 - -默认配置情况下SNTP服务启动失败。 - -### 原因分析 - -默认配置中未添加授时服务器域名。 - -### 解决方案 - -修改/etc/sysconfig/sntp文件 ,在文件中添加中国NTP快速授时服务器域名:0.generic.pool.ntp.org。 - -## 安装时出现软件包冲突、文件冲突或缺少软件包导致安装失败 - -### 问题现象 - -安装软件包过程中,可能出现软件包冲突、文件冲突或缺少软件包,从而导致升安装被中断,最终安装失败。软件包冲突、文件冲突和缺少软件包的报错信息分别如下所示。 - -软件包冲突报错信息示例(以 libev-libevent-devel-4.24-11.oe1.aarch64与libevent-devel-2.1.11-2.oe1.aarch64冲突为例): - -``` -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文件冲突为例): - -``` -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软件包为例): - -``` -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**命令将与待安装软件包冲突的软件包单独卸载。 - - ``` - # 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**命令将不需要安装的软件包单独卸载。 - - ``` - # 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软件包才能安装的软件包单独卸载。 - - ``` - # dnf remove python2-blivet-1:3.1.1-5.noarch - ``` - - - 升级软件包时加上\-\-allowerasing参数。 - - ``` - # yum update blivet-data-1:3.1.1-5.noarch -y --allowerasing - ``` - -3. 重新进行升级操作。 diff --git a/content/zh/docs/Container/figures/kata-arch.png b/content/zh/docs/Container/figures/kata-arch.png deleted file mode 100644 index 60fbb602d94cf7a8e13bd6ecb520c99e574037e6..0000000000000000000000000000000000000000 Binary files a/content/zh/docs/Container/figures/kata-arch.png and /dev/null differ diff --git "a/content/zh/docs/Container/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" "b/content/zh/docs/Container/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" deleted file mode 100644 index 174a2ed26e8a86923768c59c958a65a9c9414f6e..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" +++ /dev/null @@ -1,798 +0,0 @@ -# isula-build容器镜像构建 - -## 概述 - -### 简介 - -isula-build是iSula团队推出的容器镜像构建工具,安装部署过程简单,通过Dockerfile文件可以迅速构建出容器镜像。其中,isula-build提供命令行工具,isula-builder常驻后台,处理客户端请求。 - -- 该工具目前所支持功能: - 1. ctr-img,构建容器镜像。 - 1. build,根据给定dockerfile构建出容器镜像。 - 2. images,列出本地容器镜像。 - 3. import,导入容器基础镜像。 - 4. load,导入层叠镜像。 - 5. rm,删除本地镜像。 - 6. save,导出容器镜像至本地磁盘。 - 7. tag,给本地容器镜像打tag。 - 2. login,登陆容器镜像仓库。 - 3. logout,登出容器镜像仓库。 - 4. version,查看版本号。 -- isula-build包含主要特性: - 1. 兼容Dockerfile语法。 - 3. 支持文件系统扩展属性,如Selinux、IMA、EVM等。 - 4. 支持多种镜像导出格式,可以直接将构建镜像结果推送至iSulad或docker。 - -### 快速引导 - -#### 安装部署 - -- rpm包安装 - - ``` - sudo rpm -ivh isula-build-*.rpm && systemctl start isula-build - ``` - -- yum安装 - - 推荐该方式,只需要配置openEuler yum源即可。 - - ``` - sudo yum install -y isula-build && systemctl start isula-build - ``` - - 说明: - - isula-build 构建时依赖 runc,当你安装时需要再安装单独的docker-runc或完整的docker-engine。 - -#### 示例 - -- 新建buildDir目录,在该目录下创建一个dockerfile文件,内容如下: - - ``` - FROM busybox:latest - MAINTAINER "someone" - RUN ["touch", "bar"] - LABEL foo=bar - EXPOSE 8888/udp - EXPOSE 9999/tcp - ENV a=hello - ARG word - ADD ./* /home/ - COPY ./* /home/dir1/ - VOLUME ["var/log"] - STOPSIGNAL 15 - HEALTHCHECK --interval=5m --timeout=3s --retries=1 - CMD ["pwd"] - SHELL ["pwd"] - ``` - -- 在该目录下使用isula-build构建镜像,过程如下: - - ``` - $ sudo isula-build ctr-img build -f dockerfile . - STEP 1: FROM busybox:latest - STEP 2: MAINTAINER "someone" - STEP 3: RUN ["touch", "bar"] - STEP 4: LABEL foo=bar - STEP 5: EXPOSE 8888/udp - STEP 6: EXPOSE 9999/tcp - STEP 7: ENV a=hello - STEP 8: ARG word - STEP 9: ADD ./* /home/ - STEP 10: COPY ./* /home/dir1/ - STEP 11: VOLUME ["var/log"] - STEP 12: STOPSIGNAL 15 - STEP 13: HEALTHCHECK --interval=5m --timeout=3s --retries=1 CMD ["pwd"] - STEP 14: SHELL ["pwd"] - Getting image source signatures - Copying blob sha256:e9235582825a2691b1c91a96580e358c99acfd48082cbf1b92fd2ba4a791efc3 - Copying blob sha256:dc3bca97af8b81508c343b13a08493c7809b474dc25986fcbae90c6722201be3 - Copying config sha256:9ec92a8819f9da1b06ea9ff83307ff859af2959b70bfab101f6a325b1a211549 - Writing manifest to image destination - Storing signatures - Build success with image id: 9ec92a8819f9da1b06ea9ff83307ff859af2959b70bfab101f6a325b1a211549 - ``` - -- 列出所构建镜像。 - - ``` - $ sudo isula-build ctr-img images - ----------------- ----------- ---------------- ---------------------------------------------- - REPOSITORY TAG IMAGE ID CREATED - ------------------ ---------- ---------------- ---------------------------------------------- - foo latest 9ec92a8819f9 2020-06-11 07:45:39.265106109 +0000 UTC - ``` - -- 删除镜像。 - - ``` - $ sudo isula-build ctr-img rm 9ec92a8819f9 - Deleted: sha256:86567f7a01b04c662a9657aac436e8d63ecebb26da4252abb016d177721fa11b - ``` - -#### 重点特性 - -- isula-build兼容dockerfile语法。 -- isula-build可以将构建好的容器镜像直接导入到iSulad、dockerd、registry和本地tar包。 - - - -#### 集成 - -关于iSulad和docker的集成,详情见[与容器引擎集成](#与容器引擎集成)。 - -### 注意事项 - -关于相关约束限制以及与docker build的区别详情见[使用注意事项](#使用注意事项)。 - - - -## 使用指南 - -### 配置 - -isula-builder 包含如下配置文件: - -- /etc/isula-build/configuration.toml:isula-builder 总配置文件,包含设置 isula-builder 日志级别、持久化目录和运行时目录、OCI runtime等。 - 1. debug:设置是否打开debug日志,可选参数:true、false。 - 2. loglevel:设置日志级别,可选参数:“debug”、“info”、“warn”、“error”。 - 3. run_root:设置运行时数据根目录。 - 4. data_root:设置本地持久化目录。 - 5. runtime:设置runtime种类,目前支持runc。 -- /etc/isula-build/storage.toml: 本地持久化存储的配置文件,包含所使用的存储驱动的配置。 - 1. driver:存储驱动类型,目前支持overlay2。 - 2. runroot:临时存储目录。 - 3. graphroot:可读写的镜像存储目录。 - 4. 更多设置可参考 [containers-storage.conf.5.md](https://github.com/containers/storage/blob/master/docs/containers-storage.conf.5.md)。 -- /etc/isula-build/registries.toml : 针对各个镜像仓库的配置文件,含可用的镜像仓库列表、镜像仓库黑名单。 - 1. registries.search:镜像仓库搜索域,在此list的镜像仓库可以被感知,不在此列的不被感知。 - 2. registries.insecure:可访问的不安全镜像仓库地址,在此列表中的镜像仓库将不会通过鉴权,不推荐使用。 - 3. 更多设置可参考 [containers-registries.conf.5.md](https://github.com/containers/image/blob/master/docs/containers-registries.conf.5.md)。 -- /etc/isula-build/policy.json:镜像pull/push策略文件。注:当前不支持对其进行配置 - -在启动 isula-builder 服务之前,先对服务按需配置,在还未熟悉配置的情况下,也可以直接使用rpm包安装的默认配置直接启动服务。 - -说明: - -以上配置文件,isula-build 支持最大 1M 的配置文件。 - -### 启动服务 - -#### 通过systemd启动 - -1. 配置需在上述配置文件中进行修改。 - - - 启动 isula-build 服务: - - ``` - systemctl start isula-build.service - ``` - - - 停止 isula-build 服务: - - ``` - systemctl stop isula-build.service - ``` - - - 重启 isula-builder 服务: - - ``` - systemctl restart isula-build.service - ``` - - - 查看 isula-build 服务的运行日志: - - ``` - journalctl -u isula-build - ``` - -2. 修改完配置文件后,需使用如下命令使配置生效。 - - ``` - systemctl daemon-reload - ``` - -#### 直接运行二进制启动 - -部分配置可通过isula-builder的flag进行设置,例如: - -``` -isula-builder --dataroot "/var/lib/isula-build" --debug=false -``` - -#### isula-builder目前支持的flags - -``` - --dataroot string persistent dir (default "/var/lib/isula-build") - -D, --debug print debugging information (default true) - -h, --help help for isula-builder - --log-level string The log level to be used. Either "debug", "info", "warn" or "error". (default "info") - --runroot string runtime dir (default "/var/run/isula-build") - --storage-driver string storage-driver (default "overlay") - --storage-opt strings storage driver option (default [overlay.mountopt=nodev]) - --version version for isula-builder -``` - -- -d, --debug: 是否开启调测模式。 -- --log-level: 日志级别,支持 "debug", "info", "warn" or "error",默认为 "info"。 -- --dataroot: 本地持久化路径,默认为"/var/lib/isula-build/"。 -- --runroot: 运行时路径,默认为"/var/run/isula-build/"。 -- --storage-driver:底层存储驱动类型。 -- --storage-opt: 底层存储驱动配置。 - -当命令行启动参数中传递了与配置文件相同的配置选项,优先使用命令行参数启动。 - -### 子命令使用 - -目前 isula-build提供了如下对于容器镜像(ctr-img)操作的功能: - -- build,根据给定dockerfile构建出容器镜像。 -- images,列出本地容器镜像。 -- import,导入容器基础镜像。 -- load,导入层叠镜像。 -- rm,删除本地容器镜像。 -- save, 导出层叠镜像至本地磁盘。 -- tag,给本地容器镜像打tag。 - -同时提供了如下通用指令: - -- info,查看isula-build的运行环境和系统信息。 -- login,登入远端容器镜像仓库。 -- logout,从远端容器镜像仓库登出。 -- version,查看isula-build和isula-builder的版本号。 -- completion(隐式提供),生成bash环境命令补全脚本。 - -#### 容器镜像构建 - -``` -isula-build ctr-img build -``` - -其中 build 包含如下 flags: - -1. --build-arg:string列表,构建过程中需要用到的变量。 -2. --build-static:KV值,构建二进制一致性。目前包含如下K值: - 1. build-time:string,使用固定时间戳来构建容器镜像;时间戳格式为“YYYY-MM-DD HH-MM-SS”。 -3. -f, --filename:string,Dockerfile的路径,不指定则是使用当前路径的Dockerfile文件。 -4. --iidfile:string,输出 image ID 到本地文件。 -5. -o, --output:string,镜像导出的方式和路径。 -6. --proxy:布尔值,继承主机侧环境的proxy环境变量(默认为true)。 -7. --tag:string,设置构建成功的镜像的tag值。 -8. --cap-add:string列表,构建过程中RUN指令所需要的权限。 - -以下为各个 flags 的详解。 - -- **--build-arg** - - 从命令行接受参数作为Dockerfile中的参数,用法: - - ``` - isula-build ctr-img build --build-arg foo=bar -f Dockerfile - ``` - - ``` - $ echo "This is bar file" > bar.txt - $ cat Dockerfile_arg - FROM busybox - ARG foo - ADD ${foo}.txt . - RUN cat ${foo}.txt - $ sudo isula-build ctr-img build --build-arg foo=bar -f Dockerfile_arg - STEP 1: FROM busybox - Getting image source signatures - Copying blob sha256:8f52abd3da461b2c0c11fda7a1b53413f1a92320eb96525ddf92c0b5cde781ad - Copying config sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b - Writing manifest to image destinationStoring signatures - STEP 2: ARG foo - STEP 3: ADD ${foo}.txt . - STEP 4: RUN cat ${foo}.txt - This is bar file - Getting image source signatures - Copying blob sha256:6194458b07fcf01f1483d96cd6c34302ffff7f382bb151a6d023c4e80ba3050a - Copying blob sha256:6bb56e4a46f563b20542171b998cb4556af4745efc9516820eabee7a08b7b869 - Copying config sha256:39b62a3342eed40b41a1bcd9cd455d77466550dfa0f0109af7a708c3e895f9a2 - Writing manifest to image destination - Storing signatures - Build success with image id: 39b62a3342eed40b41a1bcd9cd455d77466550dfa0f0109af7a708c3e895f9a2 - ``` - -- **--build-static** - - 指定为静态构建,则isula-build会消除所有时间戳差异,同时消除其他构建过程差异,包括:容器ID、hsotname等, 最终构建出能满足BEP要求的容器镜像。 - - 在使用isula-build进行容器镜像构建时,假如给 build 子命令一个固定的时间戳,并在限定如下条件的时候: - - - 构建环境前后保持一致。 - - 构建Dockerfile前后保持一致。 - - 构建产生的中间数据前后保持一致。 - - 构建命令相同。 - - 第三方库版本一致。 - - 对于容器镜像构建,isula-build支持相同的Dockerfile。如果构建环境相同,则多次构建生成的镜像内容和镜像ID相同。 - - --build-static接受k=v形式的键值对选项,当前支持的选项有: - - - build-time:字符串类型。构建静态镜像的固定时间戳,格式为“YYYY-MM-DD HH-MM-SS”。时间戳影响diff层创建修改时间的文件属性。 - - 使用方式如下: - - ``` - $ sudo isula-build ctr-img build -f Dockerfile --build-static='build-time=2020-05-23 10:55:33' . - ``` - - 以此方式,同一环境多次构建出来的容器镜像和镜像ID均会保持一致。 - -- **--iidfile** - - 将构建的镜像ID输出到文件,用法: - - ``` - isula-build ctr-img build --iidfile testfile - ``` - - ``` - $ sudo isula-build ctr-img build -f Dockerfile_arg --iidfile testfile - - $ cat testfile - 76cbeed38a8e716e22b68988a76410eaf83327963c3b29ff648296d5cd15ce7b - ``` - -- **-o, --output** - - 目前 -o, --output 支持如下形式: - - - `isulad:image:tag`:将构建成功的镜像直接推送到 iSulad。比如:`-o isulad:busybox:latest`。同时需要注意如下约束: - - isula-build 和 iSulad 必须在同一个节点上 - - tag必须配置 - - isula-build client端需要将构建成功的镜像暂存成 /var/tmp/isula-build-tmp-%v.tar 再导入至 iSulad,用户需要保证 /var/tmp/ 目录有足够磁盘空间 - - `docker-daemon:image:tag`:将构建成功的镜像直接推送到 Docker daemon。比如:`-o docker-daemon:busybox:latest`。同时需要注意如下约束: - - isula-build 和 docker 必须在同一个节点上 - - tag必须配置 - - `docker://registry.example.com/repository:tag`:将构建成功的镜像直接推送到远端镜像仓库。比如:`-o docker://localhost:5000/library/busybox:latest`。 - - `docker-archive:/:image:tag`:将构建成功的镜像以Docker image的格式保存至本地。比如:`-o docker-archive:/root/image.tar:busybox:latest`。 - - 除去各个flags之外,build子命令的命令行最后还会接收一个argument,该argument类型是string,意义为context,即该Dockerfile构建环境的上下文。该参数默认值为isula-build被执行的当前路径。该路径会影响 .dockerignore 和 Dockerfile的ADD/COPY指令 所检索的路径。 - -- **--proxy** - - 选择构建时RUN指令启动的容器是否从环境上继承proxy相关环境变量"http_proxy","https_proxy","ftp_proxy","no_proxy","HTTP_PROXY","HTTPS_PROXY","FTP_PROXY","NO_PROXY",默认为true。 - - 当用户在Dockerfile配置proxy相关ARG或ENV,将覆盖所继承的环境变量。 - - 注意:若client与daemon不在同一个终端运行,所能继承的环境变量为daemon所在终端的环境变量。 - -- **--tag** - - 设置镜像构建成功之后,该镜像在本地磁盘存储时的tag。 - -- **--cap-add** - - 添加构建过程中RUN指令所需权限,用法: - - ``` - isula-build ctr-img build --cap-add CAP_SYS_ADMIN --cap-add CAP_SYS_PTRACE -f Dockerfile - ``` - -说明: - -isula-build最大支持并发构建100个容器镜像、支持Dockerfile最大1M、支持 .dockerignore 最大 1M - -#### 查看本地持久化构建镜像 - -可通过images命令查看当前本地持久化存储的镜像: - -``` -$ sudo isula-build ctr-img images ----------------------------------------------- ----------- ----------------- -------------------------- ------------ -REPOSITORY TAG IMAGE ID CREATED SIZE ----------------------------------------------- ----------- ----------------- -------------------------- ------------ -localhost:5000/library/alpine latest a24bb4013296 2020-20-19 19:59:197 5.85 MB - 39b62a3342ee 2020-20-38 38:66:387 1.45 MB ----------------------------------------------- ----------- ----------------- -------------------------- ------------ -``` - -#### 导入容器基础镜像 - -openEuler会随版本发布一个容器基础镜像,比如openEuler-docker.x86_64.tar.xz。可以通过ctr-img import指令将它导入。 - -命令原型如下: - -``` -isula-build ctr-img import [flags] -``` - -使用举例: - -``` -$ sudo isula-build ctr-img import ./openEuler-docker.x86_64.tar.xz openeuler:20.03 -Import success with image id: 7317851cd2ab33263eb293f68efee9d724780251e4e92c0fb76bf5d3c5585e37 -$ sudo isula-build ctr-img images ----------------------------------------------- -------------------- ----------------- ------------------------ ------------ -REPOSITORY TAG IMAGE ID CREATED SIZE ----------------------------------------------- -------------------- ----------------- ------------------------ ------------ -openeuler 20.03 7317851cd2ab 2020-08-01 06:25:34 500 MB ----------------------------------------------- -------------------- ----------------- ------------------------ ------------ -``` - -说明: - -isula-build 支持导入最大1G的容器基础镜像 - -#### 导入层叠镜像 - -层叠镜像指的是通过 docker save 或 isula-build ctr-img save 等指令,将一个构建完成的镜像保存至本地之后,镜像压缩包内是一层一层 layer.tar 的镜像包。可以通过 ctr-img load 指令将它导入至 isula-build。 - -命令原型如下: - -``` -isula-build ctr-img load [flags] -``` - -使用举例如下: - -``` -$ sudo isula-build ctr-img load -i ubuntu.tarGetting image source signatures -Copying blob sha256:cf612f747e0fbcc1674f88712b7bc1cd8b91cf0be8f9e9771235169f139d507c -Copying blob sha256:f934e33a54a60630267df295a5c232ceb15b2938ebb0476364192b1537449093 -Copying blob sha256:943edb549a8300092a714190dfe633341c0ffb483784c4fdfe884b9019f6a0b4 -Copying blob sha256:e7ebc6e16708285bee3917ae12bf8d172ee0d7684a7830751ab9a1c070e7a125 -Copying blob sha256:bf6751561805be7d07d66f6acb2a33e99cf0cc0a20f5fd5d94a3c7f8ae55c2a1 -Copying blob sha256:c1bd37d01c89de343d68867518b1155cb297d8e03942066ecb44ae8f46b608a3 -Copying blob sha256:a84e57b779297b72428fc7308e63d13b4df99140f78565be92fc9dbe03fc6e69 -Copying blob sha256:14dd68f4c7e23d6a2363c2320747ab88986dfd43ba0489d139eeac3ac75323b2 -Copying blob sha256:a2092d776649ea2301f60265f378a02405539a2a68093b2612792cc65d00d161 -Copying blob sha256:879119e879f682c04d0784c9ae7bc6f421e206b95d20b32ce1cb8a49bfdef202 -Copying blob sha256:e615448af51b848ecec00caeaffd1e30e8bf5cffd464747d159f80e346b7a150 -Copying blob sha256:f610bd1e9ac6aa9326d61713d552eeefef47d2bd49fc16140aa9bf3db38c30a4 -Copying blob sha256:bfe0a1336d031bf5ff3ce381e354be7b2bf310574cc0cd1949ad94dda020cd27 -Copying blob sha256:f0f15db85788c1260c6aa8ad225823f45c89700781c4c793361ac5fa58d204c7 -Copying config sha256:c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e -Writing manifest to image destination -Storing signatures -Loaded image as c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e -``` - -说明: - -- isula-build load命令仅支持导入包含单个层叠镜像的镜像压缩文件 -- isula-build 支持导入最大50G的容器层叠镜像 - -#### 删除本地持久化镜像 - -可通过rm命令删除当前本地持久化存储的镜像 - -目前支持的flags有: - -``` -Flags: - -a, --all remove all images - -h, --help help for rm - -p, --prune remove all untagged images -``` - -这些flags分别: - -- -a, --all:删除所有本地持久化存储的镜像。 - -- -p, --prune:删除所有没有tag的本地持久化存储的镜像。 - - 使用举例: - - ``` - isula-build ctr-img rm -p - ``` - - ``` - $ sudo isula-build ctr-img rm -p - Deleted: sha256:78731c1dde25361f539555edaf8f0b24132085b7cab6ecb90de63d72fa00c01d - Deleted: sha256:eeba1bfe9fca569a894d525ed291bdaef389d28a88c288914c1a9db7261ad12c - ``` - -#### 导出层叠镜像 - -可通过save命令导出层叠镜像到本地磁盘。命令原型如下: - -``` -isula-build ctr-img save [REPOSITORY:TAG]|imageID -o xx.tar -``` - -通过镜像名字/tag进行导出: - -``` -$ sudo isula-build ctr-img save busybox:latest -o busybox.tar -Getting image source signatures -Copying blob sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a -Copying blob sha256:824082a6864774d5527bda0d3c7ebd5ddc349daadf2aa8f5f305b7a2e439806f -Copying blob sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef -Copying config sha256:21c3e96ac411242a0e876af269c0cbe9d071626bdfb7cc79bfa2ddb9f7a82db6 -Writing manifest to image destination -Storing signatures -Save success with image: busybox:latest -``` - -通过ImageID进行导出: - -``` -$ sudo isula-build ctr-img save 21c3e96ac411 -o busybox.tar -Getting image source signatures -Copying blob sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a -Copying blob sha256:824082a6864774d5527bda0d3c7ebd5ddc349daadf2aa8f5f305b7a2e439806f -Copying blob sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef -Copying config sha256:21c3e96ac411242a0e876af269c0cbe9d071626bdfb7cc79bfa2ddb9f7a82db6 -Writing manifest to image destination -Storing signatures -Save success with image: 21c3e96ac411 -``` - -#### 查看运行环境与系统信息 - -可以通过“isula-build info”指令查看 - -命令原型如下: - -``` -isula-build info [flags] -``` - -支持如下Flags: - -- -H, --human-readable 布尔值,以常用内存表示格式打印内存信息,使用1000次幂 - - 使用举例: - - ``` - $ sudo - isula-build info -H - General: - MemTotal: 7.63 GB - MemFree: 757 MB - SwapTotal: 8.3 GB - SwapFree: 8.25 GB - OCI Runtime: runc - DataRoot: /var/lib/isula-build/ - RunRoot: /var/run/isula-build/ - Builders: 0 - Goroutines: 12 - Store: - Storage Driver: overlay - Backing Filesystem: extfs - Registry: - Search Registries: - oepkgs.net - Insecure Registries: - localhost:5000 - oepkgs.net - ``` - -#### 与远程镜像仓库认证 - -可以通过 login 或 logout 命令来与远程镜像仓库交互 - -- **Login 使用**: - - ``` - isula-build login mydockerhub.io - ``` - - 你可以运行 login 命令来登录远程镜像仓库 - - 目前支持的flag有: - - ``` - Flags: - -p, --password-stdin Read password from stdin - -u, --username string Username to access registry - ``` - - 通过stdin输入密码: - - ``` - $ cat creds.txt | sudo isula-build login -u cooper -p mydockerhub.io - Login Succeeded - ``` - - 通过交互式输入密码: - - ``` - $ sudo isula-build login mydockerhub.io -u cooper - Password: - Login Succeeded - ``` - -- **Logout 使用**: - - ``` - isula-build logout mydockerhub.io - ``` - - 你可以运行 logout 命令来登出远程镜像仓库。 - - 目前支持的flag有: - - ``` - Flags: - -a, --all Logout all registries - ``` - - Flags解释如下: - - -a, --all:登出所有的镜像仓库。 - - ``` - $ sudo isula-build logout -a - Removed authentications - ``` - -#### 版本查询 - -可通过version命令查看当前版本信息: - -``` -$ sudo isula-build version -Client: - Version: 0.9.2 - Go Version: go1.13.3 - Git Commit: ccb2a13 - Built: Sat Aug 22 08:06:47 2020 - OS/Arch: linux/amd64 - -Server: - Version: 0.9.2 - Go Version: go1.13.3 - Git Commit: ccb2a13 - Built: Sat Aug 22 08:06:47 2020 - OS/Arch: linux/amd64 -``` - -说明: - -isula-build completion 和 isula-builder completion 命令用于生成bash命令补全脚本。该命令为命令行框架隐式提供,不会显示在help信息中。 - - - -### 与容器引擎集成 - -isula-build可以与iSulad和docker集成,将构建好的容器镜像导入到容器引擎的本地存储中。 - -#### 与iSulad集成 - -支持将构建成功的镜像直接导出到iSulad。命令行举例: - -``` -$ sudo isula-build ctr-img build -f Dockerfile -o isulad:busybox:2.0 -``` - -通过在-o参数中指定iSulad,将构建好的容器镜像导出到iSulad,可以通过isula images查询。 - -说明: - -要求isula-build和iSulad在同一节点。 - -#### 与Docker集成 - -支持将构建成功的镜像直接导出到Docker daemon。命令行举例: - -``` -$ sudo isula-build ctr-img build -f Dockerfile -o docker-daemon:busybox:2.0 -``` - -通过在-o参数中指定docker-daemon,将构建好的容器镜像导出到docker, 可以通过docker images查询。 - -说明: - -要求isula-build和Docker在同一节点。 - - - -## 使用注意事项 - -本章节主要介绍在使用isula-build构建镜像时相关的约束和限制,以及与docker build的差异。 - -### 约束和限制 - -1. 直接导出镜像到iSulad或docker daemon时,必须指定tag。 -2. 直接导出镜像到iSulad时,isula-build client端需要将构建成功的镜像暂存成 `/var/tmp/isula-build-tmp-%v.tar` 再导入至 iSulad,用户需要保证 /var/tmp/ 目录有足够磁盘空间;同时如果在导出过程中 isula-build client进程被KILL或Ctrl+C终止,需要依赖用户手动清理 `/var/tmp/isula-build-tmp-%v.tar` 文件。 -3. 用户需保证OCI runtime(runc)可执行文件的安全性,避免被恶意替换。 -4. isula-build不支持将持久化工作目录dataroot配置在内存盘上,比如tmpfs。 -5. isula-build目前仅支持使用overlay2为底层graphdriver。 -6. isula-build当前仅支持Docker镜像。 -7. 用户需保证Dockerfile文件的权限为仅当前用户可读写,避免别的用户进行篡改。 -8. 目前仅支持使用主机网络。 -9. 导出的镜像压缩格式,目前仅支持tar.gz格式。 -10. stage name不能以数字开头、stage name的长度限制为64个字符 - -### 与docker差异 - -- isula-build兼容dockerfile语法,但与docker build相比,使用isula-build进行镜像构建和docker build的差异如下: - 1. 在每一个镜像构建stage完成后做一次提交,而不是按行提交。 - 2. isula-build暂不支持缓存。 - 3. 仅RUN指令在构建容器中执行。 - 4. 目前不支持history。 - 5. isula-build的stage name支持以数字开头。 - 6. isula-build的stage name最长可为64个字符。 - 7. ADD指令目前不支持远端URL形式。 - 8. 暂不支持对单次构建进行资源限额,可采取对isula-builder配置资源限额的方式进行限制。 -- isula-build与docker的其它差异如下: - 1. 统计镜像大小时,isula-build是直接计算每层tar包大小之和,而docker是通过解压tar遍历diff目录计算文件大小之和,因此通过`isula-build ctr-img images`查看的镜像大小与`docker images`的显示上有一定差异。 - -### 与Dockerfile语法上的差异 - -1. 暂不支持ADD指令提供的来源是远端url。 - - - -## 附录 - -### 命令行参数说明 - -**表1** ctr-img build 命令参数列表 - -| **命令** | **参数** | **说明** | -| ------------- | -------------- | ------------------------------------------------------------ | -| ctr-img build | --build-arg | string列表,构建过程中需要用到的变量 | -| | --build-static | KV值,构建二进制一致性。目前包含如下K值:- build-time:string,使用固定时间戳来构建容器镜像;时间戳格式为“YYYY-MM-DD HH-MM-SS” | -| | -f, --filename | string,Dockerfile的路径,不指定则是使用当前路径的Dockerfile文件 | -| | --iidfile | string,输出 image ID 到本地文件 | -| | -o, --output | string,镜像导出的方式和路径 | -| | --proxy | 布尔值,继承主机侧环境的proxy环境变量(默认为true) | -| | --tag | string,给构建的镜像添加tag | -| | --cap-add | string列表,构建过程中RUN指令所需要的权限 | - -**表2** ctr-img load 命令参数列表 - -| **命令** | **参数** | **说明** | -| ------------ | ----------- | --------------------------------- | -| ctr-img load | -i, --input | string,需要导入的本地tar包的路径 | - -**表3** ctr-img rm 命令参数列表 - -| **命令** | **参数** | **说明** | -| ---------- | ----------- | --------------------------------------------- | -| ctr-img rm | -a, --all | 布尔值,删除所有本地持久化存储的镜像 | -| | -p, --prune | 布尔值,删除所有没有tag的本地持久化存储的镜像 | - -**表4** ctr-img save 命令参数列表 - -| **命令** | **参数** | **说明** | -| ------------ | ------------ | ---------------------------------- | -| ctr-img save | -o, --output | string,镜像导出后在本地的存储路径 | - -**表5** login 命令参数列表 - -| **命令** | **参数** | **说明** | -| -------- | -------------------- | ------------------------------------------------------- | -| login | -p, --password-stdin | 布尔值,是否通过stdin读入密码;或采用交互式界面输入密码 | -| | -u, --username | string,登陆镜像仓库所使用的用户名 | - -**表6** logout 命令参数列表 - -| **命令** | **参数** | **说明** | -| -------- | --------- | ------------------------------------ | -| logout | -a, --all | 布尔值,是否登出所有已登陆的镜像仓库 | - -### 通信矩阵 - -isula-build两个组件进程之间通过unix socket套接字文件进行通信,无端口通信。 - -### 文件与权限 - -1. isula-build 所有的操作均需要使用 root 权限。 - -2. isula-build 运行涉及文件权限如下表所示: - - | **文件路径** | **文件/文件夹权限** | **说明** | - | ------------------------------------------- | ------------------- | ------------------------------------------------------------ | - | /usr/bin/isula-build | 550 | 命令行工具二进制文件。 | - | /usr/bin/isula-builder | 550 | 服务端isula-builder进程二进制文件。 | - | /usr/lib/systemd/system/isula-build.service | 640 | systemd配置文件,用于管理isula-build服务。 | - | /etc/isula-build/configuration.toml | 600 | isula-builder 总配置文件,包含设置 isula-builder 日志级别、持久化目录和运行时目录、OCI runtime等。 | - | /etc/isula-build/policy.json | 600 | 签名验证策略文件的语法文件。 | - | /etc/isula-build/registries.toml | 600 | 针对各个镜像仓库的配置文件,含可用的镜像仓库列表、镜像仓库黑名单。 | - | /etc/isula-build/storage.toml | 600 | 本地持久化存储的配置文件,包含所使用的存储驱动的配置。 | - | /var/run/isula_build.sock | 600 | 服务端isula-builder的本地套接字。 | - | /var/lib/isula-build | 700 | 本地持久化目录。 | - | /var/run/isula-build | 700 | 本地运行时目录。 | - | /var/tmp/isula-build-tmp-*.tar | 600 | 镜像导出至iSulad时的本地暂存目录。 | - - \ No newline at end of file diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" deleted file mode 100644 index 204d1b97fd50e5fbcfe66866410676bff526c889..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" +++ /dev/null @@ -1,18 +0,0 @@ -# 使用指南 - -本章介绍iSula容器引擎的使用方法。 ->![](public_sys-resources/icon-note.gif) **说明:** ->iSulad的所有使用操作均需要使用root权限。 - - -- [容器管理](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E5%AE%B9%E5%99%A8%E7%AE%A1%E7%90%86.html) -- [支持CNI网络](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E6%94%AF%E6%8C%81CNI%E7%BD%91%E7%BB%9C.html) -- [容器资源管理](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E5%AE%B9%E5%99%A8%E8%B5%84%E6%BA%90%E7%AE%A1%E7%90%86.html) -- [特权容器](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E7%89%B9%E6%9D%83%E5%AE%B9%E5%99%A8.html) -- [CRI接口](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/CRI%E6%8E%A5%E5%8F%A3.html) -- [镜像管理](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E9%95%9C%E5%83%8F%E7%AE%A1%E7%90%86.html) -- [容器健康状态检查](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E5%AE%B9%E5%99%A8%E5%81%A5%E5%BA%B7%E7%8A%B6%E6%80%81%E6%A3%80%E6%9F%A5.html) -- [查询信息](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E6%9F%A5%E8%AF%A2%E4%BF%A1%E6%81%AF.html) -- [安全特性](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E5%AE%89%E5%85%A8%E7%89%B9%E6%80%A7.html) -- [支持OCI hooks](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E6%94%AF%E6%8C%81OCI-hooks.html) - diff --git a/content/zh/docs/Installation/FAQ-1.md b/content/zh/docs/Installation/FAQ-1.md deleted file mode 100644 index 284a0108acfff0cd1b7879554f302299f5675164..0000000000000000000000000000000000000000 --- a/content/zh/docs/Installation/FAQ-1.md +++ /dev/null @@ -1,27 +0,0 @@ -# FAQ - - -- [FAQ](#faq) - - [树莓派启动失败](#树莓派启动失败) - - [问题现象](#问题现象) - - [原因分析](#原因分析) - - [解决方法](#解决方法) - - - -## 树莓派启动失败 - -### 问题现象 - -将 openEuler 发布的树莓派镜像刷写入 SD 卡后,树莓派启动失败。 - -### 原因分析 - -刷写 openEuler 发布的树莓派镜像后,树莓派启动失败,大致有以下几种情况: - -1. 下载的镜像文件不完整,请确保该镜像通过完整性校验。 -2. 镜像写入 SD 卡过程中出现问题,多出现在 Windows 环境下使用应用软件刷写镜像到 SD 卡的情况。 - -### 解决方法 - -将完整的镜像重新刷写入 SD 卡。 diff --git "a/content/zh/docs/Installation/figures/root\345\257\206\347\240\201.png" "b/content/zh/docs/Installation/figures/root\345\257\206\347\240\201.png" deleted file mode 100644 index b5bf8835c1b04a8ec679a34fdd20b0419b081431..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/root\345\257\206\347\240\201.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\345\210\233\345\273\272\347\224\250\346\210\267.png" "b/content/zh/docs/Installation/figures/\345\210\233\345\273\272\347\224\250\346\210\267.png" deleted file mode 100644 index 9c2208da7baf239a879277d53374037d9ff48410..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\345\210\233\345\273\272\347\224\250\346\210\267.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\345\215\212\350\207\252\345\212\250-new.png" "b/content/zh/docs/Installation/figures/\345\215\212\350\207\252\345\212\250-new.png" deleted file mode 100644 index dcdfb60e3e77594c59cfbaaece61881347cd4032..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\345\215\212\350\207\252\345\212\250-new.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\345\242\236\345\212\240inst-noverifyssl\345\217\202\346\225\260.png" "b/content/zh/docs/Installation/figures/\345\242\236\345\212\240inst-noverifyssl\345\217\202\346\225\260.png" deleted file mode 100644 index f56a7dd0c45acf8a4c3a735ed623eaccd19bfaef..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\345\242\236\345\212\240inst-noverifyssl\345\217\202\346\225\260.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\345\256\211\350\243\205\345\274\225\345\257\274\347\225\214\351\235\242.png" "b/content/zh/docs/Installation/figures/\345\256\211\350\243\205\345\274\225\345\257\274\347\225\214\351\235\242.png" deleted file mode 100644 index 0ee099a675eee71fdeb3ba3ad0f30e0be20d7af3..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\345\256\211\350\243\205\345\274\225\345\257\274\347\225\214\351\235\242.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\345\256\211\350\243\205\346\246\202\350\247\210.png" "b/content/zh/docs/Installation/figures/\345\256\211\350\243\205\346\246\202\350\247\210.png" deleted file mode 100644 index d64da9c1ad2a4afc657eb50f1e4439b5b870ea2a..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\345\256\211\350\243\205\346\246\202\350\247\210.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\345\256\211\350\243\205\346\272\220.png" "b/content/zh/docs/Installation/figures/\345\256\211\350\243\205\346\272\220.png" deleted file mode 100644 index 25a28495bad27f26cac8ce19009d2c780d92f0fd..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\345\256\211\350\243\205\346\272\220.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\345\256\211\350\243\205\347\233\256\346\240\207\344\275\215\347\275\256.png" "b/content/zh/docs/Installation/figures/\345\256\211\350\243\205\347\233\256\346\240\207\344\275\215\347\275\256.png" deleted file mode 100644 index 4c13cb4faff2f8a4292ec5d940e63aa80e268f1d..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\345\256\211\350\243\205\347\233\256\346\240\207\344\275\215\347\275\256.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\345\256\211\350\243\205\350\277\207\347\250\213.png" "b/content/zh/docs/Installation/figures/\345\256\211\350\243\205\350\277\207\347\250\213.png" deleted file mode 100644 index 9278b364149636a26a21409afc1342aa1c546ddb..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\345\256\211\350\243\205\350\277\207\347\250\213.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\345\256\214\346\210\220\345\256\211\350\243\205.png" "b/content/zh/docs/Installation/figures/\345\256\214\346\210\220\345\256\211\350\243\205.png" deleted file mode 100644 index b54d9ef9c15affd3f41ce6622be66d883ef7e744..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\345\256\214\346\210\220\345\256\211\350\243\205.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\345\274\200\345\247\213\345\256\211\350\243\205.png" "b/content/zh/docs/Installation/figures/\345\274\200\345\247\213\345\256\211\350\243\205.png" deleted file mode 100644 index 1a5771d8f56ef2472f488e3524d0d0bc91827d10..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\345\274\200\345\247\213\345\256\211\350\243\205.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\346\211\213\345\212\250\345\210\206\345\214\272.png" "b/content/zh/docs/Installation/figures/\346\211\213\345\212\250\345\210\206\345\214\272.png" deleted file mode 100644 index f56b1aba62237b74ecc60c1cf9eee9b5cd4902c0..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\346\211\213\345\212\250\345\210\206\345\214\272.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\346\227\245\346\234\237\345\222\214\346\227\266\351\227\264.png" "b/content/zh/docs/Installation/figures/\346\227\245\346\234\237\345\222\214\346\227\266\351\227\264.png" deleted file mode 100644 index 33b528bb77d0d6b0f51da604e2bad89e3a9daafe..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\346\227\245\346\234\237\345\222\214\346\227\266\351\227\264.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\347\233\230\347\254\246.png" "b/content/zh/docs/Installation/figures/\347\233\230\347\254\246.png" deleted file mode 100644 index b49213bd19cb5b9cdac6ce25564be17df2810d72..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\347\233\230\347\254\246.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\347\243\201\347\233\230\345\212\240\345\257\206\345\217\243\344\273\244.png" "b/content/zh/docs/Installation/figures/\347\243\201\347\233\230\345\212\240\345\257\206\345\217\243\344\273\244.png" deleted file mode 100644 index c76b59d3214da2c55119f0300103be0b9c2d8792..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\347\243\201\347\233\230\345\212\240\345\257\206\345\217\243\344\273\244.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\347\275\221\347\273\234\345\222\214\344\270\273\346\234\272\345\220\215.png" "b/content/zh/docs/Installation/figures/\347\275\221\347\273\234\345\222\214\344\270\273\346\234\272\345\220\215.png" deleted file mode 100644 index 24aee8cb2ca13e004d2439ffd89de047c330b58c..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\347\275\221\347\273\234\345\222\214\344\270\273\346\234\272\345\220\215.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\350\216\267\345\217\226IP.png" "b/content/zh/docs/Installation/figures/\350\216\267\345\217\226IP.png" deleted file mode 100644 index 26b6f8f60a36c4b43ebebe4dbdce169ade4b13ae..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\350\216\267\345\217\226IP.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\350\257\255\350\250\200\346\224\257\346\214\201.png" "b/content/zh/docs/Installation/figures/\350\257\255\350\250\200\346\224\257\346\214\201.png" deleted file mode 100644 index a7ddd3a5a6c3c6f377675af294a978d12480ff87..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\350\257\255\350\250\200\346\224\257\346\214\201.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\350\275\257\344\273\266\351\200\211\346\213\251.png" "b/content/zh/docs/Installation/figures/\350\275\257\344\273\266\351\200\211\346\213\251.png" deleted file mode 100644 index 011be38bc7b0030cde009574831b1a5d5a356a1f..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\350\275\257\344\273\266\351\200\211\346\213\251.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\351\200\211\346\213\251\350\257\255\350\250\200.png" "b/content/zh/docs/Installation/figures/\351\200\211\346\213\251\350\257\255\350\250\200.png" deleted file mode 100644 index 738853f1685aeaf2fc7a135f9f13443341f42c48..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\351\200\211\346\213\251\350\257\255\350\250\200.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\351\205\215\347\275\256\351\224\231\350\257\257\346\217\220\347\244\272.png" "b/content/zh/docs/Installation/figures/\351\205\215\347\275\256\351\224\231\350\257\257\346\217\220\347\244\272.png" deleted file mode 100644 index 0349567af5b1695a611b8c32219b469bcf2170e8..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\351\205\215\347\275\256\351\224\231\350\257\257\346\217\220\347\244\272.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\351\224\256\347\233\230\345\270\203\345\261\200.png" "b/content/zh/docs/Installation/figures/\351\224\256\347\233\230\345\270\203\345\261\200.png" deleted file mode 100644 index d91d52d773a277d91ebaccbd7e9ae7d770e6528b..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\351\224\256\347\233\230\345\270\203\345\261\200.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/figures/\351\253\230\347\272\247\347\224\250\346\210\267\351\205\215\347\275\256.png" "b/content/zh/docs/Installation/figures/\351\253\230\347\272\247\347\224\250\346\210\267\351\205\215\347\275\256.png" deleted file mode 100644 index 9a87dffd881b279a4b8c40c798e917a9ac7a3ede..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Installation/figures/\351\253\230\347\272\247\347\224\250\346\210\267\351\205\215\347\275\256.png" and /dev/null differ diff --git "a/content/zh/docs/Installation/\345\256\211\350\243\205\345\207\206\345\244\207.md" "b/content/zh/docs/Installation/\345\256\211\350\243\205\345\207\206\345\244\207.md" deleted file mode 100644 index 31b4eb9b7205099ee0ca942bd18b389f78be8896..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Installation/\345\256\211\350\243\205\345\207\206\345\244\207.md" +++ /dev/null @@ -1,241 +0,0 @@ -# 安装准备 - -介绍安装前需要考虑软硬件兼容性状况,以及相关的配置和准备工作。 - - -- [安装准备](#安装准备) - - [获取安装源](#获取安装源) - - [发布包完整性校验](#发布包完整性校验) - - [简介](#简介) - - [前提条件](#前提条件) - - [操作指导](#操作指导) - - [物理机的安装要求](#物理机的安装要求) - - [硬件兼容支持](#硬件兼容支持) - - [最小硬件要求](#最小硬件要求) - - [虚拟机的安装要求](#虚拟机的安装要求) - - [虚拟化平台兼容性](#虚拟化平台兼容性) - - [最小虚拟化空间要求](#最小虚拟化空间要求) - - - -## 获取安装源 - -在安装开始前,您需要获取openEuler的发布包和校验文件。 - -> ![](public_sys-resources/icon-note.gif) **说明:** -> AArch64架构的发布包支持UEFI模式,x86\_64架构的发布包支持UEFI模式和Legacy模式。 - -请按以下步骤获取openEuler的发布包和校验文件: - -1. 登录[openEuler社区](https://openeuler.org)网站。 -2. 单击“下载”。 -3. 单击“获取ISO:”后面的“Link”,显示版本列表。 -4. 单击“openEuler-20.09-beta”,进入openEuler 20.09 beta版本下载列表。 -5. 单击“ISO”,进入ISO下载列表。 - - aarch64:AArch64架构的ISO。 - - x86\_64:x86\_64架构的ISO。 - - source:openEuler源码ISO。 - -6. 根据实际待安装环境的架构选择需要下载的openEuler的发布包和校验文件。 - - 若为AArch64架构。 - 1. 单击“aarch64”。 - 2. 单击“openEuler-20.09-beta-aarch64-dvd.iso”,将openEuler发布包下载到本地。 - 3. 单击“openEuler-20.09-beta-aarch64-dvd.iso.sha256sum”,将openEuler校验文件下载到本地。 - - - 若为x86\_64架构。 - 1. 单击“x86\_64”。 - 2. 单击“openEuler-20.09-beta-x86\_64-dvd.iso”,将openEuler发布包下载到本地。 - 3. 单击“openEuler-20.09-beta-x86\_64-dvd.iso.sha256sum”,将openEuler校验文件下载到本地。 - -## 发布包完整性校验 - ->![](public_sys-resources/icon-note.gif) **说明:** ->本章节以AArch64架构的发布包完整性校验为例,x86\_64架构的发布包完整性校验的操作方法相同。 - -### 简介 - -为了防止软件包在传输过程中由于网络原因或者存储设备原因出现下载不完整的问题,在获取到软件包后,需要对软件包的完整性进行校验,通过了校验的软件包才能部署。 - -这里通过对比校验文件中记录的校验值和手动方式计算的iso文件校验值,判断软件包是否完成。若两个值相同,说明iso文件完整,否则,iso完整性被破坏,请重新获取iso发布包。 - -### 前提条件 - -在校验发布包完整性之前,需要准备如下文件: - -iso文件:openEuler-20.09-beta-aarch64-dvd.iso - -校验文件:openEuler-20.09-beta-aarch64-dvd.iso.sha256sum - -### 操作指导 - -文件完整性校验操作步骤如下: - -1. 获取校验文件中的校验值。执行命令如下: - - ``` - $ cat openEuler-20.09-beta-aarch64-dvd.iso.sha256sum - ``` - -2. 计算文件的sha256校验值。执行命令如下: - - ``` - $ sha256sum openEuler-20.09-beta-aarch64-dvd.iso - ``` - - 命令执行完成后,输出校验值。 - -3. 对比步骤1和步骤2计算的校验值是否一致。 - - 如果校验值一致说明iso文件完整性没有破坏,如果校验值不一致则可以确认文件完整性已被破坏,需要重新获取。 - -## 物理机的安装要求 - -若需要在物理机环境上安装openEuler操作系统,则物理机需要满足如下的硬件兼容性和最小硬件要求。 - -### 硬件兼容支持 - -openEuler安装时,应注意硬件兼容性方面的问题,当前已支持的服务器类型如[表1](#table14948632047)所示。 - ->![](public_sys-resources/icon-note.gif) **说明:** -> ->- TaiShan 200服务器基于华为鲲鹏920处理器。 ->- 当前仅支持华为TaiShan服务器和FusionServer Pro 机架服务器,后续将逐步增加对其他厂商服务器的支持。 - -**表 1** 支持的服务器类型 - - - - - - - - - - - - - - - - - -

服务器形态

-

服务器名称

-

服务器型号

-

机架服务器

-

TaiShan 200

-

2280均衡型

-

机架服务器

-

FusionServer Pro 机架服务器

-

FusionServer Pro 2288H V5

-
说明:

服务器要求配置Avago 3508 RAID控制卡和启用LOM-X722网卡。

-
-
- -### 最小硬件要求 - -openEuler所需的最小硬件要求如[表2](#tff48b99c9bf24b84bb602c53229e2541)所示。 - -**表 2** 最小硬件要求 - - - - - - - - - - - - - - - - - - - - - - - - - -

部件名称

-

最小硬件要求

-

说明

-

架构

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

CPU

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

-

-

内存

-

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

-

-

-

硬盘

-

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

-

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

-
- -## 虚拟机的安装要求 - -若需要在虚拟机环境上安装openEuler操作系统,则虚拟机需要满足如下的虚拟化平台兼容性和最小虚拟化要求。 - -### 虚拟化平台兼容性 - -openEuler安装时,应注意虚拟化平台兼容性的问题,当前已支持的虚拟化平台为: - -- openEuler自有的虚拟化组件(HostOS为openEuler,虚拟化组件为发布包中的qemu、KVM)创建的虚拟化平台。 -- 华为公有云的x86虚拟化平台。 - -### 最小虚拟化空间要求 - -openEuler所需的最小虚拟化空间要求如[表3](#tff48b99c9bf24b84bb602c53229e2541)所示。 - -**表 3** 最小虚拟化空间要求 - - - - - - - - - - - - - - - - - - - - - - - - - -

部件名称

-

最小虚拟化空间要求

-

说明

-

架构

-
  • AArch64
  • x86_64
-

-

-

CPU

-

2个CPU

-

-

-

内存

-

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

-

-

-

硬盘

-

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

-

-

-
- - - diff --git "a/content/zh/docs/Quickstart/figures/root\345\257\206\347\240\201.png" "b/content/zh/docs/Quickstart/figures/root\345\257\206\347\240\201.png" deleted file mode 100644 index b5bf8835c1b04a8ec679a34fdd20b0419b081431..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Quickstart/figures/root\345\257\206\347\240\201.png" and /dev/null differ diff --git "a/content/zh/docs/Quickstart/figures/\345\210\233\345\273\272\347\224\250\346\210\267.png" "b/content/zh/docs/Quickstart/figures/\345\210\233\345\273\272\347\224\250\346\210\267.png" deleted file mode 100644 index 9c2208da7baf239a879277d53374037d9ff48410..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Quickstart/figures/\345\210\233\345\273\272\347\224\250\346\210\267.png" and /dev/null differ diff --git "a/content/zh/docs/Quickstart/figures/\345\256\211\350\243\205\345\274\225\345\257\274\347\225\214\351\235\242.png" "b/content/zh/docs/Quickstart/figures/\345\256\211\350\243\205\345\274\225\345\257\274\347\225\214\351\235\242.png" deleted file mode 100644 index 0ee099a675eee71fdeb3ba3ad0f30e0be20d7af3..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Quickstart/figures/\345\256\211\350\243\205\345\274\225\345\257\274\347\225\214\351\235\242.png" and /dev/null differ diff --git "a/content/zh/docs/Quickstart/figures/\345\256\211\350\243\205\346\246\202\350\247\210.png" "b/content/zh/docs/Quickstart/figures/\345\256\211\350\243\205\346\246\202\350\247\210.png" deleted file mode 100644 index d64da9c1ad2a4afc657eb50f1e4439b5b870ea2a..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Quickstart/figures/\345\256\211\350\243\205\346\246\202\350\247\210.png" and /dev/null differ diff --git "a/content/zh/docs/Quickstart/figures/\345\256\211\350\243\205\347\233\256\346\240\207\344\275\215\347\275\256.png" "b/content/zh/docs/Quickstart/figures/\345\256\211\350\243\205\347\233\256\346\240\207\344\275\215\347\275\256.png" deleted file mode 100644 index 4c13cb4faff2f8a4292ec5d940e63aa80e268f1d..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Quickstart/figures/\345\256\211\350\243\205\347\233\256\346\240\207\344\275\215\347\275\256.png" and /dev/null differ diff --git "a/content/zh/docs/Quickstart/figures/\345\256\214\346\210\220\345\256\211\350\243\205.png" "b/content/zh/docs/Quickstart/figures/\345\256\214\346\210\220\345\256\211\350\243\205.png" deleted file mode 100644 index b54d9ef9c15affd3f41ce6622be66d883ef7e744..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Quickstart/figures/\345\256\214\346\210\220\345\256\211\350\243\205.png" and /dev/null differ diff --git "a/content/zh/docs/Quickstart/figures/\345\274\200\345\247\213\345\256\211\350\243\205.png" "b/content/zh/docs/Quickstart/figures/\345\274\200\345\247\213\345\256\211\350\243\205.png" deleted file mode 100644 index 1a5771d8f56ef2472f488e3524d0d0bc91827d10..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Quickstart/figures/\345\274\200\345\247\213\345\256\211\350\243\205.png" and /dev/null differ diff --git "a/content/zh/docs/Quickstart/figures/\350\275\257\344\273\266\351\200\211\346\213\251.png" "b/content/zh/docs/Quickstart/figures/\350\275\257\344\273\266\351\200\211\346\213\251.png" deleted file mode 100644 index 011be38bc7b0030cde009574831b1a5d5a356a1f..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Quickstart/figures/\350\275\257\344\273\266\351\200\211\346\213\251.png" and /dev/null differ diff --git "a/content/zh/docs/Quickstart/figures/\351\200\211\346\213\251\350\257\255\350\250\200.png" "b/content/zh/docs/Quickstart/figures/\351\200\211\346\213\251\350\257\255\350\250\200.png" deleted file mode 100644 index 738853f1685aeaf2fc7a135f9f13443341f42c48..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Quickstart/figures/\351\200\211\346\213\251\350\257\255\350\250\200.png" and /dev/null differ diff --git "a/content/zh/docs/Quickstart/figures/\351\253\230\347\272\247\347\224\250\346\210\267\351\205\215\347\275\256.png" "b/content/zh/docs/Quickstart/figures/\351\253\230\347\272\247\347\224\250\346\210\267\351\205\215\347\275\256.png" deleted file mode 100644 index 9a87dffd881b279a4b8c40c798e917a9ac7a3ede..0000000000000000000000000000000000000000 Binary files "a/content/zh/docs/Quickstart/figures/\351\253\230\347\272\247\347\224\250\346\210\267\351\205\215\347\275\256.png" and /dev/null differ diff --git "a/content/zh/docs/Releasenotes/CVE\346\274\217\346\264\236.md" "b/content/zh/docs/Releasenotes/CVE\346\274\217\346\264\236.md" deleted file mode 100644 index e7374faba3b76702998bd2f4e99c7679002c1887..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Releasenotes/CVE\346\274\217\346\264\236.md" +++ /dev/null @@ -1,4 +0,0 @@ -# CVE漏洞 - -版本涉及的CVE可通过[CVE列表](https://cve.openeuler.org/#/CVE)查询。 - diff --git a/content/zh/docs/Releasenotes/README.md b/content/zh/docs/Releasenotes/README.md deleted file mode 100644 index 63751f53f739f8a7c2bf8e8431e7d59f5dad323a..0000000000000000000000000000000000000000 --- a/content/zh/docs/Releasenotes/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# 组件分类 - -**应用和基础服务** -- 包括Application && Base-service - -**编程语言和编译器** -- 包括Programming-language && Compiler && sig-golang && sig-perl-modules && sig-python-modules - -**运行时和中间件** -- 包括Runtime && sig-ai-bigdata && sig-ROS && DB - -**虚拟化和容器** -- 包括Virt && oVirt && iSulad && Docker && sig-android-middleware - -**集群管理** -- 包括sig-Ha && sig-Kubernetes - -**内核** -- 包括Kernel - -**安全** -- 包括SIG-Security_facility && sig-bounds_checking_function - -**硬件和芯片使能** -- sig-RaspberryPi && sig-RISC-V && sig-Compatibility-Infra - -**文件系统** -- 包括Storage & sig-ceph - -**计算和加速库** -- 包括Computing && kae - -**网络** -- 包括Network && dpdk && sig-REDF - -**桌面** -- 包括Desktop && sig-mate-desktop && sig-UKUI && xfce && GNOME && sig-DDE - -**系统工具** -- 包括System-tool && A-Tune && dev-utils && sig-EasyLife - -**其它** -- 包括other && private \ No newline at end of file diff --git a/content/zh/docs/Releasenotes/release_notes.md b/content/zh/docs/Releasenotes/release_notes.md deleted file mode 100644 index b8f6f7d801aaa764c4f3b2a854e54c2e0677bb31..0000000000000000000000000000000000000000 --- a/content/zh/docs/Releasenotes/release_notes.md +++ /dev/null @@ -1 +0,0 @@ -本文是 openEuler 20.09 LTS 版本的发行说明。 \ No newline at end of file diff --git a/content/zh/docs/Releasenotes/zh-cn_bookmap_0225720059.md b/content/zh/docs/Releasenotes/zh-cn_bookmap_0225720059.md deleted file mode 100644 index 843daf755b25db9714413552d037bdb0d9715945..0000000000000000000000000000000000000000 --- a/content/zh/docs/Releasenotes/zh-cn_bookmap_0225720059.md +++ /dev/null @@ -1,14 +0,0 @@ -# 版本发行说明 - -- [法律声明](法律声明.md) -- [用户须知](用户须知.md) -- [简介](简介.md) -- [系统安装](系统安装.md) -- [关键特性](关键特性.md) -- [已知问题](已知问题.md) -- [已修复问题](已修复问题.md) -- [CVE漏洞](CVE漏洞.md) -- [源代码](源代码.md) -- [参与贡献](参与贡献.md) -- [致谢](致谢.md) - diff --git "a/content/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" "b/content/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" deleted file mode 100644 index 310894c2ba830da82ff91ca63dd6daeb8468b7b3..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" +++ /dev/null @@ -1,41 +0,0 @@ -# 关键特性 - -**编程语言和编译器** -- JDK8优化:APPCDS特性支持、crc32硬加速指令支持。 -- GCC优化:循环优化、自动矢量化、全局优化。 - -**运行时和中间件** -- QVisor:轻量级虚拟化Runtime。 -- iSula轻量级容器解决方案,统一IoT,边缘和云计算容器解决方案。 - -**虚拟化** -- Kunpeng虚拟化特性:CPU和内存热插拔、NMI Watchdog、KVM Custom、SmartPolling。 -- 可信启动度量:vTPM机制支撑启动阶段的对各个部件的可信度量。 -- VMTOP工具:虚拟机组件配套DFX工具,支持抓取虚拟机陷出开销,调度时延等各种数据。 - -**内核** -- TLB Range 指令支持:批量TLB invalid提升性能,MMU gather减少TLBi调用。 -- Numa aware qspinlock支持:减少跨NUMA节点的Cache/总线冲突。 -- Ktask并行化支持:内核任务并行化框架支持,内核任务并行化运行。 -- 内存系统锁优化:vmalloc分配大锁优化、Pagecache锁优化。 - -**安全** -- CloudEncalve支持:提供机密计算统一框架、南向屏蔽SGX和TrustZone的差异,北向提供统一API和SDK。 -- IMA支持:完整性度量机制 - -**硬件和芯片使能** -- Raspberry Pi支持:Raspberry系列板卡支持。 - -**计算和加速库** -- 摘要算法SM3,支持异步模型 -- 对称加密算法SM4,支持异步模型,支持CTR/XTS/CBC模式 -- 对称加密算法AES,支持异步模型,支持ECB/CTR/XTS/CBC模式 -- 非对称算法RSA,支持异步模型,支持Key Sizes 1024/2048/3072/4096 -- 密钥协商算法DH,支持异步模型,支持Key Sizes 768/1024/1536/2048/3072/4096 - -**桌面** -- UKUI:麒麟操作系统的默认桌面环境,其布局、风格和使用习惯接近传统Windows - -**系统工具** -- A-Tune:智能系统性能优化引擎,推理出业务特征,配置最佳的系统参数合,使业务处于最优运行状态 -- A-OPS: 内核热升级框架,以及配套工具 diff --git "a/content/zh/docs/Releasenotes/\345\267\262\344\277\256\345\244\215\351\227\256\351\242\230.md" "b/content/zh/docs/Releasenotes/\345\267\262\344\277\256\345\244\215\351\227\256\351\242\230.md" deleted file mode 100644 index 5000634b5d83b42b9a4e668826a8f44439baf98d..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Releasenotes/\345\267\262\344\277\256\345\244\215\351\227\256\351\242\230.md" +++ /dev/null @@ -1,243 +0,0 @@ -# 已修复问题 - -完整问题清单请参见[完整问题清单](https://gitee.com/organizations/src-openeuler/issues)。 - -完整的内核提交记录请参见[提交记录](https://gitee.com/openeuler/kernel/commits/openEuler-1.0-LTS)。 - -**应用和基础服务** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**编程语言和编译器** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**运行时和中间件** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**虚拟化和容器** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**集群管理** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**内核** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**安全** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**硬件和芯片使能** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**文件系统** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**计算和加速库** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**网络** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**桌面** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**系统工具** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**其它** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
\ No newline at end of file diff --git "a/content/zh/docs/Releasenotes/\345\267\262\347\237\245\351\227\256\351\242\230.md" "b/content/zh/docs/Releasenotes/\345\267\262\347\237\245\351\227\256\351\242\230.md" deleted file mode 100644 index 7730294041314d5b9e4e2904f56a2babbbb0c732..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Releasenotes/\345\267\262\347\237\245\351\227\256\351\242\230.md" +++ /dev/null @@ -1,238 +0,0 @@ -# 已知问题 -**应用和基础服务** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**编程语言和编译器** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**运行时和中间件** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**虚拟化和容器** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**集群管理** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**内核** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**安全** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**硬件和芯片使能** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**文件系统** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**计算和加速库** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**网络** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**桌面** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**系统工具** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
- -**其它** - - - - - - - - - - -

ISSUE

-

问题描述

-

I1BJTF

-

DEMO

-
diff --git "a/content/zh/docs/Releasenotes/\347\256\200\344\273\213.md" "b/content/zh/docs/Releasenotes/\347\256\200\344\273\213.md" deleted file mode 100644 index a93e39988321b9f901e74f729323f23828cb2196..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Releasenotes/\347\256\200\344\273\213.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 简介 - -openEuler是一款开源操作系统。当前openEuler内核源于Linux,支持鲲鹏及其它多种处理器,能够充分释放计算芯片的潜能,是由全球开源贡献者构建的高效、稳定、安全的开源操作系统,适用于数据库、大数据、云计算、人工智能等应用场景。同时,openEuler是一个面向全球的操作系统开源社区,通过社区合作,打造创新平台,构建支持多处理器架构、统一和开放的操作系统,推动软硬件应用生态繁荣发展。 - diff --git "a/content/zh/docs/Releasenotes/\347\263\273\347\273\237\345\256\211\350\243\205.md" "b/content/zh/docs/Releasenotes/\347\263\273\347\273\237\345\256\211\350\243\205.md" deleted file mode 100644 index 7788d15a0a44c493ae690387e9ea496a7ad6d27a..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Releasenotes/\347\263\273\347\273\237\345\256\211\350\243\205.md" +++ /dev/null @@ -1,268 +0,0 @@ -# 系统安装 - -## 发布件 - -openEuler发布件包括[ISO发布包](http://repo.openeuler.org/openEuler-20.09-LTS/ISO/)、[虚拟机镜像](http://repo.openeuler.org/openEuler-20.09-LTS/virtual_machine_img/)、[容器镜像](http://repo.openeuler.org/openEuler-20.09-LTS/docker_img/)和[repo源](http://repo.openeuler.org/openEuler-20.09-LTS/)。ISO发布包请参见[表1](#table8396719144315)。容器清单参见[表3](#table1276911538154)。repo源方便在线使用,repo源目录请参见[表4](#table953512211576)。 - -**表 1** 发布ISO列表 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

名称

-

描述

-

openEuler-20.09-LTS-aarch64-dvd.iso

-

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

-

openEuler-20.09-LTS-everything-aarch64-dvd.iso

-

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

-

openEuler-20.09-LTS-debuginfo-aarch64-dvd.iso

-

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

-

openEuler-20.09-LTS-x86_64-dvd.iso

-

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

-

openEuler-20.09-LTS-everything-x86_64-dvd.iso

-

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

-

openEuler-20.09-LTS-debuginfo-x86_64-dvd.iso

-

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

-

openEuler-20.09-LTS-source-dvd.iso

-

openEuler源码ISO

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

名称

-

描述

-

openEuler-20.09-LTS.aarch64.qcow2.xz

-

AArch64架构下openEuler虚拟机镜像

-

openEuler-20.09-LTS.x86_64.qcow2.xz

-

x86_64架构下openEuler虚拟机镜像

-
- ->![](public_sys-resources/icon-note.gif) **说明:** ->虚拟机镜像root用户默认密码为:openEuler12\#$,首次登录后请及时修改。 - -**表 3** 容器镜像列表 - - - - - - - - - - - - - -

名称

-

描述

-

openEuler-docker.aarch64.tar.xz

-

AArch64架构下openEuler容器镜像

-

openEuler-docker.x86_64.tar.xz

-

x86_64架构下openEuler容器镜像

-
- -**表 4** repo源列表 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

目录

-

描述

-

ISO

-

存放ISO镜像

-

OS

-

存放基础软件包源

-

debuginfo

-

存放调试包源

-

docker_img

-

存放容器镜像

-

virtual_machine_img

-

存放虚拟机镜像

-

everything

-

存放全量软件包源

-

extras

-

存放扩展软件包源

-

source

-

存放源码软件源

-

update

-

存放升级软件包源

-

EPOL

-

存放openEuler扩展包

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

部件名称

-

最小硬件要求

-

CPU

-

鲲鹏 920(架构为AArch64)

-

x86-64(Skylake以上)

-

内存

-

不小于8GB

-

硬盘

-

不小于120GB

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

厂商

-

服务器名称

-

服务器具体型号

-

部件名称

-

典型配置

-

华为

-

TaiShan 200

-

2280均衡型

-

CPU

-

HiSilicon Kunpeng 920

-

内存

-

32G*4 2933MHz

-

RAID卡

-

LSI SAS3508

-

网络

-

TM210

-

华为

-

FusionServer Pro

-

2288H V5(机架服务器)

-

CPU

-

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

-

内存

-

32*4 2400MHz

-

RAID卡

-

LSI SAS3508

-

网络

-

X722

-
- diff --git a/content/zh/docs/userguide/images/Maintainer.jpg b/content/zh/docs/userguide/images/Maintainer.jpg deleted file mode 100644 index da0d5f1b5d928eca3a0d63795f59c55331136065..0000000000000000000000000000000000000000 Binary files a/content/zh/docs/userguide/images/Maintainer.jpg and /dev/null differ diff --git a/content/zh/docs/userguide/images/PatchTracking.jpg b/content/zh/docs/userguide/images/PatchTracking.jpg deleted file mode 100644 index e12afd6227c18c333f289b9aa71abf608d8058a0..0000000000000000000000000000000000000000 Binary files a/content/zh/docs/userguide/images/PatchTracking.jpg and /dev/null differ diff --git a/content/zh/docs/userguide/pkgship.md b/content/zh/docs/userguide/pkgship.md deleted file mode 100644 index 937597d4f3a3e2d1a84fbeb71cb2e2371655b155..0000000000000000000000000000000000000000 --- a/content/zh/docs/userguide/pkgship.md +++ /dev/null @@ -1,192 +0,0 @@ -pkgship -=== - -# 介绍 -pkgship是一款管理OS软件包依赖关系,提供依赖和被依赖关系完整图谱的查询工具,pkgship提供软件包依赖查询、生命周期管理、补丁查询等功能。 -1. 软件包依赖查询:方便社区人员在软件包引入、更新和删除的时候了解软件的影响范围。 -2. 生命周期管理:跟踪上游软件包发布状态,方便维护人员了解当前软件状态,及时升级到合理的版本。 -3. 补丁查询:方便社区人员了解openEuler软件包的补丁情况以及提取补丁内容。 - -# 架构 -系统采用flask-restful开发,使用SQLAlchemy ORM查询框架,同时支持mysql和sqlite两种数据库,可以通过配置文件的更改使用哪种数据库。 - -# 软件下载 -* Repo源挂载地址:https://repo.openeuler.org/ -* 源码获取地址:https://gitee.com/openeuler/openEuler-Advisor/tree/master/packageship -* rpm包获取地址:https://117.78.1.88/project/show/openEuler:Mainline - -# 安装工具 -工具安装可通过以下两种方式实现。 - -* 先使用dnf挂载pkgship软件在所在repo源(具体方法可参考[应用开发指南](https://openeuler.org/zh/docs/20.03_LTS/docs/ApplicationDev/%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87.html)),然后执行如下指令下载以及安装pkgship及其依赖。 - - ``` - dnf install pkgship - ``` - -* 先下载pkgship的rpm包,然后执行如下命令进行安装(其中“x.x-x”表示版本号,请用实际情况代替)。 - - ``` - rpm -ivh pkgship-x.x-x.oe1.noarch.rpm - ``` - - 或者 - - ``` - dnf install pkgship-x.x-x.oe1.noarch.rpm - ``` - -# 配置参数 -1. 在配置文件中对相应参数进行配置,系统的默认配置文件存放在 /etc/pkgship/packge.ini,请根据实际情况进行配置更改。 - - ``` - vim /etc/pkgship/package.ini - ``` - -2. 创建初始化数据库的yaml配置文件: - conf.yaml 文件默认存放在 /etc/pkgship/ 路径下,pkgship会通过该配置读取要建立的数据库名称以及需要导入的sqlite文件。conf.yaml 示例如下所示。 - - ``` - - dbname:openEuler-20.03-LTS - src_db_file: - - /etc/pkgship/src.sqlite - bin_db_file: - - /etc/pkgship/bin.sqlite - status:enable - priority:1 - ``` - -> 如需更改存放路径,请更改package.ini下的 init_conf_path 选项 - - -# 服务启动和停止 -pkgship使用uWSGI web服务器,启动和停止命令如下所示。 -``` -pkgshipd start - -pkgshipd stop -``` -# 工具使用 -1. 数据库初始化。 - - ``` - pkgship init - ``` - -2. 单包查询。 - - 查询源码包(sourceName)在所有数据库中的信息 。 - - ``` - pkgship single sourceName - ``` - - 查询当前源码包(sourceName)在指定数据库(dbName)中的信息。 - ``` - pkgship single sourceName -db dbName - ``` - -3. 所有包查询。 - 查询所有数据库下包含的所有包的信息。 - - ``` - pkgship list - ``` - - 查询指定数据库(dbName)下的所有包的信息。 - ``` - pkgship list -db dbName - ``` - -4. 安装依赖查询。 - 查询二进制包(binaryName)的安装依赖,按照默认优先级查询数据库。 - - ``` - pkgship installdep binaryName - ``` - - 在指定数据库(dbName)下查询二进制包(binaryName)的所有安装依赖,按照先后顺序指定数据库查询的优先级。 - ``` - pkgship installdep binaryName -dbs dbName1 dbName2... - ``` - -5. 编译依赖查询。 - 查询源码包(sourceName)的所有编译依赖,按照默认优先级查询数据库。 - - ``` - pkgship builddep sourceName - ``` - - 在指定数据库(dbName)下查询源码包(sourceName)的所有安装依赖,按照先后顺序指定数据库查询的优先级。 - ``` - pkgship builddep sourceName -dbs dbName1 dbName2... - ``` - -6. 自编译自安装依赖查询。 - 查询二进制包(binaryName)的安装和编译依赖,按照默认优先级查询数据库。 - - ``` - pkgship selfbuild binaryName - ``` - - 查询源码包(sourceName )的安装和编译依赖,按照默认优先级查询数据库。 - ``` - pkgship selfbuild sourceName -t source - ``` - 其他参数: - - -dbs 指定数据库优先级。 - - ``` - 示例:pkgship selfbuild binaryName -dbs dbName1 dbName2 - ``` - -s 是否查询自编译依赖。其中0表示不查询自编译依赖,1表示查询自编译依赖,默认为0,可以指定1。 - - ``` - 查询自编译示例:pkgship selfbuild sourceName -t source -s 1 - ``` - -w 是否查询对应包的子包。其中0表示不查询对应子包,1表示查询对应子包,默认为0,可以指定1。 - - ``` - 查询子包示例:pkgship selfbuild binaryName -w 1 - ``` - -7. 被依赖查询。 - 查询源码包(sourceName)在某数据库(dbName)中被哪些包所依赖,查询结果默认不包含对应二进制包的子包 。 - - ``` - pkgship bedepend sourceName -db dbName - ``` - - 使查询结果包含二进制包的子包加入参数 -w。 - ``` - pkgship bedepend sourceName -db dbName -w 1 - ``` - -8. 包信息记录修改。 - 变更数据库中(dbName)源码包(sourceName)的maintainer为Newmaintainer 。 - - ``` - pkgship updatepkg sourceName db dbName -m Newmaintainer - ``` - - 变更数据库中(dbName)源码包(sourceName)的maintainlevel为Newmaintainlevel,值在1~4之间。 - - ``` - pkgship updatepkg sourceName db dbName -l Newmaintainlevel - ``` - - 同时变更数据库中(dbName)源码包(sourceName)的maintainer 为Newmaintainer和变更 maintainlevel为Newmaintainlevel。 - - ``` - pkgship updatepkg sourceName db dbName -m Newmaintainer -l Newmaintainlevel - ``` -9. 数据库删除。 - 删除指定数据库(dbName)。 - - ``` - pkgship rm db dbName - ``` - - - diff --git "a/content/zh/docs/userguide/\346\246\202\350\277\260.md" "b/content/zh/docs/userguide/\346\246\202\350\277\260.md" deleted file mode 100644 index 74490c61e7f085f49758d903630e79fcb1949a00..0000000000000000000000000000000000000000 --- "a/content/zh/docs/userguide/\346\246\202\350\277\260.md" +++ /dev/null @@ -1,2 +0,0 @@ -本文主要介绍在openEuler 发行版本过程中使用到的工具集,主要包含工具的介绍,安装以及使用等方面内容。 - diff --git "a/content/zh/docs/userguide/\350\241\245\344\270\201\345\267\245\345\205\267.md" "b/content/zh/docs/userguide/\350\241\245\344\270\201\345\267\245\345\205\267.md" deleted file mode 100644 index fcef036b2d38c89832d60ba8bae32f2c3d7540ec..0000000000000000000000000000000000000000 --- "a/content/zh/docs/userguide/\350\241\245\344\270\201\345\267\245\345\205\267.md" +++ /dev/null @@ -1,254 +0,0 @@ -补丁跟踪 -=== - - -# 简介 - -在 openEuler 发行版开发过程,需要及时更新上游社区各个软件包的最新代码,修改功能 bug 及安全问题,确保发布的 openEuler 发行版尽可能避免缺陷和漏洞。 - -本工具对软件包进行补丁管理,主动监控上游社区提交,自动生成补丁,并自动提交 issue 给对应的 maintainer,同时自动验证补丁基础功能,减少验证工作量支持 maintainer 快速决策。 - -# 架构 - -## C/S架构 - -补丁跟踪采用 C/S 架构。 - -服务端(patch-tracking) :负责执行补丁跟踪任务,包括:维护跟踪项,识别上游仓库分支代码变更并形成补丁文件,向 Gitee 提交 issue 及 PR,同时 patch-tracking 提供 RESTful 接口,用于对跟踪项进行增删改查操作。 - -客户端:即命令行工具(patch-tracking-cli),通过调用 patch-tracking 的 RESTful 接口,实现对跟踪项的增删改查操作。 - -## 核心流程 - -* 补丁跟踪服务流程 - -**主要步骤:** - -1. 命令行工具写入跟踪项。 -2. 自动从跟踪项配置的上游仓库(例如Github)获取补丁文件。 -3. 创建临时分支,将获取到的补丁文件提交到临时分支。 -4. 自动提交issue到对应项目,并生成关联 issue 的 PR。 - -PatchTracking - -* Maintainer对提交的补丁处理流程 - -**主要步骤:** -1. Maintainer分析临时分支中的补丁文件,判断是否合入。 -2. 执行构建,构建成功后判断是否合入PR。 - -![Maintainer](images/Maintainer.jpg) - -## 数据结构 - -* Tracking表 - -| 序号 | 名称 | 说明 | 类型 | 键 | 允许空 | -|:----:| ----| ----| ----| ----| ----| -| 1 | id | 自增补丁跟踪项序号 | int | - | NO | -| 2 | version_control | 上游SCM的版本控制系统类型 | String | - | NO | -| 3 | scm_repo | 上游SCM仓库地址 | String | - | NO | -| 4 | scm_branch | 上游SCM跟踪分支 | String | - | NO | -| 5 | scm_commit | 上游代码最新处理过的Commit ID | String | - | YES | -| 6 | repo | 包源码在Gitee的仓库地址 | String | Primary | NO | -| 7 | branch | 包源码在Gitee的仓库分支 | String | Primary | NO | -| 8 | enabled | 是否启动跟踪 | Boolean | -| NO | - -* Issue表 - -| 序号 | 名称 | 说明 | 类型 | 键 | 允许空 | -|:----:| ----| ----| ----| ----| ----| -| 1 | issue | issue编号 | String | Primary | NO | -| 2 | repo | 包源码在Gitee的仓库地址 | String | - | NO | -| 3 | branch | 包源码在Gitee的仓库分支 | String | - | NO | - -# 工具部署 - -## 环境要求 - ->* 安装 Python 3.7及以上版本 ->* 已安装 pip3。 - -## 安装依赖 - -执行如下命令安装依赖包。 - -```shell script -yum install -y gcc python3-devel openssl-devel -pip3 install flask flask-sqlalchemy flask-apscheduler requests flask_httpauth -pip3 install -I uwsgi -``` - -## 安装工具 - -执行如下命令安装工具包(其中”x.x.x”表示版本号,请用实际情况代替)。 - -```shell script -rpm -ivh patch-tracking-xxx.rpm -``` - -## 配置参数 - -在配置文件中对相应参数进行配置,配置文件路径为 `/etc/patch-tracking/settings.conf`。 - -1. 配置服务监听地址。 - - ``` - LISTEN = "127.0.0.1:5001" - ``` - -2. GitHub Token, 用于访问托管在 GitHub 上游开源软件仓的仓库信息 , 生成 GitHub Token 的方法参考 [Creating a personal access token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) 。 - - ``` - GITHUB_ACCESS_TOKEN = "" - ``` - -3. 对于托管在gitee上的需要跟踪的仓库,配置一个有该仓库权限的gitee的token,用于提交patch文件,提交issue,提交PR等操作。 - - ``` - GITEE_ACCESS_TOKEN = "" - ``` - -4. 定时扫描数据库中是否有新增或修改的跟踪项,对扫描到的跟踪项执行获取上游补丁任务,在这里配置扫描的时间间隔,数字单位是秒。 - - ``` - SCAN_DB_INTERVAL = 3600 - ``` - -5. 命令行工具运行过程中,POST接口需要填写进行认证的用户名和口令哈希值。 - - ``` - USER = "admin" - - PASSWORD = "" - ``` - - > `USER`默认值为`admin`。 - -​ 执行如下指令,获取口令的哈希值,其中Test@123为设置的口令。 - -``` -[root]# generate_password Test@123 -pbkdf2:sha256:150000$w38eLeRm$ebb5069ba3b4dda39a698bd1d9d7f5f848af3bd93b11e0cde2b28e9e34bfbbae -``` - -> `口令值`需要满足如下复杂度要求: -> -> * 长度大于等于6个字符 -> * 必须包含大写字母、小写字母、数字、特殊字符(~!@#%^*-_=+) - - 将口令的哈希值`pbkdf2:sha256:150000$w38eLeRm$ebb5069ba3b4dda39a698bd1d9d7f5f848af3bd93b11e0cde2b28e9e34bfbbae`配置到`PASSWORD = ""`引号中。 - -## 启动补丁跟踪服务 - -可以使用以下两种方式启动服务。 - -* 使用systemd方式。 - - ``` - systemctl start patch-tracking - ``` - -* 直接执行可执行程序。 - - ``` - /usr/bin/patch-tracking - ``` - -# 工具使用 - -## 添加跟踪项 - -将需要跟踪的软件仓库和分支与其上游开源软件仓库与分支关联起来,可以通过以下三种方式实现。 - -### 命令行直接添加 - -参数含义: ->--user :POST接口需要进行认证的用户名,同settings.conf中的USER参数 \ ---password :POST接口需要进行认证的口令,为settings.conf中的PASSWORD哈希值对应的实际的口令字符串 \ ---server :启动Patch Tracking服务的URL,例如:127.0.0.1:5001 \ ---version_control :上游仓库版本的控制工具,只支持github \ ---repo: 需要进行跟踪的仓库名称,格式:组织/仓库 \ ---branch :需要进行跟踪的仓库的分支名称 \ ---scm_repo :被跟踪的上游仓库的仓库名称,github格式:组织/仓库 \ ---scm_branch: 被跟踪的上游仓库的仓库的分支 \ ---enable :是否自动跟踪该仓库 - -例如: -```shell script -patch-tracking-cli --server 127.0.0.1:5001 --user admin --password Test@123 --version_control github --repo testPatchTrack/testPatch1 --branch master --scm_repo BJMX/testPatch01 --scm_branch test --enable true -``` - -### 指定文件添加 - -参数含义: ->--server :启动Patch Tracking服务的URL,例如:127.0.0.1:5001 \ ---user :POST接口需要进行认证的用户名,同settings.conf中的USER参数 \ ---password :POST接口需要进行认证的口令,为settings.conf中的PASSWORD哈希值对应的实际的口令字符串 \ ---file :yaml文件路径 - -将仓库、分支、版本管理工具、是否启动监控等信息写入yaml文件(例如tracking.yaml),文件路径作为`--file`的入参调用命令。 - -例如: -```shell script -patch-tracking-cli --server 127.0.0.1:5001 --user admin --password Test@123 --file tracking.yaml -``` - -yaml文件内容格式如下,冒号左边的内容不可修改,右边内容根据实际情况填写。 - -```shell script -version_control: github -scm_repo: xxx/xxx -scm_branch: master -repo: xxx/xxx -branch: master -enabled: true -``` - ->version_control :上游仓库版本的控制工具,只支持github \ -scm_repo :被跟踪的上游仓库的仓库名称,github格式:组织/仓库 \ -scm_branch :被跟踪的上游仓库的仓库的分支 \ -repo :需要进行跟踪的仓库名称,格式:组织/仓库 \ -branch :需要进行跟踪的仓库的分支名称 \ -enable :是否自动跟踪该仓库 - -### 指定目录添加 - -在指定的目录,例如`test_yaml`下放入多个`xxx.yaml`文件,执行如下命令,记录指定目录下所有yaml文件的跟踪项。 - -参数含义: ->--user :POST接口需要进行认证的用户名,同settings.conf中的USER参数 \ ---password :POST接口需要进行认证的口令,为settings.conf中的PASSWORD哈希值对应的实际的口令字符串 \ ---server :启动Patch Tracking服务的URL,例如:127.0.0.1:5001 \ ---dir :存放yaml文件目录的路径 - -```shell script -patch-tracking-cli --server 127.0.0.1:5001 --user admin --password Test@123 --dir /home/Work/test_yaml/ -``` - -## 查询跟踪项 - -```shell script -curl -k https:///tracking -``` -例如: -```shell script -curl -k https://127.0.0.1:5001/tracking -``` - -## 查询生成的 Issue 列表 - -```shell script -curl -k https:///issue -``` -例如: -```shell script -curl -k https://127.0.0.1:5001/issue -``` - -## 码云查看 issue 及 PR - -登录Gitee上进行跟踪的软件项目,在该项目的Issues和Pull Requests页签下,可以查看到名为`[patch tracking] TIME`,例如` [patch tracking] 20200713101548`的条目,该条目即是刚生成的补丁文件的issue和对应PR。 - - - diff --git a/content/zh/menu/index.md b/content/zh/menu/index.md deleted file mode 100644 index 1d6d99d870b18d22a517af3574a05d86ae517626..0000000000000000000000000000000000000000 --- a/content/zh/menu/index.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -headless: true ---- -- [法律声明]({{< relref "./docs/Releasenotes/法律声明.md" >}}) -- [发行说明]({{< relref "./docs/Releasenotes/release_notes.md" >}}) - - [用户须知]({{< relref "./docs/Releasenotes/用户须知.md" >}}) - - [简介]({{< relref "./docs/Releasenotes/简介.md" >}}) - - [系统安装]({{< relref "./docs/Releasenotes/系统安装.md" >}}) - - [关键特性]({{< relref "./docs/Releasenotes/关键特性.md" >}}) - - [已知问题]({{< relref "./docs/Releasenotes/已知问题.md" >}}) - - [已修复问题]({{< relref "./docs/Releasenotes/已修复问题.md" >}}) - - [CVE漏洞]({{< relref "./docs/Releasenotes/CVE漏洞.md" >}}) - - [源代码]({{< relref "./docs/Releasenotes/源代码.md" >}}) - - [参与贡献]({{< relref "./docs/Releasenotes/参与贡献.md" >}}) - - [致谢]({{< relref "./docs/Releasenotes/致谢.md" >}}) - -- [快速入门]({{< relref "./docs/Quickstart/quick-start.md" >}}) - -- [安装指南]({{< relref "./docs/Installation/installation.md" >}}) - - [安装在服务器]({{< relref "./docs/Installation/安装在服务器.md" >}}) - - [安装准备]({{< relref "./docs/Installation/安装准备.md" >}}) - - [安装方式介绍]({{< relref "./docs/Installation/安装方式介绍.md" >}}) - - [安装指导]({{< relref "./docs/Installation/安装指导.md" >}}) - - [使用kickstart自动化安装]({{< relref "./docs/Installation/使用kickstart自动化安装.md" >}}) - - [FAQ]({{< relref "./docs/Installation/FAQ.md" >}}) - - [安装在树莓派]({{< relref "./docs/Installation/安装在树莓派.md" >}}) - - [安装准备]({{< relref "./docs/Installation/安装准备-1.md" >}}) - - [安装方式介绍]({{< relref "./docs/Installation/安装方式介绍-1.md" >}}) - - [安装指导]({{< relref "./docs/Installation/安装指导-1.md" >}}) - - [FAQ]({{< relref "./docs/Installation/FAQ-1.md" >}}) - - [更多资源]({{< relref "./docs/Installation/更多资源.md" >}}) - - -- [管理员指南]({{< relref "./docs/Administration/administration.md" >}}) - - [查看系统信息]({{< relref "./docs/Administration/查看系统信息.md" >}}) - - [基础配置]({{< relref "./docs/Administration/基础配置.md" >}}) - - [管理用户和用户组]({{< relref "./docs/Administration/管理用户和用户组.md" >}}) - - [使用DNF管理软件包]({{< relref "./docs/Administration/使用DNF管理软件包.md" >}}) - - [管理服务]({{< relref "./docs/Administration/管理服务.md" >}}) - - [管理进程]({{< relref "./docs/Administration/管理进程.md" >}}) - - [配置网络]({{< relref "./docs/Administration/配置网络.md" >}}) - - [使用LVM管理硬盘]({{< relref "./docs/Administration/使用LVM管理硬盘.md" >}}) - - [使用KAE加速引擎]({{< relref "./docs/Administration/使用KAE加速引擎.md" >}}) - - [搭建服务]({{< relref "./docs/Administration/搭建服务.md" >}}) - - [搭建repo服务器]({{< relref "./docs/Administration/搭建repo服务器.md" >}}) - - [搭建FTP服务器]({{< relref "./docs/Administration/搭建FTP服务器.md" >}}) - - [搭建web服务器]({{< relref "./docs/Administration/搭建web服务器.md" >}}) - - [搭建数据库服务器]({{< relref "./docs/Administration/搭建数据库服务器.md" >}}) - - [FAQ]({{< relref "./docs/Administration/FAQ-54.md" >}}) - - -- [虚拟化用户指南]({{< relref "./docs/Virtualization/virtualization.md" >}}) - - [认识虚拟化]({{< relref "./docs/Virtualization/认识虚拟化.md" >}}) - - [安装虚拟化]({{< relref "./docs/Virtualization/安装虚拟化.md" >}}) - - [准备使用环境]({{< relref "./docs/Virtualization/准备使用环境.md" >}}) - - [虚拟机配置]({{< relref "./docs/Virtualization/虚拟机配置.md" >}}) - - [管理虚拟机]({{< relref "./docs/Virtualization/管理虚拟机.md" >}}) - - [热迁移虚拟机]({{< relref "./docs/Virtualization/热迁移虚拟机.md" >}}) - - [管理系统资源]({{< relref "./docs/Virtualization/管理系统资源.md" >}}) - - [管理设备]({{< relref "./docs/Virtualization/管理设备.md" >}}) - - [最佳实践]({{< relref "./docs/Virtualization/最佳实践.md" >}}) - - [附录]({{< relref "./docs/Virtualization/附录.md" >}}) - - -- [容器用户指南]({{< relref "./docs/Container/container.md" >}}) - - [iSula容器引擎]({{< relref "./docs/Container/iSula容器引擎.md" >}}) - - [安装、升级与卸载]({{< relref "./docs/Container/安装-升级与卸载.md" >}}) - - [安装与配置]({{< relref "./docs/Container/安装与配置.md" >}}) - - [升级]({{< relref "./docs/Container/升级.md" >}}) - - [卸载]({{< relref "./docs/Container/卸载.md" >}}) - - [使用指南]({{< relref "./docs/Container/使用指南.md" >}}) - - [容器管理]({{< relref "./docs/Container/容器管理.md" >}}) - - [支持CNI网络]({{< relref "./docs/Container/支持CNI网络.md" >}}) - - [特权容器]({{< relref "./docs/Container/特权容器.md" >}}) - - [CRI接口]({{< relref "./docs/Container/CRI接口.md" >}}) - - [镜像管理]({{< relref "./docs/Container/镜像管理.md" >}}) - - [容器健康状态检查]({{< relref "./docs/Container/容器健康状态检查.md" >}}) - - [查询信息]({{< relref "./docs/Container/查询信息.md" >}}) - - [安全特性]({{< relref "./docs/Container/安全特性.md" >}}) - - [支持OCI hooks]({{< relref "./docs/Container/支持OCI-hooks.md" >}}) - - [附录]({{< relref "./docs/Container/附录.md" >}}) - - - [系统容器]({{< relref "./docs/Container/系统容器.md" >}}) - - [安装指导]({{< relref "./docs/Container/安装指导.md" >}}) - - [使用指南]({{< relref "./docs/Container/使用指南-1.md" >}}) - - [指定rootfs创建容器]({{< relref "./docs/Container/指定rootfs创建容器.md" >}}) - - [通过systemd启动容器]({{< relref "./docs/Container/通过systemd启动容器.md" >}}) - - [容器内reboot/shutdown]({{< relref "./docs/Container/容器内reboot-shutdown.md" >}}) - - [cgroup路径可配置]({{< relref "./docs/Container/cgroup路径可配置.md" >}}) - - [namespace化内核参数可写]({{< relref "./docs/Container/namespace化内核参数可写.md" >}}) - - [共享内存通道]({{< relref "./docs/Container/共享内存通道.md" >}}) - - [动态加载内核模块]({{< relref "./docs/Container/动态加载内核模块.md" >}}) - - [环境变量持久化]({{< relref "./docs/Container/环境变量持久化.md" >}}) - - [最大句柄数限制]({{< relref "./docs/Container/最大句柄数限制.md" >}}) - - [安全性和隔离性]({{< relref "./docs/Container/安全性和隔离性.md" >}}) - - [容器资源动态管理]({{< relref "./docs/Container/容器资源动态管理.md" >}}) - - [附录]({{< relref "./docs/Container/附录-2.md" >}}) - - - [安全容器]({{< relref "./docs/Container/安全容器.md" >}}) - - [安装与配置]({{< relref "./docs/Container/安装与配置-2.md" >}}) - - [使用方法]({{< relref "./docs/Container/使用方法-1.md" >}}) - - [管理安全容器的生命周期]({{< relref "./docs/Container/管理安全容器的生命周期.md" >}}) - - [为安全容器配置资源]({{< relref "./docs/Container/为安全容器配置资源.md" >}}) - - [为安全容器配置网络]({{< relref "./docs/Container/为安全容器配置网络.md" >}}) - - [监控安全容器]({{< relref "./docs/Container/监控安全容器.md" >}}) - - [附录]({{< relref "./docs/Container/附录-3.md" >}}) - - - [Docker容器]({{< relref "./docs/Container/Docker容器.md" >}}) - - [安装配置]({{< relref "./docs/Container/安装配置-3.md" >}}) - - [容器管理]({{< relref "./docs/Container/容器管理-3.md" >}}) - - [镜像管理]({{< relref "./docs/Container/镜像管理-3.md" >}}) - - [命令行参考]({{< relref "./docs/Container/命令行参考.md" >}}) - - [容器引擎]({{< relref "./docs/Container/容器引擎-4.md" >}}) - - [容器管理]({{< relref "./docs/Container/容器管理-4.md" >}}) - - [镜像管理]({{< relref "./docs/Container/镜像管理-4.md" >}}) - - [统计信息]({{< relref "./docs/Container/统计信息-4.md" >}}) - - [isula-build构建工具]({{< relref "./docs/Container/isula-build构建工具.md" >}}) - - -- [A-Tune用户指南]({{< relref "./docs/A-Tune/A-Tune.md" >}}) - - [认识A-Tune]({{< relref "./docs/A-Tune/认识A-Tune.md" >}}) - - [安装与部署]({{< relref "./docs/A-Tune/安装与部署.md" >}}) - - [使用方法]({{< relref "./docs/A-Tune/使用方法.md" >}}) - - [常见问题与解决方法]({{< relref "./docs/A-Tune/常见问题与解决方法.md" >}}) - - [附录]({{< relref "./docs/A-Tune/附录.md" >}}) - - -- [应用开发指南]({{< relref "./docs/ApplicationDev/application-development.md" >}})userguide - - [开发环境准备]({{< relref "./docs/ApplicationDev/开发环境准备.md" >}}) - - [使用GCC编译]({{< relref "./docs/ApplicationDev/使用GCC编译.md" >}}) - - [使用make编译]({{< relref "./docs/ApplicationDev/使用make编译.md" >}}) - - [使用JDK编译]({{< relref "./docs/ApplicationDev/使用JDK编译.md" >}}) - - [构建RPM包]({{< relref "./docs/ApplicationDev/构建RPM包.md" >}}) - -- [openEuler工具集用户指南]({{< relref "./docs/userguide/概述.md" >}}) - - [补丁工具]({{< relref "./docs/userguide/补丁工具.md" >}}) - - [pkgship]({{< relref "./docs/userguide/pkgship.md" >}}) \ No newline at end of file diff --git a/docs/.vscode/settings.json b/docs/.vscode/settings.json new file mode 100644 index 0000000000000000000000000000000000000000..95becc00cae37a4c6f9727b247ebd6c3e8961e82 --- /dev/null +++ b/docs/.vscode/settings.json @@ -0,0 +1,18 @@ +{ + "editor.tokenColorCustomizations": { + "textMateRules": [ + { + "scope": "kunpeng.func", + "settings": { + "foreground": "#28a745" + } + }, + { + "scope": "kunpeng.intrinsics", + "settings": { + "foreground": "#28a745" + } + } + ] + } +} \ No newline at end of file diff --git "a/content/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\234\215\345\212\241\345\231\250.md" b/docs/README.md similarity index 100% rename from "content/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\234\215\345\212\241\345\231\250.md" rename to docs/README.md diff --git a/content/en/docs/A-Tune/A-Tune.md b/docs/en/docs/A-Tune/A-Tune.md similarity index 100% rename from content/en/docs/A-Tune/A-Tune.md rename to docs/en/docs/A-Tune/A-Tune.md diff --git a/content/en/docs/A-Tune/appendixes.md b/docs/en/docs/A-Tune/appendixes.md similarity index 55% rename from content/en/docs/A-Tune/appendixes.md rename to docs/en/docs/A-Tune/appendixes.md index 46f489cac3e98bcc418e368e7f442270d31a13fa..2d776555c04a00f5a7c56e5d8b503925019af32a 100644 --- a/content/en/docs/A-Tune/appendixes.md +++ b/docs/en/docs/A-Tune/appendixes.md @@ -8,19 +8,13 @@ **Table 1** Terminology - - - - - @@ -28,3 +22,4 @@

Term

Description

workload_type

-

Workload type, which is used to identify a type of service with the same characteristics.

-

profile

+

profile

Set of optimization items and optimal parameter configuration.

+ diff --git a/content/en/docs/A-Tune/application-scenarios.md b/docs/en/docs/A-Tune/application-scenarios.md similarity index 66% rename from content/en/docs/A-Tune/application-scenarios.md rename to docs/en/docs/A-Tune/application-scenarios.md index 924170be9956171063f74f8a718545db93e55907..aa878d038f530132ffddf9626fd2e18f3c660a0a 100644 --- a/content/en/docs/A-Tune/application-scenarios.md +++ b/docs/en/docs/A-Tune/application-scenarios.md @@ -6,7 +6,7 @@ You can use functions provided by A-Tune through the CLI client atune-adm. This - [Overview](#overview-0) - [Querying Workload Types](#querying-workload-types) - [list](#list) - - [Workload Type Analysis and Auto Optimization](#workload-type-analysis-and-auto-optimization) + - [Workload Type Analysis and Auto Tuning](#workload-type-analysis-and-auto-tuning) - [analysis](#analysis) - [User-defined Model](#user-defined-model) - [define](#define) @@ -15,9 +15,9 @@ You can use functions provided by A-Tune through the CLI client atune-adm. This - [undefine](#undefine) - [Querying Profiles](#querying-profiles) - [info](#info) - - [Updating a Profile](#updating-a-profile) + - [Updating Profiles](#updating-profiles) - [update](#update) - - [Activating a Profile](#activating-a-profile) + - [Activating Profiles](#activating-profiles) - [profile](#profile) - [Rolling Back Profiles](#rolling-back-profiles) - [rollback](#rollback) @@ -25,13 +25,14 @@ You can use functions provided by A-Tune through the CLI client atune-adm. This - [upgrade](#upgrade) - [Querying System Information](#querying-system-information) - [check](#check) - - [Automatic Parameter Optimization](#automatic-parameter-optimization) + - [Performing Automatic Parameter Tuning](#performing-automatic-parameter-tuning) - [Tuning](#tuning) ## Overview +- Run A-Tune as the **root** user. - You can run the **atune-adm help/--help/-h** command to query commands supported by atune-adm. - All example commands are used in single-node mode. For distributed mode, specify an IP address and port number. For example: @@ -39,12 +40,8 @@ You can use functions provided by A-Tune through the CLI client atune-adm. This # atune-adm -a 192.168.3.196 -p 60001 list ``` -- The **define**, **update**, **undefine**, **collection**, **train**, and **upgrade **commands do not support remote execution. +- The **define**, **update**, **undefine**, **collection**, **train**, and **upgrade** commands do not support remote execution. - In the command format, brackets \(\[\]\) indicate that the parameter is optional, and angle brackets \(<\>\) indicate that the parameter is mandatory. The actual parameters prevail. -- In the command format, meanings of each command are as follows: - - **WORKLOAD\_TYPE**: name of a user-defined workload type. For details about the supported workload types, see the query result of the **list** command. - - **PROFILE\_NAME**: user-defined profile name. - - **PROFILE\_PATH**: path of the user-defined profile. ## Querying Workload Types @@ -55,7 +52,7 @@ You can use functions provided by A-Tune through the CLI client atune-adm. This #### Function -Query the supported workload types, profiles, and the values of Active. +Query the supported profiles and the values of **Active**. #### Format @@ -66,44 +63,115 @@ Query the supported workload types, profiles, and the values of Active. ``` # atune-adm list -Support WorkloadTypes: -+-----------------------------------+------------------------+-----------+ -| WorkloadType | ProfileName | Active | -+===================================+========================+===========+ -| default | default | true | -+-----------------------------------+------------------------+-----------+ -| webserver | ssl_webserver | false | -+-----------------------------------+------------------------+-----------+ -| big_database | database | false | -+-----------------------------------+------------------------+-----------+ -| big_data | big_data | false | -+-----------------------------------+------------------------+-----------+ -| in-memory_computing | in-memory_computing | false | -+-----------------------------------+------------------------+-----------+ -| in-memory_database | in-memory_database | false | -+-----------------------------------+------------------------+-----------+ -| single_computer_intensive_jobs | compute-intensive | false | -+-----------------------------------+------------------------+-----------+ -| communication | rpc_communication | false | -+-----------------------------------+------------------------+-----------+ -| idle | default | false | -+-----------------------------------+------------------------+-----------+ +Support profiles: ++------------------------------------------------+-----------+ +| ProfileName | Active | ++================================================+===========+ +| arm-native-android-container-robox | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-fio | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-lmbench | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-netperf | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-stream | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-unixbench | false | ++------------------------------------------------+-----------+ +| basic-test-suite-speccpu-speccpu2006 | false | ++------------------------------------------------+-----------+ +| basic-test-suite-specjbb-specjbb2015 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-hdfs-dfsio-hdd | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-hdfs-dfsio-ssd | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-bayesian | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-kmeans | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql1 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql10 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql2 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql3 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql4 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql5 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql6 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql7 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql8 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql9 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-tersort | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-wordcount | false | ++------------------------------------------------+-----------+ +| cloud-compute-kvm-host | false | ++------------------------------------------------+-----------+ +| database-mariadb-2p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| database-mariadb-4p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| database-mongodb-2p-sysbench | false | ++------------------------------------------------+-----------+ +| database-mysql-2p-sysbench-hdd | false | ++------------------------------------------------+-----------+ +| database-mysql-2p-sysbench-ssd | false | ++------------------------------------------------+-----------+ +| database-postgresql-2p-sysbench-hdd | false | ++------------------------------------------------+-----------+ +| database-postgresql-2p-sysbench-ssd | false | ++------------------------------------------------+-----------+ +| default-default | false | ++------------------------------------------------+-----------+ +| docker-mariadb-2p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| docker-mariadb-4p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| hpc-gatk4-human-genome | false | ++------------------------------------------------+-----------+ +| in-memory-database-redis-redis-benchmark | false | ++------------------------------------------------+-----------+ +| middleware-dubbo-dubbo-benchmark | false | ++------------------------------------------------+-----------+ +| storage-ceph-vdbench-hdd | false | ++------------------------------------------------+-----------+ +| storage-ceph-vdbench-ssd | false | ++------------------------------------------------+-----------+ +| virtualization-consumer-cloud-olc | false | ++------------------------------------------------+-----------+ +| virtualization-mariadb-2p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| virtualization-mariadb-4p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| web-apache-traffic-server-spirent-pingpo | false | ++------------------------------------------------+-----------+ +| web-nginx-http-long-connection | true | ++------------------------------------------------+-----------+ +| web-nginx-https-short-connection | false | ++------------------------------------------------+-----------+ ``` >![](public_sys-resources/icon-note.gif) **NOTE:** ->If the value of Active is **true**, the profile is activated. In the example, the profile of the default type is activated. - -## Workload Type Analysis and Auto Optimization - - +>If the value of Active is **true**, the profile is activated. In the example, the **web-nginx-http-long-connection** profile is activated. +## Workload Type Analysis and Auto Tuning ### analysis #### Function -Collect real-time statistics from the system to identify and automatically optimize workload types. +Collect real-time statistics from the system to identify and automatically tune workload types. #### Format @@ -121,7 +189,12 @@ Collect real-time statistics from the system to identify and automatically optim

--model, -m

-

Model generated by user-defined training

+

Indicate a new model generated by user self-training

+ + +

--characterization, -c

+ +

Use the default model for application identification without performing automatic tuning

@@ -130,13 +203,19 @@ Collect real-time statistics from the system to identify and automatically optim #### Example -- Use the default model for classification and identification. +- Use the default model to identify applications. ``` - # atune-adm analysis + # atune-adm analysis --characterization ``` -- Use the user-defined training model for recognition. +- Use the default model to identify applications and perform automatic tuning. + + ``` + # atune-adm analysis + ``` + +- Use the user-defined training model to identify applications. ``` # atune-adm analysis --model /usr/libexec/atuned/analysis/models/new-model.m @@ -147,71 +226,67 @@ Collect real-time statistics from the system to identify and automatically optim A-Tune allows users to define and learn new models. To define a new model, perform the following steps: -1. Run the **define** command to define workload\_type and profile. -2. Run the **collection** command to collect the profile data corresponding to workload\_type. +1. Run the **define** command to define a new profile. +2. Run the **collection** command to collect the system data corresponding to the application. 3. Run the **train** command to train the model. - - ### define #### Function -Add a user-defined workload type and the corresponding profile optimization item. +Add a user-defined application scenario and the corresponding profile tuning items. #### Format -**atune-adm define** +**atune-adm define** #### Example -Add a workload type. Set workload type to **test\_type**, profile name to **test\_name**, and configuration file of an optimization item to **example.conf**. +Add a profile whose **service_type** is **test_service**, **application_name** is **test_app**, **scenario_name** is **test_scenario**, and the tuning item configuration file is **example.conf**. ``` -# atune-adm define test_type test_name ./example.conf +# atune-adm define test_service test_app test_scenario ./example.conf ``` -The **example.conf** file can be written as follows \(the following optimization items are optional and are for reference only\). You can also run the **atune-adm info** command to view how the existing profile is written. +The **example.conf** file can be written as follows (the following tuning items are optional and are for reference only). You can also run the **atune-adm info** command to view how the existing profile is written. ``` -[main] -# list its parent profile -[tip] -# the recommended optimization, which should be performed manunaly -[check] -# check the environment -[affinity.irq] -# to change the affinity of irqs -[affinity.task] -# to change the affinity of tasks -[bios] -# to change the bios config -[bootloader.grub2] -# to change the grub2 config -[kernel_config] -# to change the kernel config -[script] -# the script extention of cpi -[sysctl] -# to change the /proc/sys/* config -[sysfs] -# to change the /sys/* config -[systemctl] -# to change the system service config -[ulimit] -# to change the resources limit of user + [main] + # list its parent profile + [kernel_config] + # to change the kernel config + [bios] + # to change the bios config + [bootloader.grub2] + # to change the grub2 config + [sysfs] + # to change the /sys/* config + [systemctl] + # to change the system service status + [sysctl] + # to change the /proc/sys/* config + [script] + # the script extension of cpi + [ulimit] + # to change the resources limit of user + [schedule_policy] + # to change the schedule policy + [check] + # check the environment + [tip] + # the recommended optimization, which should be performed manually ``` ### collection #### Function -Collect the global resource usage and OS status information during service running, and save the collected information to a CSV output file as the input dataset for model training. +Collect the global resource usage and OS status during service running and save the collected information to a CSV output file as the input dataset for model training. >![](public_sys-resources/icon-note.gif) **NOTE:** >- This command depends on the sampling tools such as perf, mpstat, vmstat, iostat, and sar. ->- Currently, only the Kunpeng 920 CPU is supported. You can run the **dmidecode -t processor** command to check the CPU model. +>- Currently, only the Kunpeng 920 processor is supported. You can run the **dmidecode -t processor** command to check the CPU model. #### Format @@ -247,9 +322,9 @@ Collect the global resource usage and OS status information during service runni

Network port used during service running, for example, eth0.

-

--workload_type, -t

+

--app_type, -t

-

Workload type, which is used as a label for training.

+

Mark the application type of the service as a label for training.

--duration, -d

@@ -269,14 +344,14 @@ Collect the global resource usage and OS status information during service runni #### Example ``` -# atune-adm collection --filename name --interval 5 --duration 1200 --output_path /home/data --disk sda --network eth0 --workload_type test_type +# atune-adm collection --filename name --interval 5 --duration 1200 --output_path /home/data --disk sda --network eth0 --app_type test_type ``` ### train #### Function -Use the collected data to train the model. Collect data of at least two workload types during training. Otherwise, an error is reported. +Use the collected data to train the model. Collect data of at least two application types during training. Otherwise, an error is reported. #### Format @@ -289,7 +364,7 @@ Use the collected data to train the model. Collect data of at least two workload | Parameter | Description | | ----------------- | ------------------------------------------------------ | | --data_path, -d | Path for storing CSV files required for model training | - | --output_file, -o | Model generated through training | + | --output_file, -o | A new model generated during training | #### Example @@ -304,18 +379,18 @@ Use the CSV file in the **data** directory as the training input. The generate #### Function -Delete a user-defined workload type. +Delete a user-defined profile. #### Format -**atune-adm undefine** +**atune-adm undefine** #### Example -Delete the **test\_type** workload type. +Delete the user-defined profile. ``` -# atune-adm undefine test_type +# atune-adm undefine test_service-test_app-test_scenario ``` ## Querying Profiles @@ -325,26 +400,26 @@ Delete the **test\_type** workload type. #### Function -View the profile content of a workload type. +View the profile content. #### Format -**atune-adm info** _ +**atune-adm info** #### Example -View the profile content of webserver. +View the profile content of **web-nginx-http-long-connection**. ``` -# atune-adm info webserver +# atune-adm info web-nginx-http-long-connection -*** ssl_webserver: +*** web-nginx-http-long-connection: # -# webserver tuned configuration +# nginx http long connection A-Tune configuration # [main] -#TODO CONFIG +include = default-default [kernel_config] #TODO CONFIG @@ -352,11 +427,18 @@ View the profile content of webserver. [bios] #TODO CONFIG +[bootloader.grub2] +iommu.passthrough = 1 + [sysfs] #TODO CONFIG +[systemctl] +sysmonitor = stop +irqbalance = stop + [sysctl] -fs.file-max=6553600 +fs.file-max = 6553600 fs.suid_dumpable = 1 fs.aio-max-nr = 1048576 kernel.shmmax = 68719476736 @@ -384,95 +466,74 @@ net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 -[systemctl] -sysmonitor=stop -irqbalance=stop - -[bootloader.grub2] -selinux=0 -iommu.passthrough=1 - -[tip] -bind your master process to the CPU near the network = affinity -bind your network interrupt to the CPU that has this network = affinity -relogin into the system to enable limits setting = OS - [script] -openssl_hpre = 0 prefetch = off +ethtool = -X {network} hfunc toeplitz [ulimit] {user}.hard.nofile = 102400 {user}.soft.nofile = 102400 -[affinity.task] -#TODO CONFIG - -[affinity.irq] +[schedule_policy] #TODO CONFIG [check] #TODO CONFIG +[tip] +SELinux provides extra control and security features to linux kernel. Disabling SELinux will improve the performance but may cause security risks. = kernel +disable the nginx log = application ``` -   - -## Updating a Profile - -You can update the existing profile as required. - +## Updating Profiles +You can update the existing profiles as required. ### update #### Function -Update an optimization item of a workload type to the content in the **new.conf** file. +Update the original tuning items in the existing profiles to the content in the **new.conf** file. #### Format -**atune-adm update** +**atune-adm update** #### Example -Update the workload type to **test\_type** and the optimization item of test\_name to **new.conf**. +Change the tuning item of the profile named **test_service-test_app-test_scenario** to **new.conf**. ``` -# atune-adm update test_type test_name ./new.conf +# atune-adm update test_service-test_app-test_scenario ./new.conf ``` -## Activating a Profile +## Activating Profiles ### profile #### Function -Manually activate a profile of a workload type. +Manually activate a profile to make it in the active state. #### Format -**atune-adm profile **_<_WORKLOAD\_TYPE_\>_ +**atune-adm profile** #### Parameter Description -You can run the **list** command to query the supported workload types. +For details about the profile name, see the query result of the **list** command. #### Example -Activate the profile configuration of webserver. +Activate the profile corresponding to **web-nginx-http-long-connection**. ``` -# atune-adm profile webserver +# atune-adm profile web-nginx-http-long-connection ``` ## Rolling Back Profiles -   - - - ### rollback #### Functions @@ -491,10 +552,6 @@ Roll back the current configuration to the initial configuration of the system. ## Updating Database -   - - - ### upgrade #### Function @@ -514,7 +571,7 @@ Update the system database. #### Example -The database is updated to **new\_sqlite.db**. +Update the dataset to **new\_sqlite.db**. ``` # atune-adm upgrade ./new_sqlite.db @@ -522,10 +579,6 @@ The database is updated to **new\_sqlite.db**. ## Querying System Information -   - - - ### check @@ -559,14 +612,12 @@ Check the CPU, BIOS, OS, and NIC information. name: docker0 product: ``` -## Automatic Parameter Optimization - -A-Tune provides the automatic search capability for optimal configurations, eliminating the need for repeated manual parameter adjustment and performance evaluation. This greatly improves the search efficiency of optimal configurations. - +## Performing Automatic Parameter Tuning +A-Tune provides the automatic search capability with the optimal configuration, saving the trouble of manually configuring parameters and performance evaluation. This greatly improves the search efficiency of optimal configurations. -### Tuning +### tuning #### Function @@ -574,12 +625,12 @@ Use the specified project file to search the dynamic space for parameters and fi #### Format +**atune-adm tuning** \[OPTIONS\] + >![](public_sys-resources/icon-note.gif) **NOTE:** >Before running the command, ensure that the following conditions are met: ->1. The YAML configuration file of the server has been edited and placed in the **/etc/atuned/tuning/** directory on the server by the server administrator. ->2. The YAML configuration file of the client has been edited and placed in an arbitrary directory on the client. - -**atune-adm tuning** \[OPTIONS\] +>1. The YAML configuration file on the server has been edited and stored in the **/etc/atuned/tuning/** directory of the atuned service. +>2. The YAML configuration file on the client has been edited and stored on the atuned client. #### Parameter Description @@ -601,11 +652,22 @@ Use the specified project file to search the dynamic space for parameters and fi

Specifies the project name in the YAML file to be restored.

+

--restart, -c

+ +

Performs tuning based on historical tuning results.

+ + +

--detail, -d

+ +

Prints detailed information about the tuning process.

+ + - + + >![](public_sys-resources/icon-note.gif) **NOTE:** - >The preceding two parameters must be used at the same time, and the -p parameter must be followed by the specific project name. + >If this parameter is used, the **-p** parameter must be followed by a specific project name and the YAML file of the project must be specified. - **PROJECT\_YAML**: YAML configuration file of the client. @@ -672,6 +734,7 @@ Use the specified project file to search the dynamic space for parameters and fi + **Table 2** Description of object configuration items - - - - - - - - @@ -783,21 +846,13 @@ Use the specified project file to search the dynamic space for parameters and fi - - - - -

Name

@@ -740,36 +803,36 @@ Use the specified project file to search the dynamic space for parameters and fi

dtype

This parameter is available only when type is set to discrete. Currently, only int and string are supported.

+

This parameter is available only when type is set to discrete. Currently, int, float and string are supported.

Enumeration

int, string

+

int, float, string

scope

Parameter setting range. This parameter is valid only when type is set to discrete and dtype is set to int, or type is set to continuous.

+

Parameter setting range. This parameter is valid only when type is set to discrete and dtype is set to int or float, or type is set to continuous.

Integer

+

Integer/Float

The value is user-defined and must be within the valid range of this parameter.

step

Parameter value step, which is used when dtype is set to int.

+

Parameter value step, which is used when dtype is set to int or float.

Integer

+

Integer/Float

This value is user-defined.

items

Enumerated value of which the parameter value is not within the scope. This is used when dtype is set to int.

+

Enumerated value of which the parameter value is not within the scope. This is used when dtype is set to int or float.

Integer

+

Integer/Float

The value is user-defined and must be within the valid range of this parameter.

The value is user-defined and must be within the valid range of this parameter.

ref

-

Recommended initial value of the parameter

-

Integer or character string

-

The value is user-defined and must be within the valid range of this parameter.

-
**Table 3** Description of configuration items of a YAML file on the client + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

@@ -817,15 +872,69 @@ Use the specified project file to search the dynamic space for parameters and fi

-

engine

+

Tuning algorithm.

+

Character string

+

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

+

iterations

Number of optimization iterations.

+

Number of tuning iterations.

Integer

≥ 10

random_starts

+

Number of random iterations.

+

Integer

+

< iterations

+

feature_filter_engine

+

Parameter search algorithm, which is used to select important parameters. This parameter is optional.

+

Character string

+

"lhs"

+

feature_filter_cycle

+

Parameter search cycles, which is used to select important parameters. This parameter is used together with feature_filter_engine.

+

Integer

+

-

+

feature_filter_iters

+

Number of iterations for each cycle of parameter search, which is used to select important parameters. This parameter is used together with feature_filter_engine.

+

Integer

+

-

+

split_count

+

Number of evenly selected parameters in the value range of tuning parameters, which is used to select important parameters. This parameter is used together with feature_filter_engine.

+

Integer

+

-

+

benchmark

Performance test script.

@@ -847,6 +956,8 @@ Use the specified project file to search the dynamic space for parameters and fi
+ + **Table 4** Description of evaluations configuration item - @@ -912,86 +1023,36 @@ Use the specified project file to search the dynamic space for parameters and fi The following is an example of the YAML file configuration on a server: ``` -project: "example" -maxiterations: 10 +project: "compress" +maxiterations: 500 startworkload: "" stopworkload: "" object : - - name : "vm.swappiness" + name : "compressLevel" info : - desc : "the vm.swappiness" - get : "sysctl -a | grep vm.swappiness" - set : "sysctl -w vm.swappiness=$value" - needrestart: "false" + desc : "The compresslevel parameter is an integer from 1 to 9 controlling the level of compression" + get : "cat /root/A-Tune/examples/tuning/compress/compress.py | grep 'compressLevel=' | awk -F '=' '{print $2}'" + set : "sed -i 's/compressLevel=\\s*[0-9]*/compressLevel=$value/g' /root/A-Tune/examples/tuning/compress/compress.py" + needrestart : "false" type : "continuous" scope : - - 0 - - 10 - ref : 1 - - - name : "irqbalance" - info : - desc : "system irqbalance" - get : "systemctl status irqbalance" - set : "systemctl $value sysmonitor;systemctl $value irqbalance" - needrestart: "false" - type : "discrete" - options: - - "start" - - "stop" - dtype : "string" - ref : "start" - - - name : "net.tcp_min_tso_segs" - info : - desc : "the minimum tso number" - get : "cat /proc/sys/net/ipv4/tcp_min_tso_segs" - set : "echo $value > /proc/sys/net/ipv4/tcp_min_tso_segs" - needrestart: "false" - type : "continuous" - scope: - 1 - - 16 - ref : 2 + - 9 + dtype : "int" - - name : "prefetcher" + name : "compressMethod" info : - desc : "" - get : "cat /sys/class/misc/prefetch/policy" - set : "echo $value > /sys/class/misc/prefetch/policy" - needrestart: "false" + desc : "The compressMethod parameter is a string controlling the compression method" + get : "cat /root/A-Tune/examples/tuning/compress/compress.py | grep 'compressMethod=' | awk -F '=' '{print $2}' | sed 's/\"//g'" + set : "sed -i 's/compressMethod=\\s*[0-9,a-z,\"]*/compressMethod=\"$value\"/g' /root/A-Tune/examples/tuning/compress/compress.py" + needrestart : "false" type : "discrete" - options: - - "0" - - "15" + options : + - "bz2" + - "zlib" + - "gzip" dtype : "string" - ref : "15" - - - name : "kernel.sched_min_granularity_ns" - info : - desc : "Minimal preemption granularity for CPU-bound tasks" - get : "sysctl kernel.sched_min_granularity_ns" - set : "sysctl -w kernel.sched_min_granularity_ns=$value" - needrestart: "false" - type : "continuous" - scope: - - 5000000 - - 50000000 - ref : 10000000 - - - name : "kernel.sched_latency_ns" - info : - desc : "" - get : "sysctl kernel.sched_latency_ns" - set : "sysctl -w kernel.sched_latency_ns=$value" - needrestart: "false" - type : "continuous" - scope: - - 10000000 - - 100000000 - ref : 16000000 - ```    @@ -999,17 +1060,25 @@ object : The following is an example of the YAML file configuration on a client: ``` -project: "example" -iterations : 10 -benchmark : "sh /home/Benchmarks/mysql/tunning_mysql.sh" +project: "compress" +engine : "gbrt" +iterations : 20 +random_starts : 10 + +benchmark : "python3 /root/A-Tune/examples/tuning/compress/compress.py" evaluations : - - name: "tps" + name: "time" + info: + get: "echo '$out' | grep 'time' | awk '{print $3}'" + type: "positive" + weight: 20 + - + name: "compress_ratio" info: - get: "echo -e '$out' |grep 'transactions:' |awk '{print $3}' | cut -c 2-" + get: "echo '$out' | grep 'compress_ratio' | awk '{print $3}'" type: "negative" - weight: 100 - threshold: 100 + weight: 80 ```    @@ -1019,13 +1088,13 @@ evaluations : - Perform tuning. ``` - # atune-adm tuning example-client.yaml + # atune-adm tuning --project compress --detail compress_client.yaml ``` -- Restore the initial configuration before tuning. The example value is the project name in the YAML file. +- Restore the initial configuration before tuning. The **compress** is the project name in the YAML file. ``` - # atune-adm tuning --restore --project example + # atune-adm tuning --restore --project compress ``` diff --git a/content/en/docs/A-Tune/faqs.md b/docs/en/docs/A-Tune/faqs.md similarity index 100% rename from content/en/docs/A-Tune/faqs.md rename to docs/en/docs/A-Tune/faqs.md diff --git a/content/en/docs/A-Tune/figures/en-us_image_0213178479.png b/docs/en/docs/A-Tune/figures/en-us_image_0213178479.png similarity index 100% rename from content/en/docs/A-Tune/figures/en-us_image_0213178479.png rename to docs/en/docs/A-Tune/figures/en-us_image_0213178479.png diff --git a/content/en/docs/A-Tune/figures/en-us_image_0213178480.png b/docs/en/docs/A-Tune/figures/en-us_image_0213178480.png similarity index 100% rename from content/en/docs/A-Tune/figures/en-us_image_0213178480.png rename to docs/en/docs/A-Tune/figures/en-us_image_0213178480.png diff --git a/content/en/docs/A-Tune/figures/en-us_image_0214540398.png b/docs/en/docs/A-Tune/figures/en-us_image_0214540398.png similarity index 100% rename from content/en/docs/A-Tune/figures/en-us_image_0214540398.png rename to docs/en/docs/A-Tune/figures/en-us_image_0214540398.png diff --git a/docs/en/docs/A-Tune/figures/en-us_image_0227497000.png b/docs/en/docs/A-Tune/figures/en-us_image_0227497000.png new file mode 100644 index 0000000000000000000000000000000000000000..7a9bb50f2a3c353a0655dcf9be33b48b773de2cc Binary files /dev/null and b/docs/en/docs/A-Tune/figures/en-us_image_0227497000.png differ diff --git a/docs/en/docs/A-Tune/figures/en-us_image_0227497343.png b/docs/en/docs/A-Tune/figures/en-us_image_0227497343.png new file mode 100644 index 0000000000000000000000000000000000000000..77133ef93f30fb777696b3915f11ecb0e282d022 Binary files /dev/null and b/docs/en/docs/A-Tune/figures/en-us_image_0227497343.png differ diff --git a/content/en/docs/A-Tune/figures/en-us_image_0231122163.png b/docs/en/docs/A-Tune/figures/en-us_image_0231122163.png similarity index 100% rename from content/en/docs/A-Tune/figures/en-us_image_0231122163.png rename to docs/en/docs/A-Tune/figures/en-us_image_0231122163.png diff --git a/docs/en/docs/A-Tune/figures/en-us_image_0245342444.png b/docs/en/docs/A-Tune/figures/en-us_image_0245342444.png new file mode 100644 index 0000000000000000000000000000000000000000..10f0fceb42c00c80ef49decdc0c480eb04c2ca6d Binary files /dev/null and b/docs/en/docs/A-Tune/figures/en-us_image_0245342444.png differ diff --git a/docs/en/docs/A-Tune/getting-to-know-a-tune.md b/docs/en/docs/A-Tune/getting-to-know-a-tune.md new file mode 100644 index 0000000000000000000000000000000000000000..9b89e42bb7c2b5ea0aa7f841fea98d53815bcabe --- /dev/null +++ b/docs/en/docs/A-Tune/getting-to-know-a-tune.md @@ -0,0 +1,328 @@ +# Getting to Know A-Tune + +- [Getting to Know A-Tune](#getting-to-know-a-tune) + - [Introduction](#introduction) + - [Architecture](#architecture) + - [Supported Features and Service Models](#supported-features-and-service-models) + + + +## Introduction + +An operating system \(OS\) is basic software that connects applications and hardware. It is critical for users to adjust OS and application configurations and make full use of software and hardware capabilities to achieve optimal service performance. However, numerous workload types and varied applications run on the OS, and the requirements on resources are different. Currently, the application environment composed of hardware and software involves more than 7000 configuration objects. As the service complexity and optimization objects increase, the time cost for optimization increases exponentially. As a result, optimization efficiency decreases sharply. Optimization becomes complex and brings great challenges to users. + +Second, as infrastructure software, the OS provides a large number of software and hardware management capabilities. The capability required varies in different scenarios. Therefore, capabilities need to be enabled or disabled depending on scenarios, and a combination of capabilities will maximize the optimal performance of applications. + +In addition, the actual business embraces hundreds and thousands of scenarios, and each scenario involves a wide variety of hardware configurations for computing, network, and storage. The lab cannot list all applications, business scenarios, and hardware combinations. + +To address the preceding challenges, openEuler launches A-Tune. + +A-Tune is an AI-based engine that optimizes system performance. It uses AI technologies to precisely profile business scenarios, discover and infer business characteristics, so as to make intelligent decisions, match with the optimal system parameter configuration combination, and give recommendations, ensuring the optimal business running status. + +![](figures/en-us_image_0227497000.png) + +## Architecture + +The following figure shows the A-Tune core technical architecture, which consists of intelligent decision-making, system profile, and interaction system. + +- Intelligent decision-making layer: consists of the awareness and decision-making subsystems, which implements intelligent awareness of applications and system optimization decision-making, respectively. +- System profile layer: consists of the feature engineering and two-layer classification model. The feature engineering is used to automatically select service features, and the two-layer classification model is used to learn and classify service models. +- Interaction system layer: monitors and configures various system resources and executes optimization policies. + +![](figures/en-us_image_0227497343.png) + +## Supported Features and Service Models + +### Supported Features + +[Table 1](#table1919220557576) describes the main features supported by A-Tune, feature maturity, and usage suggestions. + +**Table 1** Feature maturity + +

Name

@@ -879,7 +990,7 @@ Use the specified project file to search the dynamic space for parameters and fi

type

Specifies a positive or negative type of the evaluation result. The value positive indicates that the performance value is minimized, and the value negative indicates that the performance value is maximized.

+

A positive or negative type of the evaluation result. The value positive indicates that the performance value is minimized, and the value negative indicates that the performance value is maximized.

Enumeration

+ + + + + + + + + + + + + + + + + +

Feature

+

Maturity

+

Usage Suggestion

+

Auto optimization of 50 applications in 14 workload types

+

Tested

+

Pilot

+

User-defined profile and service models

+

Tested

+

Pilot

+

Automatic parameter optimization

+

Tested

+

Pilot

+
+ + +### Supported Service Models + +Based on the workload characteristics of applications, A-Tune classifies services into 14 types. For details about the bottleneck of each type and the applications supported by A-Tune, see [Table 2](#table2819164611311). + +**Table 2** Supported workload types and applications + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Service + category

+
+

Type

+
+

Bottleneck

+
+

Supported + Application

+
+

default

+
+

Default type

+
+

Low resource usage in + terms of cpu, memory, network, and I/O

+
+

N/A

+
+

webserver

+
+

Web application

+
+

Bottlenecks of cpu and + network

+
+

Nginx, Apache Traffic Server, + Tomcat, Apache Http Server, Squid, Postfix, lighttpd

+
+

ftp server

+
+

ftp application

+
+

Bottlenecks of cpu and + network

+
+

vsftpd, proftpd

+
+

database

+
+

Database

+
Bottlenecks of + cpu, memory, and I/O + +

Mongodb, Mysql, Postgresql, + Mariadb, openGauss, tidb, sqlite, QuestDB, influxdb, splunk, Cassandra, Neo4j +

+
+

DDS

+
+

distributed data store

+
+ Bottlenecks of + cpu, memory, and I/O + +

storm, glusterFS, Ceph, + Infinispan, ElasticSearch

+
+

big_data

+
+

Big data

+
+

Bottlenecks of + cpu and memory

+
+

Hadoop-hdfs, + Hadoop-spark, hive

+
+

middleware

+
+

Middleware framework

+
+

Bottlenecks of cpu and + network

+
+

Dubbo, Zookeeper, + kafka, rabbitMQ, activeMQ, rocketMQ, etcd, karaf

+
+

in-memory_database

+
+

Memory database

+
+

Bottlenecks of memory + and I/O

+
+

Redis, Memcached, cachefilesd

+
+

operation

+
+

O&M tools

+
+

Bottlenecks of cpu and + network

+
+

prometheus, ansible, + puppet, zabbix

+
+

basic-test-suite

+
+

Basic test suite

+
+

Bottlenecks of cpu and + memory

+
+

SPECCPU2006, + SPECjbb2015

+
+

hpc

+
+

Human genome

+
+

Bottlenecks of cpu, + memory, and I/O

+
+

Gatk4

+
+

virtualization

+
+

Virtualization

+
+

Bottlenecks of cpu, + memory, and I/O

+
+

Consumer-cloud, + Mariadb

+
+

docker

+
+

Docker

+
+

Bottlenecks of cpu, + memory, and I/O

+
+

Mariadb

+
+

others

+
+

others

+
+

-

+
+

Encryption

+
+ + diff --git a/content/en/docs/A-Tune/installation-and-deployment.md b/docs/en/docs/A-Tune/installation-and-deployment.md similarity index 30% rename from content/en/docs/A-Tune/installation-and-deployment.md rename to docs/en/docs/A-Tune/installation-and-deployment.md index 96a1e025d01cdf9261809680afb1e6e42115feaf..19879c1aa0920a96110d11d7285129264cac6124 100644 --- a/content/en/docs/A-Tune/installation-and-deployment.md +++ b/docs/en/docs/A-Tune/installation-and-deployment.md @@ -10,6 +10,7 @@ This chapter describes how to install and deploy A-Tune. - [Installation Procedure](#installation-procedure) - [A-Tune Deployment](#a-tune-deployment) - [Starting A-Tune](#starting-a-tune) + - [Starting A-Tune engine](#starting-a-tune-engine) @@ -22,11 +23,11 @@ This chapter describes how to install and deploy A-Tune. ### Software Requirement -- OS: openEuler 20.03 LTS +- OS: openEuler 20.03 LTS SP3 ## Environment Preparation -For details about installing an openEuler OS, see _openEuler 20.03 LTS Installation Guide_. +For details about installing an openEuler OS, see _openEuler 20.03 LTS SP3 Installation Guide_. ## A-Tune Installation @@ -47,7 +48,7 @@ A-Tune can be installed in single-node or distributed mode. The installation modes are as follows: -![](figures/en-us_image_0231122163.png) +![](./figures/en-us_image_0231122163.png)    @@ -58,7 +59,7 @@ To install the A-Tune, perform the following steps: 1. Mount an openEuler ISO file. ``` - # mount openEuler-20.03-LTS-aarch64-dvd.iso /mnt + # mount openEuler-20.03-LTS-SP3-aarch64-dvd.iso /mnt ``` 2. Configure the local yum source. @@ -84,16 +85,17 @@ To install the A-Tune, perform the following steps: ``` -4. Install an A-Tune server. +4. Install an A-Tune server. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >In this step, both the server and client software packages are installed. For the single-node deployment, skip **Step 5**. ``` # yum install atune -y + # yum install atune-engine -y ``` -5. For a distributed mode, install an A-Tune client. +5. For a distributed mode, install an A-Tune client on associated server. ``` # yum install atune-client -y @@ -106,8 +108,9 @@ To install the A-Tune, perform the following steps: atune-client-xxx atune-db-xxx atune-xxx + atune-engine-xxx ``` - + If the preceding information is displayed, the installation is successful. @@ -121,16 +124,37 @@ This chapter describes how to deploy A-Tune. The configuration items in the A-Tune configuration file **/etc/atuned/atuned.cnf** are described as follows: -- A-Tune service startup configuration +- A-Tune service startup configuration You can modify the parameter value as required. - **protocol**: Protocol used by the gRPC service. The value can be **unix** or **tcp**. **unix** indicates the local socket communication mode, and **tcp** indicates the socket listening port mode. The default value is **unix**. - - **address**: Listening IP address of the gRPC service. The default value is **unix socket**. If the gRPC service is deployed in distributed mode, change the value to the listening IP address. - - **port**: Listening port of the gRPC server. The value ranges from 0 to 65535. If **protocol** is set to **unix**, you do not need to set this parameter. - - **rest\_port**: Listening port of the system REST service. The value ranges from 0 to 65535. - - **sample\_num**: Number of samples collected when the system executes the analysis process. + - **port**: Listening port of the gRPC server. The value ranges from 0 to 65535. If **protocol** is set to **unix**, you do not need to set this parameter. + - **connect**: IP address list of the nodes where the A-Tune is located when the A-Tune is deployed in a cluster. IP addresses are separated by commas (,). + - **rest_host**: Listening address of the REST service. The default value is localhost. + - **rest_port**: Listening port of the REST service. The value ranges from 0 to 65535. The default value is 8383. + - **engine_host**: IP address for connecting to the A-Tune engine service of the system. + - **engine_port**: Port for connecting to the A-Tune engine service of the system. + - **sample_num**: Number of samples collected when the system executes the analysis process. The default value is 20. + - **interval**: Interval for collecting samples when the system executes the analysis process. The default value is 5s. + - **grpc_tls**: Indicates whether to enable SSL/TLS certificate verification for the gRPC service. By default, this function is disabled. After grpc_tls is enabled, you need to set the following environment variables before running the **atune-adm** command to communicate with the server: + - export ATUNE_TLS=yes + - export ATUNED_CACERT=\ + - export ATUNED_CLIENTCERT=\ + - export ATUNED_CLIENTKEY=\ + - export ATUNED_SERVERCN=server + - **tlsservercafile**: Path of the gPRC server's CA certificate. + - **tlsservercertfile**: Path of the gPRC server certificate. + - **tlsserverkeyfile**: Path of the gPRC server key. + - **rest_tls**: Indicates whether to enable SSL/TLS certificate verification for the REST service. This function is enabled by default. + - **tlsrestcacertfile**: Path of the server's CA certificate of the REST service. + - **tlsrestservercertfile**: Path of the server certificate of the REST service. + - **tlsrestserverkeyfile**: Indicates the key path of the REST service. + - **engine_tls**: Indicates whether to enable SSL/TLS certificate verification for the A-Tune engine service. This function is enabled by default.. + - **tlsenginecacertfile**: Path of the client CA certificate of the A-Tune engine service. + - **tlsengineclientcertfile**: Client certificate path of the A-Tune engine service. + - **tlsengineclientkeyfile**: Client key path of the A-Tune engine service. - System information @@ -139,104 +163,199 @@ The configuration items in the A-Tune configuration file **/etc/atuned/atuned.c - **disk**: Disk information to be collected during the analysis process or specified disk during disk optimization. - **network**: NIC information to be collected during the analysis process or specified NIC during NIC optimization. - **user**: User name used for ulimit optimization. Currently, only the user **root** is supported. - - **tls**: SSL/TLS certificate verification for the gRPC and HTTP services of A-Tune. This is disabled by default. After TLS is enabled, you need to set the following environment variables before running the **atune-adm** command to communicate with the server: - - export ATUNE\_TLS=yes - - export ATUNE\_CLICERT= - - - **tlsservercertfile**: path of the gPRC server certificate. - - **tlsserverkeyfile**: gPRC server key path. - - **tlshttpcertfile**: HTTP server certificate path. - - **tlshttpkeyfile**: HTTP server key path. - - **tlshttpcacertfile**: CA certificate path of the HTTP server. - + - Log information - Change the log path and level based on the site requirements. By default, the log information is stored in **/var/log/messages**. + Change the log level as required. The default log level is info. Log information is recorded in the **/var/log/messages** file. - Monitor information Hardware information that is collected by default when the system is started. + +- Tuning information + + Tuning is the parameter information required for offline tuning. + + - **noise**: Evaluation value of Gaussian noise. + - **sel_feature**: Indicates whether to enable the function of generating the importance ranking of offline tuning parameters. By default, this function is disabled. + + +#### Example + +``` +#################################### server ############################### + # atuned config + [server] + # the protocol grpc server running on + # ranges: unix or tcp + protocol = unix + + # the address that the grpc server to bind to + # default is unix socket /var/run/atuned/atuned.sock + # ranges: /var/run/atuned/atuned.sock or ip address + address = /var/run/atuned/atuned.sock + + # the atune nodes in cluster mode, separated by commas + # it is valid when protocol is tcp + # connect = ip01,ip02,ip03 + + # the atuned grpc listening port + # the port can be set between 0 to 65535 which not be used + # port = 60001 + + # the rest service listening port, default is 8383 + # the port can be set between 0 to 65535 which not be used + rest_host = localhost + rest_port = 8383 + + # the tuning optimizer host and port, start by engine.service + # if engine_host is same as rest_host, two ports cannot be same + # the port can be set between 0 to 65535 which not be used + engine_host = localhost + engine_port = 3838 + + # when run analysis command, the numbers of collected data. + # default is 20 + sample_num = 20 + + # interval for collecting data, default is 5s + interval = 5 + + # enable gRPC authentication SSL/TLS + # default is false + # grpc_tls = false + # tlsservercafile = /etc/atuned/grpc_certs/ca.crt + # tlsservercertfile = /etc/atuned/grpc_certs/server.crt + # tlsserverkeyfile = /etc/atuned/grpc_certs/server.key + + # enable rest server authentication SSL/TLS + # default is true + rest_tls = true + tlsrestcacertfile = /etc/atuned/rest_certs/ca.crt + tlsrestservercertfile = /etc/atuned/rest_certs/server.crt + tlsrestserverkeyfile = /etc/atuned/rest_certs/server.key + + # enable engine server authentication SSL/TLS + # default is true + engine_tls = true + tlsenginecacertfile = /etc/atuned/engine_certs/ca.crt + tlsengineclientcertfile = /etc/atuned/engine_certs/client.crt + tlsengineclientkeyfile = /etc/atuned/engine_certs/client.key + + + #################################### log ############################### + [log] + # either "debug", "info", "warn", "error", "critical", default is "info" + level = info + + #################################### monitor ############################### + [monitor] + # with the module and format of the MPI, the format is {module}_{purpose} + # the module is Either "mem", "net", "cpu", "storage" + # the purpose is "topo" + module = mem_topo, cpu_topo + + #################################### system ############################### + # you can add arbitrary key-value here, just like key = value + # you can use the key in the profile + [system] + # the disk to be analysis + disk = sda + + # the network to be analysis + network = enp189s0f0 + + user = root + + #################################### tuning ############################### + # tuning configs + [tuning] + noise = 0.000000001 + sel_feature = false +``` + +The configuration items in the configuration file **/etc/atuned/engine.cnf** of the A-Tune engine are described as follows: + +- Startup configuration of the A-Tune engine service + + You can modify the parameter value as required. + + - **engine_host**: Listening address of the A-Tune engine service. The default value is localhost. + - **engine_port**: Listening port of the A-Tune engine service. The value ranges from 0 to 65535. The default value is 3838. + - **engine_tls**: Indicates whether to enable SSL/TLS certificate verification for the A-Tune engine service. This function is enabled by default. + - **tlsenginecacertfile**: Path of the server CA certificate of the A-Tune engine service. + - **tlsengineservercertfile**: Path of the server certificate of the A-Tune engine service. + - **tlsengineserverkeyfile**: Server key path of the A-Tune engine service. + +- Log information + + Change the log level as required. The default log level is info. Log information is recorded in the **/var/log/messages** file. #### Example ``` -#################################### server ############################### -# atuned config -[server] -# the protocol grpc server running on -# ranges: unix or tcp -protocol = unix - -# the address that the grpc server to bind to -# default is unix socket /var/run/atuned/atuned.sock -# ranges: /var/run/atuned/atuned.sock or ip -address = /var/run/atuned/atuned.sock - -# the atuned grpc listening port, default is 60001 -# the port can be set between 0 to 65535 which not be used -port = 60001 - -# the rest service listening port, default is 8383 -# the port can be set between 0 to 65535 which not be used -rest_port = 8383 - -# when run analysis command, the numbers of collected data. -# default is 20 -sample_num = 20 - -# Enable gRPC and http server authentication SSL/TLS -# default is false -# tls = true -# tlsservercertfile = /etc/atuned/server.pem -# tlsserverkeyfile = /etc/atuned/server.key -# tlshttpcertfile = /etc/atuned/http/server.pem -# tlshttpkeyfile = /etc/atuned/http/server.key -# tlshttpcacertfile = /etc/atuned/http/cacert.pem - -#################################### log ############################### -# Either "debug", "info", "warn", "error", "critical", default is "info" -level = info - -#################################### monitor ############################### -[monitor] -# With the module and format of the MPI, the format is {module}_{purpose} -# The module is Either "mem", "net", "cpu", "storage" -# The purpose is "topo" -module = mem_topo, cpu_topo - -#################################### system ############################### -# you can add arbitrary key-value here, just like key = value -# you can use the key in the profile -[system] -# the disk to be analysis -disk = sda - -# the network to be analysis -network = enp189s0f0 - -user = root +#################################### engine ############################### + [server] + # the tuning optimizer host and port, start by engine.service + # if engine_host is same as rest_host, two ports cannot be same + # the port can be set between 0 to 65535 which not be used + engine_host = localhost + engine_port = 3838 + + # enable engine server authentication SSL/TLS + # default is true + engine_tls = true + tlsenginecacertfile = /etc/atuned/engine_certs/ca.crt + tlsengineservercertfile = /etc/atuned/engine_certs/server.crt + tlsengineserverkeyfile = /etc/atuned/engine_certs/server.key + + #################################### log ############################### + [log] + # either "debug", "info", "warn", "error", "critical", default is "info" + level = info ``` ## Starting A-Tune After the A-Tune is installed, you need to start the A-Tune service. -- Start the atuned service. +- Start the atuned service. + + ``` + # systemctl start atuned + ``` + + +- Query the atuned service status. + + ``` + # systemctl status atuned + ``` + + If the following command output is displayed, the service is started successfully: + + ![](./figures/en-us_image_0214540398.png) + +## Starting A-Tune engine + +To use AI functions, you need to start the A-Tune engine service. + +- Start the atune-engine service. ``` - # systemctl start atuned + # systemctl start atune-engine ``` -- To query the status of the atuned service, run the following command: +- Query the atune-engine service status. ``` - # systemctl status atuned + # systemctl status atune-engine ``` - If the following information is displayed, the service is started successfully: + If the following command output is displayed, the service is started successfully: - ![](figures/en-us_image_0214540398.png) + ![](./figures/en-us_image_0245342444.png) diff --git a/content/en/docs/A-Tune/public_sys-resources/icon-caution.gif b/docs/en/docs/A-Tune/public_sys-resources/icon-caution.gif similarity index 100% rename from content/en/docs/A-Tune/public_sys-resources/icon-caution.gif rename to docs/en/docs/A-Tune/public_sys-resources/icon-caution.gif diff --git a/content/en/docs/A-Tune/public_sys-resources/icon-danger.gif b/docs/en/docs/A-Tune/public_sys-resources/icon-danger.gif similarity index 100% rename from content/en/docs/A-Tune/public_sys-resources/icon-danger.gif rename to docs/en/docs/A-Tune/public_sys-resources/icon-danger.gif diff --git a/content/en/docs/A-Tune/public_sys-resources/icon-note.gif b/docs/en/docs/A-Tune/public_sys-resources/icon-note.gif similarity index 100% rename from content/en/docs/A-Tune/public_sys-resources/icon-note.gif rename to docs/en/docs/A-Tune/public_sys-resources/icon-note.gif diff --git a/content/en/docs/A-Tune/public_sys-resources/icon-notice.gif b/docs/en/docs/A-Tune/public_sys-resources/icon-notice.gif similarity index 100% rename from content/en/docs/A-Tune/public_sys-resources/icon-notice.gif rename to docs/en/docs/A-Tune/public_sys-resources/icon-notice.gif diff --git a/content/en/docs/A-Tune/public_sys-resources/icon-tip.gif b/docs/en/docs/A-Tune/public_sys-resources/icon-tip.gif similarity index 100% rename from content/en/docs/A-Tune/public_sys-resources/icon-tip.gif rename to docs/en/docs/A-Tune/public_sys-resources/icon-tip.gif diff --git a/content/en/docs/A-Tune/public_sys-resources/icon-warning.gif b/docs/en/docs/A-Tune/public_sys-resources/icon-warning.gif similarity index 100% rename from content/en/docs/A-Tune/public_sys-resources/icon-warning.gif rename to docs/en/docs/A-Tune/public_sys-resources/icon-warning.gif diff --git a/content/en/docs/Administration/administration.md b/docs/en/docs/Administration/administration.md similarity index 100% rename from content/en/docs/Administration/administration.md rename to docs/en/docs/Administration/administration.md diff --git a/content/en/docs/Administration/basic-configuration.md b/docs/en/docs/Administration/basic-configuration.md similarity index 64% rename from content/en/docs/Administration/basic-configuration.md rename to docs/en/docs/Administration/basic-configuration.md index 65e7e6167e256f1511eef3039dd677ca70f5660e..efc31904942ffa726b1e7a7c60bbebcdd0837d0c 100644 --- a/content/en/docs/Administration/basic-configuration.md +++ b/docs/en/docs/Administration/basic-configuration.md @@ -1,26 +1,7 @@ # Basic Configuration - - -- [Basic Configuration](#basic-configuration) - - [Setting the System Locale](#setting-the-system-locale) - - [Displaying the Current Locale Status](#displaying-the-current-locale-status) - - [Listing Available Locales](#listing-available-locales) - - [Setting the Locale](#setting-the-locale) - - [Setting the Keyboard Layout](#setting-the-keyboard-layout) - - [Displaying the Current Settings](#displaying-the-current-settings) - - [Listing Available Keyboard Layouts](#listing-available-keyboard-layouts) - - [Setting the Keyboard Layout](#setting-the-keyboard-layout-1) - - [Setting the Date and Time](#setting-the-date-and-time) - - [Using the timedatectl Command](#using-the-timedatectl-command) - - [Using the date Command](#using-the-date-command) - - [Using the hwclock Command](#using-the-hwclock-command) - - [Setting kdump](#setting-kdump) - - [Setting the Memory Reserved for kdump](#setting-the-memory-reserved-for-kdump) - - [Recommended Reserved Memory](#recommended-reserved-memory) - - [Disabling Network Drivers](#disabling-network-drivers) - - +[[toc]] + ## Setting the System Locale System locale settings are stored in the /etc/locale.conf file and can be modified by the localectl command. These settings are read at system boot by the systemd daemon. @@ -71,7 +52,7 @@ For example, if you want to use Simplified Chinese as the locale, run the follow # localectl set-locale LANG=zh_CN.UTF-8 ``` -> ![](public_sys-resources/icon-note.gif) **NOTE:** +> ![](./public_sys-resources/icon-note.gif) **NOTE:** > After the modification, log in again or run the command `source /etc/locale.conf` as the user **root** to update the configuration file for the modification to take effect: @@ -161,7 +142,7 @@ System clock synchronized: no Your system clock can be automatically synchronized with a remote server using the Network Time Protocol (NTP). Run the following command as the user **root** to enable or disable NTP. The value of _boolean_ is **yes** or **no**, indicating that the NTP is enabled or disabled for automatic system clock synchronization. Change the value based on the site requirements. -> ![](public_sys-resources/icon-note.gif) **NOTE:** +> ![](./public_sys-resources/icon-note.gif) **NOTE:** If the remote NTP server is enabled to automatically synchronize the system clock, you cannot manually change the date and time. If you need to manually change the date or time, ensure that automatic NTP system clock synchronization is disabled. You can run the **timedatectl set-ntp no** command to disable the NTP service. ``` @@ -176,7 +157,7 @@ For example, to enable automatic remote time synchronization, run the following #### Changing the Current Date -> ![](public_sys-resources/icon-note.gif) **NOTE:** +> ![](./public_sys-resources/icon-note.gif) **NOTE:** Before changing the date, ensure that automatic NTP system clock synchronization has been disabled. Run the following command as the user **root** to change the current date. In the command, _YYYY_ indicates the year, _MM_ indicates the month, and _DD_ indicates the day. Change them based on the site requirements. @@ -193,7 +174,7 @@ For example, to change the current date to August 14, 2019, run the following co #### Changing the Current Time -> ![](public_sys-resources/icon-note.gif) **NOTE:** +> ![](./public_sys-resources/icon-note.gif) **NOTE:** Before changing the time, ensure that automatic NTP system clock synchronization has been disabled. To change the current time, run the following command as the user **root**. In the command, _HH_ indicates the hour, _MM_ indicates the minute, and _SS_ indicates the second. Change them based on the site requirements. @@ -277,63 +258,20 @@ You can also customize the format of the displayed information by providing the $ date +"format" ``` -**Table 1** Formatting options - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Format Option

-

Description

-

%H

-

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

-

%M

-

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

-

%S

-

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

-

%d

-

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

-

%m

-

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

-

%Y

-

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

-

%Z

-

The time zone abbreviation (for example, CEST)

-

%F

-

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

-

%T

-

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

-
+**Table 1** Formatting options + +| Format Option | Description | +| :---- | :---- | +| %H | The hour in the HH format (for example, 17) | +| %M | The minute in the MM format (for example, 37) | +| %S | The second in the SS format (for example, 25) | +| %d | The day of the month in the DD format (for example, 15) | +| %m | The month in the MM format (for example, 07) | +| %Y | The year in the YYYY format (for example, 2019) | +| %Z | The time zone abbreviation (for example, CEST) | +| %F | The full date in the YYYY-MM-DD format (for example, 2019-7-15). This option is equal to %Y-%m-%d | +| %T | The full time in the HH:MM:SS format (for example, 18:30:25). This option is equal to %H:%M:%S | + Example commands and outputs: - To display the current date and time: @@ -457,7 +395,7 @@ The memory reserved for kdump must be added to the bootargs in the **/boot/efi/E | General solution| crashkernel=2048M,high| If the memory size is less than 4 GB, 256 MB is reserved for kdump. If the memory size is greater than 4 GB, 2048 MB is reserved for kdump. 256 + 2048 MB in total.| | Economical solution| crashkernel=1024M,high| If the memory size is less than 4 GB, 256 MB is reserved for kdump. If the memory size is greater than 4 GB, 1024 MB is reserved for kdump. 256 + 1024 MB in total. It is recommended that kdump files not be dumped using the network in scenarios where the system memory size is less than 512 GB. In VM scenarios, you can reduce the reserved memory. You are advised to set crashkernel to 512M or crashkernel to 256M,high.| -> ![](public_sys-resources/icon-note.gif) **NOTE:** +> ![](./public_sys-resources/icon-note.gif) **NOTE:** > > If kdump files are not dumped using the network, you need to set the kdump file system not to pack network drivers. Loading the network driver requires a large amount of memory. As a result, the memory reserved for kdump may be insufficient and kdump may fail. Therefore, you are advised to disable network drivers. @@ -465,4 +403,46 @@ The memory reserved for kdump must be added to the bootargs in the **/boot/efi/E In the kdump configuration file **/etc/kdump.conf**, the dracut parameters can be used to set the tailored driver module. You can configure the network driver to the tailored driver list to prevent the kdump file system from loading the driver. After the configuration file is modified, restart the kdump service for the modification to take effect. Set the dracut parameters as follows: -`dracut_args --omit-drivers "mdio-gpi usb_8dev et1011c rt2x00usb bcm-phy-lib mac80211_hwsim rtl8723be rndis_host hns3_cae amd vrf rtl8192cu mt76x02-lib int51x1 ppp_deflate team_mode_loadbalance smsc911x aweth bonding mwifiex_usb hnae dnet rt2x00pci vaser_pci hdlc_ppp marvell rtl8xxxu mlxsw_i2c ath9k_htc rtl8150 smc91x cortina at803x rockchip cxgb4 spi_ks8995 mt76x2u smsc9420 mdio-cavium bnxt_en ch9200 dummy macsec ice mt7601u rtl8188ee ixgbevf net1080 liquidio_vf be2net mlxsw_switchx2 gl620a xilinx_gmii2rgmii ppp_generic rtl8192de sja1000_platform ath10k_core cc770_platform realte igb c_can_platform c_can ethoc dm9601 smsc95xx lg-vl600 ifb enic ath9 mdio-octeon ppp_mppe ath10k_pci cc770 team_mode_activebackup marvell10g hinic rt2x00lib mlx4_en iavf broadcom igc c_can_pci alx rtl8192se rtl8723ae microchip lan78xx atl1c rtl8192c-common almia ax88179_178a qed netxen_nic brcmsmac rt2800usb e1000 qla3xxx mdio-bitbang qsemi mdio-mscc-miim plx_pci ipvlan r8152 cx82310_eth slhc mt76x02-usb ems_pci xen-netfront usbnet pppoe mlxsw_minimal mlxsw_spectrum cdc_ncm rt2800lib rtl_usb hnae3 ath9k_common ath9k_hw catc mt76 hns_enet_drv ppp_async huawei_cdc_ncm i40e rtl8192ce dl2 qmi_wwan mii peak_usb plusb can-dev slcan amd-xgbe team_mode_roundrobin ste10Xp thunder_xcv pptp thunder_bgx ixgbe davicom icplus tap tun smsc75xx smsc dlci hns_dsaf mlxsw_core rt2800mmi softing uPD60620 vaser_usb dp83867 brcmfmac mwifiex_pcie mlx4_core micrel team macvlan bnx2 virtio_net rtl_pci zaurus hns_mdi libcxgb hv_netvsc nicvf mt76x0u teranetics mlxfw cdc_eem qcom-emac pppox mt76-usb sierra_net i40evf bcm87xx mwifiex pegasus rt2x00mmi sja1000 ena hclgevf cnic cxgb4vf ppp_synctty iwlmvm team_mode_broadcast vxlan vsockmon hdlc_cisc rtl8723-common bsd_comp fakelb dp83822 dp83tc811 cicada fm10 8139t sfc hs geneve hclge xgene-enet-v2 cdc_mbim hdlc asix netdevsim rt2800pci team_mode_random lxt ems_usb mlxsw_pci sr9700 mdio-thunder mlxsw_switchib macvtap atlantic cdc_ether mcs7830 nicpf mdi peak_pci atl1e cdc_subset ipvtap btcoexist mt76x0-common veth slip iwldvm bcm7xxx vitesse netconsole epic100 myri10ge r8169 qede microchip_t1 liquidi bnx2x brcmutil mwifiex_sdi mlx5_core rtlwifi vmxnet3 nlmon hns3 hdlc_raw esd_usb2 atl2 mt76x2-common iwlwifi mdio-bcm-unimac national ath rtwpci rtw88 nfp rtl8821ae fjes thunderbolt-net 8139cp atl1 mscc vcan dp83848 dp83640 hdlc_fr e1000e ipheth net_failover aquantia rtl8192ee igbvf rocker intel-xway tg3" --omit "ramdisk network ifcfg qemu-net" --install "chmod" --nofscks` \ No newline at end of file +`dracut_args --omit-drivers "mdio-gpi usb_8dev et1011c rt2x00usb bcm-phy-lib mac80211_hwsim rtl8723be rndis_host hns3_cae amd vrf rtl8192cu mt76x02-lib int51x1 ppp_deflate team_mode_loadbalance smsc911x aweth bonding mwifiex_usb hnae dnet rt2x00pci vaser_pci hdlc_ppp marvell rtl8xxxu mlxsw_i2c ath9k_htc rtl8150 smc91x cortina at803x rockchip cxgb4 spi_ks8995 mt76x2u smsc9420 mdio-cavium bnxt_en ch9200 dummy macsec ice mt7601u rtl8188ee ixgbevf net1080 liquidio_vf be2net mlxsw_switchx2 gl620a xilinx_gmii2rgmii ppp_generic rtl8192de sja1000_platform ath10k_core cc770_platform realte igb c_can_platform c_can ethoc dm9601 smsc95xx lg-vl600 ifb enic ath9 mdio-octeon ppp_mppe ath10k_pci cc770 team_mode_activebackup marvell10g hinic rt2x00lib mlx4_en iavf broadcom igc c_can_pci alx rtl8192se rtl8723ae microchip lan78xx atl1c rtl8192c-common almia ax88179_178a qed netxen_nic brcmsmac rt2800usb e1000 qla3xxx mdio-bitbang qsemi mdio-mscc-miim plx_pci ipvlan r8152 cx82310_eth slhc mt76x02-usb ems_pci xen-netfront usbnet pppoe mlxsw_minimal mlxsw_spectrum cdc_ncm rt2800lib rtl_usb hnae3 ath9k_common ath9k_hw catc mt76 hns_enet_drv ppp_async huawei_cdc_ncm i40e rtl8192ce dl2 qmi_wwan mii peak_usb plusb can-dev slcan amd-xgbe team_mode_roundrobin ste10Xp thunder_xcv pptp thunder_bgx ixgbe davicom icplus tap tun smsc75xx smsc dlci hns_dsaf mlxsw_core rt2800mmi softing uPD60620 vaser_usb dp83867 brcmfmac mwifiex_pcie mlx4_core micrel team macvlan bnx2 virtio_net rtl_pci zaurus hns_mdi libcxgb hv_netvsc nicvf mt76x0u teranetics mlxfw cdc_eem qcom-emac pppox mt76-usb sierra_net i40evf bcm87xx mwifiex pegasus rt2x00mmi sja1000 ena hclgevf cnic cxgb4vf ppp_synctty iwlmvm team_mode_broadcast vxlan vsockmon hdlc_cisc rtl8723-common bsd_comp fakelb dp83822 dp83tc811 cicada fm10 8139t sfc hs geneve hclge xgene-enet-v2 cdc_mbim hdlc asix netdevsim rt2800pci team_mode_random lxt ems_usb mlxsw_pci sr9700 mdio-thunder mlxsw_switchib macvtap atlantic cdc_ether mcs7830 nicpf mdi peak_pci atl1e cdc_subset ipvtap btcoexist mt76x0-common veth slip iwldvm bcm7xxx vitesse netconsole epic100 myri10ge r8169 qede microchip_t1 liquidi bnx2x brcmutil mwifiex_sdi mlx5_core rtlwifi vmxnet3 nlmon hns3 hdlc_raw esd_usb2 atl2 mt76x2-common iwlwifi mdio-bcm-unimac national ath rtwpci rtw88 nfp rtl8821ae fjes thunderbolt-net 8139cp atl1 mscc vcan dp83848 dp83640 hdlc_fr e1000e ipheth net_failover aquantia rtl8192ee igbvf rocker intel-xway tg3" --omit "ramdisk network ifcfg qemu-net" --install "chmod" --nofscks` + +## Setting the Disk Scheduling Algorithm + +This section describes how to set the disk scheduling algorithm. + +### Temporarily Modifying the Scheduling Policy + +For example, if all I/O scheduling algorithms are changed to **mq-deadline**, the modification becomes invalid after the system is restarted. + +``` +echo mq-deadline > /sys/block/sd*/queue/scheduler +``` + +### Permanently Setting the Scheduling Policy + +You can add **elevator=mq-deadline** to the kernel line in the kernel boot configuration file **grub.cfg**. The setting takes effect after the system is restarted. + +``` +linux /vmlinuz-4.19.90-2003.4.0.0036.oe1.x86_64 root=/dev/mapper/openeuler-root ro resume=/dev/mapper/openeuler-swap rd.lvm.lv=openeuler/root rd.lvm.lv=openeuler/swap quiet crashkernel=512M elevator=mq-deadline +``` + + +## Setting the NMI Watchdog + +The non-maskable interrupt (NMI) is the highest priority interrupt in the system. The NMI watchdog can be used to detect server suspension events and trigger the server reboot after fault information is collected. According to the lab test results of the openEuler QA team, when the NMI watchdog is enabled, NMI occasionally generates a large number of interrupts and deteriorates the server performance. Therefore, properly enable the NMI watchdog function. + +Note: The following NMI watchdog settings apply only to hardware servers whose compatibility has been verified by the openEuler community. For other types of servers and VMs, the NMI watchdog settings are for reference only. + +### Run the following command to display the current NMI watchdog configuration status: + +``` +# sudo sysctl kernel.nmi_watchdog +kernel.nmi_watchdog = 0 +``` + +### Run the following command to set the NMI watchdog parameters: + +``` +# sudo sysctl -w kernel.nmi_watchdog=1 +``` + +Value **1**: enabled; Value **0**: disabled \ No newline at end of file diff --git a/content/en/docs/Administration/configuring-services.md b/docs/en/docs/Administration/configuring-services.md similarity index 100% rename from content/en/docs/Administration/configuring-services.md rename to docs/en/docs/Administration/configuring-services.md diff --git a/content/en/docs/Administration/configuring-the-ftp-server.md b/docs/en/docs/Administration/configuring-the-ftp-server.md similarity index 99% rename from content/en/docs/Administration/configuring-the-ftp-server.md rename to docs/en/docs/Administration/configuring-the-ftp-server.md index 98104b86eed332120d8b8de539b866cb996812bb..e841f0f63bc612e9e07973d8ae8e67c8f11cd14d 100644 --- a/content/en/docs/Administration/configuring-the-ftp-server.md +++ b/docs/en/docs/Administration/configuring-the-ftp-server.md @@ -87,7 +87,7 @@ To start, stop, or restart the vsftpd service, run the corresponding command as tcp6 0 0 :::21 :::* LISTEN 19716/vsftpd ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >If the **netstat** command does not exist, run the **dnf install net-tools** command to install the **net-tools** software and then run the **netstat** command. - Stopping the vsftpd services @@ -170,7 +170,7 @@ You can modify the vsftpd configuration file to control user permissions. [Tabl ### Default Configuration Description ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The configuration content in this document is for reference only. You can modify the content based on the site requirements \(for example, security hardening requirements\). In the openEuler system, vsftpd does not open to anonymous users by default. Run the vim command to view the main configuration file. The content is as follows: @@ -385,7 +385,7 @@ ftp> bye 221 Goodbye. ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >If the **ftp** command does not exist, run the **dnf install ftp** command as the **root** user to install the **ftp** software and then run the **ftp** command. ## Configuring a Firewall @@ -478,7 +478,7 @@ Generally, the get or mget command is used to download files. ftp> mget *.* ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >- In this case, a message is displayed each time a file is downloaded. To block the prompt information, run the **prompt off** command before running the **mget \*.\*** command. >- The files are downloaded to the current directory on the Linux host. For example, if you run the ftp command in /home/myopenEuler/, all files are downloaded to /home/myopenEuler/. diff --git a/content/en/docs/Administration/configuring-the-network.md b/docs/en/docs/Administration/configuring-the-network.md similarity index 97% rename from content/en/docs/Administration/configuring-the-network.md rename to docs/en/docs/Administration/configuring-the-network.md index 370ae8c6afdd5762779bfa1bf1a3da3a14eec05a..f3d54c7151a748c0fbfbbc8787d387797339f0e4 100644 --- a/content/en/docs/Administration/configuring-the-network.md +++ b/docs/en/docs/Administration/configuring-the-network.md @@ -27,7 +27,7 @@ ### Using the nmcli Command ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The network configuration configured by running the **nmcli** command takes effect immediately and will not be lost after the system restarts. @@ -78,6 +78,25 @@ Common commands are listed as follows: # nmcli device disconnect enp3s0 ``` +#### Device Management + +##### Connecting to a Device + +Run the following command to connect NetworkManager to the corresponding network device. Try to find the proper connection configuration and activate it. + + ``` + $nmcli device connect "$IFNAME" + ``` + +> If the corresponding connection configuration does not exist, NetworkManager creates and activates a configuration file with default settings. + +##### Disconnecting to a Device + +Run the following command to disconnect NetworkManager with the network device and prevent the device from being automatically activated. + + ``` + $nmcli device disconnect "$IFNAME" + ``` #### Setting Network Connections @@ -93,7 +112,7 @@ enp3s0 c88d7b69-f529-35ca-81ab-aa729ac542fd ethernet enp3s0 virbr0 ba552da6-f014-49e3-91fa-ec9c388864fa bridge virbr0 ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >In the command output, **NAME** indicates the connection ID \(name\). After a network connection is added, the corresponding configuration file is generated and associated with the corresponding device. To check for available devices, run the following command: @@ -159,7 +178,7 @@ To add a static IPv4 network connection, run the following command: nmcli connection add type ethernet con-name connection-name ifname interface-name ip4 address gw4 address ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >To add an IPv6 address and related gateway information, use the **ip6** and **gw6** options. For example, to create a static connection configuration file named **net-static**, run the following command as the **root** user: @@ -243,27 +262,40 @@ connection.llmnr: -1 (default) ``` ##### Adding a Wi-Fi Connection +You can add the Wi-Fi connection using either of the following methods: + +**Method 1: Connect to the Wi-Fi network using a network port.** + +Connect to the Wi-Fi network specified by the SSID or BSSID. Run the following command to find a matching connection or create a connection, and then activate the connection on the device. + +``` +$ nmcli device wifi connect "$SSID" password +$ PASSWORD" ifname "$IFNAME" +$ nmcli --ask device wifi connect "$SSID" +``` + +**Method 2: Connect to the Wi-Fi network using the configuration file.** -Run the following command to check for available Wi-Fi access points: +1,Run the following command to check for available Wi-Fi access points: ``` $ nmcli dev wifi list ``` -Run the following command to generate a static IP address configuration that allows Wi-Fi connections automatically allocated by the DNS: +2,Run the following command to generate a static IP address configuration that allows Wi-Fi connections automatically allocated by the DNS: ``` $ nmcli con add con-name Wifi ifname wlan0 type wifi ssid MyWifi ip4 192.168.100.101/24 gw4 192.168.100.1 ``` -Run the following command to set a WPA2 password, for example, **answer**: +3,Run the following command to set a WPA2 password, for example, **answer**: ``` $ nmcli con modify Wifi wifi-sec.key-mgmt wpa-psk $ nmcli con modify Wifi wifi-sec.psk answer ``` -Run the following command to change the Wi-Fi status: +4,Run the following command to change the Wi-Fi status: ``` $ nmcli radio wifi [ on | off ] @@ -321,7 +353,7 @@ $ nmcli connection show id 'Wifi ' | grep mtu ### Using the ip Command ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The network configuration configured using the **ip** command takes effect immediately, but the configuration will be lost after the system restarts. @@ -413,7 +445,7 @@ In the preceding command, **192.168.2.1** is the IP address of the target netw ### Configuring the Network Through the ifcfg File ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The network configured in the **ifcfg** file does not take effect immediately. You need to run the **systemctl reload NetworkManager** command as the **root** user to restart the network service for the configuration to take effect. #### Configuring a Static Network @@ -486,7 +518,7 @@ There are three types of host names: **static**, **transient**, and **pretty* - **transient**: Dynamic host name, which is maintained by the kernel. The initial value is a static host name. The default value is **localhost**. The value can be changed when the DHCP or mDNS server is running. - **pretty**: Flexible host name, which can be set in any form \(including special characters/blanks\). Static and transient host names are subject to the general domain name restrictions. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >Static and transient host names can contain only letters \(a–z and A–Z\), digits \(0–9\), hyphens \(-\), underlines \(\_\), and periods \(.\). The host names cannot start or end with a period \(.\) or contain two consecutive periods \(.\). The host name can contain a maximum of 64 characters. ### Configuring a Host Name by Running the **hostnamectl** Command @@ -498,7 +530,7 @@ Run the following command to view the current host name: $ hostnamectl status ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >If no option is specified in the command, the **status** option is used by default. #### Setting All Host Names @@ -684,7 +716,7 @@ Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkMa Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8) ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >If an interface is in **up** state, run the **ifdown** _enp3s0_ command to change the state to **down**. In the command, _enp3s0_ indicates the actual NIC name. After that, enable all the slave interfaces to enable the bonding \(do not set them to **Down**\). @@ -834,7 +866,7 @@ Both IPv6 and IPv4 addresses can be obtained through DHCP as the **root** user. } ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >- \: a 32-digit integer, indicating the enterprise ID. The enterprise is registered through the IANA. >- \: a 16-digit integer, indicating the length of the vendor class string. >- \: character string of the vendor class to be set, for example, HWHW. @@ -865,7 +897,7 @@ Both IPv6 and IPv4 addresses can be obtained through DHCP as the **root** user. } ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >In substring \(option dhcp6.vendor-class, 6, 10\), the start position of the substring is 6, because the substring contains four bytes of and two bytes of . The end position of the substring is 6+. In this example, the vendor class string is HWHW, and the length of the string is 4. Therefore, the end position of the substring is 6 + 4 = 10. You can specify and as required. On the server: @@ -894,7 +926,7 @@ struct sockaddr_in6 { }; ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >sin6\_scope\_id: a 32-bit integer. For the link-local address, it identifies the index of the specified interface. For the link-range sin6\_addr, it identifies the index of the specified interface. For the site-range sin6\_addr, it is used as the site identifier \(the site-local address has been discarded\). When the link-local address is used for socket communication, the interface index corresponding to the address needs to be specified when the destination address is constructed. Generally, you can use the if\_nametoindex function to convert an interface name into an interface index number. Details are as follows: @@ -945,7 +977,7 @@ PERSISTENT_DHCLIENT=yes|no|1|0 - DHCPV6C: **no** indicates that an IPv6 address is statically configured, and **yes** indicates that the DHCPv6 dhclient is enabled to dynamically obtain the IPv6 address. - PERSISTENT\_DHCLIENT: **no|0** indicates that the IPv4 dhclient process is configured as nonpersistent. If the dhclient sends a request packet to the DHCP server but does not receive any response, the dhclient exits after a period of time and the exit value is 2. **yes|1** indicates that the IPv4 dhclient process is configured to be persistent. The dhclient process repeatedly sends request packets to the DHCP server. **If PERSISTENT\_DHCLIENT is not configured, dhclient of IPv4 is set to yes|1 by default.** - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >The PERSISTENT\_DHCLIENT configuration takes effect only for IPv4 and does not take effect for IPv6-related dhclient -6 processes. By default, the persistence configuration is not performed for IPv6. @@ -1298,6 +1330,6 @@ $ActionQueueType Direct $MainMsgQueueType Direct ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- In direct mode, the queue size is reduced by 1. Therefore, one log is reserved in the queue for the next log output. >- The direct mode degrades the rsyslog performance of the server. diff --git a/content/en/docs/Administration/configuring-the-repo-server.md b/docs/en/docs/Administration/configuring-the-repo-server.md similarity index 86% rename from content/en/docs/Administration/configuring-the-repo-server.md rename to docs/en/docs/Administration/configuring-the-repo-server.md index 6399f5afef0c40891d748774022984c4bd8b2fc9..7511922b8638c2096de1e6f6689651d4f82c5690 100644 --- a/content/en/docs/Administration/configuring-the-repo-server.md +++ b/docs/en/docs/Administration/configuring-the-repo-server.md @@ -1,7 +1,7 @@ # Configuring the Repo Server ->![](public_sys-resources/icon-note.gif) **NOTE:** -> openEuler provides multiple repo sources for users online. For details about the repo sources, see [System Installation](../Releasenotes/installing-the-os.html). If you cannot obtain the openEuler repo source online, you can use the ISO release package provided by openEuler to create a local openEuler repo source. This section uses the **openEuler-20.03-LTS-aarch64-dvd.iso** file as an example. Modify the ISO file as required. +>![](./public_sys-resources/icon-note.gif) **NOTE:** +> openEuler provides multiple repo sources for users online. For details about the repo sources, see [System Installation](./../Releasenotes/installing-the-os.html). If you cannot obtain the openEuler repo source online, you can use the ISO release package provided by openEuler to create a local openEuler repo source. This section uses the **openEuler-20.03-LTS-SP2-aarch64-dvd.iso** file as an example. Modify the ISO file as required. @@ -24,17 +24,17 @@ ## Overview -Create the **openEuler-20.03-LTS-aarch64-dvd.iso** file provided by openEuler as the repo source. The following uses Nginx as an example to describe how to deploy the repo source and provide the HTTP service. +Create the **openEuler-20.03-LTS-SP2-aarch64-dvd.iso** file provided by openEuler as the repo source. The following uses Nginx as an example to describe how to deploy the repo source and provide the HTTP service. ## Creating or Updating a Local Repo Source -Mount the openEuler ISO file **openEuler-20.03-LTS-aarch64-dvd.iso** to create and update a repo source. +Mount the openEuler ISO file **openEuler-20.03-LTS-SP2-aarch64-dvd.iso** to create and update a repo source. ### Obtaining the ISO File Obtain the openEuler ISO file from the following website: -[https://repo.openeuler.org/openEuler-20.03-LTS/ISO/](https://repo.openeuler.org/openEuler-20.03-LTS/ISO/) +[https://repo.openeuler.org/openEuler-20.03-LTS-SP2/ISO/](https://repo.openeuler.org/openEuler-20.03-LTS-SP2/ISO/) ### Mounting an ISO File to Create a Repo Source @@ -43,7 +43,7 @@ Run the mount command as the **root** user to mount the ISO file. The following is an example: ``` -# mount /home/openEuler/openEuler-20.03-LTS-aarch64-dvd.iso /mnt/ +# mount /home/openEuler/openEuler-20.03-LTS-SP2-aarch64-dvd.iso /mnt/ ``` The mounted mnt directory is as follows: @@ -67,7 +67,7 @@ In the preceding command, **Packages** indicates the directory where the RPM p You can copy related files in the ISO file to a local directory to create a local repo source. The following is an example: ``` -# mount /home/openEuler/openEuler-20.03-LTS-aarch64-dvd.iso /mnt/ +# mount /home/openEuler/openEuler-20.03-LTS-SP2-aarch64-dvd.iso /mnt/ $ mkdir -p ~/srv/repo/ $ cp -r /mnt/Packages ~/srv/repo/ $ cp -r /mnt/repodata ~/srv/repo/ @@ -99,7 +99,7 @@ You can update the repo source in either of the following ways: In this command, --update indicates the update, and --workers indicates the number of threads, which can be customized. -> ![](public_sys-resources/icon-note.gif) **NOTE:** +> ![](./public_sys-resources/icon-note.gif) **NOTE:** If the command output contains "createrepo: command not found", run the **dnf install createrepo** command as the **root** user to install the **createrepo** softeware. ## Deploying the Remote Repo Source @@ -112,7 +112,7 @@ Install openEuler OS and deploy the repo source using Nginx on openEuler OS. 2. After installing Nginx, configure /etc/nginx/nginx.conf as the **root** user. - > ![](public_sys-resources/icon-note.gif) **NOTE:** + > ![](./public_sys-resources/icon-note.gif) **NOTE:** The configuration content in this document is for reference only. You can configure the content based on the site requirements (for example, security hardening requirements). ``` @@ -172,7 +172,7 @@ The configuration content in this document is for reference only. You can config - [Figure 1](#en-us_topic_0151920971_fd25e3f1d664b4087ae26631719990a71) indicates that the Nginx service is started successfully. **Figure 1** The Nginx service is successfully started. -![](figures/the-nginx-service-is-successfully-started.png "the-nginx-service-is-successfully-started") +![](./figures/the-nginx-service-is-successfully-started.png "the-nginx-service-is-successfully-started") - If the Nginx service fails to be started, view the error information. @@ -180,8 +180,8 @@ The configuration content in this document is for reference only. You can config $ systemctl status nginx.service --full ``` - **Figure 2** Nginx startup failure - ![](figures/nginx-startup-failure.png "nginx-startup-failure") + **Figure 2** Nginx startup failure + ![](./figures/nginx-startup-failure.png "nginx-startup-failure") As shown in [Figure 2](#en-us_topic_0151920971_f1f9f3d086e454b9cba29a7cae96a4c54), the Nginx service fails to be created because the /var/spool/nginx/tmp/client\_body directory fails to be created. You need to manually create the directory as the **root** user. Similar problems are solved as follows: @@ -229,21 +229,21 @@ The configuration content in this document is for reference only. You can config 4. After the Nginx service is configured, you can use the IP address to access the web page, as shown in [Figure 3](#en-us_topic_0151921017_fig1880404110396). **Figure 3** Nginx deployment succeeded -![](figures/nginx-deployment-succeeded.png "nginx-deployment-succeeded") +![](./figures/nginx-deployment-succeeded.png "nginx-deployment-succeeded") 5. Use either of the following methods to add the repo source to the /usr/share/nginx/repo directory: - Copy related files in the image to the /usr/share/nginx/repo directory as the **root** user. ``` - # mount /home/openEuler/openEuler-20.03-LTS-aarch64-dvd.iso /mnt/ + # mount /home/openEuler/openEuler-20.03-LTS-SP2-aarch64-dvd.iso /mnt/ # cp -r /mnt/Packages /usr/share/nginx/repo/ # cp -r /mnt/repodata /usr/share/nginx/repo/ # cp -r /mnt/RPM-GPG-KEY-openEuler /usr/share/nginx/repo/ # chmod -R 755 /usr/share/nginx/repo ``` - The **openEuler-20.03-LTS-aarch64-dvd.iso** file is stored in the **/home/openEuler** directory. + The **openEuler-20.03-LTS-SP2-aarch64-dvd.iso** file is stored in the **/home/openEuler** directory. - Create a soft link for the repo source in the /usr/share/nginx/repo directory as the **root** user. @@ -274,7 +274,7 @@ You can configure the built repo as the yum source and create the \*\*\*.repo co gpgkey=file:///home/openEuler/srv/repo/RPM-GPG-KEY-openEuler ``` - > ![](public_sys-resources/icon-note.gif) **NOTE:** + > ![](./public_sys-resources/icon-note.gif) **NOTE:** > > - The repoid in \[repoid\] indicates the ID of the software repository. Repoids in all .repo configuration files must be unique. In the example, repoid is set to **base**. > - **name** indicates the string that the software repository describes. @@ -298,7 +298,7 @@ You can configure the built repo as the yum source and create the \*\*\*.repo co gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler ``` - > ![](public_sys-resources/icon-note.gif) **NOTE:** + > ![](./public_sys-resources/icon-note.gif) **NOTE:** > 192.168.139.209 is an example. Replace it with the actual IP address. - If the openEuler repo source provided by openEuler is used as the yum source, the content of **openEuler.repo** is as follows (the aarch64-based OS repo source is used as an example): @@ -306,10 +306,10 @@ You can configure the built repo as the yum source and create the \*\*\*.repo co ``` [base] name=base - baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/OS/aarch64/ + baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/aarch64/ enabled=1 gpgcheck=1 - gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/OS/aarch64/RPM-GPG-KEY-openEuler + gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/aarch64/RPM-GPG-KEY-openEuler ``` ### repo Priority diff --git a/content/en/docs/Administration/configuring-the-web-server.md b/docs/en/docs/Administration/configuring-the-web-server.md similarity index 98% rename from content/en/docs/Administration/configuring-the-web-server.md rename to docs/en/docs/Administration/configuring-the-web-server.md index 080c8e167d71925c97fd52da903bc40758e72e50..c915961e7b8231156bd3d35f4d58db3afc153345 100644 --- a/content/en/docs/Administration/configuring-the-web-server.md +++ b/docs/en/docs/Administration/configuring-the-web-server.md @@ -41,7 +41,7 @@ You can use the systemctl tool to manage the httpd service, including starting, # dnf install httpd ``` - For more information about service management, see [Service Management](service-management.html). + For more information about service management, see [Service Management](./service-management.html). - To start, stop, and restart the httpd service, you must have the root permission. @@ -61,7 +61,7 @@ You can use the systemctl tool to manage the httpd service, including starting, ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >If the running Apache HTTP server functions as a secure server, a password is required after the system is started. The password is an encrypted private SSL key. #### Stopping the Service @@ -155,7 +155,7 @@ If the following information is displayed, the syntax of the configuration file Syntax OK ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- Before modifying the configuration file, back up the original file so that the configuration file can be quickly restored if a fault occurs. >- The modified configuration file takes effect only after the web service is restarted. @@ -194,7 +194,7 @@ For example, to load the asis DSO module, perform the following steps: ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >**Common httpd commands** >- httpd -v: views the httpd version number. >- httpd -l: views the static modules compiled into the httpd program. @@ -313,7 +313,7 @@ Nginx is a lightweight web server which also acts as a reverse proxy server and ### Installing Nginx -1. Configure the local yum source. For details, see [Configuring the Repo Server](configuring-the-repo-server.html). +1. Configure the local yum source. For details, see [Configuring the Repo Server](./configuring-the-repo-server.html). 2. Clear the cache. ``` @@ -347,7 +347,7 @@ You can use the systemctl tool to manage the Nginx service, including starting, #### Prerequisites - Ensure that the Nginx service has been installed. If not, install it by referring to [Installing Nginx](#installing-nginx). - For more information about service management, see [Service Management](service-management.html). + For more information about service management, see [Service Management](./service-management.html). - To start, stop, and restart the Nginx service, you must have the **root** permission. @@ -367,7 +367,7 @@ You can use the systemctl tool to manage the Nginx service, including starting, ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >If the running Nginx server functions as a secure server, a password is required after the system is started. The password is an encrypted private SSL key. #### Stopping the Service @@ -457,7 +457,7 @@ Although the default configuration can be used in most cases, you need to be fam If the command output contains **syntax is ok**, the syntax of the configuration file is correct. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- Before modifying the configuration file, back up the original file so that the configuration file can be quickly restored if a fault occurs. >- The modified configuration file takes effect only after the web service is restarted. diff --git a/docs/en/docs/Administration/faqs.md b/docs/en/docs/Administration/faqs.md new file mode 100644 index 0000000000000000000000000000000000000000..d518c7e9318e061e1a3c45d4b8e4640fc6694d4d --- /dev/null +++ b/docs/en/docs/Administration/faqs.md @@ -0,0 +1,551 @@ +# FAQs + + + + + + +- [FAQs](#faqs) + - [Why Is the Memory Usage of the libvirtd Service Queried by Running the systemctl and top Commands Different?](#why-is-the-memory-usage-of-the-libvirtd-service-queried-by-running-the-systemctl-and-top-commands-different) + - [An Error Occurs When stripsize Is Set to 4 During RAID 0 Volume Configuration](#an-error-occurs-when-stripsize-is-set-to-4-during-raid-0-volume-configuration) + - [Failed to Compile MariaDB Using rpmbuild](#failed-to-compile-mariadb-using-rpmbuild) + - [Failed to Start the SNTP Service Using the Default Configuration](#failed-to-start-the-sntp-service-using-the-default-configuration) + - [Installation Failure Caused by Software Package Conflict, File Conflict, or Missing Software Package](#installation-failure-caused-by-software-package-conflict-file-conflict-or-missing-software-package) + - [Why Do OpenSSH-related Packages Fail to Be Installed when the OpenSSH Software Package Is Upgraded in Default DNF Update Mode?](#why-do-openssh-related-packages-fail-to-be-installed-when-the-openssh-software-package-is-upgraded-in-default-dnf-update-mode) + - [Failed to Downgrade the libiscsi](#failed-to-downgrade-the-libiscsi) + - [Failed to Downgrade the xfsprogs](#failed-to-downgrade-the-xfsprogs) + - [ReDoS Caused by Improper Use of glibc Regular Expressions](#redos-caused-by-improper-use-of-glibc-regular-expressions) + - [A Cache File Exists when Files Are Edited Using Emacs.](#a-cache-file-exists-when-files-are-edited-using-emacs) + - [The Error Message "Failed to make ourselves RT: Operation not permitted" Is Displayed when the rtkit-daemon Service Is Started](#the-error-message-failed-to-make-ourselves-rt-operation-not-permitted-is-displayed-when-the-rtkit-daemon-service-is-started) + - [Failed to Reboot the System After It Is Fully Upgraded from 20.03-LTS to 20.03-LTS-SP2 Using the `dnf update` Command](#failed-to-reboot-the-system-after-it-is-fully-upgraded-from-2003-lts-to-2003-lts-sp2-using-the-dnf-update-command) + - [The httpd Service Fails to Be Started After the Version Is Upgraded](#the-httpd-service-fails-to-be-started-after-the-version-is-upgraded) + - [Upgrade and Downgrade Issues of fuse 2.9.9-4 and fuse3 3.9.2-4](#upgrade-and-downgrade-issues-of-fuse-299-4-and-fuse3-392-4) + - [An Error Is Reported When gdbm-devel Is Installed or Uninstalled During the Installation and Uninstallation of httpd-devel and apr-util-devel](#an-error-is-reported-when-gdbm-devel-is-installed-or-uninstalled-during-the-installation-and-uninstallation-of-httpd-devel-and-apr-util-devel) + + + + +## 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. + +## 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. + +## 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: + +``` ++ 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: + +``` +%global runtest 1 +``` + +After the modification: + +``` +%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. + +## 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**. + +## 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\): + +``` +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\): + +``` +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: + +``` +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. + + ``` + # 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. + + ``` + # 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. + + ``` + # dnf remove python2-blivet-1:3.1.1-5.noarch + ``` + + - Add the **\-\-allowerasing** parameter when upgrading the software package. + + ``` + # yum update blivet-data-1:3.1.1-5.noarch -y --allowerasing + ``` + +3. Perform the upgrade again. + +## Why Do OpenSSH-related Packages Fail to Be Installed when the OpenSSH Software Package Is Upgraded in Default DNF Update Mode? + +### Symptom + +When the OpenSSH software package is upgraded in default DNF update mode, a message indicating that the OpenSSH-related packages cannot be installed is displayed as follows: + ``` +cannot install both openssh-7.8p1-8.oe1.aarch64 and openssh-8.2p1-5.oe1.aarch64 + +cannot install both openssh-7.8p1-8.oe1.aarch64 and openssh-8.2p1-4.oe1.aarch64 + +cannot install the best update condidate for package openssh-clients-8.2p1-5.oe1.aarch64 + +cannot install the best update condidate for package openssh-8.2p1-5.oe1.aarch64 + ``` + +### Possible Cause + +By default, the best mode of the DNF package manager (the corresponding parameter is **--best**) is enabled. The **--best** option for DNF always tries to upgrade to the latest version available even if dependencies cannot be satisfied. By enabling the DNF best mode by default, the user will be reminded that a later package version is available but it fails to satisfy the dependencies. If a problem occurs, the DNF displays a message to notify the user of the problem. The openEuler Community developers are looking to make this default setting change in case that a security fix package cannot be upgraded due to dependency issues, under the current premise that it could be silently ignored and the user would not be aware. In addition, using the DNF best mode will quickly alert developers to problems in upgrade paths. + +### Solution + +A **--nobest** option for DNF will be available to override or disable the default behavior, allowing the user to properly upgrade the security fix package when the package to be upgraded has dependency issues. + +Open source software developers of openEuler 20.03-LTS-SP2 have identified this scenario during the upgrade of the security fix version of the OpenSSH software package. It is recommended that users select a proper upgrade mode based on the preceding analysis. openEuler also provides users with specific instructions on the upgrade operation: + + ``` + dnf update –y –nobest openssh + ``` + +### 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 +``` + +## Failed to Downgrade the libiscsi + +### Symptom + +The libiscsi-1.19.2 or a later version fails to downgrade to libiscsi-1.19.1 or an earlier version. + +``` +Error: Transaction test error: +file /usr/bin/iscsi-inq from install of libiscsi-1.19.0-1.eulerosv2r9.x86_64 conflicts with file from package libiscsi-utils-1.19.0-2.eulerosv2r9.x86_64 +file /usr/bin/iscsi-ls from install of libiscsi-1.19.0-1.eulerosv2r9.x86_64 conflicts with file from package libiscsi-utils-1.19.0-2.eulerosv2r9.x86_64 +file /usr/bin/iscsi-perf from install of libiscsi-1.19.0-1.eulerosv2r9.x86_64 conflicts with file from package libiscsi-utils-1.19.0-2.eulerosv2r9.x86_64 +file /usr/bin/iscsi-readcapacity16 from install of libiscsi-1.19.0-1.eulerosv2r9.x86_64 conflicts with file from package libiscsi-utils-1.19.0-2.eulerosv2r9.x86_64 +file /usr/bin/iscsi-swp from install of libiscsi-1.19.0-1.eulerosv2r9.x86_64 conflicts with file from package libiscsi-utils-1.19.0-2.eulerosv2r9.x86_64 +file /usr/bin/iscsi-test-cu from install of libiscsi-1.19.0-1.eulerosv2r9.x86_64 conflicts with file from package libiscsi-utils-1.19.0-2.eulerosv2r9.x86_64 +``` + +### Cause Analysis + +In versions earlier than the libiscsi-1.19.1, binary files such as **iscsi-xxx** are packed into the main package **libiscsi**. However, these binary files introduce the improper dependency CUnit. To solve this problem, the libiscsi-1.19.2 incorporates these binary files into a subpackage **libiscsi-utils**, and the **libiscsi** is weakly dependent on the **libiscsi-utils**. As a result, the integration of the **libiscsi-utils** is optional during mirroring. The **libiscsi** is not affected even if the **libiscsi-utils** is uninstalled or not integrated. + +When the **libiscsi-utils** is installed in the system, it will not downgrade because the libiscsi-1.19.1 or an earlier version that downgrades from the libiscsi-1.19.2 or a later version cannot provide the corresponding libiscsi-utils. However, **libiscsi-utils** depends on the main package **libiscsi** that has been generated before the downgrade. As a result, the dependency problem cannot be resolved and the downgrade fails. + +### Solution + +Run the following command to uninstall the **libiscsi-utils** and then perform the downgrade: + +``` +yum remove libiscsi-utils +``` + +## Failed to Downgrade the xfsprogs + +### Symptom + +xfsprogs-5.6.0-2 or a later version fails to downgrade to xfsprogs-5.6.0-1 or an earlier version. + +``` +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 +``` + +### Cause Analysis + +To reduce the dependency of the **xfsprogs** main package, the xfsprogs-5.6.0-2 version separates the **xfs\_scrub\*** command from the main package and incorporates the command into a subpackage **xfsprogs-xfs\_scrub**. The **xfsprogs** main package is weakly dependent on the **xfsprogs-xfs\_scrub**. As a result, the integration or uninstallation of the **xfsprogs-xfs\_scrub** is optional during mirroring. The xfsprogs main package is not affected even if the **xfsprogs-xfs\_scrub** is uninstalled or not integrated. + +When the **xfsprogs-xfs\_scrub** is installed in the system, it will not downgrade because the xfsprogs-5.6.0-1 or an earlier version that downgrades from the xfsprogs-5.6.0-2 or a later version cannot provide the corresponding xfsprogs-xfs\_scrub. However, **xfsprogs-xfs\_scrub** depends on the xfsprogs main package that has been generated before the downgrade. As a result, the dependency problem cannot be resolved and the downgrade fails. + +### Solution + +Run the following command to uninstall the **xfsprogs-xfs\_scrub** subpackage and then perform the downgrade: + +``` +yum remove xfsprogs-xfs_scrub +``` + +## ReDoS Caused by Improper Use of glibc Regular Expressions + +### Symptom + +When the regcomp and regexec interfaces of glibc are used for programming, or shell commands that use glibc regular expressions, such as **grep** and **sed**, are executed, improper regular expressions or input may cause the regular expression denial of service (ReDoS) (CVE-2019-9192/CVE-2018-28796). The typical regular expression pattern is the combination of reverse reference (indicated by **\\1**), **\*** (zero match or multiple matches), **+** (one match or multiple matches), and **{m,n}** (m: minimum number of matches; n: maximum number of matches). You can also enter an ultra-long character string together with the regular expression. Examples are shown as follows: + +``` +# 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) +``` + +### Cause Analysis + +A core dump occurs on the process that uses the regular expression. This occurs because the glibc regular expression is implemented using the hybrid DFA-NFA algorithm. The internal principle is to use the greedy algorithm for recursive search to match as many character strings as possible. The greedy algorithm causes the ReDoS when processing recursive regular expressions. + +### Solution + +1. Strictly control the user permission to reduce the scope of attack. +2. Ensure that the regular expression is correct. Do not enter an invalid regular expression or a combination that may trigger infinite recursion, such as an ultra-long character string accompanied with **\\1** or **\***. + ``` + # ()(\1\1)* + # "a"*400000 + ``` +3. After detecting a process exception in the program, restart the process to restore services, which helps improve program reliability. + +## A Cache File Exists when Files Are Edited Using Emacs. + +### Symptom + +If Emacs is not configured, a cache file ending with **~** exists after the edited file is saved. + +### Cause Analysis + +If Emacs is not configured or no valid configuration file is generated, a cache file will exist. The cache file is used to prevent data loss caused by unexpected system shutdown. You can determine whether to enable this function. + +### Solution + +1. After Emacs is installed, the Emacs page is displayed. + +2. Press **Alt+X** on the Emacs page. + +3. After entering **customize**, you can set any function. After the function is set, an **.emacs** configuration file is generated, and the path of the configuration file is displayed, for example, **/root/.emacs**. (The **.emacs** file that you create does not support this function.) + +4. If you need to modify the cache file configuration, use either of the following methods: + + * Copy the following code to **/root/.emacs** to disable the cache file function: + + ``` + (setq make-backup-files nil) + ``` + * Copy the following code to **/root/.emacs** and specify the directory for storing backup files: + + ``` + (setq backup-directory-alist (quote (("." . "/.emacs-backups")))) + ``` + + +## The Error Message "Failed to make ourselves RT: Operation not permitted" Is Displayed when the rtkit-daemon Service Is Started + +### Symptom + +By default, the rtkit-daemon service is started properly. However, if you start the rtkit-daemon service with the Docker Engine installed, the following error message is displayed: + +``` +12月 18 09:34:15 openEuler systemd[1]: Started RealtimeKit Scheduling Policy Service. +12月 18 09:34:15 openEuler rtkit-daemon[22560]: Successfully called chroot. +12月 18 09:34:15 openEuler rtkit-daemon[22560]: Successfully dropped privileges. +12月 18 09:34:15 openEuler rtkit-daemon[22560]: Successfully limited resources. +12月 18 09:34:15 openEuler rtkit-daemon[22560]: Running. +12月 18 09:34:15 openEuler rtkit-daemon[22560]: Canary thread running. +12月 18 09:34:15 openEuler rtkit-daemon[22560]: Failed to make ourselves RT: Operation not permitted +12月 18 09:34:15 openEuler rtkit-daemon[22560]: Watchdog thread running. +``` + +### Cause Analysis + +The error occurs because services, such as docker service, are set to **Delegate=yes**. + +If this parameter is not set, the rtkit-daemon service runs normally with the following cgroup information: + +``` +[root@openEuler ~]# cat /proc/pidof rtkit-daemon/cgroup | grep system +12:pids:/system.slice/rtkit-daemon.service +7:devices:/system.slice/rtkit-daemon.service +5:memory:/system.slice/rtkit-daemon.service +2:blkio:/system.slice +1:name=systemd:/system.slice/rtkit-daemon.service +``` + +If **Delegate=yes** is set, the systemd creates a slice and moves the CPU cgroup to the slice. In this case, the cgroup information of the rtkit-daemon service is as follows. The rtkit-daemon is moved to **3:cpu,cpuacct:/system.slice/rtkit-daemon.service**, but the value of **cpu.rt\_runtime\_us** is not properly set. As a result, an error is reported. + +``` +[root@openEuler ~]# cat /proc/pidof rtkit-daemon/cgroup | grep system +12:pids:/system.slice/rtkit-daemon.service +7:devices:/system.slice/rtkit-daemon.service +5:memory:/system.slice/rtkit-daemon.service +3:cpu,cpuacct:/system.slice/rtkit-daemon.service +2:blkio:/system.slice/rtkit-daemon.service +1:name=systemd:/system.slice/rtkit-daemon.service +``` + +### Solution + +Method 1: Use the default CPU cgroup configuration by modifying the rtkit-daemon service and adding the following configuration: + +``` +Slice=-.slice +DisableControllers=cpu cpuacct +``` + +Method 2: Configure scheduling parameters as required by modifying the rtkit-daemon service and adding the following configuration: + +``` +ExecStartPre=/usr/bin/bash -c "mkdir -p /sys/fs/cgroup/cpu,cpuacct/system.slice/rtkit-daemon.service" +ExecStartPre=/usr/bin/bash -c "echo 950000 > /sys/fs/cgroup/cpu,cpuacct/system.slice/cpu.rt_runtime_us" +ExecStartPre=/usr/bin/bash -c "echo 950000 > /sys/fs/cgroup/cpu,cpuacct/system.slice/rtkit-daemon.service/cpu.rt_runtime_us" +``` + +## Failed to Reboot the System After It Is Fully Upgraded from 20.03-LTS to 20.03-LTS-SP2 Using the `dnf update` Command + +### Symptom + +The **/boot** directory does not have a dedicated partition in the Legacy boot mode of the x86_64 architecture. When being fully upgraded from 20.03-LTS to 20.03-LTS-SP2 using `dnf` and the software package, the system is successfully upgraded but the reboot fails. The following information is displayed: + +``` +error: ../../grub-core/fs/fshelp.c:258:file +'/vmlinuz-4.19.90-2012.5.0.0054.oe1.x86_64' +not found. +error: ../../grub-core/loader/i386/pc/linux.c:417:you need to load the kernel first. + +Press any key to continue... +``` + +### Cause Analysis + +In 20.03-LTS or earlier, the .cfg files are used by default. In 20.03-LTS-SP2, after GRUB2 is upgraded to 2.04, the .cfg files are converted to blscfg files by default. However, openEuler does not support blscfg files. In this case, the kernel cannot be found based on the **grub.cfg** file during the restart, and the boot fails. Developers of the openEuler community are seeking to change the default settings to prevent boot failure caused by the .cfg format problem after the upgrade using the software package. + +### Solution + +1. On the boot screen, press **E** and change the paths of **linux** and **initrd** in the GRUB2 configurations. + + ``` + linux ($root)/vmlinuz-4.19-xxx root=xxx --->>> linux ($root)/boot/vmlinuz-4.19-xxx root=xxx + initrd ($root)/initramfs-4.19-xxx --->>> initrd ($root)/boot/initramfs-4.19-xxx + ``` + + Press **Ctrl+X** to boot the system. + +2. Reinstall grub2-2.04-8 or later. + +3. Execute `grub2-mkconfig -o /boot/grub2/grub.cfg` to regenerate the .cfg file. + +4. Restart the system again. The system is successfully booted. + +## The httpd Service Fails to Be Started After the Version Is Upgraded + +### Symptom + +When an earlier version is upgraded to the latest version, http.service fails to be started. + +### Cause Analysis + +When SELinux is enabled and the **mod_md** subpackage of httpd is installed in the environment to be upgraded, http.service fails to be started after the system is upgraded to the latest version. View **/var/log/messags**. The log is as follows: + +``` +openEuler setroubleshoot[****]: SELinux is preventing /usr/sbin/httpd from add_name access on the directory md. +... +openEuler setroubleshoot[****]: SELinux is preventing httpd from setattr access on the directory challenges. +``` + +The preceding log indicates that the SELinux prevents the httpd process from performing operations on the **md/challenges** directory. In this case, when SELinux is enabled and the **mod_md** subpackage is installed, you need to modify the SELinux configuration. Otherwise, http.service fails to be started due to the SELinux permission control. + +### Solution + +1. Run the following command to allow httpd to access the network: + + ``` + # setsebool -P httpd_can_network_connect on + ``` + +2. Create the **httpd-md.te** file to describe the permission to access resources. The file content is as follows: + + ``` + # create new + module httpd-md 1.0; + + require { + type httpd_config_t; + type httpd_t; + class dir { add_name create remove_name rename reparent rmdir setattr }; + class file { create rename setattr unlink write }; + } + + #============= httpd_t ============== + allow httpd_t httpd_config_t:dir { add_name create remove_name rename reparent rmdir setattr }; + allow httpd_t httpd_config_t:file { create rename setattr unlink write }; + ``` + +3. Check and compile the security policy file. + + ``` + # checkmodule -m -M -o httpd-md.mod httpd-md.te + ``` + +4. Create a security policy module. + + ``` + # semodule_package --outfile httpd-md.pp --module httpd-md.mod + ``` + +5. Install the security policy module. + + ``` + # semodule -i httpd-md.pp + ``` + +6. Restart httpd.service. + + ``` + # systemctl status httpd.service + ``` + +## Upgrade and Downgrade Issues of fuse 2.9.9-4 and fuse3 3.9.2-4 + +### Symptom + +1. When `dnf upgrade fuse fuse-common fuse3` is executed, the upgrade fails. +2. When `dnf downgrade fuse` is executed, the fuse3 is downgraded or installed. +3. When `dnf downgrade fuse3` is executed, the fuse is downgraded. + +### Cause Analysis + +1. In versions earlier than fuse 2.9.9-3, both the fuse and fuse3 obsolete the fuse-common. When the package dependencies are parsed in sequence, the fuse-common fails to be upgraded because the fuse-common is obsoleted by the fuse3. +2. When the fuse is downgraded, the fuse-common is also downgraded. In versions earlier than fuse 2.9.9-3 and fuse3 3.9.2-3, the fuse-common package is contained. When the fuse-common is downgraded, the fuse3 is degraded or installed because the old version of the fuse-common is contained in the fuse3. +3. When the fuse3 is downgraded, the fuse-common is also downgraded. In versions earlier than fuse 2.9.9-3 and fuse3 3.9.2-3, the fuse-common package is contained. When the fuse-common is downgraded, the fuse is also downgraded because the old version of the fuse-common is contained in the fuse. + +### Solution + +1. Execute `dnf upgrade fuse` to upgrade the fuse, and `dnf fuse fuse3 fuse-common` to upgrade the fuse3. +2. No measure needs to be taken. +3. No measure needs to be taken. + +## 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: + + ``` + 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. \ No newline at end of file diff --git "a/content/en/docs/Administration/figures/\346\220\255\345\273\272\346\225\260\346\215\256\347\233\230-0.png" b/docs/en/docs/Administration/figures/Creating_DataDisk-0.png similarity index 100% rename from "content/en/docs/Administration/figures/\346\220\255\345\273\272\346\225\260\346\215\256\347\233\230-0.png" rename to docs/en/docs/Administration/figures/Creating_DataDisk-0.png diff --git "a/content/en/docs/Administration/figures/\346\220\255\345\273\272\346\225\260\346\215\256\347\233\230.png" b/docs/en/docs/Administration/figures/Creating_DataDisk.png similarity index 100% rename from "content/en/docs/Administration/figures/\346\220\255\345\273\272\346\225\260\346\215\256\347\233\230.png" rename to docs/en/docs/Administration/figures/Creating_DataDisk.png diff --git a/content/en/docs/Administration/figures/d1376b2a-d036-41c4-b852-e8368f363b5e-1.png b/docs/en/docs/Administration/figures/d1376b2a-d036-41c4-b852-e8368f363b5e-1.png similarity index 100% rename from content/en/docs/Administration/figures/d1376b2a-d036-41c4-b852-e8368f363b5e-1.png rename to docs/en/docs/Administration/figures/d1376b2a-d036-41c4-b852-e8368f363b5e-1.png diff --git a/content/en/docs/Administration/figures/d1376b2a-d036-41c4-b852-e8368f363b5e.png b/docs/en/docs/Administration/figures/d1376b2a-d036-41c4-b852-e8368f363b5e.png similarity index 100% rename from content/en/docs/Administration/figures/d1376b2a-d036-41c4-b852-e8368f363b5e.png rename to docs/en/docs/Administration/figures/d1376b2a-d036-41c4-b852-e8368f363b5e.png diff --git a/content/en/docs/Administration/figures/en-us_image_0229622729.png b/docs/en/docs/Administration/figures/en-us_image_0229622729.png similarity index 100% rename from content/en/docs/Administration/figures/en-us_image_0229622729.png rename to docs/en/docs/Administration/figures/en-us_image_0229622729.png diff --git a/content/en/docs/Administration/figures/en-us_image_0229622789.png b/docs/en/docs/Administration/figures/en-us_image_0229622789.png similarity index 100% rename from content/en/docs/Administration/figures/en-us_image_0229622789.png rename to docs/en/docs/Administration/figures/en-us_image_0229622789.png diff --git a/content/en/docs/Administration/figures/en-us_image_0230050789.png b/docs/en/docs/Administration/figures/en-us_image_0230050789.png similarity index 100% rename from content/en/docs/Administration/figures/en-us_image_0230050789.png rename to docs/en/docs/Administration/figures/en-us_image_0230050789.png diff --git a/content/en/docs/Administration/figures/en-us_image_0231143189.png b/docs/en/docs/Administration/figures/en-us_image_0231143189.png similarity index 100% rename from content/en/docs/Administration/figures/en-us_image_0231143189.png rename to docs/en/docs/Administration/figures/en-us_image_0231143189.png diff --git a/content/en/docs/Administration/figures/en-us_image_0231143191.png b/docs/en/docs/Administration/figures/en-us_image_0231143191.png similarity index 100% rename from content/en/docs/Administration/figures/en-us_image_0231143191.png rename to docs/en/docs/Administration/figures/en-us_image_0231143191.png diff --git a/content/en/docs/Administration/figures/en-us_image_0231143193.png b/docs/en/docs/Administration/figures/en-us_image_0231143193.png similarity index 100% rename from content/en/docs/Administration/figures/en-us_image_0231143193.png rename to docs/en/docs/Administration/figures/en-us_image_0231143193.png diff --git a/content/en/docs/Administration/figures/en-us_image_0231143195.png b/docs/en/docs/Administration/figures/en-us_image_0231143195.png similarity index 100% rename from content/en/docs/Administration/figures/en-us_image_0231143195.png rename to docs/en/docs/Administration/figures/en-us_image_0231143195.png diff --git a/content/en/docs/Administration/figures/en-us_image_0231143196.png b/docs/en/docs/Administration/figures/en-us_image_0231143196.png similarity index 100% rename from content/en/docs/Administration/figures/en-us_image_0231143196.png rename to docs/en/docs/Administration/figures/en-us_image_0231143196.png diff --git a/content/en/docs/Administration/figures/en-us_image_0231143197.png b/docs/en/docs/Administration/figures/en-us_image_0231143197.png similarity index 100% rename from content/en/docs/Administration/figures/en-us_image_0231143197.png rename to docs/en/docs/Administration/figures/en-us_image_0231143197.png diff --git a/content/en/docs/Administration/figures/en-us_image_0231143198.png b/docs/en/docs/Administration/figures/en-us_image_0231143198.png similarity index 100% rename from content/en/docs/Administration/figures/en-us_image_0231143198.png rename to docs/en/docs/Administration/figures/en-us_image_0231143198.png diff --git a/content/en/docs/Administration/figures/en-us_image_0231563132.png b/docs/en/docs/Administration/figures/en-us_image_0231563132.png similarity index 100% rename from content/en/docs/Administration/figures/en-us_image_0231563132.png rename to docs/en/docs/Administration/figures/en-us_image_0231563132.png diff --git a/content/en/docs/Administration/figures/en-us_image_0231563134.png b/docs/en/docs/Administration/figures/en-us_image_0231563134.png similarity index 100% rename from content/en/docs/Administration/figures/en-us_image_0231563134.png rename to docs/en/docs/Administration/figures/en-us_image_0231563134.png diff --git a/content/en/docs/Administration/figures/en-us_image_0231563135.png b/docs/en/docs/Administration/figures/en-us_image_0231563135.png similarity index 100% rename from content/en/docs/Administration/figures/en-us_image_0231563135.png rename to docs/en/docs/Administration/figures/en-us_image_0231563135.png diff --git a/content/en/docs/Administration/figures/en-us_image_0231563136.png b/docs/en/docs/Administration/figures/en-us_image_0231563136.png similarity index 100% rename from content/en/docs/Administration/figures/en-us_image_0231563136.png rename to docs/en/docs/Administration/figures/en-us_image_0231563136.png diff --git a/content/en/docs/Administration/figures/example-command-output.png b/docs/en/docs/Administration/figures/example-command-output.png similarity index 100% rename from content/en/docs/Administration/figures/example-command-output.png rename to docs/en/docs/Administration/figures/example-command-output.png diff --git "a/content/en/docs/Administration/figures/\347\231\273\345\275\225.png" b/docs/en/docs/Administration/figures/login.png similarity index 100% rename from "content/en/docs/Administration/figures/\347\231\273\345\275\225.png" rename to docs/en/docs/Administration/figures/login.png diff --git a/content/en/docs/Administration/figures/mariadb-logical-architecture.png b/docs/en/docs/Administration/figures/mariadb-logical-architecture.png similarity index 100% rename from content/en/docs/Administration/figures/mariadb-logical-architecture.png rename to docs/en/docs/Administration/figures/mariadb-logical-architecture.png diff --git a/content/en/docs/Administration/figures/nginx-deployment-succeeded.png b/docs/en/docs/Administration/figures/nginx-deployment-succeeded.png similarity index 100% rename from content/en/docs/Administration/figures/nginx-deployment-succeeded.png rename to docs/en/docs/Administration/figures/nginx-deployment-succeeded.png diff --git a/content/en/docs/Administration/figures/nginx-startup-failure.png b/docs/en/docs/Administration/figures/nginx-startup-failure.png similarity index 100% rename from content/en/docs/Administration/figures/nginx-startup-failure.png rename to docs/en/docs/Administration/figures/nginx-startup-failure.png diff --git a/content/en/docs/Administration/figures/postgres.png b/docs/en/docs/Administration/figures/postgres.png similarity index 100% rename from content/en/docs/Administration/figures/postgres.png rename to docs/en/docs/Administration/figures/postgres.png diff --git a/content/en/docs/Administration/figures/postgresql-architecture.png b/docs/en/docs/Administration/figures/postgresql-architecture.png similarity index 100% rename from content/en/docs/Administration/figures/postgresql-architecture.png rename to docs/en/docs/Administration/figures/postgresql-architecture.png diff --git a/content/en/docs/Administration/figures/the-nginx-service-is-successfully-started.png b/docs/en/docs/Administration/figures/the-nginx-service-is-successfully-started.png similarity index 100% rename from content/en/docs/Administration/figures/the-nginx-service-is-successfully-started.png rename to docs/en/docs/Administration/figures/the-nginx-service-is-successfully-started.png diff --git a/content/en/docs/Administration/managing-hard-disks-through-lvm.md b/docs/en/docs/Administration/managing-hard-disks-through-lvm.md similarity index 99% rename from content/en/docs/Administration/managing-hard-disks-through-lvm.md rename to docs/en/docs/Administration/managing-hard-disks-through-lvm.md index 45c63cd6e2a964cc0857e8be9103f0f62584b4f1..10e5910556072e84aefd1d61cecf406d0f0d2fb0 100644 --- a/content/en/docs/Administration/managing-hard-disks-through-lvm.md +++ b/docs/en/docs/Administration/managing-hard-disks-through-lvm.md @@ -60,10 +60,10 @@ When disks are managed using LVM, file systems are distributed on multiple disks ## Installing the LVM ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The LVM has been installed on the openEuler OS by default. You can run the **rpm -qa | grep lvm2** command to check whether it is installed. If the command output contains "lvm2", the LVM has been installed. In this case, skip this section. If no information is output, the LVM is not installed. Install it by referring to this section. -1. Configure the local yum source. For details, see [Configuring the Repo Server](configuring-the-repo-server.html). +1. Configure the local yum source. For details, see [Configuring the Repo Server](./configuring-the-repo-server.html). 2. Clear the cache. ``` @@ -358,7 +358,7 @@ In the preceding information: - _lvname_: device file corresponding to the LV whose attributes are to be displayed. If this option is not set, attributes of all LVs are displayed. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >Device files corresponding to LVs are stored in the VG directory. For example, if LV **lv1** is created in VG **vg1**, the device file corresponding to **lv1** is **/dev/vg1/lv1**. diff --git a/content/en/docs/Administration/process-management.md b/docs/en/docs/Administration/process-management.md similarity index 59% rename from content/en/docs/Administration/process-management.md rename to docs/en/docs/Administration/process-management.md index e745e2271bdefd0a6a940ca09e88ff61d8547874..3925fea9defbb096fdf6a3116b6d257591a063cb 100644 --- a/content/en/docs/Administration/process-management.md +++ b/docs/en/docs/Administration/process-management.md @@ -1,6 +1,6 @@ # Process Management -The operating system manages multiple user requests and tasks. In most cases, the operating system comes with only one CPU and one main memory, but it may have multiple tier-2 disks and input/output \(I/O\) devices. Therefore, users have to share resources, but it appears to users that they are exclusively occupying resources. The operating system places user tasks, OS tasks, emailing, print tasks, and other pending tasks in the queue and schedules the tasks according to predefined rules. In this topic, you will know how the operating system manages processes. +The operating system (OS) manages multiple user requests and tasks. In most cases, the OS comes with only one CPU and one main memory, but multiple tier-2 disks and input/output \(I/O\) devices. Therefore, users have to share resources, but it appears to users that they are exclusively occupying resources. The OS places user tasks, OS tasks, mailing, print tasks, and other pending tasks in a queue and schedules the tasks according to predefined rules. This topic describes how the OS manages processes. - [Process Management](#process-management) @@ -18,12 +18,12 @@ The operating system manages multiple user requests and tasks. In most cases, th ## Viewing Processes -Linux is a multi-task system and needs to get process information during process management. To manage processes, you first need to know the number of processes and their statuses. Multiple commands are available to view processes. +Linux is a multi-task system and needs to get process information during process management. To manage processes, you need to know the number of processes and their statuses. Multiple commands are available to view processes. ### who Command -The who command is used to display system user information. For example, before running the talk command to establish instant communication with another user, you need to run the who command to determine whether the target user is online. As another example, the system administrator can run the who command to learn what each login user is doing at the current time. The who command is widely seen in system administration since it is easy to use and can return a comprehensive set of accurate user information. +The `who` command is used to display system user information. For example, before running the `talk` command to establish instant communication with another user, you need to run the `who` command to determine whether the target user is online. In another example, the system administrator can run the `who` command to learn what each login user is doing at the current time. The `who` command is widely seen in system administration since it is easy to use and can return a comprehensive set of accurate user information. -The following is an example output of the who command, where system users and their status are displayed: The use of the **who** command is as follows: +The following is an example output of the `who` command, where system users and their status are displayed: The use of the `who` command is as follows: ``` $ who @@ -38,9 +38,9 @@ root pts/8 Aug 6 11:34 (192.168.0.234) ``` ### ps Command -The **ps** command is the most basic and powerful command to view process information. The ps command is used to display process information, including which processes are running, terminated, resource-hungry, or stay as zombies. +The `ps` command is the most basic and powerful command to view process information, including which processes are running, terminated, resource-hungry, or stay as zombies. -A common scenario is using the ps command to monitor background processes, which do not interact with your screen, keyboard, and other I/O devices. [Table 1](#en-us_topic_0151921029_t34619d964a3d41ad8694189ec383359c) lists the common ps command options. +A common scenario is to monitor background processes, which do not interact with your screen, keyboard, and other I/O devices. [Table 1](#en-us_topic_0151921029_t34619d964a3d41ad8694189ec383359c) lists the common `ps` command options. **Table 1** Common ps command options @@ -63,7 +63,7 @@ A common scenario is using the ps command to monitor background processes, which

-h

-

Hides column headings in the listing of process information.

+

Hides column headings in the process information.

-l

@@ -88,7 +88,7 @@ A common scenario is using the ps command to monitor background processes, which

-x

-

Lists all processes without controlling terminals.

+

Lists all processes without control terminals.

@@ -106,34 +106,34 @@ $ ps -a ``` ### top Command -Both the top and the ps commands can display a list of currently running processes, but the top command allows you to update the displayed list of processes repeatedly with the press of a button. If the top command is executed in foreground, it exclusively occupies foreground until it is terminated. The top command provides real-time visibility into system processor status. You can sort the list of CPU tasks by CPU usage, memory usage, or task execution time. Extensive customization of the display, such as choice of columns or sorting method, can be achieved using interactive commands or the customization file. +Both the `top` and `ps` commands can display a list of currently running processes, but the `top` command allows you to update the displayed list of processes by pressing a button repeatedly. If the `top` command is executed in foreground, it exclusively occupies foreground until it is terminated. The `top` command provides real-time visibility into system processor status. You can sort the list of CPU tasks by CPU usage, memory usage, or task execution time. Extensive display customization, such as choosing the columns or sorting method, can be achieved using interactive commands or the customization file. -[Figure 1](#en-us_topic_0151921029_f289234fcdbac453796200d80e9889cd1) provides an example output of the top command. +[Figure 1](#en-us_topic_0151921029_f289234fcdbac453796200d80e9889cd1) provides an example output of the `top` command. **Figure 1** Example command output -![](figures/example-command-output.png "example-command-output") +![](./figures/example-command-output.png "example-command-output") ### kill Command -The **kill** command is used to terminate a process regardless of whether the process is running in foreground or background. It differs from the combo key **Ctrl+c**, which can terminate only foreground processes. The kill command is used to terminate a process regardless of whether the process is running in foreground or background. The reason for terminating a background process can be heavy use of CPU resources or deadlock. +The `kill` command is used to terminate a process regardless of whether the process is running in foreground or background. It differs from the combo key **Ctrl+C**, which can terminate only foreground processes. The reason for terminating a background process can be heavy use of CPU resources or deadlock. -The kill command sends a signal to terminate running processes. By default, the TERM signal is used. The TERM signal terminates all processes incapable of capturing the TERM signal. To terminate a process capable of capturing the TERM signal, use the KILL signal \(signal ID: 9\) instead. +The `kill` command sends a signal to terminate running processes. By default, the `TERM` signal is used, terminating all processes incapable of capturing it. To terminate a process capable of capturing the `TERM` signal, use the `KILL` signal \(signal ID: 9\) instead. -Two types of syntax of the kill command: +Two types of syntax of the `kill` command: ``` kill [-s signal | -p] [-a] PID… kill -l [signal] ``` -The process ID is retrieved from the ps command. The **-s** option indicates the signal sent to specified program. The signal details can be viewed by running the **kill -l** command. The **-p** option indicates the specified process IDs. +The process ID can be retrieved by running the `ps` command. The `-s` option indicates the signal sent to the specified program. The signal details can be viewed by running the `kill -l` command. The `-p` option indicates the specified process ID. -For example, to terminate the process with ID 1409, run the following command as the **root** user: +For example, to terminate the process whose ID is 1409, run the following command as the **root** user: ``` # kill -9 1409 ``` -Example output of the kill command with the -l option +Example output of the `kill` command with the `-l` option ``` $ kill -l @@ -154,15 +154,15 @@ $ kill -l ## Scheduling a Process -The time-consuming and resource-demanding part of maintenance work is often performed at late night. You can arrange relevant processes to get started at the scheduled time instead of staying up all night. Here, we will explain the process scheduling commands. +The time-consuming and resource-demanding part of maintenance work is often performed at late night. You can schedule relevant processes to get started at the scheduled time instead of staying up all night. The following describes the process scheduling commands. ### Using the at Command to Run Processes at the Scheduled Time #### Function -The at command is used to run a batch of processes \(a series of commands\) at the scheduled time or time+date. +The `at` command is used to run a batch of processes \(a series of commands\) at the scheduled time or time and date. -Syntax of the at command: +Syntax of the `at` command: ``` at [-V] [-q queue] [-f filename] [-mldbv] time @@ -172,14 +172,14 @@ at -c job [job...] #### Time Format The scheduled time can be in any of the following formats: -- hh:mm today: If hh:mm is earlier than the current time, the selected commands will be run at hh:mm the next day. +- _hh:mm_ today: If _hh:mm_ is earlier than the current time, the selected commands will be run at _hh:mm_ the next day. - midnight, noon, teatime \(typically at 16:00\), or the like - 12-hour format followed by am or pm -- Time + date \(month day, mm/dd/yy, or dd.mm.yy\) The scheduled date must follow the scheduled time. +- Time + date \(_month day_, _mm/dd/yy_, or _dd.mm.yy_\). The scheduled date must follow the scheduled time. -The scheduled time can also be relative time, which is suitable for scheduling commands that are going to be executed soon. For example, now+_N_ minutes, hours, days, or weeks. _N_ is time, which may be a few days or hours. Further, the scheduled time can be words like today, tomorrow, or the like. Here are some examples of the scheduled time. +The scheduled time can also be relative time, which is suitable for scheduling commands that are going to be executed soon. For example, now+_N_ minutes, hours, days, or weeks. _N_ indicates the specified time, which may be a few days or hours. Further, the scheduled time can be words like today, tomorrow, or the like. Here are some examples of the scheduled time. -Imagine the current time is 12:30 June 7 2019 and you want to run a command at 4:30 pm. The scheduled time in the at command can be any of the following: +Assume that the current time is 12:30 June 7 2019 and you want to run a command at 4:30 pm. The time scheduled by the `at` command can be any of the following: ``` at 4:30pm @@ -192,12 +192,12 @@ Imagine the current time is 12:30 June 7 2019 and you want to run a command at 4 at 16:30 Jun 7 ``` -Although you can select any of the preceding examples according to your preference, absolute time in 24-hour format, such as at 16:30 6/7/19, is recommended. +Although you can select any of the preceding examples according to your preference, absolute time in 24-hour format, such as `at 16:30 6/7/19`, is recommended. #### Privileges -Only commands from standard input or from the file specified by the -f option can be scheduled by the at command to be executed. If the su command is executed to switch the operating system from user A to user B and then the at command is executed at the shell prompt of user B, the at command execution result is sent to user B. whereas emails \(if any\) are sent to user A. +Only commands from standard input or from the file specified by the **-f** option can be scheduled by the `at` command. If the `su` command is executed to switch the OS from user A to user B and then the `at` command is executed at the shell prompt of user B, the `at` command execution result is sent to user B, whereas emails \(if any\) are sent to user A. -For example, to run the slocate -u command at 10 am on June 8, 2019, perform the following steps as the **root** user: +For example, to run the `slocate -u` command at 10 am on June 8, 2019, run the following commands as the **root** user: ``` # at 10:00 6/8/19 @@ -206,45 +206,45 @@ at> [1]+ Stopped at 10:00 6/8/19 ``` -When the at\> prompt appears, type **slocate -u** and press Enter. Repeat substep 2 to add other commands that need to be run at 10 am on 8 June 2015. Then, press Ctrl+d to exit the at command. +When the **at\>** prompt appears, type `slocate -u` and press **Enter**. Repeat the step to add other commands that need to be run at 10 am on 8 June 2019. Then, press **Ctrl+D** to exit the `at` command. -The administrator is authorized to run the at command unconditionally. For other users, their privilege to run the at command is defined in /etc/at.allow and /etc/at.deny files. +The administrator is authorized to run the `at` command unconditionally. For other users, their privileges to run the `at` command is defined in the **/etc/at.allow** and **/etc/at.deny** files. ### Using the cron Service to Run Commands Periodically -The at command can run commands at the scheduled time but only once. It means that after the running command is specified, the system completes the task at the specified time. If you need to run commands repeatedly, the cron service is a good helper. +The `at` command can run commands at the scheduled time, but only once. It means that after the commands to be run is specified, the system completes the task at the specified time. If you need to run the commands repeatedly, the **cron** service is a good choice. #### Cron Service -The **cron** service searches the **/var/spool/cron** directory for **crontab** files named by the user name in the /etc/passwd file and loads the search results into memory to execute the commands in the **crontab** files. Each user has a crontab file, with the file name being the same as the user name. For example, the **crontab** file of the **userexample** user is **/var/spool/cron/userexample**. +The **cron** service searches the **/var/spool/cron** directory for the **crontab** files named by the user name in the **/etc/passwd** file and loads the search results into memory to execute the commands in the **crontab** files. Each user has a **crontab** file with the same name as the user name. For example, the **crontab** file of the **userexample** user is **/var/spool/cron/userexample**. -The **cron** service also reads the cron configuration file **/etc/crontab** every minute, which can be edited in various formats. If no crontab files are found, the **cron** service enters sleep mode and releases system resources. One minute later, the **cron** service is awoken to repeat the search work and command execution. Therefore, the background process occupies few resources and is wakened up every minute to check whether there are commands to be executed. +The **cron** service also reads the cron configuration file **/etc/crontab** every minute, which can be edited in various formats. If no **crontab** files are found, the **cron** service enters sleep mode and releases system resources. One minute later, the **cron** service is waken up to repeat the search work and command execution. Therefore, the background process occupies few resources and is wakened up every minute to check whether there are commands to be executed. -Command execution results are then mailed to users specified by the environment variable MAILTO in the /etc/crontab file. The **cron** service, once started, does not require manual intervention except when you need to replace periodic commands with new ones. +Command execution results are then mailed to users specified by the environment variable `MAILTO` in the **/etc/crontab** file. The **cron** service, once started, does not require manual intervention except when you need to replace the scheduled commands with new ones. #### crontab Command -The crontab command is used to install, edit, remove, list, and perform other operations on crontab files. Each user has its own crontab files and can add commands to be executed to the files. +The `crontab` command is used to install, edit, remove, list, and perform other operations on **crontab** files. Each user has its own **crontab** files and can add commands to be executed to the files. -Here are common crontab command options: +Here are common `crontab` command options: -- crontab -u //Set the **cron** service of a user. This option is required only when the **crontab** command is run by the **root** user. -- crontab -l //List details of the **cron** service of a user. +- crontab -u //Set the **cron** service of a user. This option is required only when the `crontab` command is run by the **root** user. +- crontab -l //List details about the **cron** service of a user. - crontab -r //Remove the **cron** service of a user. - crontab -e //Edit the **cron** service of a user. -For example, to list cron service settings of the user **root**, run the following command: +For example, to list the **cron** service settings of the **root** user, run the following command: ``` # crontab -u root -l ``` #### crontab Files -Enter the commands to be executed and time in crontab files. Each line in the files contains six fields. The first five fields are the time when the specified command is executed, and the last field is the command to be executed. Fields are separated by spaces or tabs. The format is as follows: +Enter the commands to be executed and their scheduled time in **crontab** files. Each line in the files contains six fields. The first five fields are the time when the specified command is executed, and the last field is the command to be executed. Fields are separated by spaces or tabs. The format is as follows: ``` minute hour day-of-month month-of-year day-of-week commands ``` -Each field is described as follows: +The following table describes the fields in each line. **Table 2** Parameter description @@ -262,59 +262,59 @@ Each field is described as follows:

hour

-

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

+

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

day-of-month

-

The day of month at which periodic commands will be executed. Value range: 1–31.

+

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

month-of-year

-

The month of year at which periodic commands will be executed. Value range: 1–12.

+

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

day-of-week

-

The day of week at which periodic commands will be executed. Value range: 0–6.

+

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

commands

-

Periodic commands.

+

Scheduled commands.

-The fields cannot be left unspecified. In addition to numerical values, the following special symbols are allowed: Asterisk \(\*\): a wildcard value. Forward slash \(/\): followed by a numeral N to indicate that commands will be executed at a regular interval of N. Hyphen \(-\): used with a range.Comma \(,\): used to separate discrete numbers. A complete path to the commands shall be provided. +The fields cannot be left unspecified. In addition to numerical values, the following special characters are allowed: asterisk \(\*\), indicating a wildcard value; forward slash \(/\), followed by a numeral value _N_ to indicate that commands will be executed at a regular interval of _N_; hyphen \(-\), used with a range; and comma \(,\), used to separate discrete values. A complete path to the commands must be provided. -For example, to allow the operating system to add sleepy to the /tmp/test.txt file every two hours from 18 pm to 22 pm, add the following line in a crontab file: +For example, to allow the OS to add **sleepy** to the **/tmp/test.txt** file every two hours from 18 pm to 22 pm, add the following line to a **crontab** file: ``` * 18-22/2 * * * echo "sleepy" >> /tmp/test.txt ``` -Each time the cron service settings of a user are edited, the cron service generates in the /var/spool/cron directory a crontab file named after the user. The crontab file can be edited only using the crontab -e command. Alternatively, the user can create a file and run the crontab _filename_ command to import its cron settings into the new file. +Each time the **cron** service settings of a user are edited, the **cron** service generates a **crontab** file with the same name as the user in the **/var/spool/cron directory**. The **crontab** file can be edited only using the `crontab -e` command. Alternatively, the user can create a file and run the `crontab _filename_` command to import its **cron** settings to the new file. -For example, to create a crontab file for the userexample user, perform the following steps: The procedure is as follows: +For example, to create a **crontab** file for the **userexample** user, perform the following steps: -1. Create a file using any text editor. Add the commands that need to be executed periodically and the command execution interval to the new file. In this example, the new file is **\~/userexample.cron**. -2. Run the following command as the **root** user to install the new file as the crontab file of the userexample user: +1. Create a file using any text editor. Add the commands that need to be executed periodically and the command execution interval to the new file. In this example, the new file is **\~/userexample.cron**. +2. Run the following command as the **root** user to install the new file as the **crontab** file of the **userexample** user: ``` # crontab -u userexample ~/userexample.cron ``` -After the new file is installed, you will find a file named userexample in the **/var/spool/cron** directory. This file is the required crontab file. +After the new file is installed, you will find a file named **userexample** in the **/var/spool/cron** directory. This file is the required **crontab** file. ->![](public_sys-resources/icon-note.gif) **NOTE:** ->Do not restart the cron service after a crontab file is modified, because the cron service, once started, reads the crontab file every minute to check whether there are commands that need to be executed periodically. You do not need to restart the **cron** service after modifying the **crontab** file. +>![](./public_sys-resources/icon-note.gif) **NOTE:** +>Do not restart the **cron** service after a **crontab** file is modified, because the **cron** service, once started, reads the **crontab** file every minute to check whether there are commands that need to be executed periodically. #### /etc/crontab File -The **cron** service reads all files in the **/var/spool/cron** directory and the **crontab** file in the **/etc/crontab** directory every minute. Therefore, you can use the **cron** service by configuring the **crontab** file. A crontab file contains user-specific commands, whereas the **/etc/crontab** file contains system-wide commands. Example /etc/crontab file +The **cron** service reads all files in the **/var/spool/cron** directory and the **/etc/crontab** file every minute. Therefore, you can use the **cron** service by configuring the **/etc/crontab** file. A **crontab** file contains user-specific commands, whereas the **/etc/crontab** file contains system-wide commands. The following is an example of the **/etc/crontab** file. ``` SHELL=/bin/sh @@ -328,11 +328,11 @@ HOME=/ 42 4 1 * * root run-parts /etc/cron.monthly //Run scripts in the /etc/cron.monthly directory once a month. ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** ->If the **run-parts** parameter is deleted, a script name instead of a directory name is executed. +>![](./public_sys-resources/icon-note.gif) **NOTE:** +>If the **run-parts** parameter is deleted, a script name instead of a directory name is used. ## Suspending/Resuming a Process -A process can be suspended or resumed by job control, and the process will continue to work from the suspended point after being resumed. To suspend a foreground process, press Ctrl+Z. After you press Ctrl+Z, the cat command is suspended together with the foreground process you wish to suspend. You can use the jobs command instead to display a list of shell jobs, including their job names, IDs, and status. +A process can be suspended or resumed by job control, and the process will continue to work from the suspended point after being resumed. To suspend a foreground process, press **Ctrl+Z**. After you press **Ctrl+Z**, the `cat` command is suspended together with the foreground process you want to suspend. You can use the `jobs` command instead to display a list of shell jobs, including their names, IDs, and status. -To resume a process in foreground or background, run the fg or bg command, respectively. The process then starts from where it paused previously. +To resume a process in foreground or background, run the `fg` or `bg` command, respectively. The process then starts from where it was suspended previously. diff --git a/content/en/docs/Administration/public_sys-resources/icon-caution.gif b/docs/en/docs/Administration/public_sys-resources/icon-caution.gif similarity index 100% rename from content/en/docs/Administration/public_sys-resources/icon-caution.gif rename to docs/en/docs/Administration/public_sys-resources/icon-caution.gif diff --git a/content/en/docs/Administration/public_sys-resources/icon-danger.gif b/docs/en/docs/Administration/public_sys-resources/icon-danger.gif similarity index 100% rename from content/en/docs/Administration/public_sys-resources/icon-danger.gif rename to docs/en/docs/Administration/public_sys-resources/icon-danger.gif diff --git a/content/en/docs/Administration/public_sys-resources/icon-note.gif b/docs/en/docs/Administration/public_sys-resources/icon-note.gif similarity index 100% rename from content/en/docs/Administration/public_sys-resources/icon-note.gif rename to docs/en/docs/Administration/public_sys-resources/icon-note.gif diff --git a/content/en/docs/Administration/public_sys-resources/icon-notice.gif b/docs/en/docs/Administration/public_sys-resources/icon-notice.gif similarity index 100% rename from content/en/docs/Administration/public_sys-resources/icon-notice.gif rename to docs/en/docs/Administration/public_sys-resources/icon-notice.gif diff --git a/content/en/docs/Administration/public_sys-resources/icon-tip.gif b/docs/en/docs/Administration/public_sys-resources/icon-tip.gif similarity index 100% rename from content/en/docs/Administration/public_sys-resources/icon-tip.gif rename to docs/en/docs/Administration/public_sys-resources/icon-tip.gif diff --git a/content/en/docs/Administration/public_sys-resources/icon-warning.gif b/docs/en/docs/Administration/public_sys-resources/icon-warning.gif similarity index 100% rename from content/en/docs/Administration/public_sys-resources/icon-warning.gif rename to docs/en/docs/Administration/public_sys-resources/icon-warning.gif diff --git a/content/en/docs/Administration/service-management.md b/docs/en/docs/Administration/service-management.md similarity index 94% rename from content/en/docs/Administration/service-management.md rename to docs/en/docs/Administration/service-management.md index 58457238c65e283618308bc13ea644c034a77fd8..9e643801ebad044dcaa530c77235404e0e68c7de 100644 --- a/content/en/docs/Administration/service-management.md +++ b/docs/en/docs/Administration/service-management.md @@ -115,13 +115,6 @@ In systemd, the targets of most actions are units, which are resources systemd k

A group of hierarchically organized units that manage system processes.

-

Snapshot unit

- -

.snapshot

- -

A saved state of the systemd manager.

- -

Socket unit

.socket

@@ -407,35 +400,10 @@ The output of the **is-active** command is as follows: **Table 5** Output of the is-active command - - - - - - - - - - - - - - - - - - -

Status

-

Description

-

active(running)

-

One or more services are running in the system.

-

active(exited)

-

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

-

active(waiting)

-

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

-

inactive

-

The service is not running.

-
+| Status | Description | +|:---|:---| +| active | The service is running. | +| inactive | The service is not running. | Similarly, to determine whether a particular service is enabled, run the following command: @@ -702,15 +670,7 @@ To change the operating system to rescue mode, run the following command as the systemctl rescue ``` -This command is similar to the **systemctl isolate rescue.target** command. After the command is executed, the following information is displayed on the serial port: - -``` -You are in rescue mode. After logging in, type "journalctl -xb" to viewsystem logs, "systemctl reboot" to reboot, "systemctl default" or "exit"to boot into default mode. -Give root password for maintenance -(or press Control-D to continue): -``` - ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >You need to restart the system to enter the normal working mode from the rescue mode. ### Changing to Emergency Mode @@ -728,7 +688,7 @@ Give root password for maintenance (or press Control-D to continue): ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >You need to restart the system to enter the normal working mode from the emergency mode. ## Shutting Down, Suspending, and Hibernating the Operating System diff --git a/content/en/docs/Administration/setting-up-the-database-server.md b/docs/en/docs/Administration/setting-up-the-database-server.md similarity index 94% rename from content/en/docs/Administration/setting-up-the-database-server.md rename to docs/en/docs/Administration/setting-up-the-database-server.md index c88049f01333ce83b94cb8d52d8979a4eeca1df7..1f9b6d96fb50b7e66b65a24ab135c8fa97d1aaa9 100644 --- a/content/en/docs/Administration/setting-up-the-database-server.md +++ b/docs/en/docs/Administration/setting-up-the-database-server.md @@ -32,7 +32,7 @@ [Figure 1](#fig26022387391) shows the PostgreSQL architecture and [Table 1](#table62020913417) describes the main processes. **Figure 1** PostgreSQL architecture -![](figures/postgresql-architecture.png "postgresql-architecture") +![](./figures/postgresql-architecture.png "postgresql-architecture") **Table 1** Main processes in PostgreSQL @@ -109,14 +109,14 @@ ### Configuring the Environment ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The following environment configuration is for reference only. Configure the environment based on the site requirements. #### Disabling the Firewall and Automatic Startup ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >It is recommended that firewall be disabled in the test environment to prevent network impact. Configure the firewall based on actual requirements. 1. Stop the firewall service as the **root** user. @@ -131,7 +131,7 @@ # systemctl disable firewalld ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >The automatic startup is automatically disabled as the firewall is disabled. @@ -146,7 +146,7 @@ #### Creating a User Group and a User ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >In the server environment, independent users are assigned to each process to implement permission isolation for security purposes. The user group and user are created for the OS, not for the database. 1. Create a PostgreSQL user or user group as the **root** user. @@ -168,7 +168,7 @@ #### Creating Data Drives ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- When testing the ultimate performance, you are advised to attach NVMe SSDs with better I/O performance to create PostgreSQL test instances to avoid the impact of disk I/O on the performance test result. This section uses NVMe SSDs as an example. For details, see Step 1 to Step 4. >- In a non-performance test, run the following command as the **root** user to create a data directory. Then skip this section. > \# mkdir /data @@ -206,7 +206,7 @@ #### Installing PostgreSQL -1. Configure the local yum source. For details, see [Configuring the Repo Server](configuring-the-repo-server.html). +1. Configure the local yum source. For details, see [Configuring the Repo Server](./configuring-the-repo-server.html). 2. Clear the cache. ``` @@ -238,7 +238,7 @@ ##### Initializing the Database ->![](public_sys-resources/icon-notice.gif) **NOTICE:** +>![](./public_sys-resources/icon-notice.gif) **NOTICE:** >Perform this step as the postgres user. 1. Switch to the created PostgreSQL user. @@ -270,7 +270,7 @@ If the following information is displayed, the PostgreSQL processes have been started. - ![](figures/postgres.png) + ![](./figures/postgres.png) ##### Logging In to the Database @@ -281,9 +281,9 @@ $ /usr/bin/psql -U postgres ``` - ![](figures/登录.png) + ![](./figures/login.png) - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >You do not need to enter a password when logging in to the database for the first time. @@ -295,7 +295,7 @@ postgres=#alter user postgres with password '123456'; ``` - ![](figures/en-us_image_0230050789.png) + ![](./figures/en-us_image_0230050789.png) ##### Exiting the Database @@ -708,7 +708,7 @@ postgres=# \l; You can run the **DROP DATABASE** statement or **dropdb** command to delete a database. The **dropdb** command encapsulates the **DROP DATABASE** statement and needs to be executed on the shell GUI instead of the database GUI. ->![](public_sys-resources/icon-caution.gif) **CAUTION:** +>![](./public_sys-resources/icon-caution.gif) **CAUTION:** >Exercise caution when deleting a database. Once a database is deleted, all tables and data in the database will be deleted. ``` @@ -802,7 +802,7 @@ The MariaDB database management system is a branch of MySQL and is maintained by [Figure 2](#fig13492418164520) shows the MariaDB architecture. **Figure 2** MariaDB logical architecture -![](figures/mariadb-logical-architecture.png "mariadb-logical-architecture") +![](./figures/mariadb-logical-architecture.png "mariadb-logical-architecture") When MariaDB receives a SQL statement, the execution process is as follows: @@ -824,14 +824,14 @@ Each storage engine manages and stores data in different ways, and supports diff ### Configuring the Environment ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The following environment configuration is for reference only. Configure the environment based on the site requirements. #### Disabling the Firewall and Automatic Startup ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >It is recommended that firewall be disabled in the test environment to prevent network impact. Configure the firewall based on actual requirements. 1. Stop the firewall service as the **root** user. @@ -846,7 +846,7 @@ Each storage engine manages and stores data in different ways, and supports diff # systemctl disable firewalld ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >The automatic startup is automatically disabled as the firewall is disabled. @@ -861,7 +861,7 @@ Each storage engine manages and stores data in different ways, and supports diff #### Creating a User Group and a User ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >In the server environment, independent users are assigned to each process to implement permission isolation for security purposes. The user group and user are created for the OS, not for the database. 1. Create a MySQL user or user group as the **root** user. @@ -885,7 +885,7 @@ Each storage engine manages and stores data in different ways, and supports diff #### Creating Data Drives ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- If a performance test needs to be performed, an independent drive is required for the data directory. You need to format and mount the drive. For details, see Method 1 or Method 2. >- In a non-performance test, run the following command as the **root** user to create a data directory. Then skip this section. > \# mkdir /data @@ -923,13 +923,13 @@ Each storage engine manages and stores data in different ways, and supports diff In the last line, **/dev/nvme0n1p1** is only an example. - ![](figures/搭建数据盘.png) + ![](./figures/Creating_DataDisk.png) ##### Method 2: Using LVM for Drive Management as the **root** user ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >Install the LVM2 package in the image as follows: ->1. Configure the local yum source. For details, see [Configuring the Repo Server](configuring-the-repo-server.html). If the repository has been configured, skip this step. +>1. Configure the local yum source. For details, see [Configuring the Repo Server](./configuring-the-repo-server.html). If the repository has been configured, skip this step. >2. Install LVM2. > **\# yum install lvm2** @@ -971,7 +971,7 @@ Each storage engine manages and stores data in different ways, and supports diff In the last line, **/dev/datavg/datalv** is only an example. - ![](figures/d1376b2a-d036-41c4-b852-e8368f363b5e.png) + ![](./figures/d1376b2a-d036-41c4-b852-e8368f363b5e.png) #### Creating a Database Directory and Granting Permissions @@ -991,7 +991,7 @@ Each storage engine manages and stores data in different ways, and supports diff #### Installing MariaDB -1. Configure the local yum source. For details, see [Configuring the Repo Server](configuring-the-repo-server.html). +1. Configure the local yum source. For details, see [Configuring the Repo Server](./configuring-the-repo-server.html). 2. Clear the cache. ``` @@ -1041,7 +1041,7 @@ Each storage engine manages and stores data in different ways, and supports diff After the command is executed, the system prompts you to enter the password. The password is the one set in [2](#li197143190587). - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >Run the **\\q** or **exit** command to exit the database. @@ -1050,10 +1050,9 @@ Each storage engine manages and stores data in different ways, and supports diff 1. Stop the database process as the **root** user. ``` - $ ps -ef | grep mysql - # kill -9 PID + # systemctl stop mariadb ``` - + 2. Run the **dnf remove mariadb-server** command as the **root** user to uninstall MariaDB. ``` @@ -1174,7 +1173,7 @@ In the preceding information: - **FOR 'username'@'hostname'**: specifies the username and hostname whose password is to be changed. This parameter is optional. - **PASSWORD\('newpassword'\)**: indicates that the **PASSWORD\(\)** function is used to set a new password. That is, the new password must be transferred to the **PASSWORD\(\)** function for encryption. ->![](public_sys-resources/icon-caution.gif) **CAUTION:** +>![](./public_sys-resources/icon-caution.gif) **CAUTION:** >The **PASSWORD\(\)** function is a unidirectional encryption function. Once encrypted, the original plaintext cannot be decrypted. If the **FOR** clause is not added to the **SET PASSWORD** statement, the password of the current user is changed. @@ -1198,7 +1197,7 @@ Use the **DROP USER** statement to delete one or more user accounts and relate DROP USER 'username1'@'hostname1' [,'username2'@'hostname2']...; ``` ->![](public_sys-resources/icon-caution.gif) **CAUTION:** +>![](./public_sys-resources/icon-caution.gif) **CAUTION:** >The deletion of users does not affect the tables, indexes, or other database objects that they have created, because the database does not record the accounts that have created these objects. The **DROP USER** statement can be used to delete one or more database accounts and their original permissions. @@ -1321,7 +1320,7 @@ In the preceding command, **databasename** indicates the database name. You can run the **DROP DATABASE** statement to delete a database. ->![](public_sys-resources/icon-caution.gif) **CAUTION:** +>![](./public_sys-resources/icon-caution.gif) **CAUTION:** >Exercise caution when deleting a database. Once a database is deleted, all tables and data in the database will be deleted. ``` @@ -1415,7 +1414,7 @@ In the preceding information: Run the **mysql** command as the **root** user to restore the database. -Back up one or more tables: +Restore one or more tables: ``` mysql -h hostname -P portnumber -u username -ppassword databasename < infile @@ -1451,14 +1450,14 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard ### Configuring the Environment ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The following environment configuration is for reference only. Configure the environment based on the site requirements. #### Disabling the Firewall and Automatic Startup ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >It is recommended that firewall be disabled in the test environment to prevent network impact. Configure the firewall based on actual requirements. 1. Stop the firewall service as the **root** user. @@ -1473,7 +1472,7 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard # systemctl disable firewalld ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >The automatic startup is automatically disabled as the firewall is disabled. @@ -1488,7 +1487,7 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard #### Creating a User Group and a User ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >In the server environment, independent users are assigned to each process to implement permission isolation for security purposes. The user group and user are created for the OS, not for the database. 1. Create a MySQL user or user group as the **root** user. @@ -1512,7 +1511,7 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard #### Creating Data Drives ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- If a performance test needs to be performed, an independent drive is required for the data directory. You need to format and mount the drive. For details, see Method 1 or Method 2. >- In a non-performance test, run the following command as the **root** user to create a data directory. Then skip this section. > \# mkdir /data @@ -1550,13 +1549,13 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard In the last line, **/dev/nvme0n1p1** is only an example. - ![](figures/搭建数据盘-0.png) + ![](./figures/Creating_DataDisk-0.png) ##### Method 2: Using LVM for Drive Management as the **root** user ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >Install the LVM2 package in the image as follows: ->1. Configure the local yum source. For details, see [Configuring the Repo Server](configuring-the-repo-server.html). If the repository has been configured, skip this step. +>1. Configure the local yum source. For details, see [Configuring the Repo Server](./configuring-the-repo-server.html). If the repository has been configured, skip this step. >2. Install LVM2. > **\# yum install lvm2** @@ -1598,7 +1597,7 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard In the last line, **/dev/datavg/datalv** is only an example. - ![](figures/d1376b2a-d036-41c4-b852-e8368f363b5e-1.png) + ![](./figures/d1376b2a-d036-41c4-b852-e8368f363b5e-1.png) #### Creating a Database Directory and Granting Permissions @@ -1618,8 +1617,21 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard #### Installing MySQL - -1. Configure the local yum source. For details, see [Configuring the Repo Server](configuring-the-repo-server.html). +>![](./public_sys-resources/icon-note.gif) **NOTE:** +> For 20.03 LTS SP2, if you run the **rpm -Uvh XXX** command (XXX indicates the version, for example, mysql-8.0.21-1.oe1.aarch64.rpm) to upgrade mysql-8.0.17-3.oe1 to the latest version, the functions are unavailable after the upgrade. You can use either of the following methods to upgrade the version. The following uses the upgrade from mysql-8.0.17-3.oe1 to mysql-8.0.21-1.oe1 as an example: +> +>Method 1: Run the following upgrade command: + ``` + # rpm -Uvh mysql-8.0.21-1.oe1.aarch64.rpm --noscripts + ``` +> +>Method 2: Run the following commands to uninstall the MySQL of the earlier version and then install the MySQL of the new version: + ``` + # rpm -e mysql-8.0.17-3.oe1 + # rpm -ivh mysql-8.0.21-1.oe1.aarch64.rpm + ``` + +1. Configure the local yum source. For details, see [Configuring the Repo Server](./configuring-the-repo-server.html). 2. Clear the cache. ``` @@ -1635,13 +1647,13 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard 4. Install the MySQL server as the **root** user. ``` - # dnf install mysql + # dnf install mysql-server ``` 5. Check the installed RPM package. ``` - $ rpm -qa | grep mysql + $ rpm -qa | grep mysql-server ``` @@ -1682,9 +1694,9 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard $ cat /etc/my.cnf ``` - ![](figures/en-us_image_0231563132.png) + ![](./figures/en-us_image_0231563132.png) - >![](public_sys-resources/icon-caution.gif) **CAUTION:** + >![](./public_sys-resources/icon-caution.gif) **CAUTION:** >In the configuration file, **basedir** specifies the software installation path. Change it based on actual situation. 3. Change the group and user of the **/etc/my.cnf** file to **mysql:mysql** as the **root** user. @@ -1700,7 +1712,7 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard # echo export PATH=$PATH:/usr/local/mysql/bin >> /etc/profile ``` - >![](public_sys-resources/icon-caution.gif) **CAUTION:** + >![](./public_sys-resources/icon-caution.gif) **CAUTION:** >In the command, **/usr/local/mysql/bin** is the absolute path of the **bin** files in the MySQL software installation directory. Change it based on actual situation. 2. Run the following command as the **root** user to make the environment variables take effect: @@ -1711,7 +1723,7 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard 3. Initialize the database as the **root** user. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >The second line from the bottom contains the initial password, which will be used when you log in to the database. ``` @@ -1725,7 +1737,7 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard 4. Start the database. - >![](public_sys-resources/icon-caution.gif) **CAUTION:** + >![](./public_sys-resources/icon-caution.gif) **CAUTION:** >Start MySQL as user **mysql** if it is the first time to start the database service. If you start MySQL as user **root**, a message will be displayed indicating that the **mysql.log** file is missing. If you start MySQL as user **mysql**, the **mysql.log** file will be generated in the **/data/mysql/log** directory. No error will be displayed if you start the database as user **root** again. 1. Modify the file permission as the **root** user. @@ -1750,7 +1762,7 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard 5. Log in to the database. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >- Enter the initial password generated during database initialization \([3](#li15634560582)\). >- If MySQL is installed by using an RPM package obtained from the official website, the **mysqld** file is located in the **/usr/sbin** directory. Ensure that the directory specified in the command is correct. @@ -1758,7 +1770,7 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard $ /usr/local/mysql/bin/mysql -uroot -p -S /data/mysql/run/mysql.sock ``` - ![](figures/en-us_image_0231563134.png) + ![](./figures/en-us_image_0231563134.png) 6. Configure the database accounts and passwords. 1. After logging in to the database, change the password of user **root** for logging in to the database. @@ -1780,7 +1792,7 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard mysql>flush privileges; ``` - ![](figures/en-us_image_0231563135.png) + ![](./figures/en-us_image_0231563135.png) 7. Exit the database. @@ -1790,7 +1802,7 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard mysql>exit ``` - ![](figures/en-us_image_0231563136.png) + ![](./figures/en-us_image_0231563136.png) #### Uninstalling MySQL @@ -1798,10 +1810,9 @@ The Structured Query Language \(SQL\) used by MySQL is the most common standard 1. Stop the database process as the **root** user. ``` - $ ps -ef | grep mysql - # kill -9 PID + # systemctl stop mysql ``` - + 2. Run the **dnf remove mysql** command as the **root** user to uninstall MySQL. ``` @@ -1943,7 +1954,7 @@ Use the **DROP USER** statement to delete one or more user accounts and relate DROP USER 'username1'@'hostname1' [,'username2'@'hostname2']...; ``` ->![](public_sys-resources/icon-caution.gif) **CAUTION:** +>![](./public_sys-resources/icon-caution.gif) **CAUTION:** >The deletion of users does not affect the tables, indexes, or other database objects that they have created, because the database does not record the accounts that have created these objects. The **DROP USER** statement can be used to delete one or more database accounts and their original permissions. @@ -2065,7 +2076,7 @@ In the preceding command, _databasename_ indicates the database name. Run the **DROP DATABASE** statement to delete a database. ->![](public_sys-resources/icon-caution.gif) **CAUTION:** +>![](./public_sys-resources/icon-caution.gif) **CAUTION:** >Exercise caution when deleting a database. Once a database is deleted, all tables and data in the database will be deleted. ``` @@ -2159,7 +2170,7 @@ In the preceding information: Run the **mysql** command as the **root** user to restore the database. -Back up one or more tables: +Restore one or more tables: ``` mysql -h hostname -P portnumber -u username -ppassword databasename < infile diff --git a/content/en/docs/Administration/user-and-user-group-management.md b/docs/en/docs/Administration/user-and-user-group-management.md similarity index 97% rename from content/en/docs/Administration/user-and-user-group-management.md rename to docs/en/docs/Administration/user-and-user-group-management.md index a63178022f5bebfc4764bc4302eadf80708b2003..34306a56e606bf88006cfc3bb3340a854306ab44 100644 --- a/content/en/docs/Administration/user-and-user-group-management.md +++ b/docs/en/docs/Administration/user-and-user-group-management.md @@ -48,7 +48,7 @@ For example, to create a user named userexample, run the following command as th # useradd userexample ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >If no prompt is displayed, the user is successfully created. After the user is created, run the **passwd** command to assign a password to the user. A new account without a password will be banned. To view information about the new user, run the **id** command: @@ -96,7 +96,7 @@ Retype new password: passwd: all authentication tokens updated successfully. ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >If the command output contains **BAD PASSWORD: The password fails the dictionary check - it is too simplistic/sytematic**, the password is too simple and needs to be reset. ### Modifying a User Account @@ -161,7 +161,7 @@ For example, run the following command to delete user Test: If you also need to delete the user's home directory and all contents in the directory, run the **userdel** command with the -r option to delete them recursively. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >You are not advised to directly delete a user who has logged in to the system. To forcibly delete a user, run the **userdel -f** _Test_ command. ### Granting Rights to a Common User @@ -213,7 +213,7 @@ The information configured in the **/etc/sudoers** file is as follows: This indicates that newuser1 on the ted1 host can run the **useradd** and **userdel** commands as the user **root**. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >- You can define multiple aliases in a line and separate them with colons \(:\). >- You can add an exclamation mark \(!\) before a command or a command alias to make the command or the command alias invalid. >- There are two keywords: ALL and NOPASSWD. ALL indicates all files, hosts, or commands, and NOPASSWD indicates that no password is required. @@ -297,7 +297,7 @@ For example, run the following command to delete user group Test: # groupdel Test ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The user's primary group cannot be directly deleted. To forcibly delete a user's primary group, run the **groupdel -f** _Test_ command. ### Adding a User to a Group or Removing a User from a Group diff --git a/content/en/docs/Administration/using-the-dnf-to-manage-software-packages.md b/docs/en/docs/Administration/using-the-dnf-to-manage-software-packages.md similarity index 93% rename from content/en/docs/Administration/using-the-dnf-to-manage-software-packages.md rename to docs/en/docs/Administration/using-the-dnf-to-manage-software-packages.md index 4f2074cc13cc035f17b1184fd1d6cb83eab94c61..d81a8f8609667e3b17020689b8354f2e6fc83a65 100644 --- a/content/en/docs/Administration/using-the-dnf-to-manage-software-packages.md +++ b/docs/en/docs/Administration/using-the-dnf-to-manage-software-packages.md @@ -2,7 +2,7 @@ DNF is a Linux software package management tool used to manage RPM software packages. The DNF can query software package information, obtain software packages from a specified software library, automatically process dependencies to install or uninstall software packages, and update the system to the latest available version. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- DNF is fully compatible with YUM and provides YUM-compatible command lines and APIs for extensions and plug-ins. >- You must have the administrator rights to use the DNF. All commands in this chapter must be executed by the administrator. @@ -56,6 +56,7 @@ gpgcheck=1 installonly_limit=3 clean_requirements_on_remove=True best=True +skip_if_unavailable=False ``` Common options are as follows: @@ -113,6 +114,11 @@ Common options are as follows:

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

+

skip_if_unavailable

+ +

The default value is False.

+ + @@ -130,8 +136,8 @@ The repository part allows you to customize openEuler software source repositori baseurl=repository_url ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** - >openEuler provides an online image source at [https://repo.openeuler.org/](https://repo.openeuler.org/). For example, if the openEuler 20.03 version is aarch64, the **baseurl** can be set to [https://repo.openeuler.org/openEuler-20.03-LTS/OS/aarch64/](https://repo.openeuler.org/openEuler-20.03-LTS/OS/aarch64/). + >![](./public_sys-resources/icon-note.gif) **NOTE:** + >openEuler provides an online image source at [https://repo.openeuler.org/](https://repo.openeuler.org/). For example, if the openEuler 20.03 SP2 version is aarch64, the **baseurl** can be set to [https://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/aarch64/](https://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/aarch64/). Common options are as follows: @@ -158,28 +164,25 @@ The repository part allows you to customize openEuler software source repositori - Configuring the .repo file in the /etc/yum.repos.d directory - - - openEuler provides multiple repo sources for users online. For details about the repo sources, see [System Installation](../Releasenotes/installing-the-os.md.html). This section uses the OS repo source of the AArch64 architecture as an example. - - For example, run the following command as the **root** user to add the openeuler repo source to the openEuler_aarch64.repo file. - + openEuler provides multiple repo sources for users online. For details about the repo sources, see [System Installation](./../Releasenotes/installing-the-os.md.html). + + For example, run the following command as the administrator authority to add the openeuler repo source to the openEuler.repo file. + ``` - # vi /etc/yum.repos.d/openEuler_aarch64.repo + # vi /etc/yum.repos.d/openEuler.repo ``` - + ``` - [osrepo] - name=osrepo - baseurl=https://repo.openeuler.org/openEuler-20.03-LTS/OS/aarch64/ + [OS] + name=openEuler-$releasever - OS + baseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/$basearch/ enabled=1 gpgcheck=1 - gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS/OS/aarch64/RPM-GPG-KEY-openEuler - + gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/$basearch/RPM-GPG-KEY-openEuler ``` - - >![](public_sys-resources/icon-note.gif) **NOTE:** - > - **enabled** indicates whether to enable the software source repository. The value can be **1** or **0**. The default value is **1**, indicating that the software source repository is enabled. + + >![](./public_sys-resources/icon-note.gif) **NOTE:** + > - **enabled** indicates whether to enable the software source repository. The value can be **1** or **0**. The default value is **1**, indicating that the software source repository is enabled. > - **gpgkey** is the public key used to verify the signature. @@ -356,8 +359,8 @@ The following is an example: # dnf install httpd ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** ->If the RPM package fails to be installed, see [Installation Failure Caused by Software Package Conflict, File Conflict, or Missing Software Package](faqs.html#installation-failure-caused-by-software-package-conflict-file-conflict-or-missing-software-package). +>![](./public_sys-resources/icon-note.gif) **NOTE:** +>If the RPM package fails to be installed, see [Installation Failure Caused by Software Package Conflict, File Conflict, or Missing Software Package](./faqs.html#installation-failure-caused-by-software-package-conflict-file-conflict-or-missing-software-package). ### Downloading Software Packages To download the software package using the DNF, run the following command as the user **root**: diff --git a/content/en/docs/Administration/using-the-kae.md b/docs/en/docs/Administration/using-the-kae.md similarity index 97% rename from content/en/docs/Administration/using-the-kae.md rename to docs/en/docs/Administration/using-the-kae.md index 66b0fd514d36a969872499fac630e00f9c55c890..e7766c2492272c16b93cba30bd79de3f7d4ac9e9 100644 --- a/content/en/docs/Administration/using-the-kae.md +++ b/docs/en/docs/Administration/using-the-kae.md @@ -80,12 +80,12 @@ The KAE applies to the following scenarios, as shown in [Table 1](#table1191582 ##### Environment Requirements - The accelerator engine is enabled on TaiShan 200 servers. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- You need to import the accelerator license. For details, see section "License Management" in the [TaiShan Rack Server iBMC \(V500 or Later\) User Guide](https://support.huawei.com/enterprise/en/doc/EDOC1100121685/426cffd9?idPath=7919749|9856522|21782478|8060757). >- If the accelerator is used in the physical machine scenario, the SMMU must be disabled. For details, see the [TaiShan 200 Server BIOS Parameter Reference](https://support.huawei.com/enterprise/en/doc/EDOC1100088647). - CPU: Kunpeng 920 -- OS: openEuler-20.03-LTS-aarch64-dvd.iso +- OS: openEuler-20.03-LTS-SP2-aarch64-dvd.iso ##### KAE Software Description **Table 2** RPM software packages of the KAE @@ -138,7 +138,7 @@ The KAE applies to the following scenarios, as shown in [Table 1](#table1191582 3. Use SSH to copy all accelerator engine software package to the created directory. 4. In the directory, run the **rpm -ivh** command to install the accelerator engine software packages. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >Install the **libwd** package first because the **libkae** package installation depends on the **libwd** package. ``` @@ -282,7 +282,7 @@ You can run the following commands to test some accelerator functions. ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >\#After KAE acceleration, the signature performance is improved from 724.1 sign/s to 2819 sign/s. - Use the OpenSSL software algorithm to test the asynchronous RSA performance. @@ -304,7 +304,7 @@ You can run the following commands to test some accelerator functions. ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >\#After KAE acceleration, the asynchronous RSA signature performance is improved from 735.7 sign/s to 54384.1 sign/s. - Use the OpenSSL software algorithm to test the performance of the SM4 CBC mode. @@ -332,7 +332,7 @@ You can run the following commands to test some accelerator functions. ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >After KAE acceleration, the SM4 CBC mode performance is improved from 82312.53 kbit/s to 383317.33 kbit/s when the input data block size is 8 MB. - Use the OpenSSL software algorithm to test the SM3 mode performance. @@ -359,7 +359,7 @@ You can run the following commands to test some accelerator functions. ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >After KAE acceleration, the SM3 algorithm performance is improved from 52428.80 kbit/s to 668292.44 kbit/s when the input data block size is 8 MB. - Use the OpenSSL software algorithm to test the asynchronous performance of the AES algorithm in CBC mode. @@ -388,7 +388,7 @@ You can run the following commands to test some accelerator functions. ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- The AES algorithm supports only asynchronous usage when the data length is 256 KB or less. >- After KAE acceleration, the AES algorithm performance is improved from 1123328.00 kbit/s to 3996774.40 kbit/s when the input data block size is 100 KB. @@ -405,15 +405,15 @@ You can run the **rpm -Uvh** command to upgrade the accelerator software. The command and output are as follows: - ![](figures/en-us_image_0231143189.png) + ![](./figures/en-us_image_0231143189.png) - ![](figures/en-us_image_0231143191.png) + ![](./figures/en-us_image_0231143191.png) 5. Run the **rpm -qa** command to check whether the upgrade is successful. Ensure that the queried version is the latest version. - ![](figures/en-us_image_0231143193.png) + ![](./figures/en-us_image_0231143193.png) - ![](figures/en-us_image_0231143195.png) + ![](./figures/en-us_image_0231143195.png) 6. Restart the system or run the following commands to manually uninstall the drivers of the earlier version, load the drivers of the latest version, and check whether the new drivers are successfully loaded. @@ -458,16 +458,16 @@ You do not need the accelerator engine software or you want to install new accel 3. Run the **rpm -e** command to uninstall the accelerator engine software packages. The following is an example: - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >Due to the dependency relationships, the **libkae** package must be uninstalled before the **libwd** package. - ![](figures/en-us_image_0231143196.png) + ![](./figures/en-us_image_0231143196.png) - ![](figures/en-us_image_0231143197.png) + ![](./figures/en-us_image_0231143197.png) 4. Run the **rpm -qa |grep** command to check whether the uninstallation is successful. - ![](figures/en-us_image_0231143198.png) + ![](./figures/en-us_image_0231143198.png) ## Querying Logs @@ -511,7 +511,7 @@ You do not need the accelerator engine software or you want to install new accel ## Acceleration Engine Application ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >If you have not purchased the engine license, you are advised not to use the KAE engine to invoke the corresponding algorithms. Otherwise, the performance of the OpenSSL encryption algorithm may be affected. diff --git a/content/en/docs/Administration/viewing-system-information.md b/docs/en/docs/Administration/viewing-system-information.md similarity index 86% rename from content/en/docs/Administration/viewing-system-information.md rename to docs/en/docs/Administration/viewing-system-information.md index 460bfa3bfff0bf5e5a08802b9e44037442e36086..1c15ca896789432b6066abd04217860a738b294e 100644 --- a/content/en/docs/Administration/viewing-system-information.md +++ b/docs/en/docs/Administration/viewing-system-information.md @@ -11,10 +11,10 @@ ``` $ cat /etc/os-release NAME="openEuler" - VERSION="20.09" + VERSION="20.03 (LTS-SP2)" ID="openEuler" - VERSION_ID="20.09" - PRETTY_NAME="openEuler 20.09" + VERSION_ID="20.03" + PRETTY_NAME="openEuler 20.03 (LTS-SP2)" ANSI_COLOR="0;31" ``` diff --git a/content/en/docs/ApplicationDev/application-development.md b/docs/en/docs/ApplicationDev/application-development.md similarity index 95% rename from content/en/docs/ApplicationDev/application-development.md rename to docs/en/docs/ApplicationDev/application-development.md index d80e8b2f7d0a55040966ae74f04c1a3b2cde40b2..37e6fe6f72174bce3105f26947d0475221719f63 100644 --- a/content/en/docs/ApplicationDev/application-development.md +++ b/docs/en/docs/ApplicationDev/application-development.md @@ -29,13 +29,13 @@ The symbols that may be found in this document are defined as follows. -

+

![](./figures/en-us_image_0229243712.png)

Indicates a potentially hazardous situation which, if not avoided, could result in equipment damage, data loss, performance deterioration, or unanticipated results.

NOTICE is used to address practices not related to personal injury.

-

+

![](./figures/en-us_image_0229243671.png)

Supplements the important information in the main text.

NOTE is used to address information not related to personal injury, equipment damage, and environment deterioration.

@@ -80,7 +80,7 @@ The symbols that may be found in this document are defined as follows.

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

-

{ x | y | ... }*

+

{ x | y | ... }\*

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

diff --git a/content/en/docs/ApplicationDev/building-an-rpm-package.md b/docs/en/docs/ApplicationDev/building-an-rpm-package.md similarity index 97% rename from content/en/docs/ApplicationDev/building-an-rpm-package.md rename to docs/en/docs/ApplicationDev/building-an-rpm-package.md index ff247ecf8f7e7e0ab0d52d6355ab02a75eee4a19..ef2b214a774cde4be7b9c58620f199bebfe3c947 100644 --- a/content/en/docs/ApplicationDev/building-an-rpm-package.md +++ b/docs/en/docs/ApplicationDev/building-an-rpm-package.md @@ -1,6 +1,6 @@ # Building an RPM Package -This section describes how to build an RPM software package on a local PC or using OBS. For details, see [https://gitee.com/openeuler/community/blob/master/zh/contributors/packaging.md](https://gitee.com/openeuler/community/blob/master/zh/contributors/packaging.md). +This section describes how to build an RPM software package on a local PC or using OBS. For details, see [https://gitee.com/openeuler/community/blob/master/zh/contributors/packaging.md](https://gitee.com/openeuler/community/blob/master/zh/contributors/packaging.md\). - [Building an RPM Package](#building-an-rpm-package) @@ -513,7 +513,7 @@ This section describes how to build an RPM software package online on OBS. #### Building an Existing Software Package ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- If you use OBS for the first time, register an individual account on the OBS web page. >- With this method, you must copy the modified code and commit it to the code directory before performing the following operations. The code directory is specified in the **\_service** file. @@ -526,7 +526,7 @@ To modify the source code of the existing software and build the modified source 5. Click **Branch package**. In the displayed dialog box, click **Accept**, as shown in [Figure 1](#fig77646143214). **Figure 1** **Branch Confirmation** page - ![](figures/branch-confirmation-page.png "branch-confirmation-page") + ![](./figures/branch-confirmation-page.png "branch-confirmation-page") 6. Click the **\_service** file to go to the editing page, modify the file content, and click **Save**. An example of the **\_service** file content is as follows. _userCodeURL_ and _userCommitID_ indicate the user code path and commission version number or branch, respectively. @@ -544,14 +544,14 @@ To modify the source code of the existing software and build the modified source ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >Click **Save** to save the **\_service** file. OBS downloads the source code from the specified URL to the software directory of the corresponding OBS project based on the **\_service** file description and replaces the original file. For example, the **kernel** directory of the **openEuler:Mainline** project in the preceding example. 7. After the files are copied and replaced, OBS automatically starts to build the RPM software package. Wait until the build is complete and view the build status in the status bar on the right. - **succeeded**: The build is successful. You can click **succeeded** to view the build logs, as shown in [Figure 2](#fig10319114217337). **Figure 2** **Succeeded** page - ![](figures/succeeded-page.png "succeeded-page") + ![](./figures/succeeded-page.png "succeeded-page") - **failed**: The build failed. Click **failed** to view error logs, locate the fault, and rebuild again. - **unresolvable**: The build is not performed. The possible cause is that the dependency is missing. @@ -570,23 +570,23 @@ To add a new software package on the OBS web page, perform the following steps: 5. Click **Delete package** to delete the software package in the new subproject, as shown in [Figure 3](#fig18306181103615). **Figure 3** Deleting a software package from a subproject - ![](figures/deleting-a-software-package-from-a-subproject.png "deleting-a-software-package-from-a-subproject") + ![](./figures/deleting-a-software-package-from-a-subproject.png "deleting-a-software-package-from-a-subproject") - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >The purpose of creating a project by using existing software is to inherit the dependency such as the environment. Therefore, you need to delete these files. 6. Click **Create Package**. On the page that is displayed, enter the software package name, title, and description, and click **Create** to create a software package, as shown in [Figure 4](#fig6762111693811) and [Figure 5](#fig18351153518389). **Figure 4** **Create Package** page - ![](figures/create-package-page.png "create-package-page") + ![](./figures/create-package-page.png "create-package-page") **Figure 5** Creating a software package - ![](figures/creating-a-software-package.png "creating-a-software-package") + ![](./figures/creating-a-software-package.png "creating-a-software-package") 7. Click **Add file** to upload the .spec file and the file to be compiled \(specified in the .spec file\), as shown in [Figure 6](#fig1475845284011). **Figure 6** **Add file** page - ![](figures/add-file-page.png "add-file-page") + ![](./figures/add-file-page.png "add-file-page") 8. After the file is uploaded, OBS automatically starts to build the RPM software package. Wait until the build is complete and view the build status in the status bar on the right. - **succeeded**: The build is successful. You can click **succeeded** to view the build logs. @@ -604,15 +604,15 @@ After the RPM software package is built, perform the following operations to obt 2. Click **All Projects** and find the project corresponding to the required software package, for example, **openEuler:Mainline**. 3. Click the name of the required software package in the project. The software package details page is displayed, for example, the **kernel** page in the preceding example. -1. Click the **Repositories** tab. On the software repository management page that is displayed, click **Enable** in **Publish Flag** to enable the RPM software package download function \(the status changes from ![](figures/en-us_image_0229243704.png) to ![](figures/en-us_image_0229243702.png)\), as shown in [Figure 7](#fig17480830144217). +1. Click the **Repositories** tab. On the software repository management page that is displayed, click **Enable** in **Publish Flag** to enable the RPM software package download function \(the status changes from ![](./figures/en-us_image_0229243704.png) to ![](./figures/en-us_image_0229243702.png)\), as shown in [Figure 7](#fig17480830144217). **Figure 7** **Repositories** page - ![](figures/repositories-page.png "repositories-page") + ![](./figures/repositories-page.png "repositories-page") 2. Click the project name in the **Repository** column. On the RPM software package download page that is displayed, click **Download** on the right of the RPM software package to download the RPM software package, as shown in [Figure 8](#fig12152145615438). **Figure 8** RPM software package download page - ![](figures/rpm-software-package-download-page.png "rpm-software-package-download-page") + ![](./figures/rpm-software-package-download-page.png "rpm-software-package-download-page") ### Building a Software Package Using OSC @@ -633,7 +633,7 @@ You have obtained the **root** permission, and have configured a repo source f # dnf install osc build ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >The compilation of RPM software packages depends on build. 2. Configure the OSC. @@ -714,25 +714,31 @@ You have obtained the **root** permission, and have configured a repo source f $ osc addremove * ``` -2. Modify the source code and .spec file, and synchronize all modifications of the corresponding software package to the OBS server. The following is a command example. The information after the **-m** parameter is the commission record. +2. Modify the source code and .spec file, and run the following command to update the file. + + ``` + $ osc up + ``` + +3. Synchronize all modifications of the corresponding software package to the OBS server. The following is an example of command. The information after the **-m** parameter indicates the submmission record. ``` $ osc ci -m "commit log" ``` -3. Run the following command to obtain the repository name and architecture of the current project: +4. Run the following command to obtain the repository name and architecture of the current project: ``` $ osc repos home:testUser:branches:openEuler:Mainline ``` -4. After the modification is committed, OBS automatically compiles the software package. You can run the following command to view the compilation logs of the corresponding repository. In the command, *standard\_aarch64* and _aarch64_ indicate the repository name and architecture obtained in the command output. +5. After the modification is committed, OBS automatically compiles the software package. You can run the following command to view the compilation logs of the corresponding repository. In the command, *standard\_aarch64* and _aarch64_ indicate the repository name and architecture obtained in the command output. ``` $ osc buildlog standard_aarch64 aarch64 ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >You can also open the created project on the web client to view the build logs. @@ -788,7 +794,7 @@ To use the OSC tool of OBS to add a new software package, perform the following $ osc buildlog standard_aarch64 aarch64 ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >You can also open the created project on the web client to view the build logs. @@ -807,6 +813,6 @@ The parameters in the command are described as follows. You can modify the param - _standard\_aarch64_: repository name. - _aarch64_: repository architecture name. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >You can also obtain the software package built using OSC from the web page. For details, see [Obtaining the Software Package](#obtaining-the-software-package). diff --git a/content/en/docs/ApplicationDev/figures/add-file-page.png b/docs/en/docs/ApplicationDev/figures/add-file-page.png similarity index 100% rename from content/en/docs/ApplicationDev/figures/add-file-page.png rename to docs/en/docs/ApplicationDev/figures/add-file-page.png diff --git a/content/en/docs/ApplicationDev/figures/branch-confirmation-page.png b/docs/en/docs/ApplicationDev/figures/branch-confirmation-page.png similarity index 100% rename from content/en/docs/ApplicationDev/figures/branch-confirmation-page.png rename to docs/en/docs/ApplicationDev/figures/branch-confirmation-page.png diff --git a/content/en/docs/ApplicationDev/figures/create-package-page.png b/docs/en/docs/ApplicationDev/figures/create-package-page.png similarity index 100% rename from content/en/docs/ApplicationDev/figures/create-package-page.png rename to docs/en/docs/ApplicationDev/figures/create-package-page.png diff --git a/content/en/docs/ApplicationDev/figures/creating-a-software-package.png b/docs/en/docs/ApplicationDev/figures/creating-a-software-package.png similarity index 100% rename from content/en/docs/ApplicationDev/figures/creating-a-software-package.png rename to docs/en/docs/ApplicationDev/figures/creating-a-software-package.png diff --git a/content/en/docs/ApplicationDev/figures/deleting-a-software-package-from-a-subproject.png b/docs/en/docs/ApplicationDev/figures/deleting-a-software-package-from-a-subproject.png similarity index 100% rename from content/en/docs/ApplicationDev/figures/deleting-a-software-package-from-a-subproject.png rename to docs/en/docs/ApplicationDev/figures/deleting-a-software-package-from-a-subproject.png diff --git a/content/en/docs/ApplicationDev/figures/en-us_image_0229243671.png b/docs/en/docs/ApplicationDev/figures/en-us_image_0229243671.png similarity index 100% rename from content/en/docs/ApplicationDev/figures/en-us_image_0229243671.png rename to docs/en/docs/ApplicationDev/figures/en-us_image_0229243671.png diff --git a/content/en/docs/ApplicationDev/figures/en-us_image_0229243702.png b/docs/en/docs/ApplicationDev/figures/en-us_image_0229243702.png similarity index 100% rename from content/en/docs/ApplicationDev/figures/en-us_image_0229243702.png rename to docs/en/docs/ApplicationDev/figures/en-us_image_0229243702.png diff --git a/content/en/docs/ApplicationDev/figures/en-us_image_0229243704.png b/docs/en/docs/ApplicationDev/figures/en-us_image_0229243704.png similarity index 100% rename from content/en/docs/ApplicationDev/figures/en-us_image_0229243704.png rename to docs/en/docs/ApplicationDev/figures/en-us_image_0229243704.png diff --git a/content/en/docs/ApplicationDev/figures/en-us_image_0229243712.png b/docs/en/docs/ApplicationDev/figures/en-us_image_0229243712.png similarity index 100% rename from content/en/docs/ApplicationDev/figures/en-us_image_0229243712.png rename to docs/en/docs/ApplicationDev/figures/en-us_image_0229243712.png diff --git a/content/en/docs/ApplicationDev/figures/repositories-page.png b/docs/en/docs/ApplicationDev/figures/repositories-page.png similarity index 100% rename from content/en/docs/ApplicationDev/figures/repositories-page.png rename to docs/en/docs/ApplicationDev/figures/repositories-page.png diff --git a/content/en/docs/ApplicationDev/figures/rpm-software-package-download-page.png b/docs/en/docs/ApplicationDev/figures/rpm-software-package-download-page.png similarity index 100% rename from content/en/docs/ApplicationDev/figures/rpm-software-package-download-page.png rename to docs/en/docs/ApplicationDev/figures/rpm-software-package-download-page.png diff --git a/content/en/docs/ApplicationDev/figures/succeeded-page.png b/docs/en/docs/ApplicationDev/figures/succeeded-page.png similarity index 100% rename from content/en/docs/ApplicationDev/figures/succeeded-page.png rename to docs/en/docs/ApplicationDev/figures/succeeded-page.png diff --git a/content/en/docs/ApplicationDev/preparation.md b/docs/en/docs/ApplicationDev/preparation.md similarity index 89% rename from content/en/docs/ApplicationDev/preparation.md rename to docs/en/docs/ApplicationDev/preparation.md index 32e097dab4e27478964471a5317f770204c5fb71..db5f7a44872704cc21b464f823de0c487d7f36a4 100644 --- a/content/en/docs/ApplicationDev/preparation.md +++ b/docs/en/docs/ApplicationDev/preparation.md @@ -117,7 +117,7 @@ The openEuler OS is required. -For details about how to install the openEuler OS, see the \[*openEuler 20.09 Installation Guide*\](../Installation/Installation.html ). On the **SOFTWARE SELECTION** page, select **Development Tools** in the **Add-Ons for Selected Environment** area. +For details about how to install the openEuler OS, see the \[*openEuler 20.03 LTS SP2 Installation Guide*\](./../Installation/Installation.html ). On the **SOFTWARE SELECTION** page, select **Development Tools** in the **Add-Ons for Selected Environment** area. ## Configuring a Repo Source @@ -125,38 +125,42 @@ Configure an online yum source by directly obtaining the online openEuler repo s ### Configuring a Repo Source by Directly Obtaining the Repo Source File -> ![](public_sys-resources/icon-note.gif) **NOTE:** -> openEuler provides multiple repo sources for users online. For details about the repo sources, see [System Installation](../Releasenotes/installing-the-os.html). This section uses the **openEuler\_aarch64.repo** file as an example to describe how to configure the OS repo source as the yum source. +> ![](./public_sys-resources/icon-note.gif) **NOTE:** +> openEuler provides multiple repo sources for users online. For details about the repo sources, see [System Installation](./../Releasenotes/installing-the-os.html). This section uses the **openEuler\_aarch64.repo** file as an example to describe how to configure the OS repo source as the yum source. 1. Go to the yum source directory and check the .repo configuration file in the directory. ``` $ cd /etc/yum.repos.d $ ls - openEuler.repo + openEuler_aarch64.repo ``` 2. Edit the **openEuler\_aarch64.repo** file as the **root** user. Configure the online openEuler repo source as the yum source. ``` - # vi openEuler.repo + # vi openEuler_aarch64.repo ``` Edit the **openEuler\_aarch64.repo** file as follows: ``` [osrepo] + name=osrepo - baseurl=http://repo.openeuler.org/openEuler-20.09/OS/aarch64/ + + baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/aarch64/ + enabled=1 + gpgcheck=1 - gpgkey=http://repo.openeuler.org/openEuler-20.09/OS/aarch64/RPM-GPG-KEY-openEuler + gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/aarch64/RPM-GPG-KEY-openEuler ``` **** - > ![](public_sys-resources/icon-note.gif) **NOTE:** + > ![](./public_sys-resources/icon-note.gif) **NOTE:** > > - The repoid in \[*repoid* \] indicates the ID of the software repository. Repoids in all .repo configuration files must be unique. In the example, repoid is set to **base**. > - **name** indicates the string that the software repository describes. @@ -168,8 +172,8 @@ Configure an online yum source by directly obtaining the online openEuler repo s ### Configuring a Repo Source by Mounting an ISO File -> ![](public_sys-resources/icon-note.gif) ********NOTE:******** -> openEuler provides multiple ISO release packages. For details about each ISO release package, see [System Installation](../Releasenotes/installing-the-os.html). This section uses the **openEuler-20.09-aarch64-dvd.iso** file and **openEuler-20.09-aarch64-dvd.iso.sha256sum** verification file as examples. Modify them based on the actual requirements. +> ![](./public_sys-resources/icon-note.gif) ********NOTE:******** +> openEuler provides multiple ISO release packages. For details about each ISO release package, see [System Installation](./../Releasenotes/installing-the-os.html). This section uses the **openEuler-20.03-LTS-SP2-aarch64-dvd.iso** file and **openEuler-20.03-LTS-SP2-aarch64-dvd.iso.sha256sum** verification file as examples. Modify them based on the actual requirements. 1. Download the ISO release package. @@ -181,7 +185,7 @@ Configure an online yum source by directly obtaining the online openEuler repo s 3. Click the link provided after **Download ISO**. The download list is displayed. - 4. Select the version to be downloaded, for example, openEuler 20.03 LTS. Then, click **openEuler-20.09**. The download list is displayed. + 4. Select the version to be downloaded, for example, openEuler 20.03 LTS SP2. Then, click **openEuler-20.03-LTS-SP2**. The download list is displayed. 5. Click **ISO**. The ISO download list is displayed. @@ -191,9 +195,9 @@ Configure an online yum source by directly obtaining the online openEuler repo s 6. Click **aarch64**. - 7. Click **openEuler-20.09-aarch64-dvd.iso** to download the openEuler release package to the local host. + 7. Click **openEuler-20.03-LTS-SP2-aarch64-dvd.iso** to download the openEuler release package to the local host. - 8. Click **openEuler-20.09-aarch64-dvd.iso.sha256sum** to download the openEuler verification file to the local host. + 8. Click **openEuler-20.03-LTS-SP2-aarch64-dvd.iso.sha256sum** to download the openEuler verification file to the local host. 9. Log in to the openEuler OS and create a directory for storing the release package and verification file, for example, ~/iso\*\*. @@ -211,7 +215,7 @@ Configure an online yum source by directly obtaining the online openEuler repo s 3. Click the link provided after **Download ISO**. The download list is displayed. - 4. Select the version to be downloaded, for example, openEuler 20.09. Then, click **openEuler-20.09**. The download list is displayed. + 4. Select the version to be downloaded, for example, openEuler 20.03 LTS SP2. Then, click **openEuler-20.03-LTS-SP2**. The download list is displayed. 5. Click **ISO**. The ISO download list is displayed. @@ -221,9 +225,9 @@ Configure an online yum source by directly obtaining the online openEuler repo s 6. Click **aarch64**. - 7. Right-click **openEuler-20.09-aarch64-dvd.iso** and choose **Copy URL** from the shortcut menu to copy the address of the openEuler release package. + 7. Right-click **openEuler-20.03-LTS-SP2-aarch64-dvd.iso** and choose **Copy URL** from the shortcut menu to copy the address of the openEuler release package. - 8. Right-click **openEuler-20.09-aarch64-dvd.iso.sha256sum** and choose **Copy URL** from the shortcut menu to copy the address of the openEuler verification file. + 8. Right-click **openEuler-20.03-LTS-SP2-aarch64-dvd.iso.sha256sum** and choose **Copy URL** from the shortcut menu to copy the address of the openEuler verification file. 9. Log in to the openEuler OS, create a directory (for example, **~/iso**) for storing the release package and verification file, and switch to the directory. @@ -244,13 +248,13 @@ Configure an online yum source by directly obtaining the online openEuler repo s 1. Obtain the verification value in the verification file. ``` - $ cat openEuler-20.09-aarch64-dvd.iso.sha256sum + $ cat openEuler-20.03-LTS-SP2-aarch64-dvd.iso.sha256sum ``` 2. Calculate the SHA256 verification value of the openEuler release package. ``` - $ sha256sum openEuler-20.09-aarch64-dvd.iso + $ sha256sum openEuler-20.03-LTS-SP2-aarch64-dvd.iso ``` After the command is run, the verification value is displayed. @@ -266,7 +270,7 @@ Configure an online yum source by directly obtaining the online openEuler repo s The following is an example: ``` - # mount /home/iso/openEuler-20.09-aarch64-dvd.iso /mnt/ + # mount /home/iso/openEuler-20.03-LTS-SP2-aarch64-dvd.iso /mnt/ ``` The mounted **mnt** directory is as follows: @@ -290,24 +294,28 @@ Configure an online yum source by directly obtaining the online openEuler repo s ``` $ cd /etc/yum.repos.d $ ls - openEuler.repo + openEuler_aarch64.repo ``` 6. Edit the **openEuler\_aarch64.repo** file as the **root** user. Configure the local openEuler repo source created in step [3](#li6236932222) as the yum source. ``` - # vi openEuler.repo + # vi openEuler_aarch64.repo ``` Edit the **openEuler\_aarch64.repo** file as follows: ``` - [localosrepo] + [localosrepo] + name=localosrepo + baseurl=file:///mnt + enabled=1 + gpgcheck=1 - gpgkey=file:///mnt/RPM-GPG-KEY-openEuler + gpgkey=file:///mnt/RPM-GPG-KEY-openEuler ``` ## Installing the Software Package @@ -336,13 +344,13 @@ Install the software required for development. The software required varies in d $ dnf makecache ``` -4. Query the JDK software package that can be installed. +4. Run the following command to query the JDK software packages that can be installed: ``` $ dnf search jdk | grep jdk ``` - View the command output and install the **java-x.x.x-openjdk-devel.aarch64** software package. **x.x.x** indicates the version number. + View the command output and install the **java-x.x.x-openjdk-devel.aarch64** software package. **x.x.x** indicates the version number. OpenJDK 1.8, OpenJDK 11, and the latest OpenJDK are supported. 5. Install the JDK software package as the **root** user. The following uses the **java-1.8.0-openjdk-devel** software package as an example. diff --git a/content/en/docs/ApplicationDev/public_sys-resources/icon-caution.gif b/docs/en/docs/ApplicationDev/public_sys-resources/icon-caution.gif similarity index 100% rename from content/en/docs/ApplicationDev/public_sys-resources/icon-caution.gif rename to docs/en/docs/ApplicationDev/public_sys-resources/icon-caution.gif diff --git a/content/en/docs/ApplicationDev/public_sys-resources/icon-danger.gif b/docs/en/docs/ApplicationDev/public_sys-resources/icon-danger.gif similarity index 100% rename from content/en/docs/ApplicationDev/public_sys-resources/icon-danger.gif rename to docs/en/docs/ApplicationDev/public_sys-resources/icon-danger.gif diff --git a/content/en/docs/ApplicationDev/public_sys-resources/icon-note.gif b/docs/en/docs/ApplicationDev/public_sys-resources/icon-note.gif similarity index 100% rename from content/en/docs/ApplicationDev/public_sys-resources/icon-note.gif rename to docs/en/docs/ApplicationDev/public_sys-resources/icon-note.gif diff --git a/content/en/docs/ApplicationDev/public_sys-resources/icon-notice.gif b/docs/en/docs/ApplicationDev/public_sys-resources/icon-notice.gif similarity index 100% rename from content/en/docs/ApplicationDev/public_sys-resources/icon-notice.gif rename to docs/en/docs/ApplicationDev/public_sys-resources/icon-notice.gif diff --git a/content/en/docs/ApplicationDev/public_sys-resources/icon-tip.gif b/docs/en/docs/ApplicationDev/public_sys-resources/icon-tip.gif similarity index 100% rename from content/en/docs/ApplicationDev/public_sys-resources/icon-tip.gif rename to docs/en/docs/ApplicationDev/public_sys-resources/icon-tip.gif diff --git a/content/en/docs/ApplicationDev/public_sys-resources/icon-warning.gif b/docs/en/docs/ApplicationDev/public_sys-resources/icon-warning.gif similarity index 100% rename from content/en/docs/ApplicationDev/public_sys-resources/icon-warning.gif rename to docs/en/docs/ApplicationDev/public_sys-resources/icon-warning.gif diff --git a/content/en/docs/ApplicationDev/using-gcc-for-compilation.md b/docs/en/docs/ApplicationDev/using-gcc-for-compilation.md similarity index 99% rename from content/en/docs/ApplicationDev/using-gcc-for-compilation.md rename to docs/en/docs/ApplicationDev/using-gcc-for-compilation.md index 173ff7bd287c0671f1bf091738445f8c6eff8731..e98070d5c4f1027942f8285140660ba916d1cc1c 100644 --- a/content/en/docs/ApplicationDev/using-gcc-for-compilation.md +++ b/docs/en/docs/ApplicationDev/using-gcc-for-compilation.md @@ -308,11 +308,11 @@ In this mode, the **libtest.so** file in the current directory is used. If you choose to search for a DLL, to ensure that the DLL can be linked when the program is running, you must implement by using one of the following methods: - Save the DLL to a standard directory, for example, **/usr/lib**. -- Add the DLL path **libaryDIR** to the environment variable **LD\_LIBRARY\_PATH**. - - $ export LD\_LIBRARY\_PATH=libraryDIR:$LD\_LIBRARY\_PATH - - >![](public_sys-resources/icon-note.gif) **NOTE:** +- Add the DLL path **libaryDIR** to the environment variable **LD_LIBRARY_PATH**. + ``` + $ export LD_LIBRARY_PATH=libraryDIR:$LD_LIBRARY_PATH + ``` + >![](./public_sys-resources/icon-note.gif) **NOTE:** >**LD\_LIBRARY\_PATH** is an environment variable of the DLL. If the DLL is not in the default directories \(**/lib** and **/usr/lib**\), you need to specify the environment variable **LD\_LIBRARY\_PATH**. - Add the DLL path **libaryDIR** to **/etc/ld.so.conf** and run **ldconfig**, or use the DLL path **libaryDIR** as a parameter to run **ldconfig**. diff --git a/content/en/docs/ApplicationDev/using-jdk-for-compilation.md b/docs/en/docs/ApplicationDev/using-jdk-for-compilation.md similarity index 100% rename from content/en/docs/ApplicationDev/using-jdk-for-compilation.md rename to docs/en/docs/ApplicationDev/using-jdk-for-compilation.md diff --git a/content/en/docs/ApplicationDev/using-make-for-compilation.md b/docs/en/docs/ApplicationDev/using-make-for-compilation.md similarity index 100% rename from content/en/docs/ApplicationDev/using-make-for-compilation.md rename to docs/en/docs/ApplicationDev/using-make-for-compilation.md diff --git a/content/en/docs/Container/appendix-1.md b/docs/en/docs/Container/appendix-1.md similarity index 100% rename from content/en/docs/Container/appendix-1.md rename to docs/en/docs/Container/appendix-1.md diff --git a/content/en/docs/Container/appendix-2.md b/docs/en/docs/Container/appendix-2.md similarity index 99% rename from content/en/docs/Container/appendix-2.md rename to docs/en/docs/Container/appendix-2.md index 483c1d83b6e4135f70aafb888058366c50342ace..5f8bd66983e6f629d444b4266394a13fde79ac44 100644 --- a/content/en/docs/Container/appendix-2.md +++ b/docs/en/docs/Container/appendix-2.md @@ -6,7 +6,7 @@ ## configuration.toml ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The value of each field in the **configuration.toml** file is subject to the **configuration.toml** file in the **kata-containers-<**_version_**\>.rpm package**. You cannot set any field in the configuration file. ``` @@ -127,7 +127,7 @@ experimental: enables the experimental feature, which does not support user-defi

Sets the name of the NIC on a host.

-

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

+

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

name

diff --git a/content/en/docs/Container/appendix.md b/docs/en/docs/Container/appendix.md similarity index 100% rename from content/en/docs/Container/appendix.md rename to docs/en/docs/Container/appendix.md diff --git a/content/en/docs/Container/application-scenarios-2.md b/docs/en/docs/Container/application-scenarios-2.md similarity index 100% rename from content/en/docs/Container/application-scenarios-2.md rename to docs/en/docs/Container/application-scenarios-2.md diff --git a/content/en/docs/Container/application-scenarios.md b/docs/en/docs/Container/application-scenarios.md similarity index 100% rename from content/en/docs/Container/application-scenarios.md rename to docs/en/docs/Container/application-scenarios.md diff --git a/content/en/docs/Container/checking-the-container-health-status.md b/docs/en/docs/Container/checking-the-container-health-status.md similarity index 100% rename from content/en/docs/Container/checking-the-container-health-status.md rename to docs/en/docs/Container/checking-the-container-health-status.md diff --git a/content/en/docs/Container/command-reference.md b/docs/en/docs/Container/command-reference.md similarity index 100% rename from content/en/docs/Container/command-reference.md rename to docs/en/docs/Container/command-reference.md diff --git a/content/en/docs/Container/configurable-cgroup-path.md b/docs/en/docs/Container/configurable-cgroup-path.md similarity index 100% rename from content/en/docs/Container/configurable-cgroup-path.md rename to docs/en/docs/Container/configurable-cgroup-path.md diff --git a/content/en/docs/Container/configuring-networking-for-a-secure-container.md b/docs/en/docs/Container/configuring-networking-for-a-secure-container.md similarity index 98% rename from content/en/docs/Container/configuring-networking-for-a-secure-container.md rename to docs/en/docs/Container/configuring-networking-for-a-secure-container.md index ae4bbcea38c500e6eab7603423c1d5c23d7433f1..001355c89d3ee5d8426dfd8bb199310105275cfb 100644 --- a/content/en/docs/Container/configuring-networking-for-a-secure-container.md +++ b/docs/en/docs/Container/configuring-networking-for-a-secure-container.md @@ -117,7 +117,7 @@ Related commands are as follows: null ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >If an IP address is specified for an NIC that is successfully added, Kata adds a default route whose destination is in the same network segment as the IP address of the NIC. In the preceding example, after the NIC is added, the following route is added to the container: >``` >[root@6ec7a98 /]# ip route @@ -197,7 +197,7 @@ Related commands are as follows: - **gateway**: Next-hop gateway of the route. When **"dest":"default"** is configured, the gateway is mandatory. In other cases, this parameter is optional. - **device**: Name of the NIC corresponding to the route, which is mandatory. The value contains a maximum of 15 characters. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >If a route is added for the loopback device **lo** in the container, the device name corresponding to the **device** field in the route configuration file is **lo**. 4. **Run the following command to delete a specified route:** @@ -228,7 +228,7 @@ Related commands are as follows: null ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >- In the input fields, **dest** is mandatory, and both **device** and **gateway** are optional. Kata performs fuzzy match based on different fields and deletes the corresponding routing rules. For example, if **dest** is set to an IP address, all rules of this IP address will be deleted. >- If the route of the loopback device **lo** in the container is deleted, the device name corresponding to the **device** field in the route configuration file is **lo**. @@ -238,7 +238,7 @@ Related commands are as follows: $ cat ./test-iface.json | kata-runtime kata-network del-iface 6ec7a98 - ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >When deleting an NIC, you can only delete it based on the **name** field in the NIC container. Kata does not identify other fields. The following describes the output of the **kata-runtime kata-network del-iface **command for deleting NICs: @@ -317,7 +317,7 @@ The secure container provides an API for adding the **ipvs** command and setti kata-runtime kata-ipvs ipvsadm --restore - < ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >By default, the NAT mode is used for adding a single real server. To add real servers in batches, you need to manually add the **-m** option to use the NAT mode. >The following is an example of the rule file content: >-A -t 10.10.11.12:100 -s rr -p 3000 @@ -337,7 +337,7 @@ The secure container provides an API for adding the **ipvs** command and setti kata-runtime kata-ipvs ipvsadm --parameters "--set 100 100 200" ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >1. Each container supports a maximum of 20000 iptables rules \(5000 services and three servers/services\). Both add-service and add-server are rules. >2. Before importing rules in batches, you need to clear existing rules. >3. No concurrent test scenario exists. diff --git a/content/en/docs/Container/configuring-resources-for-a-secure-container.md b/docs/en/docs/Container/configuring-resources-for-a-secure-container.md similarity index 98% rename from content/en/docs/Container/configuring-resources-for-a-secure-container.md rename to docs/en/docs/Container/configuring-resources-for-a-secure-container.md index 09c05bf98473557a452aa9d67b4f2aed5ec89a11..ded03af6d5b7f39ab1e55bb239fec3a7687b45f2 100644 --- a/content/en/docs/Container/configuring-resources-for-a-secure-container.md +++ b/docs/en/docs/Container/configuring-resources-for-a-secure-container.md @@ -45,7 +45,7 @@ When a pod is started, all containers in the pod share the same net namespace an Socket(s): 4 ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >The maximum number of CPUs that can be configured is the number of CPUs \(excluding isolated cores\) that can run on the OS. The minimum number of CPUs is 0.5. 2. Configure CPU resources for running a container. @@ -98,7 +98,7 @@ When a pod is started, all containers in the pod share the same net namespace an 3. Configure CPU hot swap. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >The CPU hot swap function of the secure container requires the virtualization component QEMU. The **enable\_cpu\_memory\_hotplug** option in the kata-runtime configuration file **config.toml** is used to enable or disable CPU and memory hot swap. The default value is **false**, indicating that CPU and memory hot swap is disabled. If the value is **true**, CPU and memory hot swap is enabled. @@ -157,7 +157,7 @@ When a pod is started, all containers in the pod share the same net namespace an    - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >The pause container is only a placeholder container and does not have any workload. Therefore, when a lightweight VM is started, the CPU allocated by default can be shared by other containers. Therefore, you only need to hot add three CPUs to the lightweight VM for the new container started in the preceding example. - After the container where the CPU is hot added is stopped, the CPU is removed when the container is started. @@ -187,7 +187,7 @@ When a pod is started, all containers in the pod share the same net namespace an Swap: 0 0 0 ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >- If the memory size of a lightweight VM is not set using **--annotation com.github.containers.virtcontainers.sandbox\_mem**, the lightweight VM uses 1 GB memory by default. >- The minimum memory size of a pod in a secure container is 1 GB, and the maximum memory size is 256 GB. If the memory size allocated to a user exceeds 256 GB, an undefined error may occur. Currently, secure containers do not support the scenario where the memory size exceeds 256 GB. @@ -216,7 +216,7 @@ When a pod is started, all containers in the pod share the same net namespace an The memory hot add function is also configured by the **enable\_cpu\_memory\_hotplug** option in the kata-runtime configuration file **config.toml**. For details, see [3](#limiting-cpu-resources.md#en-us_topic_0183903699_li2167326144011). - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >Currently, memory resources support hot add only. The **-m** option is reused in kata-runtime to implement the memory hot add function. The sum of the **-m** options of all containers in a pod is collected to determine the number of memories to be hot added to a lightweight VM. @@ -255,7 +255,7 @@ When a pod is started, all containers in the pod share the same net namespace an Swap: 0 0 0 ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >The pause container is only a placeholder container and does not have any workload. Therefore, the memory allocated to the lightweight VM during startup can be shared by other containers. You only need to hot add 3 GB memory to the lightweight VM for the new container started in the preceding example. @@ -334,7 +334,7 @@ The secure container reuses the **--files-limit** option in the **docker run* docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --files-limit bash ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- If the value of **--files-limit** is less than the default minimum value **1024** and is not **0**, the maximum number of file descriptors that can be opened by the QEMU process of the secure container is set to the minimum value **1024**. >- If the value of **--files-limit** is 0, the maximum number of file descriptors that can be opened by the QEMU process of the secure container is the default value obtained by dividing the maximum number of file descriptors that can be opened by the system \(/proc/sys/fs/file-max\) by 400. >- If the maximum number of file descriptors that can be opened by the QEMU process of the secure container is not displayed when the secure container is started, the maximum number of file descriptors that can be opened by the QEMU process of the secure container is the same as the system default value. diff --git a/content/en/docs/Container/container-engine.md b/docs/en/docs/Container/container-engine.md similarity index 99% rename from content/en/docs/Container/container-engine.md rename to docs/en/docs/Container/container-engine.md index 58147841a9fd75a8cf9ab7dcfe3fb0c627af57b1..5b8e754314ec95d9f920c49da86af5b650de6898 100644 --- a/content/en/docs/Container/container-engine.md +++ b/docs/en/docs/Container/container-engine.md @@ -128,9 +128,7 @@ The **docker** command supports the following parameters:

Parameter to be executed when a container is started.

For example, set the native.umask parameter.

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

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

diff --git a/content/en/docs/Container/container-management-1.md b/docs/en/docs/Container/container-management-1.md similarity index 99% rename from content/en/docs/Container/container-management-1.md rename to docs/en/docs/Container/container-management-1.md index 6b22156ca3dbc69a130f7d4bc1ce3c42a72f3654..0619fdd77430868ca53239aee2d6f4aea8cb2ec4 100644 --- a/content/en/docs/Container/container-management-1.md +++ b/docs/en/docs/Container/container-management-1.md @@ -578,7 +578,7 @@ When the container is running, the health check status is written into the conta } ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- A maximum of five health check status records can be stored in a container. The last five records are saved. >- Only one health check configuration item can take effect in a container at a time. The later items configured in the Dockerfile will overwrite the earlier ones. Configurations during container creation will overwrite those in images. >- In the Dockerfile, you can set **HEALTHCHECK NONE** to cancel the health check configuration in a referenced image. When a container is running, you can set **--no-healthcheck** to cancel the health check configuration in an image. Do not configure the health check and **--no-healthcheck** parameters at the same time during the startup. diff --git a/content/en/docs/Container/container-management-2.md b/docs/en/docs/Container/container-management-2.md similarity index 99% rename from content/en/docs/Container/container-management-2.md rename to docs/en/docs/Container/container-management-2.md index dbde4ac1f49c094e1d763b50d7473915598c4c1b..1ce5d85ff343c2f1e84c0cc1f0d917d373236146 100644 --- a/content/en/docs/Container/container-management-2.md +++ b/docs/en/docs/Container/container-management-2.md @@ -1029,7 +1029,7 @@ Example: $ sudo docker restart busybox ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >During the container restart, if a process in the **D** or **Z** state exists in the container, the container may fail to be restarted. In this case, you need to analyze the cause of the **D** or **Z** state of the process in the container. Restart the container after the **D** or **Z** state of the process in the container is released. ## rm diff --git a/content/en/docs/Container/container-management.md b/docs/en/docs/Container/container-management.md similarity index 99% rename from content/en/docs/Container/container-management.md rename to docs/en/docs/Container/container-management.md index 3597e9b292bee333c781a3a8e28614c22fccb41b..ef6dc65d475f8680e1908be5eb7c62a718944d89 100644 --- a/content/en/docs/Container/container-management.md +++ b/docs/en/docs/Container/container-management.md @@ -51,7 +51,7 @@ The following table lists the parameters supported by the **create** command.

Description

-

create

+

create

  

--annotation

@@ -234,7 +234,7 @@ The following table lists the parameters supported by the **create** command.

--mount

-

Mounts a host directory to a container.

+

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

--no-healthcheck

@@ -303,6 +303,11 @@ The following table lists the parameters supported by the **create** command.

Mounts a volume.

+

--volumes-from=[]

+ +

Uses the mounting configuration of the specified container.

+ + @@ -740,12 +745,12 @@ The following table lists the parameters supported by the **run** command. - >![](public_sys-resources/icon-notice.gif) **NOTICE:** + >![](./public_sys-resources/icon-notice.gif) **NOTICE:** >Scenario 1: Mount **/home/test1** and then **/home/test2**. In this case, the content in **/home/test1** overwrites the content in **/mnt**. As a result, the **abc** directory does not exist in **/mnt**, and mounting** /home/test2** to **/mnt/abc** fails. >Scenario 2: Mount **/home/test2** and then **/home/test1**. In this case, the content of **/mnt** is replaced with the content of **/home/test1** during the second mounting. In this way, the content mounted during the first mounting from **/home/test2** to **/mnt/abc** is overwritten. >The first scenario is not supported. For the second scenario, users need to understand the risk of data access failures. - >![](public_sys-resources/icon-notice.gif) **NOTICE:** + >![](./public_sys-resources/icon-notice.gif) **NOTICE:** >- In high concurrency scenarios \(200 containers are concurrently started\), the memory management mechanism of Glibc may cause memory holes and large virtual memory \(for example, 10 GB\). This problem is caused by the restriction of the Glibc memory management mechanism in the high concurrency scenario, but not by memory leakage. Therefore, the memory consumption does not increase infinitely. You can set the **MALLOC\_ARENA\_MAX** environment variable to reduce the virtual memory and increase the probability of reducing the physical memory. However, this environment variable will cause the iSulad concurrency performance to deteriorate. Set this environment variable based on the site requirements. > ``` > To balance performance and memory usage, set MALLOC_ARENA_MAX to 4. (The iSulad performance deterioration on the ARM64 server is controlled by less than 10%.) @@ -1241,7 +1246,7 @@ The following table lists the parameters supported by the **inspect** command. ### Constraints -- Lightweight containers do not support the output in \{\{.State\}\} format but support the output in the \{\{json .State\}\} format. The **-f** parameter is not supported when the object is an image. +- Lightweight containers do not support the output in \{ \{.State\} \} format but support the output in the \{ \{json .State\} \} format. The **-f** parameter is not supported when the object is an image. ### Example diff --git a/content/en/docs/Container/container-resource-management.md b/docs/en/docs/Container/container-resource-management.md similarity index 99% rename from content/en/docs/Container/container-resource-management.md rename to docs/en/docs/Container/container-resource-management.md index b09a880f1ec839182e397772a70fc16f8c3ae63f..3b7166202e7354619bb61d14e55eaa1d0386e9c3 100644 --- a/content/en/docs/Container/container-resource-management.md +++ b/docs/en/docs/Container/container-resource-management.md @@ -168,7 +168,7 @@ To restrict a container to use a specific CPU, add **--cpuset-cpus number** wh isula run -tid --cpuset-cpus 0,2-3 busybox sh ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >You can check whether the configuration is successful. For details, see "Querying Information About a Single Container." ## Restricting the Memory Usage of a Running Container @@ -459,7 +459,7 @@ overlay 10.0M 10.0M 0 100% / When using iSulad with the quota function to switch data disks, ensure that the data disks to be switched are mounted using the **prjquota** option and the mounting mode of the **/var/lib/isulad/storage/overlay2** directory is the same as that of the **/var/lib/isulad** directory. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >Before switching the data disk, ensure that the mount point of **/var/lib/isulad/storage/overlay2** is unmounted. diff --git a/docs/en/docs/Container/container-tools.md b/docs/en/docs/Container/container-tools.md new file mode 100644 index 0000000000000000000000000000000000000000..f1d20e5f8e1cb0db2cb7bace8edd54be1780f5ab --- /dev/null +++ b/docs/en/docs/Container/container-tools.md @@ -0,0 +1,3 @@ +# Container Tools + +To better manage and use containers, iSula provides some container-related tools, including isula-build and isula-transform, which are used for container image building and container migration, respectively. This chapter describes how to install and use container tools. \ No newline at end of file diff --git a/content/en/docs/Container/container.md b/docs/en/docs/Container/container.md similarity index 100% rename from content/en/docs/Container/container.md rename to docs/en/docs/Container/container.md diff --git a/content/en/docs/Container/cri.md b/docs/en/docs/Container/cri.md similarity index 99% rename from content/en/docs/Container/cri.md rename to docs/en/docs/Container/cri.md index 00bd00dd44c01724efe4a38d020d4c5d5c436732..cd412f0664db94d13f0fcbe4e3c9cd08245022cf 100644 --- a/content/en/docs/Container/cri.md +++ b/docs/en/docs/Container/cri.md @@ -44,7 +44,7 @@ The current CRI version is v1alpha1. For official API description, access the fo iSulad uses the API description file of version 1.14 used by Pass, which is slightly different from the official API description file. API description in this document prevails. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The listening IP address of the CRI WebSocket streaming service is **127.0.0.1** and the port number is **10350**. The port number can be configured in the **--websocket-server-listening-port** command or in the **daemon.json** configuration file. ## APIs diff --git a/content/en/docs/Container/docker-container.md b/docs/en/docs/Container/docker-container.md similarity index 100% rename from content/en/docs/Container/docker-container.md rename to docs/en/docs/Container/docker-container.md diff --git a/content/en/docs/Container/dynamically-loading-the-kernel-module.md b/docs/en/docs/Container/dynamically-loading-the-kernel-module.md similarity index 96% rename from content/en/docs/Container/dynamically-loading-the-kernel-module.md rename to docs/en/docs/Container/dynamically-loading-the-kernel-module.md index ae2efef6eef35d14072b5f71877a710d98bc93a3..7c1458075e1501d1422440e86b86ad3f3512467d 100644 --- a/content/en/docs/Container/dynamically-loading-the-kernel-module.md +++ b/docs/en/docs/Container/dynamically-loading-the-kernel-module.md @@ -5,7 +5,7 @@ Dynamically Loading the Kernel Module ## Function Description -Services in a container may depend on some kernel modules. You can set environment variables to dynamically load the kernel modules required by services in the container to the host before the system container starts. This feature must be used together with isulad-hooks. For details, see [Dynamically Managing Container Resources \(syscontainer-tools\)](dynamically-managing-container-resources-(syscontainer-tools).md). +Services in a container may depend on some kernel modules. You can set environment variables to dynamically load the kernel modules required by services in the container to the host before the system container starts. This feature must be used together with isulad-hooks. For details, see [Dynamically Managing Container Resources \(syscontainer-tools\)](./dynamically-managing-container-resources-(syscontainer-tools).md). ## Parameter Description @@ -50,7 +50,7 @@ nf_defrag_ipv6 20480 2 nf_conntrack,ip_vs libcrc32c 16384 3 nf_conntrack,nf_nat,ip_vs ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- isulad-tools must be installed on the host. >- **--hooks-spec** must be set to **isulad hooks**. diff --git a/content/en/docs/Container/dynamically-managing-container-resources-(syscontainer-tools).md b/docs/en/docs/Container/dynamically-managing-container-resources-(syscontainer-tools).md similarity index 99% rename from content/en/docs/Container/dynamically-managing-container-resources-(syscontainer-tools).md rename to docs/en/docs/Container/dynamically-managing-container-resources-(syscontainer-tools).md index 50f9a0602506b9d40ce5c640e5c7664fef3b3cd1..1c0aa377631d6c50d51d63b5b89fba237f1f658f 100644 --- a/content/en/docs/Container/dynamically-managing-container-resources-(syscontainer-tools).md +++ b/docs/en/docs/Container/dynamically-managing-container-resources-(syscontainer-tools).md @@ -254,7 +254,7 @@ In the preceding format: Add network interface to container 2aaca5c1af7c (eth3,eth1) done ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >When adding a virtual or physical NIC, ensure that the NIC is in the idle state. Adding a NIC in use will disconnect the system network. diff --git a/content/en/docs/Container/environment-variable-persisting.md b/docs/en/docs/Container/environment-variable-persisting.md similarity index 100% rename from content/en/docs/Container/environment-variable-persisting.md rename to docs/en/docs/Container/environment-variable-persisting.md diff --git a/content/en/docs/Container/figures/en-us_image_0183048952.png b/docs/en/docs/Container/figures/en-us_image_0183048952.png similarity index 100% rename from content/en/docs/Container/figures/en-us_image_0183048952.png rename to docs/en/docs/Container/figures/en-us_image_0183048952.png diff --git a/content/en/docs/Container/figures/en-us_image_0221924926.png b/docs/en/docs/Container/figures/en-us_image_0221924926.png similarity index 100% rename from content/en/docs/Container/figures/en-us_image_0221924926.png rename to docs/en/docs/Container/figures/en-us_image_0221924926.png diff --git a/content/en/docs/Container/figures/en-us_image_0221924927.png b/docs/en/docs/Container/figures/en-us_image_0221924927.png similarity index 100% rename from content/en/docs/Container/figures/en-us_image_0221924927.png rename to docs/en/docs/Container/figures/en-us_image_0221924927.png diff --git a/docs/en/docs/Container/figures/isula-build_arch.png b/docs/en/docs/Container/figures/isula-build_arch.png new file mode 100644 index 0000000000000000000000000000000000000000..f92f15085820ce824bc2ca60ff7d6d25e95f1402 Binary files /dev/null and b/docs/en/docs/Container/figures/isula-build_arch.png differ diff --git a/content/en/docs/Container/figures/relationship-between-the-secure-container-and-peripheral-components.png b/docs/en/docs/Container/figures/relationship-between-the-secure-container-and-peripheral-components.png similarity index 100% rename from content/en/docs/Container/figures/relationship-between-the-secure-container-and-peripheral-components.png rename to docs/en/docs/Container/figures/relationship-between-the-secure-container-and-peripheral-components.png diff --git a/docs/en/docs/Container/figures/sec-container.png b/docs/en/docs/Container/figures/sec-container.png new file mode 100644 index 0000000000000000000000000000000000000000..db0f0112328013505ec11ace1ad5c0077cf7ea40 Binary files /dev/null and b/docs/en/docs/Container/figures/sec-container.png differ diff --git a/content/en/docs/Container/image-management-1.md b/docs/en/docs/Container/image-management-1.md similarity index 100% rename from content/en/docs/Container/image-management-1.md rename to docs/en/docs/Container/image-management-1.md diff --git a/content/en/docs/Container/image-management-2.md b/docs/en/docs/Container/image-management-2.md similarity index 100% rename from content/en/docs/Container/image-management-2.md rename to docs/en/docs/Container/image-management-2.md diff --git a/content/en/docs/Container/image-management.md b/docs/en/docs/Container/image-management.md similarity index 99% rename from content/en/docs/Container/image-management.md rename to docs/en/docs/Container/image-management.md index 415f012bbd0b035529ebe1d1302946cb29a96804..53713d674f3ab41c463053781b4b8fcae363dd65 100644 --- a/content/en/docs/Container/image-management.md +++ b/docs/en/docs/Container/image-management.md @@ -245,7 +245,6 @@ $ cat /etc/isulad/daemon.json "rnd-dockerhub.huawei.com" ], "pod-sandbox-image": "", - "image-opt-timeout": "5m", "native.umask": "secure", "network-plugin": "", "cni-bin-dir": "", diff --git a/content/en/docs/Container/installation-and-deployment-1.md b/docs/en/docs/Container/installation-and-deployment-1.md similarity index 100% rename from content/en/docs/Container/installation-and-deployment-1.md rename to docs/en/docs/Container/installation-and-deployment-1.md diff --git a/content/en/docs/Container/installation-and-deployment-2.md b/docs/en/docs/Container/installation-and-deployment-2.md similarity index 97% rename from content/en/docs/Container/installation-and-deployment-2.md rename to docs/en/docs/Container/installation-and-deployment-2.md index 287c55db39ee38d50a510bb350e0394fa426ec53..a036b09d573b6f3e67ac93f61f10fd6e5b325be7 100644 --- a/content/en/docs/Container/installation-and-deployment-2.md +++ b/docs/en/docs/Container/installation-and-deployment-2.md @@ -29,7 +29,7 @@ ## Precautions -- The **docker-engine** RPM package cannot be installed together with the **containerd**, **runc**, or **podman** RPM package. This is because the **docker-engine** RPM package contains all components required for Docker running, including **containerd**, **runc**, and **docker** binary files. Yet the **containerd**, **runc**, and **podman** RPM packages also contain the corresponding binary files. Software package conflicts may occur due to repeated installation. +- The **docker-engine** RPM package cannot be installed together with the **containerd**, **runc**, **docker-proxy**, or **podman** RPM package. This is because the **docker-engine** RPM package contains all components required for Docker running, including **containerd**, **runc**, **docker-proxy**, and **docker** binary files. Yet the **containerd**, **runc**, **docker-proxy**, and **podman** RPM packages also contain the corresponding binary files. Software package conflicts may occur due to repeated installation. ## Basic Installation Configuration @@ -52,12 +52,12 @@ cat /etc/docker/daemon.json Re-configuring various running directories and files \(including **--graph** and **--exec-root**\) may cause directory conflicts or file attribute changes, affecting the normal use of applications. ->![](public_sys-resources/icon-notice.gif) **NOTICE:** +>![](./public_sys-resources/icon-notice.gif) **NOTICE:** >Therefore, the specified directories or files should be used only by Docker to avoid file attribute changes and security issues caused by conflicts. - Take **--graph** as an example. When **/new/path/** is used as the new root directory of the daemon, if a file exists in **/new/path/** and the directory or file name conflicts with that required by Docker \(for example, **containers**, **hooks**, and **tmp**\), Docker may update the original directory or file attributes, including the owner and permission. ->![](public_sys-resources/icon-notice.gif) **NOTICE:** +>![](./public_sys-resources/icon-notice.gif) **NOTICE:** >From Docker 17.05, the **--graph** parameter is marked as **Deprecated** and replaced with the **--data-root** parameter. ### Daemon Network Configuration @@ -72,7 +72,7 @@ The default **umask** value of the main container process and exec process is The default value of **umask** is **0027** when Docker starts a container. You can change the value to **0022** by running the **--exec-opt native.umask=normal** command during container startup. ->![](public_sys-resources/icon-notice.gif) **NOTICE:** +>![](./public_sys-resources/icon-notice.gif) **NOTICE:** >If **native.umask** is configured in **docker create** or **docker run** command, its value is used. For details, see the parameter description in [4.6.2.4 create](#create.md#EN-US_TOPIC_0184808242) and [4.6.2.16 run](#container-management-40.md#EN-US_TOPIC_0184808238). @@ -145,7 +145,7 @@ The following uses **-w /var/lib/docker -k docker** as an example to describe [root@localhost signal]# auditctl -l | grep docker -w /var/lib/docker/ -p rwxa -k docker ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >**-p \[r|w|x|a\]** and **-w** are used together to monitor the read, write, execution, and attribute changes \(such as timestamp changes\) of the directory. In this case, any file or directory operation in the **/var/lib/docker** directory will be recorded in the **audit.log** file. As a result, too many logs will be recorded in the **audit.log** file, which severely affects the memory or CPU usage of the auditd, and further affects the OS. For example, logs similar to the following will be recorded in the **/var/log/audit/audit.log** file each time the **ls /var/lib/docker/containers** command is executed: ``` @@ -447,7 +447,7 @@ When a system is unexpectedly powered off or system panic occurs, Docker daemon - Cache construction: The cache construction information will be deleted after the node is restarted. - Metadata stored in containerd: Metadata stored in containerd will be recreated when a container is started. Therefore, the metadata stored in containerd will be deleted when the node is restarted. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >If you want to manually clear data and restore the environment, you can set the environment variable **DISABLE\_CRASH\_FILES\_DELETE** to **true** to disable the function of clearing DB files when the daemon process is restarted due to power-off. diff --git a/content/en/docs/Container/installation-configuration.md b/docs/en/docs/Container/installation-configuration.md similarity index 97% rename from content/en/docs/Container/installation-configuration.md rename to docs/en/docs/Container/installation-configuration.md index 0ac4a800c3f0d9de03fdd6e22ce1f9db5919c743..f9a6b145ce99a18764dbe0e85475b2ae8b246363 100644 --- a/content/en/docs/Container/installation-configuration.md +++ b/docs/en/docs/Container/installation-configuration.md @@ -1,7 +1,7 @@ # Installation and Configuration -- [Installation and Configuration](installation-configuration) +- [Installation and Configuration](./installation-configuration) - [Installation Methods](#installation-methods) - [Deployment Configuration](#deployment-configuration) - [Configuration Mode](#configuration-mode) @@ -39,7 +39,7 @@ This section describes two installation methods. The iSulad server daemon **isulad** can be configured with a configuration file or by running the **isulad --xxx** command. The priority in descending order is as follows: CLI \> configuration file \> default configuration in code. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >If systemd is used to manage the iSulad process, modify the **OPTIONS** field in the **/etc/sysconfig/iSulad** file, which functions the same as using the CLI. - **CLI** @@ -66,7 +66,6 @@ The iSulad server daemon **isulad** can be configured with a configuration fil --hook-spec Default hook spec file applied to all containers -H, --host The socket name used to create gRPC server --image-layer-check Check layer intergrity when needed - --image-opt-timeout Max timeout(default 5m) for image operation --insecure-registry Disable TLS verification for the given registry --insecure-skip-verify-enforce Force to skip the insecure verify(default false) --log-driver Set daemon log driver, such as: file @@ -260,15 +259,6 @@ The iSulad server daemon **isulad** can be configured with a configuration fil overlay2.basesize=${size} #It is equivalent to overlay2.size.
-

--image-opt-timeout

- -

"image-opt-timeout": "5m"

- -

Image operation timeout interval, which is 5m by default.

- -

The value -1 indicates that the timeout interval is not limited.

- -

--registry-mirrors

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

@@ -474,7 +464,6 @@ The iSulad server daemon **isulad** can be configured with a configuration fil "rnd-dockerhub.huawei.com" ], "pod-sandbox-image": "", - "image-opt-timeout": "5m", "native.umask": "secure", "network-plugin": "", "cni-bin-dir": "", @@ -485,7 +474,7 @@ The iSulad server daemon **isulad** can be configured with a configuration fil } ``` - >![](public_sys-resources/icon-notice.gif) **NOTICE:** + >![](./public_sys-resources/icon-notice.gif) **NOTICE:** >The default configuration file **/etc/isulad/daemon.json** is for reference only. Configure it based on site requirements. @@ -500,14 +489,14 @@ The iSulad server daemon **isulad** can be configured with a configuration fil -

*

+

\*

/etc/default/isulad/

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

-

*

+

\*

/etc/isulad/

@@ -528,35 +517,35 @@ The iSulad server daemon **isulad** can be configured with a configuration fil

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

-

*

+

\*

/run/lxc/

Lock file, which is created during iSulad running.

-

*

+

\*

/var/run/isulad/

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

-

*

+

\*

/var/run/isula/

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

-

*

+

\*

/var/lib/lcr/

Temporary directory of the LCR component.

-

*

+

\*

/var/lib/isulad/

@@ -588,7 +577,7 @@ The iSulad server daemon **isulad** can be configured with a configuration fil - Log file management: - >![](public_sys-resources/icon-notice.gif) **NOTICE:** + >![](./public_sys-resources/icon-notice.gif) **NOTICE:** >Log function interconnection: logs are managed by systemd as iSulad is and then transmitted to rsyslogd. By default, rsyslog restricts the log writing speed. You can add the configuration item **$imjournalRatelimitInterval 0** to the **/etc/rsyslog.conf** file and restart the rsyslogd service. - Restrictions on command line parameter parsing @@ -782,7 +771,7 @@ Mode 1 is used for the server, and mode 2 for the client if the two-way authenti Mode 2 is used for the server and the client if the unidirectional authentication mode is used for communication. ->![](public_sys-resources/icon-notice.gif) **NOTICE:** +>![](./public_sys-resources/icon-notice.gif) **NOTICE:** >- If RPM is used for installation, the server configuration can be modified in the **/etc/isulad/daemon.json** and **/etc/sysconfig/iSulad** files. >- Two-way authentification is recommended as it is more secure than non-authentication or unidirectional authentication. >- GRPC open-source component logs are not taken over by iSulad. To view gRPC logs, set the environment variables **gRPC\_VERBOSITY** and **gRPC\_TRACE** as required. diff --git a/content/en/docs/Container/installation-guideline.md b/docs/en/docs/Container/installation-guideline.md similarity index 100% rename from content/en/docs/Container/installation-guideline.md rename to docs/en/docs/Container/installation-guideline.md diff --git a/content/en/docs/Container/installation-upgrade-Uninstallation.md b/docs/en/docs/Container/installation-upgrade-Uninstallation.md similarity index 100% rename from content/en/docs/Container/installation-upgrade-Uninstallation.md rename to docs/en/docs/Container/installation-upgrade-Uninstallation.md diff --git a/content/en/docs/Container/interconnection-with-the-cni-network.md b/docs/en/docs/Container/interconnection-with-the-cni-network.md similarity index 99% rename from content/en/docs/Container/interconnection-with-the-cni-network.md rename to docs/en/docs/Container/interconnection-with-the-cni-network.md index eea018fcb02e3f99dfaa79f1a67766156aeaaba1..ea181545190975bf2c889636a7975a51db940254 100644 --- a/content/en/docs/Container/interconnection-with-the-cni-network.md +++ b/docs/en/docs/Container/interconnection-with-the-cni-network.md @@ -114,7 +114,7 @@ If **--network-plugin=cni** is configured for iSulad and the default network p When StopPodSandbox is called, the interface for removing a pod from the CNI network list will be called to clear network resources. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >1. Before calling the RemovePodSandbox interface, you must call the StopPodSandbox interface at least once. >2. If StopPodSandbox fails to call the CNI, residual network resources may exist. diff --git a/docs/en/docs/Container/isula-build.md b/docs/en/docs/Container/isula-build.md new file mode 100644 index 0000000000000000000000000000000000000000..9166b60fcc911eb97da4e620cdbb10f2787112ef --- /dev/null +++ b/docs/en/docs/Container/isula-build.md @@ -0,0 +1,1089 @@ +# Container Image Building + +* [Overview](#overview) +* [Installation](#installation) + * [Preparations](#preparations) + * [Installing isula-build](#installing-isula-build) +* [Configuring and Managing the isula-build Service](#configuring-and-managing-the-isula-build-service) + * [Configuring the isula-build Service](#configuring-the-isula-build-service) + * [Managing the isula-build Service](#managing-the-isula-build-service) + * [(Recommended) Using systemd for Management](#recommended-using-systemd-for-management) + * [Directly Running isula-builder](#directly-running-isula-builder) +* [Usage Guidelines](#usage-guidelines) + * [Prerequisites](#prerequisites) + * [Overview](#overview-1) + * [ctr-img: Container Image Management](#ctr-img-container-image-management) + * [build: Container Image Build](#build-container-image-build) + * [image: Viewing Local Persistent Build Images](#image-viewing-local-persistent-build-images) + * [import: Importing a Basic Container Image](#import-importing-a-basic-container-image) + * [load: Importing Cascade Images](#load-importing-cascade-images) + * [rm: Deleting a Local Persistent Image](#rm-deleting-a-local-persistent-image) + * [save: Exporting Cascade Images](#save-exporting-cascade-images) + * [tag: Tagging Local Persistent Images](#tag-tagging-local-persistent-images) + * [pull: Pulling an Image To a Local Host](#pull-pulling-an-image-to-a-local-host) + * [push: Pushing a Local Image to a Remote Repository](#push-pushing-a-local-image-to-a-remote-repository) + * [info: Viewing the Operating Environment and System Information](#info-viewing-the-operating-environment-and-system-information) + * [login: Logging In to the Remote Image Repository](#login-logging-in-to-the-remote-image-repository) + * [logout: Logging Out of the Remote Image Repository](#logout-logging-out-of-the-remote-image-repository) + * [version: Querying the isula-build Version](#version-querying-the-isula-build-version) + * [manifest: Manage manifest list(experimental feature)](#manifest-manifest-list-management) + * [create: Create a manifest list](#create-manifest-list-creation) + * [annotate: Update a manifest list](#annotate-manifest-list-update) + * [inspect: Inspect a manifest list](#inspect-manifest-list-inspect) + * [push: Push manifest list to repository](#push-manifest-list-push-to-the-remote-repository) +* [Directly Integrating a Container Engine](#directly-integrating-a-container-engine) + * [Integration with iSulad](#integration-with-isulad) + * [Integration with Docker](#integration-with-docker) +* [Precautions](#precautions) + * [Constraints or Limitations](#constraints-or-limitations) + * [Differences with "docker build"](#differences-with-docker-build) +* [Appendix](#appendix) + * [Command Line Parameters](#command-line-parameters) + * [Communication Matrix](#communication-matrix) + * [File and Permission](#file-and-permission) + +## Overview + +isula-build is a container image build tool developed by the iSula container team. It allows you to quickly build container images using Dockerfiles. + +The isula-build uses the server/client mode. The isula-build functions as a client and provides a group of command line tools for image build and management. The isula-builder functions as the server, processes client management requests, and functions as the daemon process in the background. + +![isula-build architecure](./figures/isula-build_arch.png) + +>![](./public_sys-resources/icon-note.gif) **Note:** +> +> - Currently, isula-build supports OCI image format([OCI Image Format Specification](https://github.com/opencontainers/image-spec/blob/master/spec.md)) and Docker image format([Image Manifest Version 2, Schema 2](https://docs.docker.com/registry/spec/manifest-v2-2/)). Using command `export ISULABUILD_CLI_EXPERIMENTAL=enabled` to open the experimental feature for supporting OCI image format. When experimental feature is disabled, isula-build will take Docker image format as the default image format. Instead, isula-build will take OCI image format as the default image format. + +## Installation + +### Preparations + +To ensure that isula-build can be successfully installed, the following software and hardware requirements must be met: + +- Supported architectures: x86_64 and AArch64 +- Supported OS: openEuler +- You have the permissions of the root user. + +#### Installing isula-build + +Before using isula-build to build a container image, you need to install the following software packages: + +**(Recommended) Method 1: Using YUM** + +1. Configure the openEuler yum source. + +2. Log in to the target server as the root user and install isula-build. + + ``` + sudo yum install -y isula-build + ``` + +**Method 2: Using the RPM Package** + +1. Obtain the isula-build-*.rpm installation package from the openEuler yum source, for example, isula-build-0.9.5-6.oe1.x86_64.rpm. + +2. Upload the obtained RPM software package to any directory on the target server, for example, /home/. + +3. Log in to the target server as the root user and run the following command to install isula-build: + + ``` + sudo rpm -ivh /home/isula-build-*.rpm + ``` + +>![](./public_sys-resources/icon-note.gif) **Note:** +> +> - After the installation is complete, you need to manually start the isula-build service. For details about how to start the service, see "Managing the isula-build Service." + +## Configuring and Managing the isula-build Service + +### Configuring the isula-build Service + +After the isula-build software package is installed, the systemd starts the isula-build service based on the default configuration contained in the isula-build software package on the isula-build server. If the default configuration file on the isula-build server cannot meet your requirements, perform the following operations to customize the configuration file: After the default configuration is modified, restart the isula-build server for the new configuration to take effect. For details, see "Managing the isula-build Service." + +Currently, the isula-build server contains the following configuration file: + +- /etc/isula-build/configuration.toml: general isula-builder configuration file, which is used to set the isula-builder log level, persistency directory, runtime directory, and OCI runtime. Parameters in the configuration file are described as follows: + +| Configuration Item | Mandatory or Optional | Description | Value | +| --------- | -------- | --------------------------------- | ----------------------------------------------- | +| debug | Optional | Indicates whether to enable the debug log function. | true: Enable the debug log function. false: Disable the debug log function. | +| loglevel | Optional | Sets the log level. | debug
info
warn
error | +| run_root | Mandatory | Sets the root directory of runtime data. | For example, /var/run/isula-build/ | +| data_root | Mandatory | Sets the local persistency directory. | For example, /var/lib/isula-build/ | +| runtime | Optional | Sets the runtime type. Currently, only runc is supported. | runc | +| group | Optional | Sets an owner group for the local socket file isula_build.sock so that non-privileged users in the group can use isula-build. | isula | +| experimental | Optional | Indicates whether to enable experimental features. | true: Enable experimental features. false: Disable experimental features. | + +- /etc/isula-build/storage.toml: configuration file for local persistent storage, including the configuration of the storage driver in use. + +| Configuration Item | Mandatory or Optional | Description | +| ------ | -------- | ------------------------------ | +| driver | Optional | Storage driver type. Currently, overlay2 is supported. | + + For more settings, see [containers-storage.conf.5.md](https://github.com/containers/storage/blob/master/docs/containers-storage.conf.5.md). + + +- /etc/isula-build/registries.toml: configuration file for each image repository. + +| Configuration Item | Mandatory or Optional | Description | +| ------------------- | -------- | ------------------------------------------------------------ | +| registries.search | Optional | Search domain of the image repository. Only listed image repositories can be found. | +| registries.insecure | Optional | Accessible insecure image repositories. Listed image repositories cannot pass the authentication and are not recommended. | + + For more settings, see [containers-registries.conf.5.md](https://github.com/containers/image/blob/master/docs/containers-registries.conf.5.md). + +- /etc/isula-build/policy.json: image pull/push policy file. Note: Currently, this parameter cannot be configured. + +>![](./public_sys-resources/icon-note.gif) **Note:** +> +> - isula-build supports the preceding configuration file with the maximum size of 1 MiB. +> - The persistent working directory dataroot cannot be configured on the memory disk, for example, tmpfs. +> - Currently, only overlay2 can be used as the underlying graphdriver. +> - Before setting the --group option, ensure that the corresponding user group has been created on a local OS and non-privileged users have been added to the group. After the isula-builder is restarted, non-privileged users can use the isula-build function. In addition, to ensure permission consistency, the array of the isula-build configuration file directory /etc/isula-build is set to the group specified by --group. + +### Managing the isula-build Service + +Currently, openEuler uses systemd to manage the isula-build service. The isula-build software package contains the systemd service file. After installing the isula-build software package, you can use the systemd tool to start or stop the isula-build service. You can also manually start the isula-builder software. Note that only one isula-builder process can be started on a node at a time. + +>![](./public_sys-resources/icon-note.gif) **Note:** +> +> - Only one isula-builder process can be started on a node at a time. + +#### (Recommended) Using systemd for Management + +You can run the following systemd commands to start, stop, and restart the isula-build service: + +- Run the following command to start the isula-build service: + + ```sh + sudo systemctl start isula-build.service + ``` + +- Run the following command to stop the isula-build service: + + ```sh + sudo systemctl stop isula-build.service + ``` + +- Run the following command to restart the isula-builder service: + + ```sh + sudo systemctl restart isula-build.service + ``` + +The systemd service file of the isula-build software installation package is stored in the `/usr/lib/systemd/system/isula-build.service` directory. If you need to modify the systemd configuration of the isula-build service, modify the file and run the following command to make the modification take effect. Then restart the isula-build service based on the systemd management command. + +```sh +sudo systemctl daemon-reload +``` + +#### Directly Running isula-builder + +You can also run the isula-builder command on the server to start the service. The isula-builder command can contain flags for service startup. The following flags are supported: + +- -D, --debug: whether to enable the debugging mode. +- --log-level: log level. The options are debug, info, warn, and error. The default value is info. +- --dataroot: local persistency directory. The default value is /var/lib/isula-build/. +- --runroot: runtime directory. The default value is /var/run/isula-build/. +- --storage-driver: underlying storage driver type. +- --storage-opt: underlying storage driver configuration. +- --group: an owner group for the local socket file isula_build.sock so that non-privileged users in the group can use isula-build. The default owner group is "isula". +- --experimental: whether to enable experimental features. + +>![](./public_sys-resources/icon-note.gif) **Note:** +> +> - If the command line startup parameters contain the same configuration options as those in the configuration file, the command line parameters are preferentially used for startup. + +Start the isula-build service. For example, to specify the local persistency directory /var/lib/isula-build and disable debugging, run the following command: + +```sh +sudo isula-builder --dataroot "/var/lib/isula-build" --debug=false +``` + +## Usage Guidelines + +### Prerequisites + +isula-build depends on the executable file runc to build the RUN command in the Dockerfile. Therefore, the runc must be pre-installed in the running environment of isula-build. The installation method depends on the application scenario. If you do not need to use the complete docker-engine tool chain, you can install only the docker-runc RPM package. + +```sh +sudo yum install -y docker-runc +``` + +If you need to use a complete docker-engine tool chain, install the docker-engine RPM package, which contains the executable file runc by default. + +```sh +sudo yum install -y docker-engine +``` + +>![](./public_sys-resources/icon-note.gif) **Note:** +> +> - Users must ensure the security of OCI runtime (runc) executable files to prevent malicious replacement. + +### Overview + +The isula-build client provides a series of commands for building and managing container images. Currently, the isula-build client provides the following command lines: + +- ctr-img: manages container images. The ctr-img command contains the following subcommands: + - build: builds a container image based on the specified Dockerfile. + - images: lists local container images. + - import: imports a basic container image. + - load: imports a cascade image. + - rm: deletes a local container image. + - save: exports a cascade image to a local disk. + - tag: adds a tag to a local container image. + - pull: pulls an image to a local host. + - push: pushes a local image to a remote repository. +- info: displays the running environment and system information of isula-build. +- login: logs in to the remote container image repository. +- logout: logs out of the remote container image repository. +- version: displays the versions of isula-build and isula-builder. +- manifest(experimental feature): manage manifest list. + +>![](./public_sys-resources/icon-note.gif) **Note:** +> +> - The isula-build completion and isula-builder completion commands are used to generate the bash command completion script. This command is implicitly provided by the command line framework and is not displayed in the help information. +> - isula-build client does not have any configuration file. When users want to use isula-build experimental features, they need to enable the environment variable ISULABUILD_CLI_EXPERIMENTAL on the client by command `export ISULABUILD_CLI_EXPERIMENTAL=enabled`. + +The following describes how to use these commands in detail. + + +### ctr-img: Container Image Management + +The isula-build command groups all container image management commands into the `ctr-img` command. The command is as follows: + +``` +isula-build ctr-img [command] +``` + +#### build: Container Image Build + +The subcommand build of the ctr-img command is used to build container images. The command is as follows: + +``` +isula-build ctr-img build [flags] +``` + +The build command contains the following flags: + +- --build-arg: string list, which contains variables required during the build process. +- --build-static: key value, which is used to build binary equivalence. Currently, the following key values are included: + - build-time: string, which indicates that a fixed timestamp is used to build a container image. The timestamp format is YYYY-MM-DD HH-MM-SS. +- -f, --filename: string, which indicates the path of the Dockerfiles. If this parameter is not specified, the current path is used. +- --format: string, which indicates the image format: oci | docker (ISULABUILD_CLI_EXPERIMENTAL needed to be enabled). +- --iidfile: string, which indicates the ID of the image output to a local file. +- -o, --output: string, which indicates the image export mode and path. +- --proxy: Boolean, which inherits the proxy environment variable on the host. The default value is true. +- --tag: string, which indicates the tag value of the image that is successfully built. +- --cap-add: string list, which contains permissions required by the RUN command during the build process. + +** The following describes the flags in detail. ** + +**\--build-arg** + +Parameters in the Dockerfile are inherited from the command lines. The usage is as follows: + +```sh +$ echo "This is bar file" > bar.txt +$ cat Dockerfile_arg +FROM busybox +ARG foo +ADD ${foo}.txt . +RUN cat ${foo}.txt +$ sudo isula-build ctr-img build --build-arg foo=bar -f Dockerfile_arg +STEP 1: FROM busybox +Getting image source signatures +Copying blob sha256:8f52abd3da461b2c0c11fda7a1b53413f1a92320eb96525ddf92c0b5cde781ad +Copying config sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b +Writing manifest to image destination +Storing signatures +STEP 2: ARG foo +STEP 3: ADD ${foo}.txt . +STEP 4: RUN cat ${foo}.txt +This is bar file +Getting image source signatures +Copying blob sha256:6194458b07fcf01f1483d96cd6c34302ffff7f382bb151a6d023c4e80ba3050a +Copying blob sha256:6bb56e4a46f563b20542171b998cb4556af4745efc9516820eabee7a08b7b869 +Copying config sha256:39b62a3342eed40b41a1bcd9cd455d77466550dfa0f0109af7a708c3e895f9a2 +Writing manifest to image destination +Storing signatures +Build success with image id: 39b62a3342eed40b41a1bcd9cd455d77466550dfa0f0109af7a708c3e895f9a2 +``` + +**\--build-static** + +Specifies a static build. That is, when isula-build is used to build a container image, differences between all timestamps and other build factors (such as the container ID and hostname) are eliminated. Finally, a container image that meets the static requirements is built. + +When isula-build is used to build a container image, assume that a fixed timestamp is given to the build subcommand and the following conditions are met: + +- The build environment is consistent before and after the upgrade. +- The Dockerfile is consistent before and after the build. +- The intermediate data generated before and after the build is consistent. +- The build commands are the same. +- The versions of the third-party libraries are the same. + +For container image build, isula-build supports the same Dockerfile. If the build environments are the same, the image content and image ID generated in multiple builds are the same. + +--build-static supports the key-value pair option in the k=v format. Currently, the following options are supported: + +- build-time: string, which indicates the fixed timestamp for creating a static image. The value is in the format of YYYY-MM-DD HH-MM-SS. The timestamp affects the attribute of the file for creating and modifying the time at the diff layer. + + Example: + + ```sh + $ sudo isula-build ctr-img build -f Dockerfile --build-static='build-time=2020-05-23 10:55:33' . + ``` + + In this way, the container images and image IDs built in the same environment for multiple times are the same. + +**\--format** +This option can be used when opening the experiment feature, and OCI image format will taken as the default image format. You can choose corresponding image format for building, for example, building oci image format image and docker image format image are listed below. + ```sh + $ export ISULABUILD_CLI_EXPERIMENTAL=enabled; sudo isula-build ctr-img build -f Dockerfile --format oci . + ``` + + ```sh + $ export ISULABUILD_CLI_EXPERIMENTAL=enabled; sudo isula-build ctr-img build -f Dockerfile --format docker . + ``` + +**\--iidfile** + +Run the following command to output the ID of the built image to a file: + +``` +isula-build ctr-img build --iidfile filename +``` + +For example, to export the container image ID to the testfile file, run the following command: + + ```sh +$ sudo isula-build ctr-img build -f Dockerfile_arg --iidfile testfile + ``` + + Check the container image ID in the testfile file. + + ```sh +$ cat testfile +76cbeed38a8e716e22b68988a76410eaf83327963c3b29ff648296d5cd15ce7b + ``` + +**\-o, --output** + +Currently, -o and --output support the following formats: + +- `isulad:image:tag`: directly pushes the image that is successfully built to iSulad, for example, `-o isulad:busybox:latest`. Pay attention to the following restrictions: + + - isula-build and iSulad must be on the same node. + - The tag must be configured. + - On the isula-build client, you need to temporarily save the successfully built image as `/var/tmp/isula-build-tmp-%v.tar` and then import it to iSulad. Ensure that the `/var/tmp/` directory has sufficient disk space. + +- `docker-daemon:image:tag`: directly pushes the successfully built image to Docker daemon, for example, `-o docker-daemon:busybox:latest`. Pay attention to the following restrictions: +- isula-build and Docker must be on the same node. + - The tag must be configured. + +- `docker://registry.example.com/repository:tag`: directly pushes the successfully built image to the remote image repository in Docker image format, for example, `-o docker://localhost:5000/library/busybox:latest`. + + +- `docker-archive:/:image:tag`: saves the successfully built image to the local host in Docker image format, for example, `-o docker-archive:/root/image.tar:busybox:latest`. + +When experiment feature is enabled, you can build image in OCI image format with: +- `oci://registry.example.com/repository:tag`: directly pushes the successfully built image to the remote image repository in OCI image format(OCI image format should be supported by the remote repository), for example, `-o oci://localhost:5000/library/busybox:latest`. + +- `oci-archive:/:image:tag`: saves the successfully built image to the local host in OCI image format, for example, `-o oci-archive:/root/image.tar:busybox:latest`. + + +In addition to flags, the build subcommand also supports an argument whose type is string and meaning is context, that is, the context of the Dockerfile build environment. The default value of this parameter is the current path where isula-build is executed. This path affects the path retrieved by the ADD and COPY commands of .dockerignore and Dockerfile. + +**\--proxy** + +Specifies whether the container started by the RUN command inherits the proxy-related environment variables http_proxy, https_proxy, ftp_proxy, no_proxy, HTTP_PROXY, HTTPS_PROXY, and FTP_PROXY. The default value of NO_PROXY is true. + +When a user configures proxy-related ARG or ENV in the Dockerfile, the inherited environment variables will be overwritten. + +>![](./public_sys-resources/icon-note.gif) **Note:** +> +> - If the client and daemon are not running on the same terminal, the environment variables that can be inherited are the environment variables of the terminal where the daemon is located. + +**\--tag** + +Specifies the tag of the image stored on the local disk after the image is successfully built. + +**\--cap-add** + +Run the following command to add the permission required by the RUN command during the build process: + +``` +isula-build ctr-img build --cap-add ${CAP} +``` + +Example: + +```sh +$ sudo isula-build ctr-img build --cap-add CAP_SYS_ADMIN --cap-add CAP_SYS_PTRACE -f Dockerfile +``` + +> **Note:** +> +> - A maximum of 100 container images can be concurrently built. +> - isula-build supports Dockerfiles with a maximum size of 1 MiB. +> - isula-build supports the .dockerignore file with a maximum size of 1 MiB. +> - Ensure that only the current user has the read and write permissions on the Dockerfiles to prevent other users from tampering with the files. +> - During the build, the RUN command starts the container to build in the container. Currently, isula-build supports the host network only. +> - isula-build only supports the tar compression format. +> - isula-build commits once after each image build stage is complete, instead of each time a Dockerfile line is executed. +> - isula-build does not support cache build. +> - isula-build starts the build container only when the RUN command is built. +> - Currently, the history function of Docker images is not supported. +> - The stage name can start with a digit. +> - The stage name can contain a maximum of 64 characters. +> - isula-build does not support resource restriction on a single Dockerfile build. If resource restriction is required, you can configure a resource limit on the isula-builder. +> - Currently, isula-build does not support a remote URL as the data source of the ADD command in the Dockerfile. +> - The local tarball exported using the 'docker-archive' and 'oci-archive' type are not compressed, you can manually compress the file as required. + +#### image: Viewing Local Persistent Build Images + +You can run the images command to view the images in the local persistent storage. + +```sh +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- ------------------------ ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- ------------------------ ------------ +localhost:5000/library/alpine latest a24bb4013296 2022-01-17 10:02:19 5.85 MB + 39b62a3342ee 2022-01-17 10:01:12 1.45 MB +--------------------------------------- ----------- ----------------- ------------------------ ------------ +``` + +>![](./public_sys-resources/icon-note.gif) **Note:** +> +> - The image size displayed by running the `isula-build ctr-img images` command may be different from that displayed by running the `docker images` command. When calculating the image size, isula-build directly calculates the total size of .tar packages at each layer, while Docker calculates the total size of files by decompressing the .tar package and traversing the diff directory. Therefore, the statistics are different. + +#### import: Importing a Basic Container Image + +A tar file in rootfs form can be imported into isula-build via the `ctr-img import` command. + +The command is as follows: + +``` +isula-build ctr-img import [flags] +``` + +Example: + +```sh +$ sudo isula-build ctr-img import busybox.tar mybusybox:latest +Getting image source signatures +Copying blob sha256:7b8667757578df68ec57bfc9fb7754801ec87df7de389a24a26a7bf2ebc04d8d +Copying config sha256:173b3cf612f8e1dc34e78772fcf190559533a3b04743287a32d549e3c7d1c1d1 +Writing manifest to image destination +Storing signatures +Import success with image id: "173b3cf612f8e1dc34e78772fcf190559533a3b04743287a32d549e3c7d1c1d1" +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- ------------------------ ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- ------------------------ ------------ +mybusybox latest 173b3cf612f8 2022-01-12 16:02:31 1.47 MB +--------------------------------------- ----------- ----------------- ------------------------ ------------ +``` + +>![](./public_sys-resources/icon-note.gif) **Note** +> +> - isula-build supports the import of container basic images with a maximum size of 1 GiB. + +#### load: Importing Cascade Images + +Cascade images are images that are saved to the local computer by running the docker save or isula-build ctr-img save command. The compressed image package contains a layer-by-layer image package named layer.tar. You can run the ctr-img load command to import the image to isula-build. + +The command is as follows: + +``` +isula-build ctr-img load [flags] +``` + +Currently, the following flags are supported: + +- -i, --input: path of the local .tar package. + +Example: + +```sh +$ sudo isula-build ctr-img load -i ubuntu.tar +Getting image source signatures +Copying blob sha256:cf612f747e0fbcc1674f88712b7bc1cd8b91cf0be8f9e9771235169f139d507c +Copying blob sha256:f934e33a54a60630267df295a5c232ceb15b2938ebb0476364192b1537449093 +Copying blob sha256:943edb549a8300092a714190dfe633341c0ffb483784c4fdfe884b9019f6a0b4 +Copying blob sha256:e7ebc6e16708285bee3917ae12bf8d172ee0d7684a7830751ab9a1c070e7a125 +Copying blob sha256:bf6751561805be7d07d66f6acb2a33e99cf0cc0a20f5fd5d94a3c7f8ae55c2a1 +Copying blob sha256:c1bd37d01c89de343d68867518b1155cb297d8e03942066ecb44ae8f46b608a3 +Copying blob sha256:a84e57b779297b72428fc7308e63d13b4df99140f78565be92fc9dbe03fc6e69 +Copying blob sha256:14dd68f4c7e23d6a2363c2320747ab88986dfd43ba0489d139eeac3ac75323b2 +Copying blob sha256:a2092d776649ea2301f60265f378a02405539a2a68093b2612792cc65d00d161 +Copying blob sha256:879119e879f682c04d0784c9ae7bc6f421e206b95d20b32ce1cb8a49bfdef202 +Copying blob sha256:e615448af51b848ecec00caeaffd1e30e8bf5cffd464747d159f80e346b7a150 +Copying blob sha256:f610bd1e9ac6aa9326d61713d552eeefef47d2bd49fc16140aa9bf3db38c30a4 +Copying blob sha256:bfe0a1336d031bf5ff3ce381e354be7b2bf310574cc0cd1949ad94dda020cd27 +Copying blob sha256:f0f15db85788c1260c6aa8ad225823f45c89700781c4c793361ac5fa58d204c7 +Copying config sha256:c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e +Writing manifest to image destination +Storing signatures +Loaded image as c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e +``` + +>![](./public_sys-resources/icon-note.gif) **Note:** +> +> - isula-build allows you to import a container image with a maximum size of 50 GB. +> - isula-build automatically recgonizes the image format and loads it from the image layers file. + + + +#### rm: Deleting a Local Persistent Image + +You can run the rm command to delete an image from the local persistent storage. The command is as follows: + +``` +isula-build ctr-img rm IMAGE [IMAGE...] [FLAGS] +``` + +Currently, the following flags are supported: + +- -a, --all: deletes all images stored locally. +- -p, --prune: deletes all images that are stored locally and do not have tags. + +Example: + +```sh +$ sudo isula-build ctr-img rm -p +Deleted: sha256:78731c1dde25361f539555edaf8f0b24132085b7cab6ecb90de63d72fa00c01d +Deleted: sha256:eeba1bfe9fca569a894d525ed291bdaef389d28a88c288914c1a9db7261ad12c +``` + +#### save: Exporting Cascade Images + +You can run the save command to export the cascade images to the local disk. The command is as follows: + +``` +isula-build ctr-img save [REPOSITORY:TAG]|imageID -o xx.tar +``` + +Currently, the following flags are supported: + +- -f, --format: which indicates the exported image format: oci | docker (ISULABUILD_CLI_EXPERIMENTAL needed to be enabled) +- -o, --output: which indicates the local path for storing the exported images. + +The following example shows how to export an image in `image/tag` format: + +```sh +$ sudo isula-build ctr-img save busybox:latest -o busybox.tar +Getting image source signatures +Copying blob sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a +Copying blob sha256:824082a6864774d5527bda0d3c7ebd5ddc349daadf2aa8f5f305b7a2e439806f +Copying blob sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef +Copying config sha256:21c3e96ac411242a0e876af269c0cbe9d071626bdfb7cc79bfa2ddb9f7a82db6 +Writing manifest to image destination +Storing signatures +Save success with image: busybox:latest +``` + +The following example shows how to export an image in `ImageID` format: + +```sh +$ sudo isula-build ctr-img save 21c3e96ac411 -o busybox.tar +Getting image source signatures +Copying blob sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a +Copying blob sha256:824082a6864774d5527bda0d3c7ebd5ddc349daadf2aa8f5f305b7a2e439806f +Copying blob sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef +Copying config sha256:21c3e96ac411242a0e876af269c0cbe9d071626bdfb7cc79bfa2ddb9f7a82db6 +Writing manifest to image destination +Storing signatures +Save success with image: 21c3e96ac411 +``` + +The following example shows how to export multiple images to the same tarball: + +```sh +$ sudo isula-build ctr-img save busybox:latest nginx:latest -o all.tar +Getting image source signatures +Copying blob sha256:eb78099fbf7fdc70c65f286f4edc6659fcda510b3d1cfe1caa6452cc671427bf +Copying blob sha256:29f11c413898c5aad8ed89ad5446e89e439e8cfa217cbb404ef2dbd6e1e8d6a5 +Copying blob sha256:af5bd3938f60ece203cd76358d8bde91968e56491daf3030f6415f103de26820 +Copying config sha256:b8efb18f159bd948486f18bd8940b56fd2298b438229f5bd2bcf4cedcf037448 +Writing manifest to image destination +Storing signatures +Getting image source signatures +Copying blob sha256:e2d6930974a28887b15367769d9666116027c411b7e6c4025f7c850df1e45038 +Copying config sha256:a33de3c85292c9e65681c2e19b8298d12087749b71a504a23c576090891eedd6 +Writing manifest to image destination +Storing signatures +Save success with image: [busybox:latest nginx:latest] +``` + +>![](./public_sys-resources/icon-note.gif) **NOTE:** +> +>- Save exports an image in .tar format by default. If necessary, you can save the image and then manually compress it. +>- When exporting an image using image name, specify the entire image name with format: REPOSITORY:TAG. + + +#### tag: Tagging Local Persistent Images + +You can run the tag command to add a tag to a local persistent container image. The command is as follows: + +``` +isula-build ctr-img tag / busybox:latest +``` + +Example: + +```sh +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- -------------------------- ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- -------------------------- ------------ +alpine latest a24bb4013296 2020-05-29 21:19:46 5.85 MB +--------------------------------------- ----------- ----------------- -------------------------- ------------ +$ sudo isula-build ctr-img tag a24bb4013296 alpine:v1 +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- ------------------------ ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- ------------------------ ------------ +alpine latest a24bb4013296 2020-05-29 21:19:46 5.85 MB +alpine v1 a24bb4013296 2020-05-29 21:19:46 5.85 MB +--------------------------------------- ----------- ----------------- ------------------------ ------------ +``` + +#### pull: Pulling an Image To a Local Host + +Run the pull command to pull an image from a remote image repository to a local host. Command format: + +``` +isula-build ctr-img pull REPOSITORY[:TAG] +``` + +Example: + +```sh +$ sudo isula-build ctr-img pull example-registry/library/alpine:latest +Getting image source signatures +Copying blob sha256:8f52abd3da461b2c0c11fda7a1b53413f1a92320eb96525ddf92c0b5cde781ad +Copying config sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b +Writing manifest to image destination +Storing signatures +Pull success with image: example-registry/library/alpine:latest +``` + +#### push: Pushing a Local Image to a Remote Repository + +Run the push command to push a local image to a remote repository. Command format: + +``` +isula-build ctr-img push REPOSITORY[:TAG] +``` + +Currently, the following flags are supported: + +- -f, --format: which indicates the pushed image format: oci | docker (ISULABUILD_CLI_EXPERIMENTAL needed to be enabled) + +Example: + +```sh +$ sudo isula-build ctr-img push example-registry/library/mybusybox:latest +Getting image source signatures +Copying blob sha256:d2421964bad195c959ba147ad21626ccddc73a4f2638664ad1c07bd9df48a675 +Copying config sha256:f0b02e9d092d905d0d87a8455a1ae3e9bb47b4aa3dc125125ca5cd10d6441c9f +Writing manifest to image destination +Storing signatures +Push success with image: example-registry/library/mybusybox:latest +``` + +>![](./public_sys-resources/icon-note.gif) **NOTE:** +> +>- Before pushing an image, log in to the corresponding image repository. + + +### info: Viewing the Operating Environment and System Information + +You can run the isula-build info command to view the running environment and system information of isula-build. The command is as follows: + +``` + isula-build info [flags] +``` + +The following flags are supported: + +- -H, --human-readable: Boolean. The memory information is printed in the common memory format. The value is 1000 power. +- -V, --verbose: Boolean. The memory usage is displayed during system running. + +Example: + +```sh +$ sudo isula-build info -H + General: + MemTotal: 7.63 GB + MemFree: 757 MB + SwapTotal: 8.3 GB + SwapFree: 8.25 GB + OCI Runtime: runc + DataRoot: /var/lib/isula-build/ + RunRoot: /var/run/isula-build/ + Builders: 0 + Goroutines: 12 + Store: + Storage Driver: overlay + Backing Filesystem: extfs + Registry: + Search Registries: + oepkgs.net + Insecure Registries: + localhost:5000 + oepkgs.net + Runtime: + MemSys: 68.4 MB + HeapSys: 63.3 MB + HeapAlloc: 7.41 MB + MemHeapInUse: 8.98 MB + MemHeapIdle: 54.4 MB + MemHeapReleased: 52.1 MB +``` + +### login: Logging In to the Remote Image Repository + +You can run the login command to log in to the remote image repository. The command is as follows: + +``` + isula-build login SERVER [FLAGS] +``` + +Currently, the following flags are supported: + +``` + Flags: + -p, --password-stdin Read password from stdin + -u, --username string Username to access registry +``` + +Enter the password through stdin. In the following example, the password in creds.txt is transferred to the stdin of isula-build through a pipe for input. + +```sh + $ cat creds.txt | sudo isula-build login -u cooper -p mydockerhub.io + Login Succeeded +``` + +Enter the password in interactive mode. + +```sh + $ sudo isula-build login mydockerhub.io -u cooper + Password: + Login Succeeded +``` + +### logout: Logging Out of the Remote Image Repository + +You can run the logout command to log out of the remote image repository. The command is as follows: + +``` + isula-build logout [SERVER] [FLAGS] +``` + +Currently, the following flags are supported: + +``` + Flags: + -a, --all Logout all registries +``` + +Example: + +```sh + $ sudo isula-build logout -a + Removed authentications +``` + +### version: Querying the isula-build Version + +You can run the version command to view the current version information. + +```sh +$ sudo isula-build version +Client: + Version: 0.9.5 + Go Version: go1.15.7 + Git Commit: 83274e0 + Built: Wed Jan 12 15:32:55 2022 + OS/Arch: linux/amd64 + +Server: + Version: 0.9.5 + Go Version: go1.15.7 + Git Commit: 83274e0 + Built: Wed Jan 12 15:32:55 2022 + OS/Arch: linux/amd64 +``` + +### manifest: Manifest List Management + +The manifest list contains the image information corresponding to different system architectures. You can use the same manifest (for example, openeuler:latest) in different architectures to obtain the image of the corresponding architecture. The manifest contains the create, annotate, inspect, and push subcommands. + +>![](./public_sys-resources/icon-note.gif) **NOTE:** +> +> - manifest is an experiment feature. When using this feature, you need to enable the experiment options on the client and server. For details, see Client Overview and Configuring Services. + +#### create: Manifest List Creation + +The create subcommand of the manifest command is used to create a manifest list. The command prototype is as follows: + +``` +isula-build manifest create MANIFEST_LIST MANIFEST [MANIFEST...] +``` + +You can specify the name of the manifest list and the remote images to be added to the list. If no remote image is specified, an empty manifest list is created. + +Example: + +```sh +$ sudo isula-build manifest create openeuler localhost:5000/openeuler_x86:latest localhost:5000/openeuler_aarch64:latest +``` + +#### annotate: Manifest List Update + +The annotate subcommand of the manifest command is used to update the manifest list. The command prototype is as follows: + +``` +isula-build manifest annotate MANIFEST_LIST MANIFEST [flags] +``` + +You can specify the manifest list to be updated and the images in the manifest list, and use flags to specify the options to be updated. This command can also be used to add new images to the manifest list. + +Currently, the following flags are supported: + +- --arch: Applicable architecture of the rewritten image. The value is a string. +- --os: Indicates the applicable system of the image. The value is a string. +- --os-features: Specifies the OS features required by the image. This parameter is a string and rarely used. +- --variant: Variable of the image recorded in the list. The value is a string. + +Example: + +```sh +$ sudo isula-build manifest annotate --os linux --arch arm64 openeuler:latest localhost:5000/openeuler_aarch64:latest +``` + +#### inspect: Manifest List Inspect + +The inspect subcommand of the manifest command is used to query the manifest list. The command prototype is as follows: + +``` +isula-build manifest inspect MANIFEST_LIST +``` + +Example: + +```sh +$ sudo isula-build manifest inspect openeuler:latest +{ + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "size": 527, + "digest": "sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff", + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "size": 527, + "digest": "sha256:f814888b4bb6149bd39ba8375a1932fb15071b4dbffc7f76c7b602b06abbb820", + "platform": { + "architecture": "arm64", + "os": "linux" + } + } + ] +} +``` + +#### push: Manifest List Push to the Remote Repository. + +The manifest subcommand push is used to push the manifest list to the remote repository. The command prototype is as follows: + +``` +isula-build manifest push MANIFEST_LIST DESTINATION +``` + +Example: + +```sh +$ sudo isula-build manifest push openeuler:latest localhost:5000/openeuler:latest +``` + +## Directly Integrating a Container Engine + +isula-build can be integrated with iSulad or Docker to import the built container image to the local storage of the container engine. + +### Integration with iSulad + +Images that are successfully built can be directly exported to the iSulad. + +Example: + +```sh +$ sudo isula-build ctr-img build -f Dockerfile -o isulad:busybox:2.0 +``` + +Specify iSulad in the -o parameter to export the built container image to iSulad. You can query the image using isula images. + +```sh +$ sudo isula images +isula images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox 2.0 2d414a5cad6d 2020-08-01 06:41:36 5.577 MB +``` + +>![](./public_sys-resources/icon-note.gif) **Note:** +> +> - It is required that isula-build and iSulad be on the same node. +> - When an image is directly exported to the iSulad, the isula-build client needs to temporarily store the successfully built image as `/var/lib/isula-build/tmp/[buildid]/isula-build-tmp-%v.tar` and then import it to the iSulad. Ensure that the /var/tmp/ directory has sufficient disk space. If the isula-build client process is killed or Ctrl+C is pressed during the export, you need to manually clear the `/var/lib/isula-build/tmp/[buildid]/isula-build-tmp-%v.tar` file. + +### Integration with Docker + +Images that are successfully built can be directly exported to the Docker daemon. + +Example: + +```sh +$ sudo isula-build ctr-img build -f Dockerfile -o docker-daemon:busybox:2.0 +``` + +Specify docker-daemon in the -o parameter to export the built container image to Docker. You can run the docker images command to query the image. + +```sh +$ sudo docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox 2.0 2d414a5cad6d 2 months ago 5.22MB +``` + +>![](./public_sys-resources/icon-note.gif) **Note:** +> +> - The isula-build and Docker must be on the same node. + +## Precautions +This chapter is something about constraints, limitations and differences with `docker build` when use isula-builder build images. + +### Constraints or Limitations +1. When export an image to [`iSulad`](https://gitee.com/openeuler/iSulad/blob/master/README.md), a tag is necessary. +2. Because oci runtime binary will be called by `isula-builder` when executing `RUN` command, the integrity of the runtime binary should be guaranteed by the user. +3. DataRoot should not be set in tmpfs. +4. `Overlay2` is the only storage driver supported by isula-builder currently. +5. Docker image is the only image format supported by isula-builder currently. +6. File permission of Dockerfile is strongly recommended to restrict as 0600, avoiding tampering by other users. +7. Only host network is supported by `RUN` command currently. +8. When export image to a tarball, only `tar` compression format supported by isula-builder currently. +9. The base image tarball szie is limited to 1G when import a base image to the store. + + +### Differences with "docker build" +The `isula-build` compatible with [Dockerfile specification](https://docs.docker.com/engine/reference/builder), but there are also some subtle differences between `isula-builder` and `docker build` are as follows: +1. Commit every build stage, but not every line. +2. Build cache is not supported by isula-builder. +3. Only `RUN` command will be executed in the build container. +4. Build history is not supported currently. +5. Stage name can be start with a number. +6. The length of the stage name is limited to 64 in `isula-builder`. +7. `ADD` command's source can not support remote URL currently. +8. Not support resource quota for a single build request, but you can limit the `isula-builder` instead. +9. `isula-builder` add each origin layer tar size to get the image size, but docker only uses the diff content of each layer. So the image size listed by `isula-builder images` is a little different. +10. Image name should be the format **NAME:TAG**. For example `busybox:latest`, the `latest` should not be ommitted. + +## Appendix + + +### Command Line Parameters + +**Table 1** Parameters in the ctr-img build command + +| **Command** | **Parameter** | **Description** | +| ------------- | -------------- | ------------------------------------------------------------ | +| ctr-img build | --build-arg | String list, which contains variables required during the build. | +| | --build-static | Key value, which is used to build binary equivalence. Currently, the following key values are included: - build-time: string, which indicates that a fixed timestamp is used to build a container image. The timestamp format is YYYY-MM-DD HH-MM-SS. | +| | -f, --filename | String, which indicates the path of the Dockerfiles. If this parameter is not specified, the current path is used. | +| | --format | String, which indicates the image format: oci \| docker (ISULABUILD_CLI_EXPERIMENTAL needed to be enabled). | +| | --iidfile | String, which indicates the ID of the image output to a local file. | +| | -o, --output | String, which indicates the image export mode and path.| +| | --proxy | Boolean, which inherits the proxy environment variable on the host. The default value is true. | +| | --tag | String, which indicates the tag value of the image that is successfully built. | +| | --cap-add | String list, which contains permissions required by the RUN command during the build process.| + +**Table 2** Parameters in the ctr-img load command + +| **Command** | **Parameter** | **Description** | +| ------------ | ----------- | --------------------------------- | +| ctr-img load | -i, --input | String, Path of the local .tar package to be imported.| + +**Table 3** Parameters in the ctr-img push command + +| **Command** | **Parameter** | **Description** | +| ------------ | ----------- | --------------------------------- | +| ctr-img push | -f, --format | String, which indicated the pushed image format: oci \| docker (ISULABUILD_CLI_EXPERIMENTAL needed to be enabled).| + +**Table 4** Parameters in the ctr-img rm command + +| **Command** | **Parameter** | **Description** | +| ---------- | ----------- | --------------------------------------------- | +| ctr-img rm | -a, --all | Boolean, which is used to delete all local persistent images. | +| | -p, --prune | Boolean, which is used to delete all images that are stored persistently on the local host and do not have tags. | + +**Table 5** Parameters in the ctr-img save command + +| **Command** | **Parameter** | **Description** | +| ------------ | ------------ | ---------------------------------- | +| ctr-img save | -o, --output | String, which indicates the local path for storing the exported images.| +| ctr-img save | -f, --format | String, which indicates the exported image format: oci \| docker (ISULABUILD_CLI_EXPERIMENTAL needed to be enabled).| + +**Table 6** Parameters in the login command + +| **Command** | **Parameter** | **Description** | +| -------- | -------------------- | ------------------------------------------------------- | +| login | -p, --password-stdin | Boolean, which indicates whether to read the password through stdin. or enter the password in interactive mode. | +| | -u, --username | String, which indicates the username for logging in to the image repository.| + +**Table 7** Parameters in the logout command + +| **Command** | **Parameter** | **Description** | +| -------- | --------- | ------------------------------------ | +| logout | -a, --all | Boolean, which indicates whether to log out of all logged-in image repositories. | + +**Table 8** Parameters in the manifest annotate command + +| **Command** | **Parameter** | **Description** | +| ----------------- | ------------- | ---------------------------- | +| manifest annotate | --arch | Set architecture | +| | --os | Set operating system | +| | --os-features | Set operating system feature | +| | --variant | Set architecture variant | + +### Communication Matrix + +The isula-build component processes communicate with each other through the Unix socket file. No port is used for communication. + +### File and Permission + +- All isula-build operations must be performed by the root user. To perform operations as a non-privileged user, you need to configure the --group option. + +- The following table lists the file permissions involved in the running of isula-build. + +| **File Path** | **File/Folder Permission** | **Description** | +| ------------------------------------------- | ------------------- | ------------------------------------------------------------ | +| /usr/bin/isula-build | 550 | Binary file of the command line tool. | +| /usr/bin/isula-builder | 550 | Binary file of the isula-builder process on the server. | +| /usr/lib/systemd/system/isula-build.service | 640 | systemd configuration file, which is used to manage the isula-build service. | +| /usr/isula-build | 650 | Root directory of the isula-builder configuration file. | +| /etc/isula-build/configuration.toml | 600 | General isula-builder configuration file, which sets the isula-builder log level, persistency directory, runtime directory, and OCI runtime. | +| /etc/isula-build/policy.json | 600 | Syntax file of the signature verification policy file. | +| /etc/isula-build/registries.toml | 600 | Configuration file of each image repository, including the available image repository list and image repository blacklist. | +| /etc/isula-build/storage.toml | 600 | Configuration file for local persistent storage, including the configuration of the used storage driver. | +| /etc/isula-build/isula-build.pub | 400 | Asymmetric encryption public key file. | +| /var/run/isula_build.sock | 660 | Local socket of isula-builder. | +| /var/lib/isula-build | 700 | Local persistency directory. | +| /var/run/isula-build | 700 | Local runtime directory. | +| /var/lib/isula-build/tmp/[buildid]/isula-build-tmp-*.tar | 644 | Local directory for temporarily storing the images when they are exported to the iSulad. | diff --git a/docs/en/docs/Container/isula-transform.md b/docs/en/docs/Container/isula-transform.md new file mode 100644 index 0000000000000000000000000000000000000000..fa3e328a9d5c135347b9375582e60e43c085fdb3 --- /dev/null +++ b/docs/en/docs/Container/isula-transform.md @@ -0,0 +1,164 @@ +# isula-transform Container Migration Tool + +The isula-transform container migration tool is launched together with iSulad 2.0. It is used to migrate containers started by the Docker container engine to the iSulad engine for management. After the migration is complete, you can use iSulad to manage container lifecycles. + + + +- [isula-transform Container Migration Tool](#isula-transform-container-migration-tool) + - [Quick Guide](#quick-guide) + - [Installation and Deployment](#installation-and-deployment) + - [Example](#example) + - [Usage Guidelines](#usage-guidelines) + - [Usage](#usage) + - [Parameter Description](#parameter-description) + - [Precautions](#precautions) + - [Appendix](#appendix) + - [Communication Matrix and Permission Description](#communication-matrix-and-permission-description) + - [Communication Matrix](#communication-matrix) + - [File and Permission](#file-and-permission) + + + +## Quick Guide + +### Installation and Deployment + +Perform the following steps to install isula-transform: + +- Installation through yum (Recommended) + + ``` shell + sudo yum install -y isula-transform + ``` + +* Installation through RPM + + ``` shell + sudo rpm -ivh isula-transform-0.9.1-1.oe1.x86_64.rpm + ``` + + Note: The isula-transform running depends on the iSulad and Docker Engine. If you use RPM installation mode, ensure that iSulad and Docker Engine have been installed in the environment. + + +### Example + +The following example describes how to migrate containers started by the Docker container engine to the iSulad engine for management. + +1. Start a Docker container in the host network, and mount the data volume. + + ``` shell + $ mkdir /tmp/test && echo "hello isula 2.0" > /tmp/test/hello.txt + $ sudo docker run -tid --network host -v /tmp/test:/test rnd-dockerhub.huawei.com/official/ubuntu bash + b7ebc79a83297d781069308311cd1456539ab663fc284c80386a941af1a78685 + $ sudo docker exec b7ebc7 cat /test/hello.txt + hello isula 2.0 + $ sudo docker exec b7ebc7 bash -c "echo 'hello isula-transform' > /root/world.txt" + $ sudo docker exec b7ebc7 cat /root/world.txt + hello isula-transform + ``` + +2. Use isula-transform to migrate the container (specify the first several digits or the full container ID). + + ``` shell + $ sudo isula-transform b7ebc7 + transform b7ebc7: success + ``` + +3. Restart iSulad to view the container. + + ``` shell + $ systemctl restart isulad && sudo isula ps -a + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + b7ebc79a8329 rnd-dockerhub.huawei.com/official/ubuntu "bash" 8 minutes ago Exited (0) 2 minutes ago inspiring_dirac + ``` + +4. Start the container and check data. If the container is started with complete data, it is migrated successfully. + + ``` shell + $ sudo isula start b7ebc7 + $ sudo isula exec b7ebc7 cat /test/hello.txt + hello isula 2.0 + $ sudo isula exec b7ebc7 cat /root/world.txt + hello isula-transform + ``` + +5. Delete the container. + + ``` shell + $ sudo isula rm -f b7ebc7 + b7ebc79a83297d781069308311cd1456539ab663fc284c80386a941af1a78685 + $ sudo isula ps -a + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + ``` + +## Usage Guidelines + +### Usage + +isula-transform supports the following functions: + +1. Migrate a specified container. + + Run the following command to migrate a specified Docker container by specifying its container ID: + + ``` shell + isula-transform [OPTIONS] container_id [container_id...] + ``` + + Multiple container IDs can be specified at a time. To use a short ID, ensure that the short ID is unique. + +2. Migrate all containers. + + Add the --all option to migrate all Docker containers in running or pause state: + + ``` shell + isula-transform [OPTIONS] --all + ``` + + If both the container ID and the --all option are specified, isula-transform ignores the input container ID. + +For details about other configurable parameters, see [Parameter Description](#parameter-description). + +### Parameter Description + +OPTIONS in the preceding commands indicates optional parameters. For details, see the following table: + +| Option | Description | +| -------------- | :----------------------------------------------------------- | +| --log | Log file path. Default value: /var/log/isula-kits/transform.log | +| --log-level | The lowest level of output logs. Values can be debug, info, warn, and error. Default value: info | +| --docker-graph | Docker graph path. Default value: /var/lib/docker | +| --docker-state | Docker state path. Default value: /var/run/docker | + + +### Precautions + +- isula-transform applies to non-cluster scenarios. In cluster scenarios such as Kubernetes, you are advised to configure the iSulad engine and start a new container. +- isula-transform supports the migration of containers created by Docker 18.09. Containers must be in running or pause state. +- After migration, the original Docker container is in pause state. You can determine its lifecycle. +- isula-transform requires that the migrated Docker container be started using --network=host or reuse the network stack of the container started in the host network. In the latter scenario, both containers need to be migrated, and the parent container needs to be started first after the migration. +- If the shared namespace (pid, ipc) is involved, both parent and child containers need to be migrated. After the migration, the parent container needs to be started first. +- If the cgroup-parent is specified, the cgroup created by the Docker engine for the migrated Docker container has not been destroyed, the iSulad engine cannot create cgroups for the new container. The new container can only be started after the migrated Docker container has been stopped or deleted +- Docker container's parameters that are not supported by the iSula container will be discarded after migration. + +## Appendix + +### Communication Matrix and Permission Description + +#### Communication Matrix + +When isula-transform is running, it functions as a client to access dockerd on the server. isula-transform and dockerd communicate with each other through the Unix socket file. The path is as follows: + +| Server | Socket path | +|---|:---| +|dockerd|/var/run/docker.sock| + +#### File and Permission + +- The root permission is required for running isula-transform. +- The following table lists file permissions involved in isula-transform running. + + | File Path | Permission | Description | + |:---|---|:---| + |/usr/bin/isula-transform|0550| Executable binary file| + |/Var/log/isula-kits/transform.log|0600| Default isula-transform log file| diff --git a/content/en/docs/Container/isulad-container-engine.md b/docs/en/docs/Container/isulad-container-engine.md similarity index 93% rename from content/en/docs/Container/isulad-container-engine.md rename to docs/en/docs/Container/isulad-container-engine.md index 5e5299c966d38474dfd602f0b4f100388a2609ba..54cd5ca2112776a9d584b4eb2e5132607a5dd743 100644 --- a/content/en/docs/Container/isulad-container-engine.md +++ b/docs/en/docs/Container/isulad-container-engine.md @@ -8,5 +8,5 @@ Compared with Docker, iSulad is a new container solution with a unified architec **Figure 1** Unified container architecture -![](figures/en-us_image_0183048952.png) +![](./figures/en-us_image_0183048952.png) diff --git a/docs/en/docs/Container/local-volume-management.md b/docs/en/docs/Container/local-volume-management.md new file mode 100644 index 0000000000000000000000000000000000000000..df43aed406db776f03cf7e8d620267c2166cd85a --- /dev/null +++ b/docs/en/docs/Container/local-volume-management.md @@ -0,0 +1,206 @@ +#Local Volume Management + + + +- [Local Volume Management](#local-volume-management) + - [Overview](#overview) + - [Precautions](#precautions) + - [Usage](#usage) + - [Using the -v Option to Mount Data](#using-the--v-option-to-mount-data) + - [**Format**](#format) + - [**Functions**](#functions) + - [**Parameter Description**](#parameter-description) + - [**Examples**](#examples) + - [Using the --mount Option to Mount Data](#using-the---mount-option-to-mount-data) + - [**Format**](#format-1) + - [**Functions**](#functions-1) + - [**Parameter Description**](#parameter-description-1) + - [**Examples**](#examples-1) + - [Reusing the Mounting Configuration in Other Containers](#reusing-the-mounting-configuration-in-other-containers) + - [**Format**](#format-2) + - [**Functions**](#functions-2) + - [**Parameter Description**](#parameter-description-2) + - [**Examples**](#examples-2) + - [Using the Anonymous Volume in an Image](#using-the-anonymous-volume-in-an-image) + - [Querying a Volume](#querying-a-volume) + - [**Format**](#format-3) + - [**Functions**](#functions-3) + - [**Parameter Description**](#parameter-description-3) + - [**Examples**](#examples-3) + - [Deleting a Volume](#deleting-a-volume) + - [**Format**](#format-4) + - [**Functions**](#functions-4) + - [**Parameter Description**](#parameter-description-4) + - [**Examples**](#examples-4) + - [Precautions](#precautions-1) + - [Conflict Combination Rules](#conflict-combination-rules) + - [Differences Between iSula and Docker](#differences-between-isula-and-docker) + + + +## Overview + +After a container managed by iSula is destroyed, all data in the container is destroyed. If you want to retain data after the container is destroyed, a data persistence mechanism is required. iSula allows files, directories, or volumes on a host to be mounted to a container at runtime. You can write the data to be persisted to the mount point in the container. After the container is destroyed, the files, directories, and volumes on the host are retained. If you need to delete a file, directory, or volume on the host, you can manually delete the file or directory, or run the iSula command to delete the volume. Currently, the iSula supports only local volume management. Local volumes are classified into named volumes and anonymous volumes. A volume whose name is specified by a user is called a named volume. If a user does not specify a name for a volume, iSula automatically generates a name (a 64-bit random number) for the volume, that is, an anonymous volume. + +The following describes how to use iSula to manage local volumes. + +## Precautions + +- The volume name contains 2 to 64 characters and complies with the regular expression ^[a-zA-Z0-9][a-zA-Z0-9_.-]{1,63}$. That is, the first character of the volume name must be a letter or digit, and other characters can be letters, digits, underscores (_), periods (.), and hyphens (-). +- During container creation, if data exists at the mount point of the container corresponding to the volume, the data is copied to the volume by default. If the iSula breaks down or restarts or the system is powered off during the copy process, the data in the volume may be incomplete. In this case, you need to manually delete the volume or the data in the volume to ensure that the data is correct and complete. + +## Usage + +### Using the -v Option to Mount Data + +#### **Format** + +```shell +isula run -v [SRC:]DST[:MODE,MODE...] IMAGE +``` + +#### **Functions** + +When you create and run a container, use the -v/--volume option to mount the files, directories, or volumes on the host to the container for data persistence. + +#### **Parameter Description** +- SRC: Path of the file, directory, or volume to be mounted on the host. If the value is an absolute path, a file or folder on the host is mounted. If the value is a volume name, a volume is mounted. If this parameter is not specified, an anonymous volume is mounted. If a folder or volume does not exist, iSula creates a folder or volume and then mounts it. +- DST: Mount path in the container. The value must be an absolute path. +- MODE: When the source to be mounted is a directory or file, the valid parameters are ro, rw, z, Z, private, rprivate, slave, rslave, shared, and rshared. Only one parameter of the same type can be configured. If the source is a volume, the valid parameters are ro, rw, z, Z, and nocopy. Only one parameter of the same type can be configured. Use commas (,) to separate multiple attributes. The parameters are described as follows: + +| Parameter | Description | +| -------- | -----------------------------------------------| +| ro | The mount point in the container is mounted in read-only mode. | +| rw | The mount point in the container is mounted in read/write mode. | +| z | If SELinux is enabled, add the SELinux share label during mounting. | +| Z | If SELinux is enabled, add the SELinux private label during mounting. | +| private | The mount point in the container is mounted in private propagation mode. | +| rprivate | The mount point in the container is recursively mounted in private propagation mode. | +| slave | The mount point in the container is mounted in subordinate propagation mode. | +| rslave | The mount point in the container is recursively mounted in subordinate propagation mode. | +| shared | The mount point in the container is mounted in shared propagation mode. | +| rshared | The mount point in the container is recursively mounted in shared propagation mode. | +| nocopy | Data at the mount point is not copied. If this parameter is not set, data is copied by default. In addition, if data already exists in the volume, the data will not be copied. | + + +#### **Examples** +Run the container based on BusyBox, create or mount a volume named vol to the /vol directory of the container, and set the mount point to read-only. In addition, if data exists at the mount point in the container, the data is not copied. +```shell +isula run -v vol:/vol:ro,nocopy busybox +``` + +### Using the --mount Option to Mount Data + +#### **Format** +```shell +isula run --mount [type=TYPE,][src=SRC,]dst=DST[,KEY=VALUE] busybox +``` + +#### **Functions** +When you create and run a container, use the --mount option to mount the files, directories, or volumes on the host to the container for data persistence. + +#### **Parameter Description** +- type: Type of data mounted to the container. The value can be bind, volume, or squashfs. If this parameter is not specified, the default value is volume. +- src: Path of the file, directory, or volume to be mounted on the host. If the value is an absolute path, the file or directory on the host is mounted. If the value is a volume name, a volume is mounted. If this parameter is not specified, the volume is an anonymous volume. If a folder or volume does not exist, iSula creates a file or volume and then mounts it. The keyword src is also called source. +- dst: Mount path in the container. The value must be an absolute path. The keyword dst is also called destination or target. +- KEY=VALUE: Parameter of --mount. The values are as follows: + +| KEY | VALUE | +| ------------------------------ | --------------------------------------------------------------------------- | +| selinux-opts/bind-selinux-opts | z or Z. z indicates that if SELinux is enabled, the SELinux share label is added during mounting. Z indicates that if SELinux is enabled, the SELinux private label is added during mounting. +| ro/readonly | 0/false indicates that the mount is read/write. 1/true indicates that the mount is read-only. If this parameter is not specified, the mount is read-only. The parameter is supported only when type is set to bind. | +| volume-nocopy | Data at the mount point is not copied. If this parameter is not specified, data is copied by default. In addition, if data already exists in the volume, the data will not be copied. This parameter is supported only when type is set to volume. | + +#### **Examples** +Run the container based on BusyBox, create or mount a volume named vol to the /vol directory of the container, and set the mount point to read-only. In addition, if data exists at the mount point in the container, the data is not copied. +```shell +isula run --mount type=volume,src=vol,dst=/vol,ro=true,volume-nocopy=true busybox +``` + +### Reusing the Mounting Configuration in Other Containers + +#### **Format** +```shell +isula run --volumes-from CON1[:MODE] busybox +``` + +#### **Functions** +When you create and run a container, use the --volumes-from option to indicate that the mount point configuration includes that of the CON1 container. You can set multiple --volumes-from options. + +#### **Parameter Description** +- CON1: Name or ID of the container whose mount point is reused. +- MODE: If the value is ro, the mount point is read-only. If the value is rw, the mount point is read/write. + +#### **Examples** +Assume that a container named container1 has been configured with a volume vol1 to the container directory /vol1, and a container named container2 has been configured with a volume vol2 to the container directory /vol2. Run a new container to reuse the mounting configuration of container1 and container2. That is, volume vol1 is mounted to the /vol1 directory of the container, and volume vol2 is mounted to the /vol2 directory of the container. +```shell +isula run --volumes-from container1 --volumes-from container2 busbyox +``` + +### Using the Anonymous Volume in an Image + +You do not need to perform any configuration to use the anonymous volume in the image. If an anonymous volume is configured in the image, iSula automatically creates an anonymous volume and mounts it to the specified path in the image at container runtime. You can write data to the mount point of an anonymous volume in a container for data persistence. + +### Querying a Volume + +#### **Format** +```shell +isula volume ls [OPTIONS] +``` + +#### **Functions** +This command is used to query all volumes managed by iSula. + +#### **Parameter Description** +Option: +- -q,--quit: If this parameter is not specified, only the volume driver information and volume name are queried by default. If this parameter is specified, only the volume name is queried. + +#### **Examples** +This command is used to query all volumes managed by iSula and return only the volume name. +```shell +isula volume ls -q +``` + +### Deleting a Volume + +#### **Format** +``` +isula volume rm [OPTIONS] VOLUME [VOLUME...] +isula volume prune [OPTIONS] +``` + +#### **Functions** +- rm: deletes a specified volume. If the volume is used by a container, the volume fails to be deleted. +- prune: deletes all volumes that are not used by containers. + +#### **Parameter Description** +OPTIONS in the prune command: +- -f,--force: specifies that the system does not display a message asking you whether to delete the volume. By default, a risk message is displayed. You need to enter y to continue the operation. + +#### **Examples** +Delete volumes vol1 and vol2. +```shell +isula volume rm vol1 vol2 +``` +Delete all unused volumes in the following format. No risk message is displayed. +```shell +isula volume prune -f +``` + +### Precautions + +#### Conflict Combination Rules +If a volume mount point conflict occurs, perform the following operations: +- If configurations of -v and --mount conflict, a failure message is returned. +- If the configuration obtained from --volumes-from conflicts with the -v or --mount configuration, the configuration is discarded. +- If the anonymous volume configuration in the image conflicts with the -v, --mount, or --volumes-from configuration, the configuration is discarded. + +#### Differences Between iSula and Docker +| iSula Behavior | Docker Behavior | +| ------------------------------------------- | ------------------------------------------- | +| The volume name can contain a maximum of 64 characters. | The length of the volume name is not limited. | +| If the source to be mounted does not exist, the --mount parameter is created. | If the source to be mounted does not exist, an error is reported. | +| The --mount parameter supports the z or Z parameter configuration in bind-selinux-opts and selinux-opts. | The --mount parameter does not support the parameter configuration in the bind-selinux-opts and selinux-opts. | +| Rules for combining mount point conflicts are not processed. | The anonymous volume specified by -v is processed as the anonymous volume in the image. | +| The volume prune command displays the space that has been reclaimed. | The volume prune command does not display the space that has been reclaimed. | +| -v, --mount, and --volumes-from are configured in hostconfig, and the anonymous volume is configured in config. | The anonymous volume specified by -v is configured in config, and other configurations are configured in hostconfig. | diff --git a/content/en/docs/Container/managing-the-lifecycle-of-a-secure-container.md b/docs/en/docs/Container/managing-the-lifecycle-of-a-secure-container.md similarity index 97% rename from content/en/docs/Container/managing-the-lifecycle-of-a-secure-container.md rename to docs/en/docs/Container/managing-the-lifecycle-of-a-secure-container.md index d6a2cb3265d314e699a7a3cb198f033657724011..c16a2ee9a8a087af3d2b3643aba0a162d85f8b2a 100644 --- a/content/en/docs/Container/managing-the-lifecycle-of-a-secure-container.md +++ b/docs/en/docs/Container/managing-the-lifecycle-of-a-secure-container.md @@ -36,7 +36,7 @@ To start a secure container, perform the following steps: isula run -tid --runtime kata-runtime --network none busybox ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >The secure container supports the CNI network only and does not support the CNM network. The **-p** and **--expose** options cannot be used to expose container ports. When using a secure container, you need to specify the **--net=none** option. 4. Start a pod. @@ -101,7 +101,7 @@ The pause container functions only as a placeholder container. Therefore, if you docker exec -ti ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >1. If the preceding command has no response because another host runs the **docker restart** or **docker stop** command to access the same container, you can press **Ctrl**+**P**+**Q** to exit the operation. >2. If the **-d** option is used, the command is executed in the background and no error information is displayed. The exit code cannot be used to determine whether the command is executed correctly. diff --git a/content/en/docs/Container/maximum-number-of-handles.md b/docs/en/docs/Container/maximum-number-of-handles.md similarity index 100% rename from content/en/docs/Container/maximum-number-of-handles.md rename to docs/en/docs/Container/maximum-number-of-handles.md diff --git a/content/en/docs/Container/monitoring-secure-containers.md b/docs/en/docs/Container/monitoring-secure-containers.md similarity index 100% rename from content/en/docs/Container/monitoring-secure-containers.md rename to docs/en/docs/Container/monitoring-secure-containers.md diff --git a/content/en/docs/Container/privileged-container.md b/docs/en/docs/Container/privileged-container.md similarity index 100% rename from content/en/docs/Container/privileged-container.md rename to docs/en/docs/Container/privileged-container.md diff --git a/content/en/docs/Container/public_sys-resources/icon-caution.gif b/docs/en/docs/Container/public_sys-resources/icon-caution.gif similarity index 100% rename from content/en/docs/Container/public_sys-resources/icon-caution.gif rename to docs/en/docs/Container/public_sys-resources/icon-caution.gif diff --git a/content/en/docs/Container/public_sys-resources/icon-danger.gif b/docs/en/docs/Container/public_sys-resources/icon-danger.gif similarity index 100% rename from content/en/docs/Container/public_sys-resources/icon-danger.gif rename to docs/en/docs/Container/public_sys-resources/icon-danger.gif diff --git a/content/en/docs/Container/public_sys-resources/icon-note.gif b/docs/en/docs/Container/public_sys-resources/icon-note.gif similarity index 100% rename from content/en/docs/Container/public_sys-resources/icon-note.gif rename to docs/en/docs/Container/public_sys-resources/icon-note.gif diff --git a/content/en/docs/Container/public_sys-resources/icon-notice.gif b/docs/en/docs/Container/public_sys-resources/icon-notice.gif similarity index 100% rename from content/en/docs/Container/public_sys-resources/icon-notice.gif rename to docs/en/docs/Container/public_sys-resources/icon-notice.gif diff --git a/content/en/docs/Container/public_sys-resources/icon-tip.gif b/docs/en/docs/Container/public_sys-resources/icon-tip.gif similarity index 100% rename from content/en/docs/Container/public_sys-resources/icon-tip.gif rename to docs/en/docs/Container/public_sys-resources/icon-tip.gif diff --git a/content/en/docs/Container/public_sys-resources/icon-warning.gif b/docs/en/docs/Container/public_sys-resources/icon-warning.gif similarity index 100% rename from content/en/docs/Container/public_sys-resources/icon-warning.gif rename to docs/en/docs/Container/public_sys-resources/icon-warning.gif diff --git a/content/en/docs/Container/querying-information.md b/docs/en/docs/Container/querying-information.md similarity index 100% rename from content/en/docs/Container/querying-information.md rename to docs/en/docs/Container/querying-information.md diff --git a/content/en/docs/Container/reboot-or-shutdown-in-a-container.md b/docs/en/docs/Container/reboot-or-shutdown-in-a-container.md similarity index 100% rename from content/en/docs/Container/reboot-or-shutdown-in-a-container.md rename to docs/en/docs/Container/reboot-or-shutdown-in-a-container.md diff --git a/content/en/docs/Container/secure-container.md b/docs/en/docs/Container/secure-container.md similarity index 90% rename from content/en/docs/Container/secure-container.md rename to docs/en/docs/Container/secure-container.md index 5f5e7b51446f18fc11dd1fc025e6cef8d8467c36..0be359e1b7e5c03ad5503c059141f3131c203050 100644 --- a/content/en/docs/Container/secure-container.md +++ b/docs/en/docs/Container/secure-container.md @@ -12,7 +12,7 @@ Secure containers are isolated by the virtualization layers. Containers on the s **Figure 1** Secure container architecture -![](figures/安全容器框架1.png) +![](./figures/sec-container.png) Secure containers are closely related to the concept of pod in Kubernetes. Kubernetes is the open-source ecosystem standard for the container scheduling management platform. It defines a group of container runtime interfaces \(CRIs\). @@ -25,5 +25,5 @@ In a secure container, you can start a single container or start a pod. [Figure 2](#fig17734185518269) shows the relationship between the secure container and peripheral components. **Figure 2** Relationship between the secure container and peripheral components -![](figures/relationship-between-the-secure-container-and-peripheral-components.png "relationship-between-the-secure-container-and-peripheral-components") +![](./figures/relationship-between-the-secure-container-and-peripheral-components.png "relationship-between-the-secure-container-and-peripheral-components") diff --git a/content/en/docs/Container/security-and-isolation.md b/docs/en/docs/Container/security-and-isolation.md similarity index 99% rename from content/en/docs/Container/security-and-isolation.md rename to docs/en/docs/Container/security-and-isolation.md index ad8608788471782846e03fca5bc8336732c8caf1..ada1aada90a1c37d05acf92751d5ed5c0f461eb8 100644 --- a/content/en/docs/Container/security-and-isolation.md +++ b/docs/en/docs/Container/security-and-isolation.md @@ -49,7 +49,7 @@ In system containers, you can configure the **--user-remap** API parameter to ### Usage Guide ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >Before specifying the **--user-remap** parameter, configure an offset value for UIDs and GIDs of all directories and files in rootfs. The offset value should be equal to that for _uid_ and _gid_ in **--user-remap**. >For example, run the following command to offset UIDs and GIDs of all files in the **dev** directory with 100000: >chown 100000:100000 dev @@ -187,7 +187,7 @@ You can configure the startup parameters of the iSulad container engine to speci - Alice can perform any container operations: **\{"name":"policy\_5","users":\["alice"\],"actions":\["container"\]\}** - Alice can perform any container operations, but the request type can only be **get**: **\{"name":"policy\_5","users":\["alice"\],"actions":\["container"\], "readonly":true\}** - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >- **action** indicates that regular expressions are supported. >- **users** indicates that regular expressions are not supported. >- Users configured in **users** must be unique. That is, a user cannot match multiple rules. diff --git a/content/en/docs/Container/security-features.md b/docs/en/docs/Container/security-features.md similarity index 98% rename from content/en/docs/Container/security-features.md rename to docs/en/docs/Container/security-features.md index 09eab1a3e499c34b36687f3d232d9a9ad0833839..667f89a14a263b34ef6ce9ca001524cd907fe09b 100644 --- a/content/en/docs/Container/security-features.md +++ b/docs/en/docs/Container/security-features.md @@ -47,7 +47,7 @@ Use **--security-opt** to transfer the configuration file to the container whe isula run -itd --security-opt seccomp=/path/to/seccomp/profile.json rnd-dockerhub.huawei.com/official/busybox ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >1. When the configuration file is transferred to the container by using **--security-opt** during container creation, the default configuration file \(**/etc/isulad/seccomp\_default.json**\) is used. >2. When **--security-opt** is set to **unconfined** during container creation, system calls are not filtered for the container. >3. **/path/to/seccomp/profile.json** must be an absolute path. @@ -133,7 +133,7 @@ The configuration file template is as follows: } ``` ->![](public_sys-resources/icon-notice.gif) **NOTICE:** +>![](./public_sys-resources/icon-notice.gif) **NOTICE:** >- **defaultAction** and **syscalls**: The types of their corresponding actions are the same, but their values must be different. The purpose is to ensure that each syscall has a default action. Clear definitions in the syscall array shall prevail. As long as the values of **defaultAction** and **action** are different, no action conflicts will occur. The following actions are supported: > **SCMP\_ACT\_ERRNO**: forbids calling syscalls and displays error information. > **SCMP\_ACT\_ALLOW**: allows calling syscalls. @@ -217,7 +217,7 @@ Security-Enhanced Linux \(SELinux\) is a Linux kernel security module that provi - The introduction of SELinux affects the performance. Therefore, evaluate the scenario before setting SELinux. Enable the SELinux function for the daemon and set the SELinux configuration in the container only when necessary. - When you configure labels for a mounted volume, the source directory cannot be a subdirectory of **/**, **/usr**, **/etc**, **/tmp**, **/home**, **/run**, **/var**, **/root**, or **/usr**. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- iSulad does not support labeling the container file system. To ensure that the container file system and configuration directory are labeled with the container access permission, run the **chcon** command to label them. >- If SELinux access control is enabled for iSulad, you are advised to add a label to the **/var/lib/isulad** directory before starting daemon. Files and folders generated in the directory during container creation inherit the label by default. For example: > ``` diff --git a/content/en/docs/Container/shared-memory-channels.md b/docs/en/docs/Container/shared-memory-channels.md similarity index 99% rename from content/en/docs/Container/shared-memory-channels.md rename to docs/en/docs/Container/shared-memory-channels.md index b82de5bda7d032e6e7545a7ea4f9391ca77be228..f00335a8fe96cb4b9e08c181566800601a15d63a 100644 --- a/content/en/docs/Container/shared-memory-channels.md +++ b/docs/en/docs/Container/shared-memory-channels.md @@ -52,7 +52,7 @@ dd: error writing '/testdir/test.file': No space left on device 33554432 bytes (34 MB, 32 MiB) copied, 0.0766899 s, 438 MB/s ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- If **--host-channel** is used for size limit, the file size is constrained by the memory limit in the container. \(The OOM error may occur when the memory usage reaches the upper limit.\) >- If a user creates a shared file on the host, the file size is not constrained by the memory limit in the container. >- If you need to create a shared file in the container and the service is memory-intensive, you can add the value of **--host-channel** to the original value of the container memory limit, eliminating the impact. diff --git a/content/en/docs/Container/specifying-rootfs-to-create-a-container.md b/docs/en/docs/Container/specifying-rootfs-to-create-a-container.md similarity index 95% rename from content/en/docs/Container/specifying-rootfs-to-create-a-container.md rename to docs/en/docs/Container/specifying-rootfs-to-create-a-container.md index ada346f99c309b483c72ccc808132126159ca8e8..5ff1952020ec65cc7cbec947baeec1447caf6975 100644 --- a/content/en/docs/Container/specifying-rootfs-to-create-a-container.md +++ b/docs/en/docs/Container/specifying-rootfs-to-create-a-container.md @@ -31,7 +31,7 @@ Different from a common container that needs to be started by specifying a conta ## Constraints - The rootfs directory specified by the **--external-rootfs** parameter must be an absolute path. -- The rootfs directory specified by the **--external-rootfs** parameter must be a complete OS environment. Otherwise, the container fails to be started. +- The rootfs directory specified by the **--external-rootfs** parameter must be a complete OS environment including **systemd** package. Otherwise, the container fails to be started. - When a container is deleted, the rootfs directory specified by **--external-rootfs** is not deleted. - Containers based on ARM rootfs cannot run on x86 servers. Containers based on x86 rootfs cannot run on ARM servers. - You are not advised to start multiple container instances by using the same rootfs. That is, one rootfs is used only by container instances in the same lifecycle. @@ -44,6 +44,6 @@ If the local rootfs path is **/root/myrootfs**, run the following command to st # isula run -tid --system-container --external-rootfs /root/myrootfs none init ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >Rootfs is a user-defined file system. Prepare it by yourself. For example, a rootfs is generated after the TAR package of container images is decompressed. diff --git a/content/en/docs/Container/statistics.md b/docs/en/docs/Container/statistics.md similarity index 100% rename from content/en/docs/Container/statistics.md rename to docs/en/docs/Container/statistics.md diff --git a/content/en/docs/Container/supporting-oci-hooks.md b/docs/en/docs/Container/supporting-oci-hooks.md similarity index 100% rename from content/en/docs/Container/supporting-oci-hooks.md rename to docs/en/docs/Container/supporting-oci-hooks.md diff --git a/content/en/docs/Container/system-container.md b/docs/en/docs/Container/system-container.md similarity index 100% rename from content/en/docs/Container/system-container.md rename to docs/en/docs/Container/system-container.md diff --git a/content/en/docs/Container/uninstallation.md b/docs/en/docs/Container/uninstallation.md similarity index 100% rename from content/en/docs/Container/uninstallation.md rename to docs/en/docs/Container/uninstallation.md diff --git a/content/en/docs/Container/upgrade-methods.md b/docs/en/docs/Container/upgrade-methods.md similarity index 95% rename from content/en/docs/Container/upgrade-methods.md rename to docs/en/docs/Container/upgrade-methods.md index 31e8df2eeb06351021eb2036e056d338fe9f4cf4..5294263ed82402538f59fb9cfe43f950e9b367e8 100644 --- a/content/en/docs/Container/upgrade-methods.md +++ b/docs/en/docs/Container/upgrade-methods.md @@ -8,7 +8,7 @@ - For an upgrade between major versions, for example, upgrading 1.x.x to 2.x.x, save the current configuration file **/etc/isulad/daemon.json**, uninstall the existing iSulad software package, install the iSulad software package to be upgraded, and restore the configuration file. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- You can run the **sudo rpm -qa |grep iSulad** or **isula version** command to check the iSulad version. >- If you want to manually perform upgrade between patch versions of a major version, run the following command to download the RPM packages of iSulad and all its dependent libraries: > ``` diff --git a/content/en/docs/Container/usage-guide.md b/docs/en/docs/Container/usage-guide.md similarity index 100% rename from content/en/docs/Container/usage-guide.md rename to docs/en/docs/Container/usage-guide.md diff --git a/content/en/docs/Container/using-systemd-to-start-a-container.md b/docs/en/docs/Container/using-systemd-to-start-a-container.md similarity index 100% rename from content/en/docs/Container/using-systemd-to-start-a-container.md rename to docs/en/docs/Container/using-systemd-to-start-a-container.md diff --git a/content/en/docs/Container/writable-namespace-kernel-parameters.md b/docs/en/docs/Container/writable-namespace-kernel-parameters.md similarity index 100% rename from content/en/docs/Container/writable-namespace-kernel-parameters.md rename to docs/en/docs/Container/writable-namespace-kernel-parameters.md diff --git a/docs/en/docs/HA/HAuserguide.md b/docs/en/docs/HA/HAuserguide.md new file mode 100644 index 0000000000000000000000000000000000000000..2b528ddd66c52014a51eb45ab263b5ce93c2696b --- /dev/null +++ b/docs/en/docs/HA/HAuserguide.md @@ -0,0 +1,358 @@ +# Installing, Deploying, and Using HA + + +- [Installing, Deploying, and Using HA](#installing-deploying-and-using-ha) + - [Installation and Configuration](#installation-and-configuration) + - [Modifying the Host Name and the /etc/hosts File](#modifying-the-host-name-and-the-etchosts-file) + - [Configuring the Yum Source](#configuring-the-yum-source) + - [Installing HA Software Package Components](#installing-ha-software-package-components) + - [Setting the hacluster User Password](#setting-the-hacluster-user-password) + - [Modifying the `/etc/corosync/corosync.conf` File](#modifying-the-etccorosynccorosyncconf-file) + - [Managing Services](#managing-services) + - [Disabling the Firewall](#disabling-the-firewall) + - [Managing the pcs Service](#managing-the-pcs-service) + - [Managing the pacemaker Service](#managing-the-pacemaker-service) + - [Managing the corosync Service](#managing-the-corosync-service) + - [Performing Node Authentication](#performing-node-authentication) + - [Accessing the Front-End Management Platform](#accessing-the-front-end-management-platform) + - [Quick User Guide](#quick-user-guide) + - [Login Page](#login-page) + - [Home Page](#home-page) + - [Managing Nodes](#managing-nodes) + - [Node](#node) + - [Preference Setting](#preference-setting) + - [Adding Resources](#adding-resources) + - [Adding Common Resources](#adding-common-resources) + - [Adding Group Resources](#adding-group-resources) + - [Adding Clone Resources](#adding-clone-resources) + - [Editing Resources](#editing-resources) + - [Setting Resource Relationships](#setting-resource-relationships) + - [ACLS](#acls) + + + + +## Installation and Configuration + +- Environment preparation: At least two physical machines or VMs with openEuler 20.03 LTS SP3 installed are required. (This section uses two physical machines or VMs as an example.) For details, see the *openEuler 20.03 LTS SP3 Installation Guide*. + +### Modifying the Host Name and the /etc/hosts File + +- **Note: You need to perform the following operations on both hosts. The following takes the operation on one host as an example.** + +Before using the HA software, ensure that the host name has been changed and all host names have been written into the **/etc/hosts** file. + +- Run the following command to change the host name: + +``` +# hostnamectl set-hostname ha1 +``` + +- Edit the **/etc/hosts** file and write the following fields: + +``` +172.30.30.65 ha1 +172.30.30.66 ha2 +``` + +### Configuring the Yum Source + +After the system is successfully installed, the Yum source is configured by default. The file location information is stored in the `/etc/yum.repos.d/openEuler.repo` file. The HA software package uses the following sources: + +``` +[OS] +name=OS +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/$basearch/RPM-GPG-KEY-openEuler + +[everything] +name=everything +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/everything/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/everything/$basearch/RPM-GPG-KEY-openEuler + +[EPOL] +name=EPOL +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/EPOL/main/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/$basearch/RPM-GPG-KEY-openEuler +``` + +### Installing HA Software Package Components + +``` +# yum install corosync pacemaker pcs fence-agents fence-virt corosync-qdevice sbd drbd -y +``` + +### Setting the hacluster User Password + +``` +# passwd hacluster +``` + +### Modifying the `/etc/corosync/corosync.conf` File + +``` +totem { + version: 2 + cluster_name: hacluster + crypto_cipher: none + crypto_hash: none +} +logging { + fileline: off + to_stderr: yes + to_logfile: yes + logfile: /var/log/cluster/corosync.log + to_syslog: yes + debug: on + logger_subsys { + subsys: QUORUM + debug: on + } +} +quorum { + provider: corosync_votequorum + expected_votes: 2 + two_node: 1 + } +nodelist { + node { + name: ha1 + nodeid: 1 + ring0_addr: 172.30.30.65 + } + node { + name: ha2 + nodeid: 2 + ring0_addr: 172.30.30.66 + } + } +``` + +### Managing Services + +#### Disabling the Firewall + +``` +# systemctl stop firewalld +``` + +Change the status of SELINUX in the **/etc/selinux/config** file to **disabled**. + +``` +# SELINUX=disabled +``` + +#### Managing the pcs Service + +- Run the following command to start the **pcs** service: + +``` +# systemctl start pcsd +``` + +- Run the following command to query service status: + +``` +# systemctl status pcsd +``` + +The service is started successfully if the following information is displayed: + +![](./figures/HA-pcs.png) + +#### Managing the pacemaker Service + +- Run the following command to start the **pacemaker** service: + +``` +# systemctl start pacemaker +``` + +- Run the following command to query service status: + +``` +# systemctl status pacemaker +``` + +The service is started successfully if the following information is displayed: + +![](./figures/HA-pacemaker.png) + +#### Managing the corosync Service + +- Run the following command to start the **corosync** service: + +``` +# systemctl start corosync +``` + +- Run the following command to query service status: + +``` +# systemctl status corosync +``` + +The service is started successfully if the following information is displayed: + +![](./figures/HA-corosync.png) + +### Performing Node Authentication + +- **Note: Perform this operation on only one node.** + +``` +# pcs host auth ha1 ha2 +``` + +### Accessing the Front-End Management Platform + +After the preceding services are started, open the browser (Chrome or Firefox is recommended) and enter `https://IP:2224` in the address box. + +## Quick User Guide + +### Login Page + +The username is `hacluster` and the password is the one set on the host. + +![](./figures/HA-login.png) + +### Home Page + +The home page is the **MANAGE CLUSTERS** page, which includes four functions: remove, add existing, destroy, and create new clusters. + +![](./figures/HA-home-page.png) + +### Managing Nodes + +#### Node + +You can add and remove nodes. The following describes how to add an existing node. + +![](./figures/HA-existing-nodes.png) + +Node management includes the following functions: start, stop, restart, standby, maintenance, and configure Fencing. You can view the enabled services and running resources of the node and manage the node. + +![](./figures/HA-node-setting1.png) ![](./figures/HA-node-setting2.png) + +### Preference Setting + +You can perform the following operations using command lines. The following is a simple example. Run the `pcs --help` command to query more commands available. + +``` +# pcs property set stonith-enabled=false +# pcs property set no-quorum-policy=ignore +``` + +Run the `pcs property` command to view all settings. + +![](./figures/HA-firstchoice-cmd.png) + +- Change the default status of **No Quorum Policy** to **ignore**, and the default status of **Stonith Enabled** to **false**, as shown in the following figure: + +![](./figures/HA-firstchoice.png) + +#### Adding Resources + +##### Adding Common Resources + +The multi-option drop-down list box in the system supports keyword matching. You can enter the keyword of the item to be configured and quickly select it. + +Apache and IPaddr are used as examples. + +Run the following commands to add the Apache and IPaddr resources: + +``` +# pcs resource create httpd ocf:heartbeat:apache +# pcs resource create IPaddr ocf:heartbeat:IPaddr2 ip=172.30.30.67 +``` + +Run the following command to check the cluster resource status: + +``` +# pcs status +``` + +![](./figures/HA-pcs-status.png) + +![](./figures/HA-add-resource.png) + +- Add Apache resources. + +![](./figures/HA-apache.png) + +- The resources are successfully added if the following information is displayed: + +![](./figures/HA-apache-suc.png) + +- The resources are created and started successfully, and run on a node, for example, **ha1**. The Apache page is displayed. + +![](./figures/HA-apache-show.png) + +- Add IPaddr resources. + +![](./figures/HA-ipaddr.png) + +- The resources are successfully added if the following information is displayed: + +![](./figures/HA-ipaddr-suc.png) + +- The resources are created and started successfully, and run on a node, for example, **ha1**. The HA web login page is displayed, and you can log in to the page and perform operations. When the resources are switched to **ha2**, the web page can still be accessed. + +![](./figures/HA-ipaddr-show.png) + +##### Adding Group Resources + +When you add group resources, at least one common resource is needed in the cluster. Select one or more resources and click **Create Group**. + +- **Note: Group resources are started in the sequence of subresources. Therefore, you need to select subresources in sequence.** + +![](./figures/HA-group.png) + +The resources are successfully added if the following information is displayed: + +![](./figures/HA-group-suc.png) + +##### Adding Clone Resources + +![](./figures/HA-clone.png) + +The resources are successfully added if the following information is displayed: + +![](./figures/HA-clone-suc.png) + +#### Editing Resources + +- **Enable**: Select a target resource that is not running from the resource node list. Enable the resource. +- **Disable**: Select a target resource that is running from the resource node list. Disable the resource. +- **Clearup**: Select a target resource from the resource node list and clear the resource. +- **Porting**: Select a target resource from the resource node list. The resource must be a common resource or group resource that is running. You can port the resource to a specified node. +- **Rollback**: Select a target resource from the resource node list. Before rolling back a resource, ensure that the resource has been ported. You can clear the porting settings of the resource and roll the resource back to the original node. After you click the button, the status of the resource item in the list is the same as that when the resource is enabled. +- **Remove**: Select a target resource from the resource node list and remove the resource. + +You can perform the preceding resource operations on the page shown in the following figure: + +![](./figures/HA-resoure-set.png) + +#### Setting Resource Relationships + +The resource relationship is used to set restrictions for target resources. Resource restrictions are classified as follows: **resource location**, **resource colocation**, and **resource ordering**. + +- **Resource location**: Set the runlevel of nodes in the cluster to determine the node where the resource runs during startup or switchover. The runlevels are Master and Slave in descending order. +- **Resource colocation**: Indicate whether the target resource and other resources in the cluster are running on the same node. For resources on the same node, the resource must run on the same node as the target resource. For resources on mutually exclusive nodes, the resource and the target resource must run on different nodes. +- **Resource ordering**: Set the ordering in which the target resource and other resources in the cluster are started. The preamble resource must run before the target resource runs. The postamble resource can run only after the target resource runs. + +After adding common resources or group resources, you can perform the preceding resource operations on the page shown in the following figure: + +![](./figures/HA-resource-relationship.png) + +#### ACLS + +ACLS is an access control list. You can click **Add** to add a user and manage the user access. + +![](./figures/HA-ACLS.png) \ No newline at end of file diff --git a/docs/en/docs/HA/figures/HA-ACLS.png b/docs/en/docs/HA/figures/HA-ACLS.png new file mode 100644 index 0000000000000000000000000000000000000000..bfaf03508f6ae8539c2ec140de60f636dfb91a7a Binary files /dev/null and b/docs/en/docs/HA/figures/HA-ACLS.png differ diff --git a/docs/en/docs/HA/figures/HA-add-resource.png b/docs/en/docs/HA/figures/HA-add-resource.png new file mode 100644 index 0000000000000000000000000000000000000000..5322f650807e08e702a555093d25d733626132fe Binary files /dev/null and b/docs/en/docs/HA/figures/HA-add-resource.png differ diff --git a/docs/en/docs/HA/figures/HA-apache-show.png b/docs/en/docs/HA/figures/HA-apache-show.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd393124f73e0fecab4ab385dc8561dee45afe1 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-apache-show.png differ diff --git a/docs/en/docs/HA/figures/HA-apache-suc.png b/docs/en/docs/HA/figures/HA-apache-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb34be27558a7320fb46ae6c3cb9a8291f2344a Binary files /dev/null and b/docs/en/docs/HA/figures/HA-apache-suc.png differ diff --git a/docs/en/docs/HA/figures/HA-apache.png b/docs/en/docs/HA/figures/HA-apache.png new file mode 100644 index 0000000000000000000000000000000000000000..b2e332fec2af4ce82ff6baa3169341dc07439008 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-apache.png differ diff --git a/docs/en/docs/HA/figures/HA-clone-suc.png b/docs/en/docs/HA/figures/HA-clone-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..ca644bbd98cdf4ba921b7ac9d90ee4724fe1e265 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-clone-suc.png differ diff --git a/docs/en/docs/HA/figures/HA-clone.png b/docs/en/docs/HA/figures/HA-clone.png new file mode 100644 index 0000000000000000000000000000000000000000..1b6c1564001592ad775b4dafc52974faa3421383 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-clone.png differ diff --git a/docs/en/docs/HA/figures/HA-corosync.png b/docs/en/docs/HA/figures/HA-corosync.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d93242e65c503b6e1b6a457e2517f647984a66 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-corosync.png differ diff --git a/docs/en/docs/HA/figures/HA-existing-nodes.png b/docs/en/docs/HA/figures/HA-existing-nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..d309d0edc7b93f53d2548323a9e98473b950783f Binary files /dev/null and b/docs/en/docs/HA/figures/HA-existing-nodes.png differ diff --git a/docs/en/docs/HA/figures/HA-firstchoice-cmd.png b/docs/en/docs/HA/figures/HA-firstchoice-cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..d0d6195b566853769304b6ee1290bfa8be021bd4 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-firstchoice-cmd.png differ diff --git a/docs/en/docs/HA/figures/HA-firstchoice.png b/docs/en/docs/HA/figures/HA-firstchoice.png new file mode 100644 index 0000000000000000000000000000000000000000..df73ad1030abba6cd3088eacfb627a770db4063d Binary files /dev/null and b/docs/en/docs/HA/figures/HA-firstchoice.png differ diff --git a/docs/en/docs/HA/figures/HA-group-suc.png b/docs/en/docs/HA/figures/HA-group-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..d1c2402d2f2d7ebb32fdd661aa5ed3b9ba48b807 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-group-suc.png differ diff --git a/docs/en/docs/HA/figures/HA-group.png b/docs/en/docs/HA/figures/HA-group.png new file mode 100644 index 0000000000000000000000000000000000000000..712407e923193b4e1ea56bb55a68828ebb700550 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-group.png differ diff --git a/docs/en/docs/HA/figures/HA-home-page.png b/docs/en/docs/HA/figures/HA-home-page.png new file mode 100644 index 0000000000000000000000000000000000000000..197c2626c98962e4f57ca7b6d818a734d65eb52a Binary files /dev/null and b/docs/en/docs/HA/figures/HA-home-page.png differ diff --git a/docs/en/docs/HA/figures/HA-ipaddr-show.png b/docs/en/docs/HA/figures/HA-ipaddr-show.png new file mode 100644 index 0000000000000000000000000000000000000000..100fb9f4cac7b6f42ac2a241fb5161534b6754a0 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-ipaddr-show.png differ diff --git a/docs/en/docs/HA/figures/HA-ipaddr-suc.png b/docs/en/docs/HA/figures/HA-ipaddr-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..c41c8270b99760743250d0bd089488a2f3a9383a Binary files /dev/null and b/docs/en/docs/HA/figures/HA-ipaddr-suc.png differ diff --git a/docs/en/docs/HA/figures/HA-ipaddr.png b/docs/en/docs/HA/figures/HA-ipaddr.png new file mode 100644 index 0000000000000000000000000000000000000000..95fdad5e1ad23a29479f1402af32677fed8e0b36 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-ipaddr.png differ diff --git a/docs/en/docs/HA/figures/HA-login.png b/docs/en/docs/HA/figures/HA-login.png new file mode 100644 index 0000000000000000000000000000000000000000..65d0ae11ec810da7574ec72bebf6e1b020c94a0d Binary files /dev/null and b/docs/en/docs/HA/figures/HA-login.png differ diff --git a/docs/en/docs/HA/figures/HA-node-setting1.png b/docs/en/docs/HA/figures/HA-node-setting1.png new file mode 100644 index 0000000000000000000000000000000000000000..22a4d907dc1d97f6b09d74983a8d280236a1b224 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-node-setting1.png differ diff --git a/docs/en/docs/HA/figures/HA-node-setting2.png b/docs/en/docs/HA/figures/HA-node-setting2.png new file mode 100644 index 0000000000000000000000000000000000000000..78214a2e0cd8c62b27a741674a0d170593f08fbb Binary files /dev/null and b/docs/en/docs/HA/figures/HA-node-setting2.png differ diff --git a/docs/en/docs/HA/figures/HA-operational-attributes.png b/docs/en/docs/HA/figures/HA-operational-attributes.png new file mode 100644 index 0000000000000000000000000000000000000000..0938f11d3f2e170966e11b3594b9d1b64cbcd1dd Binary files /dev/null and b/docs/en/docs/HA/figures/HA-operational-attributes.png differ diff --git a/docs/en/docs/HA/figures/HA-pacemaker.png b/docs/en/docs/HA/figures/HA-pacemaker.png new file mode 100644 index 0000000000000000000000000000000000000000..7681f963f67d2b803fef6fb2c3247384136201f8 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-pacemaker.png differ diff --git a/docs/en/docs/HA/figures/HA-pcs-status.png b/docs/en/docs/HA/figures/HA-pcs-status.png new file mode 100644 index 0000000000000000000000000000000000000000..7cb5ebda8a4d5f082a05db10d4dbd06420ab54ba Binary files /dev/null and b/docs/en/docs/HA/figures/HA-pcs-status.png differ diff --git a/docs/en/docs/HA/figures/HA-pcs.png b/docs/en/docs/HA/figures/HA-pcs.png new file mode 100644 index 0000000000000000000000000000000000000000..283670d7c3d0961ee1cb41345c2b2a013d7143b0 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-pcs.png differ diff --git a/docs/en/docs/HA/figures/HA-resource-location.png b/docs/en/docs/HA/figures/HA-resource-location.png new file mode 100644 index 0000000000000000000000000000000000000000..7faed091efda7956dc23c958062f679ac7f9d422 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-resource-location.png differ diff --git a/docs/en/docs/HA/figures/HA-resource-relationship.png b/docs/en/docs/HA/figures/HA-resource-relationship.png new file mode 100644 index 0000000000000000000000000000000000000000..2cfd19be6b0762473953393897c93407e07826e6 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-resource-relationship.png differ diff --git a/docs/en/docs/HA/figures/HA-resoure-set.png b/docs/en/docs/HA/figures/HA-resoure-set.png new file mode 100644 index 0000000000000000000000000000000000000000..3b23e8afc67f0d2d401e98741b79b405c2c7d600 Binary files /dev/null and b/docs/en/docs/HA/figures/HA-resoure-set.png differ diff --git a/docs/en/docs/Installation/FAQ1.md b/docs/en/docs/Installation/FAQ1.md new file mode 100644 index 0000000000000000000000000000000000000000..9f065f6c2b1f9e7d18c90b3f8f76f04fa50a2ee4 --- /dev/null +++ b/docs/en/docs/Installation/FAQ1.md @@ -0,0 +1,26 @@ +# FAQ + + +- [FAQ](#faq) + - [Failing to Start the Raspberry Pi](#树莓派启动失败) + - [Symptom](#问题现象) + - [Cause Analysis](#原因分析) + - [Solution](#解决方法) + + +## Failing 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. + +### Cause Analysis + +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. \ No newline at end of file diff --git a/docs/en/docs/Installation/Installation-Guide1.md b/docs/en/docs/Installation/Installation-Guide1.md new file mode 100644 index 0000000000000000000000000000000000000000..763dcf35f37ef5ffb54423573dbc20037130f21c --- /dev/null +++ b/docs/en/docs/Installation/Installation-Guide1.md @@ -0,0 +1,188 @@ +# Installation Guide + +This section describes how to enable the Raspberry Pi function after [Writing Raspberry Pi Images into the SD card](./安装方式介绍-1.html). + + +- [Installation Guide](#安装指导) + - [Starting the System](#启动系统) + - [Logging in to the System](#启动系统) + - [Configuring the System](#启动系统) + - [Expanding the Root Directory Partition](#扩展根目录分区) + - [Connecting to the Wi-Fi Network](#连接-wifi) + + +## Starting the System + +After an image is written into the SD card, insert the SD card into the Raspberry Pi and power on the SD card. + +For details about the Raspberry Pi hardware, visit the [Raspberry Pi official website](https://www.raspberrypi.org/). + +## Logging in to the System + +You can log in to the Raspberry Pi in either of the following ways: + +1. Local login + + Connect the Raspberry Pi to the monitor (the Raspberry Pi video output interface is Micro HDMI), keyboard, and mouse, and start the Raspberry Pi. The Raspberry Pi startup log is displayed on the monitor. After Raspberry Pi is started, enter the user name **root** and password **openeuler** to log in. + +2. SSH remote login + + By default, the Raspberry Pi uses the DHCP mode to automatically obtain the IP address. If the Raspberry Pi is connected to a known router, you can log in to the router to check the IP address. The new IP address is the Raspberry Pi IP address. + + **Figure 1** Obtain the IP address + ![](./figures/Obtain the IP address) + + According to the preceding figure, the IP address of the Raspberry Pi is **192.168.31.109**. You can run the `ssh root@192.168.31.109` command and enter the password `openeuler` to remotely log in to the Raspberry Pi. + +## Configuring the System + +### Expanding the Root Directory Partition + +The space of the default root directory partition is small. Therefore, you need to expand the partition capacity before using it. + +To expand the root directory partition capacity, perform the following procedure: + +1. Run the `fdisk -l` command as the root user to check the drive partition information. The command output is as follows: + + ``` + # fdisk -l + Disk /dev/mmcblk0: 14.86 GiB, 15931539456 bytes, 31116288 sectors + Units: sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disklabel type: dos + Disk identifier: 0xf2dc3842 + + Device Boot Start End Sectors Size Id Type + /dev/mmcblk0p1 * 8192 593919 585728 286M c W95 FAT32 (LBA) + /dev/mmcblk0p2 593920 1593343 999424 488M 82 Linux swap / Solaris + /dev/mmcblk0p3 1593344 5044223 3450880 1.7G 83 Linux + ``` + + The drive letter of the SD card is **/dev/mmcblk0**, which contains three partitions: + + - **/dev/mmcblk0p1**: boot partition + - **/dev/mmcblk0p2**: swap partition + - **/dev/mmcblk0p3**: root directory partition + + Here, we need to expand the capacity of `/dev/mmcblk0p3`. + +2. Run the `fdisk /dev/mmcblk0` command as the root user and the interactive command line interface (CLI) is displayed. To expand the partition capacity, perform the following procedure as shown in [Figure 2](#zh-cn_topic_0151920806_f6ff7658b349942ea87f4521c0256c315). + + 1. Enter `p` to check the partition information. + + Record the start sector number of `/dev/mmcblk0p3`. That is, the value in the `Start` column of the `/dev/mmcblk0p3` information. In the example, the start sector number is `1593344`. + + 2. Enter `d` to delete the partition. + + 3. Enter `3` or press `Enter` to delete the partition whose number is `3`. That is, the `/dev/mmcblk0p3`. + + 4. Enter `n` to create a partition. + + 5. Enter `p` or press `Enter` to create a partition of the `Primary` type. + + 6. Enter `3` or press `Enter` to create a partition whose number is `3`. That is, the `/dev/mmcblk0p3`. + + 7. Enter the start sector number of the new partition. That is, the start sector number recorded in Step `1`. In the example, the start sector number is `1593344`. + + > ![](./public_sys-resources/icon-notice.gif) **NOTE:** +Do not press **Enter** or use the default parameters. + + 8. Press `Enter` to use the last sector number by default as the end sector number of the new partition. + + 9. Enter `N` without changing the sector ID. + + 10. Enter `w` to save the partition settings and exit the interactive CLI. + + **Figure 2** Expand the partition capacity +![](./figures/Expand the partition capacity) + +3. Run the `fdisk -l` command as the root user to check the drive partition information and ensure that the drive partition is correct. The command output is as follows: + + ``` + # fdisk -l + Disk /dev/mmcblk0: 14.86 GiB, 15931539456 bytes, 31116288 sectors + Units: sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disklabel type: dos + Disk identifier: 0xf2dc3842 + + Device Boot Start End Sectors Size Id Type + /dev/mmcblk0p1 * 8192 593919 585728 286M c W95 FAT32 (LBA) + /dev/mmcblk0p2 593920 1593343 999424 488M 82 Linux swap / Solaris + /dev/mmcblk0p3 1593344 31116287 29522944 14.1G 83 Linux + ``` + +4. Run the `resize2fs /dev/mmcblk0p3` command as the root user to increase the size of the unloaded file system. + +5. Run the `df -lh` command to check the drive space information and ensure that the root directory partition has been expanded. + + > ![](./public_sys-resources/icon-notice.gif) **NOTE:** +If the root directory partition is not expanded, run the `reboot` command to restart the Raspberry Pi and then run the `resize2fs /dev/mmcblk0p3` command as the root user. + +### Connecting to the Wi-Fi Network + +To connect to the Wi-Fi network, perform the following procedure: + +1. Check the IP address and network adapter information. + + `ip a` + + Obtain information about the wireless network adapter **wlan0**: + + ``` + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever + 2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000 + link/ether dc:a6:32:50:de:57 brd ff:ff:ff:ff:ff:ff + inet 192.168.31.109/24 brd 192.168.31.255 scope global dynamic noprefixroute eth0 + valid_lft 41570sec preferred_lft 41570sec + inet6 fe80::cd39:a969:e647:3043/64 scope link noprefixroute + valid_lft forever preferred_lft forever + 3: wlan0: mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 + link/ether e2:e6:99:89:47:0c brd ff:ff:ff:ff:ff:ff + ``` + +2. Scan information about available Wi-Fi networks. + + `nmcli dev wifi` + +3. Connect to the Wi-Fi network. + + Run the `nmcli dev wifi connect SSID password PWD` command as the root user to connect to the Wi-Fi network. + + In the command, `SSID` indicates the SSID of the available Wi-Fi network scanned in the preceding step, and `PWD` indicates the password of the Wi-Fi network. For example, if the `SSID` is `openEuler-wifi`and the password is `12345678`, the command for connecting to the Wi-Fi network is `nmcli dev wifi connect openEuler-wifi password 12345678`. The connection is successful. + + ``` + Device 'wlan0' successfully activated with '26becaab-4adc-4c8e-9bf0-1d63cf5fa3f1'. + ``` + +4. Check the IP address and wireless network adapter information. + + `ip a` + + ``` + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever + 2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000 + link/ether dc:a6:32:50:de:57 brd ff:ff:ff:ff:ff:ff + inet 192.168.31.109/24 brd 192.168.31.255 scope global dynamic noprefixroute eth0 + valid_lft 41386sec preferred_lft 41386sec + inet6 fe80::cd39:a969:e647:3043/64 scope link noprefixroute + valid_lft forever preferred_lft forever + 3: wlan0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 + link/ether dc:a6:32:50:de:58 brd ff:ff:ff:ff:ff:ff + inet 192.168.31.110/24 brd 192.168.31.255 scope global dynamic noprefixroute wlan0 + valid_lft 43094sec preferred_lft 43094sec + inet6 fe80::394:d086:27fa:deba/64 scope link noprefixroute + valid_lft forever preferred_lft forever + ``` \ No newline at end of file diff --git a/docs/en/docs/Installation/Installation-Modes1.md b/docs/en/docs/Installation/Installation-Modes1.md new file mode 100644 index 0000000000000000000000000000000000000000..5e94c4740b3344996fe1bf75b728e3dfa804b976 --- /dev/null +++ b/docs/en/docs/Installation/Installation-Modes1.md @@ -0,0 +1,121 @@ +# Installation Modes + +> ![](./public_sys-resources/icon-notice.gif) **NOTE:** +> +> - The hardware supports only Raspberry Pi 3B/3B+/4B. +> - The installation is performed by writing images to the SD card. This section describes how to write images using Windows, Linux, and Mac. +> - The image used in this section is the Raspberry Pi image of openEuler. For details about how to obtain the image, see [Installation Preparations](./安装准备-1.html). + + + +- [Installation Modes](./Installation Modes) + - [Writing Images Using Windows](./Writing Images Using Windows) + - [Formatting the SD Card](./Formatting the SD Card) + - [Writing Images to the SD Card](./Writing Images to the SD Card) + - [Writing Images Using Linux](./Writing Images Using Linux) + - [Checking Drive Partition Information](./Checking Drive Partition Information) + - [Unmouting the SD Card](./Unmouting the SD Card) + - [Writing Images to the SD Card](./Writing Images to the SD Card) + - [Writing Images Using the Mac OS](./Writing Images Using the Mac OS) + - [Checking Drive Partition Information](./Checking Drive Partition Information) + - [Unmouting the SD Card](./Unmouting the SD Card) + - [Writing Images to the SD Card](./Writing Images to the SD Card) + + +## Writing Images Using Windows + +This section uses Windows 10 as an example to describe how to write images to the SD card using Windows. + +### Formatting the SD Card + +To format the SD card, perform the following procedure: + +1. Download and install the tool for SD card formatting. The following operations use the SD Card Formatter as an example. + +2. Start the SD Card Formatter. In **Select card**, select the drive letter of the SD card to be formatted. + + If no image has been installed in the SD card, only one drive letter exists. In **Select card**, select the drive letter of the SD card to be formatted. + + If an image has been installed in the SD card, one or more drive letters exist. In **Select card**, select the drive letter E of the boot partition corresponding to the SD card to be formatted. The SD card corresponds to three drive letters: E, G, and H, as shown in the following figure: + + Figure 1 Drive letter +![](./figures/Drive letter) + +3. In **Formatting options**, select a formatting mode. The default mode is **Quick format**. + +4. Click **Format** to start formatting. A progress bar is displayed to show the formatting progress. + +5. After the formatting is completed, a dialog box is displayed, indicating that formatting is successfully completed. Click **OK**. + +### Writing Images to the SD Card + +> ![](./public_sys-resources/icon-notice.gif) **NOTE:** +If the compressed image file **openEuler-20.03-LTS-SP2-raspi-aarch64.img.xz** is obtained, decompress the file to obtain the **openEuler-20.03-LTS-SP2-raspi-aarch64.img** image file. + +To write the **openEuler-20.03-LTS-SP2-raspi-aarch64.img** image file to the SD card, perform the following procedure: + +1. Download and install the tool for writing images. The following operations use the Win32 Disk Imager as an example. +2. Start the Win32 Disk Imager and right-click **Run as administrator**. +3. Select the path of the image file in IMG format from the **Image File** drop-down list box. +4. In **Device**, select the drive letter of the SD card to which data is written. +5. Click **Write**. A progress bar is displayed to show the progress of writing data to the SD card. +6. After the write operation is completed, a dialog box is displayed, indicating that the write operation is successfully completed. Click **OK**. + +## Writing Images Using Linux + +This section describes how to write images to the SD card in the Linux environment. + +### Checking Drive Partition Information + +Run the `fdisk -l` command as the root user to obtain the information of the SD card and drive partitions. For example, the drive partition corresponding to the SD card can be /dev/sdb. + +### Unmouting the SD Card + +1. Run the `df -lh` command to check the mounted volumes. + +2. If the partitions corresponding to the SD card are not mounted, skip this step. If the partitions corresponding to the SD card are mounted, for example, /dev/sdb1 and /dev/sdb3, run the following commands as the root user to unmount the partitions: + + `umount /dev/sdb1` + + `umount /dev/sdb3` + +### Writing Images to the SD Card + +1. If the image obtained is compressed, run the `xz -d openEuler-20.03-LTS-SP2-raspi-aarch64.img.xz` command to decompress the compressed file to obtain the **openEuler-20.03-LTS-SP2-raspi-aarch64.img** image file. Otherwise, skip this step. + +2. Run the following command as the root user to write the `openEuler-20.03-LTS-SP2-raspi-aarch64.img` image to the SD card: + + `dd bs=4M if=openEuler-20.03-LTS-SP2-raspi-aarch64.img of=/dev/sdb` + + > ![](./public_sys-resources/icon-note.gif) **NOTE:** Generally, the block size is set to 4 MB. If the write operation fails or the written image cannot be used, you can set the block size to 1 MB and try again. However, the write operation is time-consuming when the block size is set to 1 MB. + +## Writing Images Using the Mac OS + +This section describes how to flash images to the SD card in the Mac environment. + +### Checking Drive Partition Information + +Run the `diskutil list` command as user root to obtain the information of SD cards and drive partitions. For example, the drive partition corresponding to the SD card can be /dev/disk3. + +### Unmouting the SD Card + +1. Run the `df -lh` command to check the mounted volumes. + +2. If the partitions corresponding to the SD card are not mounted, skip this step. If the partitions corresponding to the SD card are mounted, for example, dev/disk3s1 and /dev/disk3s3, run the following commands as the root user to unmount the partitions: + + `diskutil umount /dev/disk3s1` + + `diskutil umount /dev/disk3s3` + +### Writing Images to the SD Card + +1. If the image obtained is compressed, run the `xz -d openEuler-20.03-LTS-SP2-raspi-aarch64.img.xz` command to decompress the compressed file to obtain the **openEuler-20.03-LTS-SP2-raspi-aarch64.img** image file. Otherwise, skip this step. + +2. Run the following command as the root user to write the image `openEuler-20.03-LTS-SP2-raspi-aarch64.img` to the SD card: + + `dd bs=4m if=openEuler-20.03-LTS-SP2-raspi-aarch64.img of=/dev/sdb` + + > ![](./public_sys-resources/icon-note.gif) **NOTE:** + > + > Generally, the block size is set to 4 MB. If the write operation fails or the written image cannot be used, you can set the block size to 1 MB and try again. However, the write operation is time-consuming when the block size is set to 1 MB. + diff --git a/docs/en/docs/Installation/Installation-Preparations1.md b/docs/en/docs/Installation/Installation-Preparations1.md new file mode 100644 index 0000000000000000000000000000000000000000..0f9694250638c54cc237f0ce04589f9f39f2a11c --- /dev/null +++ b/docs/en/docs/Installation/Installation-Preparations1.md @@ -0,0 +1,125 @@ +# Installation Preparations + +This section describes the compatibility of the hardware and software and the related configurations and preparations required for the installation. + + +- [Installation Preparations](#安装准备) + - [Obtaining the Installation Source](#获取安装源) + - [Verifying the Image Integrity](#镜像完整性校验) + - [Overview](#简介) + - [Prerequisites](#前提条件) + - [Procedure](#操作指导) + - [Installation Requirements](#安装要求) + - [Hardware Compatibility](#硬件兼容支持) + - [Minimum Hardware Specifications](#最小硬件要求) + + +## Obtaining the Installation Source + +Before installation, obtain the openEuler Raspberry Pi image and its verification file. + +1. Log in to the [openEuler Community](https://openeuler.org) website. + +2. Click **Download**. + +3. Click the **Link** provided after **Download ISO**. The download list is displayed. + +4. Click **openEuler-20.03-LTS-SP2**. The openEuler 20.03 LTS SP2 version download list is displayed. + +5. Click **Raspberry Pi**. The Raspberry Pi image download list is displayed. + + - **aarch64**: image of the AArch64 architecture + +6. Click **aarch64** to download the Raspberry Pi AArch64 image download list. + +7. Click **openEuler-20.03-LTS-SP2-raspi-aarch64.img.xz** to download the openEuler Raspberry Pi image to the local PC. + +8. Click **openEuler-20.03-LTS-SP2-raspi-aarch64.img.xz.sha256sum** to download the verification file of the openEuler Raspberry Pi image to the local PC. + +## Verifying the Image Integrity + +### Overview + +During package transmission, to prevent software packages from being incompletely downloaded due to network or storage device problems, you need to verify the integrity of the software packages after obtaining them. Only the software packages that pass the verification can be deployed. + +Compare the verification value recorded in the verification file with the verification value that is manually calculated to determine whether the software package is complete. If the two values are the same, the downloaded file is complete. Otherwise, the downloaded file is incomplete and you need to obtain the software package again. + +### Prerequisites + +Before verifying the integrity of the image file, ensure that the following files are available: + +Image file: **openEuler-20.03-LTS-SP2-raspi-aarch64.img.xz** + +Verification file: **openEuler-20.03-LTS-SP2-raspi-aarch64.img.xz.sha256sum** + +### Procedure + +To verify the file integrity, perform the following procedure: + +1. Obtain the verification value from the verification file. Run the following command: + + ``` + $ cat openEuler-20.03-LTS-SP2-raspi-aarch64.img.xz.sha256sum + ``` + +2. Calculate the SHA256 verification value of the file. Run the following command: + + ``` + $ sha256sum openEuler-20.03-LTS-SP2-raspi-aarch64.img.xz + ``` + + After the command is executed, the verification value is displayed. + +3. Check whether the verification value calculated in step 1 is consistent with that calculated in step 2. + + If the verification values are consistent, the downloaded file is not damaged. Otherwise, the downloaded file is incomplete and you need to obtain the file again. + +## Installation Requirements + +If the openEuler operating system is installed in the Raspberry Pi environment, the Raspberry Pi environment must meet the hardware compatibility and minimum hardware specifications as follows. + +### Hardware Compatibility + +Currently, the openEuler Raspberry Pi image supports the 3B, 3B+, and 4B versions. + +### Minimum Hardware Specifications + +[Table 1](#tff48b99c9bf24b84bb602c53229e2542) lists the minimum hardware specifications for the openEuler Raspberry Pi image. + +**Table 1** Minimum hardware specifications + + + + + + + + + + + + + + + + + + + + + + +

Component Name

+

Minimum Hardware Specifications

+

Description

+

Raspberry Pi version

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

-

+

Memory

+

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

+

-

+

Drive

+

8 GB or higher recommended for better user experience

+

-

+
+ diff --git a/content/en/docs/Installation/Installation.md b/docs/en/docs/Installation/Installation.md similarity index 100% rename from content/en/docs/Installation/Installation.md rename to docs/en/docs/Installation/Installation.md diff --git a/docs/en/docs/Installation/More-Resources.md b/docs/en/docs/Installation/More-Resources.md new file mode 100644 index 0000000000000000000000000000000000000000..9f8814f3ebd6a205bf607e7a66c890f9641d4c85 --- /dev/null +++ b/docs/en/docs/Installation/More-Resources.md @@ -0,0 +1,4 @@ +# Reference + +- [How to Create a Raspberry Pi Image File](https://gitee.com/openeuler/raspberrypi/blob/master/documents/openEuler镜像的构建.md\) +- [How to Use Raspberry Pi](https://gitee.com/openeuler/raspberrypi/blob/master/documents/树莓派使用.md\) \ No newline at end of file diff --git a/content/en/docs/Installation/faqs.md b/docs/en/docs/Installation/faqs.md similarity index 67% rename from content/en/docs/Installation/faqs.md rename to docs/en/docs/Installation/faqs.md index b6124125082eb59ce3098cdc78e8aa12f7dde748..641b3357827d4f58e7407a45ca70db579a751d90 100644 --- a/content/en/docs/Installation/faqs.md +++ b/docs/en/docs/Installation/faqs.md @@ -1,85 +1,63 @@ # FAQs + + - [FAQs](#faqs) - - [Why Does openEuler Fail to Start After I Install It to the Second Disk?](#why-does-openeuler-fail-to-start-after-i-install-it-to-the-second-disk) - - [What Are the Constraints on Network Configurations?](#what-are-the-constraints-on-network-configurations) - - [Why Does openEuler Enter Emergency Mode After It Is Powered On?](#why-does-openeuler-enter-emergency-mode-after-it-is-powered-on) - - [Failed to Reinstall openEuler When a Logical Volume Group That Cannot Be Activated Has Existed in openEuler](#failed-to-reinstall-openeuler-when-a-logical-volume-group-that-cannot-be-activated-has-existed-in-openeuler) + - [openEuler Fails to Start After It Is Installed to the Second Disk](#openEuler-fails-to-start-after-it-is-installed-to-the-second-disk) + - [openEuler Enters Emergency Mode After It Is Started](#openEuler-enters-emergency-mode-after-it-is-started) + - [openEuler Fails to Be Reinstalled When an Unactivated Logical Volume Group Exists](#openEuler-fails-to-be-reinstalled-when-an-unactivated-logical-volume-group-exists) - [An Exception Occurs During the Selection of the Installation Source](#an-exception-occurs-during-the-selection-of-the-installation-source) - - [How Do I Manually Enable the kdump Service?](#how-do-i-manually-enable-the-kdump-service) - - [Failed to Selected Only One Disk for Reinstallation When openEuler Was Installed on a Logical Volume Consisting of Multiple Disks](#failed-to-selected-only-one-disk-for-reinstallation-when-openeuler-was-installed-on-a-logical-volume-consisting-of-multiple-disks) - - [Failed to Install openEuler on an x86 PM in UEFI Mode due to Secure Boot Option Setting](#failed-to-install-openeuler-on-an-x86-pm-in-uefi-mode-due-to-secure-boot-option-setting) - + - [Kdump Service Fails to Be Enabled](#kdump-service-fails-to-be-enabled) + - [Fails to Selected Only One Disk for Reinstallation When openEuler Is Installed on a Logical Volume Consisting of Multiple Disks](#fails-to-selected-only-one-disk-for-reinstallation-when-openeuler-is-installed-on-a-logical-volume-consisting-of-multiple-disks) + - [openEuler Fails to Be Installed on an x86 PM in UEFI Mode Due to Secure Boot Option Settings](#openEuler-fails-to-be-installed-on-an-x86-pm-in-uefi-mode-due-to-secure-boot-option-settings) + - [pmie_check Is Reported in the messages Log During openEuler Installation](#pmie_check-is-reported-in-the-messages-log-during-openeuler-installation) + - [Installation Fails When a User Selects Two Disks with OS Installed and Customizes Partitioning](#installation-fails-when-a-user-selects-two-disks-with-os-installed-and-customizes-partitioning) -## Why Does openEuler Fail to Start After I Install It to the Second Disk? +## openEuler Fails to Start After It Is Installed to the Second Disk ### Symptom The OS is installed on the second disk **sdb** during the installation. The openEuler fails to be started. -### Possible Cause +### Possible Causes When openEuler is installed to the second disk, MBR and GRUB are installed to the second disk **sdb** by default. The following two situations may occur: 1. openEuler installed on the first disk is loaded and started if it is complete. 2. openEuler installed on the first disk fails to be started from hard disks if it is incomplete. -The preceding two situations occur because the first disk **sda** is booted by default to start openEuler on the BIOS window. If openEuler is not installed on the **sda** disk, system restart fails. +The preceding two situations occur because the first disk **sda** is booted by default to start openEuler in the BIOS window. If openEuler is not installed on the **sda** disk, system restart fails. -### Solution +### Solutions This problem can be solved using either of the following two methods: - During the installation of openEuler, select the first disk or both disks, and install the boot loader on the first disk **sda**. -- After installing openEuler, restart it by modifying the boot option on the BIOS window. - -## What Are the Constraints on Network Configurations? - -The NetworkManager and network services are network service management tools. Some functions of the two services overlap. - -- If the NetworkManager service is used, run the **nmcli** command or modify the configuration file to configure the network \(such as the IP address and route\). Do not run the **ip**, **ifconfig**, or **route** command to configure the network. - - >![](public_sys-resources/icon-note.gif) **NOTE:** - >When the NetworkManager service is enabled and you run commands such as **ip**, **ifconfig**, and **route** to configure the network, the configurations will be overwritten by NetworkManager. - - To check whether NetworkManager is enabled, run the following command: - - ``` - systemctl status NetworkManager - ``` - - >![](public_sys-resources/icon-note.gif) **NOTE:** - >For details about the use of the **nmcli** command, see the execution result of the **nmcli --help** or **man nmcli** command. +- After installing openEuler, restart it by modifying the boot option in the BIOS window. -- If you want to run commands such as **ip**, **ifconfig**, and **route** commands to manage network information, run the following command to disable the NetworkManager service: - ``` - systemctl stop NetworkManager - ``` - - -## Why Does openEuler Enter Emergency Mode After It Is Powered On? +## openEuler Enters Emergency Mode After It Is Started ### Symptom openEuler enters emergency mode after it is powered on. -![](figures/en-us_image_0229291264.jpg) +![](./figures/en-us_image_0229291264.jpg) ### Possible Causes Damaged OS files result in disk mounting failure, or overpressured I/O results in disk mounting timeout \(threshold: 90s\). -An unexpected system power-off, and low I/O performance of disks may also cause the problem. +An unexpected system power-off and low I/O performance of disks may also cause the problem. -### Solution +### Solutions -1. Enter the password of the **root** account to log in to openEuler. +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. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >The fsck tool checks and maintains inconsistent file systems. If the system is powered off or a disk 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. @@ -99,19 +77,19 @@ UUID=afcc811f-4b20-42fc-9d31-7307a8cfe0df /boot ext4 defaults,x-systemd.device-t /dev/mapper/openEuler-swap swap swap defaults 0 0 ``` -## Failed to Reinstall openEuler When a Logical Volume Group That Cannot Be Activated Has Existed in openEuler +## openEuler Fails to Be Reinstalled When an Unactivated Logical Volume Group Exists ### Symptom -After a disk fails, openEuler fails to be reinstalled because a logical volume group that cannot be activated has existed in openEuler. +After a disk fails, openEuler fails to be reinstalled because a logical volume group that cannot be activated existed in the system. -### Possible Cause +### Possible Causes During the installation of openEuler, a logical volume group cannot be activated. -### Solution +### Solutions -Before reinstalling openEuler, restore the abnormal logical volume group to the normal status or clear it. The following uses an example: +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: @@ -153,29 +131,30 @@ Before reinstalling openEuler, restore the abnormal logical volume group to the After the selection of the installation source, the message "Error checking software selection" is displayed. -### Possible Cause +### Possible Causes This is because the software package dependency in the installation source is abnormal. -### Solution +### Solutions -Check whether the installation source is abnormal. Use the new installation source. +Check whether the installation source is abnormal. +Use the new installation source. -## How Do I Manually Enable the kdump Service? +## Kdump Service Fails to Be Enabled ### Symptom -Run the **systemctl status kdump** command. The following information is displayed, indicating that no memory is reserved. +The following information is displayed after running the **systemctl status kdump** command, indicating that no memory is reserved. -![](figures/en-us_image_0229291280.png) +![](./figures/en-us_image_0229291280.png) -### Possible Cause +### 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. -### Solution +### Solutions -For the scenario where the OS has been installed +For the scenario where the OS is installed 1. Add **crashkernel=1024M,high** to **/boot/efi/EFI/openEuler/grub.cfg**. 2. Restart the system for configuration to take effect. @@ -187,7 +166,7 @@ For the scenario where the OS has been installed If the following information is displayed, the kdump status is **active**, indicating that the kdump service is enabled. No further action is required. - ![](figures/en-us_image_0229291272.png) + ![](./figures/en-us_image_0229291272.png) ### Parameter Description @@ -247,20 +226,20 @@ The following table describes the parameters of the memory reserved for the kdum -## Failed to Selected Only One Disk for Reinstallation When openEuler Was Installed on a Logical Volume Consisting of Multiple Disks +## Fails to Selected Only One Disk for Reinstallation When openEuler Is Installed on a Logical Volume Consisting of Multiple Disks ### Symptom -If openEuler was installed on a logical volume consisting of multiple disks, an error message will be displayed as shown in [Figure 1](#fig115949762617) when you attempt to select one of the disks for reinstallation. +If openEuler is installed on a logical volume consisting of multiple disks, an error message will be displayed as shown in [Figure 1](#fig115949762617) when you attempt to select one of the disks for reinstallation. **Figure 1** Error message -![](figures/error-message.png "error-message") +![](./figures/error-message.png "error-message") -### Possible Cause +### Possible Causes The previous logical volume contains multiple disks. If you select one of the disks for reinstallation, the logical volume will be damaged. -### Solution +### Solutions The logical volume formed by multiple disks is equivalent to a volume group. Therefore, you only need to delete the corresponding volume group. @@ -270,7 +249,7 @@ The logical volume formed by multiple disks is equivalent to a volume group. The vgs ``` - ![](figures/en-us_image_0231657950.png) + ![](./figures/en-us_image_0231657950.png) 2. Run the following command to delete the volume group: @@ -284,39 +263,88 @@ The logical volume formed by multiple disks is equivalent to a volume group. The systemctl restart anaconda ``` - >![](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. + >![](./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 make the storage configuration take effect. -## Failed to Install openEuler on an x86 PM in UEFI Mode due to Secure Boot Option Setting +## openEuler Fails to Be Installed on an x86 PM in UEFI Mode Due to Secure Boot Option Settings ### 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](#fig115949762617). **Figure 2** Dialog box showing "No bootable device" -![](figures/dialog-box-showing-no-bootable-device.png "dialog-box-showing-no-bootable-device") +![](./figures/dialog-box-showing-no-bootable-device.png "dialog-box-showing-no-bootable-device") -### Possible Cause +### 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, the boot program and OS cannot pass the authentication of the built-in public key on the mainboard. +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. -### Solution +### Solutions -Access the BIOS, set **secure boot** to **disabled**, and reinstall the openEuler. +Access the BIOS, set **secure boot** to **disabled**, and reinstall openEuler. 1. During the system startup, press **F11** and enter the password **Admin@9000** to access the BIOS. - ![](figures/bios.png) + ![](./figures/bios.png) 2. Choose **Administer Secure Boot**. - ![](figures/security.png) + ![](./figures/security.png) 3. Set **Enforce Secure Boot** to **Disabled**. - ![](figures/enforce-secure-boot.png) + ![](./figures/enforce-secure-boot.png) - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >After **Enforce Secure Boot** is set to **Disabled**, save the settings, and exit. Then, reinstall the system. +## pmie_check Is Reported in the messages Log During openEuler Installation + +### Symptom + +PCP-related software package is installed if you select Server > Performance Tool during the OS installation. After the OS is installed and restarted, an error "pmie_check failed in /usr/share/pcp/lib/pmie" is reported in the /var/log/messages file. + +### 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. + + ``` + /usr/libexec/pcp/bin/selinux-setup /var/lib/pcp/selinux install "pcpupstream" + + ``` + +2. Reinstall pcp-selinux + + ``` + sudo dnf reinstall pcp-selinux + + ``` + +## Installation Fails When a User Selects Two Disks with OS Installed and Customizes Partitioning + +### Symptom + +During the OS installation, the OS is installed on two disks. In this case, if you select one disk for custom partitioning, and click **Cancel** to perform custom partitioning on the other disk, the installation fails. + +![](./figures/cancle_disk.png) + +![](./figures/custom_paratition.png) + +### Possible Causes + +A user selects a disk for partitioning. After the user clicks **Cancel** and then selects the other disk, the disk information is incorrect. As a result, the installation fails. + +### Solutions + +Select the target disk for custom partitioning. Do not frequently cancel the operation. If you have to cancel and select another disk, you are advised to reinstall the OS. + +### Learn More About the Issue at: + +https://gitee.com/src-openeuler/anaconda/issues/I29P84?from=project-issue \ No newline at end of file diff --git a/docs/en/docs/Installation/figures/Installation_source.png b/docs/en/docs/Installation/figures/Installation_source.png new file mode 100644 index 0000000000000000000000000000000000000000..b0e7a511d773243ceb1eda5ee80812c9a25fa604 Binary files /dev/null and b/docs/en/docs/Installation/figures/Installation_source.png differ diff --git a/docs/en/docs/Installation/figures/Installation_wizard.png b/docs/en/docs/Installation/figures/Installation_wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..da257ce20795fc2f188a32f3edc1545317b862ad Binary files /dev/null and b/docs/en/docs/Installation/figures/Installation_wizard.png differ diff --git a/docs/en/docs/Installation/figures/advanced-user-configuration.png b/docs/en/docs/Installation/figures/advanced-user-configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..3a27f8b5371323cf27dae8dd7e8549ff1e1f8c4b Binary files /dev/null and b/docs/en/docs/Installation/figures/advanced-user-configuration.png differ diff --git a/content/en/docs/Installation/figures/bios.png b/docs/en/docs/Installation/figures/bios.png similarity index 100% rename from content/en/docs/Installation/figures/bios.png rename to docs/en/docs/Installation/figures/bios.png diff --git a/docs/en/docs/Installation/figures/cancle_disk.png b/docs/en/docs/Installation/figures/cancle_disk.png new file mode 100644 index 0000000000000000000000000000000000000000..d7664bdb77dc0d68775509e4bf225fcba96ca20a Binary files /dev/null and b/docs/en/docs/Installation/figures/cancle_disk.png differ diff --git a/content/en/docs/Installation/figures/completing-the-automatic-installation.png b/docs/en/docs/Installation/figures/completing-the-automatic-installation.png similarity index 100% rename from content/en/docs/Installation/figures/completing-the-automatic-installation.png rename to docs/en/docs/Installation/figures/completing-the-automatic-installation.png diff --git a/docs/en/docs/Installation/figures/confignetwork.png b/docs/en/docs/Installation/figures/confignetwork.png new file mode 100644 index 0000000000000000000000000000000000000000..34782912a8351f8990bf8a82be862d7f1c559626 Binary files /dev/null and b/docs/en/docs/Installation/figures/confignetwork.png differ diff --git a/docs/en/docs/Installation/figures/creating-a-user.png b/docs/en/docs/Installation/figures/creating-a-user.png new file mode 100644 index 0000000000000000000000000000000000000000..c09ca6f98f179ce1971f84940becd4d65817eb8e Binary files /dev/null and b/docs/en/docs/Installation/figures/creating-a-user.png differ diff --git a/docs/en/docs/Installation/figures/custom_paratition.png b/docs/en/docs/Installation/figures/custom_paratition.png new file mode 100644 index 0000000000000000000000000000000000000000..db88ebce92dcc9d808d94faa215a92b37cf42977 Binary files /dev/null and b/docs/en/docs/Installation/figures/custom_paratition.png differ diff --git a/content/en/docs/Installation/figures/dialog-box-showing-no-bootable-device.png b/docs/en/docs/Installation/figures/dialog-box-showing-no-bootable-device.png similarity index 100% rename from content/en/docs/Installation/figures/dialog-box-showing-no-bootable-device.png rename to docs/en/docs/Installation/figures/dialog-box-showing-no-bootable-device.png diff --git a/content/en/docs/Installation/figures/drive-icon.png b/docs/en/docs/Installation/figures/drive-icon.png similarity index 100% rename from content/en/docs/Installation/figures/drive-icon.png rename to docs/en/docs/Installation/figures/drive-icon.png diff --git a/content/en/docs/Installation/figures/en-us_image_0229291229.png b/docs/en/docs/Installation/figures/en-us_image_0229291229.png similarity index 100% rename from content/en/docs/Installation/figures/en-us_image_0229291229.png rename to docs/en/docs/Installation/figures/en-us_image_0229291229.png diff --git a/content/en/docs/Installation/figures/en-us_image_0229291236.png b/docs/en/docs/Installation/figures/en-us_image_0229291236.png similarity index 100% rename from content/en/docs/Installation/figures/en-us_image_0229291236.png rename to docs/en/docs/Installation/figures/en-us_image_0229291236.png diff --git a/content/en/docs/Installation/figures/en-us_image_0229291243.png b/docs/en/docs/Installation/figures/en-us_image_0229291243.png similarity index 100% rename from content/en/docs/Installation/figures/en-us_image_0229291243.png rename to docs/en/docs/Installation/figures/en-us_image_0229291243.png diff --git a/content/en/docs/Installation/figures/en-us_image_0229291247.png b/docs/en/docs/Installation/figures/en-us_image_0229291247.png similarity index 100% rename from content/en/docs/Installation/figures/en-us_image_0229291247.png rename to docs/en/docs/Installation/figures/en-us_image_0229291247.png diff --git a/content/en/docs/Installation/figures/en-us_image_0229291264.jpg b/docs/en/docs/Installation/figures/en-us_image_0229291264.jpg similarity index 100% rename from content/en/docs/Installation/figures/en-us_image_0229291264.jpg rename to docs/en/docs/Installation/figures/en-us_image_0229291264.jpg diff --git a/content/en/docs/Installation/figures/en-us_image_0229291270.png b/docs/en/docs/Installation/figures/en-us_image_0229291270.png similarity index 100% rename from content/en/docs/Installation/figures/en-us_image_0229291270.png rename to docs/en/docs/Installation/figures/en-us_image_0229291270.png diff --git a/content/en/docs/Installation/figures/en-us_image_0229291272.png b/docs/en/docs/Installation/figures/en-us_image_0229291272.png similarity index 100% rename from content/en/docs/Installation/figures/en-us_image_0229291272.png rename to docs/en/docs/Installation/figures/en-us_image_0229291272.png diff --git a/content/en/docs/Installation/figures/en-us_image_0229291280.png b/docs/en/docs/Installation/figures/en-us_image_0229291280.png similarity index 100% rename from content/en/docs/Installation/figures/en-us_image_0229291280.png rename to docs/en/docs/Installation/figures/en-us_image_0229291280.png diff --git a/content/en/docs/Installation/figures/en-us_image_0229291286.png b/docs/en/docs/Installation/figures/en-us_image_0229291286.png similarity index 100% rename from content/en/docs/Installation/figures/en-us_image_0229291286.png rename to docs/en/docs/Installation/figures/en-us_image_0229291286.png diff --git a/content/en/docs/Installation/figures/en-us_image_0229420473.png b/docs/en/docs/Installation/figures/en-us_image_0229420473.png similarity index 100% rename from content/en/docs/Installation/figures/en-us_image_0229420473.png rename to docs/en/docs/Installation/figures/en-us_image_0229420473.png diff --git a/content/en/docs/Installation/figures/en-us_image_0231657950.png b/docs/en/docs/Installation/figures/en-us_image_0231657950.png similarity index 100% rename from content/en/docs/Installation/figures/en-us_image_0231657950.png rename to docs/en/docs/Installation/figures/en-us_image_0231657950.png diff --git a/content/en/docs/Installation/figures/enforce-secure-boot.png b/docs/en/docs/Installation/figures/enforce-secure-boot.png similarity index 100% rename from content/en/docs/Installation/figures/enforce-secure-boot.png rename to docs/en/docs/Installation/figures/enforce-secure-boot.png diff --git a/docs/en/docs/Installation/figures/error-message.png b/docs/en/docs/Installation/figures/error-message.png new file mode 100644 index 0000000000000000000000000000000000000000..c5802a2b7a750eed8429ec06c7e4919a3d161a9e Binary files /dev/null and b/docs/en/docs/Installation/figures/error-message.png differ diff --git a/docs/en/docs/Installation/figures/filesystem_setting.png b/docs/en/docs/Installation/figures/filesystem_setting.png new file mode 100644 index 0000000000000000000000000000000000000000..f431fabace492c21df28a132dd13e722adfeaca4 Binary files /dev/null and b/docs/en/docs/Installation/figures/filesystem_setting.png differ diff --git a/docs/en/docs/Installation/figures/host_env8.png b/docs/en/docs/Installation/figures/host_env8.png new file mode 100644 index 0000000000000000000000000000000000000000..d08dcc89f40e1671a55a42fbcb02f26e987a461e Binary files /dev/null and b/docs/en/docs/Installation/figures/host_env8.png differ diff --git a/content/en/docs/Installation/figures/image-dialog-box.png b/docs/en/docs/Installation/figures/image-dialog-box.png similarity index 100% rename from content/en/docs/Installation/figures/image-dialog-box.png rename to docs/en/docs/Installation/figures/image-dialog-box.png diff --git a/docs/en/docs/Installation/figures/installation-process.png b/docs/en/docs/Installation/figures/installation-process.png new file mode 100644 index 0000000000000000000000000000000000000000..5e5b842790f7454f8178feaaaeca7870caf7f575 Binary files /dev/null and b/docs/en/docs/Installation/figures/installation-process.png differ diff --git a/docs/en/docs/Installation/figures/installation-summary.png b/docs/en/docs/Installation/figures/installation-summary.png new file mode 100644 index 0000000000000000000000000000000000000000..8986d984d84cbf6d2c407c73d0e1f56cf75ecbb7 Binary files /dev/null and b/docs/en/docs/Installation/figures/installation-summary.png differ diff --git a/docs/en/docs/Installation/figures/installsourceen.png b/docs/en/docs/Installation/figures/installsourceen.png new file mode 100644 index 0000000000000000000000000000000000000000..b1f88fa53ce541f06519429e0fd620269fc1a737 Binary files /dev/null and b/docs/en/docs/Installation/figures/installsourceen.png differ diff --git a/docs/en/docs/Installation/figures/password-of-the-root-account.png b/docs/en/docs/Installation/figures/password-of-the-root-account.png new file mode 100644 index 0000000000000000000000000000000000000000..8c95070acf03941cff4c5a65158352a00d15a253 Binary files /dev/null and b/docs/en/docs/Installation/figures/password-of-the-root-account.png differ diff --git a/content/en/docs/Installation/figures/restart-icon.png b/docs/en/docs/Installation/figures/restart-icon.png similarity index 100% rename from content/en/docs/Installation/figures/restart-icon.png rename to docs/en/docs/Installation/figures/restart-icon.png diff --git a/content/en/docs/Installation/figures/security.png b/docs/en/docs/Installation/figures/security.png similarity index 100% rename from content/en/docs/Installation/figures/security.png rename to docs/en/docs/Installation/figures/security.png diff --git a/docs/en/docs/Installation/figures/selecting-a-language.png b/docs/en/docs/Installation/figures/selecting-a-language.png new file mode 100644 index 0000000000000000000000000000000000000000..1af3a311a28e8b5430fdb7e2fa66c1075c217e88 Binary files /dev/null and b/docs/en/docs/Installation/figures/selecting-a-language.png differ diff --git a/docs/en/docs/Installation/figures/selecting-installation-software.png b/docs/en/docs/Installation/figures/selecting-installation-software.png new file mode 100644 index 0000000000000000000000000000000000000000..77bac23d63213439ec5390c619f8eb9821246467 Binary files /dev/null and b/docs/en/docs/Installation/figures/selecting-installation-software.png differ diff --git a/docs/en/docs/Installation/figures/setting-a-system-language.png b/docs/en/docs/Installation/figures/setting-a-system-language.png new file mode 100644 index 0000000000000000000000000000000000000000..686ed8c682e546a942add2d68a98ad0f3b2c1859 Binary files /dev/null and b/docs/en/docs/Installation/figures/setting-a-system-language.png differ diff --git a/docs/en/docs/Installation/figures/setting-date-and-time.png b/docs/en/docs/Installation/figures/setting-date-and-time.png new file mode 100644 index 0000000000000000000000000000000000000000..8d7951c200d142932b6bb267c1ae9bd272ced321 Binary files /dev/null and b/docs/en/docs/Installation/figures/setting-date-and-time.png differ diff --git a/docs/en/docs/Installation/figures/setting-the-installation-destination.png b/docs/en/docs/Installation/figures/setting-the-installation-destination.png new file mode 100644 index 0000000000000000000000000000000000000000..fc4f9576ffda934c4b988fb89b057e15b6159381 Binary files /dev/null and b/docs/en/docs/Installation/figures/setting-the-installation-destination.png differ diff --git a/docs/en/docs/Installation/figures/setting-the-keyboard-layout.png b/docs/en/docs/Installation/figures/setting-the-keyboard-layout.png new file mode 100644 index 0000000000000000000000000000000000000000..bf28842a51bf5b5466065a62be87a4b5588fdf01 Binary files /dev/null and b/docs/en/docs/Installation/figures/setting-the-keyboard-layout.png differ diff --git a/docs/en/docs/Installation/figures/setting-the-network-and-host-name.png b/docs/en/docs/Installation/figures/setting-the-network-and-host-name.png new file mode 100644 index 0000000000000000000000000000000000000000..576c3d22ef8e4653230baee7c199c35fec44d1fd Binary files /dev/null and b/docs/en/docs/Installation/figures/setting-the-network-and-host-name.png differ diff --git a/docs/en/docs/Installation/figures/sourceftp.png b/docs/en/docs/Installation/figures/sourceftp.png new file mode 100644 index 0000000000000000000000000000000000000000..9c9f2f732c2ce4cac32174be7d878a29a9afe2bb Binary files /dev/null and b/docs/en/docs/Installation/figures/sourceftp.png differ diff --git a/docs/en/docs/Installation/figures/sourcenfs.png b/docs/en/docs/Installation/figures/sourcenfs.png new file mode 100644 index 0000000000000000000000000000000000000000..489105d4eacda2edf74cecfdfc8f7b3722616926 Binary files /dev/null and b/docs/en/docs/Installation/figures/sourcenfs.png differ diff --git a/docs/en/docs/Installation/figures/starting-installation.png b/docs/en/docs/Installation/figures/starting-installation.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd779430c0dd891099dffbd7b65298eae0dea58 Binary files /dev/null and b/docs/en/docs/Installation/figures/starting-installation.png differ diff --git a/docs/en/docs/Installation/figures/startparam.png b/docs/en/docs/Installation/figures/startparam.png new file mode 100644 index 0000000000000000000000000000000000000000..23f3d40577edbd879d5f83fefac2015f044b579d Binary files /dev/null and b/docs/en/docs/Installation/figures/startparam.png differ diff --git "a/content/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\240\221\350\216\223\346\264\276.md" b/docs/en/docs/Installation/install-pi.md similarity index 100% rename from "content/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\240\221\350\216\223\346\264\276.md" rename to docs/en/docs/Installation/install-pi.md diff --git a/themes/project/layouts/partials/docs/inject/body.html b/docs/en/docs/Installation/install-server.md similarity index 100% rename from themes/project/layouts/partials/docs/inject/body.html rename to docs/en/docs/Installation/install-server.md diff --git a/content/en/docs/Installation/installation-guideline.md b/docs/en/docs/Installation/installation-guideline.md similarity index 38% rename from content/en/docs/Installation/installation-guideline.md rename to docs/en/docs/Installation/installation-guideline.md index ba60382a03ef42ae52b1d368b26d8f9d0e23fd9c..7878455d49b54e34d1dff1c9ca065d654a3f7b29 100644 --- a/content/en/docs/Installation/installation-guideline.md +++ b/docs/en/docs/Installation/installation-guideline.md @@ -1,93 +1,97 @@ # Installation Guideline -This section describes how to install openEuler using a CD-ROM. The installation process is the same for other installation modes except the boot option. +This section describes how to install openEuler using a CD/DVD-ROM. The installation process is the same for other installation modes except the boot option. + - [Installation Guideline](#installation-guideline) - - [Starting the Installation](#starting-the-installation) - - [Booting from the CD/DVD-ROM Drive](#booting-from-the-cddvd-rom-drive) - - [Installation Wizard](#installation-wizard) - - [Installation in GUI Mode](#installation-in-gui-mode) - - [Configuring an Installation Program Language](#configuring-an-installation-program-language) - - [Entering the Installation Page](#entering-the-installation-page) - - [Setting the Keyboard Layout](#setting-the-keyboard-layout) - - [Setting a System Language](#setting-a-system-language) - - [Setting Date and Time](#setting-date-and-time) - - [Setting the Installation Source](#setting-the-installation-source) - - [Selecting Installation Software](#selecting-installation-software) - - [Setting the Installation Destination](#setting-the-installation-destination) - - [Storage Configuration](#storage-configuration) - - [Setting the Network and Host Name](#setting-the-network-and-host-name) - - [Starting Installation](#starting-installation) - - [Configurations During Installation](#configurations-during-installation) - - [Password Complexity](#password-complexity) - - [Setting the Root User Password](#setting-the-root-user-password) - - [Creating a User](#creating-a-user) - - [Completing the Installation](#completing-the-installation) + - [Starting the Installation](#starting-the-installation) + - [Booting from the CD/DVD-ROM Drive](#booting-from-the-cddvd-rom-drive) + - [Installation Wizard](#installation-wizard) + - [Installation in GUI Mode](#installation-in-gui-mode) + - [Configuring an Installation Program Language](#configuring-an-installation-program-language) + - [Entering the Installation Page](#entering-the-installation-page) + - [Setting the Keyboard Layout](#setting-the-keyboard-layout) + - [Setting a System Language](#setting-a-system-language) + - [Setting Date and Time](#setting-date-and-time) + - [Setting the Installation Source](#setting-the-installation-source) + - [Selecting Installation Software](#selecting-installation-software) + - [Setting the Installation Destination](#setting-the-installation-destination) + - [Storage Configuration](#storage-configuration) + - [Setting the Network and Host Name](#setting-the-network-and-host-name) + - [Setting the Root Password](#setting-the-root-password) + - [Password Complexity](#password-complexity) + - [Creating a User](#creating-a-user) + - [Starting the Installation](#starting-the-installation) + - [Installation Procedure](#installation-procedure) + - [Completing the Installation](#completing-the-installation) - ## Starting the Installation ### Booting from the CD/DVD-ROM Drive Load the ISO image of openEuler from the CD/DVD-ROM drive of the server and restart the server. The procedure is as follows: ->![](public_sys-resources/icon-note.gif) **NOTE:** ->Before the installation, ensure that the server boots from the CD/DVD-ROM drive preferentially. The following steps describe how to install the openEuler using the virtual CD/DVD-ROM drive on the baseboard management controller \(BMC\). Installing the openEuler from a physical drive is simple. After the installation starts, the procedure for the physical drive is the same as that of the virtual drive. +> ![](./public_sys-resources/icon-note.gif) **NOTE:** +> Before the installation, ensure that the server boots from the CD/DVD-ROM drive preferentially. The following steps describe how to install openEuler using the virtual CD/DVD-ROM drive on the baseboard management controller (BMC). The procedure for installing openEuler from a physical drive is simple and is the same as that of the virtual drive. Therefore, no description is provided in this section. 1. On the toolbar, click the icon shown in the following figure. **Figure 1** Drive icon - ![](figures/drive-icon.png "drive-icon") + ![](./figures/drive-icon.png "drive-icon") An image dialog box is displayed, as shown in the following figure. **Figure 2** Image dialog box - ![](figures/image-dialog-box.png "image-dialog-box") + ![](./figures/image-dialog-box.png "image-dialog-box") 2. Select **Image File** and then click **Browse**. The **Open** dialog box is displayed. + 3. Select the image file and click **Open**. In the image dialog box, click **Connect**. If **Connect** changes to **Disconnect**, the virtual CD/DVD-ROM drive is connected to the server. + 4. On the toolbar, click the restart icon shown in the following figure to restart the device. **Figure 3** Restart icon - ![](figures/restart-icon.png "restart-icon") + ![](./figures/restart-icon.png "restart-icon") ### Installation Wizard -A boot menu is displayed after the system is booted using the boot medium. In addition to options for starting the installation program, some other options are available on the boot menu. During system installation, the **Test this media & install openEuler 20.03 LTS** mode is used by default. Press the arrow keys on the keyboard to change the selection, and press **Enter** when the desired option is highlighted. +A boot menu is displayed after the system is booted using the boot medium. In addition to options for starting the installation program, some other options are available on the boot menu. During system installation, the **Test this media \& install openEuler 20.03-LTS-SP2** mode is used by default. Press the arrow keys on the keyboard to change the selection, and press **Enter** when the desired option is highlighted. ->![](public_sys-resources/icon-note.gif) **NOTE:** ->- If you do not perform any operations within 1 minute, the system automatically selects the default option **Test this media & install openEuler 20.03 LTS** and enters the installation page. ->- During PM installation, if you cannot use the arrow keys to select boot options and the system does not respond after you press **Enter**, click ![](figures/en-us_image_0229420473.png) on the BMC page and configure **Key & Mouse Reset**. +>![](./public_sys-resources/icon-note.gif) **NOTE:** +> +>- If you do not perform any operations within 1 minute, the system automatically selects the default option **Test this media \& install openEuler 20.03-LTS-SP2** and enters the installation page. +>- During PM installation, if you cannot use the arrow keys to select boot options and the system does not respond after you press **Enter**, click ![](./figures/en-us_image_0229420473.png) on the BMC page and configure **Key & Mouse Reset**. **Figure 4** Installation Wizard -![](figures/installation-wizard.png "installation-wizard") +![](./figures/Installation_wizard.png "installation-wizard") Installation wizard options are described as follows: -- **Install openEuler 20.03 LTS**: Install openEuler on your server in GUI mode. +- **Install openEuler 20.03-LTS-SP2**: Install openEuler on your server in GUI mode. -- **Test this media & install openEuler 20.03 LTS**: Default option. Install openEuler on your server in GUI mode. The integrity of the installation medium is checked before the installation program is started. +- **Test this media & install openEuler 20.03-LTS-SP2**: Default option. Install openEuler on your server in GUI mode. The integrity of the installation medium is checked before the installation program is started. - **Troubleshooting**: Troubleshooting mode, which is used when the system cannot be installed properly. In troubleshooting mode, the following options are available: - - **Install openEuler 20.03-LTS in basic graphics mode**: Basic graphics installation mode. In this mode, the video driver is not started before the system starts and runs. + + - **Install openEuler 20.03-LTS-SP2 in basic graphics mode**: Basic graphics installation mode. In this mode, the video driver is not started before the system starts and runs. - **Rescue the openEuler system**: Rescue mode, which is used to restore the system. In rescue mode, the installation process is printed in the VNC or BMC, and the serial port is unavailable. -On the installation wizard screen, press **e** to go to the parameter editing screen of the selected option, and press **c** to go to the command-line interface \(CLI\). +On the installation wizard screen, press **e** to go to the parameter editing screen of the selected option, and press **c** to go to the command-line interface (CLI). ### Installation in GUI Mode -On the installation wizard page, select **Test this media & install openEuler 20.03 LTS** to enter the GUI installation mode. +On the installation wizard page, select **Test this media \& install openEuler 20.03-LTS-SP2** to enter the GUI installation mode. Perform graphical installation operations using a keyboard. -- Press **Tab** or **Shift**+**Tab** to move between GUI controls \(such as buttons, area boxes, and check boxes\). +- Press **Tab** or **Shift**+**Tab** to move between GUI controls (such as buttons, area boxes, and check boxes). - Press the up or down arrow key to move a target in the list. - Press the left or right arrow key to move between the horizontal toolbar and watch bar. - Press the spacebar or **Enter** to select or delete highlighted options, expand or collapse a drop-down list. -- Press **Alt**+a shortcut key \(the shortcut key varies for different pages\) to select the control where the shortcut key is located. The shortcut key can be highlighted \(underlined\) by holding down Alt. +- Press **Alt+a shortcut key** (the shortcut key varies for different pages) to select the control where the shortcut key is located. The shortcut key can be highlighted (underlined) by holding down **Alt** . ## Configuring an Installation Program Language @@ -95,7 +99,7 @@ Perform graphical installation operations using a keyboard. After the installation starts, the system will prompt the language that is used during the configuration installation process. English is configured by default, as shown in [Figure 5](#en-us_topic_0186390093_en-us_topic_0122145864_fig144630179151). Configure another language as required. **Figure 5** Selecting a language -![](figures/selecting-a-language.png "selecting-a-language") +![](./figures/selecting-a-language.png "selecting-a-language") After configurations, click **Continue**. The main installation configuration page is displayed. @@ -110,17 +114,17 @@ Some configuration items are matched with safety symbols. A safety symbol will d If you want to exit the installation, click **Exit**. The message "Are you sure you want to exit the installation program?" is displayed. Click **Yes** in the dialog box to go back to the installation wizard page. **Figure 6** Installation summary -![](figures/installation-summary.png "installation-summary") +![](./figures/installation-summary.png "installation-summary") ## Setting the Keyboard Layout On the **INSTALLATION SUMMARY** page, click **KEYBOARD**. You can add or delete multiple keyboard layouts in the system. -- On the left white box, click to select the keyboard layout and click the keyboard under the box. -- To test the keyboard layout: On the left white box, click to select the keyboard layout, click the inside of the right text box, and enter the text to ensure that the keyboard layout can work properly. +- To view the keyboard layout: On the left white box, click to select the keyboard layout and click the keyboard under the box. +- To test the keyboard layout: On the left white box, click to select the keyboard layout, click the inside of the right text box, and enter the text to ensure that the keyboard layout can work properly. **Figure 7** Setting the keyboard layout -![](figures/setting-the-keyboard-layout.png "setting-the-keyboard-layout") +![](./figures/setting-the-keyboard-layout.png "setting-the-keyboard-layout") After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. @@ -128,63 +132,86 @@ After the setting is complete, click **Done** in the upper left corner to go b On the **INSTALLATION SUMMARY** page, click **LANGUAGE SUPPORT** to set the system language, as shown in [Figure 8](#en-us_topic_0186390098_en-us_topic_0122145772_fig187301927172619). Set another language as required, such as Chinese. ->![](public_sys-resources/icon-note.gif) **NOTE:** ->- If you select Chinese, the system does not display Chinese characters after you log in to the system using VNC, because VNC does not support Chinese characters. If you log in to the system in SSH mode, Chinese characters will be displayed. ->- If you select English, there will be no impact. +>![](./public_sys-resources/icon-note.gif) **NOTE:** +> +> - If you select **Chinese**, the system does not support the display of Chinese characters when you log in to the system using VNC, but supports the display of Chinese characters when you log in to the system using a serial port. When you log in to the system using SSH, whether the system supports the display of Chinese characters depends on the SSH client. If you select **English**, the display is not affected. **Figure 8** Setting a system language -![](figures/setting-a-system-language.png "setting-a-system-language") +![](./figures/setting-a-system-language.png "setting-a-system-language") After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. ## Setting Date and Time -On the **INSTALLATION SUMMARY** page, click **TIME & DATE**. On the **TIME & DATE** page, set the system time zone, date, and time. +On the **INSTALLATION SUMMARY** page, click **TIME \& DATE**. On the **TIME \& DATE** page, set the system time zone, date, and time. When setting the time zone, you can click a specific city on the map with the mouse, or select a region from the drop-down list of **Region** or a city from the drop-down list of **City** at the top of the page, as shown in [Figure 9](#en-us_topic_0186390096_en-us_topic_0122145900_fig1260162652312). If your city is not displayed on the map or in the drop-down list, select the nearest city in the same time zone. ->![](public_sys-resources/icon-note.gif) **NOTE:** ->- Before manually setting the time zone, disable the network time synchronization function in the upper right corner. ->- If you want to use the network time, ensure that the network can connect to the remote NTP server. For details about how to set the network, see [Setting the Network and Host Name](#setting-the-network-and-host-name). +>![](./public_sys-resources/icon-note.gif) **NOTE:** +> +>- Before manually setting the time zone, disable the network time synchronization function in the upper right corner. +>- If you want to use the network time, ensure that the network can connect to the remote NTP server. For details about how to set the network, see [Setting the Network and Host Name](#setting-the-network-and-host-name). **Figure 9** Setting date and time -![](figures/setting-date-and-time.png "setting-date-and-time") +![](./figures/setting-date-and-time.png "setting-date-and-time") After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. ## Setting the Installation Source -On the **INSTALLATION SUMMARY** page, click **INSTALLATION SOURCE** to locate the installation source. - -If you use a CD/DVD-ROM for installation, the installation program automatically detects and displays the installation source information. You can use the default settings. [Figure 10](#en-us_topic_0186390100_en-us_topic_0144427079_fig93633295132) shows an example. - -**Figure 10** Setting the installation source -![](figures/setting-the-installation-source.png "setting-the-installation-source") - -When you use the network for installation, if the HTTPS server uses a private certificate, press **e** on the installation wizard page to go to the parameter editing page and add the **inst.noverifyssl** parameter, as shown in [Figure 11](#fig113517811415). - -**Figure 11** Adding the **inst.noverifyssl** parameter -![](figures/adding-the-inst-noverifyssl-parameter.png "adding-the-inst-noverifyssl-parameter") +On the **INSTALLATION SUMMARY** page, click **INSTALLATION SOURCE** to locate the installation source. + +* When you use the complete CD/DVD-ROM for installation, the installation program automatically detects and displays the installation source information. You can use the default settings, as shown in [Figure 10](#zh-cn_topic_0186390100_zh-cn_topic_0144427079_fig93633295132): + + **Figure 10** Installation source +![](./figures/Installation_source.png) + +* When the network source is used for installation, you need to set the URL of the network source. + + - HTTP or HTTPS mode + + The following figure shows the installation source in HTTP or HTTPS mode: + + ![](./figures/installsourceen.png) + + If the HTTPS server uses a private certificate, press **e** on the installation wizard page to go to the parameter editing page of the selected option, and add the **inst.noverifyssl** parameter. + + Enter the actual installation source address, for example, **https://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/x86_64**, where **openEuler-20.03-LTS-SP2** indicates the version number, and **x86_64** indicates the CPU architecture. Use the actual version number and CPU architecture. + + - FTP mode + + The following figure shows the installation source in FTP mode. Enter the FTP address in the text box. + + ![](./figures/sourceftp.png) + + You need to set up an FTP server, mount the **openEuler-20.03-LTS-SP2-x86_64-dvd.iso** image, and copy the mounted files to the shared directory on the FTP server. **x86_64** indicates the CPU architecture. Use the actual image. + + - NFS mode + + The following figure shows the installation source in NFS mode. Enter the NFS address in the text box. + + ![](./figures/sourcenfs.png) + + You need to set up an NFS server, mount the **openEuler-20.03-LTS-SP2-x86_64-dvd.iso** image, and copy the mounted file to the shared directory on the NFS server. **x86_64** indicates the CPU architecture. Use the actual image. + +During the installation, if you have any questions about configuring the installation source, see [An Exception Occurs During the Selection of the Installation Source](./faqs.html#an-exception-occurs-during-the-selection-of-the-installation-source). After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. ->![](public_sys-resources/icon-note.gif) **NOTE:** ->During the installation, if you have any questions about configuring the installation source, see [An Exception Occurs During the Selection of the Installation Source](faqs.html#an-exception-occurs-during-the-selection-of-the-installation-source). - ## Selecting Installation Software On the **INSTALLATION SUMMARY** page, click **SOFTWARE SELECTION** to specify the software package to be installed. -Based on the actual requirements, select **Minimal Install** on the left box and select an add-on in the **Add-Ons for Selected Environment** area on the right, as shown in [Figure 12](#en-us_topic_0186390261_en-us_topic_0122145865_fig03031519101414). +Based on the actual requirements, select **Minimal Install** on the left box and select an add-on in the **Add-Ons for Selected Environment** area on the right, as shown in [Figure 11](#en-us_topic_0186390261_en-us_topic_0122145865_fig03031519101414). -**Figure 12** Selecting installation software -![](figures/selecting-installation-software.png "selecting-installation-software") +**Figure 11** Selecting installation software +![](./figures/selecting-installation-software.png "selecting-installation-software") ->![](public_sys-resources/icon-note.gif) **NOTE:** ->- In **Minimal Install** mode, not all packages in the installation source will be installed. If the required package is not installed, you can mount the installation source to the local PC and configure a repo source, and use DNF to install the package. ->- If you select **Virtual Host**, the virtualization components QEMU, libvirt, and edk2 are installed by default. You can select whether to install the OVS component in the add-on area. +> ![](./public_sys-resources/icon-note.gif) **NOTE:** +>- In **Minimal Install** mode, not all packages in the installation source will be installed. If the required package is not installed, you can mount the installation source to the local PC and configure a repo source, and use DNF to install the package. +>- If you select **Virtual Host**, the virtualization components QEMU, libvirt, and edk2 are installed by default. You can select whether to install the OVS component in the add-on area. After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. @@ -192,120 +219,127 @@ After the setting is complete, click **Done** in the upper left corner to go b On the **INSTALLATION SUMMARY** page, click **INSTALLATION DESTINATION** to select the OS installation disk and partition. -You can view available local storage devices in [Figure 13](#fig1195417125015). +You can view available local storage devices in [Figure 12](#fig1195417125015). ->![](public_sys-resources/icon-notice.gif) **NOTICE:** ->When selecting the device to be installed, you are advised not to use the NVMe SSD storage medium as the OS installation disk. +> ![](./public_sys-resources/icon-notice.gif) **NOTICE:** +When selecting the device to be installed, you are advised not to use the NVMe SSD storage medium as the OS installation disk. -**Figure 13** Setting the installation destination -![](figures/setting-the-installation-destination.png "setting-the-installation-destination") +**Figure 12** Setting the installation destination +![](./figures/setting-the-installation-destination.png "setting-the-installation-destination") ### Storage Configuration On the **INSTALLATION DESTINATION** page, configure storage for system partition. You can either manually configure partitions or select **Automatic** to automatically configure partitioning. ->![](public_sys-resources/icon-note.gif) **NOTE:** ->- During partitioning, to ensure system security and performance, you are advised to divide the device into the following partitions: **/boot**, **/var**, **/var/log**, **/var/log/audit**, **/home**, and **/tmp**. ->- If the system is configured with the swap partition, the swap partition is used when the physical memory of the system is insufficient. Although the swap partition can be used to expand the physical memory, if the swap partition is used due to insufficient memory, the system response slows and the system performance deteriorates. Therefore, you are not advised to configure the swap partition in the system with sufficient physical memory or the performance sensitive system. ->- If you need to split a logical volume group, select **Custom** to manually partition the logical volume group. On the **MANUAL PARTITIONING** page, click **Modify** in the **Volume Group** area to reconfigure the logical volume group. +> ![](./public_sys-resources/icon-note.gif) **NOTE:** +> +> - During partitioning, to ensure system security and performance, you are advised to divide the device into the following partitions: **/boot**, **/var**, **/var/log**, **/var/log/audit**, **/home**, and **/tmp**. +> - If the system is configured with the swap partition, the swap partition is used when the physical memory of the system is insufficient. Although the swap partition can be used to expand the physical memory, if it is used due to insufficient memory, the system response slows and the system performance deteriorates. Therefore, you are not advised to configure the swap partition in the system with sufficient physical memory or in the performance sensitive system. +> - If you need to split a logical volume group, select **Custom** to manually partition the logical volume group. On the **MANUAL PARTITIONING** page, click **Modify** in the **Volume Group** area to reconfigure the logical volume group. **Automatic** -Select **Automatic** if the software is installed in a new storage device or the data in the storage device is not required. +Select **Automatic** if the software is installed in a new storage device or the data in the storage device is not required. After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. -**Customize** +**Custom** -If you need to manually partition the disk, click **Customize** and click **Done** in the upper left corner. The following page is displayed. +If you need to manually partition the disk, click **Custom** and click **Done** in the upper left corner. The following page is displayed. -**Figure 14** MANUAL PARTITIONING page -![](figures/manual-partitioning-page.png "manual-partitioning-page") +On the **MANUAL PARTITIONING** page, you can partition the disk in either of the following ways. After the partitioning is completed, the window shown in [Figure 14](#fig1277151815248) is displayed. -On the **MANUAL PARTITIONING** page, you can partition the disk in either of the following ways: +- Automatic creation: Click **Click here to create them automatically**. The system automatically assigns four mount points according to the available storage space: **/boot**, **/**, **/boot/efi**, and **swap**. +- Manual creation: Click ![](./figures/en-us_image_0229291243.png) to add a mount point. It is recommended that the expected capacity of each mount point not exceed the available space. -- Automatic creation: Click **Click here to create them automatically**. The system automatically assigns four mount points according to the available storage space: **/boot**, **/**, **/boot/efi**, and **swap**. -- Manual creation: Click ![](figures/en-us_image_0229291243.png) to add a mount point. It is recommended that the expected capacity of each mount point not exceed the available space. + >![](./public_sys-resources/icon-note.gif) **NOTE:** +If the expected capacity of the mount point exceeds the available space, the system allocates the remaining available space to the mount point. - >![](public_sys-resources/icon-note.gif) **NOTE:** - >If the expected capacity of the mount point exceeds the available space, the system allocates the remaining available space to the mount point. +**Figure 13** MANUAL PARTITIONING page +![](./figures/filesystem_setting.png "manual-partitioning-page") + >![](./public_sys-resources/icon-note.gif) **NOTE:** +If non-UEFI boot is selected, /boot/efi is not required. Otherwise, it is required. -After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. +After the setting is complete, click **Done** in the upper left corner to go back to the **SUMMARY OF CHANGES** page. +click **Accept Changes** to go back to the **INSTALLATION SUMMARY** page. ## Setting the Network and Host Name -On the **INSTALLATION SUMMARY** page, select **NETWORK & HOST NAME** to configure the system network functions. - -The installation program automatically detects a local access interface. The detected interface is listed in the left box, and the interface details are displayed in the right-hand area, as shown in [Figure 15](#en-us_topic_0186390264_en-us_topic_0122145831_fig123700157297). In the upper right corner, click the switchover button to enable or disable the network interface. You can also click **Configure** to configure the selected interface. - -In the lower left box, enter the host name. The host name can be the fully quantified domain name \(FQDN\) in the format of hostname.domainname or the brief host name in the format of hostname. +On the **INSTALLATION SUMMARY** page, select **NETWORK \& HOST NAME** to configure the system network functions. -**Figure 15** Setting the network and host name -![](figures/setting-the-network-and-host-name.png "setting-the-network-and-host-name") +The installation program automatically detects a local access interface. The detected interface is listed in the left box, and the interface details are displayed in the right-hand area, as shown in [Figure 14](#en-us_topic_0186390264_en-us_topic_0122145831_fig123700157297). You can enable or disable a network interface by clicking the switch in the upper right corner of the page. The switch is turned off by default. If the installation source is set to be the network, turn on the switch. You can also click **Configure** to configure the selected interface. Select **Connect automatically with priority** to enable the NIC to start automatically upon system startup, as shown in Figure 15. -After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. +In the lower left box, enter the host name. The host name can be the fully quantified domain name (FQDN) in the format of hostname.domainname or the brief host name in the format of hostname. -## Starting Installation +**Figure 14** Setting the network and host name +![](./figures/setting-the-network-and-host-name.png "setting-the-network-and-host-name") -On the installation page, after all the mandatory items are configured, the safety symbols will disappear. Then, you can click **Begin Installation** to install the system. +**Figure 15** Configuring the network +![](./figures/confignetwork.png "config-the-network") -**Figure 16** Starting installation -![](figures/starting-installation.png "starting-installation") +After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. -## Configurations During Installation +## Setting the Root Password -After the installation starts, the overall installation progress and the progress of writing the software package to the system are displayed. +Select **Root Password** on the **INSTALLATION SUMMARY** page. The **Root Password** page is displayed, as shown in [Figure 16](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1323165793018). Enter a password based on [Password Complexity](#password-complexity) requirements and confirm the password. -**Figure 17** Installation process -![](figures/installation-process.png "installation-process") +> ![](./public_sys-resources/icon-note.gif) **NOTE:** +> +> - The root account is used to perform key system management tasks. You are not advised to use the root account for daily work or system access. +> +> - If you select **Lock root account** on the **Root Password** page, the root account will be disabled. -During the process of installing software packages, you need to configure the root password and create users. +**Figure 16** Root password +![](./figures/password-of-the-root-account.png "Root password") ### Password Complexity The password of the **root** user or the password of the new user must meet the password complexity requirements. Otherwise, the password configuration or user creation will fail. The password complexity requirements are as follows: 1. A password must contain at least eight characters. + 2. A password must contain at least three of the following types: uppercase letters, lowercase letters, digits, and special characters. + 3. A password must be different from the account name. + 4. A password cannot contain words in the dictionary. - >![](public_sys-resources/icon-note.gif) **NOTE:** - > In the installed openEuler environment, you can run the `cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt` command to export the dictionary library file **dictionary.txt**, and then check whether the password is in the dictionary. + >![](./public_sys-resources/icon-note.gif) **NOTE:** +In the installed openEuler environment, you can run the `cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt` command to export the dictionary library file **dictionary.txt**, and then check whether the password is in the dictionary. -### Setting the Root User Password +After the settings are completed, click **Done** in the upper left corner to return to the **INSTALLATION SUMMARY** page. -Click **Root Password**. In the displayed dialog box, as shown in [Figure 18](#en-us_topic_0186390266_en-us_topic_0122145909_fig1323165793018), enter a password and re-enter to confirm. +## Creating a User ->![](public_sys-resources/icon-note.gif) **NOTE:** ->The root password is required to be configured at the same time of installing software packages. Otherwise, the installation will fail. A **root** account is used for performing critical system administration tasks. It is not recommended to use this account for daily work or system access. +Click **User Creation**. [Figure 17](#en-us_topic_0186390266_en-us_topic_0122145909_fig1237715313319) shows the page for creating a user. Enter a username and set a password. By clicking **Advanced**, you can also configure a home directory and a user group, as shown in [Figure 17](#en-us_topic_0186390266_en-us_topic_0122145909_fig128716531312). -**Figure 18** Password of the **root** account -![](figures/password-of-the-root-account.png "password-of-the-root-account") +**Figure 16** Creating a user +![](./figures/creating-a-user.png "creating-a-user") -After configuration, click **Done** in the left-upper corner to switch back to the installation process page. +**Figure 17** Advanced user configuration +![](./figures/advanced-user-configuration.png "advanced-user-configuration") -### Creating a User +After configuration, click **Done** in the left-upper corner to switch back to the installation process page. -Click **User Creation**. [Figure 19](#en-us_topic_0186390266_en-us_topic_0122145909_fig1237715313319) shows the page for creating a user. Enter a username and set a password. By clicking **Advanced**, you can also configure a home directory and a user group, as shown in [Figure 20](#en-us_topic_0186390266_en-us_topic_0122145909_fig128716531312). +## Starting Installation -**Figure 19** Creating a user -![](figures/creating-a-user.png "creating-a-user") +On the installation page, after all the mandatory items are configured, the safety symbols will disappear. Then, you can click **Begin Installation** to install the system. -**Figure 20** Advanced user configuration -![](figures/advanced-user-configuration.png "advanced-user-configuration") +## Installation Procedure -After configuration, click **Done** in the left-upper corner to switch back to the installation process page. +After the installation starts, the overall installation progress and the progress of writing the software package to the system are displayed. -Click **Finish**. The configuration of openEuler is complete. + >![](./public_sys-resources/icon-note.gif) **NOTE:** +If you click **Exit** or reset or power off the server during the installation, the installation is interrupted and the system is unavailable. In this case, you need to reinstall the system. -![](figures/completing-the-configuration.png) +**Figure 18** Installation process +![](./figures/installation-process.png "installation-process") ## Completing the Installation -openEuler has been installed, as shown in [Figure 21](#en-us_topic_0186390267_en-us_topic_0122145917_fig1429512116338). Click **Reboot** to restart the system. +openEuler has been installed, Click **Reboot** to restart the system. + +>![](./public_sys-resources/icon-note.gif) **NOTE:** +> - If the physical DVD-ROM is used to install the OS and the CD/DVD-ROM drive is not automatically ejected during the restart, manually remove the DVD-ROM. Then, the openEuler CLI login page is displayed. +> - If the virtual DVD-ROM drive is used to install the OS, change the server boot option to **Hard Disk** and restart the server. Then, the openEuler CLI login page is displayed. -**Figure 21** Completing the installation -![](figures/completing-the-installation.png "completing-the-installation") -- If the physical DVD-ROM is used to install the OS and the DVD-ROM drive is not automatically ejected during the restart, manually remove the DVD-ROM. Then, the openEuler CLI login page is displayed. -- If the virtual DVD-ROM drive is used to install the OS, change the server boot option to **Hard Disk** and restart the server. Then, the openEuler CLI login page is displayed. diff --git a/content/en/docs/Installation/installation-mode.md b/docs/en/docs/Installation/installation-mode.md similarity index 84% rename from content/en/docs/Installation/installation-mode.md rename to docs/en/docs/Installation/installation-mode.md index b0920a914013fed75d526eabc37a3158bc9d5451..0b98c385a5990b79aa2173b9ff25bd02635e435b 100644 --- a/content/en/docs/Installation/installation-mode.md +++ b/docs/en/docs/Installation/installation-mode.md @@ -1,7 +1,7 @@ # Installation Mode ->![](public_sys-resources/icon-notice.gif) **NOTICE:** ->- Only TaiShan 200 and FusionServer Pro servers are supported. For details about the supported server models, see [Hardware Compatibility](installation-preparations.html#hardware-compatibility). Only a virtualization platform created by the virtualization components \(openEuler as the host OS and QEMU and KVM provided in the release package\) of openEuler and the x86 virtualization platform of Huawei public cloud are supported. +>![](./public_sys-resources/icon-notice.gif) **NOTICE:** +>- Only TaiShan 200 and FusionServer Pro servers are supported. For details about the supported server models, see [Hardware Compatibility](./installation-preparations.html#hardware-compatibility). Only a virtualization platform created by the virtualization components \(openEuler as the host OS and QEMU and KVM provided in the release package\) of openEuler and the x86 virtualization platform of Huawei public cloud are supported. >- Currently, only installation modes such as CD-ROM, USB flash drive, network, QCOW2 image, and private image are supported. In addition, only the x86 virtualization platform of Huawei public cloud supports the private image installation mode. @@ -35,7 +35,7 @@ If you have obtained a CD/DVD-ROM, install the OS using the CD/DVD-ROM. If you h Perform the following operations to start the installation: ->![](C:/Users/Administrator/Downloads/openDocs/docs/content/en/docs/Installation/public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >Set the system to preferentially boot from the CD/DVD-ROM drive. Take the BIOS as an example. You need to move the **CD/DVD-ROM Drive** option under **Boot Type Order** to the top. 1. Disconnect all drives that are not required, such as USB drives. @@ -59,7 +59,7 @@ Pay attention to the capacity of the USB flash drive. The USB flash drive must h [ 170.171135] sd 5:0:0:0: [sdb] Attached SCSI removable disk ``` - >![](C:/Users/Administrator/Downloads/openDocs/docs/content/en/docs/Installation/public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >Take the **sdb** USB flash drive as an example. 2. Switch to user **root**. When running the **su** command, you need to enter the password. @@ -98,22 +98,25 @@ Pay attention to the capacity of the USB flash drive. The USB flash drive must h Replace **/path/to/image.iso** with the complete path of the downloaded ISO image file, replace **device** with the device name provided by the **dmesg** command, and set a proper block size \(for example, 512 KB\) to replace **blocksize** to accelerate the write progress. - For example, if the ISO image file name is **/home/testuser/Downloads/openEuler-20.03-LTS-aarch64-dvd.iso** and the detected device name is **sdb**, run the following command: + For example, if the ISO image file name is **/home/testuser/Downloads/openEuler-20.03-LTS-SP2-aarch64-dvd.iso** and the detected device name is **sdb**, run the following command: ``` - # dd if=/home/testuser/Downloads/openEuler-20.03-LTS-aarch64-dvd.iso of=/dev/sdb bs=512k + # dd if=/home/testuser/Downloads/openEuler-20.03-LTS-SP2-aarch64-dvd.iso of=/dev/sdb bs=512k ``` 5. After the image is written, remove the USB flash drive. - No progress is displayed during the image write process. When the number sign \(\#\) appears again, the write is complete. Exit the **root** account and remove the USB flash drive. In this case, you can use the USB flash drive as the installation source of the system. + No progress is displayed during the image write process. When the number sign (#) appears again, run the following command to write the data to the drive. Then exit the **root** account and remove the USB flash drive. In this case, you can use the USB drive as the installation source of the system. + ``` + # sync + ``` ### Starting the Installation Perform the following operations to start the installation: ->![](C:/Users/Administrator/Downloads/openDocs/docs/content/en/docs/Installation/public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >Set the system to preferentially boot from the USB flash drive. Take the BIOS as an example. You need to move the **USB** option under **Boot Type Order** to the top. 1. Disconnect all drives that are not required. @@ -131,8 +134,8 @@ If the target hardware is installed with a PXE-enabled NIC, we can configure it For installation through the network using PXE, the client uses a PXE-enabled NIC to send a broadcast request for DHCP information and IP address to the network. The DHCP server provides the client with an IP address and other network information, such as the IP address or host name of the DNS and FTP server \(which provides the files required for starting the installation program\), and the location of the files on the server. ->![](C:/Users/Administrator/Downloads/openDocs/docs/content/en/docs/Installation/public_sys-resources/icon-note.gif) **NOTE:** ->The TFTP, DHCP, and HTTP server configurations are not described here. For details, see [Full-automatic Installation Guide](using-kickstart-for-automatic-installation.html#full-automatic-installation-guide). +>![](./public_sys-resources/icon-note.gif) **NOTE:** +>The TFTP, DHCP, and HTTP server configurations are not described here. For details, see [Full-automatic Installation Guide](./using-kickstart-for-automatic-installation.html#full-automatic-installation-guide). ## Installation Through a QCOW2 Image @@ -178,7 +181,7 @@ Perform the following operations to start the installation: 5. Create a VM. 6. Start the VM. -For details, see the [*openEuler 20.03 LTS Virtualization User Guide*](../Virtualization/virtualization.html). +For details, see the [*openEuler 20.03 LTS SP2 Virtualization User Guide*](./../Virtualization/virtualization.html). ## Installation Through a Private Image diff --git a/docs/en/docs/Installation/installation-preparations.md b/docs/en/docs/Installation/installation-preparations.md new file mode 100644 index 0000000000000000000000000000000000000000..afb54da0e68a15167ca3862f2f144d93c1412f52 --- /dev/null +++ b/docs/en/docs/Installation/installation-preparations.md @@ -0,0 +1,166 @@ +# Installation Preparations + +This section describes the compatibility of the hardware and software and the related configurations and preparations required for the installation. + + + +- [Installation Preparations](#installation-preparations) + - [Obtaining the Installation Source](#obtaining-the-installation-source) + - [Performing Release Package Integrity Check](#performing-release-package-integrity-check) + - [Introduction](#introduction) + - [Prerequisites](#prerequisites) + - [Procedure](#procedure) + - [Installation Requirements for PMs](#installation-requirements-for-pms) + - [Hardware Compatibility](#hardware-compatibility) + - [Minimum Hardware Specifications](#minimum-hardware-specifications) + - [Installation Requirements for VMs](#installation-requirements-for-vms) + - [Virtualization Platform Compatibility](#virtualization-platform-compatibility) + - [Minimum Virtualization Space](#minimum-virtualization-space) + + + +## Obtaining the Installation Source + +Obtain the openEuler release package and verification file before the installation. + +Perform the following operations to obtain the openEuler release package: + +1. Log in to the [openEuler Community](https://openeuler.org/zh/) website. +2. Click **Download**. +3. Choose the card **openEuler 20.03 LTS SP2**, and click **Download ISO**.The download list is displayed. + - **aarch64**: ISO image file of the AArch64 architecture + - **x86_64**: ISO image file of the x86_64 architecture + - **source**: ISO image file of the openEuler source code +4. Select the openEuler release package and verification file to be downloaded based on the actual architecture environment to be installed. + - AArch64 architecture: + 1. Click **aarch64**. + 2. If you install the environment on the local host, download the release package **openEuler-20.03-LTS-SP2-aarch64-dvd.iso** and the verification file **openEuler-20.03-LTS-SP2-aarch64-dvd.iso.sha256sum** to the local host. + 3. If you install the environment on the network, download the release package **openEuler-20.03-LTS-SP2-netinst-aarch64-dvd.iso** and the verification file **openEuler-20.03-LTS-SP2-netinst-aarch64-dvd.iso.sha256sum** to the local host. + + - x86_64 architecture: + 1. Click **x86_64**. + 2. If you install the environment on the local host, download the release package **openEuler-20.03-LTS-SP2-x86_64-dvd.iso** and the verification file **openEuler-20.03-LTS-SP2-x86_64-dvd.iso.sha256sum** to the local host. + 3. If you install the environment on the network, download the release package **openEuler-20.03-LTS-SP2-netinst-x86_64-dvd.iso** and the verification file **openEuler-20.03-LTS-SP2-netinst-x86_64-dvd.iso.sha256sum** to the local host. + +>![](./public_sys-resources/icon-note.gif) **Note:** +> When the network is available, install the environment on the network because the ISO release package is small. +> The release package with AArch64 architecture supports UEFI mode, and the one with x86_64 architecture supports UEFI and Legacy modes. + +## Performing Release Package Integrity Check + +>![](./public_sys-resources/icon-note.gif) **NOTE:** +>This section describes how to verify the integrity of the release package in the AArch64 architecture. The procedure for verifying the integrity of the release package in the x86_64 architecture is the same. + +### Introduction + +To prevent the software package from being incompletely downloaded due to network or storage device faults during transmission, you need to verify its integrity after obtaining it. Only the software packages that pass the verification can be installed. + +Compare the verification value recorded in the verification file with the .iso file verification value calculated manually to check whether the software package passes the verification. If the verification values are consistent, the .iso file is not damaged. If not, the file is damaged and you need to obtain the release package again. + +### Prerequisites + +Before verifying the integrity of the release package, prepare the following files: + +ISO file: **openEuler-20.03-LTS-SP2-aarch64-dvd.iso** + +Verification file: **openEuler-20.03-LTS-SP2-aarch64-dvd.iso.sha256sum** + +### Procedure + +To verify the file integrity, perform the following operations: + +1. Obtain the verification value in the verification file. Run the following command: + + ``` + $ cat openEuler-20.03-LTS-SP2-aarch64-dvd.iso.sha256sum + + ``` + +2. Calculate the SHA256 verification value of the file. Run the following command: + + ``` + $ sha256sum openEuler-20.03-LTS-SP2-aarch64-dvd.iso + ``` + + After the command is run, the verification value is displayed. + +3. Check whether the values obtained from step 1 and step 2 are consistent. + + If the verification values are consistent, the .iso file is not damaged. If not, the file is damaged and you need to obtain the release package again. + +## Installation Requirements for PMs + +To install the openEuler OS on a PM, the PM must meet the following hardware compatibility and minimum hardware requirements. + +### Hardware Compatibility + +You need to take hardware compatibility into account during openEuler installation. [Table 1](#table14948632047) describes the types of supported servers. + +>![](./public_sys-resources/icon-note.gif) **NOTE:** +> +>- TaiShan 200 servers are backed by Huawei Kunpeng 920 processors. +>- Currently, only Huawei TaiShan and FusionServer Pro servers are supported. More servers from other vendors will be supported in the future. + +**Table 1** Supported servers + +| Server Type | Server Name | Server Model | +| :---- | :---- | :---- | +| Rack server | TaiShan 200 | 2280 balanced model | +| Rack server | FusionServer Pro | FusionServer Pro 2288H V5
NOTE:
The server must be configured with the Avago 3508 RAID controller card and the LOM-X722 NIC.| + +### Minimum Hardware Specifications + +[Table 2](#tff48b99c9bf24b84bb602c53229e2541) lists the minimum hardware specifications supported by openEuler. + +**Table 2** Minimum hardware specifications + +| Component | Minimum Hardware Specifications | +| :---- | :---- | +| Architecture | AArch64 or x86_64 | +| CPU | Two CPUs | +| Memory | ≥ 4 GB (8 GB or higher recommended for better user experience) | +| Hard disk | ≥ 32 GB (120 GB or higher recommended for better user experience) | + +## Installation Requirements for VMs + +To install the openEuler OS on a VM, the VM must meet the following hardware compatibility and minimum hardware requirements. + +### Virtualization Platform Compatibility + +When installing openEuler, pay attention to the compatibility of the virtualization platform. Currently, the following virtualization platforms are supported: + +- A virtualization platform created by the openEuler virtualization components (openEuler is used as the host OS, and the virtualization components are QEMU and KVM provided in the release package) +- x86 virtualization platform of Huawei public cloud + +### Minimum Virtualization Space + +[Table 3](#tff48b99c9bf24b84bb602c53229e2541) lists the minimum virtualization space required by openEuler. + +**Table 3** Minimum virtualization space + +| Component | Minimum Virtualization Space | +| :---- | :---- | +| Architecture | AArch64 or x86_64 | +| CPU | Two CPUs| +| Memory | ≥ 4 GB (8 GB or higher recommended for better user experience) | +| Hard disk | ≥ 32 GB (120 GB or higher recommended for better user experience) | + + + + + + + + + + + + + + + + + + + + diff --git a/content/en/docs/Installation/public_sys-resources/icon-caution.gif b/docs/en/docs/Installation/public_sys-resources/icon-caution.gif similarity index 100% rename from content/en/docs/Installation/public_sys-resources/icon-caution.gif rename to docs/en/docs/Installation/public_sys-resources/icon-caution.gif diff --git a/content/en/docs/Installation/public_sys-resources/icon-danger.gif b/docs/en/docs/Installation/public_sys-resources/icon-danger.gif similarity index 100% rename from content/en/docs/Installation/public_sys-resources/icon-danger.gif rename to docs/en/docs/Installation/public_sys-resources/icon-danger.gif diff --git a/content/en/docs/Installation/public_sys-resources/icon-note.gif b/docs/en/docs/Installation/public_sys-resources/icon-note.gif similarity index 100% rename from content/en/docs/Installation/public_sys-resources/icon-note.gif rename to docs/en/docs/Installation/public_sys-resources/icon-note.gif diff --git a/content/en/docs/Installation/public_sys-resources/icon-notice.gif b/docs/en/docs/Installation/public_sys-resources/icon-notice.gif similarity index 100% rename from content/en/docs/Installation/public_sys-resources/icon-notice.gif rename to docs/en/docs/Installation/public_sys-resources/icon-notice.gif diff --git a/content/en/docs/Installation/public_sys-resources/icon-tip.gif b/docs/en/docs/Installation/public_sys-resources/icon-tip.gif similarity index 100% rename from content/en/docs/Installation/public_sys-resources/icon-tip.gif rename to docs/en/docs/Installation/public_sys-resources/icon-tip.gif diff --git a/content/en/docs/Installation/public_sys-resources/icon-warning.gif b/docs/en/docs/Installation/public_sys-resources/icon-warning.gif similarity index 100% rename from content/en/docs/Installation/public_sys-resources/icon-warning.gif rename to docs/en/docs/Installation/public_sys-resources/icon-warning.gif diff --git a/content/en/docs/Installation/using-kickstart-for-automatic-installation.md b/docs/en/docs/Installation/using-kickstart-for-automatic-installation.md similarity index 89% rename from content/en/docs/Installation/using-kickstart-for-automatic-installation.md rename to docs/en/docs/Installation/using-kickstart-for-automatic-installation.md index e461976b19b6b557ac6d2d3af4d082a70e1d3aff..b60fa068dedfadde571dedae175eaa54b120f0d5 100644 --- a/content/en/docs/Installation/using-kickstart-for-automatic-installation.md +++ b/docs/en/docs/Installation/using-kickstart-for-automatic-installation.md @@ -80,7 +80,7 @@ The environment requirements for semi-automatic installation of openEuler using - PM/VM \(for details about how to create VMs, see the documents from corresponding vendors\): includes the computer where kickstart is used for automatic installation and the computer where the kickstart tool is installed. - Httpd: stores the kickstart file. -- ISO: openEuler-20.03-LTS-aarch64-dvd.iso +- ISO: openEuler-20.03-LTS-SP2-aarch64-dvd.iso ### Procedure @@ -88,11 +88,11 @@ To use kickstart to perform semi-automatic installation of openEuler, perform th **Environment Preparation** ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >Before the installation, ensure that the firewall of the HTTP server is disabled. Run the following command to disable the firewall: >``` >iptables -F ->``` +>``` 1. Install httpd and start the service. @@ -106,7 +106,7 @@ To use kickstart to perform semi-automatic installation of openEuler, perform th ``` # mkdir /var/www/html/ks - #vim /var/www/html/ks/openEuler-ks.cfg ===>The file can be obtained by modifying the anaconda-ks.cfg file automatically generated from openEuler. + #vim /var/www/html/ks/openEuler-ks.cfg ===>The file can be obtained by modifying the anaconda-ks.cfg file automatically generated from openEuler, or can be created using the system-config-kickstart tool. ==================================== ***Modify the following information as required.*** #version=DEVEL @@ -156,16 +156,18 @@ To use kickstart to perform semi-automatic installation of openEuler, perform th ===================================== ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >The method of generating the password ciphertext is as follows: - >\# python3 - >Python 3.7.0 \(default, Apr 1 2019, 00:00:00\) - >\[GCC 7.3.0\] on linux + >``` + ># python3 + >Python 3.7.0 (default, Apr 1 2019, 00:00:00) + >[GCC 7.3.0] on linux >Type "help", "copyright", "credits" or "license" for more information. - >\>\>\> import crypt - >\>\>\> passwd = crypt.crypt\("myPasswd"\) - >\>\>\> print\(passwd\) + >>>> import crypt + >>>> passwd = crypt.crypt("myPasswd") + >>>> print (passwd) >$6$63c4tDmQGn5SDayV$mZoZC4pa9Jdt6/ALgaaDq6mIExiOO2EjzomB.Rf6V1BkEMJDcMddZeGdp17cMyc9l9ML9ldthytBEPVcnboR/0 + >``` 3. Mount the ISO image file to the CD-ROM drive of the computer where openEuler is to be installed. @@ -175,18 +177,18 @@ To use kickstart to perform semi-automatic installation of openEuler, perform th **Installing the System** 1. The installation selection dialog box is displayed. - 1. On the installation wizard page in [Starting the Installation](installation-guideline.html#starting-the-installation), select **Install openEuler 20.03 LTS** and press **e**. + 1. On the installation wizard page in [Starting the Installation](./installation-guideline.html#starting-the-installation), select **Install openEuler 20.03 LTS SP2** and press **e**. 2. Add **inst.ks=http://server ip/ks/openEuler-ks.cfg** to the startup parameters. - ![](figures/semi-automatic-installation.png) + ![](./figures/startparam.png) 3. Press **Ctrl**+**x** to start the automatic installation. 2. Verify that the installation is complete. - After the installation is complete, the system automatically restarts. Then, the installation page is displayed again. Shut down the computer and change startup option to start from the hard disk preferentially. + After the installation is complete, the system automatically boots. If the first boot option of the system is set to the CD_ROM, the installation page is displayed again. Shut down the computer and change startup option to start from the hard disk preferentially. - ![](figures/completing-the-automatic-installation.png) + ![](./figures/completing-the-automatic-installation.png) ## Full-automatic Installation Guide @@ -199,7 +201,7 @@ The environment requirements for full-automatic installation of openEuler using - Httpd: stores the kickstart file. - TFTP: provides vmlinuz and initrd files. - DHCPD/PXE: provides the DHCP service. -- ISO: openEuler-20.03-LTS-aarch64-dvd.iso +- ISO: openEuler-20.03-LTS-SP2-aarch64-dvd.iso ### Procedure @@ -207,11 +209,11 @@ To use kickstart to perform full-automatic installation of openEuler, perform th **Environment Preparation** ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >Before the installation, ensure that the firewall of the HTTP server is disabled. Run the following command to disable the firewall: >``` >iptables -F ->``` +>``` 1. Install httpd and start the service. @@ -249,7 +251,7 @@ To use kickstart to perform full-automatic installation of openEuler, perform th 3. Run the following commands to prepare the installation source: ``` - # mount openEuler-20.03-LTS-aarch64-dvd.iso /mnt + # mount openEuler-20.03-LTS-SP2-aarch64-dvd.iso /mnt # cp -r /mnt/* /var/www/html/openEuler/ ``` @@ -271,7 +273,7 @@ To use kickstart to perform full-automatic installation of openEuler, perform th # System language lang zh_CN.UTF-8 #Use http installation source - url --url=http://192.168.122.1/openEuler/ + url --url=//192.168.122.1/openEuler/ %post #enable kdump sed -i "s/ ro / ro crashkernel=1024M,high /" /boot/efi/EFI/openEuler/grub.cfg @@ -314,8 +316,8 @@ To use kickstart to perform full-automatic installation of openEuler, perform th ### BEGIN /etc/grub.d/10_linux ### - menuentry 'Install openEuler 20.03 LTS' --class red --class gnu-linux --class gnu --class os { - set root=(tftp,192.168.122.1) + menuentry 'Install openEuler 20.03 LTS SP2' --class red --class gnu-linux --class gnu --class os { + set root=(tftp,192.168.1.1) linux /vmlinuz ro inst.geoloc=0 console=ttyAMA0 console=tty0 rd.iscsi.waitnet=0 inst.ks=http://192.168.122.1/ks/openEuler-ks.cfg initrd /initrd.img } @@ -336,7 +338,7 @@ To use kickstart to perform full-automatic installation of openEuler, perform th filename "grubaa64.efi"; # pxelinux location of the startup file; next-server 192.168.122.1; # (IMPORTANT) TFTP server IP address; subnet 192.168.122.0 netmask 255.255.255.0 { - option routers 192.168.122.1; # Gateway address + option routers 192.168.111.1; # Gateway address option subnet-mask 255.255.255.0; # Subnet mask range dynamic-bootp 192.168.122.50 192.168.122.200; # Dynamic IP address range default-lease-time 21600; @@ -351,14 +353,14 @@ To use kickstart to perform full-automatic installation of openEuler, perform th 1. On the **Start boot option** screen, press **F2** to boot from the PXE and start automatic installation. - ![](figures/en-us_image_0229291270.png) + ![](./figures/en-us_image_0229291270.png) - ![](figures/en-us_image_0229291286.png) + ![](./figures/en-us_image_0229291286.png) - ![](figures/en-us_image_0229291247.png) + ![](./figures/en-us_image_0229291247.png) 2. The automatic installation window is displayed. 3. Verify that the installation is complete. - ![](figures/completing-the-automatic-installation.png) + ![](./figures/completing-the-automatic-installation.png) diff --git a/docs/en/docs/Kubernetes/Kubernetes.md b/docs/en/docs/Kubernetes/Kubernetes.md new file mode 100644 index 0000000000000000000000000000000000000000..240a75401795b78c8eea9cb98e593df430e4df23 --- /dev/null +++ b/docs/en/docs/Kubernetes/Kubernetes.md @@ -0,0 +1 @@ +# Kubernetes Cluster Deployment Guide **Statement: This document applies only for experiment and learning environments and does not apply to commercial environments.** This document describes how to deploy a Kubernetes cluster in binary mode on openEuler. Note: All operations in this document are performed using the `root` permission. ## Cluster Status The cluster status used in this document is as follows: - Cluster structure: six VMs running the `openEuler 20.03 LTS SP3` OS, three master nodes, and three nodes. - Physical machine: `x86/ARM` server of `openEuler 20.03 LTS SP3`. diff --git a/docs/en/docs/Kubernetes/deploying-a-Kubernetes-cluster.md b/docs/en/docs/Kubernetes/deploying-a-Kubernetes-cluster.md new file mode 100644 index 0000000000000000000000000000000000000000..6a15d10e217bea6fcaaa6ea05e0d8aed46b54d6e --- /dev/null +++ b/docs/en/docs/Kubernetes/deploying-a-Kubernetes-cluster.md @@ -0,0 +1 @@ +# Deploying a Kubernetes Cluster This section describes how to deploy a Kubernetes cluster. ## Environment Obtain the following VM list based on the preceding VM installation and deployment: | HostName | MAC | IPv4 | | ---------- | ----------------- | ------------------ | | k8smaster0 | 52:54:00:00:00:80 | 192.168.122.154/24 | | k8smaster1 | 52:54:00:00:00:81 | 192.168.122.155/24 | | k8smaster2 | 52:54:00:00:00:82 | 192.168.122.156/24 | | k8snode1 | 52:54:00:00:00:83 | 192.168.122.157/24 | | k8snode2 | 52:54:00:00:00:84 | 192.168.122.158/24 | | k8snode3 | 52:54:00:00:00:85 | 192.168.122.159/24 | \ No newline at end of file diff --git a/docs/en/docs/Kubernetes/deploying-a-node-component.md b/docs/en/docs/Kubernetes/deploying-a-node-component.md new file mode 100644 index 0000000000000000000000000000000000000000..e0a25d9fb8b8e44c16bc893383fb47a7d6de18fb --- /dev/null +++ b/docs/en/docs/Kubernetes/deploying-a-node-component.md @@ -0,0 +1,384 @@ +# Deploying a Node Component + + + +This section uses the `k8snode1` node as an example. + +## Environment Preparation + +```bash +# A proxy needs to be configured for the intranet. +$ dnf install -y docker iSulad conntrack-tools socat containernetworking-plugins +$ swapoff -a +$ mkdir -p /etc/kubernetes/pki/ +$ mkdir -p /etc/cni/net.d +$ mkdir -p /opt/cni +# Delete the default kubeconfig file. +$ rm /etc/kubernetes/kubelet.kubeconfig + +## Use iSulad as the runtime ########. +# Configure the iSulad. +cat /etc/isulad/daemon.json +{ + "registry-mirrors": [ + "docker.io" + ], + "insecure-registries": [ + "k8s.gcr.io", + "quay.io" + ], + "pod-sandbox-image": "k8s.gcr.io/pause:3.2",# pause type + "network-plugin": "cni", # If this parameter is left blank, the CNI network plug-in is disabled. In this case, the following two paths become invalid. After the plug-in is installed, restart iSulad. + "cni-bin-dir": "/usr/libexec/cni/", + "cni-conf-dir": "/etc/cni/net.d", +} + +# Add the proxy to the iSulad environment variable and download the image. +cat /usr/lib/systemd/system/isulad.service +[Service] +Type=notify +Environment="HTTP_PROXY=http://name:password@proxy:8080" +Environment="HTTPS_PROXY=http://name:password@proxy:8080" + +# Restart the iSulad and set it to start automatically upon power-on. +systemctl daemon-reload +systemctl restart isulad + + + + +## If Docker is used as the runtime, run the following command: ######## +$ dnf install -y docker +# If a proxy environment is required, configure a proxy for Docker, add the configuration file http-proxy.conf, and edit the following content. Replace name, password, and proxy-addr with the actual values. +$ cat /etc/systemd/system/docker.service.d/http-proxy.conf +[Service] +Environment="HTTP_PROXY=http://name:password@proxy-addr:8080" +$ systemctl daemon-reload +$ systemctl restart docker +``` + +## Creating kubeconfig Configuration Files + +Perform the following operations on each node to create a configuration file: + +```bash +$ kubectl config set-cluster openeuler-k8s \ + --certificate-authority=/etc/kubernetes/pki/ca.pem \ + --embed-certs=true \ + --server=https://192.168.122.154:6443 \ + --kubeconfig=k8snode1.kubeconfig + +$ kubectl config set-credentials system:node:k8snode1 \ + --client-certificate=/etc/kubernetes/pki/k8snode1.pem \ + --client-key=/etc/kubernetes/pki/k8snode1-key.pem \ + --embed-certs=true \ + --kubeconfig=k8snode1.kubeconfig + +$ kubectl config set-context default \ + --cluster=openeuler-k8s \ + --user=system:node:k8snode1 \ + --kubeconfig=k8snode1.kubeconfig + +$ kubectl config use-context default --kubeconfig=k8snode1.kubeconfig +``` + +**Note: Change k8snode1 to the corresponding node name.** + +## Copying the Certificate + +Similar to the control plane, all certificates, keys, and related configurations are stored in the `/etc/kubernetes/pki/` directory. + +```bash +$ ls /etc/kubernetes/pki/ +ca.pem k8snode1.kubeconfig kubelet_config.yaml kube-proxy-key.pem kube-proxy.pem +k8snode1-key.pem k8snode1.pem kube_proxy_config.yaml kube-proxy.kubeconfig +``` + +## CNI Network Configuration + +containernetworking-plugins is used as the CNI plug-in used by kubelet. In the future, plug-ins such as calico and flannel can be introduced to enhance the network capability of the cluster. + +```bash +# Bridge Network Configuration +$ cat /etc/cni/net.d/10-bridge.conf +{ + "cniVersion": "0.3.1", + "name": "bridge", + "type": "bridge", + "bridge": "cnio0", + "isGateway": true, + "ipMasq": true, + "ipam": { + "type": "host-local", + "subnet": "10.244.0.0/16", + "gateway": "10.244.0.1" + }, + "dns": { + "nameservers": [ + "10.244.0.1" + ] + } +} + +# Loopback Network Configuration +$ cat /etc/cni/net.d/99-loopback.conf +{ + "cniVersion": "0.3.1", + "name": "lo", + "type": "loopback" +} +``` + +## Deploying the kubelet Service + +### Configuration File on Which Kubelet Depends + +```bash +$ cat /etc/kubernetes/pki/kubelet_config.yaml +kind: KubeletConfiguration +apiVersion: kubelet.config.k8s.io/v1beta1 +authentication: + anonymous: + enabled: false + webhook: + enabled: true + x509: + clientCAFile: /etc/kubernetes/pki/ca.pem +authorization: + mode: Webhook +clusterDNS: +- 10.32.0.10 +clusterDomain: cluster.local +runtimeRequestTimeout: "15m" +tlsCertFile: "/etc/kubernetes/pki/k8snode1.pem" +tlsPrivateKeyFile: "/etc/kubernetes/pki/k8snode1-key.pem" +``` + +**Note: The IP address of the cluster DNS is 10.32.0.10, which must be the same as the value of service-cluster-ip-range.** + +### Compiling the systemd Configuration File + +```bash +$ cat /usr/lib/systemd/system/kubelet.service +[Unit] +Description=kubelet: The Kubernetes Node Agent +Documentation=https://kubernetes.io/docs/ +Wants=network-online.target +After=network-online.target + +[Service] +ExecStartPre=swapoff -a +ExecStart=/usr/bin/kubelet \ + --config=/etc/kubernetes/pki/kubelet_config.yaml \ + --network-plugin=cni \ + --pod-infra-container-image=k8s.gcr.io/pause:3.2 \ + --kubeconfig=/etc/kubernetes/pki/k8snode1.kubeconfig \ + --register-node=true \ + --hostname-override=k8snode1 \ + --cni-bin-dir="/usr/libexec/cni,/opt/cni/bin" \ + --v=2 + +Restart=always +StartLimitInterval=0 +RestartSec=10 + +[Install] +WantedBy=multi-user.target +``` + +**Note: If iSulad is used as the runtime, add the following configuration:** + +```bash +--container-runtime=remote \ +--container-runtime-endpoint=unix:///var/run/isulad.sock \ +``` + +## Deploying kube-proxy + +### Configuration File on Which kube-proxy Depends + +```bash +cat /etc/kubernetes/pki/kube_proxy_config.yaml +kind: KubeProxyConfiguration +apiVersion: kubeproxy.config.k8s.io/v1alpha1 +clientConnection: + kubeconfig: /etc/kubernetes/pki/kube-proxy.kubeconfig +clusterCIDR: 10.244.0.0/16 +mode: "iptables" +``` + +### Compiling the systemd Configuration File + +```bash +$ cat /usr/lib/systemd/system/kube-proxy.service +[Unit] +Description=Kubernetes Kube-Proxy Server +Documentation=https://kubernetes.io/docs/reference/generated/kube-proxy/ +After=network.target + +[Service] +EnvironmentFile=-/etc/kubernetes/config +EnvironmentFile=-/etc/kubernetes/proxy +ExecStart=/usr/bin/kube-proxy \ + $KUBE_LOGTOSTDERR \ + $KUBE_LOG_LEVEL \ + --config=/etc/kubernetes/pki/kube_proxy_config.yaml \ + --hostname-override=k8snode1 \ + $KUBE_PROXY_ARGS +Restart=on-failure +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target +``` + +## Starting a Component Service + +```bash +$ systemctl enable kubelet kube-proxy +$ systemctl start kubelet kube-proxy +``` + +Deploy other nodes in sequence. + +## Verifying the Cluster Status + +Wait for several minutes and run the following command to check the node status: + +```bash +$ kubectl get nodes --kubeconfig /etc/kubernetes/pki/admin.kubeconfig +NAME STATUS ROLES AGE VERSION +k8snode1 Ready 17h v1.20.2 +k8snode2 Ready 19m v1.20.2 +k8snode3 Ready 12m v1.20.2 +``` + +## Deploying coredns + +coredns can be deployed on a node or master node. In this document, coredns is deployed on the `k8snode1` node. + +### Compiling the coredns Configuration File + +```bash +$ cat /etc/kubernetes/pki/dns/Corefile +.:53 { + errors + health { + lameduck 5s + } + ready + kubernetes cluster.local in-addr.arpa ip6.arpa { + pods insecure + endpoint https://192.168.122.154:6443 + tls /etc/kubernetes/pki/ca.pem /etc/kubernetes/pki/admin-key.pem /etc/kubernetes/pki/admin.pem + kubeconfig /etc/kubernetes/pki/admin.kubeconfig default + fallthrough in-addr.arpa ip6.arpa + } + prometheus :9153 + forward . /etc/resolv.conf { + max_concurrent 1000 + } + cache 30 + loop + reload + loadbalance +} +``` + +Note: + +- Listen to port 53. +- Configure the Kubernetes plug-in, including the certificate and the URL of kube api. + +### Preparing the service File of systemd + +```bash +cat /usr/lib/systemd/system/coredns.service +[Unit] +Description=Kubernetes Core DNS server +Documentation=https://github.com/coredns/coredns +After=network.target + +[Service] +ExecStart=bash -c "KUBE_DNS_SERVICE_HOST=10.32.0.10 coredns -conf /etc/kubernetes/pki/dns/Corefile" + +Restart=on-failure +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target +``` + +### Starting the Service + +```bash +$ systemctl enable coredns +$ systemctl start coredns +``` + +### Creating the Service Object of coredns + +```bash +$ cat coredns_server.yaml +apiVersion: v1 +kind: Service +metadata: + name: kube-dns + namespace: kube-system + annotations: + prometheus.io/port: "9153" + prometheus.io/scrape: "true" + labels: + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" + kubernetes.io/name: "CoreDNS" +spec: + clusterIP: 10.32.0.10 + ports: + - name: dns + port: 53 + protocol: UDP + - name: dns-tcp + port: 53 + protocol: TCP + - name: metrics + port: 9153 + protocol: TCP +``` + +### Creating the Endpoint Object of coredns + +```bash +$ cat coredns_ep.yaml +apiVersion: v1 +kind: Endpoints +metadata: + name: kube-dns + namespace: kube-system +subsets: + - addresses: + - ip: 192.168.122.157 + ports: + - name: dns-tcp + port: 53 + protocol: TCP + - name: dns + port: 53 + protocol: UDP + - name: metrics + port: 9153 + protocol: TCP +``` + +### Confirming the coredns Service + +```bash +# View the service object. +$ kubectl get service -n kube-system kube-dns +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +kube-dns ClusterIP 10.32.0.10 53/UDP,53/TCP,9153/TCP 51m +# View the endpoint object. +$ kubectl get endpoints -n kube-system kube-dns +NAME ENDPOINTS AGE +kube-dns 192.168.122.157:53,192.168.122.157:53,192.168.122.157:9153 52m +``` \ No newline at end of file diff --git a/docs/en/docs/Kubernetes/deploying-control-plane-components.md b/docs/en/docs/Kubernetes/deploying-control-plane-components.md new file mode 100644 index 0000000000000000000000000000000000000000..0b43839e6d92df140e4d800376e6db20b35418c7 --- /dev/null +++ b/docs/en/docs/Kubernetes/deploying-control-plane-components.md @@ -0,0 +1,368 @@ +# Deploying Components on the Control Plane + +## Open dependence ports + +``` +$ firewall-cmd --zone=public --add-port=6443/tcp +$ firewall-cmd --zone=public --add-port=10251-10252/tcp +``` + +## Preparing the kubeconfig File for All Components + +### kube-proxy + +```bash +kubectl config set-cluster openeuler-k8s --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=https://192.168.122.154:6443 --kubeconfig=kube-proxy.kubeconfig +kubectl config set-credentials system:kube-proxy --client-certificate=/etc/kubernetes/pki/kube-proxy.pem --client-key=/etc/kubernetes/pki/kube-proxy-key.pem --embed-certs=true --kubeconfig=kube-proxy.kubeconfig +kubectl config set-context default --cluster=openeuler-k8s --user=system:kube-proxy --kubeconfig=kube-proxy.kubeconfig +kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig +``` + +### kube-controller-manager + +```bash +kubectl config set-cluster openeuler-k8s --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=https://127.0.0.1:6443 --kubeconfig=kube-controller-manager.kubeconfig +kubectl config set-credentials system:kube-controller-manager --client-certificate=/etc/kubernetes/pki/kube-controller-manager.pem --client-key=/etc/kubernetes/pki/kube-controller-manager-key.pem --embed-certs=true --kubeconfig=kube-controller-manager.kubeconfig +kubectl config set-context default --cluster=openeuler-k8s --user=system:kube-controller-manager --kubeconfig=kube-controller-manager.kubeconfig +kubectl config use-context default --kubeconfig=kube-controller-manager.kubeconfig +``` + +### kube-scheduler + +```bash +kubectl config set-cluster openeuler-k8s --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=https://127.0.0.1:6443 --kubeconfig=kube-scheduler.kubeconfig +kubectl config set-credentials system:kube-scheduler --client-certificate=/etc/kubernetes/pki/kube-scheduler.pem --client-key=/etc/kubernetes/pki/kube-scheduler-key.pem --embed-certs=true --kubeconfig=kube-scheduler.kubeconfig +kubectl config set-context default --cluster=openeuler-k8s --user=system:kube-scheduler --kubeconfig=kube-scheduler.kubeconfig +kubectl config use-context default --kubeconfig=kube-scheduler.kubeconfig +``` + +### admin + +```bash +kubectl config set-cluster openeuler-k8s --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=https://127.0.0.1:6443 --kubeconfig=admin.kubeconfig +kubectl config set-credentials admin --client-certificate=/etc/kubernetes/pki/admin.pem --client-key=/etc/kubernetes/pki/admin-key.pem --embed-certs=true --kubeconfig=admin.kubeconfig +kubectl config set-context default --cluster=openeuler-k8s --user=admin --kubeconfig=admin.kubeconfig +kubectl config use-context default --kubeconfig=admin.kubeconfig +``` + +### Obtaining the kubeconfig Configuration File + +```bash +admin.kubeconfig kube-proxy.kubeconfig kube-controller-manager.kubeconfig kube-scheduler.kubeconfig +``` + +## Configuration for Generating the Key Provider + +When api-server is started, a key pair `--encryption-provider-config=/etc/kubernetes/pki/encryption-config.yaml` needs to be provided. In this document, a key pair `--encryption-provider-config=/etc/kubernetes/pki/encryption-config.yaml` is generated by using urandom: + +```bash +$ cat generate.bash +#!/bin/bash + +ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64) + +cat > encryption-config.yaml < + k8smaster0 + 8 + 8 + + hvm + /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw + /var/lib/libvirt/qemu/nvram/k8smaster0.fd + + + + + + + + + 1 + + destroy + restart + restart + + /usr/libexec/qemu-kvm + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +The VM configuration must be unique. Therefore, you need to modify the following to ensure that the VM is unique: + +- name: host name of the VM. You are advised to use lowercase letters. In this example, the value is `k8smaster0`. +- nvram: handle file path of the NVRAM, which must be globally unique. In this example, the value is `/var/lib/libvirt/qemu/nvram/k8smaster0.fd`. +- disk source file: VM disk file path. In this example, the value is `/mnt/vm/images/master0.img`. +- mac address of the interface: MAC address of the interface. In this example, the value is `52:54:00:00:00:80`. + +## Installing a VM + +1. Create and start a VM. + + ```shell + virsh define master.xml + virsh start k8smaster0 + ``` + +2. Obtain the VNC port number of the VM. + + ```shell + virsh vncdisplay k8smaster0 + ``` + +3. Use a VM connection tool, such as VNC Viewer, to remotely connect to the VM and perform configurations as prompted. + +4. Set the host name of the VM, for example, k8smaster0. + + ```shell + hostnamectl set-hostname k8smaster0 + ``` diff --git a/docs/en/docs/Kubernetes/preparing-certificates.md b/docs/en/docs/Kubernetes/preparing-certificates.md new file mode 100644 index 0000000000000000000000000000000000000000..eb5d459e5ce2308b00a39647daa41d2d77834d68 --- /dev/null +++ b/docs/en/docs/Kubernetes/preparing-certificates.md @@ -0,0 +1,413 @@ + +# Preparing Certificates + +**Statement: The certificate used in this document is self-signed and cannot be used in a commercial environment.** + +Before deploying a cluster, you need to generate certificates required for communication between components in the cluster. This document uses the open-source CFSSL as the verification and deployment tool to help users understand the certificate configuration and the association between certificates of cluster components. You can select a tool based on the site requirements, for example, OpenSSL. + +## Building and Installing CFSSL + +The following commands for building and installing CFSSL are for your reference (the CFSSL website access permission is required, and the proxy must be configured first): + +```bash +wget --no-check-certificate https://github.com/cloudflare/cfssl/archive/v1.5.0.tar.gz +tar -zxf v1.5.0.tar.gz +cd cfssl-1.5.0/ +make -j6 +cp bin/* /usr/local/bin/ +``` + +## Generating a Root Certificate + +Compile the CA configuration file, for example, ca-config.json: + +```bash +$ cat ca-config.json | jq +{ + "signing": { + "default": { + "expiry": "8760h" + }, + "profiles": { + "kubernetes": { + "usages": [ + "signing", + "key encipherment", + "server auth", + "client auth" + ], + "expiry": "8760h" + } + } + } +} +``` + +Compile a CA CSR file, for example, ca-csr.json: + +```bash +$ cat ca-csr.json | jq +{ + "CN": "Kubernetes", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "openEuler", + "OU": "WWW", + "ST": "BinJiang" + } + ] +} +``` + +Generate the CA certificate and key: + +```bash +cfssl gencert -initca ca-csr.json | cfssljson -bare ca +``` + +The following certificates are obtained: + +```bash +ca.csr ca-key.pem ca.pem +``` + +## Generating the admin Account Certificate + +admin is an account used by K8S for system management. Compile the CSR configuration of the admin account, for example, admin-csr.json: + +```bash +cat admin-csr.json | jq +{ + "CN": "admin", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "system:masters", + "OU": "Containerum", + "ST": "BinJiang" + } + ] +} +``` + +Generate a certificate: + +```bash +cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin +``` + +The result is as follows: + +```bash +admin.csr admin-key.pem admin.pem +``` + +## Generating a service-account Certificate + +Compile the CSR configuration file of the service-account account, for example, service-account-csr.json: + +```bash +cat service-account-csr.json | jq +{ + "CN": "service-accounts", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "Kubernetes", + "OU": "openEuler k8s install", + "ST": "BinJiang" + } + ] +} +``` + +Generate a certificate: + +```bash +cfssl gencert -ca=../ca/ca.pem -ca-key=../ca/ca-key.pem -config=../ca/ca-config.json -profile=kubernetes service-account-csr.json | cfssljson -bare service-account +``` + +The result is as follows: + +```bash +service-account.csr service-account-key.pem service-account.pem +``` + +## Generating the kube-controller-manager Certificate + +Compile the CSR configuration of kube-controller-manager: + +```bash +{ + "CN": "system:kube-controller-manager", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "system:kube-controller-manager", + "OU": "openEuler k8s kcm", + "ST": "BinJiang" + } + ] +} +``` + +Generate a certificate: + +```bash +cfssl gencert -ca=../ca/ca.pem -ca-key=../ca/ca-key.pem -config=../ca/ca-config.json-profile=kubernetes kube-controller-manager-csr.json | cfssljson -bare kube-controller-manager +``` + +The result is as follows: + +```bash +kube-controller-manager.csr kube-controller-manager-key.pem kube-controller-manager.pem +``` + +## Generating the kube-proxy Certificate + +Compile the CSR configuration of kube-proxy: + +```bash +{ + "CN": "system:kube-proxy", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "system:node-proxier", + "OU": "openEuler k8s kube proxy", + "ST": "BinJiang" + } + ] +} +``` + +Generate a certificate: + +```bash +cfssl gencert -ca=../ca/ca.pem -ca-key=../ca/ca-key.pem -config=../ca/ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy +``` + +The result is as follows: + +```bash +kube-proxy.csr kube-proxy-key.pem kube-proxy.pem +``` + +## Generating the kube-scheduler Certificate + +Compile the CSR configuration of kube-scheduler: + +```bash +{ + "CN": "system:kube-scheduler", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "system:kube-scheduler", + "OU": "openEuler k8s kube scheduler", + "ST": "BinJiang" + } + ] +} +``` + +Generate a certificate: + +```bash +cfssl gencert -ca=../ca/ca.pem -ca-key=../ca/ca-key.pem -config=../ca/ca-config.json -profile=kubernetes kube-scheduler-csr.json | cfssljson -bare kube-scheduler +``` + +The result is as follows: + +```bash +kube-scheduler.csr kube-scheduler-key.pem kube-scheduler.pem +``` + +## Generating the kubelet Certificate + +The certificate involves the host name and IP address of the server where kubelet is located. Therefore, the configuration of each node is different. The script is compiled as follows: + +```bash +$ cat node_csr_gen.bash + +#!/bin/bash + +nodes=(k8snode1 k8snode2 k8snode3) +IPs=("192.168.122.157" "192.168.122.158" "192.168.122.159") + +for i in "${!nodes[@]}"; do + +cat > "${nodes[$i]}-csr.json" < + +- [Quick Start](#quick-start) + - [Installation Preparations](#installation-preparations) + - [Obtaining the Installation Source](#obtaining-the-installation-source) + - [Release Package Integrity Check](#release-package-integrity-check) + - [Starting the Installation](#starting-the-installation) + - [Installation](#installation) + - [Viewing System Information](#viewing-system-information) + + +## Installation Preparations + +- Hardware Compatibility + + [Table 1](#table14948632047) describes the types of supported servers. + + **Table 1** Supported servers + + + + + + + + + + + + + + + + + +

Server Type

+

Server Name

+

Server Model

+

Rack server

+

TaiShan 200

+

2280 balanced model

+

Rack server

+

FusionServer Pro

+

FusionServer Pro 2288H V5

+
NOTE:

The server must be configured with the Avago SAS3508 RAID controller card and the LOM-X722 NIC.

+
+
+ +- Minimum Hardware Specifications + + [Table 2](#tff48b99c9bf24b84bb602c53229e2541) lists the minimum hardware specifications supported by openEuler. + + **Table 2** Minimum hardware specifications + + + + + + + + + + + + + + + + + + + + + + + + + +

Component

+

Minimum Hardware Specifications

+

Description

+

Architecture

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

CPU

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

-

+

Memory

+

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

+

-

+

Hard disk

+

≥ 120 GB (for better user experience)

+

The hard disk supports IDE, SATA, SAS interfaces.

+
+ + +## Obtaining the Installation Source + +Perform the following operations to obtain the openEuler release package: + +> ![](./public_sys-resources/icon-note.gif) **NOTE:** +The release packages of the AArch64 architecture support the UEFI mode, and the release packages of the x86\_64 architecture support the UEFI and Legacy modes. + +1. Log in to the [openEuler Community](https://openeuler.org) website. + +2. Click **Download**. + +3. Click the link provided after **Download ISO**. The download list is displayed. + +4. Click **openEuler-20.03-LTS-SP2**. The openEuler 20.03-LTS-SP2 version download list is displayed. + +5. Click **ISO**. The ISO download list is displayed. + + - **aarch64**: ISO image file of the AArch64 architecture + - **x86\_64**: ISO image file of the x86\_64 architecture + - **source**: ISO image file of the openEuler source code + +6. Select the openEuler release package and verification file to be downloaded based on the architecture of the environment to be installed. + + - If the AArch64 architecture is used: + + 1. Click **aarch64**. + 2. Click **openEuler-20.03-LTS-SP2-aarch64-dvd.iso** to download the openEuler release package to the local host. + 3. Click **openEuler-20.03-LTS-SP2-aarch64-dvd.iso.sha256sum** to download the openEuler verification file to the local host. + + - If the x86\_64 architecture is used: + + 1. Click **x86\_64**. + 2. Click **openEuler-20.03-LTS-SP2-x86\_64-dvd.iso** to download the openEuler release package to the local host. + 3. Click **openEuler-20.03-LTS-SP2-x86\_64-dvd.iso.sha256sum** to download the openEuler verification file to the local host. + +## Release Package Integrity Check + +To prevent incomplete download of the software package due to network or storage device problems during the transmission, you can perform the following steps to check the integrity of the obtained openEuler software package: + +1. Obtain the verification value in the verification file. Run the following command: + + ``` + $cat openEuler-20.03-LTS-SP2-aarch64-dvd.iso.sha256sum + ``` + +2. Calculate the SHA256 verification value of the file. Run the following command: + + ``` + $sha256sum openEuler-20.03-LTS-SP2-aarch64-dvd.iso + ``` + + After the command is run, the verification value is displayed. + +3. Check whether the values calculated in step 1 and step 2 are consistent. + + If the verification values are consistent, the .iso file is not damaged. If they are inconsistent, you can confirm that the file is damaged and you need to obtain the file again. + +## Starting the Installation + +1. Log in to the iBMC WebUI. + + For details, see [TaiShan 200 Server User Guide (Model 2280)](https://support.huawei.com/enterprise/en/doc/EDOC1100093459). + +2. Choose **Configuration** from the main menu, and select **Boot Device** from the navigation tree. The **Boot Device** page is displayed. + + Set **Effective** and **Boot Medium** to **One-time** and **DVD-ROM**, respectively, and click **Save**, as shown in [Figure 1](#fig1011938131018). + + **Figure 1** Setting the boot device +![](./figures/setting-the-boot-device.png "setting-the-boot-device") + +3. Choose **Remote Console** from the main menu. The **Remote Console** page is displayed. + + Select an integrated remote console as required to access the remote virtual console, for example, **Java Integrated Remote Console (Shared)**. + +4. On the toolbar, click the icon shown in the following figure. + + **Figure 2** Drive icon +![](./figures/drive-icon.png "drive-icon") + + An image dialog box is displayed, as shown in the following figure. + + **Figure 3** Image dialog box +![](./figures/image-dialog-box.png "image-dialog-box") + +5. Select **Image File** and then click **Browse**. The **Open** dialog box is displayed. + +6. Select the image file and click **Open**. In the image dialog box, click **Connect**. If **Connect** changes to **Disconnect**, the virtual CD/DVD-ROM drive is connected to the server. + +7. On the toolbar, click the restart icon shown in the following figure to restart the device. + + **Figure 4** Restart icon +![](./figures/restart-icon.png "restart-icon") + +8. A boot menu is displayed after the system restarts, as shown in [Figure 5](#fig1648754873314). + + > ![](./public_sys-resources/icon-note.gif) **NOTE:** + > + > - If you do not perform any operations within 1 minute, the system automatically selects the default option **Test this media \& install openEuler 20.03-LTS-SP2** and enters the installation page. + > - During PM installation, if you cannot use the arrow keys to select boot options and the system does not respond after you press **Enter**, click ![](./figures/en-us_image_0229420473.png) on the BMC page and configure **Key \& Mouse Reset**. + + **Figure 5** Installation Wizard + ![](./figures/Installation_wizard.png "Installation_wizard") + +9. On the installation wizard page, press **Enter** to select the default option **Test this media \& install openEuler 20.03-LTS-SP2** to enter the GUI installation page. + +## Installation + +After entering the GUI installation page, perform the following operations to install the system: + +1. Set an installation language. The default language is English. You can change the language based on the site requirements, as shown in [Figure 6](#fig874344811484). + + **Figure 6** Selecting a language + ![](./figures/selecting-a-language.png "selecting-a-language") + +2. On the **INSTALLATION SUMMARY** page, set configuration items based on the site requirements. + + - A configuration item with an alarm symbol must be configured. When the alarm symbol disappears, you can perform the next operation. + - A configuration item without an alarm symbol is configured by default. + - You can click **Begin Installation** to install the system only when all alarms are cleared. + + **Figure 7** Installation summary + ![](./figures/installation-summary.png "installation-summary") + + 1. Select **Software Selection** to set configuration items. + + Based on the site requirements, select **Minimal Install** on the left box and select an add-on in the **Add-Ons for Selected Environment** area on the right, as shown in [Figure 8](#fig1133717611109). + + **Figure 8** Selecting installation software + ![](./figures/selecting-installation-software.png "selecting-installation-software") + + > ![](./public_sys-resources/icon-note.gif) **NOTE:** + > + > - In **Minimal Install** mode, not all packages in the installation source will be installed. If the required package is not installed, you can mount the installation source to the local PC and configure a repo source, and use DNF to install the package. + > - If you select **Virtual Host**, the virtualization components QEMU, libvirt, and edk2 are installed by default. You can select whether to install the OVS component in the add-on area. + + After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. + + 2. Select **Installation Destination** to set configuration items. + + On the **INSTALLATION DESTINATION** page, select a local storage device. + + > ![](./public_sys-resources/icon-notice.gif) **NOTICE:** + > When selecting the device to be installed, you are advised not to use the NVMe SSD storage medium as the OS installation disk. + + You also need to configure the storage to partition the system. You can either manually configure partitions or select **Automatic** to automatically configure partitioning. Select **Automatic** if the software is installed in a new storage device or the data in the storage device is not required, as shown in [Figure 9](#fig153381468101). + + **Figure 9** Setting the installation destination + ![](./figures/setting-the-installation-destination.png "setting-the-installation-destination") + + > ![](./public_sys-resources/icon-note.gif) **NOTE:** + > + > - During partitioning, to ensure system security and performance, you are advised to divide the device into the following partitions: **/boot**, **/var**, **/var/log**, **/var/log/audit**, **/home**, and **/tmp**. + > - If the system is configured with the swap partition, the swap partition is used when the physical memory of the system is insufficient. Although the swap partition can be used to expand the physical memory, if the swap partition is used due to insufficient memory, the system response slows and the system performance deteriorates. Therefore, you are not advised to configure the swap partition in the system with sufficient physical memory or the performance sensitive system. + > - If you need to split a logical volume group, select **Custom** to manually partition the logical volume group. On the **MANUAL PARTITIONING** page, click **Modify** in the **Volume Group** area to reconfigure the logical volume group. + + After the setting is complete, click **Done** in the upper left corner to go back to the **INSTALLATION SUMMARY** page. + + 3. Select **Root Password** and set the root password. + + On the **ROOT PASSWORD** page, enter a password that meets the [Password Complexity](#密码复杂度) requirements and confirm the password, as shown in [Figure 10](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1323165793018). + + > ![](./public_sys-resources/icon-note.gif) **NOTE:** + > + > - The root account is used to perform key system management tasks. You are not advised to use the root account for daily work or system access. + > + > - If you select **Lock root account** on the **Root Password** page, the root account will be disabled. + + **Password Complexity** + + The password of user root or a new user must meet the password complexity requirements. Otherwise, the password setting or user creation will fail. The password must meet the following requirements: + + 1. Contain at least eight characters. + + 2. Contain at least three of the following: uppercase letters, lowercase letters, digits, and special characters. + + 3. Different from the user name. + + 4. Not allowed to contain words in the dictionary. + + > ![](./public_sys-resources/icon-note.gif) **NOTE:** + > In the openEuler environment, you can run the `cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt` command to export the dictionary library file **dictionary.txt**. You can check whether the password is in this dictionary. + + **Figure 10** Root password + ![](./figures/password-of-the-root-account.png "Root password") + + After the settings are completed, click **Done** in the upper left corner to return to the **INSTALLATION SUMMARY** page. + + 4. Select **Create a User** and set the parameters. + + Figure 11](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1237715313319) shows the page for creating a user. Enter the user name and set the password. The password complexity must be the same as that of the root password. In addition, you can set the home directory and user group by clicking **Advanced**, as shown in [Figure 12](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1237715313319). + + **Figure 11** Creating a user + ![](./figures/creating-a-user.png "creating-a-user") + + **Figure 12** Advanced user configuration + ![](./figures/advanced-user-configuration.png "Advanced user configuration") + After the settings are completed, click **Done** in the upper left corner to return to the **INSTALLATION SUMMARY** page. + + 5. Set other configuration items. You can use the default values for other configuration items. + +3. Click **Start the Installation** to install the system, as shown in [Figure 13](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1237715313319). + + **Figure 13** Starting the installation + ![](./figures/installation-process.png "installation-process") +4. After the installation is completed, restart the system. + + openEuler has been installed. Click **Reboot** to restart the system. + +## Viewing System Information + +After the system is installed and restarted, the system CLI login page is displayed. Enter the username and password set during the installation to log in to openEuler OS and view the following system information. For details about system management and configuration, see the [openEuler 20.03-LTS-SP2 Administrator Guide](./../Administration/administration.html). + +- Run the following command to view the system information: + + ``` + cat /etc/os-release + ``` + + For example, the command and output are as follows: + + ``` + $ cat /etc/os-release + NAME="openEuler" + VERSION="20.03 (LTS-SP2)" + ID="openEuler" + VERSION_ID="20.03" + PRETTY_NAME="openEuler 20.03 (LTS-SP2)" + ANSI_COLOR="0;31" + ``` + +- View system resource information. + + Run the following command to view the CPU information: + + ``` + lscpu + ``` + + Run the following command to view the memory information: + + ``` + free + ``` + + Run the following command to view the disk information: + + ``` + fdisk -l + ``` + +- Run the following command to view the IP address: + + ``` + ip addr + ``` \ No newline at end of file diff --git a/content/en/docs/Releasenotes/acknowledgement.md b/docs/en/docs/Releasenotes/acknowledgment.md similarity index 80% rename from content/en/docs/Releasenotes/acknowledgement.md rename to docs/en/docs/Releasenotes/acknowledgment.md index 47c049cdd996b1d7f590a023e095661e90599b30..ac610fdf054e041e13d6b45bf2f9670d2c394f62 100644 --- a/content/en/docs/Releasenotes/acknowledgement.md +++ b/docs/en/docs/Releasenotes/acknowledgment.md @@ -1,4 +1,4 @@ -# Acknowledgement +# Acknowledgment We sincerely thank all the members who participated in and assisted in the openEuler project. It is your hard work to make the version released successfully and provide the possibility for the better development of openEuler. diff --git a/docs/en/docs/Releasenotes/appendix.md b/docs/en/docs/Releasenotes/appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..edeebe32818552eed3d1b5ced5e693ffded59d8d --- /dev/null +++ b/docs/en/docs/Releasenotes/appendix.md @@ -0,0 +1,7 @@ +The following legal information concerns some software in openEuler. + +This product includes the Zend Engine, freely available at http://www.zend.com + +Portions Copyright (c) 2002-2007 Charlie Poole or Copyright (c) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright (c) 2000-2002 Philip A. Craig +Portions of this software are copyright © <2020> The FreeType Project (www.freetype.org). All rights reserved. + diff --git a/content/en/docs/Releasenotes/contribution.md b/docs/en/docs/Releasenotes/contribution.md similarity index 61% rename from content/en/docs/Releasenotes/contribution.md rename to docs/en/docs/Releasenotes/contribution.md index cdac896b9a5b0634beec67586d09cdd93403958f..103ba79a562fdbe9d029d2bfb8b08983791d7b80 100644 --- a/content/en/docs/Releasenotes/contribution.md +++ b/docs/en/docs/Releasenotes/contribution.md @@ -1,22 +1,22 @@ # Contribution -As an openEuler user, you can contribute to the openEuler community in multiple ways. For details about how to contribute to the community, see [Contributions to the Community](https://openeuler.org/en/developer.html). Here, some methods are listed for reference. +As an openEuler user, you can contribute to the openEuler community in multiple ways. For details about how to contribute to the community, see [How to Contribute](https://openeuler.org/en/community/contribution/). Here, some methods are listed for reference. ## Special Interest Groups \(SIGs\) -openEuler brings together people of common interest to form different special interest groups \(SIGs\). For details about existing SIGs, see the [SIG list](https://openeuler.org/en/sig.html). +openEuler brings together people of common interest to form different special interest groups \(SIGs\). For details about existing SIGs, see the [SIG list](https://openeuler.org/en/sig/sig-list/). -You are welcome to join an existing SIG or create a SIG. For details about how to create a SIG, see the [SIG Management Procedure](https://gitee.com/openeuler/community/blob/master/zh/technical-committee/governance/README.md). +You are welcome to join an existing SIG or create a SIG. For details about how to create a SIG, see the [SIG Management Procedure](https://gitee.com/openeuler/community/blob/master/en/technical-committee/governance/README.md\). ## Mail List and Tasks -You are welcome to actively help users solve problems raised in the [mail list](https://openeuler.org/en/community/mails.html) and issues \(including [code repository issues](https://gitee.com/organizations/openeuler/issues) and [software package repository issues](https://gitee.com/organizations/src-openeuler/issues)\). In addition, you can submit an issue. All these will help the openEuler community to develop better. +You are welcome to actively help users solve problems raised in the [mail list](https://openeuler.org/en/community/mailing-list/) and issues \(including [code repository issues](https://gitee.com/organizations/openeuler/issues) and [software package repository issues](https://gitee.com/organizations/src-openeuler/issues)\). In addition, you can submit an issue. All these will help the openEuler community to develop better. ## Documents -You can contribute to the community by submitting code. We also welcome your feedback on problems and difficulties, or suggestions on improving the usability and integrity of documents. For example, problems in obtaining software or documents and difficulties in using the system. Welcome to pay attention to and improve the documentation module of the [openEuler community](https://openeuler.org/zh/). +You can contribute to the community by submitting code. We also welcome your feedback on problems and difficulties, or suggestions on improving the usability and integrity of documents. For example, problems in obtaining software or documents and difficulties in using the system. Welcome to pay attention to and improve the documentation module of the [openEuler community](https://openeuler.org/en/). ## IRC -openEuler has also opened a channel in IRC as an additional channel to provide community support and interaction. For details, see [openEuler IRC](https://openeuler.org/zh/community/irc.html). +openEuler has also opened a channel in IRC as an additional channel to provide community support and interaction. For details, see [openEuler IRC](https://gitee.com/openeuler/community/blob/master/en/communication/IRCs\). diff --git a/docs/en/docs/Releasenotes/cve.md b/docs/en/docs/Releasenotes/cve.md new file mode 100644 index 0000000000000000000000000000000000000000..ede451c55ae971cabdfd7bb8214e274e9c3dbc81 --- /dev/null +++ b/docs/en/docs/Releasenotes/cve.md @@ -0,0 +1,310 @@ +# CVE Vulnerability + +| CVE | Package Name | Description | openEuler Scoring | Fixed or Not | +|------------------|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|------| +| CVE-2018-2938 | derby | Vulnerability in the Java SE component of Oracle Java SE (subcomponent: Java DB). Supported versions that are affected are Java SE: 6u191, 7u181 and 8u172. Difficult to exploit vulnerability allows unauthenticated attacker with network access via multiple protocols to compromise Java SE. While the vulnerability is in Java SE, attacks may significantly impact additional products. Successful attacks of this vulnerability can result in takeover of Java SE. Note: This vulnerability can only be exploited by supplying data to APIs in the specified Component without using Untrusted Java Web Start applications or Untrusted Java applets, such as through a web service. | 9.0 | N/A | +| CVE-2020-12049 | dbus | An issue was discovered in dbus >= 1.3.0 before 1.12.18. The DBusServer in libdbus, as used in dbus-daemon, leaks file descriptors when a message exceeds the per-message file descriptor limit. A local attacker with access to the D-Bus system bus or another system service's private AF_UNIX socket could use this to make the system service reach its file descriptor limit, denying service to subsequent D-Bus clients. | 5.0 | Fixed | +| CVE-2019-20934 | linux kernel | An issue was discovered in the Linux kernel before 5.2.6. On NUMA systems, the Linux fair scheduler has a use-after-free in show_numa_stats() because NUMA fault statistics are inappropriately freed, aka CID-16d51a590a8c. | 5.0 | Fixed | +| CVE-2020-28941 | linux kernel | An issue was discovered in drivers/accessibility/speakup/spk_ttyio.c in the Linux kernel through 5.9.9. Local attackers on systems with the speakup driver could cause a local denial of service attack, aka CID-d41227544427. This occurs because of an invalid free when the line discipline is used more than once. | 5.0 | Fixed | +| CVE-2020-29368 | linux kernel | An issue was discovered in __split_huge_pmd in mm/huge_memory.c in the Linux kernel before 5.7.5. The copy-on-write implementation can grant unintended write access because of a race condition in a THP mapcount check, aka CID-c444eb564fb1. | 7.0 | Fixed | +| CVE-2020-29373 | linux kernel | An issue was discovered in fs/io_uring.c in the Linux kernel before 5.6. It unsafely handles the root directory during path lookups, and thus a process inside a mount namespace can escape to unintended filesystem locations, aka CID-ff002b30181d. | 6.0 | Fixed | +| CVE-2020-29370 | linux kernel | An issue was discovered in kmem_cache_alloc_bulk in mm/slub.c in the Linux kernel before 5.5.11. The slowpath lacks the required TID increment, aka CID-fd4d9c7d0c71. | 7.0 | Fixed | +| CVE-2020-25705 | linux kernel | A flaw in the way reply ICMP packets are limited in the Linux kernel functionality was found that allows to quickly scan open UDP ports. This flaw allows an off-path remote user to effectively bypassing source port UDP randomization. The highest threat from this vulnerability is to confidentiality and possibly integrity, because software that relies on UDP source port randomization are indirectly affected as well. Kernel versions before 5.10 may be vulnerable to this issue. | 7.4 | Fixed | +| CVE-2020-29369 | linux kernel | An issue was discovered in mm/mmap.c in the Linux kernel before 5.7.11. There is a race condition between certain expand functions (expand_downwards and expand_upwards) and page-table free operations from an munmap call, aka CID-246c320a8cfe. | 7.0 | Fixed | +| CVE-2020-29372 | linux kernel | An issue was discovered in do_madvise in mm/madvise.c in the Linux kernel before 5.6.8. There is a race condition between coredump operations and the IORING_OP_MADVISE implementation, aka CID-bc0c4d1e176e. | 4.0 | Fixed | +| CVE-2020-28915 | linux kernel | A buffer over-read (at the framebuffer layer) in the fbcon code in the Linux kernel before 5.8.15 could be used by local attackers to read kernel memory, aka CID-6735b4632def. | 5.0 | Fixed | +| CVE-2020-29534 | linux kernel | An issue was discovered in the Linux kernel before 5.9.3. io_uring takes a non-refcounted reference to the files_struct of the process that submitted a request, causing execve() to incorrectly optimize unshare_fd(), aka CID-0f2122045b94. | 7.0 | Fixed | +| CVE-2020-29371 | linux kernel | An issue was discovered in romfs_dev_read in fs/romfs/storage.c in the Linux kernel before 5.8.4. Uninitialized memory leaks to userspace, aka CID-bcf85fcedfdd. | 3.0 | Fixed | +| CVE-2020-15437 | linux kernel | The Linux kernel before version 5.8 is vulnerable to a NULL pointer dereference in drivers/tty/serial/8250/8250_core.c:serial8250_isa_init_ports() that allows local users to cause a denial of service by using the p->serial_in pointer which uninitialized. | 4.0 | Fixed | +| CVE-2020-28974 | linux kernel | A slab-out-of-bounds read in fbcon in the Linux kernel before 5.9.7 could be used by local attackers to read privileged information or potentially crash the kernel, aka CID-3c4e0dff2095. This occurs because KD_FONT_OP_COPY in drivers/tty/vt/vt.c can be used for manipulations such as font height. | 4.6 | Fixed | +| CVE-2020-25704 | linux kernel | A flaw memory leak in the Linux kernel performance monitoring subsystem was found in the way if using PERF_EVENT_IOC_SET_FILTER. A local user could use this flaw to starve the resources causing denial of service. | 5.0 | Fixed | +| CVE-2020-15436 | linux kernel | Use-after-free vulnerability in fs/block_dev.c in the Linux kernel before 5.8 allows local users to gain privileges or cause a denial of service by leveraging improper access to a certain error field. | 6.0 | Fixed | +| CVE-2020-25625 | qemu | hw/usb/hcd-ohci.c in QEMU 5.0.0 has an infinite loop when a TD list has a loop. | 5.0 | Fixed | +| CVE-2020-29130 | qemu | slirp.c in libslirp through 4.3.1 has a buffer over-read because it tries to read a certain amount of header data even if that exceeds the total packet length. | 4.0 | Fixed | +| CVE-2020-7039 | qemu | tcp_emu in tcp_subr.c in libslirp 4.1.0, as used in QEMU 4.2.0, mismanages memory, as demonstrated by IRC DCC commands in EMU_IRC. This can cause a heap-based buffer overflow or other out-of-bounds access which can lead to a DoS or potential execute arbitrary code. | 5.0 | Fixed | +| CVE-2020-8608 | qemu | In libslirp 4.1.0, as used in QEMU 4.2.0, tcp_subr.c misuses snprintf return values, leading to a buffer overflow in later code. | 5.0 | Fixed | +| CVE-2020-25723 | qemu | A reachable assertion issue was found in the USB EHCI emulation code of QEMU. It could occur while processing USB requests due to missing handling of DMA memory map failure. A malicious privileged user within the guest may abuse this flaw to send bogus USB requests and crash the QEMU process on the host, resulting in a denial of service. | 6.0 | Fixed | +| CVE-2020-28916 | qemu | hw/net/e1000e_core.c in QEMU 5.0.0 has an infinite loop via an RX descriptor with a NULL buffer address. | 5.0 | Fixed | +| CVE-2020-29129 | qemu | ncsi.c in libslirp through 4.3.1 has a buffer over-read because it tries to read a certain amount of header data even if that exceeds the total packet length. | 4.0 | Fixed | +| CVE-2020-25624 | qemu | hw/usb/hcd-ohci.c in QEMU 5.0.0 has a stack-based buffer over-read via values obtained from the host controller driver. | 5.0 | Fixed | +| CVE-2019-14378 | qemu | ip_reass in ip_input.c in libslirp 4.0.0 has a heap-based buffer overflow via a large packet because it mishandles a case involving the first fragment. | 8.0 | Fixed | +| CVE-2020-17527 | tomcat | While investigating bug 64830 it was discovered that Apache Tomcat 10.0.0-M1 to 10.0.0-M9, 9.0.0-M1 to 9.0.39 and 8.5.0 to 8.5.59 could re-use an HTTP request header value from the previous stream received on an HTTP/2 connection for the request associated with the subsequent stream. While this would most likely lead to an error and the closure of the HTTP/2 connection, it is possible that information could leak between requests. | 7.0 | Fixed | +| CVE-2020-13956 | httpcomponents-client | Apache HttpClient versions prior to version 4.5.13 and 5.0.3 can misinterpret malformed authority component in request URIs passed to the library as java.net.URI object and pick the wrong target host for request execution. | 5.0 | N/A | +| CVE-2018-10054 | h2 | H2 1.4.197, as used in Datomic before 0.9.5697 and other products, allows remote code execution because CREATE ALIAS can execute arbitrary Java code. | 8.0 | N/A | +| CVE-2020-25638 | hibernate3 | A flaw was found in hibernate-core in versions prior to and including 5.4.23.Final. A SQL injection in the implementation of the JPA Criteria API can permit unsanitized literals when a literal is used in the SQL comments of the query. This flaw could allow an attacker to access unauthorized information or possibly conduct further attacks. The highest threat from this vulnerability is to data confidentiality and integrity. | 7.0 | Fixed | +| CVE-2020-25649 | jackson-databind | A flaw was found in FasterXML Jackson Databind, where it did not have entity expansion secured properly. This flaw allows vulnerability to XML external entity (XXE) attacks. The highest threat from this vulnerability is data integrity. | 7.0 | Fixed | +| CVE-2017-1000231 | ldns | A double-free vulnerability in parse.c in ldns 1.7.0 have unspecified impact and attack vectors. | 9.8 | Fixed | +| CVE-2017-1000232 | ldns | A double-free vulnerability in str2host.c in ldns 1.7.0 have unspecified impact and attack vectors. | 9.8 | Fixed | +| CVE-2017-14245 | libsndfile | An out of bounds read in the function d2alaw_array() in alaw.c of libsndfile 1.0.28 may lead to a remote DoS attack or information disclosure, related to mishandling of the NAN and INFINITY floating-point values. | 8.0 | Fixed | +| CVE-2017-14246 | libsndfile | An out of bounds read in the function d2ulaw_array() in ulaw.c of libsndfile 1.0.28 may lead to a remote DoS attack or information disclosure, related to mishandling of the NAN and INFINITY floating-point values. | 8.0 | Fixed | +| CVE-2018-19661 | libsndfile | An issue was discovered in libsndfile 1.0.28. There is a buffer over-read in the function i2ulaw_array in ulaw.c that will lead to a denial of service. | 6.0 | Fixed | +| CVE-2018-19662 | libsndfile | An issue was discovered in libsndfile 1.0.28. There is a buffer over-read in the function i2alaw_array in alaw.c that will lead to a denial of service. | 8.0 | Fixed | +| CVE-2017-8365 | libsndfile | The i2les_array function in pcm.c in libsndfile 1.0.28 allows remote attackers to cause a denial of service (buffer over-read and application crash) via a crafted audio file. | 6.0 | Fixed | +| CVE-2018-19432 | libsndfile | An issue was discovered in libsndfile 1.0.28. There is a NULL pointer dereference in the function sf_write_int in sndfile.c, which will lead to a denial of service. | 6.0 | Fixed | +| CVE-2017-8361 | libsndfile | The flac_buffer_copy function in flac.c in libsndfile 1.0.28 allows remote attackers to cause a denial of service (buffer overflow and application crash) or possibly have unspecified other impact via a crafted audio file. | 8.0 | Fixed | +| CVE-2017-17457 | libsndfile | ** REJECT ** DO NOT USE THIS CANDIDATE NUMBER. ConsultIDs: CVE-2017-14246. Reason: This candidate is a duplicate of CVE-2017-14246. Notes: All CVE users should reference CVE-2017-14246 instead of this candidate. All references and descriptions in this candidate have been removed to prevent accidental usage. | 6.5 | N/A | +| CVE-2020-12430 | libvirt | An issue was discovered in qemuDomainGetStatsIOThread in qemu/qemu_driver.c in libvirt 4.10.0 though 6.x before 6.1.0. A memory leak was found in the virDomainListGetStats libvirt API that is responsible for retrieving domain statistics when managing QEMU guests. This flaw allows unprivileged users with a read-only connection to cause a memory leak in the domstats command, resulting in a potential denial of service. | 6.0 | N/A | +| CVE-2020-25692 | openldap | A NULL pointer dereference was found in OpenLDAP server and was fixed in openldap 2.4.55, during a request for renaming RDNs. An unauthenticated attacker could remotely crash the slapd process by sending a specially crafted request, causing a Denial of Service. | 7.0 | Fixed | +| CVE-2020-25696 | postgresql | A flaw was found in the psql interactive terminal of PostgreSQL in versions before 13.1, before 12.5, before 11.10, before 10.15, before 9.6.20 and before 9.5.24. If an interactive psql session uses \gset when querying a compromised server, the attacker can execute arbitrary code as the operating system account running psql. The highest threat from this vulnerability is to data confidentiality and integrity as well as system availability. | 7.0 | Fixed | +| CVE-2020-26217 | xstream | XStream before version 1.4.14 is vulnerable to Remote Code Execution.The vulnerability may allow a remote attacker to run arbitrary shell commands only by manipulating the processed input stream. Only users who rely on blocklists are affected. Anyone using XStream's Security Framework allowlist is not affected. The linked advisory provides code workarounds for users who cannot upgrade. The issue is fixed in version 1.4.14. | 8.8 | Fixed | +| CVE-2020-11979 | ant | As mitigation for CVE-2020-1945 Apache Ant 1.10.8 changed the permissions of temporary files it created so that only the current user was allowed to access them. Unfortunately the fixcrlf task deleted the temporary file and created a new one without said protection, effectively nullifying the effort. This would still allow an attacker to inject modified source files into the build process. | 7.0 | Fixed | +| CVE-2019-12415 | apache-poi | In Apache POI up to 4.1.0, when using the tool XSSFExportToXml to convert user-provided Microsoft Excel documents, a specially crafted document can allow an attacker to read files from the local filesystem or from internal network resources via XML External Entity (XXE) Processing. | 5.0 | Fixed | +| CVE-2017-15031 | arm-trusted-firmware | In all versions of ARM Trusted Firmware up to and including v1.4, not initializing or saving/restoring the PMCR_EL0 register can leak secure world timing information. | 7.0 | Fixed | +| CVE-2019-17566 | batik | Apache Batik is vulnerable to server-side request forgery, caused by improper input validation by the xlink:href attributes. By using a specially-crafted argument, an attacker could exploit this vulnerability to cause the underlying server to make arbitrary GET requests. | 7.0 | Fixed | +| CVE-2019-17359 | bouncycastle | The ASN.1 parser in Bouncy Castle Crypto (aka BC Java) 1.63 can trigger a large attempted memory allocation, and resultant OutOfMemoryError error, via crafted ASN.1 data. This is fixed in 1.64. | 7.0 | N/A | +| CVE-2019-6461 | cairo | An issue was discovered in cairo 1.16.0. There is an assertion problem in the function _cairo_arc_in_direction in the file cairo-arc.c. | 6.5 | Fixed | +| CVE-2019-6462 | cairo | An issue was discovered in cairo 1.16.0. There is an infinite loop in the function _arc_error_normalized in the file cairo-arc.c, related to _arc_max_angle_for_tolerance_normalized. | 6.5 | Fixed | +| CVE-2018-19876 | cairo | cairo 1.16.0, in cairo_ft_apply_variations() in cairo-ft-font.c, would free memory using a free function incompatible with WebKit's fastMalloc, leading to an application crash with a "free(): invalid pointer" error. | 6.5 | Fixed | +| CVE-2020-14367 | chrony | A flaw was found in chrony when creating the PID file under the /var/run/chrony folder. The file is created during chronyd startup while still running as the root user, and when it's opened for writing, chronyd does not check for an existing symbolic link with the same file name. This flaw allows an attacker with privileged access to create a symlink with the default PID file name pointing to any destination file in the system, resulting in data loss and a denial of service due to the path traversal. | 6.0 | Fixed | +| CVE-2019-12402 | apache-commons-compress | The file name encoding algorithm used internally in Apache Commons Compress 1.15 to 1.18 can get into an infinite loop when faced with specially crafted inputs. This can lead to a denial of service attack if an attacker can choose the file names inside of an archive created by Compress. | 7.0 | N/A | +| CVE-2018-11771 | apache-commons-compress | When reading a specially crafted ZIP archive, the read method of Apache Commons Compress 1.7 to 1.17's ZipArchiveInputStream can fail to return the correct EOF indication after the end of the stream has been reached. When combined with a java.io.InputStreamReader this can lead to an infinite stream, which can be used to mount a denial of service attack against services that use Compress' zip package. | 5.0 | N/A | +| CVE-2019-19906 | cyrus-sasl | cyrus-sasl (aka Cyrus SASL) 2.1.27 has an out-of-bounds write leading to unauthenticated remote denial-of-service in OpenLDAP via a malformed LDAP packet. The OpenLDAP crash is ultimately caused by an off-by-one error in _sasl_add_string in common.c in cyrus-sasl. | 7.0 | Fixed | +| CVE-2020-10723 | dpdk | A memory corruption issue was found in DPDK versions 17.05 and above. This flaw is caused by an integer truncation on the index of a payload. Under certain circumstances, the index (a UInt) is copied and truncated into a uint16, which can lead to out of bound indexing and possible memory corruption. | 6.0 | Fixed | +| CVE-2020-14378 | dpdk | An integer underflow in dpdk versions before 18.11.10 and before 19.11.5 in the `move_desc` function can lead to large amounts of CPU cycles being eaten up in a long running loop. An attacker could cause `move_desc` to get stuck in a 4,294,967,295-count iteration loop. Depending on how `vhost_crypto` is being used this could prevent other VMs or network tasks from being serviced by the busy DPDK lcore for an extended period. | 5.0 | Fixed | +| CVE-2020-10722 | dpdk | A vulnerability was found in DPDK versions 18.05 and above. A missing check for an integer overflow in vhost_user_set_log_base() could result in a smaller memory map than requested, possibly allowing memory corruption. | 6.0 | Fixed | +| CVE-2020-14377 | dpdk | A flaw was found in dpdk in versions before 18.11.10 and before 19.11.5. A complete lack of validation of attacker-controlled parameters can lead to a buffer over read. The results of the over read are then written back to the guest virtual machine memory. This vulnerability can be used by an attacker in a virtual machine to read significant amounts of host memory. The highest threat from this vulnerability is to data confidentiality and system availability. | 8.0 | Fixed | +| CVE-2020-14374 | dpdk | A flaw was found in dpdk in versions before 18.11.10 and before 19.11.5. A flawed bounds checking in the copy_data function leads to a buffer overflow allowing an attacker in a virtual machine to write arbitrary data to any address in the vhost_crypto application. The highest threat from this vulnerability is to data confidentiality and integrity as well as system availability. | 8.0 | Fixed | +| CVE-2020-14375 | dpdk | A flaw was found in dpdk in versions before 18.11.10 and before 19.11.5. Virtio ring descriptors, and the data they describe are in a region of memory accessible by from both the virtual machine and the host. An attacker in a VM can change the contents of the memory after vhost_crypto has validated it. The highest threat from this vulnerability is to data confidentiality and integrity as well as system availability. | 7.0 | Fixed | +| CVE-2020-10726 | dpdk | A vulnerability was found in DPDK versions 19.11 and above. A malicious container that has direct access to the vhost-user socket can keep sending VHOST_USER_GET_INFLIGHT_FD messages, causing a resource leak (file descriptors and virtual memory), which may result in a denial of service. | 4.0 | Fixed | +| CVE-2020-10725 | dpdk | A flaw was found in DPDK version 19.11 and above that allows a malicious guest to cause a segmentation fault of the vhost-user backend application running on the host, which could result in a loss of connectivity for the other guests running on that host. This is caused by a missing validity check of the descriptor address in the function `virtio_dev_rx_batch_packed()`. | 7.0 | Fixed | +| CVE-2020-10724 | dpdk | A vulnerability was found in DPDK versions 18.11 and above. The vhost-crypto library code is missing validations for user-supplied values, potentially allowing an information leak through an out-of-bounds memory read. | 4.0 | Fixed | +| CVE-2020-14376 | dpdk | A flaw was found in dpdk in versions before 18.11.10 and before 19.11.5. A lack of bounds checking when copying iv_data from the VM guest memory into host memory can lead to a large buffer overflow. The highest threat from this vulnerability is to data confidentiality and integrity as well as system availability. | 8.0 | Fixed | +| CVE-2018-1000011 | findbugs | Jenkins FindBugs Plugin 4.71 and earlier processes XML external entities in files it parses as part of the build process, allowing attackers with user permissions in Jenkins to extract secrets from the Jenkins master, perform server-side request forgery, or denial-of-service attacks. | 8.0 | N/A | +| CVE-2020-2317 | findbugs | Jenkins FindBugs Plugin 5.0.0 and earlier does not escape the annotation message in tooltips, resulting in a stored cross-site scripting (XSS) vulnerability exploitable by attackers able to provide report files to Jenkins FindBugs Plugins post build step. | 5.0 | N/A | +| CVE-2011-5034 | geronimo-jaspic-spec | Apache Geronimo 2.2.1 and earlier computes hash values for form parameters without restricting the ability to trigger hash collisions predictably, which allows remote attackers to cause a denial of service (CPU consumption) by sending many crafted parameters. NOTE: this might overlap CVE-2011-4461. | 7.0 | N/A | +| CVE-2020-15900 | ghostscript | A memory corruption issue was found in Artifex Ghostscript 9.50 and 9.52. Use of a non-standard PostScript operator can allow overriding of file access controls. The 'rsearch' calculation for the 'post' size resulted in a size that was too large, and could underflow to max uint32_t. This was fixed in commit 5d499272b95a6b890a1397e11d20937de000d31b. | 9.0 | Fixed | +| CVE-2019-11065 | gradle | Gradle versions from 1.4 to 5.3.1 use an insecure HTTP URL to download dependencies when the built-in JavaScript or CoffeeScript Gradle plugins are used. Dependency artifacts could have been maliciously compromised by a MITM attack against the ajax.googleapis.com web site. | 5.9 | Fixed | +| CVE-2019-11008 | GraphicsMagick | In GraphicsMagick 1.4 snapshot-20190322 Q8, there is a heap-based buffer overflow in the function WriteXWDImage of coders/xwd.c, which allows remote attackers to cause a denial of service (application crash) or possibly have unspecified other impact via a crafted image file. | 8.0 | N/A | +| CVE-2018-18544 | GraphicsMagick | There is a memory leak in the function WriteMSLImage of coders/msl.c in ImageMagick 7.0.8-13 Q16, and the function ProcessMSLScript of coders/msl.c in GraphicsMagick before 1.3.31. | 6.0 | N/A | +| CVE-2020-10938 | GraphicsMagick | GraphicsMagick before 1.3.35 has an integer overflow and resultant heap-based buffer overflow in HuffmanDecodeImage in magick/compress.c. | 9.0 | N/A | +| CVE-2019-11007 | GraphicsMagick | In GraphicsMagick 1.4 snapshot-20190322 Q8, there is a heap-based buffer over-read in the ReadMNGImage function of coders/png.c, which allows attackers to cause a denial of service or information disclosure via an image colormap. | 8.0 | N/A | +| CVE-2019-11009 | GraphicsMagick | In GraphicsMagick 1.4 snapshot-20190322 Q8, there is a heap-based buffer over-read in the function ReadXWDImage of coders/xwd.c, which allows attackers to cause a denial of service or information disclosure via a crafted image file. | 8.0 | N/A | +| CVE-2019-7397 | GraphicsMagick | In ImageMagick before 7.0.8-25 and GraphicsMagick through 1.3.31, several memory leaks exist in WritePDFImage in coders/pdf.c. | 7.0 | N/A | +| CVE-2019-11506 | GraphicsMagick | In GraphicsMagick from version 1.3.30 to 1.4 snapshot-20190403 Q8, there is a heap-based buffer overflow in the function WriteMATLABImage of coders/mat.c, which allows an attacker to cause a denial of service or possibly have unspecified other impact via a crafted image file. This is related to ExportRedQuantumType in magick/export.c. | 8.0 | N/A | +| CVE-2019-12921 | GraphicsMagick | In GraphicsMagick before 1.3.32, the text filename component allows remote attackers to read arbitrary files via a crafted image because of TranslateTextEx for SVG. | 6.0 | N/A | +| CVE-2019-11010 | GraphicsMagick | In GraphicsMagick 1.4 snapshot-20190322 Q8, there is a memory leak in the function ReadMPCImage of coders/mpc.c, which allows attackers to cause a denial of service via a crafted image file. | 6.0 | N/A | +| CVE-2020-12672 | GraphicsMagick | GraphicsMagick through 1.3.35 has a heap-based buffer overflow in ReadMNGImage in coders/png.c. | 7.0 | N/A | +| CVE-2019-11006 | GraphicsMagick | In GraphicsMagick 1.4 snapshot-20190322 Q8, there is a heap-based buffer over-read in the function ReadMIFFImage of coders/miff.c, which allows attackers to cause a denial of service or information disclosure via an RLE packet. | 9.0 | N/A | +| CVE-2019-11505 | GraphicsMagick | In GraphicsMagick from version 1.3.8 to 1.4 snapshot-20190403 Q8, there is a heap-based buffer overflow in the function WritePDBImage of coders/pdb.c, which allows an attacker to cause a denial of service or possibly have unspecified other impact via a crafted image file. This is related to MagickBitStreamMSBWrite in magick/bit_stream.c. | 8.0 | N/A | +| CVE-2019-11005 | GraphicsMagick | In GraphicsMagick 1.4 snapshot-20190322 Q8, there is a stack-based buffer overflow in the function SVGStartElement of coders/svg.c, which allows remote attackers to cause a denial of service (application crash) or possibly have unspecified other impact via a quoted font family value. | 9.0 | N/A | +| CVE-2020-8623 | bind | In BIND 9.10.0 -> 9.11.21, 9.12.0 -> 9.16.5, 9.17.0 -> 9.17.3, also affects 9.10.5-S1 -> 9.11.21-S1 of the BIND 9 Supported Preview Edition, An attacker that can reach a vulnerable system with a specially crafted query packet can trigger a crash. To be vulnerable, the system must: * be running BIND that was built with "--enable-native-pkcs11" * be signing one or more zones with an RSA key * be able to receive queries from a possible attacker | 7.0 | Fixed | +| CVE-2020-8622 | bind | In BIND 9.0.0 -> 9.11.21, 9.12.0 -> 9.16.5, 9.17.0 -> 9.17.3, also affects 9.9.3-S1 -> 9.11.21-S1 of the BIND 9 Supported Preview Edition, An attacker on the network path for a TSIG-signed request, or operating the server receiving the TSIG-signed request, could send a truncated response to that request, triggering an assertion failure, causing the server to exit. Alternately, an off-path attacker would have to correctly guess when a TSIG-signed request was sent, along with other characteristics of the packet and message, and spoof a truncated response to trigger an assertion failure, causing the server to exit. | 6.0 | Fixed | +| CVE-2020-8624 | bind | In BIND 9.9.12 -> 9.9.13, 9.10.7 -> 9.10.8, 9.11.3 -> 9.11.21, 9.12.1 -> 9.16.5, 9.17.0 -> 9.17.3, also affects 9.9.12-S1 -> 9.9.13-S1, 9.11.3-S1 -> 9.11.21-S1 of the BIND 9 Supported Preview Edition, An attacker who has been granted privileges to change a specific subset of the zone's content could abuse these unintended additional privileges to update other contents of the zone. | 4.0 | Fixed | +| CVE-2014-3215 | libcap-ng | seunshare in policycoreutils 2.2.5 is owned by root with 4755 permissions, and executes programs in a way that changes the relationship between the setuid system call and the getresuid saved set-user-ID value, which makes it easier for local users to gain privileges by leveraging a program that mistakenly expected that it could permanently drop privileges. | 6.0 | N/A | +| CVE-2020-14363 | libX11 | An integer overflow vulnerability leading to a double-free was found in libX11. This flaw allows a local privileged attacker to cause an application compiled with libX11 to crash, or in some cases, result in arbitrary code execution. The highest threat from this flaw is to confidentiality, integrity as well as system availability. | 7.0 | Fixed | +| CVE-2020-14344 | libX11 | An integer overflow leading to a heap-buffer overflow was found in The X Input Method (XIM) client was implemented in libX11 before version 1.6.10. As per upstream this is security relevant when setuid programs call XIM client functions while running with elevated privileges. No such programs are shipped with Red Hat Enterprise Linux. | 6.0 | Fixed | +| CVE-2019-10072 | tomcat | The fix for CVE-2019-0199 was incomplete and did not address HTTP/2 connection window exhaustion on write in Apache Tomcat versions 9.0.0.M1 to 9.0.19 and 8.5.0 to 8.5.40 . By not sending WINDOW_UPDATE messages for the connection window (stream 0) clients were able to cause server-side threads to block eventually leading to thread exhaustion and a DoS. | 7.0 | N/A | +| CVE-2020-1938 | tomcat | When using the Apache JServ Protocol (AJP), care must be taken when trusting incoming connections to Apache Tomcat. Tomcat treats AJP connections as having higher trust than, for example, a similar HTTP connection. If such connections are available to an attacker, they can be exploited in ways that may be surprising. In Apache Tomcat 9.0.0.M1 to 9.0.0.30, 8.5.0 to 8.5.50 and 7.0.0 to 7.0.99, Tomcat shipped with an AJP Connector enabled by default that listened on all configured IP addresses. It was expected (and recommended in the security guide) that this Connector would be disabled if not required. This vulnerability report identified a mechanism that allowed: - returning arbitrary files from anywhere in the web application - processing any file in the web application as a JSP Further, if the web application allowed file upload and stored those files within the web application (or the attacker was able to control the content of the web application by some other means) then this, along with the ability to process a file as a JSP, made remote code execution possible. It is important to note that mitigation is only required if an AJP port is accessible to untrusted users. Users wishing to take a defence-in-depth approach and block the vector that permits returning arbitrary files and execution as JSP may upgrade to Apache Tomcat 9.0.31, 8.5.51 or 7.0.100 or later. A number of changes were made to the default AJP Connector configuration in 9.0.31 to harden the default configuration. It is likely that users upgrading to 9.0.31, 8.5.51 or 7.0.100 or later will need to make small changes to their configurations. | 9.0 | N/A | +| CVE-2020-13935 | tomcat | The payload length in a WebSocket frame was not correctly validated in Apache Tomcat 10.0.0-M1 to 10.0.0-M6, 9.0.0.M1 to 9.0.36, 8.5.0 to 8.5.56 and 7.0.27 to 7.0.104. Invalid payload lengths could trigger an infinite loop. Multiple requests with invalid payload lengths could lead to a denial of service. | 7.0 | N/A | +| CVE-2020-13934 | tomcat | An h2c direct connection to Apache Tomcat 10.0.0-M1 to 10.0.0-M6, 9.0.0.M5 to 9.0.36 and 8.5.1 to 8.5.56 did not release the HTTP/1.1 processor after the upgrade to HTTP/2. If a sufficient number of such requests were made, an OutOfMemoryException could occur leading to a denial of service. | 7.0 | N/A | +| CVE-2019-0221 | tomcat | The SSI printenv command in Apache Tomcat 9.0.0.M1 to 9.0.0.17, 8.5.0 to 8.5.39 and 7.0.0 to 7.0.93 echoes user provided data without escaping and is, therefore, vulnerable to XSS. SSI is disabled by default. The printenv command is intended for debugging and is unlikely to be present in a production website. | 6.0 | N/A | +| CVE-2020-11996 | tomcat | A specially crafted sequence of HTTP/2 requests sent to Apache Tomcat 10.0.0-M1 to 10.0.0-M5, 9.0.0.M1 to 9.0.35 and 8.5.0 to 8.5.55 could trigger high CPU usage for several seconds. If a sufficient number of such requests were made on concurrent HTTP/2 connections, the server could become unresponsive. | 7.0 | N/A | +| CVE-2018-11784 | tomcat | When the default servlet in Apache Tomcat versions 9.0.0.M1 to 9.0.11, 8.5.0 to 8.5.33 and 7.0.23 to 7.0.90 returned a redirect to a directory (e.g. redirecting to '/foo/' when the user requested '/foo') a specially crafted URL could be used to cause the redirect to be generated to any URI of the attackers choice. | 4.0 | N/A | +| CVE-2019-0199 | tomcat | The HTTP/2 implementation in Apache Tomcat 9.0.0.M1 to 9.0.14 and 8.5.0 to 8.5.37 accepted streams with excessive numbers of SETTINGS frames and also permitted clients to keep streams open without reading/writing request/response data. By keeping streams open for requests that utilised the Servlet API's blocking I/O, clients were able to cause server-side threads to block eventually leading to thread exhaustion and a DoS. | 7.0 | N/A | +| CVE-2020-1935 | tomcat | In Apache Tomcat 9.0.0.M1 to 9.0.30, 8.5.0 to 8.5.50 and 7.0.0 to 7.0.99 the HTTP header parsing code used an approach to end-of-line parsing that allowed some invalid HTTP headers to be parsed as valid. This led to a possibility of HTTP Request Smuggling if Tomcat was located behind a reverse proxy that incorrectly handled the invalid Transfer-Encoding header in a particular manner. Such a reverse proxy is considered unlikely. | 4.0 | N/A | +| CVE-2019-17563 | tomcat | When using FORM authentication with Apache Tomcat 9.0.0.M1 to 9.0.29, 8.5.0 to 8.5.49 and 7.0.0 to 7.0.98 there was a narrow window where an attacker could perform a session fixation attack. The window was considered too narrow for an exploit to be practical but, erring on the side of caution, this issue has been treated as a security vulnerability. | 7.0 | N/A | +| CVE-2020-9484 | tomcat | When using Apache Tomcat versions 10.0.0-M1 to 10.0.0-M4, 9.0.0.M1 to 9.0.34, 8.5.0 to 8.5.54 and 7.0.0 to 7.0.103 if a) an attacker is able to control the contents and name of a file on the server; and b) the server is configured to use the PersistenceManager with a FileStore; and c) the PersistenceManager is configured with sessionAttributeValueClassNameFilter="null" (the default unless a SecurityManager is used) or a sufficiently lax filter to allow the attacker provided object to be deserialized; and d) the attacker knows the relative file path from the storage location used by FileStore to the file the attacker has control over; then, using a specifically crafted request, the attacker will be able to trigger remote code execution via deserialization of the file under their control. Note that all of conditions a) to d) must be true for the attack to succeed. | 7.0 | N/A | +| CVE-2019-12418 | tomcat | When Apache Tomcat 9.0.0.M1 to 9.0.28, 8.5.0 to 8.5.47, 7.0.0 and 7.0.97 is configured with the JMX Remote Lifecycle Listener, a local attacker without access to the Tomcat process or configuration files is able to manipulate the RMI registry to perform a man-in-the-middle attack to capture user names and passwords used to access the JMX interface. The attacker can then use these credentials to access the JMX interface and gain complete control over the Tomcat instance. | 7.0 | N/A | +| CVE-2020-13943 | tomcat | If an HTTP/2 client connecting to Apache Tomcat 10.0.0-M1 to 10.0.0-M7, 9.0.0.M1 to 9.0.37 or 8.5.0 to 8.5.57 exceeded the agreed maximum number of concurrent streams for a connection (in violation of the HTTP/2 protocol), it was possible that a subsequent request made on that connection could contain HTTP headers - including HTTP/2 pseudo headers - from a previous request rather than the intended headers. This could lead to users seeing responses for unexpected resources. | 4.0 | Fixed | +| CVE-2019-0232 | tomcat | When running on Windows with enableCmdLineArguments enabled, the CGI Servlet in Apache Tomcat 9.0.0.M1 to 9.0.17, 8.5.0 to 8.5.39 and 7.0.0 to 7.0.93 is vulnerable to Remote Code Execution due to a bug in the way the JRE passes command line arguments to Windows. The CGI Servlet is disabled by default. The CGI option enableCmdLineArguments is disable by default in Tomcat 9.0.x (and will be disabled by default in all versions in response to this vulnerability). For a detailed explanation of the JRE behaviour, see Markus Wulftange's blog (https://codewhitesec.blogspot.com/2016/02/java-and-command-line-injections-in-windows.html) and this archived MSDN blog (https://web.archive.org/web/20161228144344/https://blogs.msdn.microsoft.com/twistylittlepassagesallalike/2011/04/23/everyone-quotes-command-line-arguments-the-wrong-way/). | 8.0 | N/A | +| CVE-2019-17571 | log4j12 | Included in Log4j 1.2 is a SocketServer class that is vulnerable to deserialization of untrusted data which can be exploited to remotely execute arbitrary code when combined with a deserialization gadget when listening to untrusted network traffic for log data. This affects Log4j versions up to 1.2 up to 1.2.17. | 9.0 | N/A | +| CVE-2020-9488 | log4j12 | Improper validation of certificate with host mismatch in Apache Log4j SMTP appender. This could allow an SMTPS connection to be intercepted by a man-in-the-middle attack which could leak any log messages sent through that appender. | 3.0 | N/A | +| CVE-2017-7536 | hibernate-validator | In Hibernate Validator 5.2.x before 5.2.5 final, 5.3.x, and 5.4.x, it was found that when the security manager's reflective permissions, which allows it to access the private members of the class, are granted to Hibernate Validator, a potential privilege escalation can occur. By allowing the calling code to access those private members without the permission an attacker may be able to validate an invalid instance and access the private member value via ConstraintViolation#getInvalidValue(). | 7.0 | N/A | +| CVE-2020-7105 | hiredis | async.c and dict.c in libhiredis.a in hiredis through 0.14.0 allow a NULL pointer dereference because malloc return values are unchecked. | 7.0 | N/A | +| CVE-2018-1000873 | jackson | Fasterxml Jackson version Before 2.9.8 contains a CWE-20: Improper Input Validation vulnerability in Jackson-Modules-Java8 that can result in Causes a denial-of-service (DoS). This attack appear to be exploitable via The victim deserializes malicious input, specifically very large values in the nanoseconds field of a time value. This vulnerability appears to have been fixed in 2.9.8. | 6.0 | N/A | +| CVE-2019-12814 | jackson | A Polymorphic Typing issue was discovered in FasterXML jackson-databind 2.x through 2.9.9. When Default Typing is enabled (either globally or for a specific property) for an externally exposed JSON endpoint and the service has JDOM 1.x or 2.x jar in the classpath, an attacker can send a specifically crafted JSON message that allows them to read arbitrary local files on the server. | 5.0 | N/A | +| CVE-2016-3720 | jackson | XML external entity (XXE) vulnerability in XmlMapper in the Data format extension for Jackson (aka jackson-dataformat-xml) allows attackers to have unspecified impact via unknown vectors. | 9.0 | N/A | +| CVE-2016-7051 | jackson | XmlMapper in the Jackson XML dataformat component (aka jackson-dataformat-xml) before 2.7.8 and 2.8.x before 2.8.4 allows remote attackers to conduct server-side request forgery (SSRF) attacks via vectors related to a DTD. | 8.0 | N/A | +| CVE-2019-14439 | jackson | A Polymorphic Typing issue was discovered in FasterXML jackson-databind 2.x before 2.9.9.2. This occurs when Default Typing is enabled (either globally or for a specific property) for an externally exposed JSON endpoint and the service has the logback jar in the classpath. | 7.0 | N/A | +| CVE-2017-17485 | jackson | FasterXML jackson-databind through 2.8.10 and 2.9.x through 2.9.3 allows unauthenticated remote code execution because of an incomplete fix for the CVE-2017-7525 deserialization flaw. This is exploitable by sending maliciously crafted JSON input to the readValue method of the ObjectMapper, bypassing a blacklist that is ineffective if the Spring libraries are available in the classpath. | 9.0 | N/A | +| CVE-2018-5968 | jackson | FasterXML jackson-databind through 2.8.11 and 2.9.x through 2.9.3 allows unauthenticated remote code execution because of an incomplete fix for the CVE-2017-7525 and CVE-2017-17485 deserialization flaws. This is exploitable via two different gadgets that bypass a blacklist. | 8.0 | N/A | +| CVE-2020-24616 | jackson-core | FasterXML jackson-databind 2.x before 2.9.10.6 mishandles the interaction between serialization gadgets and typing, related to br.com.anteros.dbcp.AnterosDBCPDataSource (aka Anteros-DBCP). | 8.0 | N/A | +| CVE-2019-14892 | jackson-databind | A flaw was discovered in jackson-databind in versions before 2.9.10, 2.8.11.5 and 2.6.7.3, where it would permit polymorphic deserialization of a malicious object using commons-configuration 1 and 2 JNDI classes. An attacker could use this flaw to execute arbitrary code. | 9.0 | Fixed | +| CVE-2019-14540 | jackson-databind | A Polymorphic Typing issue was discovered in FasterXML jackson-databind before 2.9.10. It is related to com.zaxxer.hikari.HikariConfig. | 9.0 | Fixed | +| CVE-2020-10969 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.4 mishandles the interaction between serialization gadgets and typing, related to javax.swing.JEditorPane. | 8.0 | Fixed | +| CVE-2020-10968 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.4 mishandles the interaction between serialization gadgets and typing, related to org.aoju.bus.proxy.provider.remoting.RmiProvider (aka bus-proxy). | 8.0 | Fixed | +| CVE-2019-16942 | jackson-databind | A Polymorphic Typing issue was discovered in FasterXML jackson-databind 2.0.0 through 2.9.10. When Default Typing is enabled (either globally or for a specific property) for an externally exposed JSON endpoint and the service has the commons-dbcp (1.4) jar in the classpath, and an attacker can find an RMI service endpoint to access, it is possible to make the service execute a malicious payload. This issue exists because of org.apache.commons.dbcp.datasources.SharedPoolDataSource and org.apache.commons.dbcp.datasources.PerUserPoolDataSource mishandling. | 9.0 | Fixed | +| CVE-2019-16943 | jackson-databind | A Polymorphic Typing issue was discovered in FasterXML jackson-databind 2.0.0 through 2.9.10. When Default Typing is enabled (either globally or for a specific property) for an externally exposed JSON endpoint and the service has the p6spy (3.8.6) jar in the classpath, and an attacker can find an RMI service endpoint to access, it is possible to make the service execute a malicious payload. This issue exists because of com.p6spy.engine.spy.P6DataSource mishandling. | 9.0 | Fixed | +| CVE-2020-14195 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.5 mishandles the interaction between serialization gadgets and typing, related to org.jsecurity.realm.jndi.JndiRealmFactory (aka org.jsecurity). | 8.0 | Fixed | +| CVE-2019-17531 | jackson-databind | A Polymorphic Typing issue was discovered in FasterXML jackson-databind 2.0.0 through 2.9.10. When Default Typing is enabled (either globally or for a specific property) for an externally exposed JSON endpoint and the service has the apache-log4j-extra (version 1.2.x) jar in the classpath, and an attacker can provide a JNDI service to access, it is possible to make the service execute a malicious payload. | 9.0 | Fixed | +| CVE-2020-14061 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.5 mishandles the interaction between serialization gadgets and typing, related to oracle.jms.AQjmsQueueConnectionFactory, oracle.jms.AQjmsXATopicConnectionFactory, oracle.jms.AQjmsTopicConnectionFactory, oracle.jms.AQjmsXAQueueConnectionFactory, and oracle.jms.AQjmsXAConnectionFactory (aka weblogic/oracle-aqjms). | 8.0 | Fixed | +| CVE-2020-14062 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.5 mishandles the interaction between serialization gadgets and typing, related to com.sun.org.apache.xalan.internal.lib.sql.JNDIConnectionPool (aka xalan2). | 8.0 | Fixed | +| CVE-2019-14893 | jackson-databind | A flaw was discovered in FasterXML jackson-databind in all versions before 2.9.10 and 2.10.0, where it would permit polymorphic deserialization of malicious objects using the xalan JNDI gadget when used in conjunction with polymorphic type handling methods such as `enableDefaultTyping()` or when @JsonTypeInfo is using `Id.CLASS` or `Id.MINIMAL_CLASS` or in any other way which ObjectMapper.readValue might instantiate objects from unsafe sources. An attacker could use this flaw to execute arbitrary code. | 9.0 | Fixed | +| CVE-2020-11619 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.4 mishandles the interaction between serialization gadgets and typing, related to org.springframework.aop.config.MethodLocatingFactoryBean (aka spring-aop). | 8.0 | Fixed | +| CVE-2020-14060 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.5 mishandles the interaction between serialization gadgets and typing, related to oadd.org.apache.xalan.lib.sql.JNDIConnectionPool (aka apache/drill). | 8.0 | Fixed | +| CVE-2019-12086 | jackson-databind | A Polymorphic Typing issue was discovered in FasterXML jackson-databind 2.x before 2.9.9. When Default Typing is enabled (either globally or for a specific property) for an externally exposed JSON endpoint, the service has the mysql-connector-java jar (8.0.14 or earlier) in the classpath, and an attacker can host a crafted MySQL server reachable by the victim, an attacker can send a crafted JSON message that allows them to read arbitrary local files on the server. This occurs because of missing com.mysql.cj.jdbc.admin.MiniAdmin validation. | 7.0 | Fixed | +| CVE-2020-9546 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.4 mishandles the interaction between serialization gadgets and typing, related to org.apache.hadoop.shaded.com.zaxxer.hikari.HikariConfig (aka shaded hikari-config). | 9.0 | Fixed | +| CVE-2020-11620 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.4 mishandles the interaction between serialization gadgets and typing, related to org.apache.commons.jelly.impl.Embedded (aka commons-jelly). | 8.0 | Fixed | +| CVE-2020-11111 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.4 mishandles the interaction between serialization gadgets and typing, related to org.apache.activemq.* (aka activemq-jms, activemq-core, activemq-pool, and activemq-pool-jms). | 8.0 | Fixed | +| CVE-2020-9547 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.4 mishandles the interaction between serialization gadgets and typing, related to com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig (aka ibatis-sqlmap). | 9.0 | Fixed | +| CVE-2020-8840 | jackson-databind | FasterXML jackson-databind 2.0.0 through 2.9.10.2 lacks certain xbean-reflect/JNDI blocking, as demonstrated by org.apache.xbean.propertyeditor.JndiConverter. | 9.0 | Fixed | +| CVE-2020-9548 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.4 mishandles the interaction between serialization gadgets and typing, related to br.com.anteros.dbcp.AnterosDBCPConfig (aka anteros-core). | 9.0 | Fixed | +| CVE-2019-12384 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.9.1 might allow attackers to have a variety of impacts by leveraging failure to block the logback-core class from polymorphic deserialization. Depending on the classpath content, remote code execution may be possible. | 5.0 | Fixed | +| CVE-2019-14379 | jackson-databind | SubTypeValidator.java in FasterXML jackson-databind before 2.9.9.2 mishandles default typing when ehcache is used (because of net.sf.ehcache.transaction.manager.DefaultTransactionManagerLookup), leading to remote code execution. | 9.0 | Fixed | +| CVE-2020-10672 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.4 mishandles the interaction between serialization gadgets and typing, related to org.apache.aries.transaction.jms.internal.XaPooledConnectionFactory (aka aries.transaction.jms). | 8.0 | Fixed | +| CVE-2020-10673 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.4 mishandles the interaction between serialization gadgets and typing, related to com.caucho.config.types.ResourceRef (aka caucho-quercus). | 8.0 | Fixed | +| CVE-2019-17267 | jackson-databind | A Polymorphic Typing issue was discovered in FasterXML jackson-databind before 2.9.10. It is related to net.sf.ehcache.hibernate.EhcacheJtaTransactionManagerLookup. | 9.0 | Fixed | +| CVE-2019-16335 | jackson-databind | A Polymorphic Typing issue was discovered in FasterXML jackson-databind before 2.9.10. It is related to com.zaxxer.hikari.HikariDataSource. This is a different vulnerability than CVE-2019-14540. | 9.0 | Fixed | +| CVE-2020-11112 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.4 mishandles the interaction between serialization gadgets and typing, related to org.apache.commons.proxy.provider.remoting.RmiProvider (aka apache/commons-proxy). | 8.0 | Fixed | +| CVE-2019-20330 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.2 lacks certain net.sf.ehcache blocking. | 9.0 | Fixed | +| CVE-2020-11113 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.4 mishandles the interaction between serialization gadgets and typing, related to org.apache.openjpa.ee.WASRegistryManagedRuntime (aka openjpa). | 8.0 | Fixed | +| CVE-2020-24750 | jackson-databind | FasterXML jackson-databind 2.x before 2.9.10.6 mishandles the interaction between serialization gadgets and typing, related to com.pastdev.httpcomponents.configuration.JndiConfiguration. | 8.0 | Fixed | +| CVE-2018-5709 | krb5 | An issue was discovered in MIT Kerberos 5 (aka krb5) through 1.16. There is a variable "dbentry->n_key_data" in kadmin/dbutil/dump.c that can store 16-bit data but unknowingly the developer has assigned a "u4" variable to it, which is for 32-bit data. An attacker can use this vulnerability to affect other artifacts of the database as we know that a Kerberos database dump file contains trusted data. | 7.0 | N/A | +| CVE-2011-1526 | krb5 | ftpd.c in the GSS-API FTP daemon in MIT Kerberos Version 5 Applications (aka krb5-appl) 1.0.1 and earlier does not check the krb5_setegid return value, which allows remote authenticated users to bypass intended group access restrictions, and create, overwrite, delete, or read files, via standard FTP commands, related to missing autoconf tests in a configure script. | 6.0 | N/A | +| CVE-2019-19977 | libesmtp | libESMTP through 1.0.6 mishandles domain copying into a fixed-size buffer in ntlm_build_type_2 in ntlm/ntlmstruct.c, as demonstrated by a stack-based buffer over-read. | 9.0 | Fixed | +| CVE-2018-20363 | LibRaw | LibRaw::raw2image in libraw_cxx.cpp in LibRaw 0.19.1 has a NULL pointer dereference. | 6.5 | Fixed | +| CVE-2018-20364 | LibRaw | LibRaw::copy_bayer in libraw_cxx.cpp in LibRaw 0.19.1 has a NULL pointer dereference. | 6.5 | Fixed | +| CVE-2018-20365 | LibRaw | LibRaw::raw2image() in libraw_cxx.cpp has a heap-based buffer overflow. | 6.5 | Fixed | +| CVE-2019-20388 | libxml2 | xmlSchemaPreRun in xmlschemas.c in libxml2 2.9.10 allows an xmlSchemaValidateStream memory leak. | 7.0 | Fixed | +| CVE-2020-24977 | libxml2 | GNOME project libxml2 v2.9.10 and earlier have a global buffer over-read vulnerability in xmlEncodeEntitiesInternal at libxml2/entities.c. The issue has been fixed in commit 8e7c20a1 (20910-GITv2.9.10-103-g8e7c20a1). | 6.0 | Fixed | +| CVE-2020-7595 | libxml2 | xmlStringLenDecodeEntities in parser.c in libxml2 2.9.10 has an infinite loop in a certain end-of-file situation | 7.0 | Fixed | +| CVE-2017-12629 | lucene4 | Remote code execution occurs in Apache Solr before 7.1 with Apache Lucene before 7.1 by exploiting XXE in conjunction with use of a Config API add-listener command to reach the RunExecutableListener class. Elasticsearch, although it uses Lucene, is NOT vulnerable to this. Note that the XML external entity expansion vulnerability occurs in the XML Query Parser which is available, by default, for any query request with parameters deftype=xmlparser and can be exploited to upload malicious data to the /upload request handler or as Blind XXE using ftp wrapper in order to read arbitrary local files from the Solr server. Note also that the second vulnerability relates to remote code execution using the RunExecutableListener available on all affected versions of Solr. | 9.0 | Fixed | +| CVE-2015-8797 | lucene4 | Cross-site scripting (XSS) vulnerability in webapp/web/js/scripts/plugins.js in the stats page in the Admin UI in Apache Solr before 5.3.1 allows remote attackers to inject arbitrary web script or HTML via the entry parameter to a plugins/cache URI. | 6.0 | N/A | +| CVE-2017-1000394 | lucene4 | Jenkins 2.73.1 and earlier, 2.83 and earlier bundled a version of the commons-fileupload library with the denial-of-service vulnerability known as CVE-2016-3092. The fix for that vulnerability has been backported to the version of the library bundled with Jenkins. | 7.0 | N/A | +| CVE-2016-3092 | lucene4 | The MultipartStream class in Apache Commons Fileupload before 1.3.2, as used in Apache Tomcat 7.x before 7.0.70, 8.x before 8.0.36, 8.5.x before 8.5.3, and 9.x before 9.0.0.M7 and other products, allows remote attackers to cause a denial of service (CPU consumption) via a long boundary string. | 7.0 | N/A | +| CVE-2014-4715 | lz4-java | Yann Collet LZ4 before r119, when used on certain 32-bit platforms that allocate memory beyond 0x80000000, does not properly detect integer overflows, which allows context-dependent attackers to cause a denial of service (memory corruption) or possibly have unspecified other impact via a crafted Literal Run, a different vulnerability than CVE-2014-4611 | 5.0 | N/A | +| CVE-2017-11550 | libid3tag | The id3_ucs4_length function in ucs4.c in libid3tag 0.15.1b allows remote attackers to cause a denial of service (NULL Pointer Dereference and application crash) via a crafted mp3 file. | 5.0 | Fixed | +| CVE-2017-11551 | libid3tag | The id3_field_parse function in field.c in libid3tag 0.15.1b allows remote attackers to cause a denial of service (OOM) via a crafted MP3 file. | 5.0 | Fixed | +| CVE-2017-8374 | libid3tag | The mad_bit_skip function in bit.c in Underbit MAD libmad 0.15.1b allows remote attackers to cause a denial of service (heap-based buffer over-read and application crash) via a crafted audio file. | 5.0 | Fixed | +| CVE-2017-8373 | libid3tag | The mad_layer_III function in layer3.c in Underbit MAD libmad 0.15.1b allows remote attackers to cause a denial of service (heap-based buffer overflow and application crash) or possibly have unspecified other impact via a crafted audio file. | 7.0 | Fixed | +| CVE-2017-11552 | libid3tag | mpg321.c in mpg321 0.3.2-1 does not properly manage memory for use with libmad 0.15.1b, which allows remote attackers to cause a denial of service (memory corruption seen in a crash in the mad_decoder_run function in decoder.c in libmad) via a crafted MP3 file. | 6.0 | N/A | +| CVE-2017-8372 | libid3tag | The mad_layer_III function in layer3.c in Underbit MAD libmad 0.15.1b, if NDEBUG is omitted, allows remote attackers to cause a denial of service (assertion failure and application exit) via a crafted audio file. | 4.0 | Fixed | +| CVE-2020-14812 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Locking). Supported versions that are affected are 5.6.49 and prior, 5.7.31 and prior and 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14838 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Security: Privileges). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized read access to a subset of MySQL Server accessible data. CVSS 3.1 Base Score 4.3 (Confidentiality impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N). | 4.0 | Fixed | +| CVE-2020-14785 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14860 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Security: Roles). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized update, insert or delete access to some of MySQL Server accessible data. CVSS 3.1 Base Score 2.7 (Integrity impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:L/A:N). | 2.0 | Fixed | +| CVE-2020-14839 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14866 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14861 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14786 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: PS). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14821 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14888 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14844 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: PS). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14814 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DML). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14878 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Security: LDAP Auth). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows low privileged attacker with access to the physical communication segment attached to the hardware where the MySQL Server executes to compromise MySQL Server. Successful attacks of this vulnerability can result in takeover of MySQL Server. CVSS 3.1 Base Score 8.0 (Confidentiality, Integrity and Availability impacts). CVSS Vector: (CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H). | 8.0 | Fixed | +| CVE-2020-14846 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 6.5 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H). | 6.0 | Fixed | +| CVE-2020-14829 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14827 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Security: LDAP Auth). Supported versions that are affected are 5.7.31 and prior and 8.0.21 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized access to critical data or complete access to all MySQL Server accessible data. CVSS 3.1 Base Score 6.5 (Confidentiality impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N). | 6.0 | Fixed | +| CVE-2020-14771 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Security: LDAP Auth). Supported versions that are affected are 5.7.31 and prior and 8.0.21 and prior. Difficult to exploit vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a partial denial of service (partial DOS) of MySQL Server. CVSS 3.1 Base Score 2.2 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:L). | 2.0 | Fixed | +| CVE-2020-14809 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14852 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Charsets). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14845 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14776 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 5.7.31 and prior and 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14793 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 5.6.49 and prior, 5.7.31 and prior and 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14672 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Stored Procedure). Supported versions that are affected are 5.6.49 and prior, 5.7.31 and prior and 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14891 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14773 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14790 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: PS). Supported versions that are affected are 5.7.31 and prior and 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14775 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 5.7.31 and prior and 8.0.21 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 6.5 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H). | 6.0 | Fixed | +| CVE-2020-14873 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Logging). Supported versions that are affected are 8.0.21 and prior. Difficult to exploit vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.4 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14777 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14870 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: X Plugin). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14794 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14893 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14868 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14830 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 6.5 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H). | 6.0 | Fixed | +| CVE-2020-14869 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Security: LDAP Auth). Supported versions that are affected are 5.7.31 and prior and 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14804 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: FTS). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14848 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14867 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DDL). Supported versions that are affected are 5.6.49 and prior, 5.7.31 and prior and 8.0.21 and prior. Difficult to exploit vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.4 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14769 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 5.6.49 and prior, 5.7.31 and prior and 8.0.21 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 6.5 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H). | 6.0 | Fixed | +| CVE-2020-14828 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DML). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in takeover of MySQL Server. CVSS 3.1 Base Score 7.2 (Confidentiality, Integrity and Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H). | 7.0 | Fixed | +| CVE-2020-14800 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Security: Encryption). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 6.5 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H). | 6.0 | Fixed | +| CVE-2020-14836 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 6.5 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H). | 6.0 | Fixed | +| CVE-2020-14837 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2020-14765 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: FTS). Supported versions that are affected are 5.6.49 and prior, 5.7.31 and prior and 8.0.21 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 6.5 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H). | 6.0 | Fixed | +| CVE-2020-14791 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 8.0.21 and prior. Difficult to exploit vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a partial denial of service (partial DOS) of MySQL Server. CVSS 3.1 Base Score 2.2 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:L). | 2.0 | Fixed | +| CVE-2020-14789 | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: FTS). Supported versions that are affected are 5.7.31 and prior and 8.0.21 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H). | 4.0 | Fixed | +| CVE-2018-19217 | ncurses | ** DISPUTED ** In ncurses, possibly a 6.x version, there is a NULL pointer dereference at the function _nc_name_match that will lead to a denial of service attack. NOTE: the original report stated version 6.1, but the issue did not reproduce for that version according to the maintainer or a reliable third-party. | 6.0 | 已完成 | +| CVE-2019-16869 | netty | Netty before 4.1.42.Final mishandles whitespace before the colon in HTTP headers (such as a Transfer-Encoding : chunked line), which leads to HTTP request smuggling. | 7.0 | 已完成 | +| CVE-2020-11612 | netty | The ZlibDecoders in Netty 4.1.x before 4.1.46 allow for unbounded memory allocation while decoding a ZlibEncoded byte stream. An attacker could send a large ZlibEncoded byte stream to the Netty server, forcing the server to allocate all of its free memory to a single decoder. | 9.0 | 已完成 | +| CVE-2019-20445 | netty | HttpObjectDecoder.java in Netty before 4.1.44 allows a Content-Length header to be accompanied by a second Content-Length header, or by a Transfer-Encoding header. | 9.0 | 已完成 | +| CVE-2019-20444 | netty | HttpObjectDecoder.java in Netty before 4.1.44 allows an HTTP header that lacks a colon, which might be interpreted as a separate header with an incorrect syntax, or might be interpreted as an invalid fold. | 9.0 | 已完成 | +| CVE-2018-15173 | nmap | Nmap through 7.70, when the -sV option is used, allows remote attackers to cause a denial of service (stack consumption and application crash) via a crafted TCP-based service. | 7.0 | Fixed | +| CVE-2018-1000161 | nmap | nmap version 6.49BETA6 through 7.60, up to and including SVN revision 37147 contains a Directory Traversal vulnerability in NSE script http-fetch that can result in file overwrite as the user is running it. This attack appears to be exploitable via a victim that runs NSE script http-fetch against a malicious web site. This vulnerability appears to have been fixed in 7.7. | 5.0 | Fixed | +| CVE-2019-9755 | ntfs-3g | An integer underflow issue exists in ntfs-3g 2017.3.23. A local attacker could potentially exploit this by running /bin/ntfs-3g with specially crafted arguments from a specially crafted directory to cause a heap buffer overflow, resulting in a crash or the ability to execute arbitrary code. In installations where /bin/ntfs-3g is a setuid-root binary, this could lead to a local escalation of privileges. | 7.0 | Fixed | +| CVE-2020-15719 | openldap | libldap in certain third-party OpenLDAP packages has a certificate-validation flaw when the third-party package is asserting RFC6125 support. It considers CN even when there is a non-matching subjectAltName (SAN). This is fixed in, for example, openldap-2.4.46-10.el8 in Red Hat Enterprise Linux. | 4.0 | Fixed | +| CVE-2017-17833 | openslp | OpenSLP releases in the 1.0.2 and 1.1.0 code streams have a heap-related memory corruption issue which may manifest itself as a denial-of-service or a remote code-execution vulnerability. | 9.0 | Fixed | +| CVE-2016-4912 | openslp | The _xrealloc function in xlsp_xmalloc.c in OpenSLP 2.0.0 allows remote attackers to cause a denial of service (NULL pointer dereference and crash) via a large number of crafted packets, which triggers a memory allocation failure. | 7.0 | Fixed | +| CVE-2016-7567 | openslp | Buffer overflow in the SLPFoldWhiteSpace function in common/slp_compare.c in OpenSLP 2.0 allows remote attackers to have unspecified impact via a crafted string. | 9.0 | 未修复 | +| CVE-2019-5544 | openslp | OpenSLP as used in ESXi and the Horizon DaaS appliances has a heap overwrite issue. VMware has evaluated the severity of this issue to be in the Critical severity range with a maximum CVSSv3 base score of 9.8. | 9.0 | Fixed | +| CVE-2018-11797 | pdfbox | In Apache PDFBox 1.8.0 to 1.8.15 and 2.0.0RC1 to 2.0.11, a carefully crafted PDF file can trigger an extremely long running computation when parsing the page tree. | 5.5 | Fixed | +| CVE-2018-8036 | pdfbox | In Apache PDFBox 1.8.0 to 1.8.14 and 2.0.0RC1 to 2.0.10, a carefully crafted (or fuzzed) file can trigger an infinite loop which leads to an out of memory exception in Apache PDFBoxs AFMParser. | 6.5 | Fixed | +| CVE-2020-11538 | python-pillow | In libImaging/SgiRleDecode.c in Pillow through 7.0.0, a number of out-of-bounds reads exist in the parsing of SGI image files, a different issue than CVE-2020-5311. | 8.0 | Fixed | +| CVE-2019-16865 | python-pillow | An issue was discovered in Pillow before 6.2.0. When reading specially crafted invalid image files, the library can either allocate very large amounts of memory or take an extremely long period of time to process the image. | 7.0 | Fixed | +| CVE-2020-10177 | python-pillow | Pillow before 7.1.0 has multiple out-of-bounds reads in libImaging/FliDecode.c. | 5.0 | Fixed | +| CVE-2020-10994 | python-pillow | In libImaging/Jpeg2KDecode.c in Pillow before 7.1.0, there are multiple out-of-bounds reads via a crafted JP2 file. | 5.0 | Fixed | +| CVE-2020-10378 | python-pillow | In libImaging/PcxDecode.c in Pillow before before 7.1.0, an out-of-bounds read can occur when reading PCX files where state->shuffle is instructed to read beyond state->buffer. | 5.0 | Fixed | +| CVE-2020-10379 | python-pillow | In Pillow before 7.1.0, there are two Buffer Overflows in libImaging/TiffDecode.c. | 7.0 | Fixed | +| CVE-2020-5311 | python-pillow | libImaging/SgiRleDecode.c in Pillow before 6.2.2 has an SGI buffer overflow. | 9.0 | Fixed | +| CVE-2020-5310 | python-pillow | libImaging/TiffDecode.c in Pillow before 6.2.2 has a TIFF decoding integer overflow, related to realloc. | 8.0 | Fixed | +| CVE-2019-19911 | python-pillow | There is a DoS vulnerability in Pillow before 6.2.2 caused by FpxImagePlugin.py calling the range function on an unvalidated 32-bit integer if the number of bands is large. On Windows running 32-bit Python, this results in an OverflowError or MemoryError due to the 2 GB limit. However, on Linux running 64-bit Python this results in the process being terminated by the OOM killer. | 7.0 | Fixed | +| CVE-2020-5312 | python-pillow | libImaging/PcxDecode.c in Pillow before 6.2.2 has a PCX P mode buffer overflow. | 9.0 | Fixed | +| CVE-2020-8597 | ppp | eap.c in pppd in ppp 2.4.2 through 2.4.8 has an rhostname buffer overflow in the eap_request and eap_response functions. | 9.0 | Fixed | +| CVE-2014-3618 | procmail | Heap-based buffer overflow in formisc.c in formail in procmail 3.22 allows remote attackers to cause a denial of service (crash) and possibly execute arbitrary code via a crafted email header, related to "unbalanced quotes." | 7.0 | Fixed | +| CVE-1999-0475 | procmail | HowProcmailHandles.procmailrc文件存在竞争条件漏洞。本地用户可以利用该漏洞读取正在运行Procmail的用户的任意可获取文件。 | 1.0 | 未修复 | +| CVE-2017-16844 | procmail | Heap-based buffer overflow in the loadbuf function in formisc.c in formail in procmail 3.22 allows remote attackers to cause a denial of service (application crash) or possibly execute arbitrary code via a crafted e-mail message because of a hardcoded realloc size, a different vulnerability than CVE-2014-3618. | 9.0 | Fixed | +| CVE-2017-7418 | proftpd | ProFTPD before 1.3.5e and 1.3.6 before 1.3.6rc5 controls whether the home directory of a user could contain a symbolic link through the AllowChrootSymlinks configuration option, but checks only the last path component when enforcing AllowChrootSymlinks. Attackers with local access could bypass the AllowChrootSymlinks control by replacing a path component (other than the last one) with a symbolic link. The threat model includes an attacker who is not granted full filesystem access by a hosting provider, but can reconfigure the home directory of an FTP user. | 5.5 | N/A | +| CVE-2016-3125 | proftpd | The mod_tls module in ProFTPD before 1.3.5b and 1.3.6 before 1.3.6rc2 does not properly handle the TLSDHParamFile directive, which might cause a weaker than intended Diffie-Hellman (DH) key to be used and consequently allow attackers to have unspecified impact via unknown vectors. | 7.5 | N/A | +| CVE-2020-14422 | python3 | Lib/ipaddress.py in Python through 3.8.3 improperly computes hash values in the IPv4Interface and IPv6Interface classes, which might allow a remote attacker to cause a denial of service if an application is affected by the performance of a dictionary containing IPv4Interface or IPv6Interface objects, and this attacker can cause many dictionary entries to be created. This is fixed in: v3.5.10, v3.5.10rc1; v3.6.12; v3.7.9; v3.8.4, v3.8.4rc1, v3.8.5, v3.8.6, v3.8.6rc1; v3.9.0, v3.9.0b4, v3.9.0b5, v3.9.0rc1, v3.9.0rc2. | 5.0 | Fixed | +| CVE-2020-27619 | python3 | In Python 3 through 3.9.0, the Lib/test/multibytecodec_support.py CJK codec tests call eval() on content retrieved via HTTP. | 9.0 | Fixed | +| CVE-2016-4467 | qpid_proton | The C client and C-based client bindings in the Apache Qpid Proton library before 0.13.1 on Windows do not properly verify that the server hostname matches a domain name in the subjects Common Name (CN) or subjectAltName field of the X.509 certificate when using the SChannel-based security layer, which allows man-in-the-middle attackers to spoof servers via an arbitrary valid certificate. | 5.9 | N/A | +| CVE-2019-13990 | quartz | initDocumentParser in xml/XMLSchedulingDataProcessor.java in Terracotta Quartz Scheduler through 2.3.0 allows XXE attacks via a job description. | 9.0 | Fixed | +| CVE-2019-18609 | librabbitmq | An issue was discovered in amqp_handle_input in amqp_connection.c in rabbitmq-c 0.9.0. There is an integer overflow that leads to heap memory corruption in the handling of CONNECTION_STATE_HEADER. A rogue server could return a malicious frame header that leads to a smaller target_size value than needed. This condition is then carried on to a memcpy function that copies too much data into a heap buffer. | 9.0 | Fixed | +| CVE-2015-3416 | sqlite | The sqlite3VXPrintf function in printf.c in SQLite before 3.8.9 does not properly handle precision and width values during floating-point conversions, which allows context-dependent attackers to cause a denial of service (integer overflow and stack-based buffer overflow) or possibly have unspecified other impact via large integers in a crafted printf function call in a SELECT statement. | 7.0 | N/A | +| CVE-2015-5895 | sqlite | Multiple unspecified vulnerabilities in SQLite before 3.8.10.2, as used in Apple iOS before 9, have unknown impact and attack vectors. | 10.0 | N/A | +| CVE-2015-3415 | sqlite | The sqlite3VdbeExec function in vdbe.c in SQLite before 3.8.9 does not properly implement comparison operators, which allows context-dependent attackers to cause a denial of service (invalid free operation) or possibly have unspecified other impact via a crafted CHECK clause, as demonstrated by CHECK(0&O>O) in a CREATE TABLE statement. | 7.0 | N/A | +| CVE-2015-3414 | sqlite | SQLite before 3.8.9 does not properly implement the dequoting of collation-sequence names, which allows context-dependent attackers to cause a denial of service (uninitialized memory access and application crash) or possibly have unspecified other impact via a crafted COLLATE clause, as demonstrated by COLLATE at the end of a SELECT statement. | 7.0 | N/A | +| CVE-2015-6607 | sqlite | SQLite before 3.8.9, as used in Android before 5.1.1 LMY48T, allows attackers to gain privileges via a crafted application, aka internal bug 20099586. | 6.0 | N/A | +| CVE-2015-3717 | sqlite | Multiple buffer overflows in the printf functionality in SQLite, as used in Apple iOS before 8.4 and OS X before 10.10.4, allow remote attackers to execute arbitrary code or cause a denial of service (application crash) via unspecified vectors. | 7.0 | N/A | +| CVE-2016-6153 | sqlite | os_unix.c in SQLite before 3.13.0 improperly implements the temporary directory search algorithm, which might allow local users to obtain sensitive information, cause a denial of service (application crash), or have unspecified other impact by leveraging use of the current working directory for temporary files. | 5.0 | N/A | +| CVE-2018-1320 | thrift | Apache Thrift Java client library versions 0.5.0 through 0.11.0 can bypass SASL negotiation isComplete validation in the org.apache.thrift.transport.TSaslTransport class. An assert used to determine if the SASL handshake had successfully completed could be disabled in production settings making the validation incomplete. | 7.5 | Fixed | +| CVE-2018-11798 | thrift | The Apache Thrift Node.js static web server in versions 0.9.2 through 0.11.0 have been determined to contain a security vulnerability in which a remote user has the ability to access files outside the set webservers docroot path. | 6.5 | Fixed | +| CVE-2019-3564 | thrift | Go Facebook Thrift servers would not error upon receiving messages with containers of fields of unknown type. As a result, malicious clients could send short messages which would take a long time for the server to parse, potentially leading to denial of service. This issue affects Facebook Thrift prior to v2019.03.04.00. | 7.5 | N/A | +| CVE-2019-3559 | thrift | Java Facebook Thrift servers would not error upon receiving messages with containers of fields of unknown type. As a result, malicious clients could send short messages which would take a long time for the server to parse, potentially leading to denial of service. This issue affects Facebook Thrift prior to v2019.02.18.00. | 7.5 | N/A | +| CVE-2019-3552 | thrift | C++ Facebook Thrift servers (using cpp2) would not error upon receiving messages with containers of fields of unknown type. As a result, malicious clients could send short messages which would take a long time for the server to parse, potentially leading to denial of service. This issue affects Facebook Thrift prior to v2019.02.18.00. | 7.5 | N/A | +| CVE-2019-3558 | thrift | Python Facebook Thrift servers would not error upon receiving messages with containers of fields of unknown type. As a result, malicious clients could send short messages which would take a long time for the server to parse, potentially leading to denial of service. This issue affects Facebook Thrift prior to v2019.02.18.00. | 7.5 | N/A | +| CVE-2019-3565 | thrift | Legacy C++ Facebook Thrift servers (using cpp instead of cpp2) would not error upon receiving messages with containers of fields of unknown type. As a result, malicious clients could send short messages which would take a long time for the server to parse, potentially leading to denial of service. This issue affects Facebook Thrift prior to v2019.05.06.00. | 7.5 | N/A | +| CVE-2019-10193 | redis | A stack-buffer overflow vulnerability was found in the Redis hyperloglog data structure versions 3.x before 3.2.13, 4.x before 4.0.14 and 5.x before 5.0.4. By corrupting a hyperloglog using the SETRANGE command, an attacker could cause Redis to perform controlled increments of up to 12 bytes past the end of a stack-allocated buffer. | 7.0 | Fixed | +| CVE-2020-14147 | redis | An integer overflow in the getnum function in lua_struct.c in Redis before 6.0.3 allows context-dependent attackers with permission to run Lua code in a Redis session to cause a denial of service (memory corruption and application crash) or possibly bypass intended sandbox restrictions via a large number, which triggers a stack-based buffer overflow. NOTE: this issue exists because of a CVE-2015-8080 regression. | 7.0 | Fixed | +| CVE-2018-12453 | redis | Type confusion in the xgroupCommand function in t_stream.c in redis-server in Redis before 5.0 allows remote attackers to cause denial-of-service via an XGROUP command in which the key is not a stream. | 7.0 | N/A | +| CVE-2019-10192 | redis | A heap-buffer overflow vulnerability was found in the Redis hyperloglog data structure versions 3.x before 3.2.13, 4.x before 4.0.14 and 5.x before 5.0.4. By carefully corrupting a hyperloglog using the SETRANGE command, an attacker could trick Redis interpretation of dense HLL encoding to write up to 3 bytes beyond the end of a heap-allocated buffer. | 7.0 | Fixed | +| CVE-2014-1904 | springframework | Cross-site scripting (XSS) vulnerability in web/servlet/tags/form/FormTag.java in Spring MVC in Spring Framework 3.0.0 before 3.2.8 and 4.0.0 before 4.0.2 allows remote attackers to inject arbitrary web script or HTML via the requested URI in a default action. | 4.0 | N/A | +| CVE-2018-1270 | springframework | Spring Framework, versions 5.0 prior to 5.0.5 and versions 4.3 prior to 4.3.15 and older unsupported versions, allow applications to expose STOMP over WebSocket endpoints with a simple, in-memory STOMP broker through the spring-messaging module. A malicious user (or attacker) can craft a message to the broker that can lead to a remote code execution attack. | 9.0 | N/A | +| CVE-2018-1272 | springframework | Spring Framework, versions 5.0 prior to 5.0.5 and versions 4.3 prior to 4.3.15 and older unsupported versions, provide client-side support for multipart requests. When Spring MVC or Spring WebFlux server application (server A) receives input from a remote client, and then uses that input to make a multipart request to another server (server B), it can be exposed to an attack, where an extra multipart is inserted in the content of the request from server A, causing server B to use the wrong value for a part it expects. This could to lead privilege escalation, for example, if the part content represents a username or user roles. | 7.0 | N/A | +| CVE-2018-1271 | springframework | Spring Framework, versions 5.0 prior to 5.0.5 and versions 4.3 prior to 4.3.15 and older unsupported versions, allow applications to configure Spring MVC to serve static resources (e.g. CSS, JS, images). When static resources are served from a file system on Windows (as opposed to the classpath, or the ServletContext), a malicious user can send a request using a specially crafted URL that can lead a directory traversal attack. | 5.0 | N/A | +| CVE-2016-5007 | springframework | Both Spring Security 3.2.x, 4.0.x, 4.1.0 and the Spring Framework 3.2.x, 4.0.x, 4.1.x, 4.2.x rely on URL pattern mappings for authorization and for mapping requests to controllers respectively. Differences in the strictness of the pattern matching mechanisms, for example with regards to space trimming in path segments, can lead Spring Security to not recognize certain paths as not protected that are in fact mapped to Spring MVC controllers that should be protected. The problem is compounded by the fact that the Spring Framework provides richer features with regards to pattern matching as well as by the fact that pattern matching in each Spring Security and the Spring Framework can easily be customized creating additional differences. | 7.0 | N/A | +| CVE-2020-5421 | springframework | In Spring Framework versions 5.2.0 - 5.2.8, 5.1.0 - 5.1.17, 5.0.0 - 5.0.18, 4.3.0 - 4.3.28, and older unsupported versions, the protections against RFD attacks from CVE-2015-5211 may be bypassed depending on the browser used through the use of a jsessionid path parameter. | 6.0 | Fixed | +| CVE-2007-6726 | struts | Multiple cross-site scripting (XSS) vulnerabilities in Dojo 0.4.1 and 0.4.2, as used in Apache Struts and other products, allow remote attackers to inject arbitrary web script or HTML via unspecified vectors involving (1) xip_client.html and (2) xip_server.html in src/io/. | 4.0 | N/A | +| CVE-2011-1772 | struts | Multiple cross-site scripting (XSS) vulnerabilities in XWork in Apache Struts 2.x before 2.2.3, and OpenSymphony XWork in OpenSymphony WebWork, allow remote attackers to inject arbitrary web script or HTML via vectors involving (1) an action name, (2) the action attribute of an s:submit element, or (3) the method attribute of an s:submit element. | 2.0 | N/A | +| CVE-2016-1182 | struts | ActionServlet.java in Apache Struts 1 1.x through 1.3.10 does not properly restrict the Validator configuration, which allows remote attackers to conduct cross-site scripting (XSS) attacks or cause a denial of service via crafted input, a related issue to CVE-2015-0899. | 8.0 | Fixed | +| CVE-2016-3082 | struts | XSLTResult in Apache Struts 2.x before 2.3.20.2, 2.3.24.x before 2.3.24.2, and 2.3.28.x before 2.3.28.1 allows remote attackers to execute arbitrary code via the stylesheet location parameter. | 9.0 | N/A | +| CVE-2012-0393 | struts | The ParameterInterceptor component in Apache Struts before 2.3.1.1 does not prevent access to public constructors, which allows remote attackers to create or overwrite arbitrary files via a crafted parameter that triggers the creation of a Java object. | 6.0 | N/A | +| CVE-2015-2992 | struts | Apache Struts before 2.3.20 has a cross-site scripting (XSS) vulnerability. | 6.0 | N/A | +| CVE-2007-4556 | struts | Struts support in OpenSymphony XWork before 1.2.3, and 2.x before 2.0.4, as used in WebWork and Apache Struts, recursively evaluates all input as an Object-Graph Navigation Language (OGNL) expression when altSyntax is enabled, which allows remote attackers to cause a denial of service (infinite loop) or execute arbitrary code via form input beginning with a %{ sequence and ending with a } character. | 6.0 | N/A | +| CVE-2015-1831 | struts | The default exclude patterns (excludeParams) in Apache Struts 2.3.20 allow remote attackers to compromise internal state of an application via unspecified vectors. | 7.0 | N/A | +| CVE-2012-1006 | struts | Multiple cross-site scripting (XSS) vulnerabilities in Apache Struts 2.0.14 and 2.2.3 allow remote attackers to inject arbitrary web script or HTML via the (1) name or (2) lastName parameter to struts2-showcase/person/editPerson.action, or the (3) clientName parameter to struts2-rest-showcase/orders. | 4.0 | N/A | +| CVE-2014-0116 | struts | CookieInterceptor in Apache Struts 2.x before 2.3.20, when a wildcard cookiesName value is used, does not properly restrict access to the getClass method, which allows remote attackers to manipulate the ClassLoader and modify session state via a crafted request. NOTE: this vulnerability exists because of an incomplete fix for CVE-2014-0113. | 5.0 | N/A | +| CVE-2017-5638 | struts | The Jakarta Multipart parser in Apache Struts 2 2.3.x before 2.3.32 and 2.5.x before 2.5.10.1 has incorrect exception handling and error-message generation during file-upload attempts, which allows remote attackers to execute arbitrary commands via a crafted Content-Type, Content-Disposition, or Content-Length HTTP header, as exploited in the wild in March 2017 with a Content-Type header containing a #cmd= string. | 10.0 | N/A | +| CVE-2013-2251 | struts | Apache Struts 2.0.0 through 2.3.15 allows remote attackers to execute arbitrary OGNL expressions via a parameter with a crafted (1) action:, (2) redirect:, or (3) redirectAction: prefix. | 9.0 | N/A | +| CVE-2016-0785 | struts | Apache Struts 2.x before 2.3.28 allows remote attackers to execute arbitrary code via a %{} sequence in a tag attribute, aka forced double OGNL evaluation. | 8.0 | N/A | +| CVE-2012-1007 | struts | Multiple cross-site scripting (XSS) vulnerabilities in Apache Struts 1.3.10 allow remote attackers to inject arbitrary web script or HTML via (1) the name parameter to struts-examples/upload/upload-submit.do, or the message parameter to (2) struts-cookbook/processSimple.do or (3) struts-cookbook/processDyna.do. | 4.0 | N/A | +| CVE-2010-1870 | struts | The OGNL extensive expression evaluation capability in XWork in Struts 2.0.0 through 2.1.8.1, as used in Atlassian Fisheye, Crucible, and possibly other products, uses a permissive whitelist, which allows remote attackers to modify server-side context objects and bypass the # protection mechanism in ParameterInterceptors via the (1) #context, (2) #_memberAccess, (3) #root, (4) #this, (5) #_typeResolver, (6) #_classResolver, (7) #_traceEvaluations, (8) #_lastEvaluation, (9) #_keepLastEvaluation, and possibly other OGNL context variables, a different vulnerability than CVE-2008-6504. | 5.0 | N/A | +| CVE-2016-1181 | struts | ActionServlet.java in Apache Struts 1 1.x through 1.3.10 mishandles multithreaded access to an ActionForm instance, which allows remote attackers to execute arbitrary code or cause a denial of service (unexpected memory access) via a multipart request, a related issue to CVE-2015-0899. | 8.0 | Fixed | +| CVE-2011-3923 | struts | Apache Struts before 2.3.1.2 allows remote attackers to bypass security protections in the ParameterInterceptor class and execute arbitrary commands. | 9.0 | N/A | +| CVE-2013-2115 | struts | Apache Struts 2 before 2.3.14.2 allows remote attackers to execute arbitrary OGNL code via a crafted request that is not properly handled when using the includeParams attribute in the (1) URL or (2) A tag. NOTE: this issue is due to an incomplete fix for CVE-2013-1966. | 8.0 | N/A | +| CVE-2013-1965 | struts | Apache Struts Showcase App 2.0.0 through 2.3.13, as used in Struts 2 before 2.3.14.3, allows remote attackers to execute arbitrary OGNL code via a crafted parameter name that is not properly handled when invoking a redirect. | 9.0 | N/A | +| CVE-2012-0838 | struts | Apache Struts 2 before 2.2.3.1 evaluates a string as an OGNL expression during the handling of a conversion error, which allows remote attackers to modify run-time data values, and consequently execute arbitrary code, via invalid input to a field. | 10.0 | N/A | +| CVE-2015-0899 | struts | The MultiPageValidator implementation in Apache Struts 1 1.1 through 1.3.10 allows remote attackers to bypass intended access restrictions via a modified page parameter. | 7.0 | Fixed | +| CVE-2013-2248 | struts | Multiple open redirect vulnerabilities in Apache Struts 2.0.0 through 2.3.15 allow remote attackers to redirect users to arbitrary web sites and conduct phishing attacks via a URL in a parameter using the (1) redirect: or (2) redirectAction: prefix. | 5.0 | N/A | +| CVE-2016-3087 | struts | Apache Struts 2.3.19 to 2.3.20.2, 2.3.21 to 2.3.24.1, and 2.3.25 to 2.3.28, when Dynamic Method Invocation is enabled, allow remote attackers to execute arbitrary code via vectors related to an ! (exclamation mark) operator to the REST Plugin. | 9.0 | N/A | +| CVE-2014-0094 | struts | The ParametersInterceptor in Apache Struts before 2.3.16.2 allows remote attackers to manipulate the ClassLoader via the class parameter, which is passed to the getClass method. | 5.0 | N/A | +| CVE-2015-5169 | struts | Cross-site scripting (XSS) vulnerability in Apache Struts before 2.3.20. | 6.0 | N/A | +| CVE-2012-0392 | struts | The CookieInterceptor component in Apache Struts before 2.3.1.1 does not use the parameter-name whitelist, which allows remote attackers to execute arbitrary commands via a crafted HTTP Cookie header that triggers Java code execution through a static method. | 9.0 | N/A | +| CVE-2015-5209 | struts | Apache Struts 2.x before 2.3.24.1 allows remote attackers to manipulate Struts internals, alter user sessions, or affect container settings via vectors involving a top object. | 7.0 | N/A | +| CVE-2012-0394 | struts | ** DISPUTED ** The DebuggingInterceptor component in Apache Struts before 2.3.1.1, when developer mode is used, allows remote attackers to execute arbitrary commands via unspecified vectors. NOTE: the vendor characterizes this behavior as not a security vulnerability itself. | 6.0 | N/A | +| CVE-2018-1000035 | unzip | A heap-based buffer overflow exists in Info-Zip UnZip version <= 6.00 in the processing of password-protected archives that allows an attacker to perform a denial of service or to possibly achieve code execution. | 7.8 | Fixed | +| CVE-2018-16056 | wireshark | In Wireshark 2.6.0 to 2.6.2, 2.4.0 to 2.4.8, and 2.2.0 to 2.2.16, the Bluetooth Attribute Protocol dissector could crash. This was addressed in epan/dissectors/packet-btatt.c by verifying that a dissector for a specific UUID exists. | 7.5 | Fixed | +| CVE-2012-0881 | xerces-j2 | GNU binutils gold gold v1.11-v1.16 (GNU binutils v2.21-v2.31.1) is affected by: Improper Input Validation, Signed/Unsigned Comparison, Out-of-bounds Read. The impact is: Denial of service. The component is: gold/fileread.cc:497, elfcpp/elfcpp_file.h:644. The attack vector is: An ELF file with an invalid e_shoff header field must be opened. | 7.5 | Fixed | +| CVE-2018-16548 | zziplib | An issue was discovered in ZZIPlib through 0.13.69. There is a memory leak triggered in the function __zzip_parse_root_directory in zip.c, which will lead to a denial of service attack. | 6.0 | Fixed | +| CVE-2018-17828 | zziplib | Directory traversal vulnerability in ZZIPlib 0.13.69 allows attackers to overwrite arbitrary files via a .. (dot dot) in a zip file, because of the function unzzip_cat in the bins/unzzipcat-mem.c file. | 5.0 | Fixed | diff --git a/docs/en/docs/Releasenotes/installing-the-os.md b/docs/en/docs/Releasenotes/installing-the-os.md new file mode 100644 index 0000000000000000000000000000000000000000..bad2dc5f23d0c7efb58f9b187d98d2ab8e52860a --- /dev/null +++ b/docs/en/docs/Releasenotes/installing-the-os.md @@ -0,0 +1,129 @@ +# Installing the OS + +## Release Package + +The following table lists the [openEuler release files](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/), including the [ISO release package](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/ISO/), [container image](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/docker_img/), [VM image](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/virtual_machine_img/), and [repo source](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/) that is used online. + +**Table 1** ISO release + +| Name | Description | +| :---- | :---- | +| openEuler-20.03-LTS-SP2-aarch64-dvd.iso | The openEuler basic installation software package ISO files for the AArch64 architecture. The ISO files contain basic components running on the openEuler OS | +| openEuler-20.03-LTS-SP2-everything-aarch64-dvd.iso | the openEuler full software package ISO files for the AArch64 architecture| +| openEuler-20.03-LTS-SP2-debuginfo-aarch64-dvd.iso | The openEuler debugging software package ISO files for the AArch64 architecture, contains the symbol table information required for debugging | +| openEuler-20.03-LTS-SP2-netinst-aarch64-dvd.iso | The openEuler miniaturization ISO files for the AArch64 architecture. | +| openEuler-20.03-LTS-SP2-x86_64-dvd.iso | The openEuler basic installation software package ISO files for the x86 architecture. The ISO files contain basic components running on the openEuler OS | +| openEuler-20.03-LTS-SP2-everything-x86_64-dvd.iso | the openEuler full software package ISO files for the x86 architecture | +| openEuler-20.03-LTS-SP2-debuginfo-x86_64-dvd.iso | The openEuler debugging software package ISO files for the x86 architecture, contains the symbol table information required for debugging | +| openEuler-20.03-LTS-SP2-netinst-x86_64-dvd.iso |The openEuler miniaturization ISO files for the x86 architecture. | +| openEuler-20.03-LTS-SP2-source-dvd.iso | The ISO file that contains all source code software packages of the openEuler community | + + +**Table 2** VM image + +| Name | Description | +| :---- | :---- | +| openEuler-20.03-LTS-SP2.aarch64.qcow2.xz | The openEuler VM image for the AArch64 architecture | +| openEuler-20.03-LTS-SP2.x86_64.qcow2.xz | The openEuler VM image for the x86 architecture | + +> ![](./public_sys-resources/icon-note.gif) **NOTICE:** +> The default password of the root user of the VM image is openEuler12#$. Change the password upon the first login. + + +**Table 3** Container image + +| Name | Description | +| :---- | :---- | +| openEuler-docker.aarch64.tar.xz | The openEuler container image for the AArch64 architecture | +| openEuler-docker.x86_64.tar.xz | The openEuler container image for the x86 architecture | + + +**Table 4** Repo source + +| Directory | Description | +| :---- | :---- | +| [ISO](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/ISO/) | The directory differentiates the ISO release packages for the AArch64, x86, and source, respectively | +| [OS](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/) | The repo source of the openEuler basic installation software package provides the offline version upgrade function | +| [debuginfo](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/debuginfo/) | The repo source of the openEuler debugging software package provides the online download function | +| [docker_img](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/docker_img/) | The openEuler container image, which provides only the basic bash environment, is used as the basic container image | +| [virtual_machine_img](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/virtual_machine_img/) | The openEuler VM image provides only the basic running environment to shorten the VM deployment time | +| [everything](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/everything/) | The repo source of the openEuler full software package provides the online download and version upgrade functions | +| [extras](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/extras/) | The repo source of the openEuler extended software package is used to release new software packages with added features | +| [source](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/source/) | The repo source of all source code software packages in the openEuler community, which is used online by developers | +| [update](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/update/) | The repo source of the openEuler upgrade software package, which is used to fix bugs and common vulnerabilities and exposures (CVE) in released versions and to update and release software with enhancements | +| [EPOL](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/EPOL/) | The repo sources of the openEuler third-party software package are mainly contributed by third parties and communities | +| [raspi_img](http://repo.openeuler.org/openEuler-20.03-LTS-SP2/raspi_img/) | The repo source of the openEuler Raspberry Pi image | + +## Minimal Hardware Specifications + +[Table 5](#en-us_topic_0182825778_tff48b99c9bf24b84bb602c53229e2541) lists the minimum hardware specifications for installing openEuler 20.03 LTS SP2. + +**Table 5** Minimal hardware specifications + +| Component | Minimal Hardware Specification | +| :---- | :---- | +| CPU | Kunpeng 920 (architecture: AArch64)
Skylake or later (x86-64) | +| Memory | ≥ 8 GB | +| Hard disk | ≥ 120 GB | + +## Hardware Compatibility + +[Table 6](#en-us_topic_0227922427_table39822012) lists the typical configurations of servers and components supported by openEuler. openEuler will gradually support other servers in the future. Partners and developers are welcome to participate in the contribution and validation. + +**Table 6** Supported servers and typical configurations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VendorServerServer ModelComponentTypical Configuration
HuaweiTaiShan 2002280 balanced modelCPUKunpeng 920
Memory32G*4 2933MHz
NetworkTM210
HuaweiFusionServer Pro2288H V5 rack serverCPUIntel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz
Memory32*4 2400MHz
NetworkX722
PHYTIUMPhytiumFT-2000+/64CPUFT-2000+/64
MemoryMicron 16G*32
NetworkI350
+ diff --git a/docs/en/docs/Releasenotes/interface-change.md b/docs/en/docs/Releasenotes/interface-change.md new file mode 100644 index 0000000000000000000000000000000000000000..e9322ab9fa212a5f7803aa0081f60a23f700cd92 --- /dev/null +++ b/docs/en/docs/Releasenotes/interface-change.md @@ -0,0 +1,2265 @@ +# Interface Change + +The C/C++ interface changes are described as follows. + +## alsa-lib + +For details, see [alsa-lib](./LTS_to_SP2_changed_abi_detail/alsa-lib_all_result.md\) + +| function | type | +|:---- |:-- | +| snd_tplg_add_object | remove | +| snd_tplg_build | remove | +| snd_tplg_build_file | remove | +| snd_tplg_free | remove | +| snd_tplg_new | remove | +| snd_tplg_set_manifest_data | remove | +| snd_tplg_set_version | remove | +| snd_tplg_verbose | remove | +| snd_config_add_after | add | +| snd_config_add_before | add | +| snd_config_is_array | add | +| snd_dlpath | add | +| snd_mixer_selem_id_parse | add | +| snd_pcm_extplug_set_param_link | add | +| snd_pcm_ioplug_avail | add | +| snd_strlcpy | add | +| snd_use_case_parse_ctl_elem_id | add | +| snd_use_case_parse_selem_id | add | +| __old_snd_pcm_hw_params_set_access_first | change | +| __snd_ctl_elem_info_get_dimension | change | +| _snd_ctl_hw_open | change | +| _snd_rawmidi_hw_open | change | +| snd_midi_event_decode | change | +| snd_pcm_direct_client_chk_xrun | change | +| snd_pcm_dmix_open | change | +| snd_use_case_get | change | + +## atk + +For details, see [atk](./LTS_to_SP2_changed_abi_detail/atk_all_result.md\) + +| function | type | +|:---- |:-- | +| atk_object_get_accessible_id | add | +| atk_object_set_accessible_id | add | +| atk_plug_set_child | add | +| atk_text_scroll_substring_to | add | +| atk_text_scroll_substring_to_point | add | +| atk_add_focus_tracker | change | +| atk_text_attribute_for_name | change | + +## brltty + +For details, see [brltty](./LTS_to_SP2_changed_abi_detail/brltty_all_result.md\) + +| function | type | +|:---- |:-- | +| lxBrailleOfflineListener | remove | +| lxBrailleDeviceOfflineListener | add | + +## c-ares + +For details, see [c-ares](./LTS_to_SP2_changed_abi_detail/c-ares_all_result.md\) + +| function | type | +|:---- |:-- | +| ares_freeaddrinfo | add | +| ares_getaddrinfo | add | + +## e2fsprogs + +For details, see [e2fsprogs](./LTS_to_SP2_changed_abi_detail/e2fsprogs_all_result.md\) + +| function | type | +|:---- |:-- | +| e2p_feature_to_string | add | +| list_super | change | +| ext2fs_dirent_swab_in | add | +| ext2fs_dirent_swab_in2 | add | +| ext2fs_dirent_swab_out | add | +| ext2fs_dirent_swab_out2 | add | +| ext2fs_get_stat_i_blocks | add | +| ext2fs_resize_array | add | +| ext2fs_swap_ext_attr | add | +| ext2fs_swap_ext_attr_entry | add | +| ext2fs_swap_ext_attr_header | add | +| ext2fs_swap_group_desc | add | +| ext2fs_swap_group_desc2 | add | +| ext2fs_swap_inode | add | +| ext2fs_swap_inode_full | add | +| ext2fs_swap_mmp | add | +| ext2fs_swap_super | add | +| ext2fs_add_journal_device | change | +| ext2fs_file_get_size | change | +| ext2fs_file_lseek | change | +| ext2fs_file_set_size | change | +| ext2fs_file_set_size2 | change | +| ext2fs_inode_size_set | change | +| ext2fs_mmp_csum_set | change | + +## exiv2 + +For details, see [exiv2](./LTS_to_SP2_changed_abi_detail/exiv2_all_result.md\) + +| function | type | +|:---- |:-- | +| None | None | + +## fontconfig + +For details, see [fontconfig](./LTS_to_SP2_changed_abi_detail/fontconfig_all_result.md\) + +| function | type | +|:---- |:-- | +| IA__FcConfigGetFilename | add | +| IA__FcStrBuildFilename | add | +| FcConfigAddRule | change | +| IA__FcCacheCreateTagFile | change | +| IA__FcConfigGetCacheDirs | change | + +## glib2 + +For details, see [glib2](./LTS_to_SP2_changed_abi_detail/glib2_all_result.md\) + +| function | type | +|:---- |:-- | +| g_file_monitor_source_handle_event | change | + +### gnutls + +For details, see [gnutls](./LTS_to_SP2_changed_abi_detail/gnutls_all_result.md\) + +| function | type | +|:---- |:-- | +| gnutls::certificate_credentials::set_retrieve_function | change | +| _gnutls_buffer_clear | add | +| _gnutls_buffer_pop_datum | add | +| _gnutls_buffer_unescape | add | +| _gnutls_iov_iter_init | add | +| _gnutls_iov_iter_next | add | +| _gnutls_iov_iter_sync | add | +| gnutls_aead_cipher_decryptv2 | add | +| gnutls_aead_cipher_encryptv2 | add | +| gnutls_certificate_verification_profile_get_id | add | +| gnutls_certificate_verification_profile_get_name | add | +| gnutls_ext_get_name2 | add | +| gnutls_hkdf_expand | add | +| gnutls_hkdf_extract | add | +| gnutls_hmac_get_key_size | add | +| gnutls_pbkdf2 | add | +| gnutls_pkcs7_print_signature_info | add | +| gnutls_prf_hash_get | add | +| gnutls_psk_server_get_username2 | add | +| gnutls_psk_set_client_credentials2 | add | +| gnutls_psk_set_client_credentials_function2 | add | +| gnutls_psk_set_server_credentials_function2 | add | +| gnutls_session_get_keylog_function | add | +| gnutls_session_set_keylog_function | add | +| _gnutls13_psk_ext_iter_next_binder | change | +| _gnutls_cipher_get_iv | change | +| _gnutls_ecc_curve_is_supported | change | +| _gnutls_hello_set_default_version | change | +| gnutls_ocsp_req_export | change | +| gnutls_ocsp_req_get_extension | change | +| gnutls_ocsp_req_get_nonce | change | +| gnutls_ocsp_req_get_version | change | +| gnutls_ocsp_req_print | change | +| gnutls_ocsp_resp_check_crt | change | +| gnutls_ocsp_resp_export | change | +| gnutls_ocsp_resp_export2 | change | +| gnutls_ocsp_resp_get_certs | change | +| gnutls_ocsp_resp_get_extension | change | +| gnutls_ocsp_resp_get_nonce | change | +| gnutls_ocsp_resp_get_produced | change | +| gnutls_ocsp_resp_get_responder2 | change | +| gnutls_ocsp_resp_get_responder_raw_id | change | +| gnutls_ocsp_resp_get_response | change | +| gnutls_ocsp_resp_get_signature_algorithm | change | +| gnutls_ocsp_resp_print | change | +| gnutls_ocsp_resp_verify | change | +| gnutls_ocsp_resp_verify_direct | change | +| gnutls_ocsp_status_request_is_checked | change | +| gnutls_privkey_set_spki | change | +| gnutls_psk_allocate_client_credentials | change | +| gnutls_psk_allocate_server_credentials | change | +| gnutls_pubkey_get_spki | change | +| gnutls_x509_crq_get_spki | change | +| gnutls_x509_crq_get_tlsfeatures | change | +| gnutls_x509_crt_get_spki | change | +| gnutls_x509_privkey_get_spki | change | +| gnutls_x509_spki_deinit | change | +| gnutls_x509_spki_init | change | +| dane_query_data | change | +| dane_verify_session_crt | change | + +## grpc + +For details, see [grpc](./LTS_to_SP2_changed_abi_detail/grpc_all_result.md\) + +| function | type | +|:---- |:-- | +| None | None | + +## haveged + +For details, see [haveged](./LTS_to_SP2_changed_abi_detail/haveged_all_result.md\) + +| function | type | +|:---- |:-- | +| havege_reparent | add | + +## libcap-ng + +For details, see [libcap-ng](./LTS_to_SP2_changed_abi_detail/libcap-ng_all_result.md\) + +| function | type | +|:---- |:-- | +| capng_have_permitted_capabilities | add | + +## libcomps + +For details, see [libcomps](./LTS_to_SP2_changed_abi_detail/libcomps_all_result.md\) + +| function | type | +|:---- |:-- | +| None | None | + +## libdnf + +For details, see [libdnf](./LTS_to_SP2_changed_abi_detail/libdnf_all_result.md\) + +| function | type | +|:---- |:-- | +| libdnf::DependencyContainer::DependencyContainer | remove | +| libdnf::File::OpenException::OpenException | remove | +| libdnf::ModuleDefaultsContainer::ModuleDefaultsContainer | remove | +| libdnf::ModuleDefaultsContainer::fromString | remove | +| libdnf::ModuleDefaultsContainer::getDefaultProfiles | remove | +| libdnf::ModuleDefaultsContainer::getDefaultStreamFor | remove | +| libdnf::ModuleDefaultsContainer::getDefaultStreams | remove | +| libdnf::ModuleDefaultsContainer::reportFailures | remove | +| libdnf::ModuleDefaultsContainer::resolve | remove | +| libdnf::ModuleDefaultsContainer::saveDefaults | remove | +| libdnf::ModuleDefaultsContainer::~ModuleDefaultsContainer | remove | +| libdnf::ModuleDependencies::getRequirements | remove | +| libdnf::ModuleDependencies::wrapModuleDependencies | remove | +| libdnf::ModuleMetadata::ModuleMetadata | remove | +| libdnf::ModuleMetadata::getArchitecture | remove | +| libdnf::ModuleMetadata::getArtifacts | remove | +| libdnf::ModuleMetadata::getContext | remove | +| libdnf::ModuleMetadata::getDependencies | remove | +| libdnf::ModuleMetadata::getDescription | remove | +| libdnf::ModuleMetadata::getName | remove | +| libdnf::ModuleMetadata::getProfiles | remove | +| libdnf::ModuleMetadata::getStream | remove | +| libdnf::ModuleMetadata::getSummary | remove | +| libdnf::ModuleMetadata::getVersion | remove | +| libdnf::ModuleMetadata::getYaml | remove | +| libdnf::ModuleMetadata::metadataFromString | remove | +| libdnf::ModuleMetadata::wrapModulemdModule | remove | +| libdnf::ModuleMetadata::~ModuleMetadata | remove | +| libdnf::ModulePackage::ModulePackage | remove | +| libdnf::Repo::Impl::lrHandleInitRemote | remove | +| libdnf::Swdb::beginTransaction | remove | + +## libdrm + +For details, see [libdrm](./LTS_to_SP2_changed_abi_detail/libdrm_all_result.md\) + +| function | type | +|:---- |:-- | +| drmIsMaster | add | +| drmModeFreeFB2 | add | +| drmModeGetFB2 | add | +| drmSyncobjQuery | add | +| drmSyncobjQuery2 | add | +| drmSyncobjTimelineSignal | add | +| drmSyncobjTimelineWait | add | +| drmSyncobjTransfer | add | +| amdgpu_bo_list_create_raw | add | +| amdgpu_bo_list_destroy_raw | add | +| amdgpu_cs_ctx_override_priority | add | +| amdgpu_cs_query_reset_state2 | add | +| amdgpu_cs_submit_raw2 | add | +| amdgpu_cs_syncobj_export_sync_file2 | add | +| amdgpu_cs_syncobj_import_sync_file2 | add | +| amdgpu_cs_syncobj_query | add | +| amdgpu_cs_syncobj_query2 | add | +| amdgpu_cs_syncobj_timeline_signal | add | +| amdgpu_cs_syncobj_timeline_wait | add | +| amdgpu_cs_syncobj_transfer | add | +| amdgpu_bo_alloc | change | +| amdgpu_bo_import | change | +| amdgpu_bo_list_create | change | +| amdgpu_bo_va_op_raw | change | +| amdgpu_create_bo_from_user_mem | change | +| amdgpu_cs_chunk_fence_to_dep | change | +| amdgpu_cs_create_syncobj | change | +| amdgpu_cs_create_syncobj2 | change | +| amdgpu_cs_ctx_create | change | +| amdgpu_cs_ctx_create2 | change | +| amdgpu_cs_destroy_syncobj | change | +| amdgpu_cs_export_syncobj | change | +| amdgpu_cs_fence_to_handle | change | +| amdgpu_cs_import_syncobj | change | +| amdgpu_cs_submit_raw | change | +| amdgpu_cs_syncobj_import_sync_file | change | +| amdgpu_cs_syncobj_reset | change | +| amdgpu_cs_syncobj_wait | change | +| amdgpu_device_deinitialize | change | +| amdgpu_device_initialize | change | +| amdgpu_find_bo_by_cpu_mapping | change | +| amdgpu_get_marketing_name | change | +| amdgpu_query_buffer_size_alignment | change | +| amdgpu_query_crtc_from_id | change | +| amdgpu_query_firmware_version | change | +| amdgpu_query_gds_info | change | +| amdgpu_query_gpu_info | change | +| amdgpu_query_heap_info | change | +| amdgpu_query_hw_ip_count | change | +| amdgpu_query_hw_ip_info | change | +| amdgpu_query_info | change | +| amdgpu_query_sw_info | change | +| amdgpu_read_mm_registers | change | +| amdgpu_va_range_alloc | change | +| amdgpu_va_range_query | change | +| fd_ringbuffer_emit_reloc_ring | remove | +| fd_ringmarker_del | remove | +| fd_ringmarker_dwords | remove | +| fd_ringmarker_flush | remove | +| fd_ringmarker_mark | remove | +| fd_ringmarker_new | remove | +| fd_ringbuffer_new_flags | add | +| fd_ringbuffer_ref | add | +| fd_bo_cpu_fini | change | + +## libell + +For details, see [libell](./LTS_to_SP2_changed_abi_detail/libell_all_result.md\) + +| function | type | +|:---- |:-- | +| l_fswatch_destroy | remove | +| l_fswatch_new | remove | +| l_genl_family_can_dump | remove | +| l_genl_family_can_send | remove | +| l_genl_family_get_version | remove | +| l_genl_family_has_group | remove | +| l_genl_family_ref | remove | +| l_genl_family_set_watches | remove | +| l_genl_family_unref | remove | +| l_genl_new_default | remove | +| l_genl_set_close_on_unref | remove | +| l_genl_set_unicast_handler | remove | +| l_pem_load_certificate | remove | +| l_aead_cipher_is_supported | add | +| l_cert_free | add | +| l_cert_get_der_data | add | +| l_cert_get_dn | add | +| l_cert_get_pubkey | add | +| l_cert_get_pubkey_type | add | +| l_cert_new_from_der | add | +| l_certchain_free | add | +| l_certchain_get_leaf | add | +| l_certchain_verify | add | +| l_certchain_walk_from_ca | add | +| l_certchain_walk_from_leaf | add | +| l_checksum_digest_length | add | +| l_cipher_is_supported | add | +| l_dbus_object_get_data | add | +| l_dhcp_client_set_debug | add | +| l_dhcp_lease_get_dns | add | +| l_dhcp_lease_get_domain_name | add | +| l_dir_watch_destroy | add | +| l_dir_watch_new | add | +| l_ecc_curve_get | add | +| l_ecc_curve_get_ike_group | add | +| l_ecc_curve_get_name | add | +| l_ecc_curve_get_order | add | +| l_ecc_curve_get_prime | add | +| l_ecc_curve_get_scalar_bytes | add | +| l_ecc_curve_get_supported_ike_groups | add | +| l_ecc_curve_get_supported_tls_groups | add | +| l_ecc_curve_get_tls_group | add | +| l_ecc_point_add | add | +| l_ecc_point_free | add | +| l_ecc_point_from_data | add | +| l_ecc_point_get_data | add | +| l_ecc_point_get_x | add | +| l_ecc_point_inverse | add | +| l_ecc_point_multiply | add | +| l_ecc_point_new | add | +| l_ecc_points_are_equal | add | +| l_ecc_scalar_add | add | +| l_ecc_scalar_free | add | +| l_ecc_scalar_get_data | add | +| l_ecc_scalar_legendre | add | +| l_ecc_scalar_multiply | add | +| l_ecc_scalar_new | add | +| l_ecc_scalar_new_random | add | +| l_ecc_scalar_sum_x | add | +| l_ecc_scalars_are_equal | add | +| l_ecdh_generate_key_pair | add | +| l_ecdh_generate_shared_secret | add | +| l_genl_add_family_watch | add | +| l_genl_add_unicast_watch | add | +| l_genl_discover_families | add | +| l_genl_family_free | add | +| l_genl_family_get_info | add | +| l_genl_family_info_can_dump | add | +| l_genl_family_info_can_send | add | +| l_genl_family_info_get_groups | add | +| l_genl_family_info_get_id | add | +| l_genl_family_info_get_name | add | +| l_genl_family_info_get_version | add | +| l_genl_family_info_has_group | add | +| l_genl_msg_get_extended_error | add | +| l_genl_msg_new_from_data | add | +| l_genl_msg_to_data | add | +| l_genl_remove_family_watch | add | +| l_genl_remove_unicast_watch | add | +| l_genl_request_family | add | +| l_getrandom_uint32 | add | +| l_gpio_chip_find_line_offset | add | +| l_gpio_chip_free | add | +| l_gpio_chip_get_label | add | +| l_gpio_chip_get_line_consumer | add | +| l_gpio_chip_get_line_label | add | +| l_gpio_chip_get_name | add | +| l_gpio_chip_get_num_lines | add | +| l_gpio_chip_new | add | +| l_gpio_chips_with_line_label | add | +| l_gpio_reader_free | add | +| l_gpio_reader_get | add | +| l_gpio_reader_new | add | +| l_gpio_writer_free | add | +| l_gpio_writer_new | add | +| l_gpio_writer_set | add | +| l_key_generate_dh_private | add | +| l_key_get_info | add | +| l_key_is_supported | add | +| l_key_validate_dh_payload | add | +| l_keyring_link | add | +| l_keyring_link_nested | add | +| l_keyring_unlink | add | +| l_keyring_unlink_nested | add | +| l_net_hostname_is_localhost | add | +| l_net_hostname_is_root | add | +| l_path_find | add | +| l_path_get_mtime | add | +| l_path_next | add | +| l_path_touch | add | +| l_pem_load_certificate_chain | add | +| l_pem_load_certificate_chain_from_data | add | +| l_pem_load_certificate_list | add | +| l_pem_load_certificate_list_from_data | add | +| l_pem_load_private_key_from_data | add | +| l_ringbuf_append | add | +| l_rtnl_ifaddr4_add | add | +| l_rtnl_ifaddr4_delete | add | +| l_rtnl_ifaddr4_dump | add | +| l_rtnl_ifaddr4_extract | add | +| l_rtnl_ifaddr6_add | add | +| l_rtnl_ifaddr6_delete | add | +| l_rtnl_ifaddr6_dump | add | +| l_rtnl_ifaddr6_extract | add | +| l_rtnl_route4_add_connected | add | +| l_rtnl_route4_add_gateway | add | +| l_rtnl_route4_dump | add | +| l_rtnl_route4_extract | add | +| l_rtnl_route6_add_gateway | add | +| l_rtnl_route6_delete_gateway | add | +| l_rtnl_route6_dump | add | +| l_rtnl_route6_extract | add | +| l_rtnl_set_linkmode_and_operstate | add | +| l_rtnl_set_mac | add | +| l_rtnl_set_powered | add | +| l_settings_get_embedded_groups | add | +| l_settings_get_embedded_value | add | +| l_settings_has_embedded_group | add | +| l_strv_append | add | +| l_strv_append_printf | add | +| l_strv_append_vprintf | add | +| l_strv_copy | add | +| l_strv_free | add | +| l_strv_new | add | +| l_time_now | add | +| l_timeout_set_callback | add | +| l_tls_prf_get_bytes | add | +| l_tls_set_debug | add | +| l_tls_set_domain_mask | add | +| l_tls_set_version_range | add | +| l_tls_start | add | +| l_uintset_find_unused | add | +| l_uintset_foreach | add | +| l_uintset_intersect | add | +| l_uintset_isempty | add | +| l_utf8_from_ucs2be | add | +| l_utf8_from_wchar | add | +| l_utf8_to_ucs2be | add | +| l_util_hexstring_upper | add | +| l_uuid_from_string | add | +| l_uuid_v4 | add | + +## libgusb + +For details, see [libgusb](./LTS_to_SP2_changed_abi_detail/libgusb_all_result.md\) + +| function | type | +|:---- |:-- | +| g_usb_interface_get_type | remove | +| g_usb_source_set_callback | remove | +| g_usb_device_get_spec | add | +| g_usb_endpoint_get_address | add | +| g_usb_endpoint_get_direction | add | +| g_usb_endpoint_get_extra | add | +| g_usb_endpoint_get_kind | add | +| g_usb_endpoint_get_maximum_packet_size | add | +| g_usb_endpoint_get_number | add | +| g_usb_endpoint_get_polling_interval | add | +| g_usb_endpoint_get_refresh | add | +| g_usb_endpoint_get_synch_address | add | +| g_usb_endpoint_get_type | add | +| g_usb_interface_get_endpoints | add | +| g_usb_version_string | add | +| g_usb_device_get_interface | change | + +## libical + +For details, see [libical](./LTS_to_SP2_changed_abi_detail/libical_all_result.md\) + +| function | type | +|:---- |:-- | +| icalproperty_get_datetime_with_component | add | +| icaltimezone_truncate_vtimezone | add | +| icalattach_new_from_data | change | +| i_cal_array_append | remove | +| i_cal_array_element_at | remove | +| i_cal_array_new | remove | +| i_cal_component_as_ical_string_r | remove | +| i_cal_component_new_clone | remove | +| i_cal_component_string_to_kind | remove | +| i_cal_datetimeperiod_type_get_period | remove | +| i_cal_datetimeperiod_type_get_time | remove | +| i_cal_datetimeperiod_type_get_type | remove | +| i_cal_datetimeperiod_type_set_period | remove | +| i_cal_datetimeperiod_type_set_time | remove | +| i_cal_duration_type_as_ical_string_r | remove | +| i_cal_duration_type_as_int | remove | +| i_cal_duration_type_bad_duration | remove | +| i_cal_duration_type_from_int | remove | +| i_cal_duration_type_from_string | remove | +| i_cal_duration_type_get_days | remove | +| i_cal_duration_type_get_hours | remove | +| i_cal_duration_type_get_minutes | remove | +| i_cal_duration_type_get_seconds | remove | +| i_cal_duration_type_get_type | remove | +| i_cal_duration_type_get_weeks | remove | +| i_cal_duration_type_is_bad_duration | remove | +| i_cal_duration_type_is_neg | remove | +| i_cal_duration_type_is_null_duration | remove | +| i_cal_duration_type_null_duration | remove | +| i_cal_duration_type_set_days | remove | +| i_cal_duration_type_set_hours | remove | +| i_cal_duration_type_set_is_neg | remove | +| i_cal_duration_type_set_minutes | remove | +| i_cal_duration_type_set_seconds | remove | +| i_cal_duration_type_set_weeks | remove | +| i_cal_enum_num_to_reqstat | remove | +| i_cal_enum_reqstat_code_r | remove | +| i_cal_enum_reqstat_desc | remove | +| i_cal_enum_reqstat_major | remove | +| i_cal_enum_reqstat_minor | remove | +| i_cal_geo_type_get_lat | remove | +| i_cal_geo_type_get_lon | remove | +| i_cal_geo_type_get_type | remove | +| i_cal_geo_type_new_default | remove | +| i_cal_geo_type_set_lat | remove | +| i_cal_geo_type_set_lon | remove | +| i_cal_langbind_access_array | remove | +| i_cal_langbind_free_array | remove | +| i_cal_langbind_get_first_component | remove | +| i_cal_langbind_get_first_parameter | remove | +| i_cal_langbind_get_first_property | remove | +| i_cal_langbind_get_next_component | remove | +| i_cal_langbind_get_next_parameter | remove | +| i_cal_langbind_get_next_property | remove | +| i_cal_langbind_new_array | remove | +| i_cal_langbind_property_eval_string_r | remove | +| i_cal_langbind_quote_as_ical_r | remove | +| i_cal_langbind_string_to_open_flag | remove | +| i_cal_parameter_as_ical_string_r | remove | +| i_cal_parameter_new_clone | remove | +| i_cal_parameter_string_to_kind | remove | +| i_cal_parser_set_gen_data | remove | +| i_cal_parser_string_line_generator | remove | +| i_cal_period_type_as_ical_string_r | remove | +| i_cal_period_type_from_string | remove | +| i_cal_period_type_get_duration | remove | +| i_cal_period_type_get_end | remove | +| i_cal_period_type_get_start | remove | +| i_cal_period_type_get_type | remove | +| i_cal_period_type_is_null_period | remove | +| i_cal_period_type_is_valid_period | remove | +| i_cal_period_type_null_period | remove | +| i_cal_period_type_set_duration | remove | +| i_cal_period_type_set_end | remove | +| i_cal_period_type_set_start | remove | +| i_cal_property_as_ical_string_r | remove | +| i_cal_property_enum_belongs_to_property | remove | +| i_cal_property_enum_to_string_r | remove | +| i_cal_property_get_parameter_as_string_r | remove | +| i_cal_property_get_property_name_r | remove | +| i_cal_property_get_value_as_string_r | remove | +| i_cal_property_new_clone | remove | +| i_cal_property_string_to_kind | remove | +| i_cal_property_string_to_method | remove | +| i_cal_property_string_to_status | remove | +| i_cal_property_value_kind_to_kind | remove | +| i_cal_recur_freq_to_string | remove | +| i_cal_recur_skip_to_string | remove | +| i_cal_recur_string_to_freq | remove | +| i_cal_recur_string_to_skip | remove | +| i_cal_recur_string_to_weekday | remove | +| i_cal_recur_weekday_to_string | remove | +| i_cal_recurrence_type_as_string_r | remove | +| i_cal_recurrence_type_clear | remove | +| i_cal_recurrence_type_day_day_of_week | remove | +| i_cal_recurrence_type_day_position | remove | +| i_cal_recurrence_type_from_string | remove | +| i_cal_recurrence_type_get_by_day | remove | +| i_cal_recurrence_type_get_by_hour | remove | +| i_cal_recurrence_type_get_by_minute | remove | +| i_cal_recurrence_type_get_by_month | remove | +| i_cal_recurrence_type_get_by_month_day | remove | +| i_cal_recurrence_type_get_by_second | remove | +| i_cal_recurrence_type_get_by_set_pos | remove | +| i_cal_recurrence_type_get_by_week_no | remove | +| i_cal_recurrence_type_get_by_year_day | remove | +| i_cal_recurrence_type_get_count | remove | +| i_cal_recurrence_type_get_freq | remove | +| i_cal_recurrence_type_get_interval | remove | +| i_cal_recurrence_type_get_type | remove | +| i_cal_recurrence_type_get_until | remove | +| i_cal_recurrence_type_get_week_start | remove | +| i_cal_recurrence_type_month_is_leap | remove | +| i_cal_recurrence_type_month_month | remove | +| i_cal_recurrence_type_rscale_is_supported | remove | +| i_cal_recurrence_type_rscale_supported_calendars | remove | +| i_cal_recurrence_type_set_by_day | remove | +| i_cal_recurrence_type_set_by_hour | remove | +| i_cal_recurrence_type_set_by_minute | remove | +| i_cal_recurrence_type_set_by_month | remove | +| i_cal_recurrence_type_set_by_month_day | remove | +| i_cal_recurrence_type_set_by_second | remove | +| i_cal_recurrence_type_set_by_set_pos | remove | +| i_cal_recurrence_type_set_by_week_no | remove | +| i_cal_recurrence_type_set_by_year_day | remove | +| i_cal_recurrence_type_set_count | remove | +| i_cal_recurrence_type_set_freq | remove | +| i_cal_recurrence_type_set_interval | remove | +| i_cal_recurrence_type_set_until | remove | +| i_cal_recurrence_type_set_week_start | remove | +| i_cal_reqstat_type_as_string_r | remove | +| i_cal_reqstat_type_from_string | remove | +| i_cal_reqstat_type_get_code | remove | +| i_cal_reqstat_type_get_debug | remove | +| i_cal_reqstat_type_get_desc | remove | +| i_cal_reqstat_type_get_type | remove | +| i_cal_reqstat_type_set_code | remove | +| i_cal_time_as_ical_string_r | remove | +| i_cal_time_current_time_with_zone | remove | +| i_cal_time_from_day_of_year | remove | +| i_cal_time_from_string | remove | +| i_cal_time_from_timet_with_zone | remove | +| i_cal_time_null_date | remove | +| i_cal_time_null_time | remove | +| i_cal_time_span_is_busy | remove | +| i_cal_time_tiemzone_expand_vtimezone | remove | +| i_cal_time_today | remove | +| i_cal_timetype_get_day | remove | +| i_cal_timetype_get_hour | remove | +| i_cal_timetype_get_minute | remove | +| i_cal_timetype_get_month | remove | +| i_cal_timetype_get_second | remove | +| i_cal_timetype_get_type | remove | +| i_cal_timetype_get_year | remove | +| i_cal_timetype_get_zone | remove | +| i_cal_timetype_is_date | remove | +| i_cal_timetype_is_daylight | remove | +| i_cal_timetype_is_utc | remove | +| i_cal_timetype_new | remove | +| i_cal_timetype_set_day | remove | +| i_cal_timetype_set_hour | remove | +| i_cal_timetype_set_is_date | remove | +| i_cal_timetype_set_is_daylight | remove | +| i_cal_timetype_set_minute | remove | +| i_cal_timetype_set_month | remove | +| i_cal_timetype_set_second | remove | +| i_cal_timetype_set_year | remove | +| i_cal_timezone_convert_time | remove | +| i_cal_timezone_phase_get_comment | remove | +| i_cal_timezone_phase_get_dtstart | remove | +| i_cal_timezone_phase_get_offsetto | remove | +| i_cal_timezone_phase_get_rdate | remove | +| i_cal_timezone_phase_get_rrule | remove | +| i_cal_timezone_phase_get_type | remove | +| i_cal_timezone_phase_get_tzname | remove | +| i_cal_timezone_phase_get_tzoffsetfrom | remove | +| i_cal_timezone_phase_is_stdandard | remove | +| i_cal_timezone_phase_set_dtstart | remove | +| i_cal_timezone_phase_set_is_stdandard | remove | +| i_cal_timezone_phase_set_offsetto | remove | +| i_cal_timezone_phase_set_rdate | remove | +| i_cal_timezone_phase_set_tzoffsetfrom | remove | +| i_cal_timezonetype_get_last_mod | remove | +| i_cal_timezonetype_get_type | remove | +| i_cal_timezonetype_get_tzid | remove | +| i_cal_timezonetype_get_tzurl | remove | +| i_cal_timezonetype_set_last_mod | remove | +| i_cal_trigger_type_from_int | remove | +| i_cal_trigger_type_from_string | remove | +| i_cal_trigger_type_get_duration | remove | +| i_cal_trigger_type_get_time | remove | +| i_cal_trigger_type_get_type | remove | +| i_cal_trigger_type_is_bad_trigger | remove | +| i_cal_trigger_type_is_null_trigger | remove | +| i_cal_trigger_type_set_duration | remove | +| i_cal_trigger_type_set_time | remove | +| i_cal_value_as_ical_string_r | remove | +| i_cal_value_new_clone | remove | +| i_cal_value_string_to_kind | remove | +| i_cal_attach_new_from_bytes | add | +| i_cal_component_as_ical_string | add | +| i_cal_component_clone | add | +| i_cal_component_foreach_recurrence | add | +| i_cal_component_get_parent | add | +| i_cal_component_kind_from_string | add | +| i_cal_component_set_parent | add | +| i_cal_component_take_component | add | +| i_cal_component_take_property | add | +| i_cal_datetimeperiod_get_period | add | +| i_cal_datetimeperiod_get_time | add | +| i_cal_datetimeperiod_get_type | add | +| i_cal_datetimeperiod_new | add | +| i_cal_datetimeperiod_set_period | add | +| i_cal_datetimeperiod_set_time | add | +| i_cal_duration_as_ical_string | add | +| i_cal_duration_as_int | add | +| i_cal_duration_get_days | add | +| i_cal_duration_get_hours | add | +| i_cal_duration_get_minutes | add | +| i_cal_duration_get_seconds | add | +| i_cal_duration_get_type | add | +| i_cal_duration_get_weeks | add | +| i_cal_duration_is_bad_duration | add | +| i_cal_duration_is_neg | add | +| i_cal_duration_is_null_duration | add | +| i_cal_duration_new_bad_duration | add | +| i_cal_duration_new_from_int | add | +| i_cal_duration_new_from_string | add | +| i_cal_duration_new_null_duration | add | +| i_cal_duration_set_days | add | +| i_cal_duration_set_hours | add | +| i_cal_duration_set_is_neg | add | +| i_cal_duration_set_minutes | add | +| i_cal_duration_set_seconds | add | +| i_cal_duration_set_weeks | add | +| i_cal_geo_clone | add | +| i_cal_geo_get_lat | add | +| i_cal_geo_get_lon | add | +| i_cal_geo_get_type | add | +| i_cal_geo_new | add | +| i_cal_geo_set_lat | add | +| i_cal_geo_set_lon | add | +| i_cal_object_free_global_objects | add | +| i_cal_parameter_as_ical_string | add | +| i_cal_parameter_clone | add | +| i_cal_parameter_kind_from_string | add | +| i_cal_period_as_ical_string | add | +| i_cal_period_get_duration | add | +| i_cal_period_get_end | add | +| i_cal_period_get_start | add | +| i_cal_period_get_type | add | +| i_cal_period_is_null_period | add | +| i_cal_period_is_valid_period | add | +| i_cal_period_new_from_string | add | +| i_cal_period_new_null_period | add | +| i_cal_period_set_duration | add | +| i_cal_period_set_end | add | +| i_cal_period_set_start | add | +| i_cal_property_as_ical_string | add | +| i_cal_property_clone | add | +| i_cal_property_enum_to_string | add | +| i_cal_property_get_color | add | +| i_cal_property_get_datetime_with_component | add | +| i_cal_property_get_parameter_as_string | add | +| i_cal_property_get_property_name | add | +| i_cal_property_get_value_as_string | add | +| i_cal_property_kind_from_string | add | +| i_cal_property_kind_has_property | add | +| i_cal_property_method_from_string | add | +| i_cal_property_new_color | add | +| i_cal_property_set_color | add | +| i_cal_property_status_from_string | add | +| i_cal_property_take_parameter | add | +| i_cal_property_take_value | add | +| i_cal_recurrence_clear | add | +| i_cal_recurrence_day_day_of_week | add | +| i_cal_recurrence_day_position | add | +| i_cal_recurrence_frequency_from_string | add | +| i_cal_recurrence_frequency_to_string | add | +| i_cal_recurrence_get_by_day | add | +| i_cal_recurrence_get_by_day_array | add | +| i_cal_recurrence_get_by_hour | add | +| i_cal_recurrence_get_by_hour_array | add | +| i_cal_recurrence_get_by_minute | add | +| i_cal_recurrence_get_by_minute_array | add | +| i_cal_recurrence_get_by_month | add | +| i_cal_recurrence_get_by_month_array | add | +| i_cal_recurrence_get_by_month_day | add | +| i_cal_recurrence_get_by_month_day_array | add | +| i_cal_recurrence_get_by_second | add | +| i_cal_recurrence_get_by_second_array | add | +| i_cal_recurrence_get_by_set_pos | add | +| i_cal_recurrence_get_by_set_pos_array | add | +| i_cal_recurrence_get_by_week_no | add | +| i_cal_recurrence_get_by_week_no_array | add | +| i_cal_recurrence_get_by_year_day | add | +| i_cal_recurrence_get_by_year_day_array | add | +| i_cal_recurrence_get_count | add | +| i_cal_recurrence_get_freq | add | +| i_cal_recurrence_get_interval | add | +| i_cal_recurrence_get_type | add | +| i_cal_recurrence_get_until | add | +| i_cal_recurrence_get_week_start | add | +| i_cal_recurrence_month_is_leap | add | +| i_cal_recurrence_month_month | add | +| i_cal_recurrence_new | add | +| i_cal_recurrence_new_from_string | add | +| i_cal_recurrence_rscale_is_supported | add | +| i_cal_recurrence_rscale_supported_calendars | add | +| i_cal_recurrence_set_by_day | add | +| i_cal_recurrence_set_by_day_array | add | +| i_cal_recurrence_set_by_hour | add | +| i_cal_recurrence_set_by_hour_array | add | +| i_cal_recurrence_set_by_minute | add | +| i_cal_recurrence_set_by_minute_array | add | +| i_cal_recurrence_set_by_month | add | +| i_cal_recurrence_set_by_month_array | add | +| i_cal_recurrence_set_by_month_day | add | +| i_cal_recurrence_set_by_month_day_array | add | +| i_cal_recurrence_set_by_second | add | +| i_cal_recurrence_set_by_second_array | add | +| i_cal_recurrence_set_by_set_pos | add | +| i_cal_recurrence_set_by_set_pos_array | add | +| i_cal_recurrence_set_by_week_no | add | +| i_cal_recurrence_set_by_week_no_array | add | +| i_cal_recurrence_set_by_year_day | add | +| i_cal_recurrence_set_by_year_day_array | add | +| i_cal_recurrence_set_count | add | +| i_cal_recurrence_set_freq | add | +| i_cal_recurrence_set_interval | add | +| i_cal_recurrence_set_until | add | +| i_cal_recurrence_set_week_start | add | +| i_cal_recurrence_skip_from_string | add | +| i_cal_recurrence_skip_to_string | add | +| i_cal_recurrence_to_string | add | +| i_cal_recurrence_weekday_from_string | add | +| i_cal_recurrence_weekday_to_string | add | +| i_cal_reqstat_get_code | add | +| i_cal_reqstat_get_debug | add | +| i_cal_reqstat_get_desc | add | +| i_cal_reqstat_get_type | add | +| i_cal_reqstat_new_from_string | add | +| i_cal_reqstat_set_code | add | +| i_cal_reqstat_to_string | add | +| i_cal_request_status_code | add | +| i_cal_request_status_desc | add | +| i_cal_request_status_from_num | add | +| i_cal_request_status_major | add | +| i_cal_request_status_minor | add | +| i_cal_time_as_ical_string | add | +| i_cal_time_clone | add | +| i_cal_time_convert_timezone | add | +| i_cal_time_convert_to_zone_inplace | add | +| i_cal_time_get_date | add | +| i_cal_time_get_day | add | +| i_cal_time_get_hour | add | +| i_cal_time_get_minute | add | +| i_cal_time_get_month | add | +| i_cal_time_get_second | add | +| i_cal_time_get_time | add | +| i_cal_time_get_type | add | +| i_cal_time_get_year | add | +| i_cal_time_is_daylight | add | +| i_cal_time_new | add | +| i_cal_time_new_current_with_zone | add | +| i_cal_time_new_from_day_of_year | add | +| i_cal_time_new_from_string | add | +| i_cal_time_new_from_timet_with_zone | add | +| i_cal_time_new_null_date | add | +| i_cal_time_new_today | add | +| i_cal_time_normalize_inplace | add | +| i_cal_time_set_date | add | +| i_cal_time_set_day | add | +| i_cal_time_set_hour | add | +| i_cal_time_set_is_date | add | +| i_cal_time_set_is_daylight | add | +| i_cal_time_set_minute | add | +| i_cal_time_set_month | add | +| i_cal_time_set_second | add | +| i_cal_time_set_time | add | +| i_cal_time_set_year | add | +| i_cal_time_span_clone | add | +| i_cal_time_span_get_is_busy | add | +| i_cal_time_span_new_timet | add | +| i_cal_time_timezone_expand_vtimezone | add | +| i_cal_trigger_get_duration | add | +| i_cal_trigger_get_time | add | +| i_cal_trigger_get_type | add | +| i_cal_trigger_is_bad_trigger | add | +| i_cal_trigger_is_null_trigger | add | +| i_cal_trigger_new_from_int | add | +| i_cal_trigger_new_from_string | add | +| i_cal_trigger_set_duration | add | +| i_cal_trigger_set_time | add | +| i_cal_value_as_ical_string | add | +| i_cal_value_clone | add | +| i_cal_value_kind_from_string | add | +| i_cal_value_kind_to_property_kind | add | +| i_cal_attach_get_data | change | +| i_cal_component_get_dtend | change | +| i_cal_component_get_dtstamp | change | +| i_cal_component_get_dtstart | change | +| i_cal_component_get_due | change | +| i_cal_component_get_duration | change | +| i_cal_component_get_recurrenceid | change | +| i_cal_component_set_dtend | change | +| i_cal_component_set_dtstamp | change | +| i_cal_component_set_dtstart | change | +| i_cal_component_set_due | change | +| i_cal_component_set_duration | change | +| i_cal_component_set_recurrenceid | change | +| i_cal_object_construct | change | +| i_cal_parser_get_line | change | +| i_cal_parser_parse | change | +| i_cal_property_get_acknowledged | change | +| i_cal_property_get_completed | change | +| i_cal_property_get_created | change | +| i_cal_property_get_datemax | change | +| i_cal_property_get_datemin | change | +| i_cal_property_get_dtend | change | +| i_cal_property_get_dtstamp | change | +| i_cal_property_get_dtstart | change | +| i_cal_property_get_due | change | +| i_cal_property_get_duration | change | +| i_cal_property_get_estimatedduration | change | +| i_cal_property_get_exdate | change | +| i_cal_property_get_exrule | change | +| i_cal_property_get_freebusy | change | +| i_cal_property_get_geo | change | +| i_cal_property_get_lastmodified | change | +| i_cal_property_get_maxdate | change | +| i_cal_property_get_mindate | change | +| i_cal_property_get_rdate | change | +| i_cal_property_get_recurrenceid | change | +| i_cal_property_get_requeststatus | change | +| i_cal_property_get_rrule | change | +| i_cal_property_get_trigger | change | +| i_cal_property_get_tzuntil | change | +| i_cal_property_new_acknowledged | change | +| i_cal_property_new_completed | change | +| i_cal_property_new_created | change | +| i_cal_property_new_datemax | change | +| i_cal_property_new_datemin | change | +| i_cal_property_new_dtend | change | +| i_cal_property_new_dtstamp | change | +| i_cal_property_new_dtstart | change | +| i_cal_property_new_due | change | +| i_cal_property_new_duration | change | +| i_cal_property_new_estimatedduration | change | +| i_cal_property_new_exdate | change | +| i_cal_property_new_exrule | change | +| i_cal_property_new_freebusy | change | +| i_cal_property_new_geo | change | +| i_cal_property_new_lastmodified | change | +| i_cal_property_new_maxdate | change | +| i_cal_property_new_mindate | change | +| i_cal_property_new_rdate | change | +| i_cal_property_new_recurrenceid | change | +| i_cal_property_new_requeststatus | change | +| i_cal_property_new_rrule | change | +| i_cal_property_new_trigger | change | +| i_cal_property_new_tzuntil | change | +| i_cal_property_set_acknowledged | change | +| i_cal_property_set_completed | change | +| i_cal_property_set_created | change | +| i_cal_property_set_datemax | change | +| i_cal_property_set_datemin | change | +| i_cal_property_set_dtend | change | +| i_cal_property_set_dtstamp | change | +| i_cal_property_set_dtstart | change | +| i_cal_property_set_due | change | +| i_cal_property_set_duration | change | +| i_cal_property_set_estimatedduration | change | +| i_cal_property_set_exdate | change | +| i_cal_property_set_exrule | change | +| i_cal_property_set_freebusy | change | +| i_cal_property_set_geo | change | +| i_cal_property_set_lastmodified | change | +| i_cal_property_set_maxdate | change | +| i_cal_property_set_mindate | change | +| i_cal_property_set_rdate | change | +| i_cal_property_set_recurrenceid | change | +| i_cal_property_set_requeststatus | change | +| i_cal_property_set_rrule | change | +| i_cal_property_set_trigger | change | +| i_cal_property_set_tzuntil | change | +| i_cal_recur_iterator_new | change | +| i_cal_recur_iterator_next | change | +| i_cal_recur_iterator_set_start | change | +| i_cal_time_add | change | +| i_cal_time_adjust | change | +| i_cal_time_as_timet | change | +| i_cal_time_compare | change | +| i_cal_time_compare_date_only | change | +| i_cal_time_compare_date_only_tz | change | +| i_cal_time_convert_to_zone | change | +| i_cal_time_day_of_week | change | +| i_cal_time_day_of_year | change | +| i_cal_time_normalize | change | +| i_cal_time_span_new | change | +| i_cal_time_start_doy_week | change | +| i_cal_time_subtract | change | +| i_cal_time_week_number | change | +| i_cal_timezone_get_utc_offset | change | +| i_cal_timezone_get_utc_offset_of_utc_time | change | +| i_cal_value_get_date | change | +| i_cal_value_get_datetime | change | +| i_cal_value_get_datetimedate | change | +| i_cal_value_get_datetimeperiod | change | +| i_cal_value_get_duration | change | +| i_cal_value_get_geo | change | +| i_cal_value_get_period | change | +| i_cal_value_get_recur | change | +| i_cal_value_get_requeststatus | change | +| i_cal_value_get_trigger | change | +| i_cal_value_new_date | change | +| i_cal_value_new_datetime | change | +| i_cal_value_new_datetimedate | change | +| i_cal_value_new_datetimeperiod | change | +| i_cal_value_new_duration | change | +| i_cal_value_new_geo | change | +| i_cal_value_new_period | change | +| i_cal_value_new_recur | change | +| i_cal_value_new_requeststatus | change | +| i_cal_value_new_trigger | change | +| i_cal_value_set_date | change | +| i_cal_value_set_datetime | change | +| i_cal_value_set_datetimedate | change | +| i_cal_value_set_datetimeperiod | change | +| i_cal_value_set_duration | change | +| i_cal_value_set_geo | change | +| i_cal_value_set_period | change | +| i_cal_value_set_recur | change | +| i_cal_value_set_requeststatus | change | +| i_cal_value_set_trigger | change | + +## libid3tag + +For details, see [libid3tag](./LTS_to_SP2_changed_abi_detail/libid3tag_all_result.md\) + +| function | type | +|:---- |:-- | +| id3_compat_fixup | add | +| id3_compat_lookup | add | +| id3_frametype_lookup | change | + +## libiscsi + +For details, see [libiscsi](./LTS_to_SP2_changed_abi_detail/libiscsi_all_result.md\) + +| function | type | +|:---- |:-- | +| iscsi_extended_copy_sync | add | +| iscsi_extended_copy_task | add | +| iscsi_receive_copy_results_sync | add | +| iscsi_receive_copy_results_task | add | +| iscsi_compareandwrite_iov_sync | change | + +## libksba + +For details, see [libksba](./LTS_to_SP2_changed_abi_detail/libksba_all_result.md\) + +| function | type | +|:---- |:-- | +| ksba_der_add_bts | add | +| ksba_der_add_der | add | +| ksba_der_add_end | add | +| ksba_der_add_int | add | +| ksba_der_add_oid | add | +| ksba_der_add_ptr | add | +| ksba_der_add_tag | add | +| ksba_der_add_val | add | +| ksba_der_builder_get | add | +| ksba_der_builder_new | add | +| ksba_der_builder_reset | add | +| ksba_der_release | add | +| _ksba_keyinfo_from_sexp | change | + +## libmpc + +For details, see [libmpc](./LTS_to_SP2_changed_abi_detail/libmpc_all_result.md\) + +| function | type | +|:---- |:-- | +| mpc_dot | add | +| mpc_sum | add | + +## libnet + +For details, see [libnet](./LTS_to_SP2_changed_abi_detail/libnet_all_result.md\) + +| function | type | +|:---- |:-- | +| __libnet_print_vers | remove | +| libnet_build_ospfv2_hello_neighbor | add | +| libnet_adv_cull_header | change | + +## libpsl + +For details, see [libpsl](./LTS_to_SP2_changed_abi_detail/libpsl_all_result.md\) + +| function | type | +|:---- |:-- | +| psl_builtin | change | +| psl_free | change | +| psl_is_cookie_domain_acceptable | change | +| psl_is_public_suffix | change | +| psl_is_public_suffix2 | change | +| psl_latest | change | +| psl_load_file | change | +| psl_load_fp | change | +| psl_suffix_count | change | +| psl_suffix_exception_count | change | +| psl_suffix_wildcard_count | change | + +## librepo + +For details, see [librepo](./LTS_to_SP2_changed_abi_detail/librepo_all_result.md\) + +| function | type | +|:---- |:-- | +| ensure_socket_dir_exists | add | + +## libsecret + +For details, see [libsecret](./LTS_to_SP2_changed_abi_detail/libsecret_all_result.md\) + +| function | type | +|:---- |:-- | +| secret_backend_flags_get_type | add | +| secret_backend_get | add | +| secret_backend_get_finish | add | +| secret_backend_get_type | add | +| secret_file_backend_get_type | add | +| secret_file_collection_clear | add | +| secret_file_collection_get_type | add | +| secret_file_collection_replace | add | +| secret_file_collection_search | add | +| secret_file_collection_write | add | +| secret_file_collection_write_finish | add | +| secret_file_item_deserialize | add | +| secret_file_item_get_type | add | +| secret_file_item_serialize | add | +| secret_password_lookup_binary_finish | add | +| secret_password_lookup_binary_sync | add | +| secret_password_lookupv_binary_sync | add | +| secret_password_search | add | +| secret_password_search_finish | add | +| secret_password_search_sync | add | +| secret_password_searchv | add | +| secret_password_searchv_sync | add | +| secret_password_store_binary | add | +| secret_password_store_binary_sync | add | +| secret_password_storev_binary | add | +| secret_password_storev_binary_sync | add | +| secret_retrievable_get_attributes | add | +| secret_retrievable_get_created | add | +| secret_retrievable_get_label | add | +| secret_retrievable_get_modified | add | +| secret_retrievable_get_type | add | +| secret_retrievable_retrieve_secret | add | +| secret_retrievable_retrieve_secret_finish | add | +| secret_retrievable_retrieve_secret_sync | add | +| secret_value_unref_to_password | add | + +## libvma + +For details, see [libvma](./LTS_to_SP2_changed_abi_detail/libvma_all_result.md\) + +| function | type | +|:---- |:-- | +| Floyd_LogCircleInfo | change | +| buffer_pool::find_lkey_by_ib_ctx_thread_safe | change | +| cq_mgr::add_qp_rx | change | +| sockinfo_tcp::accept_clone | change | +| vma_ib_mlx5dv_init_obj | change | + +## libwebsockets + +For details, see [libwebsockets](./LTS_to_SP2_changed_abi_detail/libwebsockets_all_result.md\) + +| function | type | +|:---- |:-- | +| interface_to_sa | remove | +| lws_alloc_vfs_file | remove | +| lws_client_connect | remove | +| lws_client_connect_extended | remove | +| lws_context_destroy2 | remove | +| lws_context_init_extensions | remove | +| lws_context_init_server_ssl | remove | +| lws_ext_parse_options | remove | +| lws_extension_callback_pm_deflate | remove | +| lws_plat_change_pollfd | remove | +| lws_plat_check_connection_error | remove | +| lws_plat_context_early_destroy | remove | +| lws_plat_context_early_init | remove | +| lws_plat_context_late_destroy | remove | +| lws_plat_delete_socket_from_fds | remove | +| lws_plat_drop_app_privileges | remove | +| lws_plat_inet_ntop | remove | +| lws_plat_inet_pton | remove | +| lws_plat_init | remove | +| lws_plat_insert_socket_into_fds | remove | +| lws_plat_service | remove | +| lws_plat_service_periodic | remove | +| lws_plat_set_socket_options | remove | +| lws_poll_listen_fd | remove | +| lws_read | remove | +| lws_server_get_canonical_hostname | remove | +| lws_server_socket_service | remove | +| lws_server_socket_service_ssl | remove | +| lws_set_parent_carries_io | remove | +| lws_ssl_capable_read | remove | +| lws_ssl_capable_read_no_ssl | remove | +| lws_ssl_capable_write | remove | +| lws_ssl_capable_write_no_ssl | remove | +| lws_ssl_close | remove | +| lws_ssl_destroy | remove | +| lws_ssl_pending | remove | +| lws_ssl_pending_no_ssl | remove | +| lws_union_transition | remove | +| lws_vhost_get | remove | +| __lws_sul_insert | add | +| __lws_sul_service_ripe | add | +| __lws_system_attach | add | +| lejp_change_callback | add | +| lejp_check_path_match | add | +| lejp_construct | add | +| lejp_destruct | add | +| lejp_error_to_string | add | +| lejp_get_wildcard | add | +| lejp_parse | add | +| lejp_parser_pop | add | +| lejp_parser_push | add | +| lws_add_http_common_headers | add | +| lws_adopt_descriptor_vhost_via_info | add | +| lws_b64_decode_state_init | add | +| lws_b64_decode_stateful | add | +| lws_b64_decode_string_len | add | +| lws_b64_encode_string_url | add | +| lws_base64_size | add | +| lws_buflist_append_segment | add | +| lws_buflist_describe | add | +| lws_buflist_destroy_all_segments | add | +| lws_buflist_linear_copy | add | +| lws_buflist_next_segment_len | add | +| lws_buflist_total_len | add | +| lws_buflist_use_segment | add | +| lws_callback_vhost_protocols_vhost | add | +| lws_client_http_multipart | add | +| lws_cmdline_option | add | +| lws_cmdline_option_handle_builtin | add | +| lws_create_adopt_udp | add | +| lws_dir | add | +| lws_diskcache_create | add | +| lws_diskcache_destroy | add | +| lws_diskcache_finalize_name | add | +| lws_diskcache_prepare | add | +| lws_diskcache_query | add | +| lws_diskcache_secs_to_idle | add | +| lws_diskcache_trim | add | +| lws_dll2_add_before | add | +| lws_dll2_add_head | add | +| lws_dll2_add_sorted | add | +| lws_dll2_add_tail | add | +| lws_dll2_clear | add | +| lws_dll2_foreach_safe | add | +| lws_dll2_owner_clear | add | +| lws_dll2_remove | add | +| lws_explicit_bzero | add | +| lws_filename_purify_inplace | add | +| lws_finalize_write_http_header | add | +| lws_fts_close | add | +| lws_fts_create | add | +| lws_fts_destroy | add | +| lws_fts_file_index | add | +| lws_fts_fill | add | +| lws_fts_open | add | +| lws_fts_search | add | +| lws_fts_serialize | add | +| lws_genaes_create | add | +| lws_genaes_crypt | add | +| lws_genaes_destroy | add | +| lws_gencrypto_bits_to_bytes | add | +| lws_gencrypto_jwe_alg_to_definition | add | +| lws_gencrypto_jwe_enc_to_definition | add | +| lws_gencrypto_jws_alg_to_definition | add | +| lws_gencrypto_padded_length | add | +| lws_genec_destroy | add | +| lws_genec_destroy_elements | add | +| lws_genec_dump | add | +| lws_genecdh_compute_shared_secret | add | +| lws_genecdh_create | add | +| lws_genecdh_new_keypair | add | +| lws_genecdh_set_key | add | +| lws_genecdsa_create | add | +| lws_genecdsa_hash_sig_verify_jws | add | +| lws_genecdsa_hash_sign_jws | add | +| lws_genecdsa_new_keypair | add | +| lws_genecdsa_set_key | add | +| lws_genhmac_destroy | add | +| lws_genhmac_init | add | +| lws_genhmac_size | add | +| lws_genhmac_update | add | +| lws_genrsa_create | add | +| lws_genrsa_destroy | add | +| lws_genrsa_destroy_elements | add | +| lws_genrsa_hash_sig_verify | add | +| lws_genrsa_hash_sign | add | +| lws_genrsa_new_keypair | add | +| lws_genrsa_private_decrypt | add | +| lws_genrsa_private_encrypt | add | +| lws_genrsa_public_decrypt | add | +| lws_genrsa_public_encrypt | add | +| lws_get_effective_uid_gid | add | +| lws_get_opaque_user_data | add | +| lws_get_peer_simple_fd | add | +| lws_get_tsi | add | +| lws_get_udp | add | +| lws_get_vhost_by_name | add | +| lws_get_vhost_iface | add | +| lws_get_vhost_listen_port | add | +| lws_get_vhost_name | add | +| lws_get_vhost_port | add | +| lws_get_vhost_user | add | +| lws_h2_client_stream_long_poll_rxonly | add | +| lws_h2_get_peer_txcredit_estimate | add | +| lws_h2_update_peer_txcredit | add | +| lws_hdr_custom_copy | add | +| lws_hdr_custom_length | add | +| lws_hex_to_byte_array | add | +| lws_http_basic_auth_gen | add | +| lws_http_compression_apply | add | +| lws_http_get_uri_and_method | add | +| lws_http_headers_detach | add | +| lws_http_is_redirected_to_get | add | +| lws_http_mark_sse | add | +| lws_humanize | add | +| lws_jose_destroy | add | +| lws_jose_init | add | +| lws_json_purify_len | add | +| lws_jwa_concat_kdf | add | +| lws_jwe_auth_and_decrypt | add | +| lws_jwe_auth_and_decrypt_cbc_hs | add | +| lws_jwe_be64 | add | +| lws_jwe_create_packet | add | +| lws_jwe_destroy | add | +| lws_jwe_encrypt | add | +| lws_jwe_init | add | +| lws_jwe_json_parse | add | +| lws_jwe_parse_jose | add | +| lws_jwe_render_compact | add | +| lws_jwe_render_flattened | add | +| lws_jwk_destroy | add | +| lws_jwk_dump | add | +| lws_jwk_dup_oct | add | +| lws_jwk_export | add | +| lws_jwk_generate | add | +| lws_jwk_import | add | +| lws_jwk_load | add | +| lws_jwk_rfc7638_fingerprint | add | +| lws_jwk_save | add | +| lws_jwk_strdup_meta | add | +| lws_jws_alloc_element | add | +| lws_jws_b64_compact_map | add | +| lws_jws_base64_enc | add | +| lws_jws_compact_decode | add | +| lws_jws_compact_encode | add | +| lws_jws_destroy | add | +| lws_jws_dup_element | add | +| lws_jws_encode_b64_element | add | +| lws_jws_encode_section | add | +| lws_jws_init | add | +| lws_jws_parse_jose | add | +| lws_jws_randomize_element | add | +| lws_jws_sig_confirm | add | +| lws_jws_sig_confirm_compact | add | +| lws_jws_sig_confirm_compact_b64 | add | +| lws_jws_sig_confirm_compact_b64_map | add | +| lws_jws_sig_confirm_json | add | +| lws_jws_sign_from_b64 | add | +| lws_jws_write_compact | add | +| lws_jws_write_flattened_json | add | +| lws_list_ptr_insert | add | +| lws_now_usecs | add | +| lws_open | add | +| lws_parse_numeric_address | add | +| lws_plat_read_file | add | +| lws_plat_recommended_rsa_bits | add | +| lws_plat_write_cert | add | +| lws_plat_write_file | add | +| lws_pvo_get_str | add | +| lws_pvo_search | add | +| lws_raw_transaction_completed | add | +| lws_retry_get_delay_ms | add | +| lws_retry_sul_schedule | add | +| lws_retry_sul_schedule_retry_wsi | add | +| lws_ring_dump | add | +| lws_sa46_compare_ads | add | +| lws_sa46_parse_numeric_address | add | +| lws_sa46_write_numeric_address | add | +| lws_seq_check_wsi | add | +| lws_seq_create | add | +| lws_seq_destroy | add | +| lws_seq_from_user | add | +| lws_seq_get_context | add | +| lws_seq_name | add | +| lws_seq_queue_event | add | +| lws_seq_timeout_us | add | +| lws_seq_us_since_creation | add | +| lws_ser_ru16be | add | +| lws_ser_ru32be | add | +| lws_ser_ru64be | add | +| lws_ser_wu16be | add | +| lws_ser_wu32be | add | +| lws_ser_wu64be | add | +| lws_set_opaque_user_data | add | +| lws_set_socks | add | +| lws_set_timer_usecs | add | +| lws_spa_create_via_info | add | +| lws_state_reg_deregister | add | +| lws_state_reg_notifier | add | +| lws_state_reg_notifier_list | add | +| lws_state_transition | add | +| lws_state_transition_steps | add | +| lws_strexp_expand | add | +| lws_strexp_init | add | +| lws_strexp_reset_out | add | +| lws_strncpy | add | +| lws_sul_schedule | add | +| lws_system_blob_destroy | add | +| lws_system_blob_direct_set | add | +| lws_system_blob_get | add | +| lws_system_blob_get_single_ptr | add | +| lws_system_blob_get_size | add | +| lws_system_blob_heap_append | add | +| lws_system_blob_heap_empty | add | +| lws_system_context_from_system_mgr | add | +| lws_system_get_blob | add | +| lws_system_get_ops | add | +| lws_system_get_state_manager | add | +| lws_threadpool_create | add | +| lws_threadpool_dequeue | add | +| lws_threadpool_destroy | add | +| lws_threadpool_dump | add | +| lws_threadpool_enqueue | add | +| lws_threadpool_finish | add | +| lws_threadpool_task_status_wsi | add | +| lws_threadpool_task_sync | add | +| lws_timed_callback_vh_protocol | add | +| lws_timed_callback_vh_protocol_us | add | +| lws_timingsafe_bcmp | add | +| lws_tls_acme_sni_cert_create | add | +| lws_tls_acme_sni_csr_create | add | +| lws_tls_cert_updated | add | +| lws_tls_client_vhost_extra_cert_mem | add | +| lws_tls_peer_cert_info | add | +| lws_tls_vhost_cert_info | add | +| lws_tokenize | add | +| lws_tokenize_cstr | add | +| lws_tokenize_init | add | +| lws_validity_confirmed | add | +| lws_vbi_decode | add | +| lws_vbi_encode | add | +| lws_write_numeric_address | add | +| lws_wsi_tx_credit | add | +| lws_x509_create | add | +| lws_x509_destroy | add | +| lws_x509_info | add | +| lws_x509_jwk_privkey_pem | add | +| lws_x509_parse_from_pem | add | +| lws_x509_public_to_jwk | add | +| lws_x509_verify | add | +| lwsac_align | add | +| lwsac_cached_file | add | +| lwsac_detach | add | +| lwsac_extend | add | +| lwsac_free | add | +| lwsac_get_next | add | +| lwsac_get_tail_pos | add | +| lwsac_info | add | +| lwsac_reference | add | +| lwsac_scan_extant | add | +| lwsac_sizeof | add | +| lwsac_total_alloc | add | +| lwsac_total_overhead | add | +| lwsac_unreference | add | +| lwsac_use | add | +| lwsac_use_backfill | add | +| lwsac_use_cached_file_detach | add | +| lwsac_use_cached_file_end | add | +| lwsac_use_cached_file_start | add | +| lwsac_use_zero | add | +| lwsl_emit_stderr_notimestamp | add | +| lwsws_get_config_globals | add | +| lwsws_get_config_vhosts | add | +| _lws_plat_service_tsi | change | +| lws_add_http_header_by_token | change | +| lws_adopt_descriptor_vhost | change | +| lws_chunked_html_process | change | +| lws_client_connect_via_info | change | +| lws_client_reset | change | +| lws_create_context | change | +| lws_create_vhost | change | +| lws_genhash_init | change | +| lws_genhash_size | change | +| lws_get_peer_simple | change | +| lws_get_peer_write_allowance | change | +| lws_get_random | change | +| lws_hdr_copy | change | +| lws_init_vhost_client_ssl | change | +| lws_ring_bump_head | change | +| lws_set_timeout | change | +| lws_spa_create | change | +| lws_token_to_string | change | + +## libxslt + +For details, see [libxslt](./LTS_to_SP2_changed_abi_detail/libxslt_all_result.md\) + +| function | type | +|:---- |:-- | +| exsltDateXpathCtxtRegister | change | +| xsltCompMatchClearCache | add | +| xsltParseStylesheetUser | add | +| xslAddCall | change | +| xsltApplyImports | change | +| xsltApplyTemplates | change | +| xsltAttribute | change | +| xsltCallTemplate | change | +| xsltChoose | change | +| xsltComment | change | +| xsltCopy | change | +| xsltCopyOf | change | +| xsltDebug | change | +| xsltDocumentElem | change | +| xsltElement | change | +| xsltForEach | change | +| xsltIf | change | +| xsltNumber | change | +| xsltProcessingInstruction | change | +| xsltSort | change | +| xsltText | change | +| xsltValueOf | change | +| xsltXPathFunctionLookup | change | + +## lm_sensors + +For details, see [lm_sensors](./LTS_to_SP2_changed_abi_detail/lm_sensors_all_result.md\) + +| function | type | +|:---- |:-- | +| None | None | + +## nftables + +For details, see [nftables](./LTS_to_SP2_changed_abi_detail/nftables_all_result.md\) + +| function | type | +|:---- |:-- | +| __memory_allocation_error | remove | +| __netlink_abi_error | remove | +| __netlink_init_error | remove | +| __stmt_binary_error | remove | +| alloc_nft_expr | remove | +| alloc_nftnl_chain | remove | +| alloc_nftnl_rule | remove | +| alloc_nftnl_set | remove | +| alloc_nftnl_table | remove | +| binop_expr_alloc | remove | +| bitmask_expr_to_binops | remove | +| cache_flush | remove | +| cache_release | remove | +| cache_update | remove | +| chain_add_hash | remove | +| chain_alloc | remove | +| chain_free | remove | +| chain_get | remove | +| chain_hookname_lookup | remove | +| chain_lookup | remove | +| chain_policy2str | remove | +| chain_print_plain | remove | +| chain_type_name_lookup | remove | +| cmd_alloc | remove | +| cmd_alloc_obj_ct | remove | +| cmd_evaluate | remove | +| cmd_free | remove | +| compound_expr_add | remove | +| compound_expr_alloc | remove | +| compound_expr_remove | remove | +| concat_expr_alloc | remove | +| concat_type_alloc | remove | +| concat_type_destroy | remove | +| connlimit_stmt_alloc | remove | +| constant_expr_alloc | remove | +| constant_expr_join | remove | +| constant_expr_splice | remove | +| counter_stmt_alloc | remove | +| ct_dir2str | remove | +| ct_expr_alloc | remove | +| ct_expr_update_type | remove | +| ct_label2str | remove | +| ct_label_table_exit | remove | +| ct_label_table_init | remove | +| ct_stmt_alloc | remove | +| data_unit_parse | remove | +| datatype_lookup | remove | +| datatype_lookup_byname | remove | +| datatype_print | remove | +| devgroup_table_exit | remove | +| devgroup_table_init | remove | +| do_command | remove | +| dup_stmt_alloc | remove | +| erec_add_location | remove | +| erec_create | remove | +| erec_destroy | remove | +| erec_print | remove | +| erec_print_list | remove | +| erec_vcreate | remove | +| expr_alloc | remove | +| expr_basetype | remove | +| expr_binary_error | remove | +| expr_clone | remove | +| expr_cmp | remove | +| expr_describe | remove | +| expr_free | remove | +| expr_get | remove | +| expr_print | remove | +| expr_set_type | remove | +| expr_stmt_alloc | remove | +| exthdr_dependency_kill | remove | +| exthdr_expr_alloc | remove | +| exthdr_find_proto | remove | +| exthdr_find_template | remove | +| exthdr_gen_dependency | remove | +| exthdr_init_raw | remove | +| exthdr_stmt_alloc | remove | +| family2str | remove | +| fib_expr_alloc | remove | +| fib_result_str | remove | +| flag_expr_alloc | remove | +| flow_offload_stmt_alloc | remove | +| flowtable_add_hash | remove | +| flowtable_alloc | remove | +| flowtable_free | remove | +| flowtable_get | remove | +| flowtable_print | remove | +| fwd_stmt_alloc | remove | +| get_rate | remove | +| get_set_decompose | remove | +| get_set_intervals | remove | +| get_unit | remove | +| gmp_init | remove | +| handle_free | remove | +| handle_merge | remove | +| hash_expr_alloc | remove | +| hooknum2str | remove | +| iface_cache_release | remove | +| iface_cache_update | remove | +| interval_map_decompose | remove | +| limit_stmt_alloc | remove | +| list_expr_alloc | remove | +| list_expr_sort | remove | +| log_level | remove | +| log_level_parse | remove | +| log_stmt_alloc | remove | +| map_expr_alloc | remove | +| map_stmt_alloc | remove | +| mapping_expr_alloc | remove | +| mark_table_exit | remove | +| mark_table_init | remove | +| markup_alloc | remove | +| markup_free | remove | +| meta_expr_alloc | remove | +| meta_key_parse | remove | +| meta_stmt_alloc | remove | +| meta_stmt_meta_iiftype | remove | +| meter_stmt_alloc | remove | +| mnl_batch_begin | remove | +| mnl_batch_end | remove | +| mnl_batch_init | remove | +| mnl_batch_ready | remove | +| mnl_batch_reset | remove | +| mnl_batch_talk | remove | +| mnl_err_list_free | remove | +| mnl_genid_get | remove | +| mnl_nft_chain_batch_add | remove | +| mnl_nft_chain_batch_del | remove | +| mnl_nft_chain_dump | remove | +| mnl_nft_event_listener | remove | +| mnl_nft_flowtable_batch_add | remove | +| mnl_nft_flowtable_batch_del | remove | +| mnl_nft_flowtable_dump | remove | +| mnl_nft_obj_batch_add | remove | +| mnl_nft_obj_batch_del | remove | +| mnl_nft_obj_dump | remove | +| mnl_nft_rule_batch_add | remove | +| mnl_nft_rule_batch_del | remove | +| mnl_nft_rule_batch_replace | remove | +| mnl_nft_rule_dump | remove | +| mnl_nft_ruleset_dump | remove | +| mnl_nft_set_batch_add | remove | +| mnl_nft_set_batch_del | remove | +| mnl_nft_set_dump | remove | +| mnl_nft_setelem_batch_add | remove | +| mnl_nft_setelem_batch_del | remove | +| mnl_nft_setelem_batch_flush | remove | +| mnl_nft_setelem_get | remove | +| mnl_nft_setelem_get_one | remove | +| mnl_nft_table_batch_add | remove | +| mnl_nft_table_batch_del | remove | +| mnl_nft_table_dump | remove | +| mnl_seqnum_alloc | remove | +| monitor_alloc | remove | +| monitor_free | remove | +| mpz_bitmask | remove | +| mpz_export_data | remove | +| mpz_get_be16 | remove | +| mpz_get_be32 | remove | +| mpz_get_uint16 | remove | +| mpz_get_uint32 | remove | +| mpz_get_uint64 | remove | +| mpz_get_uint8 | remove | +| mpz_import_data | remove | +| mpz_init_bitmask | remove | +| mpz_lshift_ui | remove | +| mpz_prefixmask | remove | +| mpz_rshift_ui | remove | +| mpz_switch_byteorder | remove | +| must_print_eq_op | remove | +| nat_etype2str | remove | +| nat_stmt_alloc | remove | +| netlink_add_chain_batch | remove | +| netlink_add_flowtable | remove | +| netlink_add_obj | remove | +| netlink_add_rule_batch | remove | +| netlink_add_set_batch | remove | +| netlink_add_setelems_batch | remove | +| netlink_add_table_batch | remove | +| netlink_alloc_data | remove | +| netlink_alloc_value | remove | +| netlink_batch_send | remove | +| netlink_close_sock | remove | +| netlink_del_rule_batch | remove | +| netlink_delete_chain_batch | remove | +| netlink_delete_flowtable | remove | +| netlink_delete_obj | remove | +| netlink_delete_set_batch | remove | +| netlink_delete_setelems_batch | remove | +| netlink_delete_table_batch | remove | +| netlink_delinearize_chain | remove | +| netlink_delinearize_obj | remove | +| netlink_delinearize_rule | remove | +| netlink_delinearize_set | remove | +| netlink_delinearize_setelem | remove | +| netlink_delinearize_table | remove | +| netlink_dump_chain | remove | +| netlink_dump_expr | remove | +| netlink_dump_obj | remove | +| netlink_dump_rule | remove | +| netlink_dump_ruleset | remove | +| netlink_dump_set | remove | +| netlink_echo_callback | remove | +| netlink_events_trace_cb | remove | +| netlink_flush_chain | remove | +| netlink_flush_setelems | remove | +| netlink_gen_data | remove | +| netlink_gen_raw_data | remove | +| netlink_genid_get | remove | +| netlink_get_setelem | remove | +| netlink_io_error | remove | +| netlink_linearize_rule | remove | +| netlink_list_chains | remove | +| netlink_list_flowtables | remove | +| netlink_list_objs | remove | +| netlink_list_setelems | remove | +| netlink_list_sets | remove | +| netlink_list_table | remove | +| netlink_list_tables | remove | +| netlink_markup_parse_cb | remove | +| netlink_monitor | remove | +| netlink_open_sock | remove | +| netlink_parse_set_expr | remove | +| netlink_rename_chain_batch | remove | +| netlink_replace_rule_batch | remove | +| netlink_reset_objs | remove | +| netlink_restart | remove | +| nft__create_buffer | remove | +| nft__delete_buffer | remove | +| nft__flush_buffer | remove | +| nft__scan_buffer | remove | +| nft__scan_bytes | remove | +| nft__scan_string | remove | +| nft__switch_to_buffer | remove | +| nft_alloc | remove | +| nft_cmd_expand | remove | +| nft_ctx_output_get_echo | remove | +| nft_ctx_output_get_handle | remove | +| nft_ctx_output_get_ip2name | remove | +| nft_ctx_output_get_json | remove | +| nft_ctx_output_get_numeric | remove | +| nft_ctx_output_get_stateless | remove | +| nft_ctx_output_set_echo | remove | +| nft_ctx_output_set_handle | remove | +| nft_ctx_output_set_ip2name | remove | +| nft_ctx_output_set_json | remove | +| nft_ctx_output_set_numeric | remove | +| nft_ctx_output_set_stateless | remove | +| nft_free | remove | +| nft_get_column | remove | +| nft_get_debug | remove | +| nft_get_extra | remove | +| nft_get_in | remove | +| nft_get_leng | remove | +| nft_get_lineno | remove | +| nft_get_lloc | remove | +| nft_get_lval | remove | +| nft_get_out | remove | +| nft_get_text | remove | +| nft_gmp_print | remove | +| nft_if_indextoname | remove | +| nft_if_nametoindex | remove | +| nft_lex | remove | +| nft_lex_destroy | remove | +| nft_lex_init | remove | +| nft_lex_init_extra | remove | +| nft_parse | remove | +| nft_pop_buffer_state | remove | +| nft_print | remove | +| nft_push_buffer_state | remove | +| nft_realloc | remove | +| nft_restart | remove | +| nft_set_column | remove | +| nft_set_debug | remove | +| nft_set_extra | remove | +| nft_set_in | remove | +| nft_set_lineno | remove | +| nft_set_lloc | remove | +| nft_set_lval | remove | +| nft_set_out | remove | +| notrack_stmt_alloc | remove | +| numgen_expr_alloc | remove | +| obj_add_hash | remove | +| obj_alloc | remove | +| obj_free | remove | +| obj_get | remove | +| obj_lookup | remove | +| obj_print | remove | +| obj_print_plain | remove | +| obj_type_name | remove | +| obj_type_to_cmd | remove | +| objref_stmt_alloc | remove | +| objref_type_name | remove | +| parser_init | remove | +| payload_can_merge | remove | +| payload_dependency_exists | remove | +| payload_dependency_kill | remove | +| payload_dependency_release | remove | +| payload_dependency_reset | remove | +| payload_dependency_store | remove | +| payload_expr_alloc | remove | +| payload_expr_complete | remove | +| payload_expr_expand | remove | +| payload_expr_join | remove | +| payload_expr_trim | remove | +| payload_gen_dependency | remove | +| payload_hdr_field | remove | +| payload_init_raw | remove | +| payload_is_known | remove | +| payload_is_stacked | remove | +| payload_stmt_alloc | remove | +| prefix_expr_alloc | remove | +| proto_ctx_init | remove | +| proto_ctx_update | remove | +| proto_dev_desc | remove | +| proto_dev_type | remove | +| proto_find_num | remove | +| proto_find_upper | remove | +| queue_stmt_alloc | remove | +| quota_stmt_alloc | remove | +| range_expr_alloc | remove | +| range_expr_value_high | remove | +| range_expr_value_low | remove | +| rate_parse | remove | +| rb_erase | remove | +| rb_first | remove | +| rb_insert_color | remove | +| rb_last | remove | +| rb_next | remove | +| rb_prev | remove | +| rb_replace_node | remove | +| realm_table_meta_exit | remove | +| realm_table_meta_init | remove | +| realm_table_rt_exit | remove | +| realm_table_rt_init | remove | +| reject_stmt_alloc | remove | +| relational_expr_alloc | remove | +| relational_expr_pctx_update | remove | +| rt_expr_alloc | remove | +| rt_expr_update_type | remove | +| rt_symbol_table_free | remove | +| rt_symbol_table_init | remove | +| rule_alloc | remove | +| rule_free | remove | +| rule_get | remove | +| rule_lookup | remove | +| rule_postprocess | remove | +| rule_print | remove | +| scanner_destroy | remove | +| scanner_include_file | remove | +| scanner_init | remove | +| scanner_push_buffer | remove | +| scanner_read_file | remove | +| scope_init | remove | +| scope_release | remove | +| set_add_hash | remove | +| set_alloc | remove | +| set_clone | remove | +| set_datatype_alloc | remove | +| set_datatype_destroy | remove | +| set_elem_expr_alloc | remove | +| set_expr_alloc | remove | +| set_free | remove | +| set_get | remove | +| set_lookup | remove | +| set_lookup_global | remove | +| set_policy2str | remove | +| set_print | remove | +| set_print_plain | remove | +| set_ref_expr_alloc | remove | +| set_stmt_alloc | remove | +| set_to_intervals | remove | +| socket_expr_alloc | remove | +| stmt_alloc | remove | +| stmt_evaluate | remove | +| stmt_free | remove | +| stmt_list_free | remove | +| stmt_print | remove | +| symbol_bind | remove | +| symbol_expr_alloc | remove | +| symbol_get | remove | +| symbol_lookup | remove | +| symbol_parse | remove | +| symbol_table_print | remove | +| symbol_unbind | remove | +| symbolic_constant_parse | remove | +| symbolic_constant_print | remove | +| table_add_hash | remove | +| table_alloc | remove | +| table_free | remove | +| table_get | remove | +| table_lookup | remove | +| tcpopt_expr_alloc | remove | +| tcpopt_find_template | remove | +| tcpopt_init_raw | remove | +| time_parse | remove | +| time_print | remove | +| unary_expr_alloc | remove | +| variable_expr_alloc | remove | +| verdict_expr_alloc | remove | +| verdict_stmt_alloc | remove | +| xfree | remove | +| xmalloc | remove | +| xmalloc_array | remove | +| xrealloc | remove | +| xstrdup | remove | +| xstrunescape | remove | +| xt_stmt_alloc | remove | +| xzalloc | remove | +| nft_ctx_output_get_flags | add | +| nft_ctx_output_set_flags | add | +| nft_ctx_add_include_path | change | +| nft_run_cmd_from_buffer | change | + +## openhpi + +For details, see [openhpi](./LTS_to_SP2_changed_abi_detail/openhpi_all_result.md\) + +| function | type | +|:---- |:-- | +| curlerr_to_ov_rest_err | change | + +## OpenIPMI + +For details, see [OpenIPMI](./LTS_to_SP2_changed_abi_detail/OpenIPMI_all_result.md\) + +| function | type | +|:---- |:-- | +| sel_select_intr_sigmask | add | +| sel_setup_forked_process | add | +| sel_select_intr_sigmask | add | +| sel_setup_forked_process | add | +| ipmbserv_handle_data | add | +| ipmbserv_init | add | +| ipmbserv_read_config | add | +| chan_init | change | +| debug_log_raw_msg | change | +| handle_asf | change | +| ra_setup | change | + +## openldap + +For details, see [openldap](./LTS_to_SP2_changed_abi_detail/openldap_all_result.md\) + +| function | type | +|:---- |:-- | +| ldap_abandon | change | +| ldap_int_initialize_global_options | change | +| ldap_int_sasl_config | change | +| ldap_int_tls_destroy | change | +| ldap_abandon | change | +| ldap_int_initialize_global_options | change | +| ldap_int_sasl_config | change | +| ldap_int_tls_destroy | change | + +## pam + +For details, see [pam](./LTS_to_SP2_changed_abi_detail/pam_all_result.md\) + +| function | type | +|:---- |:-- | +| pam_modutil_check_user_in_passwd | add | +| pam_modutil_search_key | add | +| pam_start_confdir | add | +| pam_acct_mgmt | change | +| pam_sm_authenticate | add | +| pam_sm_setcred | add | + +## pkgconf + +For details, see [pkgconf](./LTS_to_SP2_changed_abi_detail/pkgconf_all_result.md\) + +| function | type | +|:---- |:-- | +| pkgconf_client_dir_list_build | change | + +## plymouth + +For details, see [plymouth](./LTS_to_SP2_changed_abi_detail/plymouth_all_result.md\) + +| function | type | +|:---- |:-- | +| ply_text_progress_bar_get_percent_done | remove | +| ply_text_progress_bar_set_percent_done | remove | +| ply_text_step_bar_get_percent_done | remove | +| ply_text_step_bar_set_percent_done | remove | +| ply_text_progress_bar_get_fraction_done | add | +| ply_text_progress_bar_set_fraction_done | add | +| ply_text_step_bar_get_fraction_done | add | +| ply_text_step_bar_set_fraction_done | add | +| ply_renderer_backend_get_interface | change | +| ply_progress_animation_get_percent_done | remove | +| ply_progress_animation_set_percent_done | remove | +| ply_progress_bar_get_percent_done | remove | +| ply_progress_bar_set_percent_done | remove | +| ply_progress_animation_get_fraction_done | add | +| ply_progress_animation_set_fraction_done | add | +| ply_progress_bar_get_fraction_done | add | +| ply_progress_bar_set_fraction_done | add | +| ply_boot_splash_plugin_get_interface | change | + +## readline + +For details, see [readline](./LTS_to_SP2_changed_abi_detail/readline_all_result.md\) + +| function | type | +|:---- |:-- | +| _hs_history_patsearch | add | +| remove_history_range | add | + +## rhash + +For details, see [rhash](./LTS_to_SP2_changed_abi_detail/rhash_all_result.md\) + +| function | type | +|:---- |:-- | +| rhash_torrent_add_file | change | +| rhash_torrent_get_default_piece_length | change | +| rhash_transmit | change | + +## subversion + +For details, see [subversion](./LTS_to_SP2_changed_abi_detail/subversion_all_result.md\) + +| function | type | +|:---- |:-- | +| svn_repos__dump_magic_header_record | add | +| svn_repos__dump_uuid_header_record | add | +| svn_repos__get_dump_editor | add | +| svn_repos_authz_parse2 | add | +| svn_repos_authz_read4 | add | +| svn_authz__parse | change | +| svn_client__copy_foreign | remove | +| svn_client_shelf_get_paths | remove | +| svn_client_shelf_has_changes | remove | +| svn_client_shelve | remove | +| svn_client_shelves_any | remove | +| svn_client_shelves_delete | remove | +| svn_client_shelves_list | remove | +| svn_client_unshelve | remove | +| svn_client__condense_commit_items2 | add | +| svn_client__get_diff_writer_svn | add | +| svn_client__layout_list | add | +| svn_client__repos_to_wc_copy_by_editor | add | +| svn_client__repos_to_wc_copy_internal | add | +| svn_client__shelf_apply | add | +| svn_client__shelf_close | add | +| svn_client__shelf_delete | add | +| svn_client__shelf_delete_newer_versions | add | +| svn_client__shelf_diff | add | +| svn_client__shelf_get_all_versions | add | +| svn_client__shelf_get_log_message | add | +| svn_client__shelf_get_newest_version | add | +| svn_client__shelf_list | add | +| svn_client__shelf_mods_editor | add | +| svn_client__shelf_open_existing | add | +| svn_client__shelf_open_or_create | add | +| svn_client__shelf_paths_changed | add | +| svn_client__shelf_replay | add | +| svn_client__shelf_revprop_get | add | +| svn_client__shelf_revprop_list | add | +| svn_client__shelf_revprop_set | add | +| svn_client__shelf_revprop_set_all | add | +| svn_client__shelf_save_new_version3 | add | +| svn_client__shelf_set_log_message | add | +| svn_client__shelf_test_apply_file | add | +| svn_client__shelf_unapply | add | +| svn_client__shelf_version_open | add | +| svn_client__shelf_version_status_walk | add | +| svn_client__wc_copy_mods | add | +| svn_client__wc_editor | add | +| svn_client__wc_editor_internal | add | +| svn_client__wc_replay | add | +| svn_client_blame6 | add | +| svn_client_conflict_option_get_moved_to_abspath_candidates2 | add | +| svn_client_conflict_option_get_moved_to_repos_relpath_candidates2 | add | +| svn_client_conflict_option_set_moved_to_abspath2 | add | +| svn_client_conflict_option_set_moved_to_repos_relpath2 | add | +| svn_client_diff7 | add | +| svn_client_diff_peg7 | add | +| svn_client_revert4 | add | +| svn_client__arbitrary_nodes_diff | change | +| svn_diff_hunk__create_adds_single_line | change | +| svn_relpath__internal_style | remove | +| svn_dirent_canonicalize_safe | add | +| svn_dirent_internal_style_safe | add | +| svn_opt_get_canonical_subcommand3 | add | +| svn_opt_get_option_from_code3 | add | +| svn_opt_print_generic_help3 | add | +| svn_opt_print_help5 | add | +| svn_opt_subcommand_help4 | add | +| svn_opt_subcommand_takes_option4 | add | +| svn_relpath__make_internal | add | +| svn_relpath_canonicalize_safe | add | +| svn_uri_canonicalize_safe | add | +| svn_delta_path_driver3 | add | +| svn_delta_path_driver_finish | add | +| svn_delta_path_driver_start | add | +| svn_delta_path_driver_step | add | +| svn_element__tree_set | change | +| svn_wc__find_repos_node_in_wc | remove | +| svn_wc__get_shelves_dir | remove | +| svn_wc__db_find_copies_of_repos_path | add | +| svn_wc__db_find_repos_node_in_wc | add | +| svn_wc__db_find_working_nodes_with_basename | add | +| svn_wc__find_copies_of_repos_path | add | +| svn_wc__find_working_nodes_with_basename | add | +| svn_wc__get_experimental_dir | add | +| svn_wc_revert6 | add | +| svn_wc__conflict_read_tree_conflict | change | +| svn_wc__conflict_skel_add_tree_conflict | change | +| svn_wc__diff7 | change | + +## tcl + +For details, see [tcl](./LTS_to_SP2_changed_abi_detail/tcl_all_result.md\) + +| function | type | +|:---- |:-- | +| TclOODefineMixinObjCmd | remove | +| TclSkipUnlink | remove | +| Tcl_EncodingObjCmd | remove | +| TclpUnloadFile | remove | +| TclBN_mp_balance_mul | add | +| TclBN_mp_expt_d_ex | add | +| TclBN_mp_set_ull | add | +| TclBN_mp_signed_rsh | add | +| TclBN_mp_to_radix | add | +| TclBN_mp_to_ubin | add | +| TclAddLiteralObj | change | +| TclBN_mp_unsigned_bin_size | change | + +## xorg-x11-server + +For details, see [xorg-x11-server](./LTS_to_SP2_changed_abi_detail/xorg-x11-server_all_result.md\) + +| function | type | +|:---- |:-- | +| glamor_clear_pixmap | add | +| glamor_egl_get_driver_name | add | + +## zstd + +For details, see [zstd](./LTS_to_SP2_changed_abi_detail/zstd_all_result.md\) + +| function | type | +|:---- |:-- | +| ZSTDMT_compressCCtx | remove | +| ZSTDMT_compressStream | remove | +| ZSTDMT_compressStream_generic | remove | +| ZSTDMT_compress_advanced | remove | +| ZSTDMT_createCCtx | remove | +| ZSTDMT_createCCtx_advanced | remove | +| ZSTDMT_endStream | remove | +| ZSTDMT_flushStream | remove | +| ZSTDMT_freeCCtx | remove | +| ZSTDMT_getMTCtxParameter | remove | +| ZSTDMT_initCStream | remove | +| ZSTDMT_initCStream_advanced | remove | +| ZSTDMT_initCStream_usingCDict | remove | +| ZSTDMT_resetCStream | remove | +| ZSTDMT_setMTCtxParameter | remove | +| ZSTDMT_sizeof_CCtx | remove | +| ZSTD_CCtxParam_getParameter | remove | +| ZSTD_CCtxParam_setParameter | remove | +| ZSTD_CCtx_resetParameters | remove | +| ZSTD_compress_generic | remove | +| ZSTD_compress_generic_simpleArgs | remove | +| ZSTD_decompress_generic | remove | +| ZSTD_decompress_generic_simpleArgs | remove | +| ZSTD_setDStreamParameter | remove | + diff --git a/content/en/docs/Releasenotes/introduction.md b/docs/en/docs/Releasenotes/introduction.md similarity index 100% rename from content/en/docs/Releasenotes/introduction.md rename to docs/en/docs/Releasenotes/introduction.md diff --git a/docs/en/docs/Releasenotes/key-features.md b/docs/en/docs/Releasenotes/key-features.md new file mode 100644 index 0000000000000000000000000000000000000000..03283ae39da074b0f802fb37005f676e3548ca84 --- /dev/null +++ b/docs/en/docs/Releasenotes/key-features.md @@ -0,0 +1,44 @@ +# Key Features + +## Hierarchical Memory Expansion + +Supports unified management of multiple types of memory and storage media as well as smooth expansion of the system capacity. For services that are sensitive to memory and have obvious internal hot access, the memory cost is significantly reduced with the same performance. + +- **Hot and cold page identification**. The busy/idle status statistics mechanism of the kernel-mode memory page can accurately identify the cold and hot distribution of process memory page accesses. +- **Configurable elimination policies**. A configuration interface is provided to customize the cold and hot tiering policies for memory pages. +- **Smooth expansion**. Cold pages are automatically swapped out to the extended memory. The software deployed on the cold pages can run properly without changing or adapting the programming mode. +- **Multi-media expansion**. Multiple media such as SCM, XL flash, and NVMe SSD can be used as the extended memory. The cold and hot memory tiering solution is specified based on the access speed of the media to expand the memory and reduce performance loss. + +## Enhanced Virtualization Function and Maintainability + +The live migration Pro capability is extended to improve the maintainability and testability. + +- **Live migration Pro feature**. multifd is enhanced to support TLS, ensuring data security during migration. Concurrent compression of live migration data is supported, improving migration performance. Statistics on data page access frequency are added for live migration data prediction in advance. +- **Performance debugging tool (vmtop).** You can dynamically view the resource usage of VMs in real time, including the CPU usage and memory usage. The x86\_64 architecture is supported. +- **I/O suspension**. I/O suspension is supported so that automatic retry is performed by default in case an I/O error occurs. If the retry times out, an alarm is reported. + +## Lightweight Virtual Runtime (StratoVirt) + +Elastic memory, huge page, and system call filtering are added to enhance the performance and stability of the I/O subsystem. + +- **Elastic memory**. The memory can be allocated and reclaimed based on the memory requirements of the workload. The memory reclamation speed of virtio-balloon can reach 3 GB/s. +- **Huge page**. Huge page in the lightweight framework provides continuous physical memory pages for lightweight VMs, improving VM memory access efficiency. +- **System call filtering**. The device model has been simplified and system call filtering is supported. In the simplest configuration, only 35 system calls are required, effectively reducing the system attack surface. +- **Enhanced I/O subsystem**. Multi-channel concurrent I/O capability is supported and the performance is improved. The I/O-QoS capability improves the flexibility and stability of VM I/O traffic management. + +## secGear Confidential Computing Programming Framework + +The secGear unified confidential computing programming framework provides easy-to-use development kits, including lifecycle management, secure development library, auxiliary code generation tool, code building and signature tool, security capability, and security service component implementation solution in the security zone. Programming with secGear differentiates the system into secure and non-secure zones. It can be used in various scenarios, such as trust cycle, cryptographic databases, multi-party computing, and AI security protection. + +- The **service layer** provides complete security services running on the security side. +- The **middleware layer** provides a set of protocol interfaces to meet basic security requirements. +- The **basic layer** provides various enclave development interfaces or tools and supports C POSIX APIs and standard OpenSSL APIs on the security side. Users can freely develop secure applications based using those APIs. + +## Supporting OpenStack Queens/Rocky + +OpenStack is a simple, scalable, rich, and standard cloud management operating system. For details about more features, see OpenStack Queens/Rocky release notes. You can download software packages from [oepkg](https://repo.oepkgs.net/openEuler/rpm/openEuler-20.03-LTS-SP2/budding-openeuler/openstack/). + +- **Integrated OpenStack Queens/Rocky**, which enables the IaaS solution. +- **Enhanced block storage.** Advanced functions such as capacity expansion, snapshots, and VM image cloning are supported. +- **Container-based deployment and network capabilities**. Better integration with containers is achieved. +- **Extended services**. Extended services such as control panel management, bare metal server deployment, and cloud resource tracing are supported. diff --git a/docs/en/docs/Releasenotes/known-issues.md b/docs/en/docs/Releasenotes/known-issues.md new file mode 100644 index 0000000000000000000000000000000000000000..d4b16d5b3ef6a33c93a4f921173e995578d35a2a --- /dev/null +++ b/docs/en/docs/Releasenotes/known-issues.md @@ -0,0 +1,8 @@ +# Known Issues + +| Issue | Symptom| +|:----------|:----------| +| [I3RA9K](https://gitee.com/openeuler/kernel/issues/I3RA9K)| \[20.03-LTS-SP2] The message log of the ARM physical machine contains "usbhid: probe of 1-1.1:1.1 failed with error -32". | +| [I3QYSQ](https://gitee.com/src-openeuler/nfs-utils/issues/I3QYSQ)| \[20.03-LTS-SP2]\[x86/ARM] After the nfs-blkmap is started, the error message "Can't open PID file" is displayed. After it is closed, the status changes to "failed". | +| [I3UNYX](https://gitee.com/src-openeuler/booth/issues/I3UNYX)| \[20.03-LTS-SP2] \[ARM/x86] The booth-arbitrator.service and booth@.service fail to be started.| + diff --git a/content/en/docs/Releasenotes/public_sys-resources/icon-caution.gif b/docs/en/docs/Releasenotes/public_sys-resources/icon-caution.gif similarity index 100% rename from content/en/docs/Releasenotes/public_sys-resources/icon-caution.gif rename to docs/en/docs/Releasenotes/public_sys-resources/icon-caution.gif diff --git a/content/en/docs/Releasenotes/public_sys-resources/icon-danger.gif b/docs/en/docs/Releasenotes/public_sys-resources/icon-danger.gif similarity index 100% rename from content/en/docs/Releasenotes/public_sys-resources/icon-danger.gif rename to docs/en/docs/Releasenotes/public_sys-resources/icon-danger.gif diff --git a/content/en/docs/Releasenotes/public_sys-resources/icon-note.gif b/docs/en/docs/Releasenotes/public_sys-resources/icon-note.gif similarity index 100% rename from content/en/docs/Releasenotes/public_sys-resources/icon-note.gif rename to docs/en/docs/Releasenotes/public_sys-resources/icon-note.gif diff --git a/content/en/docs/Releasenotes/public_sys-resources/icon-notice.gif b/docs/en/docs/Releasenotes/public_sys-resources/icon-notice.gif similarity index 100% rename from content/en/docs/Releasenotes/public_sys-resources/icon-notice.gif rename to docs/en/docs/Releasenotes/public_sys-resources/icon-notice.gif diff --git a/content/en/docs/Releasenotes/public_sys-resources/icon-tip.gif b/docs/en/docs/Releasenotes/public_sys-resources/icon-tip.gif similarity index 100% rename from content/en/docs/Releasenotes/public_sys-resources/icon-tip.gif rename to docs/en/docs/Releasenotes/public_sys-resources/icon-tip.gif diff --git a/content/en/docs/Releasenotes/public_sys-resources/icon-warning.gif b/docs/en/docs/Releasenotes/public_sys-resources/icon-warning.gif similarity index 100% rename from content/en/docs/Releasenotes/public_sys-resources/icon-warning.gif rename to docs/en/docs/Releasenotes/public_sys-resources/icon-warning.gif diff --git a/docs/en/docs/Releasenotes/release_notes.md b/docs/en/docs/Releasenotes/release_notes.md new file mode 100644 index 0000000000000000000000000000000000000000..f733bd8b2ecdc7b697d66739c3f387d93345c5c5 --- /dev/null +++ b/docs/en/docs/Releasenotes/release_notes.md @@ -0,0 +1 @@ +This document is the release notes for the openEuler 20.03 LTS SP2 release version. \ No newline at end of file diff --git a/docs/en/docs/Releasenotes/resolved-issues.md b/docs/en/docs/Releasenotes/resolved-issues.md new file mode 100644 index 0000000000000000000000000000000000000000..9925950802e35324375bc1eb9596bc3917c219e1 --- /dev/null +++ b/docs/en/docs/Releasenotes/resolved-issues.md @@ -0,0 +1,120 @@ +# Resolved Issues + +For details about the resolved issues, see [Table 1](#table249714911433). + +Table 1 Resolved issues + +| Issue | Symptom| +|:----------|:----------| +| [I3QD69](https://gitee.com/open_euler/dashboard?issue_id=I3QD69)| \[SP2] The rsyslog service fails to be started.| +| [I3QV3H](https://gitee.com/open_euler/dashboard?issue_id=I3QV3H)| "Error: GPG check FAILED" is displayed when a package is installed in SP2 Yum.| +| [I3QU13](https://gitee.com/open_euler/dashboard?issue_id=I3QU13)| \[openEuler 20.03 LTS SP2] The released dvd.iso does not contain StratoVirt and features.| +| [I3QUDM](https://gitee.com/open_euler/dashboard?issue_id=I3QUDM)| \[SP2] Docker Engine of LTS conflicts with the Docker Proxy of SP2 after Docker Engine of SP2 is downgraded to LTS.| +| [I3QS0T](https://gitee.com/open_euler/dashboard?issue_id=I3QS0T)| \[SP2] Nginx conflicts with nginx-help and mailcap during the upgrade from LTS to SP2.| +| [I3R7HH](https://gitee.com/open_euler/dashboard?issue_id=I3R7HH)| \[LTS-SP2] \[ARM/x86] **pam\_userdb.so** is missing and the client fails to log in to the FTP server when a virtual user connects to the FTP server to perform upload and download operations. | +| [I3QRRK](https://gitee.com/open_euler/dashboard?issue_id=I3QRRK)| \[LTS-SP2] \[ARM/x86] The client fails to access the Memcached after the Memcached + SASL authentication is added.| +| [I3QRUC](https://gitee.com/open_euler/dashboard?issue_id=I3QRUC)| \[SP2] \[ARM/x86] The postfix does not support the hash dictionary type. As a result, Python fails to send emails.| +| [I3R643](https://gitee.com/open_euler/dashboard?issue_id=I3R643)| \[20.03-LTS-SP2] After the lxcfs service is started on an x86/ARM-based server and the lxcfs and lxcfs-tools packages are uninstalled and installed, an error is reported during the installation. | +| [I3QMSN](https://gitee.com/open_euler/dashboard?issue_id=I3QMSN)| \[20.03-LTS-SP2] When running **doxygen -w rtf rtf-mode** to generate the **rtf-mode** file, the return value is **1**.| +| [I3QQT2](https://gitee.com/open_euler/dashboard?issue_id=I3QQT2)| \[20.03-LTS-SP2]\[x86/ARM] The sendmail and sm-client services fail to be started because the **virtusertable.db** file is missing after the sendmail is installed. | +| [I3QR3P](https://gitee.com/open_euler/dashboard?issue_id=I3QR3P)| \[LTS-SP2] \[ARM/x86] When a command is executed in the SOS package, the system displays a message indicating that no valid plugins were enabled.| +| [I3R83P](https://gitee.com/open_euler/dashboard?issue_id=I3R83P)| \[LTS-SP2] \[ARM/x86] An error is reported when the **pcp-pidstat** command in the **pcp-system-tools** package is executed.| +| [I3R81I](https://gitee.com/open_euler/dashboard?issue_id=I3R81I)| \[LTS-SP2] \[ARM/x86] A syntax error is reported on the **pcp-iostat** command in the **pcp-system-tools** package.| +| [I3QUHN](https://gitee.com/open_euler/dashboard?issue_id=I3QUHN)| \[SP2] The **dnf info** command output shows that the source package of docker-proxy is Docker Proxy.| +| [I3RLZ3](https://gitee.com/open_euler/dashboard?issue_id=I3RLZ3)| \[fuzz] libraw\_cr2\_fuzzer uses undefined variables.| +| [I3QTKC](https://gitee.com/open_euler/dashboard?issue_id=I3QTKC)| \[SP2] The security-tool checks the cron package when checking whether the crontab package is installed.| +| [I3RHNK](https://gitee.com/open_euler/dashboard?issue_id=I3RHNK)| \[fuzz] An error is reported when **clamav\_scanmap\_PE\_fuzzer** is executed.| +| [I3RHNU](https://gitee.com/open_euler/dashboard?issue_id=I3RHNU)| \[fuzz] An error is reported when **libclamav/../libclammspack/mspack/cabd.c** is executed.| +| [I3RHOT](https://gitee.com/open_euler/dashboard?issue_id=I3RHOT)| \[fuzz] An error is reported when **libclamav/upx.c** is executed.| +| [I3QS1P](https://gitee.com/open_euler/dashboard?issue_id=I3QS1P)| \[SP2] An error occurs when the default configuration is checked by **firewall-cmd --check-config**.| +| [I3RHU5](https://gitee.com/open_euler/dashboard?issue_id=I3RHU5)| \[fuzz] Heap overflow occurs.| +| [I3QU6P](https://gitee.com/open_euler/dashboard?issue_id=I3QU6P)| An error is reported by **aide init**.| +| [I3QS8N](https://gitee.com/open_euler/dashboard?issue_id=I3QS8N)| \[20.03-LTS-SP2]\[x86/ARM] When the Nginx is started, the log contains "Failed to parse PID from file /run/nginx.pid". | +| [I3QS1D](https://gitee.com/open_euler/dashboard?issue_id=I3QS1D)| \[20.03-LTS-SP2]\[x86/ARM] An error log is generated when the iscsid service is started. | +| [I3R9NF](https://gitee.com/open_euler/dashboard?issue_id=I3R9NF)| \[20.03-LTS-SP2] The message log of the x86 server occasionally contains the error "crashkernel reservation failed". | +| [I3QOOK](https://gitee.com/open_euler/dashboard?issue_id=I3QOOK)| \[SP2] A message is displayed indicating that the package cannot be found during group installation.| +| [I3QQMC](https://gitee.com/open_euler/dashboard?issue_id=I3QQMC)| \[SP2] An error occurs during i40e installation.| +| [I3QQNY](https://gitee.com/open_euler/dashboard?issue_id=I3QQNY)| \[SP2] An error occurs during iavf installation.| +| [I3RCRR](https://gitee.com/open_euler/dashboard?issue_id=I3RCRR)| \[SP2] Fail to use rpmbuild to compile locally.| +| [I3QXKL](https://gitee.com/open_euler/dashboard?issue_id=I3QXKL)| \[20.03-LTS-SP2]\[x86/ARM] After the rdisc is restarted or started, the rdisc status changes to "failed". | +| [I399PO](https://gitee.com/open_euler/dashboard?issue_id=I399PO)| \[fuzz] ABRT on unknown address 0x00000000000d. | +| [I3R1EQ](https://gitee.com/open_euler/dashboard?issue_id=I3R1EQ)| \[20.03-LTS-SP2]\[x86/ARM] The javapackages-tools is not installed when installing the derby. As a result, the derby fails to be started. | +| [I3QOK8](https://gitee.com/open_euler/dashboard?issue_id=I3QOK8)| \[20.03-LTS-SP2]\[ARM] The irqbalance service reports error "Can't open PID file /run/irqbalance.pid".| +| [I3QGUB](https://gitee.com/open_euler/dashboard?issue_id=I3QGUB)| \[20.03-LTS-SP2]\[x86/ARM] systemctl enable isnsd fails to enable unit. | +| [I3RVM7](https://gitee.com/open_euler/dashboard?issue_id=I3RVM7)| The **abrt-cli** command is missing. | +| [I3QN3L](https://gitee.com/open_euler/dashboard?issue_id=I3QN3L)| \[SP2] \[ARM/x86] The radsqlrelay parameter **-x** is invalid.| +| [I3SW4M](https://gitee.com/open_euler/dashboard?issue_id=I3SW4M)| \[20.03-LTS-SP2] When installing the daily build versions 2021-05-24 on ARM/x86, the login page cannot be displayed after reboot.| +| [I3SAR7](https://gitee.com/open_euler/dashboard?issue_id=I3SAR7)| \[SP2] Some packages of SP2 are earlier than those of SP1.| +| [I3RPU3](https://gitee.com/open_euler/dashboard?issue_id=I3RPU3)| Core dump occurs when rpm is upgraded before rpm-libs from SP1. | +| [I3RS4X](https://gitee.com/open_euler/dashboard?issue_id=I3RS4X)| When the RPM is upgraded from 4.15.1-23 to 4.15.1-24, the software package does not have a signature when the **yum install** command is used.| +| [I3T70D](https://gitee.com/open_euler/dashboard?issue_id=I3T70D)| \[20.03-LTS-SP2] An error is reported when the **obsworker**, **obsscheduler**, and **obs\_productconvert** commands in the **obs-server** package are executed.| +| [I3S4GT](https://gitee.com/open_euler/dashboard?issue_id=I3S4GT)| \[20.03-LTS-SP2] After the long-term stability test case is executed on the ARM physical machine, the memory allocation is insufficient and no command can be executed. After the long-term stability test case is executed after the reboot, a core file is generated.| +| [I3T8FY](https://gitee.com/open_euler/dashboard?issue_id=I3T8FY)| \[SP2] GlusterFS fails to synchronize data using Geo-replication.| +| [I3S3QH](https://gitee.com/open_euler/dashboard?issue_id=I3S3QH)| \[SP2] The acpi\_cpufreq driver fails to be loaded to the x86 physical machine, but no error is reported.| +| [I3SUIH](https://gitee.com/open_euler/dashboard?issue_id=I3SUIH)| \[SP2] After Flink is started, the web UI of Flink cannot be used.| +| [I3SUXB](https://gitee.com/open_euler/dashboard?issue_id=I3SUXB)| \[SP2] Fail to use rpmbuild to compile locally.| +| [I3SQQY](https://gitee.com/open_euler/dashboard?issue_id=I3SQQY)| \[SP2] Fail to use rpmbuild to compile locally.| +| [I3SSY4](https://gitee.com/open_euler/dashboard?issue_id=I3SSY4)| \[SP2] Fail to use rpmbuild to compile locally.| +| [I3SY5Q](https://gitee.com/open_euler/dashboard?issue_id=I3SY5Q)| In the trustzone architecture, a segment error is reported after being destroyed.| +| [I3SMWM](https://gitee.com/open_euler/dashboard?issue_id=I3SMWM)| In the trustzone architecture, encryption and decryption are interrupted and a segment error occurs.| +| [I3SBMJ](https://gitee.com/open_euler/dashboard?issue_id=I3SBMJ)| \[20.03-LTS-SP2]\[x86/ARM] When the size of an **LVM Thin Provisioning** customized partition exceeds the drive size, the page keeps being loaded and cannot be operated. | +| [I3STJ2](https://gitee.com/open_euler/dashboard?issue_id=I3STJ2)| In the trustzone architecture, the same error is reported when the **-c** or **-m** parameter is missing. Rectification is recommended.| +| [I2E7OB](https://gitee.com/open_euler/dashboard?issue_id=I2E7OB)| \[20.03 LTS SP2] abrt cannot query crash records.| +| [I3U2X9](https://gitee.com/open_euler/dashboard?issue_id=I3U2X9)| \[20.03-LTS-SP2] When fakeroot is downgraded from 1.25. 2-1 of SP2 to 1.23-2, the fakeroot of the earlier version conflicts with the fakeroot-libs of SP2.| +| [I3UPWH](https://gitee.com/open_euler/dashboard?issue_id=I3UPWH)| \[20.03-LTS-SP2] \[ARM/x86] Fail to start the drbd.service.| +| [I3TTIL](https://gitee.com/open_euler/dashboard?issue_id=I3TTIL)| \[21.03-SP2] etcd fails to be started on an ARM server.| +| [I3UOTO](https://gitee.com/open_euler/dashboard?issue_id=I3UOTO)| \[20.03-LTS-SP2] \[ARM/x86] Fail to start the kubelet.service and kube-apiserver.service.| +| [I3UPTK](https://gitee.com/open_euler/dashboard?issue_id=I3UPTK)| \[20.03-LTS-SP2] \[ARM/x86] The pacemaker.service and crm\_mon.service fail to be started.| +| [I3UPWR](https://gitee.com/open_euler/dashboard?issue_id=I3UPWR)| \[20.03-LTS-SP2] \[ARM/x86] Fail to start the etcd.service.| +| [I3UPUC](https://gitee.com/open_euler/dashboard?issue_id=I3UPUC)| \[20.03-LTS-SP2] \[ARM/x86] The kylin-display-switch.service fails to be started because the dependency python3-evdev is missing.| +| [I3UPUZ](https://gitee.com/open_euler/dashboard?issue_id=I3UPUZ)| \[20.03-LTS-SP2] \[ARM/x86] The bthelper@.service and hciuart.service fail to be started.| +| [I3U6XH](https://gitee.com/open_euler/dashboard?issue_id=I3U6XH)| \[2.03 SP2 RC3] ARM physical machine reports the kernel error "The BMC does not support, but the BMC needs to be fixed". | +| [I3UOL6](https://gitee.com/open_euler/dashboard?issue_id=I3UOL6)| \[20.03-LTS-SP2] \[ARM/x86] The deepin-anything-monitor.service freezes.| +| [I3UOMB](https://gitee.com/open_euler/dashboard?issue_id=I3UOMB)| \[20.03-LTS-SP2] \[ARM/x86] Fail to start the driver-installer.service.| +| [I3U78H](https://gitee.com/open_euler/dashboard?issue_id=I3U78H)| \[20.03-LTS-SP2] \[ARM/x86] The command for setting the global variable of automatic uninstallation upon timeout is successfully executed, but the automatic uninstallation upon timeout does not take effect.| +| [I3UO6K](https://gitee.com/open_euler/dashboard?issue_id=I3UO6K)| \[20.03-LTS-SP2] \[ARM/x86] Fail to start the xfce4-notifyd.service.| +| [I3UNRU](https://gitee.com/open_euler/dashboard?issue_id=I3UNRU)| \[20.03-LTS-SP2] \[ARM/x86] Fail to start the thunar.service.| +| [I3UNT4](https://gitee.com/open_euler/dashboard?issue_id=I3UNT4)| \[20.03-LTS-SP2] \[ARM/x86] Fail to start the bamfdaemon.service.| +| [I3UO4C](https://gitee.com/open_euler/dashboard?issue_id=I3UO4C)| \[20.03-LTS-SP2] \[ARM/x86] Fail to start the redshift.service and redshift-gtk.service.| +| [I3UEJK](https://gitee.com/open_euler/dashboard?issue_id=I3UEJK)| \[SP2] openoffice-lv does not exist in the SP2 version.| +| [I3TO1S](https://gitee.com/open_euler/dashboard?issue_id=I3TO1S)| \[SP2] When a minimum installation is performed on ARM/x86 and the SELinux is enabled, audit logs are displayed on the screen during login.| +| [I3TKE8](https://gitee.com/open_euler/dashboard?issue_id=I3TKE8)| \[SP2] When a minimum installation is performed on ARM/x86 and the SELinux is enabled, message "AVC avc:denied{getattr } for pid=15247 comm="login"" is displayed during login.| +| [I3TGPY](https://gitee.com/open_euler/dashboard?issue_id=I3TGPY)| \[SP2] The SELinux is disabled by default. No documentation is available for enabling the SELinux.| +| [I3UEYP](https://gitee.com/open_euler/dashboard?issue_id=I3UEYP)| \[20.03-LTS-SP2]\[x86/ARM] When the hsqldb service is started, the error message "Could not find or load main class" is displayed. | +| [I3UF35](https://gitee.com/open_euler/dashboard?issue_id=I3UF35)| \[20.03-SP2] \[ARM/x86] Fail to start Hive.| +| [I3UF4T](https://gitee.com/open_euler/dashboard?issue_id=I3UF4T)| \[20.03-SP2] \[ARM/x86] An error indicating that environment variables are invalid is reported when the Hive or HBase shell is started.| +| [I3TS70](https://gitee.com/open_euler/dashboard?issue_id=I3TS70)| \[SP2] No dependency is available for installing the atril-thumbnailer.| +| [I3TTJ3](https://gitee.com/open_euler/dashboard?issue_id=I3TTJ3)| \[SP2] No dependency is available for installing the atril-thumbnailer.| +| [I3TTM2](https://gitee.com/open_euler/dashboard?issue_id=I3TTM2)| \[SP2] No dependency is available for installing the deepin-desktop-server.| +| [I3TUDM](https://gitee.com/open_euler/dashboard?issue_id=I3TUDM)| \[SP2] No dependency is available for installing the kwin-wayland.| +| [I3UEGF](https://gitee.com/open_euler/dashboard?issue_id=I3UEGF)| \[20.03-LTS-SP2]\[x86/ARM] The status of lsyncd is "failed" after the being stopped. | +| [I3U9CR](https://gitee.com/open_euler/dashboard?issue_id=I3U9CR)| When the type and flag of the cc\_enclave\_create API are incorrect, the error type is incorrect.| +| [I3U2BE](https://gitee.com/open_euler/dashboard?issue_id=I3U2BE)| In the trustzone architecture, a segment error is reported when multiple processes load different paths.| +| [I3UWJ5](https://gitee.com/open_euler/dashboard?issue_id=I3UWJ5)| \[20.03-LTS-SP2] In the x86 and ARM architectures, the python-dns package fails to be compiled locally using the rpmbuild.| +| [I3UWN8](https://gitee.com/open_euler/dashboard?issue_id=I3UWN8)| \[20.03-LTS-SP2] In the x86 and ARM architectures, the rdate package fails to be compiled locally using rpmbuild.| +| [I3UWDP](https://gitee.com/open_euler/dashboard?issue_id=I3UWDP)| \[20.03-LTS-SP2] In the x86 architecture, the libcacard package fails to be compiled locally using rpmbuild.| +| [I3UNJE](https://gitee.com/open_euler/dashboard?issue_id=I3UNJE)| \[SP2] When SELinux is enabled, many "SELinux is preventing" blocking messages are reported.| +| [I3UPRP](https://gitee.com/open_euler/dashboard?issue_id=I3UPRP)| \[SP2] The **/boot** and **/boot/efi** partitions cannot be manually added to the customized partition of the RAID drive.| +| [I3UTTB](https://gitee.com/open_euler/dashboard?issue_id=I3UTTB)| \[SP2] "Error in POSTUN scriptlet in rpm package sssd" is reported when the sssd is uninstalled.| +| [I3UR78](https://gitee.com/open_euler/dashboard?issue_id=I3UR78)| \[rasdaemon] When fault isolation detection period is set to **H**/**M**/**S**, the parameter value is not verified.| +| [I3UYZN](https://gitee.com/open_euler/dashboard?issue_id=I3UYZN)| In the x86 version, after the haltpoll capability is enabled on a VM using an XML file, the Redis performance becomes poorer.| +| [I3VZZK](https://gitee.com/open_euler/dashboard?issue_id=I3VZZK)| OpenStack Queens does not contain the python2 mod-wsgi RPM package.| +| [I3VW5G](https://gitee.com/open_euler/dashboard?issue_id=I3VW5G)| Circular reference occurs in evenlet 0.23.0.| +| [I3VW4G](https://gitee.com/open_euler/dashboard?issue_id=I3VW4G)| QEMU 4.1 does not work on OpenStack Q/R.| +| [I3VFYD](https://gitee.com/open_euler/dashboard?issue_id=I3VFYD)| \[20.03-LTS-SP2] The hyphen package fails to be compiled locally using rpmbuild in the x86 architecture.| +| [I3VMFH](https://gitee.com/open_euler/dashboard?issue_id=I3VMFH)| \[SP2] The **gradle-local** command in the x86 javapackages-tools binary package fails to be executed.| +| [I3W01V](https://gitee.com/open_euler/dashboard?issue_id=I3W01V)| An error occurs when Horizon is installed in openEuler 20.03. | +| [I3W009](https://gitee.com/open_euler/dashboard?issue_id=I3W009)| openEuler20.03 fails to install Cinder of OpenStack Rocky.| +| [I3VZCZ](https://gitee.com/open_euler/dashboard?issue_id=I3VZCZ)| The osprofiler that OpenStack Horizon of the Rocky version depends is of an early version.| +| [I3VYN4](https://gitee.com/open_euler/dashboard?issue_id=I3VYN4)| The permission on the Cinder configuration file is incorrect, and a db sync error is reported.| +| [I3VW1L](https://gitee.com/open_euler/dashboard?issue_id=I3VW1L)| The path of the openstack-dashborad configuration file of the Queens version is incorrect.| +| [I3W000](https://gitee.com/open_euler/dashboard?issue_id=I3W000)| Kolla depends on the python-docker service.| +| [I3VZEN](https://gitee.com/open_euler/dashboard?issue_id=I3VZEN)| Services cannot be started because the owner group permission of the glance file is incorrect.| +| [I3VY8G](https://gitee.com/open_euler/dashboard?issue_id=I3VY8G)| Python-ryu ImportError: No module named pip. | +| [I3VW74](https://gitee.com/open_euler/dashboard?issue_id=I3VW74)| Crypto conflicts with PyCryptodome.| +| [I3VW3G](https://gitee.com/open_euler/dashboard?issue_id=I3VW3G)| The structure and naming of the openstack-neutron RPM package of the Queens version do not meet the OpenStack SIG requirements.| +| [I3VQKV](https://gitee.com/open_euler/dashboard?issue_id=I3VQKV)| \[20.03-LTS-SP2]\[x86/ARM] The startup of the hsqldb service depends on the javapackages-tools package. | +| [I3V71K](https://gitee.com/open_euler/dashboard?issue_id=I3V71K)| \[SP2] \[ARM/x86] Four Storm-related services fail to be stopped.| +| [I3VTAX](https://gitee.com/open_euler/dashboard?issue_id=I3VTAX)| The Clevis function is abnormal.| +| [I3VSR5](https://gitee.com/open_euler/dashboard?issue_id=I3VSR5)| \[20.03-LTS-SP2] In the virtualization document, the description about Open vSwitch is incorrect.| + diff --git a/content/en/docs/Releasenotes/source-code.md b/docs/en/docs/Releasenotes/source-code.md similarity index 83% rename from content/en/docs/Releasenotes/source-code.md rename to docs/en/docs/Releasenotes/source-code.md index c6a18531937da2a5a63e5ed41689230f3d068784..74804db9fb8f81927019ef83b6e86de8c98ce126 100644 --- a/content/en/docs/Releasenotes/source-code.md +++ b/docs/en/docs/Releasenotes/source-code.md @@ -5,5 +5,5 @@ openEuler contains two code repositories: - Code repository: [https://gitee.com/openeuler](https://gitee.com/openeuler) - Software package repository: [https://gitee.com/src-openeuler](https://gitee.com/src-openeuler) -The openEuler release packages also provide the source ISO files. For details, see [Installing the OS](installing-the-os.md). +The openEuler release packages also provide the source ISO files. For details, see [Installing the OS](./installing-the-os.md\). diff --git a/content/en/docs/Releasenotes/terms-of-use.md b/docs/en/docs/Releasenotes/terms-of-use.md similarity index 94% rename from content/en/docs/Releasenotes/terms-of-use.md rename to docs/en/docs/Releasenotes/terms-of-use.md index dbbef6358b01550f1c2b03252c9b254e4682b953..328d600158d5e3acf73bba0fea55eb226a041e3e 100644 --- a/content/en/docs/Releasenotes/terms-of-use.md +++ b/docs/en/docs/Releasenotes/terms-of-use.md @@ -1,6 +1,6 @@ # Terms of Use -**Copyright © Huawei Technologies Co., Ltd. 2020. All rights reserved.** +**Copyright © openEuler Community, Ltd. 2021. All rights reserved.** Your replication, use, modification, and distribution of this document are governed by the Creative Commons License Attribution-ShareAlike 4.0 International Public License \(CC BY-SA 4.0\). You can visit [https://creativecommons.org/licenses/by-sa/4.0/](https://creativecommons.org/licenses/by-sa/4.0/) to view a human-readable summary of \(and not a substitute for\) CC BY-SA 4.0. For the complete CC BY-SA 4.0, visit [https://creativecommons.org/licenses/by-sa/4.0/legalcode](https://creativecommons.org/licenses/by-sa/4.0/legalcode). diff --git a/content/en/docs/Releasenotes/user-notice.md b/docs/en/docs/Releasenotes/user-notice.md similarity index 66% rename from content/en/docs/Releasenotes/user-notice.md rename to docs/en/docs/Releasenotes/user-notice.md index aba8b99475bb57ec2abe3ac65d7f22904cd0f9f6..6f07a6391279884bf47fbb1a0b94b9cbfca31f59 100644 --- a/content/en/docs/Releasenotes/user-notice.md +++ b/docs/en/docs/Releasenotes/user-notice.md @@ -1,5 +1,5 @@ # User Notice - The version number counting rule of openEuler is changed from openEuler _x.x_ to openEuler _year_._month_. For example, openEuler 20.03 indicates that the version is released in March 2020. -- The [Python core team](https://www.python.org/dev/peps/pep-0373/#update) has stopped maintaining Python 2 in January 2020. In 2020, openEuler 20.03 LTS fixes only the critical CVE of Python 2 and will reach the end of maintenance \(EOM\) on December 31, 2020. Please switch to Python 3 as soon as possible. +- The [Python core team](https://www.python.org/dev/peps/pep-0373/#update) has stopped maintaining Python 2 in January 2020. In 2020, openEuler 20.03 LTS SP2 fixes only the critical CVE of Python 2 and will reach the end of maintenance \(EOM\) on December 31, 2020. Please switch to Python 3 as soon as possible. diff --git a/docs/en/docs/SecHarden/account-passwords.md b/docs/en/docs/SecHarden/account-passwords.md new file mode 100644 index 0000000000000000000000000000000000000000..356a99935e0af3ca5eea30799d2109307ae2042d --- /dev/null +++ b/docs/en/docs/SecHarden/account-passwords.md @@ -0,0 +1,335 @@ +# Account Passwords + +- [Account Passwords](#account-passwords) + - [Shielding System Accounts](#shielding-system-accounts) + - [Restricting Permissions on the su Command](#restricting-permissions-on-the-su-command) + - [Setting Password Complexity](#setting-password-complexity) + - [Setting the Password Validity Period](#setting-the-password-validity-period) + - [Setting Password Encryption Algorithms](#setting-password-encryption-algorithms) + - [Locking an Account After Three Login Failures](#locking-an-account-after-three-login-failures) + - [Hardening the su Command](#hardening-the-su-command) + +## Shielding System Accounts + +### Description + +Accounts excluding user accounts are system accounts. System accounts cannot be used for logins or performing other operations. Therefore, system accounts must be shielded. + +### Implementation + +Modify the shell of a system account to **/sbin/nologin**. + +``` +usermod -L -s /sbin/nologin $systemaccount +``` + +>![](public_sys-resources/icon-note.gif) **NOTE:** +>_$systemaccount_ indicates the system account. + +## Restricting Permissions on the su Command + +### Description + +The **su** command is used to switch user accounts. To improve system security, only the user **root** and users in the wheel group can use the **su** command. + +### Implementation + +Modify the **/etc/pam.d/su** file as follows: + +``` +auth required pam_wheel.so use_uid +``` + +   + +**Table 1** Configuration item in pam\_wheel.so + + + + + + + + + + +

Item

+

Description

+

use_uid

+

UID of the current account.

+
+ +## Setting Password Complexity + +### Description + +You can set the password complexity requirements by modifying the corresponding configuration file. You are advised to set the password complexity based on the site requirements. + +### Implementation + +The password complexity is implemented by the **pam\_pwquality.so** and **pam\_pwhistory.so** modules in the **/etc/pam.d/password-auth** and **/etc/pam.d/system-auth** files. You can modify the configuration items of the two modules to change the password complexity requirements. + +### Example + +This section provides an example for configuring password complexity. + +**Password Complexity Requirements** + +1. Contains at least eight characters. +2. Contains at least three types of the following characters: + + - At least one lowercase letter + + - At least one uppercase letter + + - At least one digit + + - At least one space or one of the following special characters: \` \~ ! @ \# $ % ^ & \* \( \) - \_ = + \\ | \[ \{ \} \] ; : ' " , < . \> / ? + +3. Cannot be the same as an account or the account in reverse order. +4. Cannot be the last five passwords used. + +**Implementation** + +Add the following content to the **/etc/pam.d/password-auth** and **/etc/pam.d/system-auth** files: + +``` +password requisite pam_pwquality.so minlen=8 minclass=3 enforce_for_root try_first_pass local_users_only retry=3 dcredit=0 ucredit=0 lcredit=0 ocredit=0 +password required pam_pwhistory.so use_authtok remember=5 enforce_for_root +``` + +   + +**Configuration Item Description** + +For details about the configuration items of **pam\_pwquality.so** and **pam\_pwhistory.so**, see [Table 1](#table201221044172117) and [Table 2](#table1212544452120), respectively. + +**Table 1** Configuration items in pam\_pwquality.so + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Item

+

Description

+

minlen=8

+

A password must contain at least eight characters.

+

minclass=3

+

A password must contain at least three of the following types: uppercase letters, lowercase letters, digits, and special characters.

+

ucredit=0

+

A password contains any number of uppercase letters.

+

lcredit=0

+

A password contains any number of lowercase letters.

+

dcredit=0

+

A password contains any number of digits.

+

ocredit=0

+

A password contains any number of special characters.

+

retry=3

+

Each time a maximum of three password changes is allowed.

+

enforce_for_root

+

This configuration is also effective for user root.

+
+ +**Table 2** Configuration items in pam\_pwhistory.so + + + + + + + + + + + + + +

Item

+

Description

+

remember=5

+

A password must be different from the last five passwords used.

+

enforce_for_root

+

This configuration is also effective for user root.

+
+ +## Setting the Password Validity Period + +### Description + +To ensure system security, you are advised to set the password validity period and notify users to change passwords before the passwords expire. + +### Implementation + +The password validity period is set by modifying the **/etc/login.defs** file. [Table 1](#en-us_topic_0152100281_t77b5d0753721450c81911c18b74e82eb) describes the hardening items. All hardening items in the table are in the **/etc/login.defs** file. You can directly modify the items in the configuration file. + +**Table 1** Configuration items in login.defs + + + + + + + + + + + + + + + + + + + + + + + + +

Item

+

Description

+

Suggestion

+

Configured as Suggested

+

PASS_MAX_DAYS

+

Maximum validity period of a password.

+

90

+

No

+

PASS_MIN_DAYS

+

Minimum interval between password changes.

+

0

+

No

+

PASS_WARN_AGE

+

Number of days before the password expires.

+

7

+

No

+
+ +>![](public_sys-resources/icon-note.gif) **NOTE:** +>The **login.defs** file is used to set restrictions on user accounts, such as setting the maximum password validity period and maximum length. The configuration in this file is invalid for the user **root**. If the **/etc/shadow** file contains the same items, the **/etc/shadow** configuration takes precedence over the **/etc/login.defs** configuration. When a user attempts to log in after the password expires, the user will be informed of the password expiry and is required to change the password. If the user does not change the password, the user cannot access the system. + +## Setting Password Encryption Algorithms + +### Description + +For system security, passwords cannot be stored in plaintext in the system and must be encrypted. The passwords that do not need to be restored must be encrypted using irreversible algorithms. Set the password encryption algorithm to SHA-512. This item has been set by default in openEuler. The preceding settings can effectively prevent password disclosure and ensure password security. + +### Implementation + +To set the password encryption algorithm, add the following configuration to the **/etc/pam.d/password-auth** and **/etc/pam.d/system-auth** files: + +``` +password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok +``` + +   + +**Table 1** Configuration items in pam\_unix.so + + + + + + + + + + +

Item

+

Description

+

sha512

+

The SHA-512 algorithm is used for password encryption.

+
+ +## Locking an Account After Three Login Failures + +### Description + +To ensure user system security, you are advised to set the maximum number of incorrect password attempts \(three attempts are recommended\) and the automatic unlocking time \(300 seconds are recommended\) for a locked account. + +If an account is locked, any input is invalid but does not cause the locking timer to recount. Records of the user's invalid inputs are cleared once unlocked. The preceding settings protect passwords from being forcibly cracked and improve system security. + +>![](public_sys-resources/icon-note.gif) **NOTE:** +>By default, the maximum number of incorrect password attempts is 3 in openEuler. After the system is locked, the automatic unlock time is 60 seconds. + +### Implementation + +The password complexity is set by modifying the **/etc/pam.d/password-auth** and **/etc/pam.d/system-auth** files. The maximum number of incorrect password attempts is set to **3**, and the unlocking time after the system is locked is set to **300** seconds. The configuration is as follows: + +``` +auth required pam_faillock.so preauth audit deny=3 even_deny_root unlock_time=300 +auth [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=300 +auth sufficient pam_faillock.so authsucc audit deny=3 even_deny_root unlock_time=300 +``` + +**Table 1** Configuration items in pam\_faillock.so + + + + + + + + + + + + + + + + + + + +

Item

+

Description

+

authfail

+

Captures account login failure events.

+

deny=3

+

A user account will be locked after three login attempts.

+

unlock_time=300

+

A locked common user account is automatically unlocked in 300 seconds.

+

even_deny_root

+

This configuration is also effective for user root.

+
+ +## Hardening the su Command + +### Description + +To enhance system security and prevent the environment variables of the current user from being brought into other environments when you run the **su** command to switch to another user, this item has been configured by default in openEuler. The **PATH** variable is always initialized when the **su** command is used to switch users. + +### Implementation + +Modify the **/etc/login.defs** file. The configuration is as follows: + +``` +ALWAYS_SET_PATH=yes +``` diff --git a/docs/en/docs/SecHarden/appendix.md b/docs/en/docs/SecHarden/appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..2c47d84fc9055ad6390ee0eb7e63cd76f9b6eff3 --- /dev/null +++ b/docs/en/docs/SecHarden/appendix.md @@ -0,0 +1,36 @@ +# Appendix + +This chapter describes the file permissions and **umask** values. + +- [Appendix](#appendix.md) + - [Permissions on Files and Directories](#permissions-on-files-and-directories) + - [umask Values](#umask-values) + + + + + +## Permissions on Files and Directories + +Permission on files and directories in Linux specifies the users who can access and perform operations on files and directories and the access and operation modes. Permissions on files and directories include read only, write only, and execute. + +The following types of users can access files and directories: + +- File creator +- Users in the same group as a file creator +- Users not in the same group as a file creator + +An example of permission on files and directories is described as follows: + +If the permission on **/usr/src** is set to **755** which is 111101101 in binary mode, permissions for each type of users are described as follows: + +- The left-most **111** indicates that the file owner can read, write, and execute the file. +- The middle **101** indicates the group users can read and execute but cannot write the file. +- The right-most **101** indicates that other users can read and execute but cannot write the file. + +## umask Values + +When a user creates a file or directory, the file or directory has a default permission. The default permission is specified by the **umask** value. + +The **umask** value is the complement of the permission value. The actual permission value is obtained by subtracting the **umask** value from the default maximum permission value. The default maximum permission of a file is readable and writable. The default maximum permission of a directory is readable, writable, and executable. The default permission of a file is 666 minus the **umask** value. The default permission of a directory is 777 minus the **umask** value. + diff --git a/docs/en/docs/SecHarden/authentication-and-authorization.md b/docs/en/docs/SecHarden/authentication-and-authorization.md new file mode 100644 index 0000000000000000000000000000000000000000..7f3a14f70f7c47a75bb5dccb43daa733ffc4705c --- /dev/null +++ b/docs/en/docs/SecHarden/authentication-and-authorization.md @@ -0,0 +1,156 @@ +# Authentication and Authorization + +- [Authentication and Authorization](#authentication-and-authorization) + - [Setting a Warning for Remote Network Access](#setting-a-warning-for-remote-network-access) + - [Forestalling Unauthorized System Restart by Holding Down Ctrl, Alt, and Delete](#forestalling-unauthorized-system-restart-by-holding-down-ctrl-alt-and-delete) + - [Setting an Automatic Exit Interval for Shell](#setting-an-automatic-exit-interval-for-shell) + - [Setting the Default umask Value for Users to 0077](#setting-the-default-umask-value-for-users-to-0077) + - [Setting the GRUB2 Encryption Password](#setting-the-grub2-encryption-password) + - [Setting the Secure Single-user Mode](#setting-the-secure-single-user-mode) + - [Disabling Interactive Startup](#disabling-interactive-startup) + + + +## Setting a Warning for Remote Network Access + +### Description + +A warning for remote network access is configured and displayed for users who attempt to remotely log in to the system. The warning indicates the penalty for authorized access and is used to threaten potential attackers. When the warning is displayed, system architecture and other system information are hidden to protect the system from being attacked. + +### Implementation + +This setting can be implemented by modifying the **/etc/issue.net** file. Replace the original content in the **/etc/issue.net** file with the following information \(which has been set by default in openEuler\): + +``` +Authorized users only. All activities may be monitored and reported. +``` + +## Forestalling Unauthorized System Restart by Holding Down Ctrl, Alt, and Delete + +### Description + +By default, you can restart the OS by holding down **Ctrl**, **Alt**, and **Delete**. Disabling this feature can prevent data loss caused by misoperations. + +### Implementation + +To disable the feature of restarting the system by holding down **Ctrl**, **Alt**, and **Delete**, perform the following steps: + +1. Run the following commands to delete the two **ctrl-alt-del.target** files: + + ``` + rm -f /etc/systemd/system/ctrl-alt-del.target + rm -f /usr/lib/systemd/system/ctrl-alt-del.target + ``` + +2. Change **\#CtrlAltDelBurstAction=reboot-force** to **CtrlAltDelBurstAction=none** in the **/etc/systemd/system.conf** file. +3. Run the following command to restart systemd for the modification to take effect: + + ``` + systemctl daemon-reexec + ``` + +## Setting an Automatic Exit Interval for Shell + +### Description + +An unattended shell is prone to listening or attacks. Therefore, a mechanism must be configured to ensure that a shell can automatically exit when it does not run for a period. + +### Implementation + +At the end of file **/etc/profile**, set the **TMOUT** field \(unit: second\) that specifies the interval for automatic exit as follows: + +``` +export TMOUT=300 +``` + +## Setting the Default umask Value for Users to 0077 + +### Description + +The **umask** value is used to set default permission on files and directories. A smaller **umask** value indicates that group users or other users have incorrect permission, which brings system security risks. Therefore, the default **umask** value must be set to **0077** for all users, that is, the default permission on user directories is **700** and the permission on user files is **600**. The **umask** value indicates the complement of a permission. For details about how to convert the **umask** value to a permission, see [umask Values](#umask-values.md). + +>![](public_sys-resources/icon-note.gif) **NOTE:** +>By default, the **umask** value of the openEuler user is set to **0077**. + +### Implementation + +1. Add **umask 0077** to the **/etc/bashrc** file and all files in the **/etc/profile.d/** directory. + + ``` + echo "umask 0077" >> $FILE + ``` + + >![](public_sys-resources/icon-note.gif) **NOTE:** + >_$FILE_ indicates the file name, for example, echo "umask 0077" \>\> /etc/bashrc. + +2. Set the ownership and group of the **/etc/bashrc** file and all files in the **/etc/profile.d/** directory to **root**. + + ``` + chown root.root $FILE + ``` + + >![](public_sys-resources/icon-note.gif) **NOTE:** + >_$FILE_ indicates the file name, for example, **chown root.root /etc/bashrc**. + + +## Setting the GRUB2 Encryption Password + +### Description + +GRand Unified Bootloader \(GRUB\) is an operating system boot manager used to boot different systems \(such as Windows and Linux\). GRUB2 is an upgraded version of GRUB. + +When starting the system, you can modify the startup parameters of the system on the GRUB2 screen. To ensure that the system startup parameters are not modified randomly, you need to encrypt the GRUB2 screen. The startup parameters can be modified only when the correct GRUB2 password is entered. + +>![](public_sys-resources/icon-note.gif) **NOTE:** +>The default password of GRUB2 is **openEuler\#12**. You are advised to change the default password upon the first login and periodically update the password. If the password is leaked, startup item configurations may be modified, causing the system startup failure. + +### Implementation + +1. Run the **grub2-mkpasswd-pbkdf2** command to generate an encrypted password. + + >![](public_sys-resources/icon-note.gif) **NOTE:** + >SHA-512 is used as the GRUB2 encryption algorithm. + + ``` + # grub2-mkpasswd-pbkdf2 + Enter password: + Reenter password: + PBKDF2 hash of your password is + grub.pbkdf2.sha512.10000.5A45748D892672FDA02DD3B6F7AE390AC6E6D532A600D4AC477D25C7D087644697D8A0894DFED9D86DC2A27F4E01D925C46417A225FC099C12DBD3D7D49A7425.2BD2F5BF4907DCC389CC5D165DB85CC3E2C94C8F9A30B01DACAA9CD552B731BA1DD3B7CC2C765704D55B8CD962D2AEF19A753CBE9B8464E2B1EB39A3BB4EAB08 + ``` + + >![](public_sys-resources/icon-note.gif) **NOTE:** + >Enter the same password in the **Enter password** and **Reenter password** lines. + >After **openEuler\#12** is encrypted by **grub2-mkpasswd-pbkdf2**, the output is **grub.pbkdf2.sha512.10000.5A45748D892672FDA02DD3B6F7AE390AC6E6D532A600D4AC477D25C7D087644697D8A0894DFED9D86DC2A27F4E01D925C46417A225FC099C12DBD3D7D49A7425.2BD2F5BF4907DCC389CC5D165DB85CC3E2C94C8F9A30B01DACAA9CD552B731BA1DD3B7CC2C765704D55B8CD962D2AEF19A753CBE9B8464E2B1EB39A3BB4EAB08**. The ciphertext is different each time. + +2. Open **/boot/efi/EFI/openEuler/grub.cfg** in a vi editor. Append the following fields to the beginning of **/boot/efi/EFI/openEuler/grub.cfg**. + + ``` + set superusers="root" + password_pbkdf2 root grub.pbkdf2.sha512.10000.5A45748D892672FDA02DD3B6F7AE390AC6E6D532A600D4AC477D25C7D087644697D8A0894DFED9D86DC2A27F4E01D925C46417A225FC099C12DBD3D7D49A7425.2BD2F5BF4907DCC389CC5D165DB85CC3E2C94C8F9A30B01DACAA9CD552B731BA1DD3B7CC2C765704D55B8CD962D2AEF19A753CBE9B8464E2B1EB39A3BB4EAB08 + ``` + + >![](public_sys-resources/icon-note.gif) **NOTE:** + >- The **superusers** field is used to set the account name of the super GRUB2 administrator. + >- The first parameter following the **password\_pbkdf2** field is the GRUB2 account name, and the second parameter is the encrypted password of the account. + + +## Setting the Secure Single-user Mode + +### Description + +When you log in to the system as user **root** in single-user mode, if the **root** password is not set, high security risks exist. + +### Implementation + +This setting can be implemented by modifying the **/etc/sysconfig/init** file. Set **SINGLE** to **SINGLE=/sbin/sulogin**. + +## Disabling Interactive Startup + +### Description + +With interactive guidance, console users can disable audit, firewall, or other services, which compromises system security. Users can disable interactive startup to improve security. This item is disabled by default in openEuler. + +### Implementation + +This setting can be implemented by modifying the **/etc/sysconfig/init** file. Set **PROMPT** to **no**. diff --git a/docs/en/docs/SecHarden/figures/en-us_image_0221925211.png b/docs/en/docs/SecHarden/figures/en-us_image_0221925211.png new file mode 100644 index 0000000000000000000000000000000000000000..62ef0decdf6f1e591059904001d712a54f727e68 Binary files /dev/null and b/docs/en/docs/SecHarden/figures/en-us_image_0221925211.png differ diff --git a/docs/en/docs/SecHarden/figures/en-us_image_0221925212.png b/docs/en/docs/SecHarden/figures/en-us_image_0221925212.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5ed3f7beeb01e6a48707c4806606b41d687e22 Binary files /dev/null and b/docs/en/docs/SecHarden/figures/en-us_image_0221925212.png differ diff --git a/docs/en/docs/SecHarden/file-permissions.md b/docs/en/docs/SecHarden/file-permissions.md new file mode 100644 index 0000000000000000000000000000000000000000..cf3295d841e3581a2eafc9db32e47315967f7f2e --- /dev/null +++ b/docs/en/docs/SecHarden/file-permissions.md @@ -0,0 +1,240 @@ + +## File Permissions + +- [File Permissions](#file-permissions) + - [Setting the Permissions on and Ownership of Files](#setting-the-permissions-on-and-ownership-of-files) + - [Deleting Unowned Files](#deleting-unowned-files) + - [Removing a Symbolic Link to /dev/null](#removing-a-symbolic-link-to-dev-null) + - [Setting the umask Value for a Daemon](#setting-the-umask-value-for-a-daemon) + - [Adding a Sticky Bit Attribute to Globally Writable Directories](#adding-a-sticky-bit-attribute-to-globally-writable-directories) + - [Disabling the Globally Writable Permission on Unauthorized Files](#disabling-the-globally-writable-permission-on-unauthorized-files) + - [Restricting Permissions on the at Command](#restricting-permissions-on-the-at-command) + - [Restricting Permissions on the cron Command](#restricting-permissions-on-the-cron-command) + - [Restricting Permissions on the sudo Command](#restricting-permissions-on-the-sudo-command) + + +## Setting the Permissions on and Ownership of Files + +### Description + +In Linux, all objects are processed as files. Even a directory will be processed as a large file containing many files. Therefore, the most important thing in Linux is the security of files and directories. Their security is ensured by permissions and owners. + +By default, the permissions and ownership of common directories, executable files, and configuration files in the system are set in openEuler. + +### Implementation + +The following uses the **/bin** directory as an example to describe how to change the permission and ownership of a file: + +- Modify the file permission. For example, set the permission on the **/bin** directory to **755**. + + ``` + chmod 755 /bin + ``` + +- Change the ownership of the file. For example, set the ownership and group of the **/bin** directory to **root:root**. + + ``` + chown root:root /bin + ``` + + +## Deleting Unowned Files + +### Description + +When deleting a user or group, the system administrator may forget to delete the files of the user or group. If the name of a new user or group is the same as that of the deleted user or group, the new user or group will own files on which it has no permission. You are advised to delete these files. + +### Implementation + +Delete the file whose user ID does not exist. + +1. Search for the file whose user ID does not exist. + + ``` + find / -nouser + ``` + +2. Delete the found file. In the preceding command, _filename_ indicates the name of the file whose user ID does not exist. + + ``` + rm -f filename + ``` + + +Delete the file whose group ID does not exist. + +1. Search for the file whose user ID does not exist. + + ``` + find / -nogroup + ``` + +2. Delete the found file. In the preceding command, _filename_ indicates the name of the file whose user ID does not exist. + + ``` + rm -f filename + ``` + + +## Removing a Symbolic Link to /dev/null + +### Description + +A symbolic link to **/dev/null** may be used by malicious users. This affects system security. You are advised to delete these symbolic links to improve system security. + +### Special Scenario + +After openEuler is installed, symbolic links to **/dev/null** may exist. These links may have corresponding functions. \(Some of them are preconfigured and may be depended by other components.\) Rectify the fault based on the site requirements. For details, see [Implementation](#en-us_topic_0152100319_s1b24647cdd834a8eaca3032611baf072). + +For example, openEuler supports UEFI and legacy BIOS installation modes. The GRUB packages supported in the two boot scenarios are installed by default. If you select the legacy BIOS installation mode, a symbolic link **/etc/grub2-efi.cfg** is generated. If you select the UEFI installation mode, a symbolic link **/etc/grub2.cfg** is generated. You need to process these symbolic links based on the site requirements. + +### Implementation + +1. Run the following command to search for symbolic links to **/dev/null**: + + ``` + find dirname -type l -follow 2>/dev/null + ``` + + >![](public_sys-resources/icon-note.gif) **NOTE:** + >_dir__name_ indicates the directory to be searched. Normally, key system directories, such as **/bin**, **/boot**, **/usr**, **/lib64**, **/lib**, and **/var**, need to be searched. + +2. If these symbolic links are useless, run the following command to delete them: + + ``` + rm -f filename + ``` + + >![](public_sys-resources/icon-note.gif) **NOTE:** + >_filename_ indicates the file name obtained in [Step 1](#en-us_topic_0152100319_l4dc74664c4fb400aaf91fb314c4f9da6). + + +## Setting the umask Value for a Daemon + +### Description + +The **umask** value is used to set default permission on files and directories. If the **umask** value is not specified, the file has the globally writable permission. This brings risks. A daemon provides a service for the system to receive user requests or network customer requests. To improve the security of files and directories created by the daemon, you are advised to set **umask** to **0027**. The **umask** value indicates the complement of a permission. For details about how to convert the **umask** value to a permission, see [umask Values](#umask-values.md). + +>![](public_sys-resources/icon-note.gif) **NOTE:** +>By default, the **umask** value of the daemon is set to **0022** in openEuler. + +### Implementation + +In configuration file **/etc/sysconfig/init**, add **umask 0027** as a new row. + +## Adding a Sticky Bit Attribute to Globally Writable Directories + +### Description + +Any user can delete or modify a file or directory in a globally writable directory, which leads to unauthorized file or directory deletion. Therefore, the sticky bit attribute is required for globally writable directories. + +### Implementation + +1. Search for globally writable directories. + + ``` + find / -type d -perm -0002 ! -perm -1000 -ls | grep -v proc + ``` + +2. Add the sticky bit attribute to globally writable directories. _dirname_ indicates the name of the directory that is found. + + ``` + chmod +t dirname + ``` + + +## Disabling the Globally Writable Permission on Unauthorized Files + +### Description + +Any user can modify globally writable files, which affects system integrity. + +### Implementation + +1. Search for all globally writable files. + + find / -type d ( -perm -o+w ) | grep -v proc + find / -type f ( -perm -o+w ) | grep -v proc + +2. View the settings of files \(excluding files and directories with sticky bits\) listed in step 1, and delete the files or disable the globally writable permission on them. Run the following command to remove the permission. In the command, _filename_ indicates the file name. + +    + + ``` + chmod o-w filename + ``` + + >![](public_sys-resources/icon-note.gif) **NOTE:** + >You can run the following command to check whether the sticky bit is set for the file or directory. If the command output contains the **T** flag, the file or directory is with a sticky bit. In the command, _filename_ indicates the name of the file or directory to be queried. + >``` + >ls -l filename + >``` + + +## Restricting Permissions on the at Command + +### Description + +The **at** command is used to create a scheduled task. Users who can run the **at** command must be specified to protect the system from being attacked. + +### Implementation + +1. Delete the **/etc/at.deny** file. + + ``` + rm -f /etc/at.deny + ``` + +2. Run the following command to change the ownership of file **/etc/at.allow** file to **root:root**. + + ``` + chown root:root /etc/at.allow + ``` + +3. Set that only user **root** can operate file **/etc/at.allow**. + + ``` + chmod og-rwx /etc/at.allow + ``` + + +## Restricting Permissions on the cron Command + +### Description + +The **cron** command is used to create a routine task. Users who can run the **cron** command must be specified to protect the system from being attacked. + +### Implementation + +1. Delete the **/etc/cron.deny** file. + + ``` + rm -f /etc/at.deny + ``` + +2. Run the following command to change the ownership of the **/etc/cron.allow** file to **root:root**: + + ``` + chown root:root /etc/cron.allow + ``` + +3. Set that only user **root** can operate file **/etc/cron.allow**. + + ``` + chmod og-rwx /etc/cron.allow + ``` + + +## Restricting Permissions on the sudo Command + +### Description + +A common user can use the **sudo** command to run commands as the user **root**. To harden system security, it is necessary to restrict permissions on the **sudo** command. Only user **root** can use the **sudo** command. By default, openEuler does not retrict the permission of non-root users to run the sudo command. + +### Implementation + +Modify the **/etc/sudoers** file to restrict permissions on the **sudo** command. Comment out the following configuration line: + +``` +#%wheel ALL=(ALL) ALL +``` diff --git a/docs/en/docs/SecHarden/kernel-parameters.md b/docs/en/docs/SecHarden/kernel-parameters.md new file mode 100644 index 0000000000000000000000000000000000000000..5e786d3c550f673ba04826c08a7fe62e43f02951 --- /dev/null +++ b/docs/en/docs/SecHarden/kernel-parameters.md @@ -0,0 +1,229 @@ +# Kernel Parameters + +- [Kernel Parameters](#kernel-parameters) + - [Hardening the Security of Kernel Parameters](#hardening-the-security-of-kernel-parameters) + + +## Hardening the Security of Kernel Parameters + +### Description + +Kernel parameters specify the status of network configurations and application privileges. The kernel provides system control which can be fine-tuned or configured by users. This function can improve the security of the OS by controlling configurable kernel parameters. For example, you can fine-tune or configure network options to improve system security. + +### Implementation + +1. Write the hardening items in [Table 1](#en-us_topic_0152100187_t69b5423c26644b26abe94d88d38878eb) to the **/etc/sysctl.conf** file. + + >![](public_sys-resources/icon-note.gif) **NOTE:** + >Record security hardening items as follows: + >``` + >net.ipv4.icmp_echo_ignore_broadcasts = 1 + >net.ipv4.conf.all.rp_filter = 1 + >net.ipv4.conf.default.rp_filter = 1 + >``` + + **Table 1** Policies for hardening the security of kernel parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Item

+

Description

+

Suggestion

+

Configured as Suggested

+

net.ipv4.icmp_echo_ignore_broadcasts

+

Specifies whether ICMP broadcast packets are accepted. They are not accepted according to the hardening policy.

+

1

+

Yes

+

net.ipv4.conf.all.rp_filter

+

Specifies whether the actual source IP address used by a data packet is related to a routing table and whether the data packet receives responses through interfaces. The item is enabled according to the hardening policy.

+

1

+

Yes

+

net.ipv4.conf.default.rp_filter

+

1

+

Yes

+

net.ipv4.ip_forward

+

The IP forwarding function prevents unauthorized IP address packets from being transferred to a network. The item is disabled according to the hardening policy.

+

0

+

Yes

+

net.ipv4.conf.all.accept_source_route

+

accept_source_route indicates that a packet sender can specify a path for sending the packet and a path for receiving a response. The item is disabled according to the hardening policy.

+

0

+

Yes

+

net.ipv4.conf.default.accept_source_route

+

0

+

Yes

+

net.ipv4.conf.all.accept_redirects

+

Specifies whether a redirected ICMP packet is sent. The packet is not sent according to the hardening policy.

+

0

+

Yes

+

net.ipv4.conf.default.accept_redirects

+

0

+

Yes

+

net.ipv6.conf.all.accept_redirects

+

0

+

Yes

+

net.ipv6.conf.default.accept_redirects

+

0

+

Yes

+

net.ipv4.conf.all.send_redirects

+

Specifies whether a redirected ICMP packet is sent to another server. This item is enabled only when the host functions as a route. The item is disabled according to the hardening policy.

+

0

+

Yes

+

net.ipv4.conf.default.send_redirects

+

0

+

Yes

+

net.ipv4.icmp_ignore_bogus_error_responses

+

Fake ICMP packets are not recorded to logs, which saves disk space. The item is enabled according to the hardening policy.

+

1

+

Yes

+

net.ipv4.tcp_syncookies

+

SYN attack is a DoS attack that forces system restart by occupying system resources. TCP-SYN cookie protection is enabled according to the hardening policy.

+

1

+

Yes

+

kernel.dmesg_restrict

+

Hardens dmesg messages. Only the administrator is allowed to view the messages.

+

1

+

Yes

+

kernel.sched_autogroup_enabled

+

Determines whether the kernel automatically groups and schedules threads. After this item is enabled, scheduling groups compete for time slices, and threads in a scheduling group compete for the time slices allocated to the scheduling group. The item is disabled according to the hardening policy.

+

0

+

No

+

kernel.sysrq

+

Disables the magic key.

+
NOTE:

You are advised to disable the magic key so that commands cannot be directly passed to the kernel.

+
+

0

+

Yes

+

net.ipv4.conf.all.secure_redirects

+

Specifies whether redirected ICMP messages sent from any servers or from gateways listed in the default gateway list are accepted. Redirected ICMP messages are received from any servers according to the hardening policy.

+

0

+

Yes

+

net.ipv4.conf.default.secure_redirects

+

0

+

Yes

+
+ +2. Run the following command to load the kernel parameters set in the **sysctl.conf** file: + + ``` + sysctl -p /etc/sysctl.conf + ``` + + +### Other Security Suggestions + +- **net.ipv4.icmp\_echo\_ignore\_all**: ignores ICMP requests. + + For security purposes, you are advised to enable this item. The default value is **0**. Set the value to **1** to enable this item. + + After this item is enabled, all incoming ICMP Echo request packets will be ignored, which will cause failure to ping the target host. Determine whether to enable this item based on your actual networking condition. + +- **net.ipv4.conf.all.log\_martians/net.ipv4.conf.default.log\_martians**: logs spoofed, source routed, and redirect packets. + + For security purposes, you are advised to enable this item. The default value is **0**. Set the value to **1** to enable this item. + + After this item is enabled, data from forbidden IP addresses will be logged. Too many new logs will overwrite old logs because the total number of logs allowed is fixed. Determine whether to enable this item based on your actual usage scenario. + +- **net.ipv4.tcp\_timestamps**: disables tcp\_timestamps. + + For security purposes, you are advised to disable tcp\_timestamps. The default value is **1**. Set the value to **0** to disable tcp\_timestamps. + + After this item is disabled, TCP retransmission timeout will be affected. Determine whether to disable this item based on the actual usage scenario. + +- **net.ipv4.tcp\_max\_syn\_backlog**: determines the number of queues that is in SYN\_RECV state. + + This parameter determines the number of queues that is in SYN\_RECV state. When this number is exceeded, new TCP connection requests will not be accepted. This to some extent prevents system resource exhaustion. Configure this parameter based on your actual usage scenario. diff --git a/docs/en/docs/SecHarden/os-hardening-overview.md b/docs/en/docs/SecHarden/os-hardening-overview.md new file mode 100644 index 0000000000000000000000000000000000000000..44fd1bdd4083b58b5cf375cc9437cdf5874b5bf7 --- /dev/null +++ b/docs/en/docs/SecHarden/os-hardening-overview.md @@ -0,0 +1,121 @@ +# OS Hardening Overview +- [OS Hardening Overview](#os-hardening-overview) + - [Security Hardening Purpose](#security-hardening-purpose) + - [Security Hardening Solution](#security-hardening-solution) + - [Security Hardening Impacts](#security-hardening-impacts) + +This chapter describes the purpose and solution of openEuler system hardening. + + + +## security-hardening-purpose + +The OS, as the core of the information system, manages hardware and software resources and is the basis of information system security. Applications must depend on the OS to ensure the integrity, confidentiality, availability, and controllability of information. Without the OS security protection, protective methods against hackers and virus attacks at other layers cannot meet the security requirements. + +Therefore, security hardening is essential for an OS. Security hardening helps build a dynamic and complete security system, enhance product security, and improve product competitiveness. + +## security-hardening-solution + +This section describes the openEuler security hardening solution, including the hardening method and items. + +### Security Hardening Method + +You can manually modify security hardening configurations or run commands to harden the system, or use the security hardening tool to modify security hardening items in batches. The openEuler security hardening tool runs as openEuler-security.service. When the system is started for the first time, the system automatically runs the service to execute the default hardening policy, and automatically set the service not to start as the system starts. + +You can modify the **security.conf** file and use the security hardening tool to implement user-defined security hardening. + + +## security hardening impacts + +Security hardening on file permissions and account passwords may change user habits, affecting system usability. For details about common hardening items that affect system usability, see [Table 1](#en-us_topic_0152100325_ta4a48f54ff2849ada7845e2380209917). + +**Table 1** Security hardening impacts + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Item

+

Suggestion

+

Impact

+

Configured By Default

+

Timeout setting on the text-based user interface (TUI)

+

When the TUI is idle for a long period of time, it automatically exits.

+
NOTE:

When a user logs in to the system using SSH, the timeout period is determined by the smaller value of the TMOUT field in the /etc/profile file and the ClientAliveInterval field in the /etc/ssh/sshd_config file. You are advised to set this parameter to 300 seconds.

+
+

If you do not perform any operation on the TUI for a long time, TUI automatically exits.

+

No

+

Password complexity

+

The password is a string containing at least eight characters chosen from three or four of the following types: uppercase letters, lowercase letters, digits, and special characters.

+

All passwords must comply with the complexity requirements.

+

No

+

Password retry limits

+

If a user fails to enter the correct password for three consecutive times when logging in to the OS, the user account will be locked for 60 seconds.

+

After the account is locked, the user can log in to the system only after 60 seconds.

+

Yes

+

Default umask value

+

The default umask value of all users is set to 077 so that the default permission on files created by users is 600 and the default permission on directories is 700.

+

Users must modify the permission on specified files or directories as required.

+

Yes

+

Password validity period

+

The password validity period can be modified in the /etc/login.defs file and is set to 90 days by default. It can be modified in any time. An expiration notification will be displayed seven days before a password is to expire.

+

When a user attempts to log in after the password expires, the user will be informed of the password expiry and is required to change the password. If the user does not change the password, the user cannot access the system.

+

No

+

su permission control

+

The su command is used to switch user accounts. To improve system security, only the user root and users in the wheel group can use the su command.

+

Common users can successfully run the su command only after joining in the wheel group.

+

Yes

+

Disabling user root from logging in using SSH

+

Set the value of the PermitRootLogin field in the /etc/ssh/sshd_config file to no. In this way, user root cannot directly log in to the system using SSH.

+

You need to log in to the system as a common user in SSH mode and then switch to user root.

+

No

+

Strong SSH encryption algorithm

+

The MACs and Ciphers configurations of SSH services support the CTR and SHA2 algorithms and do not support the CBC, MD5, and SHA1 algorithms.

+

Some early Xshell and PuTTY versions do not support aes128-ctr, aes192-ctr, aes256-ctr, hmac-sha2-256, and hmac-sha2-512 algorithms. Ensure that the latest PuTTY (0.63 or later) and Xshell (5.0 or later) are used.

+

Yes

+
+ diff --git a/content/en/docs/Virtualization/public_sys-resources/icon-caution.gif b/docs/en/docs/SecHarden/public_sys-resources/icon-caution.gif similarity index 100% rename from content/en/docs/Virtualization/public_sys-resources/icon-caution.gif rename to docs/en/docs/SecHarden/public_sys-resources/icon-caution.gif diff --git a/content/en/docs/Virtualization/public_sys-resources/icon-danger.gif b/docs/en/docs/SecHarden/public_sys-resources/icon-danger.gif similarity index 100% rename from content/en/docs/Virtualization/public_sys-resources/icon-danger.gif rename to docs/en/docs/SecHarden/public_sys-resources/icon-danger.gif diff --git a/content/en/docs/Virtualization/public_sys-resources/icon-note.gif b/docs/en/docs/SecHarden/public_sys-resources/icon-note.gif similarity index 100% rename from content/en/docs/Virtualization/public_sys-resources/icon-note.gif rename to docs/en/docs/SecHarden/public_sys-resources/icon-note.gif diff --git a/content/en/docs/Virtualization/public_sys-resources/icon-notice.gif b/docs/en/docs/SecHarden/public_sys-resources/icon-notice.gif similarity index 100% rename from content/en/docs/Virtualization/public_sys-resources/icon-notice.gif rename to docs/en/docs/SecHarden/public_sys-resources/icon-notice.gif diff --git a/content/en/docs/Virtualization/public_sys-resources/icon-tip.gif b/docs/en/docs/SecHarden/public_sys-resources/icon-tip.gif similarity index 100% rename from content/en/docs/Virtualization/public_sys-resources/icon-tip.gif rename to docs/en/docs/SecHarden/public_sys-resources/icon-tip.gif diff --git a/content/en/docs/Virtualization/public_sys-resources/icon-warning.gif b/docs/en/docs/SecHarden/public_sys-resources/icon-warning.gif similarity index 100% rename from content/en/docs/Virtualization/public_sys-resources/icon-warning.gif rename to docs/en/docs/SecHarden/public_sys-resources/icon-warning.gif diff --git a/docs/en/docs/SecHarden/secHarden.md b/docs/en/docs/SecHarden/secHarden.md new file mode 100644 index 0000000000000000000000000000000000000000..6539f6bd1eb52da6f2076345facd9c4759538a79 --- /dev/null +++ b/docs/en/docs/SecHarden/secHarden.md @@ -0,0 +1,5 @@ +# Security Hardening Guide + +This document describes how to perform security hardening for openEuler. + +This document is intended for administrators who need to perform security hardening for openEuler. You must be familiar with the OS security architecture and technologies. diff --git a/docs/en/docs/SecHarden/security-hardening-guide.md b/docs/en/docs/SecHarden/security-hardening-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..38b3bec79c4e11aaebbd80e5b19204ebfb9edc7a --- /dev/null +++ b/docs/en/docs/SecHarden/security-hardening-guide.md @@ -0,0 +1,4 @@ +# Security Hardening Guide + +You can modify the hardening policy configuration file or script to harden the system. This chapter describes the hardening items, whether the items are hardened by default, and how to perform security hardening. + diff --git a/docs/en/docs/SecHarden/security-hardening-tools.md b/docs/en/docs/SecHarden/security-hardening-tools.md new file mode 100644 index 0000000000000000000000000000000000000000..0cfbfd942d51f13e70f0155d1fa57ff9a2816e77 --- /dev/null +++ b/docs/en/docs/SecHarden/security-hardening-tools.md @@ -0,0 +1,137 @@ +# Security Hardening Tools + +- [Security Hardening Tools](#security-hardening-tools) + - [Security Hardening Procedure](#security-hardening-procedure) + - [Hardening Items Taking Effect](#hardening-items-taking-effect) + + + + + +## Security Hardening Procedure + +### Overview + +You need to modify the **usr-security.conf** file so that the security hardening tool can set hardening policies based on the **usr-security.conf** file. This section describes rules for modifying the **usr-security.conf** file. For details about the configurable security hardening items, see [Security Hardening Guide](#security-hardening-guide.md). + +### Precautions + +- After modifying the items, restart the security hardening service for the modification to take effect. For details about how to restart the service, see [Hardening Items Taking Effect](#hardening-items-taking-effect.md). +- When modifying security hardening items, you only need to modify the **/etc/openEuler\_security/usr-security.conf** file. You are not advised to modify the **/etc/openEuler\_security/security.conf** file. The **security.conf** file contains basic hardening items which are executed only once. +- After the security hardening service is restarted for the configuration to take effect, the previous configuration cannot be deleted by deleting the corresponding hardening items from the **usr-security.conf** file and restarting the security hardening service. +- Security hardening operations are recorded in the **/var/log/openEuler-security.log** file. + +### Configuration Format + +Each line in the **usr-security.conf** file indicates a configuration item. The configuration format varies according to the configuration content. The following describes the format of each configuration item. + +>![](public_sys-resources/icon-note.gif) **NOTE:** +>- All configuration items start with an execution ID. The execution ID is a positive integer and can be customized. +>- Contents of a configuration item are separated by an at sign \(@\). +>- If the actual configuration content contains an at sign \(@\), use two at signs \(@@\) to distinguish the content from the separator. For example, if the actual content is **xxx@yyy**, set this item to **xxx@@yyy**. Currently, an at sign \(@\) cannot be placed at the beginning or end of the configuration content. + +   + +- **d**: comment + + Format: _Execution ID_**@d@**_Object file_**@**_Match item_ + + Function: Comment out lines starting with the match item \(the line can start with a space\) in an object file by adding a number sign \(\#\) at the beginning of the line. + + Example: If the execution ID is **401**, comment out lines starting with **%wheel** in the **/etc/sudoers** file. + + ``` + 401@d@/etc/sudoers@%wheel + ``` + + +- **m**: replacement + + Format: _Execution ID_**@m@**_Object file_**@**_Match item_**@**_Target value_ + + Function: Replace lines starting with the match item \(the line can start with a space\) in an object file with _match item_ and _target value_. If the match line starts with spaces, the spaces will be deleted after the replacement. + + Example: If the execution ID is **101**, replace lines starting with **Protocol** in the **/etc/ssh/sshd\_config** file with **Protocol 2**. The spaces after **Protocol** are matched and replaced. + + ``` + 101@m@/etc/ssh/sshd_config@Protocol @2 + ``` + +- **sm**: accurate modification + + Format: _Execution ID_**@sm@**_Object file_**@**_Match item_**@**_Target value_ + + Function: Replace lines starting with the match item \(the line can start with a space\) in an object file with _match item_ and _target value_. If the match line starts with spaces, the spaces are retained after the replacement. This is the difference between **sm** and **m**. + + Example: If the execution ID is **201**, replace lines starting with **size** in the **/etc/audit/hzqtest** file with **size 2048**. + + ``` + 201@sm@/etc/audit/hzqtest@size@ 2048 + ``` + + +- **M**: subitem modification + + Format: _Execution ID_**@M@**_Object file_**@**_Match item_**@**_Match subitem__\[@Value of the match subitem\]_ + + Function: Match lines starting with the match item \(the line can start with a space\) in an object file and replace the content starting with the match subitem in these lines with the _match subitem_ and _value of the match subitem_. The value of the match subitem is optional. + + Example: If the execution ID is **101**, find lines starting with **key** in the file and replace the content starting with **key2** in these lines with **key2value2**. + + ``` + 101@M@file@key@key2@value2 + ``` + +- **systemctl**: service management + + Format: _Execution ID_**@systemctl@**_Object service_**@**_Operation_ + + Function: Use **systemctl** to manage object services. The value of **Operation** can be **start**, **stop**, **restart**, or **disable**. + + Example: If the execution ID is **218**, stop the **cups.service**. This provides the same function as running the **systemctl stop cups.service** command. + + ``` + 218@systemctl@cups.service@stop + ``` + +    + +- Other commands + + Format: _Execution ID_**@**_Command_**@**_Object file_ + + Function: Run the corresponding command, that is, run the command line _Command_ _Object file_. + + Example 1: If the execution ID is **402**, run the **rm -f** command to delete the **/etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem** file. + + ``` + 402@rm -f @/etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem + ``` + + Example 2: If the execution ID is **215**, run the **touch** command to create the **/etc/cron.allow** file. + + ``` + 215@touch @/etc/cron.allow + ``` + + Example 3: If the execution ID is **214**, run the **chown** command to change the owner of the **/etc/at.allow** file to **root:root**. + + ``` + 214@chown root:root @/etc/at.allow + ``` + + Example 4: If the execution ID is **214**, run the **chmod** command to remove the **rwx** permission of the group to which the owner of the** /etc/at.allow** file belongs and other non-owner users. + + ``` + 214@chmod og-rwx @/etc/at.allow + ``` + + +## Hardening Items Taking Effect + +After modifying the **usr-security.conf** file, run the following command for the new configuration items to take effect: + +``` +systemctl restart openEuler-security.service +``` + diff --git a/docs/en/docs/SecHarden/selinux-configuration.md b/docs/en/docs/SecHarden/selinux-configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..10f42960f9d9758c47c4915c01aed2c517eae24d --- /dev/null +++ b/docs/en/docs/SecHarden/selinux-configuration.md @@ -0,0 +1,67 @@ +# SELinux Configuration + +## Overview + +Discretionary access control \(DAC\) determines whether a resource can be accessed based on users, groups, and other permissions. It does not allow the system administrator to create comprehensive and fine-grained security policies. SELinux \(Security-Enhanced Linux\) is a module of the Linux kernel and a security subsystem of Linux. SELinux implements mandatory access control \(MAC\). Each process and system resource has a special security label. In addition to the principles specified by the DAC, the SELinux needs to determine whether each type of process has the permission to access a type of resource. + +By default, openEuler uses SELinux to improve system security. SELinux has three modes: + +- **permissive**: The SELinux outputs alarms but does not forcibly execute the security policy. +- **enforcing**: The SELinux security policy is forcibly executed. +- **disabled**: The SELinux security policy is not loaded. + +## Configuration Description + +SELinux is enabled for openEuler by default and the default mode is enforcing. You can change the SELinux mode by changing the value of **SELINUX** in **/etc/selinux/config**. + +- To disable the SELinux policy, run the following command: + + ``` + SELINUX=disabled + ``` + +- To use the permissive policy, run the following command: + + ``` + SELINUX=permissive + ``` + + +>![](public_sys-resources/icon-note.gif) **NOTE:** +>When you switch between the disabled mode and the other mode, you need to restart the system for the switch to take effect. +>``` +># reboot +>``` + +## SELinux Commands + +- Query the SELinux mode. For example, the following shows that the SELinux mode is permissive. + + ``` + # getenforce + Permissive + ``` + +- Set the SELinux mode. **0** indicates the permissive mode, and **1** indicates the enforcing mode. For example, run the following command to set the SELinux mode to enforcing. This command cannot be used to set the disabled mode. After the system is restarted, the mode set in **/etc/selinux/config** is restored. + + ``` + # setenforce 1 + ``` + +- Query the SELinux status. **SELinux status** indicates the SELinux status. **enabled** indicates that SELinux is enabled, and **disabled** indicates that SELinux is disabled. **Current mode** indicates the current security policy of the SELinux. + + ``` + # sestatus + SELinux status: enabled + SELinuxfs mount: /sys/fs/selinux + SELinux root directory: /etc/selinux + Loaded policy name: targeted + Current mode: enforcing + Mode from config file: enforcing + Policy MLS status: enabled + Policy deny_unknown status: allowed + Memory protection checking: actual (secure) + Max kernel policy version: 31 + ``` + + diff --git a/docs/en/docs/SecHarden/system-services.md b/docs/en/docs/SecHarden/system-services.md new file mode 100644 index 0000000000000000000000000000000000000000..02256411c4035a57b520f06c7a61ce33cb634153 --- /dev/null +++ b/docs/en/docs/SecHarden/system-services.md @@ -0,0 +1,468 @@ +# system-services + +- [System Services](#system-services) + - [Hardening the SSH Service](#hardening-the-ssh-service) + + +## hardening-the-ssh-service + +### Description + +The Secure Shell \(SSH\) is a reliable security protocol for remote logins and other network services. SSH prevents information disclosure during remote management. SSH encrypts transferred data to prevent domain name server \(DNS\) spoofing and IP spoofing. OpenSSH was created as an open source alternative to the proprietary SSH protocol. + +Hardening the SSH service is to modify configurations of the SSH service to set the algorithm and authentication parameters when the system uses the OpenSSH protocol, improving the system security. [Table 1](#en-us_topic_0152100390_ta2fdb8e4931b4c1a8f502b3c7d887b95) describes the hardening items, recommended hardening values, and default policies. + +### Implementation + +To harden a server, perform the following steps: + +1. Open the configuration file **/etc/ssh/sshd\_config** of the SSH service on the server, and modify or add hardening items and values in the file. +2. Save the **/etc/ssh/sshd\_config** file. +3. Run the following command to restart the SSH service: + + ``` + systemctl restart sshd + ``` + + +   + +To harden a client, perform the following steps: + +1. Open the configuration file **/etc/ssh/ssh\_config** of the SSH service on the client, and modify or add hardening items and values in the file. +2. Save the **/etc/ssh/ssh\_config** file. +3. Run the following command to restart the SSH service: + + ``` + systemctl restart sshd + ``` + + +### Hardening Items + +- Server hardening policies + + All SSH service hardening items are stored in the **/etc/ssh/sshd\_config** configuration file. For details about the server hardening items, hardening suggestions, and whether the hardening items are configured as suggested, see [Table 1](#en-us_topic_0152100390_ta2fdb8e4931b4c1a8f502b3c7d887b95). + + **Table 1** SSH hardening items on a server + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Item

+

Description

+

Suggestion

+

Configured as Suggested

+

Protocol

+

SSH protocol version.

+

2

+

Yes

+

SyslogFacility

+

Log type of the SSH service. The item is set to AUTH, indicating authentication logs.

+

AUTH

+

Yes

+

LogLevel

+

Level for recording SSHD logs.

+

VERBOSE

+

Yes

+

X11Forwarding

+

Specifies whether a GUI can be used after login using SSH.

+

no

+

Yes

+

MaxAuthTries

+

Maximum number of authentication attempts.

+

3

+

No

+

PubkeyAuthentication

+

Specifies whether public key authentication is allowed.

+

yes

+

Yes

+

RSAAuthentication

+

Specifies whether only RSA security authentication is allowed.

+

yes

+

Yes

+

IgnoreRhosts

+

Specifies whether the rhosts and shosts files are used for authentication. The rhosts and shosts files record the names of the servers that support remote access and related login names.

+

yes

+

Yes

+

RhostsRSAAuthentication

+

Specifies whether the RSA algorithm security authentication based on the rhosts file is used. The rhosts file records the names of the servers that support remote access and related login names.

+

no

+

Yes

+

HostbasedAuthentication

+

Specifies whether host-based authentication is used. Host-based authentication indicates that any user of a trusted client can use the SSH service.

+

no

+

Yes

+

PermitRootLogin

+

Specifies whether to allow user root to log in to the system using SSH.

+
NOTE:

If you want to log in to the system using SSH as user root, set the value of the PermitRootLogin field in the /etc/ssh/sshd_config file to yes.

+
+

no

+

No

+

PermitEmptyPasswords

+

Specifies whether accounts with empty passwords can log in.

+

no

+

Yes

+

PermitUserEnvironment

+

Specifies whether to resolve the environment variables set in ~/.ssh/environment and ~/.ssh/authorized_keys.

+

no

+

Yes

+

Ciphers

+

Encryption algorithm of SSH data transmission.

+

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

+

Yes

+

ClientAliveCountMax

+

Timeout count. After the server sends a request, if the number of times that the client does not respond reaches a specified value, the server automatically disconnects from the client.

+

0

+

No

+

Banner

+

File of the prompt information displayed before and after SSH login.

+

/etc/issue.net

+

Yes

+

MACs

+

Hash algorithm for SSH data verification.

+

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

+

Yes

+

StrictModes

+

Specifies whether to check the permission on and ownership of the home directory and rhosts file before SSH receives login requests.

+

yes

+

Yes

+

UsePAM

+

Specifies whether to use PAM for login authentication.

+

yes

+

Yes

+

AllowTcpForwarding

+

Specifies whether to allow TCP forwarding.

+

no

+

Yes

+

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

+

SFTP log record level, which records the INFO level and authentication logs.

+

-l INFO -f AUTH

+

Yes

+

AllowAgentForwarding

+

Specifies whether to allow SSH Agent forwarding.

+

no

+

Yes

+

GatewayPorts

+

Specifies whether SSH can connect to ports on the forwarding client.

+

no

+

Yes

+

PermitTunnel

+

Specifies whether Tunnel devices are allowed.

+

no

+

Yes

+

KexAlgorithms

+

SSH key exchange algorithms.

+

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

+

Yes

+

LoginGraceTime

+

Time limit for users passing the authentication. 0 indicates no limit. The default value is 60 seconds.

+

60

+

No

+
+ + >![](public_sys-resources/icon-note.gif) **NOTE:** + >By default, the messages displayed before and after SSH login are saved in the **/etc/issue.net** file. The default information in the **/etc/issue.net** file is **Authorized users only.** **All activities may be monitored and reported.** + + +- Client hardening policies + + All SSH service hardening items are stored in the **/etc/ssh/ssh\_config** configuration file. For details about the client hardening items, hardening suggestions, and whether the hardening items are configured as suggested, see [Table 2](#en-us_topic_0152100390_tb289c5a6f1c7420ab4339187f9018ea4). + + **Table 2** SSH hardening items on a client + + + + + + + + + + + + + + + + + + + +

Item

+

Description

+

Suggestion

+

Configured as Suggested

+

KexAlgorithms

+

SSH key exchange algorithms.

+

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

+

No

+

VerifyHostKeyDNS

+

Specifies whether to verify HostKey files by using DNS or SSHFP.

+

ask

+

No

+
+ + >![](public_sys-resources/icon-note.gif) **NOTE:** + >Third-party clients and servers that use the Diffie-Hellman algorithm are required to allow at least 2048-bit connection. + + +### Other Security Suggestions + +- The SSH service only listens on specified IP addresses. + + For security purposes, you are advised to only listen on required IP addresses rather than listen on 0.0.0.0 when using the SSH service. You can specify the IP addresses that SSH needs to listen on in the ListenAddress configuration item in the **/etc/ssh/sshd\_config** file. + + 1. Open and modify the **/etc/ssh/sshd\_config** file. + + ``` + vi /etc/ssh/sshd_config + ``` + + The following information indicates that the bound listening IP address is **192.168.1.100**. You can change the listening IP address based on the site requirements. + + ``` + ... + ListenAddress 192.168.1.100 + ... + ``` + + 2. Restart the SSH service. + + ``` + systemctl restart sshd.service + ``` + + + +- SFTP users are restricted from access to upper-level directories. + + SFTP is a secure FTP designed to provide secure file transfer over SSH. Users can only use dedicated accounts to access SFTP for file upload and download, instead of SSH login. In addition, directories that can be accessed over SFTP are limited to prevent directory traversal attacks. The configuration process is as follows: + + >![](public_sys-resources/icon-note.gif) **NOTE:** + >In the following configurations, **sftpgroup** is an example user group name, and **sftpuser** is an example username. + + 1. Create an SFTP user group. + + ``` + groupadd sftpgroup + ``` + + 2. Create an SFTP root directory. + + ``` + mkdir /sftp + ``` + + 3. Modify the ownership of and permission on the SFTP root directory. + + ``` + chown root:root /sftp + chmod 755 /sftp + ``` + + 4. Create an SFTP user. + + ``` + useradd -g sftpgroup -s /sbin/nologin sftpuser + ``` + + 5. Set the password of the SFTP user. + + ``` + passwd sftpuser + ``` + + 6. Create a directory used to store files uploaded by the SFTP user. + + ``` + mkdir /sftp/sftpuser + ``` + + 7. Modify the ownership of and permission on the upload directory of the SFTP user. + + ``` + chown root:root /sftp/sftpuser + chmod 777 /sftp/sftpuser + ``` + + 8. Modify the **/etc/ssh/sshd\_config** file. + + ``` + vi /etc/ssh/sshd_config + ``` + + Modify the following information: + + ``` + #Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO -f AUTH + Subsystem sftp internal-sftp -l INFO -f AUTH + ... + + Match Group sftpgroup + ChrootDirectory /sftp/%u + ForceCommand internal-sftp + ``` + + >![](public_sys-resources/icon-note.gif) **NOTE:** + >- **%u** is a wildcard character. Enter **%u** to represent the username of the current SFTP user. + >- The following content must be added to the end of the **/etc/ssh/sshd\_config** file: + > ``` + > Match Group sftpgroup + > ChrootDirectory /sftp/%u + > ForceCommand internal-sftp + > ``` + + 9. Restart the SSH service. + + ``` + systemctl restart sshd.service + ``` + + + +- Remotely execute commands using SSH. + + When a command is executed remotely through OpenSSH, TTY is disabled by default. If a password is required during command execution, the password is displayed in plain text. To ensure password input security, you are advised to add the **-t** option to the command. Example: + + ``` + ssh -t testuser@192.168.1.100 su + ``` + + >![](public_sys-resources/icon-note.gif) **NOTE:** + >**192.168.1.100** is an example IP address, and **testuser** is an example username. diff --git a/docs/en/docs/StratoVirt/Best_practices.md b/docs/en/docs/StratoVirt/Best_practices.md new file mode 100644 index 0000000000000000000000000000000000000000..1ad313ee55b7def3eb56065044d7a7007f3b74ff --- /dev/null +++ b/docs/en/docs/StratoVirt/Best_practices.md @@ -0,0 +1,112 @@ +# Best Practices + +### Huge Page Configuration + +#### Overview + +StratoVirt supports the configuration of huge pages for VMs. Compared with the traditional 4K memory page mode, huge page memory can effectively reduce the number of TLB misses and page fault interrupts, significantly improving the performance of memory-intensive services. + + + +#### Precautions + + - The directory to which the huge pages are mounted must be an absolute path. + - Memory huge pages can be configured only during startup. + - Only static huge pages are supported. + - Configure huge pages on the host before use. + - To use the huge page feature, ensure that the VM memory size is an integer multiple of *huge page size*. + +#### Mutually Exclusive Features + +- If huge pages are configured, the balloon feature becomes invalid. + + +#### Configuration Methods + +##### Configuring Huge Pages on the Host + +###### Mounting + +Mount the huge page file system to a specified directory. `/path/to/hugepages` is the user-defined empty directory. + +``` +$ mount -t hugetlbfs hugetlbfs /path/to/hugepages +``` + + +###### Setting the Number of Huge Pages + +* Set the number of static huge pages. `num` indicates the specified number. + + ``` + $ sysctl vm.nr_hugepages=num + ``` + +* Query huge page statistics. + + ``` + $ cat /proc/meminfo | grep Hugepages + ``` + + To view statistics about huge pages of other sizes, view the related information in the `/sys/kernel/mm/hugepages/hugepages-*/` directory. + +
+ +>![](./public_sys-resources/icon-notice.gif) **Notice** +>Configure the StratoVirt memory specifications and huge pages based on the huge page usage. If the huge page resources are insufficient, the VM fails to be started. + + + + +#### Huge Page Configuration During StratoVirt Startup + + + + +- CLI + + ``` + -mem-path /page/to/hugepages + ``` + + In the preceding command, `/page/to/hugepages` indicates the directory to which the huge page file system is mounted. Only absolute paths are supported. + + +- JSON file + + ```json + { + "machine-config": { + "mem_path": "/page/to/hugepages", + ... + }, + ... + } + ``` + + In the preceding command, `/page/to/hugepages` indicates the directory to which the huge page file system is mounted. Only absolute paths are supported. + +
+ +>![](./public_sys-resources/icon-caution.gif) **Note** +>**Typical configuration**: Set **mem-path** in the StratoVirt command line to the *huge page file system mount directory*. The StratoVirt huge page feature is recommended for the typical configuration. + + + + +### Performance Improvement + + +#### Memory Noise Floor + + +To achieve the optimal memory noise floor, developers can use the methods provided by WIKI on the StratoVirt homepage for compilation and testing. + +[https://gitee.com/openeuler/stratovirt/wikis/%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95-%E5%86%85%E5%AD%98%E5%BA%95%E5%99%AA?sort_id=3879743](https://gitee.com/openeuler/stratovirt/wikis/%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95-%E5%86%85%E5%AD%98%E5%BA%95%E5%99%AA?sort_id=3879743) + + +#### Cold Startup Time + +To reduce the cold startup time, developers can also use the methods provided on by WIKI on the StratoVirt homepage to perform compilation tests. + +[https://gitee.com/openeuler/stratovirt/wikis/%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95-%E5%86%B7%E5%90%AF%E5%8A%A8%E6%97%B6%E9%97%B4?sort_id=3879744](https://gitee.com/openeuler/stratovirt/wikis/%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95-%E5%86%B7%E5%90%AF%E5%8A%A8%E6%97%B6%E9%97%B4?sort_id=3879744) diff --git a/docs/en/docs/StratoVirt/Install_StratoVirt.md b/docs/en/docs/StratoVirt/Install_StratoVirt.md new file mode 100644 index 0000000000000000000000000000000000000000..2f6e49ea686caa68e996ec1250e7bfd775358fb0 --- /dev/null +++ b/docs/en/docs/StratoVirt/Install_StratoVirt.md @@ -0,0 +1,36 @@ +# Installing StratoVirt + +## Software and Hardware Requirements + +### Minimum Hardware Requirements + +- Processor architecture: Only the AArch64 and x86_64 processor architectures are supported. AArch64 requires ARMv8 or a later version and supports virtualization extension. x86_64 supports VT-x. + +- 2-core CPU +- 4 GiB memory +- 16 GiB available disk space + +### Software Requirements + +Operating system: openEuler 20.03_LTS_SP2 + + + +## Component Installation + +To use StratoVirt virtualization, it is necessary to install StratoVirt. Before the installation, ensure that the openEuler yum source has been configured. + +1. Run the following command as user root to install the StratoVirt components: + + ``` + # yum install stratovirt + ``` + + +2. Check whether the installation is successful. + + ``` + $ stratovirt -version + StratoVirt 0.3.0 + ``` + diff --git a/docs/en/docs/StratoVirt/Interconnect_isula.md b/docs/en/docs/StratoVirt/Interconnect_isula.md new file mode 100644 index 0000000000000000000000000000000000000000..19156f19e9392dd6acd0730fd1573f72dbdf4115 --- /dev/null +++ b/docs/en/docs/StratoVirt/Interconnect_isula.md @@ -0,0 +1,142 @@ +# Interconnecting with iSula Security Containers + + +## Overview + +To provide a better isolation environment for containers and improve system security, you can interconnect StratoVirt with iSula security containers. + +## Interconnecting with an iSula Security Container + +### **Prerequisites** + +iSulad and kata-containers have been installed, and iSulad supports the kata-runtime container runtime and devicemapper storage driver. + +The following describes how to install and configure iSulad and kata-containers. + +1. Configure the yum source and install iSulad and kata-containers as the **root** user. + + ```shell + # yum install iSulad + # yum install kata-containers + ``` + +2. Create and configure a storage device. + + You need to plan the disks, for example, **/dev/sdxx**, which will be formatted. + + ```shell + # pvcreate /dev/sdxx + # vgcreate isulaVG0 /dev/sdxx + # lvcreate --wipesignatures y -n thinpool isulaVG0 -l 95%VG + # lvcreate --wipesignatures y -n thinpoolmeta isulaVG0 -l 1%VG + # lvconvert -y --zero n -c 512K --thinpool isulaVG0/thinpool --poolmetadata isulaVG0/thinpoolmeta + ``` + + Add the following information to the **/etc/lvm/profile/isulaVG0-thinpool.profile** configuration file: + + ``` + activation { + thin_pool_autoextend_threshold=80 + thin_pool_autoextend_percent=20 + } + ``` + + Modify **storage-driver** and **storage-opts** in the **/etc/isulad/daemon.json** configuration file as follows. Set the default storage driver type **overlay** to **devicemapper**. + + ``` + "storage-driver": "devicemapper", + "storage-opts": [ + "dm.thinpooldev=/dev/mapper/isulaVG0-thinpool", + "dm.fs=ext4", + "dm.min_free_space=10%" + ], + ``` + +3. Restart isulad. + + ```shell + # systemctl daemon-reload + # systemctl restart isulad + ``` + +4. Check whether the iSula storage driver is successfully configured. + + ```shell + # isula info + ``` + + If the following information is displayed, the configuration is successful: + + ``` + Storage Driver: devicemapper + ``` + +5. Open the **/etc/isulad/daemon.json** file. If kata-runtime is not configured, set **runtime** to kata-runtime. + + ```json + "runtimes": { + "kata-runtime": { + "path": "/usr/bin/kata-runtime", + "runtimeArgs": [ + "--kata-config", + "/usr/share/defaults/kata-containers/configuration.toml" + ] + } + }, + ``` + + +### **Interconnection Guide** + +This section describes how to interconnect StratoVirt with kata-runtime in the iSula security container. + + +1. Create the **stratovirt.sh** script in any directory (for example, **/home**) and add the execute permission to the file as the **root** user. + + ```shell + # touch /home/stratovirt.sh + # chmod +x /home/stratovirt.sh + ``` + + The content of **stratovirt.sh** is as follows, which is used to specify the path of StratoVirt: + + ``` + #!/bin/bash + export STRATOVIRT_LOG_LEVEL=info # set log level which includes trace, debug, info, warn and error. + /usr/bin/stratovirt $@ + ``` + +2. Modify the kata configuration file (default path: **/usr/share/defaults/kata-containers/configuration.toml**). Set the Hypervisor type of the security container to **stratovirt**, kernel to the absolute path of the kernel image of StratoVirt, and initrd to the **initrd** image file of kata-containers. (If you use yum to install kata-containers, the two image files are downloaded and stored in the **/var/lib/kata/** directory by default. You can also use other images during the configuration.) + + The configuration reference is as follows: + + ```shell + [hypervisor.stratovirt] + path = "/home/stratovirt.sh" + kernel = "/var/lib/kata/vmlinux.bin" + initrd = "/var/lib/kata/kata-containers-initrd.img" + block_device_driver = "virtio-mmio" + use_vsock = true + enable_netmon = true + internetworking_model="tcfilter" + sandbox_cgroup_with_emulator = false + disable_new_netns = false + disable_block_device_use = false + disable_vhost_net = true + ``` + +3. Use the **root** permission and **isula** command to run the BusyBox security container and interconnect StratoVirt with it. + + ```shell + # isula run -tid --runtime=kata-runtime --net=none --name test busybox:latest sh + ``` + +4. Run the **isula ps** command to check whether the security container **test** is running properly. Then run the following command to access the container: + + ``` + # isula exec –ti test sh + ``` + + + + You can now run container commands in the **test** container. diff --git a/docs/en/docs/StratoVirt/Prepare_env.md b/docs/en/docs/StratoVirt/Prepare_env.md new file mode 100644 index 0000000000000000000000000000000000000000..df3f7290d4435498ac8b8669964d83ad7be23754 --- /dev/null +++ b/docs/en/docs/StratoVirt/Prepare_env.md @@ -0,0 +1,142 @@ +# Preparing the Environment + + +## Usage + +- StratoVirt can run on VMs with the x86_64 or AArch64 processor architecture. +- You are advised to compile, commission, and deploy StratoVirt on openEuler 20.03 LTS SP3. +- StratoVirt can run with non-root permissions. + +## Environment Requirements + +The following are required in the environment for running StratoVirt: + +- /dev/vhost-vsock device (for implementing the MMIO) +- nmap tool +- Kernel and rootfs images + + + +## Preparing Devices and Tools + +- To run StratoVirt, the MMIO device must be implemented. Therefore, before running StratoVirt, ensure that the `/dev/vhost-vsock` device exists. + + Check whether the device exists. + + ``` + $ ls /dev/vhost-vsock + /dev/vhost-vsock + ``` + + If the device does not exist, run the following command to generate it: + + ``` + $ modprobe vhost_vsock + ``` + + +- To use QMP commands, install the nmap tool first. After configuring the yum source, run the following command to install the tool: + + ``` + # yum install nmap + ``` + +## Preparing Images + +### Creating the Kernel Image + +StratoVirt of the current version supports only the PE kernel image of the x86_64 and AArch64 platforms. The kernel image in PE format can be generated by using the following method: + +1. Run the following commands to obtain the kernel source code of openEuler: + + ``` + $ git clone https://gitee.com/openeuler/kernel + $ cd kernel + ``` + +2. Run the following command to check and switch the kernel version to 4.19: + + ``` + $ git checkout kernel-4.19 + ``` + +3. Configure and compile the Linux kernel. It is better to use the recommended configuration file ([Obtain configuration file](https://gitee.com/openeuler/stratovirt/tree/master/docs/kernel_config)). Copy it to the kernel directory, and rename it as `.config`. You can also run the following command to configure the kernel as prompted: + + ``` + $ make menuconfig + ``` + +4. Run the following command to create and convert the kernel image to the PE format. The converted image is `vmlinux.bin`. + + ``` + $ make -j vmlinux && objcopy -O binary vmlinux vmlinux.bin + ``` + +5. If you want to use the kernel in bzImzge format on the x86 platform, run the following command: + + ``` + $ make -j bzImage + ``` + + +## Creating the Rootfs Image + +The rootfs image is a file system image. When StratoVirt is started, the ext4 image with init can be loaded. To create an ext4 rootfs image, perform the following steps: + +1. Prepare a file with a proper size (for example, create a file with the size of 10 GiB in `/home`). + + ``` + $ cd /home + $ dd if=/dev/zero of=./rootfs.ext4 bs=1G count=10 + ``` + +2. Create an empty ext4 file system on this file. + + ``` + $ mkfs.ext4 ./rootfs.ext4 + ``` + +3. Mount the file image. Create the `/mnt/rootfs` directory and mount `rootfs.ext4` to the directory as user `root`. + + ``` + $ mkdir /mnt/rootfs + # Return to the directory where the file system is created, for example, **/home**. + $ cd /home + $ sudo mount ./rootfs.ext4 /mnt/rootfs && cd /mnt/rootfs + ``` + +4. Obtain the latest alpine-mini rootfs of the corresponding processor architecture. + + + ``` + $ arch=`uname -m` + $ wget http://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/$arch/alpine- minirootfs-3.13.0-$arch.tar.gz -O alpine-minirootfs.tar.gz + $ tar -zxvf alpine-minirootfs.tar.gz + $ rm alpine-minirootfs.tar.gz + ``` + + +5. Run the following command to create a simple /sbin/init for the ext4 file image: + + ``` + $ rm sbin/init; touch sbin/init && cat > sbin/init < ![](./figures/note.png) +> +> If both methods are used, the command line configuration mode is used. +> +> In this document, **/path/to/socket** indicates the socket file in the user-defined path. + +### Specifications + +- Number of VM CPUs: [1, 254] +- VM memory size: [256 MB, 512 GB] +- Number of VM disks (including hot plugged-in disks): [0, 4] +- Number of VM NICs (including hot plugged-in NICs): [0, 2] +- The VM console device supports only one connection. +- On the x86_64 platform, a maximum of 11 MMIO devices can be configured. You are advised to configure a maximum of four other devices except disks and NICs. On the AArch64 platform, a maximum of 160 MMIO devices can be configured. You are advised to configure a maximum of 12 other devices except disks and NICs. + +### Minimal Configuration + +The minimum configuration for running StratoVirt is as follows: + +- Use the Linux kernel image in PE or bzImage format (x86_64 only). +- Set the rootfs image as the virtio-blk device and add it to kernel parameters. +- Use api-channel to control StratoVirt. +- To use ttyS0 for login, add a serial port to the startup command line and add ttyS0 to kernel parameters. + +### Command Line Configuration + +**Overview** + +Command line configuration directly specifies the VM configuration content using command line parameters. + +**Command Format** + +The format of the command configured by running cmdline is as follows: + +**$ /path/to/stratovirt** *- [Parameter 1] [Option]-[Parameter 2] [Option]...* + +**Usage Instructions** + +1. To ensure that the socket required by the api-channel can be created, run the following command to clear the environment: + + ``` + $rm [parameter] *[user-defined socket file path]* + ``` + + +2. Run the cmdline command. + + ``` + $/path/to/stratovirt - *[Parameter 1] [Parameter option] - [Parameter 2] [Parameter option]*... + ``` + +**Parameters** + +The following table describes the parameters of the cmdline command. + +Table 1 Parameters in the command line + +| Parameter| Option| Description| +| ---------------- | :----------------------------------------------------------- | ------------------------------------------------------------ | +| -name | *VMname* | Configures the VM name (a string of 1 to 255 characters).| +| -machine | `[type=vm_type]` `[,dump-guest-core=on]`
`[,mem-share=off]` | Configures the VM type. For details, see [VM Types](#vm-types).| +| -kernel | /path/to/vmlinux.bin | Configures the kernel image.| +| -append | console=ttyS0 root=/dev/vda
reboot=k panic=1 rw | Configures kernel command line parameters.| +| -initrd | /path/to/initrd.img | Configures the initrd file.| +| -smp | [cpus=] CPU count| Configures the number of CPUs. The value range is [1, 254].| +| -m | Memory size (in bytes), memory size (in MB), and memory size (in GB)| Configures the memory size. The value ranges from 256 MB to 512 GB.| +| -drive | id=rootfs,file=/path/to/rootfs
[,readonly=false,
direct=true,
serial=serial_num,
>iothread=iothread1,
/iops=200] | Configures the virtio-blk device. For details, see [Disk Configuration](#disk-configuration).| +| -netdev | id=iface_id,netdev=tap0[,mac=mac_address,
iothread=iothread2] | Configures the virtio-net device. For details, see [NIC Configuration](#nic-configuration).| +| -chardev | id=console_id,path=/path/to/socket | Configures virtio-console. For details, see [Console Device Configuration](#console-device-configuration).| +| -device | vsock,id=vsock_id,guest-cid=3 | Configures vhost-vsock. For details, see [vsock Device Configuration](#vsock-device-configuration).| +| -api-channel | unix:/path/to/socket | Configures api-channel. Before running api-channel, ensure that the socket file does not exist.| +| -serial | stdio | Configures the serial port device.| +| -D | /path/to/logfile | Configures the log file.| +| -pidfile | /path/to/pidfile | Configures the pid file. This parameter must be used together with **-daemonize**. Ensure that the pid file does not exist before running the script.| +| -disable-seccomp | N/A| Disables Seccomp. Seccomp is enabled by default.| +| -daemonize | N/A| Enables daemon processes.| +| -iothread | id="iothread1" | Configures the iothread thread. For details, see [iothread Configuration](#iothread-configuration).| +| -balloon | deflate-on-oom=true | Configures the balloon device. For details, see [Balloon Device Configuration](#balloon-device-configuration).| +| -mem-path | /dev/hugepages | Configures the memory huge pages. For details, see chapter "Best Practices."| +| -rng | random_file=/path/to/random_file
[,bytes_per_sec=1000000] | Configures the virtio-rng device. For details, see [rng Device Configuration](#rng-device-configuration).| + + +**Configuration Example** + +1. Delete the socket file to ensure that the api-channel can be created. + + ``` + $ rm -f /tmp/stratovirt.socket + ``` + + +2. Run StratoVirt. + + ``` + $ /path/to/stratovirt \ + -kernel /path/to/vmlinux.bin \ + -append console=ttyS0 root=/dev/vda rw reboot=k panic=1 \ + -drive file=/home/rootfs.ext4,id=rootfs,readonly=false \ + -api-channel unix:/tmp/stratovirt.socket \ + -serial stdio + ``` + + After the running is successful, the VM is created and started based on the specified configuration parameters. + +### JSON Configuration + +**Overview** + +Configuration using the JSON file indicates that when running StratoVirt to create a VM, the system reads the specified JSON file that contains the VM configuration. + +**Command Format** + +The format of the command for configuring a VM using the JSON file is as follows. In this command, **/path/to/json** indicates the path of the corresponding file. + +**$ /path/to/stratovirt -config** */path/to/json -[Parameter] [Option]* + +**Usage Instructions** + +1. Write the VM configuration to the JSON file. + +2. Run the StratoVirt command to create a VM. + + ``` + $ /path/to/stratovirt -config /path/to/json -*[Parameter] [Option]* + ``` + +**Parameters** + +The following table describes the configurable parameters in the JSON file. + +**Table 2** Parameters in the configuration file + +| Parameter| Option| Description| +| -------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| boot-source | "kernel_image_path": "/path/to/vmlinux.bin","boot_args": "console=ttyS0 reboot=k panic=1 pci=off tsc=reliable ipv6.disable=1 root=/dev/vda quiet","initrd_fs_path": "/path/to/initrd.img" | Configures the kernel image and kernel parameters. The `initrd_fs_path` parameter is optional.| +| machine-config | "type": "MicroVm","vcpu_count": 4,"mem_size": 805306368,"dump_guest_core": false,"mem-share": false,"mem_path":"/path/to/backend" | Configures the virtual CPU and memory size. The `dump_guest_core`, `mem-path` and `mem-share` parameters are optional.| +| drive | "drive_id": "rootfs","path_on_host": "/path/to/rootfs.ext4","read_only": false,"direct": true,"serial_num": "xxxxx","iothread": "iothread1","iops": 200 | Configures the virtio-blk disk. The `serial_num`, `iothread`, and `iops` parameters are optional.| +| net | "iface_id": "net0","host_dev_name": "tap0","mac": "xx:xx:xx:xx:xx:xx","iothread": "iothread1" | Configures the virtio-net NIC. The `mac` and `iothread` parameters are optional.| +| console | "console_id": "charconsole0","socket_path": "/path/to/socket" | Configures the virtio-console serial port. Before running the serial port, ensure that the socket file does not exist.| +| vsock | "vsock_id": "vsock0","guest_cid": 3 | Configures the virtio-vsock device.| +| serial | "stdio": true | Configures the serial port device.| +| iothread | "id": "iothread1" | Configures the ID of the iothread for creating a thread named `iothread1`.| +| balloon | "deflate_on_oom": true | Configures the auto deflate feature of balloon.| +|rng | "random_file":"/dev/random",
"bytes_per_sec":1000000000 | Configures the virtio-rng device.| + + +The following table lists the parameters running in JSON. + +**Table 3** Parameters running in JSON + +| Parameter| Option| Description| +| ---------------- | -------------------- | ------------------------------------------------------------ | +| -config | /path/to/json | Configures the file path.| +| -api-channel | unix:/path/to/socket | Configures api-channel. Before running api-channel, ensure that the socket file does not exist.| +| -D | /path/to/logfile | Configures the log file.| +| -pidfile | /path/to/pidfile | Configures the PID file, which must be used together with daemonize. Ensure that the pid file does not exist before running the script.| +| -disable-seccomp | N/A | Disables Seccomp. Seccomp is enabled by default.| +| -daemonize | N/A | Enables daemon processes.| + +**Configuration Example** + +1. Create a JSON file, for example, **/home/config.json**. The file content is as follows: + +``` +{ + "boot-source": { + "kernel_image_path": "/path/to/vmlinux.bin", + "boot_args": "console=ttyS0 reboot=k panic=1 pci=off tsc=reliable ipv6.disable=1 root=/dev/vda quiet rw" + }, + "machine-config": { + "type": "MicroVm", + "vcpu_count": 2, + "mem_size": 268435456 + }, + "drive": [ + { + "drive_id": "rootfs", + "path_on_host": "/path/to/rootfs", + "serial_num": "11111111", + "direct": true, + "read_only": false, + "iops": 200000, + "iothread": "iothread2" + } + ], + "net": [ + { + "iface_id": "net0", + "host_dev_name": "tap0", + "mac": "0e:90:df:9f:a8:88", + "iothread": "iothread1" + } + ], + "console": [ + { + "console_id": "charconsole0", + "socket_path": "/path/to/console.socket" + } + ], + "serial": { + "stdio": true + }, + "vsock": { + "vsock_id": "vsock-123321132", + "guest_cid": 4 + }, + "iothread": [ + {"id": "iothread1"}, + {"id": "iothread2"} + ] +} +``` + +2. Run StratoVirt and read the JSON file to create and start the VM. + +``` +$ /path/to/stratovirt \ + -config /home/config.json \ + -api-channel unix:/tmp/stratovirt.socket +``` + +After the command is executed successfully, the VM is created and started successfully. + +## Configuration Description + +### VM Types + +You can run the **-machine** parameter to specify the type of the VM to be started. + +Parameters + +- **type** (optional): type of the VM to be started. Currently, only **MicroVm** is supported. The default value is **MicroVM**. +- **dump-guest-core** (optional): whether to dump the VM memory when a process panics. +- **mem-share** (optional): whether to share memory with other processes. + +### Disk Configuration + +VM disk configuration includes the following configuration items: + +- **drive_id**: disk ID. +- **path_on_host**: disk path. +- **serial_num** (optional): serial number of the disk. +- **read_only** (optional): whether the disk is read-only. +- **direct** (optional): whether to open the disk in O_DIRECT mode. +- **iothread** (optional): iothread attribute. +- **iops** (optional): disk QoS for limiting disk I/O operations. + +The following describes the **iops** and **iothread** configuration items: + +#### **iops**: disk QoS. + +##### Introduction + +QoS is short for quality of service. In cloud scenarios, multiple VMs are started on a single host. Because the total disk access bandwidth of the host is limited, when a VM has heavy disk access pressure, it will occupy the access bandwidth of other VMs. As a result, the I/O performance of other VMs will be affected. To reduce the impact between VMs, you can configure QoS to limit the disk access rate of the VMs. + +##### Precautions + +- Currently, QoS supports the configuration of disk IOPS. +- The value range of IOPS is [0, 1000000]. The value **0** indicates that the IOPS is not limited. The actual IOPS does not exceed the preset value or the upper limit of the actual backend disk performance. +- Only the average IOPS can be limited. Instantaneous burst traffic cannot be limited. + +##### Configuration Methods + +Usage: + +**CLI:** + +``` +-drive xxx,iops=200 +``` + +Parameters: + +- **iops**: I/O delivery speed of the disk on a VM after IOPS is configured. It does not exceed the value of this parameter. +- *xxx*: other settings of the disk. + +JSON Configuration + +``` +{ + ... + "drive": [ + { + "drive_id": "rootfs", + "path_on_host": "/path/to/block", + ... + "iops": 200 + } + ], + ... +} +``` + +#### **iothread** + +For details about the iothread configuration, see [iothread Configuration](#iothread-configuration). + +### NIC Configuration + +VM NIC configuration includes the following configuration items: + +- **iface_id**: unique device ID. +- **host_dev_name**: name of the tap device on the host. +- **mac** (optional): MAC address of the VM. +- **iothread** (optional): iothread attribute of the disk. + +For details about the iothread configuration of the NIC, see [iothread Configuration](#iothread-configuration). + +### Console Device Configuration + +virtio-console is a universal serial port device used to transmit data between the guest and host. The configuration items of the console device are as follows: + +- **console_id**: unique device ID. +- **socket_path**: path of the virtio console file. + +Ensure that the console file does not exist before starting StratoVirt. + +### vsock Device Configuration + +The vsock is also a device for communication between the host and guest. It is similar to the console but has better performance. The configuration items are as follows: + +- **vsock_id**: unique device ID. +- **guest_cid**: unique context ID. + +### iothread Configuration + +#### Introduction + +After a VM with the iothread configuration is started on StratoVirt, threads independent of the main thread are started on the host. These independent threads can be used to process I/O requests of devices, improving the device I/O performance and reducing the impact on message processing on the management plane. + +#### Precautions + +- A maximum of eight iothreads can be configured. +- The iothread attribute can be configured for disks and NICs. +- iothreads occupy CPU resources of the host. When the I/O pressure is high in a VM, the CPU resources occupied by a single iothread depend on the disk access speed. For example, a common SATA disk occupies less than 20% CPU resources. + +#### Creating an iothread + +Usage: + +**CLI:** + +```shell +-iothread id=iothread1 -iothread id=iothread2 +``` + +**JSON:** + +```json +"iothread": [ + {"id": "iothread1"}, + {"id": "iothread2"} + ] +``` + +Parameters: + +- **id**: identifies an iothread. This ID can be set to the iothread attribute of the disk or NIC. If iothread is configured in the startup parameter, the thread with the specified ID is started on the host after the VM is started. + +#### Configuring the iothread Attribute for a Disk or NIC + +Usage: + +**CLI-based Configuration** + +``` +# Disks +-drive xxx,iothread=iothread1 +# NICs +-netdev xxx,iothread=iothread2 +``` + +Parameters: + +1. **iothread**: Set this parameter to the ID of the iothread, indicating the thread that processes the I/O of the local device. +2. *xxx*: other configurations of the disk or NIC. + +**JSON Configuration** + +```json +# Disks +{ + ... + "drive": [ + { + "drive_id": "rootfs", + "path_on_host": "/path/to/block", + ... + "iothread": "iothread1", + } + ], + ... +} +# NICs +{ + ... + "net": [ + { + "iface_id": "tap0", + "host_dev_name": "tap0", + "mac": "12:34:56:78:9A:BC", + "iothread": "iothread2" + } + ] +} +``` + +### Balloon Device Configuration + +#### Introduction + +During running of a VM, the balloon driver in it occupies or releases memory to dynamically adjust the VM's available memory, achieving memory elasticity. + +#### Precautions + +- Before enabling balloon, ensure that the page size of the guest is the same as that of the host. +- The balloon feature must be enabled for the guest kernel. +- When memory elastic scaling is enabled, slight frame freezing may occur in the VM and the memory performance may deteriorate. + +#### Mutually exclusive features + +- This feature is mutually exclusive with huge page memory. +- In the x86 architecture, the number of interrupts is limited. Therefore, the total number of balloon devices and other virtio devices cannot exceed 11. By default, four block devices, two net devices, and one serial port device are used. + +#### Specifications + +- Each VM can be configured with only one balloon device. + +#### Configuration Methods + +- CLI + +``` +-balloon deflate-on-oom=true +``` + +- JSON file + + ```json + { + "balloon": { + "deflate_on_oom": true + }, + ... + } + ``` + +>![img](./figures/note.png) +>1. The value of **deflate-on-oom** is of the Boolean type, indicating whether to enable the auto deflate feature. When this feature is enabled, if the balloon device has reclaimed some memory, it automatically releases the memory to the guest when the guest requires the memory. If this feature is disabled, the memory is not automatically returned. +>2. When running the QMP command to reclaim the VM memory, ensure that the VM has sufficient memory to keep basic running. Otherwise, some operations may time out and the VM cannot apply for idle memory. +>3. If the huge page feature is enabled in the VM, the balloon device cannot reclaim the memory occupied by the huge pages. + + +>![](./public_sys-resources/icon-notice.gif) **Notice** +>If **deflate-on-oom** is set to **false**, when the guest memory is insufficient, the balloon device does not automatically release the memory. As a result, the guest OOM may occur, the processes may be killed, and even the VM cannot run properly. + + +### rng Device Configuration + +virtio-rng is a paravirtualized random number generator that generates hardware random numbers for the guest. The virtio-rng device contains the following configuration items: + +- **random_file**: path of the character device used to generate random numbers on the host, for example, **/dev/random**. +- **bytes_per_sec** (optional): maximum number of characters obtained from a character device per second. + +#### Precautions + +- If the **bytes_per_sec** configuration item is not set, the number of characters obtained from a character device per second is not limited. +- If it needs to be configured, the value range is [64, 1000000000]. It is recommended that its value not be too small to prevent a slow rate of obtaining random number characters. +- **bytes_per_sec** can only limit the average number of random number characters, but cannot limit the burst traffic. +- When configuring the virtio rng device, check whether the random numbers are sufficient to avoid VM freezing. For example, if the character device path is **/dev/random**, you can run the **/proc/sys/kernel/random/entropy_avail** command to view the size of random numbers. diff --git a/docs/en/docs/StratoVirt/VM_management.md b/docs/en/docs/StratoVirt/VM_management.md new file mode 100644 index 0000000000000000000000000000000000000000..e36f76fc742b11f018ef1f662c213af59467bebd --- /dev/null +++ b/docs/en/docs/StratoVirt/VM_management.md @@ -0,0 +1,312 @@ +# Managing VMs + + +## Overview + +StratoVirt allows you to query VM information and manage VM resources and lifecycle with QMP. To query the information about a VM, connect to the VM first. + +## Querying VM Information + +### Introduction + +StratoVirt can be used to query the VM status, vCPU topology, and vCPU online status. + +### Querying VM Status + +Run the **query-status** command to query the running status of a VM. + +- Usage: + + **{ "execute": "query-status" }** + +- Example: + +``` +<- { "execute": "query-status" } +-> { "return": { "running": true,"singlestep": false,"status": "running" } +``` + +### Querying Topology Information + +Run the **query-cpus** command to query the topologies of all CPUs. + +- Usage: + + **{ "execute": "query-cpus" }** + +- Example: + +``` +<- { "execute": "query-cpus" } +-> {"return":[{"CPU":0,"arch":"x86","current":true,"halted":false,"props":{"core-id":0,"socket-id":0,"thread-id":0},"qom_path":"/machine/unattached/device[0]","thread_id":8439},{"CPU":1,"arch":"x86","current":true,"halted":false,"props":{"core-id":0,"socket-id":1,"thread-id":0},"qom_path":"/machine/unattached/device[1]","thread_id":8440}]} +``` + +### Querying vCPU Online Status + +Run the **query-hotpluggable-cpus** command to query the online/offline statuses of all vCPUs. + +- Usage: + + **{ "execute": "query-hotpluggable-cpus" }** + +- Example: + +``` +<- { "execute": "query-hotpluggable-cpus" } +-> {"return":[{"props":{"core-id":0,"socket-id":0,"thread-id":0},"qom-path":"/machine/unattached/device[0]","type":"host-x86-cpu","vcpus-count":1},{"props":{"core-id":0,"socket-id":1,"thread-id":0},"qom-path":"/machine/unattached/device[1]","type":"host-x86-cpu","vcpus-count":1}]} +``` + +Online vCPUs have the `qom-path` item, while offline vCPUs do not. + +## Managing VM Lifecycle + +### Introduction + +StratoVirt can manage the lifecycle of a VM, including starting, suspending, resuming, and exiting the VM. + +### Creating and Starting a VM + +As described in the "Configuring VMs" chapter, you can specify the VM configuration by using command line parameters or a JSON file, and run the stratovirt command on the host to create and start a VM. + +- When using the command line parameters to specify the VM configuration, run the following command to create and start the VM: + +``` +$/path/to/stratovirt - *[Parameter 1] [Parameter option] - [Parameter 2] [Parameter option]*... +``` + +- When using the JSON file to specify the VM configuration, run the following command to create and start the VM: + +``` +$ /path/to/stratovirt \ + -config /path/to/json \ + -api-channel unix:/path/to/socket +``` + +In the preceding commands, **/path/to/json** indicates the path of the JSON configuration file.**/path/to/socket** indicates the specified socket file, for example, **/tmp/stratovirt.socket**. After the preceding commands are executed, the socket file is automatically created. To properly start the VM, ensure that the socket file does not exist before creating it. + +> ![](./figures/note.png) +> +> After the VM is started, there are two NICs: eth0 and eth1. The two NICs are reserved for hot plugging: eth0 first and then eth1. Currently, only two virtio-net NICs can be hot plugged. + +### Connecting to a VM + +StratoVirt uses QMP to manage VMs. To suspend, resume, or exit a VM, connect it the StratoVirt through QMP first. + +Open a new CLI (CLI B) on the host and run the following command to connect to the api-channel as the **root** user: + +``` +# ncat -U /path/to/socket +``` + +After the connection is set up, you will receive a greeting message from StratoVirt, as shown in the following: + +``` +{"QMP":{"version":{"qemu":{"micro":1,"minor":0,"major":4},"package":""},"capabilities":[]}} +``` + +You can now manage the VM by entering the QMP commands in CLI B. + +> ![](./figures/note.png) +> +> QMP provides stop, cont, quit, and query-status commands to manage and query VM statuses. +> +> All QMP commands for managing VMs are entered in CLI B. `<-` indicates the command input, and `->` indicates the QMP returned result. + +### Suspending a VM + +QMP provides the stop command to suspend a VM, that is, to suspend all vCPUs of the VM. The command syntax is as follows: + +**{"execute":"stop"}** + +**Example:** + +The stop command and the command output are as follows: + +``` +<- {"execute":"stop"} +-> {"event":"STOP","data":{},"timestamp":{"seconds":1583908726,"microseconds":162739}} +-> {"return":{}} +``` + +### Restoring a VM + +QMP provides the cont command to resume a suspended VM, that is, to resume all vCPUs of the VM. The command syntax is as follows: + +**{"execute":"cont"}** + +**Example:** + +The cont command and the command output are as follows: + +``` +<- {"execute":"cont"} +-> {"event":"RESUME","data":{},"timestamp":{"seconds":1583908853,"microseconds":411394}} +-> {"return":{}} +``` + +### Exiting a VM + +QMP provides the quit command to exit a VM, that is, to exit the StratoVirt process. The command syntax is as follows: + +**{"execute":"quit"}** + +**Example:** + +``` +<- {"execute":"quit"} +-> {"return":{}} +-> {"event":"SHUTDOWN","data":{"guest":false,"reason":"host-qmp-quit"},"timestamp":{"ds":1590563776,"microseconds":519808}} +``` + +## Managing VM Resources + +### Hot-Pluggable Disks + +StratoVirt allows you to adjust the number of disks when a VM is running. That is, you can add or delete VM disks without interrupting services. + +#### Hot Plugged-in Disks + +**Usage:** + +``` +{"execute": "blockdev-add", "arguments": {"node-name": "drive-0", "file": {"driver": "file", "filename": "/path/to/block"}, "cache": {"direct": true}, "read-only": false}} +{"execute": "device_add", "arguments": {"id": "drive-0", "driver": "virtio-blk-mmio", "addr": "0x1"}} +``` + +**Parameters:** + +- The value of **node-name** in **blockdev-add** must be the same as the value of **id** in **device_add**. For example, both values are **drive-0** in the preceding example. + +- **/path/to/block** is the image path of the hot plugged-in disks. It cannot be the path of the disk image that boots the rootfs. +- For **addr**, **0x0** is mapped to **vda** of the VM, **0x1** is mapped to **vdb**, and so on. To be compatible with the QMP protocol, **addr** can be replaced by **lun**, but **lun=0** is mapped to the **vdb** of the client. +- StratoVirt supports a maximum of four virtio-blk disks. Note this when hot plugging in disks. + +**Example:** + +``` +<- {"execute": "blockdev-add", "arguments": {"node-name": "drive-0", "file": {"driver": "file", "filename": "/path/to/block"}, "cache": {"direct": true}, "read-only": false}} +-> {"return": {}} +<- {"execute": "device_add", "arguments": {"id": "drive-0", "driver": "virtio-blk-mmio", "addr": "0x1"}} +-> {"return": {}} +``` + +#### Hot Plugged-out Disks + +**Usage:** + +**{"execute": "device_del", "arguments": {"id":"drive-0"}}** + +**Parameters:** + +**id** indicates the ID of the hot plugged-out disk. + +**Example:** + +``` +<- {"execute": "device_del", "arguments": {"id": "drive-0"}} +-> {"event":"DEVICE_DELETED","data":{"device":"drive-0","path":"drive-0"},"timestamp":{"seconds":1598513162,"microseconds":367129}} +-> {"return": {}} +``` + +### Hot-Pluggable NICs + +StratoVirt allows you to adjust the number of NICs when a VM is running. That is, you can add or delete VM NICs without interrupting services. + +#### Hot Plugged-in NICs + +**Preparations (Requiring the root Permission)** + +1. Create and enable a Linux bridge. For example, if the bridge name is **qbr0**, run the following command: + +```shell +# brctl addbr qbr0 +# ifconfig qbr0 up +``` + +2. Create and enable a tap device. For example, if the tap device name is **tap0**, run the following command: + +```shell +# ip tuntap add tap0 mode tap +# ifconfig tap0 up +``` + +3. Add the tap device to the bridge. + +```shell +# brctl addif qbr0 tap0 +``` + + +**Usage:** + +``` +{"execute":"netdev_add", "arguments":{"id":"net-0", "ifname":"tap0"}} +{"execute":"device_add", "arguments":{"id":"net-0", "driver":"virtio-net-mmio", "addr":"0x0"}} +``` + +**Parameters:** + +- **id** in **netdev_add** must be the same as that in **device_add**. **ifname** is the name of the backend tap device. + +- For **addr**, **0x0** is mapped to **eth0** of the VM, **0x1** is mapped to **eth1**, and so on. + +- StratoVirt supports a maximum of two virtio-net NICs. Therefore, pay attention to the specification restrictions when hot plugging in NICs. + +**Example:** + +``` +<- {"execute":"netdev_add", "arguments":{"id":"net-0", "ifname":"tap0"}} +-> {"return": {}} +<- {"execute":"device_add", "arguments":{"id":"net-0", "driver":"virtio-net-mmio", "addr":"0x0"}} +-> {"return": {}} +``` + +**addr:0x0** corresponds to **eth0** in the VM. + +#### Hot Plugged-out NICs + +**Usage:** + +**{"execute": "device_del", "arguments": {"id": "net-0"}}** + +**Parameters:** + +**id**: NIC ID, for example, **net-0**. + +**Example:** + +``` +<- {"execute": "device_del", "arguments": {"id": "net-0"}} +-> {"event":"DEVICE_DELETED","data":{"device":"net-0","path":"net-0"},"timestamp":{"seconds":1598513339,"microseconds":97310}} +-> {"return": {}} +``` + +## Using Ballon Devices + +The balloon device is used to reclaim idle memory from a VM. It called by running the QMP command. + +**Usage:** + +``` +{"execute": "balloon", "arguments": {"value": 2147483648‬}} +``` + +**Parameters:** + +- **value**: guest memory size to be set. The unit is byte. Memory compression is performed by page. If the value is greater than the memory value configured during VM startup, the latter is used. + +**Example:** + +The memory size configured during VM startup is 4 GiB. If the idle memory of the VM queried by running the free command is greater than 2 GiB, you can run the QMP command to set the guest memory size to 2147483648 bytes. + +``` +<- {"execute": "balloon", "arguments": {"value": 2147483648‬}} +-> {"return": {}} +``` + +Query the actual memory of the VM: + +``` +<- {"execute": "query-balloon"} +-> {"return":{"actual":2147483648}} +``` diff --git a/docs/en/docs/StratoVirt/figures/StratoVirt_architecture.png b/docs/en/docs/StratoVirt/figures/StratoVirt_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1a07a5458b2b2a61ca062d8ec68d533dd6df20 Binary files /dev/null and b/docs/en/docs/StratoVirt/figures/StratoVirt_architecture.png differ diff --git a/docs/en/docs/StratoVirt/figures/note.png b/docs/en/docs/StratoVirt/figures/note.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5ed3f7beeb01e6a48707c4806606b41d687e22 Binary files /dev/null and b/docs/en/docs/StratoVirt/figures/note.png differ diff --git a/content/zh/docs/A-Tune/public_sys-resources/icon-caution.gif b/docs/en/docs/StratoVirt/public_sys-resources/icon-caution.gif similarity index 100% rename from content/zh/docs/A-Tune/public_sys-resources/icon-caution.gif rename to docs/en/docs/StratoVirt/public_sys-resources/icon-caution.gif diff --git a/content/zh/docs/A-Tune/public_sys-resources/icon-danger.gif b/docs/en/docs/StratoVirt/public_sys-resources/icon-danger.gif similarity index 100% rename from content/zh/docs/A-Tune/public_sys-resources/icon-danger.gif rename to docs/en/docs/StratoVirt/public_sys-resources/icon-danger.gif diff --git a/content/zh/docs/A-Tune/public_sys-resources/icon-note.gif b/docs/en/docs/StratoVirt/public_sys-resources/icon-note.gif similarity index 100% rename from content/zh/docs/A-Tune/public_sys-resources/icon-note.gif rename to docs/en/docs/StratoVirt/public_sys-resources/icon-note.gif diff --git a/content/zh/docs/A-Tune/public_sys-resources/icon-notice.gif b/docs/en/docs/StratoVirt/public_sys-resources/icon-notice.gif similarity index 100% rename from content/zh/docs/A-Tune/public_sys-resources/icon-notice.gif rename to docs/en/docs/StratoVirt/public_sys-resources/icon-notice.gif diff --git a/content/zh/docs/A-Tune/public_sys-resources/icon-tip.gif b/docs/en/docs/StratoVirt/public_sys-resources/icon-tip.gif similarity index 100% rename from content/zh/docs/A-Tune/public_sys-resources/icon-tip.gif rename to docs/en/docs/StratoVirt/public_sys-resources/icon-tip.gif diff --git a/content/zh/docs/A-Tune/public_sys-resources/icon-warning.gif b/docs/en/docs/StratoVirt/public_sys-resources/icon-warning.gif similarity index 100% rename from content/zh/docs/A-Tune/public_sys-resources/icon-warning.gif rename to docs/en/docs/StratoVirt/public_sys-resources/icon-warning.gif diff --git a/docs/en/docs/Virtualization/LibcarePlus.md b/docs/en/docs/Virtualization/LibcarePlus.md new file mode 100644 index 0000000000000000000000000000000000000000..7a1c590c541b7e44fb1d0d46568339149650beb4 --- /dev/null +++ b/docs/en/docs/Virtualization/LibcarePlus.md @@ -0,0 +1,381 @@ +# LibcarePlus + + + +- [LibcarePlus](#libcareplus) + - [Overview](#overview) + - [Hardware and Software Requirements](#hardware-and-software-requirements) + - [Precautions and Constraints](#precautions-and-constraints) + - [Installing LibcarePlus](#installing-libcareplus) + - [Software Installation Dependencies](#software-installation-dependencies) + - [Installing LibcarePlus](#installing-libcareplus-1) + - [Creating LibcarePlus Hot Patches](#creating-libcareplus-hot-patches) + - [Introduction](#introduction) + - [Manual Creation](#manual-creation) + - [Creation Through a Script](#creation-through-a-script) + - [Applying the LibcarePlus Hot Patch](#applying-the-libcareplus-hot-patch) + - [Preparation](#preparation) + - [Loading the Hot Patch](#loading-the-hot-patch) + - [Uninstalling the Hot Patch](#uninstalling-the-hot-patch) + + + +## Overview + +LibcarePlus is a hot patch framework for user-mode processes. It can perform hot patch operations on target processes running on the Linux system without restarting the processes. Hot patches can be used to fix CVEs and urgent bugs that do not interrupt application services. + +## Hardware and Software Requirements + +The following software and hardware requirements must be met to use LibcarePlus on openEuler: + +- Currently, only the x86 architecture is supported. + +- LibcarePlus can run on any Linux distribution that supports **libunwind**, **elfutils**, and **binutils**. However, this feature has been verified only on openEuler 20.03 LTS SP1. + +## Precautions and Constraints + +When using LibcarePlus, comply with the following hot patch specifications and constraints: + +- Only the code written in the C language is supported. The assembly language is not supported. +- Only user-mode programs are supported. Dynamic library patches are not supported. +- The code file name must comply with the C language identifier naming specifications. That is, the code file name consists of letters (A-Z and a-z), digits (0-9), and underscores (_) but the first character cannot be a digit. Special characters such as hyphens (-) and dollar signs ($) are not allowed. +- Incremental patches are not supported. That is, the second patch can be loaded only after the original patch is uninstalled. +- Automatic patch loading is not supported. +- Patch query is not supported. +- The output and input parameters of the target function for which the hot patch is installed cannot be added or deleted. +- The static function patch is restricted by the symbol table that can find the function in the system. +- The dynamic library hot patch can be installed only for the process that calls the dynamic library. +- Hot patches are not supported in the following scenarios: + - Infinite loop function, non-exit function, inline function, initialization function, and non-maskable interrupt (NMI) function + - Replacing global variables + - Modifying the header file + - Changing (adding, deleting, or modifying) data structure members + - Dynamic library, static function, and static variables + - Modifying global variables, TLS variables, and RCU variables + - Modifying the C files that contain GCC macros such as __LINE__ and __FILE__ + - Modifying the Intel vector assembly instruction + +## Installing LibcarePlus + +### Software Installation Dependencies + +The LibcarePlus running depends on **libunwind**, **elfutils**, and **binutils**. On the openEuler system configured with the yum repo, you can run the following commands to install the software on which LibcarePlus depends: + +``` shell +$ sudo yum install -y binutils elfutils elfutils-libelf-devel libunwind-devel +``` + +#### Installing LibcarePlus + +```shell +$ yum install LibcarePlus -y +``` + +Check whether LibcarePlus is installed. + +``` shell +$ libcare-ctl -help +usage: libcare-ctl [options] [args] + +Options: + -v - verbose mode + -h - this message + +Commands: + patch - apply patch to a user-space process + unpatch- unapply patch from a user-space process + info - show info on applied patches + server - listen on a unix socket for commands +``` + +## Creating LibcarePlus Hot Patches + +### Introduction + +LibcarePlus hot patch creation methods: + +- Manual creation +- Creation through a script + +The process of manually creating a hot patch is complex. For a project with a large amount of code, for example, QEMU, it is extremely difficult to manually create a hot patch. You are advised to use the script provided by LibcarePlus to generate a hot patch file with one click. + +#### Manual Creation + +The following takes the original file foo.c and the patch file bar.c as examples to describe how to manually create a hot patch. + +1. Prepare the original file and patch file written in the C language. For example, foo.c and bar.c. + +
+ Expand foo.c +

+ + ``` c + // foo.c + #include + #include + + void print_hello(void) + { + printf("Hello world!\n"); + } + + int main(void) + { + while (1) { + print_hello(); + sleep(1); + } + } + ``` + +

+
+ +
+ Expand bar.c +

+ + ``` c + // bar.c + #include + #include + + void print_hello(void) + { + printf("Hello world %s!\n", "being patched"); + } + + int main(void) + { + while (1) { + print_hello(); + sleep(1); + } + } + ``` + +

+
+ +2. Build the original file and patch file to obtain the assembly files **foo.s** and **bar.s**. + + ``` shell + $ gcc -S foo.c + $ gcc -S bar.c + $ ls + bar.c bar.s foo.c foo.s + ``` + +3. Use **kpatch_gensrc** to compare foo.s and bar.s and generate the foobar.s file that contains the assembly content of the original file and the differences. + + ``` shell + $ sed -i 's/bar.c/foo.c/' bar.s + $ kpatch_gensrc --os=rhel6 -i foo.s -i bar.s -o foobar.s --force-global + ``` + + By default, **kpatch_gensrc** compares the original files in the same C language. Therefore, before the comparison, you need to run the sed command to change the file name bar.c in the patch assembly file bar.s to the original file name foo.c. Call **kpatch_gensrc** to specify the input files as foo.s and bar.s and the output file as foobar.s. + +4. Build the assembly file foo.s in the original file and the generated assembly file foobar.s to obtain the executable files foo and foobar. + + ``` shell + $ gcc -o foo foo.s + $ gcc -o foobar foobar.s -Wl,-q + ``` + + + +5. Use **kpatch_strip** to remove the duplicate content from the executable foo and foobar and reserve the content required for creating hot patches. + + ``` shell + $ kpatch_strip --strip foobar foobar.stripped + $ kpatch_strip --rel-fixup foo foobar.stripped + $ strip --strip-unneeded foobar.stripped + $ kpatch_strip --undo-link foo foobar.stripped + ``` + + The options in the preceding command are described as follows: + + - **--strip** removes useless sections for patch creation from the foobar. + - **--rel-fixup** repairs the address of the variables and functions accessed in the patch. + - **strip --strip-unneeded** removes the useless symbol information for hot patch relocation. + - **--undo-link** changes the symbol address in a patch from absolute to relative. + +6. Create a hot patch file. + + After the preceding operations, the contents required for creating the hot patch are obtained. Run the **kpatch_make** command to input parameters **Build ID** of the original executable file and **foobar.stripped** (output file of **kpatch_strip**) to **kpatch_make** to generate a hot patch file. + + ``` shell + $ str=$(readelf -n foo | grep 'Build ID') + $ substr=${str##* } + $ kpatch_make -b $substr foobar.stripped -o foo.kpatch + $ ls + bar.c bar.s foo foobar foobar.s foobar.stripped foo.c foo.kpatch foo.s + ``` + + The final hot patch file foo.kpatch is obtained. + +#### Creation Through a Script + +This section describes how to use LibcarePlus built-in **libcare-patch-make** script to create a hot patch file. The original file foo.c and patch file bar.c are used as an example. + +1. Run the diff command to generate the comparison file of foo.c and bar.c. + + ``` shell + $ diff -up foo.c bar.c > foo.patch + ``` + + The content of the foo.patch file is as follows: + +
+ Expand foo.patch +

+ + + ``` diff + --- foo.c 2020-12-09 15:39:51.159632075 +0800 + +++ bar.c 2020-12-09 15:40:03.818632220 +0800 + @@ -1,10 +1,10 @@ + -// foo.c + +// bar.c + #include + #include + + void i_m_being_patched(void) + { + - printf("i'm unpatched!\n"); + + printf("you patched my %s\n", "tralala"); + } + + int main(void) + ``` + +

+
+ + +2. Write the makefile for building foo.c as follows: + +
+ Expand makefile +

+ + ``` makefile + all: foo + + foo: foo.c + $(CC) -o $@ $< + + clean: + rm -f foo + + install: foo + mkdir $$DESTDIR || : + cp foo $$DESTDIR + ``` + +

+
+ + +3. After the makefile is done, directly call **libcare-patch-make**. If **libcare-patch-make** asks you which file to install the patch, enter the original file name, as shown in the following: + + ``` shell + $ libcare-patch-make --clean foo.patch + rm -f foo + BUILDING ORIGINAL CODE + /usr/local/bin/libcare-cc -o foo foo.c + INSTALLING ORIGINAL OBJECTS INTO /libcareplus/test/lpmake + mkdir $DESTDIR || : + cp foo $DESTDIR + applying foo.patch... + can't find file to patch at input line 3 + Perhaps you used the wrong -p or --strip option? + The text leading up to this was: + -------------------------- + |--- foo.c 2020-12-10 09:43:04.445375845 +0800 + |+++ bar.c 2020-12-10 09:48:36.778379648 +0800 + -------------------------- + File to patch: foo.c + patching file foo.c + BUILDING PATCHED CODE + /usr/local/bin/libcare-cc -o foo foo.c + INSTALLING PATCHED OBJECTS INTO /libcareplus/test/.lpmaketmp/patched + mkdir $DESTDIR || : + cp foo $DESTDIR + MAKING PATCHES + Fixing up relocation printf@@GLIBC_2.2.5+fffffffffffffffc + Fixing up relocation print_hello+0 + patch for /libcareplus/test/lpmake/foo is in /libcareplus/test/patchroot/700297b7bc56a11e1d5a6fb564c2a5bc5b282082.kpatch + ``` + + After the command is executed, the output indicates that the hot patch file is in the **patchroot** directory of the current directory, and the executable file is in the **lpmake** directory. By default, the Build ID is used to name a hot patch file generated by a script. + + + +## Applying the LibcarePlus Hot Patch + +This following uses the original file **foo.c** and patch file **bar.c** as an example to describe how to use the LibcarePlus hot patch. + +### Preparation + +Before using the LibcarePlus hot patch, prepare the original executable program foo and hot patch file foo.kpatch. + +### Loading the Hot Patch + +The procedure for applying the LibcarePlus hot patch is as follows: + +1. In the first shell window, run the executable program to be patched: + + ``` shell + $ ./lpmake/foo + Hello world! + Hello world! + Hello world! + ``` + +2. In the second shell window, run the **libcare-ctl** command to apply the hot patch: + + ``` shell + $ libcare-ctl -v patch -p $(pidof foo) ./foo.kpatch + ``` + + If the hot patch is applied successfully, the following information is displayed in the second shell window: + + ``` shell + 1 patch hunk(s) have been successfully applied to PID '10999' + ``` + + The following information is displayed for the target process running in the first shell window: + + ``` shell + Hello world! + Hello world! + Hello world being patched! + Hello world being patched! + ``` + + +### Uninstalling the Hot Patch + +The procedure for uninstalling the LibcarePlus hot patch is as follows: + +1. Run the following command in the second shell window: + + ``` shell + $ libcare-ctl unpatch -p $(pidof foo) + ``` + + If the hot patch is uninstalled successfully, the following information is displayed in the second shell window: + + ``` shell + 1 patch hunk(s) were successfully cancelled from PID '10999' + ``` + +2. The following information is displayed for the target process running in the first shell window: + + ``` shell + Hello world being patched! + Hello world being patched! + Hello world! + Hello world! + ``` diff --git a/content/en/docs/Virtualization/appendix.md b/docs/en/docs/Virtualization/appendix.md similarity index 100% rename from content/en/docs/Virtualization/appendix.md rename to docs/en/docs/Virtualization/appendix.md diff --git a/content/en/docs/Virtualization/best-practices.md b/docs/en/docs/Virtualization/best-practices.md similarity index 97% rename from content/en/docs/Virtualization/best-practices.md rename to docs/en/docs/Virtualization/best-practices.md index c2b4164230dd668da1cad297852c496e09e71a50..b4c5797226b50bbf6e8d7692675b61c5cc47d2c5 100644 --- a/content/en/docs/Virtualization/best-practices.md +++ b/docs/en/docs/Virtualization/best-practices.md @@ -20,7 +20,7 @@ If compute resources are sufficient, the halt-polling feature can be used to enable VMs to obtain performance similar to that of physical machines. If the halt-polling feature is not enabled, the host allocates CPU resources to other processes when the vCPU exits due to idle timeout. When the halt-polling feature is enabled on the host, the vCPU of the VM performs polling when it is idle. The polling duration depends on the actual configuration. If the vCPU is woken up during the polling, the vCPU can continue to run without being scheduled from the host. This reduces the scheduling overhead and improves the VM system performance. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The halt-polling mechanism ensures that the vCPU thread of the VM responds in a timely manner. However, when the VM has no load, the host also performs polling. As a result, the host detects that the CPU usage of the vCPU is high, but the actual CPU usage of the VM is not high. #### Instructions @@ -59,7 +59,7 @@ To use I/O threads to process VM disk read and write requests, you need to modif 4 ``` -- Configure the I/O thread attribute for the virtio-blk disk. **** indicates I/O thread IDs. The IDs start from 1 and each ID must be unique. The maximum ID is the value of ****. For example, to allocate I/O thread 2 to the virtio-blk disk, set parameters as follows: +- Configure the I/O thread attribute for the virtio-blk disk. <**iothread\**> indicates I/O thread IDs. The IDs start from 1 and each ID must be unique. The maximum ID is the value of . For example, to allocate I/O thread 2 to the virtio-blk disk, set parameters as follows: ``` @@ -313,7 +313,7 @@ QEMU guest agent \(qemu-ga\) is a daemon running within VMs. It allows users on In some scenarios with high security requirements, qemu-ga provides the blacklist function to prevent internal information leakage of VMs. You can use a blacklist to selectively shield some functions provided by qemu-ga. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The qemu-ga installation package is **qemu-guest-agent-**_xx_**.rpm**. It is not installed on openEuler by default. _xx_ indicates the actual version number. #### Procedure @@ -364,7 +364,7 @@ To add a qemu-ga blacklist, perform the following steps: root 727 1 0 08:17 ? 00:00:00 /usr/bin/qemu-ga --method=virtio-serial --path=/dev/virtio-ports/org.qemu.guest_agent.0 --blacklist=guest-file-open guest-file-close guest-file-read guest-file-write guest-file-seek guest-file-flush -F/etc/qemu-ga/fsfreeze-hook ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >For more information about qemu-ga, visit [https://wiki.qemu.org/Features/GuestAgent](https://wiki.qemu.org/Features/GuestAgent). diff --git a/content/en/docs/Virtualization/environment-preparation.md b/docs/en/docs/Virtualization/environment-preparation.md similarity index 75% rename from content/en/docs/Virtualization/environment-preparation.md rename to docs/en/docs/Virtualization/environment-preparation.md index 3124c15cc358b2f58047b191002a18611334056d..c74e7d85d9c4cb4101dc1d919a3a395313132b27 100644 --- a/content/en/docs/Virtualization/environment-preparation.md +++ b/docs/en/docs/Virtualization/environment-preparation.md @@ -114,7 +114,7 @@ To enable the VM to communicate with external networks, you need to configure th This section describes how to set up a Linux bridge and an Open vSwitch bridge to connect a VM to the network. You can select a bridge type based on the site requirements. **Figure 1** Virtual network structure -![](figures/virtual-network-structure.png "virtual-network-structure") +![](./figures/virtual-network-structure.png "virtual-network-structure") ### Setting Up a Linux Bridge @@ -169,92 +169,74 @@ The Open vSwitch bridge provides more convenient automatic orchestration capabil If the Open vSwitch is used to provide virtual network, you need to install the Open vSwitch network virtualization component. -1. Install the Open vSwitch component. +1. Disable the SELinux.Otherwise ovsdb-server Manager can not work properly. + ``` + # setenforce 0 + ``` + To query whether SELinux is shut down successfully, you can refer to the following commands and information. + ``` + # cat /etc/selinux/config | grep -v ^# + SELINUX=disabled + SELINUXTYPE=targeted + ``` +2. Install the Open vSwitch component. ``` - # yum install -y openvswitch-kmod # yum install -y openvswitch ``` -2. Start the Open vSwitch service. +3. Start the Open vSwitch service. ``` - # systemctl start openvswitch + # service openvswitch start ``` - +Note: The ovn-controller-vtep.service service should be operated by Non-root user **2. Check whether the installation is successful.** -Check whether the Open vSwitch components, openvswitch-kmod and openvswitch, are successfully installed. +Check whether the Open vSwitch components, openvswitch is successfully installed. -1. Check whether the openvswitch-kmod component is successfully installed. If the installation is successful, the software package information is displayed. The command and output are as follows: - - ``` - # rpm -qi openvswitch-kmod - Name : openvswitch-kmod - Version : 2.11.1 - Release : 1.oe3 - Architecture: aarch64 - Install Date: Thu 15 Aug 2019 05:07:49 PM CST - Group : System Environment/Daemons - Size : 15766774 - License : GPLv2 - Signature : (none) - Source RPM : openvswitch-kmod-2.11.1-1.oe3.src.rpm - Build Date : Thu 08 Aug 2019 04:33:08 PM CST - Build Host : armbuild10b175b113b44 - Relocations : (not relocatable) - Vendor : OpenSource Security Ralf Spenneberg - URL : http://www.openvswitch.org/ - Summary : Open vSwitch Kernel Modules - Description : - Open vSwitch provides standard network bridging functions augmented with - support for the OpenFlow protocol for remote per-flow control of - traffic. This package contains the kernel modules. - ``` - -2. Check whether the openvswitch component is successfully installed. If the installation is successful, the software package information is displayed. The command and output are as follows: +1. Check whether the openvswitch component is successfully installed. If the installation is successful, the software package information is displayed. The command and output are as follows: ``` # rpm -qi openvswitch - Name : openvswitch - Version : 2.11.1 - Release : 1 + Name: openvswitch + Version : 2.12.0 + Release : 11.oe1 Architecture: aarch64 - Install Date: Thu 15 Aug 2019 05:08:35 PM CST - Group : System Environment/Daemons - Size : 6051185 - License : ASL 2.0 - Signature : (none) - Source RPM : openvswitch-2.11.1-1.src.rpm - Build Date : Thu 08 Aug 2019 05:24:46 PM CST - Build Host : armbuild10b247b121b105 - Relocations : (not relocatable) - Vendor : Nicira, Inc. - URL : http://www.openvswitch.org/ - Summary : Open vSwitch daemon/database/utilities + Install Date: Tue 08 Jun 2021 04:54:31 PM CST + Group: Unspecified + Size: 7456390 + License : ASL 2.0 and ISC + Signature : RSA/SHA1, Mon 07 Jun 2021 01:16:33 AM CST, Key ID d557065eb25e7f66 + Source RPM : openvswitch-2.12.0-11.oe1.src.rpm + Build Date : Mon 07 Jun 2021 01:15:34 AM CST + Build Host : obs-worker-0011 + Packager : http://openeuler.org + Vendor : http://openeuler.org + URL: http://www.openvswitch.org/ + Summary : Production Quality, Multilayer Open Virtual Switch Description : - Open vSwitch provides standard network bridging functions and - support for the OpenFlow protocol for remote per-flow control of - traffic. + Open vSwitch is a production quality, multilayer virtual switch licensed under + the open source Apache 2.0 license. ``` -3. Check whether the Open vSwitch service is started successfully. If the service is in the **Active** state, the service is started successfully. You can use the command line tool provided by the Open vSwitch. The command and output are as follows: +2. Check whether the Open vSwitch service is started successfully. If the service is in the **Active** state, the service is started successfully. You can use the command line tool provided by the Open vSwitch. The command and output are as follows: ``` - # systemctl status openvswitch - ● openvswitch.service - LSB: Open vSwitch switch - Loaded: loaded (/etc/rc.d/init.d/openvswitch; generated) - Active: active (running) since Sat 2019-08-17 09:47:14 CST; 4min 39s ago - Docs: man:systemd-sysv-generator(8) - Process: 54554 ExecStart=/etc/rc.d/init.d/openvswitch start (code=exited, status=0/SUCCESS) - Tasks: 4 (limit: 9830) - Memory: 22.0M + # service openvswitch status + Redirecting to /bin/systemctl status openvswitch.service + ● openvswitch.service - Open vSwitch + Loaded: loaded (/usr/lib/systemd/system/openvswitch.service; disabled; vendor preset: disabled) + Active: active (exited) since Wed 2021-06-16 16:45:41 CST; 17h ago + Process: 151652 ExecStart=/bin/true (code=exited, status=0/SUCCESS) + Main PID: 151652 (code=exited, status=0/SUCCESS) + Tasks: 0 + Memory: 0B CGroup: /system.slice/openvswitch.service - ├─54580 ovsdb-server: monitoring pid 54581 (healthy) - ├─54581 ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate> - ├─54602 ovs-vswitchd: monitoring pid 54603 (healthy) - └─54603 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/open> + + Jun 16 16:45:41 openEuler systemd[1]: Starting Open vSwitch... + Jun 16 16:45:41 openEuler systemd[1]: Started Open vSwitch. ``` @@ -299,7 +281,7 @@ The following describes how to set up an Open vSwitch layer-1 bridge br0. ### Overview -The boot mode varies depending on the architecture. x86 servers support the Unified Extensible Firmware Interface \(UFEI\) and BIOS boot modes, and AArch64 servers support only the UFEI boot mode. By default, boot files corresponding to the BIOS mode have been installed on openEuler. No additional operations are required. This section describes how to install boot files corresponding to the UEFI mode. +The boot mode varies depending on the architecture. x86 servers support the Unified Extensible Firmware Interface \(UEFI\) and BIOS boot modes, and AArch64 servers support only the UEFI boot mode. By default, boot files corresponding to the BIOS mode have been installed on openEuler. No additional operations are required. This section describes how to install boot files corresponding to the UEFI mode. The Unified Extensible Firmware Interface \(UEFI\) is a new interface standard used for power-on auto check and OS boot. It is an alternative to the traditional BIOS. EDK II is a set of open source code that implements the UEFI standard. In virtualization scenarios, the EDK II tool set is used to start a VM in UEFI mode. Before using the EDK II tool, you need to install the corresponding software package before starting a VM. This section describes how to install the EDK II tool. diff --git a/docs/en/docs/Virtualization/figures/CertEnrollP1.png b/docs/en/docs/Virtualization/figures/CertEnrollP1.png new file mode 100644 index 0000000000000000000000000000000000000000..536e0618a3ab5b70937292205242a08237e34712 Binary files /dev/null and b/docs/en/docs/Virtualization/figures/CertEnrollP1.png differ diff --git a/docs/en/docs/Virtualization/figures/CertEnrollP2.png b/docs/en/docs/Virtualization/figures/CertEnrollP2.png new file mode 100644 index 0000000000000000000000000000000000000000..0557c8782960188dbe9d84a1d0e66c9b45d2b303 Binary files /dev/null and b/docs/en/docs/Virtualization/figures/CertEnrollP2.png differ diff --git a/docs/en/docs/Virtualization/figures/CertEnrollP3.png b/docs/en/docs/Virtualization/figures/CertEnrollP3.png new file mode 100644 index 0000000000000000000000000000000000000000..326fcf1e8d5e3c795ebcde286d8e0fef14bec7d1 Binary files /dev/null and b/docs/en/docs/Virtualization/figures/CertEnrollP3.png differ diff --git a/docs/en/docs/Virtualization/figures/CertEnrollP4.png b/docs/en/docs/Virtualization/figures/CertEnrollP4.png new file mode 100644 index 0000000000000000000000000000000000000000..bc77c038e1e3a5ec30d7ba4f805ca937792e9327 Binary files /dev/null and b/docs/en/docs/Virtualization/figures/CertEnrollP4.png differ diff --git a/docs/en/docs/Virtualization/figures/CertEnrollP5.png b/docs/en/docs/Virtualization/figures/CertEnrollP5.png new file mode 100644 index 0000000000000000000000000000000000000000..0f22b3cbd84f7c93f74898a926bc3e32f231667f Binary files /dev/null and b/docs/en/docs/Virtualization/figures/CertEnrollP5.png differ diff --git a/docs/en/docs/Virtualization/figures/CertEnrollP6.png b/docs/en/docs/Virtualization/figures/CertEnrollP6.png new file mode 100644 index 0000000000000000000000000000000000000000..08235013ca71f1ec51e9af2f143629d1a6132fe9 Binary files /dev/null and b/docs/en/docs/Virtualization/figures/CertEnrollP6.png differ diff --git a/docs/en/docs/Virtualization/figures/CertEnrollP7.png b/docs/en/docs/Virtualization/figures/CertEnrollP7.png new file mode 100644 index 0000000000000000000000000000000000000000..f934521d59dd4a75449fcb2ca8abc54045b9102b Binary files /dev/null and b/docs/en/docs/Virtualization/figures/CertEnrollP7.png differ diff --git a/docs/en/docs/Virtualization/figures/CertEnrollP8.png b/docs/en/docs/Virtualization/figures/CertEnrollP8.png new file mode 100644 index 0000000000000000000000000000000000000000..9a8158e3378bf25dee05b892cc60f424542455d7 Binary files /dev/null and b/docs/en/docs/Virtualization/figures/CertEnrollP8.png differ diff --git a/docs/en/docs/Virtualization/figures/OSBootFlow.png b/docs/en/docs/Virtualization/figures/OSBootFlow.png new file mode 100644 index 0000000000000000000000000000000000000000..f496c5675c72359e5160384c766a11399b04bfa6 Binary files /dev/null and b/docs/en/docs/Virtualization/figures/OSBootFlow.png differ diff --git a/docs/en/docs/Virtualization/figures/SecureBootFlow.png b/docs/en/docs/Virtualization/figures/SecureBootFlow.png new file mode 100644 index 0000000000000000000000000000000000000000..d639975800752c6eca6765a416c256a4752fb590 Binary files /dev/null and b/docs/en/docs/Virtualization/figures/SecureBootFlow.png differ diff --git a/content/en/docs/Virtualization/figures/en-us_image_0218587435.png b/docs/en/docs/Virtualization/figures/en-us_image_0218587435.png similarity index 100% rename from content/en/docs/Virtualization/figures/en-us_image_0218587435.png rename to docs/en/docs/Virtualization/figures/en-us_image_0218587435.png diff --git a/content/en/docs/Virtualization/figures/en-us_image_0218587436.png b/docs/en/docs/Virtualization/figures/en-us_image_0218587436.png similarity index 100% rename from content/en/docs/Virtualization/figures/en-us_image_0218587436.png rename to docs/en/docs/Virtualization/figures/en-us_image_0218587436.png diff --git a/content/en/docs/Virtualization/figures/kvm-architecture.png b/docs/en/docs/Virtualization/figures/kvm-architecture.png similarity index 100% rename from content/en/docs/Virtualization/figures/kvm-architecture.png rename to docs/en/docs/Virtualization/figures/kvm-architecture.png diff --git a/content/en/docs/Virtualization/figures/status-transition-diagram.png b/docs/en/docs/Virtualization/figures/status-transition-diagram.png similarity index 100% rename from content/en/docs/Virtualization/figures/status-transition-diagram.png rename to docs/en/docs/Virtualization/figures/status-transition-diagram.png diff --git a/content/en/docs/Virtualization/figures/virtual-network-structure.png b/docs/en/docs/Virtualization/figures/virtual-network-structure.png similarity index 100% rename from content/en/docs/Virtualization/figures/virtual-network-structure.png rename to docs/en/docs/Virtualization/figures/virtual-network-structure.png diff --git a/content/en/docs/Virtualization/figures/virtualized-architecture.png b/docs/en/docs/Virtualization/figures/virtualized-architecture.png similarity index 100% rename from content/en/docs/Virtualization/figures/virtualized-architecture.png rename to docs/en/docs/Virtualization/figures/virtualized-architecture.png diff --git a/content/en/docs/Virtualization/installation-to-virtualization.md b/docs/en/docs/Virtualization/installation-to-virtualization.md similarity index 98% rename from content/en/docs/Virtualization/installation-to-virtualization.md rename to docs/en/docs/Virtualization/installation-to-virtualization.md index d49588392512857b973c8a159aa2a3b27e051cf4..eff49ef5d6fba87cae5bf78a0411713f3fda144a 100644 --- a/content/en/docs/Virtualization/installation-to-virtualization.md +++ b/docs/en/docs/Virtualization/installation-to-virtualization.md @@ -25,7 +25,7 @@ The minimum hardware requirements for installing virtualization components on op #### Prerequisites -- The yum source has been configured. For details, see _openEuler 20.03 LTS Administrator Guide_. +- The yum source has been configured. For details, see _openEuler 20.03 LTS SP1 Administrator Guide_. - Only the administrator has permission to perform the installation. #### Procedure @@ -49,7 +49,7 @@ The minimum hardware requirements for installing virtualization components on op ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The KVM module is integrated in the openEuler kernel and does not need to be installed separately. ### Verifying the Installation diff --git a/content/en/docs/Virtualization/introduction-to-virtualization.md b/docs/en/docs/Virtualization/introduction-to-virtualization.md similarity index 97% rename from content/en/docs/Virtualization/introduction-to-virtualization.md rename to docs/en/docs/Virtualization/introduction-to-virtualization.md index a97608208c1538e076c478f6f1a78b7706cd025f..0abe43ba5f4a5d869f2c8a5c68cbac325d9a4f83 100644 --- a/content/en/docs/Virtualization/introduction-to-virtualization.md +++ b/docs/en/docs/Virtualization/introduction-to-virtualization.md @@ -7,7 +7,7 @@ In computer technologies, virtualization is a resource management technology. It Virtualization enables multiple virtual machines \(VMs\) to run on a physical server. The VMs share the processor, memory, and I/O resources of the physical server, but are logically isolated from each other. In the virtualization technology, the physical server is called a host machine, the VM running on the host machine is called a guest, and the operating system \(OS\) running on the VM is called a guest OS. A layer of software, called the virtualization layer, exists between a host machine and a VM to simulate virtual hardware. This virtualization layer is called a VM monitor, as shown in the following figure. **Figure 1** Virtualized architecture -![](figures/virtualized-architecture.png "virtualized-architecture") +![](./figures/virtualized-architecture.png "virtualized-architecture") ## Virtualized Architecture @@ -25,7 +25,7 @@ Currently, mainstream virtualization technologies are classified into two types Kernel-based Virtual Machine \(KVM\) is a kernel module of Linux. It makes Linux a hypervisor. [Figure 2](#fig310953013541) shows the KVM architecture. KVM does not simulate any hardware device. It is used to enable virtualization capabilities provided by the hardware, such as Intel VT-x, AMD-V, Arm virtualization extensions. The user-mode QEMU simulates the mainboard, memory, and I/O devices. The user-mode QEMU works with the kernel KVM module to simulate VM hardware. The guest OS runs on the hardware simulated by the QEMU and KVM. **Figure 2** KVM architecture -![](figures/kvm-architecture.png "kvm-architecture") +![](./figures/kvm-architecture.png "kvm-architecture") ## Virtualization Components diff --git a/content/en/docs/Virtualization/managing-devices.md b/docs/en/docs/Virtualization/managing-devices.md similarity index 99% rename from content/en/docs/Virtualization/managing-devices.md rename to docs/en/docs/Virtualization/managing-devices.md index 9b963276fc2c671e42a9b8ec48889e01e6302b20..5a99b0e168c3ce88a5b09cb4544d46c4333a7d4f 100644 --- a/content/en/docs/Virtualization/managing-devices.md +++ b/docs/en/docs/Virtualization/managing-devices.md @@ -283,7 +283,7 @@ PCI passthrough directly assigns a physical PCI device on the host to a VM. The ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >VFIO passthrough is implemented by IOMMU group. Devices are divided to IOMMU groups based on access control services \(ACS\) on hardware. Devices in the same IOMMU group can be assigned to only one VM. If multiple functions on a PCI device belong to the same IOMMU group, they can be directly assigned to only one VM as well. ### SR-IOV Passthrough @@ -292,7 +292,7 @@ PCI passthrough directly assigns a physical PCI device on the host to a VM. The Single Root I/O Virtualization \(SR-IOV\) is a hardware-based virtualization solution. With the SR-IOV technology, a physical function \(PF\) can provide multiple virtual functions \(VFs\), and each VF can be directly assigned to a VM. This greatly improves hardware resource utilization and I/O performance of VMs. A typical application scenario is SR-IOV passthrough for NICs. With the SR-IOV technology, a physical NIC \(PF\) can function as multiple VF NICs, and then the VFs can be directly assigned to VMs. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- SR-IOV requires the support of physical hardware. Before using SR-IOV, ensure that the hardware device to be directly assigned supports SR-IOV and the device driver on the host OS works in SR-IOV mode. >- The following describes how to query the NIC model: >In the following command output, values in the first column indicate the PCI numbers of NICs, and **19e5:1822** indicates the vendor ID and device ID of the NIC. @@ -450,7 +450,7 @@ To configure SR-IOV passthrough for a NIC, perform the following steps: - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >Disabling the SR-IOV function: >To disable the SR-IOV function after the VM is stopped and no VF is in use, run the following command: >The following uses the Hi1822 NIC \(corresponding network interface name: eth0\) as an example: @@ -605,7 +605,7 @@ To configure USB passthrough, perform the following steps: The VM system may be damaged due to virus damage, system file deletion by mistake, or incorrect formatting. As a result, the system cannot be started. To quickly restore a damaged system, openEuler provides the storage snapshot function. openEuler can create a snapshot that records the VM status at specific time points without informing users \(usually within a few seconds\). The snapshot can be used to restore the VM to the status when the snapshots were taken. For example, a damaged system can be quickly restored with the help of snapshots, which improves system reliability. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >Currently, storage snapshots can be QCOW2 and RAW images only. Block devices are not supported. ### Procedure diff --git a/content/en/docs/Virtualization/managing-vms.md b/docs/en/docs/Virtualization/managing-vms.md similarity index 76% rename from content/en/docs/Virtualization/managing-vms.md rename to docs/en/docs/Virtualization/managing-vms.md index d2ba205d45693d00d596d65e8e4b2fb5b5aa572b..bd60d7264cad52b3a74d40c4ea6def659daa4577 100644 --- a/content/en/docs/Virtualization/managing-vms.md +++ b/docs/en/docs/Virtualization/managing-vms.md @@ -10,7 +10,9 @@ - [Logging In to a VM](#logging-in-to-a-vm) - [Logging In Using VNC Passwords](#logging-in-using-vnc-passwords) - [Configuring VNC TLS Login](#configuring-vnc-tls-login) - + - [VM Secure Boot](#VM-Secure-Boot) + - [General Introduction](#General-Introduction) + - [Secure Boot Practice](#Secure-Boot-Practice) ### VM Life Cycle @@ -36,7 +38,7 @@ A VM can be in one of the following status: VMs in different status can be converted, but certain rules must be met. [Figure 1](#fig671014583483) describes the common rules for transiting the VM status. **Figure 1** Status transition diagram -![](figures/status-transition-diagram.png "status-transition-diagram") +![](./figures/status-transition-diagram.png "status-transition-diagram") ##### VM ID @@ -71,7 +73,7 @@ In libvirt, a created VM instance is called a **domain**, which describes the c ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >Run the **virsh** command to query the VM ID and UUID. For details, see [Querying VM Information](#querying-vm-information). #### Management Commands @@ -454,7 +456,7 @@ Libvirt component provides a group of commands for querying the VM status, inclu Target Source --------------------------------------------------------------------- sda /home/openeuler/vm/openEuler_aarch64.qcow2 - sdb /home/openeuler/vm/openEuler-20.03-LTS-aarch64-dvd.iso + sdb /home/openeuler/vm/openEuler-20.03-LTS-SP1-aarch64-dvd.iso ``` - Run the **virsh domiflist** command to query the VM NIC information. The query result shows that the VM has one NIC, the backend is vnet0, which is on the br0 bridge of the host. The MAC address is 00:05:fe:d4:f1:cc. @@ -499,7 +501,7 @@ Before logging in to a VM using a client, such as RealVNC or TightVNC, ensure th - You have obtained the VNC listening port of the VM. This port is automatically allocated when the client is started. Generally, the port number is **5900 + x** \(_x_ is a positive integer and increases in ascending order based on the VM startup sequence. **5900** is invisible to users.\) - If a password has been set for the VNC, you also need to obtain the VNC password of the VM. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >To set a password for the VM VNC, edit the XML configuration file of the VM. That is, add the **passwd** attribute to the **graphics** element and set the attribute value to the password to be configured. For example, to set the VNC password of the VM to **n8VfjbFK**, configure the XML file as follows: >``` > @@ -518,7 +520,7 @@ Before logging in to a VM using a client, such as RealVNC or TightVNC, ensure th :3 ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >To log in to the VNC, you need to configure firewall rules to allow the connection of the VNC port. The reference command is as follows, where _X_ is **5900 + Port number**, for example, **5903**. >``` >firewall-cmd --zone=public --add-port=X/tcp @@ -533,7 +535,7 @@ Before logging in to a VM using a client, such as RealVNC or TightVNC, ensure th By default, the VNC server and client transmit data in plaintext. Therefore, the communication content may be intercepted by a third party. To improve security, openEuler allows the VNC server to configure the Transport Layer Security \(TLS\) mode for encryption and authentication. TLS implements encrypted communication between the VNC server and client to prevent communication content from being intercepted by third parties. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- To use the TLS encryption authentication mode, the VNC client must support the TLS mode \(for example, TigerVNC\). Otherwise, the VNC client cannot be connected. >- The TLS encryption authentication mode is configured at the host level. After this feature is enabled, the TLS encryption authentication mode is enabled for the VNC clients of all VMs running on the host. @@ -552,7 +554,7 @@ To enable the TLS encryption authentication mode for the VNC, perform the follow 2. Create a certificate and a private key file for the VNC. The following uses GNU TLS as an example. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >To use GNU TLS, install the gnu-utils software package in advance. 1. Create a certificate file issued by the Certificate Authority \(CA\). @@ -644,7 +646,157 @@ To enable the TLS encryption authentication mode for the VNC, perform the follow 5. Copy the generated client certificates **ca-cert.pem**, **client-cert.pem**, and **client-key.pem** to the VNC client. After the TLS certificate of the VNC client is configured, you can use VNC TLS to log in to the VM. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >- For details about how to configure the VNC client certificate, see the usage description of each client. >- For details about how to log in to the VM, see Logging In Using VNC Passwords. +### VM Secure Boot + +#### General Introduction + +##### Overview + +Secure boot uses public and private key pairs to sign and validate boot components. During the startup, the previous component validates the digital signature of the next component. If the validation is successful, the next component starts. If the validation fails, the startup fails. Secure boot is used to detect whether the firmware and software during startup of the device are tampered with to prevent malware from intrusion and modification. Secure boot ensures the integrity of each component during system startup and prevents unauthorized components from being loaded and running, thereby preventing security threats to the system and user data. Secure boot is implemented based on the UEFI boot mode. It is not supported by the legacy boot mode. According to UEFI specifications, some reliable public keys can be built in the mainboard before delivery. Any operating system or hardware drivers that you want to load on this mainboard must be authenticated by these public keys. The secure boot of a physical machine is implemented by the physical BIOS, while the secure boot of a VM is simulated by software. The process of the VM secure boot is the same as that of the host secure boot, both complying with the open-source UEFI specifications. The UEFI on the virtualization platform is provided by the edk component. When a VM starts, QEMU maps the UEFI image to the memory to simulate the firmware startup process for the VM. Secure boot is a security protection capability provided by edk during the VM startup to protect the OS kernel of the VM from being tampered with. The sequence of signature validation for the secure boot is as follows: UEFI BIOS->shim->GRUB->vmlinuz (signature validation is passed and loaded in sequence). + +| English | Acronyms and Abbreviations | Description | +| :----- | :----- | :----- | +| Secure boot | - | Secure boot indicates that a component validates the digital signature of the next component during startup. If the validation is successful, the component runs. If the validation fails, the component stops running. It ensures the integrity of each component during system startup. | +| Platform key | PK | Platform key is owned by the OEM vendor and must be RSA2048 or stronger. The PK establishes a trusted relationship between the platform owner and the platform firmware. The platform owner registers the PKpub, public key of the PK, with the platform firmware. The platform owner can use the PKpriv, private part of the PK, to change the ownership of the platform or register the KEK key. | +| Key exchange key | KEK | Key exchange key creates a trusted relationship between the platform firmware and the OS. Each OS and third-party application that communicates with the platform firmware register the KEKpub, public part of the KEK key, in the platform firmware. | +| Database trustlist | DB | Database trustlist stores and validates the keys of components such as shim, GRUB, and vmlinuz. | +| Database blocklist | DBx | Database blocklist stores revoked keys. | + +##### Function Description + +The VM secure boot feature is implemented based on the edk open-source project. In non-secure boot mode, the basic Linux process is as follows: + +**Figure 1** System startup process + +![](./figures/OSBootFlow.png) + +In secure boot mode, the first component loaded after UEFI BIOS starts is shim in the system image. By interacting with UEFI BIOS, shim obtains the key stored in the variable DB of UEFI BIOS to validate GRUB. After GRUB is loaded, the key and the authentication API are also called to validate the kernel. The Linux boot process is as follows: + +**Figure 2** Secure boot process + +![](./figures/SecureBootFlow.png) + +The secure boot feature involves multiple key scenarios. Based on the scenario analysis and system breakdown, the secure boot feature involves the following subsystems: UEFI BIOS validating shim, shim validating GRUB, and GRUB validating kernel. When UEFI BIOS validates shim, if the validation is successful, shim is started. If the validation fails, an error message is displayed and shim fails to start. Shim needs to use the private key for signature during image compilation and creation, and the public key certificate needs to be imported to the variable area DB of UEFI BIOS. After shim is started, validate the startup of GRUB. If the validation is successful, GRUB is started. If the validation fails, an error message is displayed and GRUB fails to start. GRUB needs to be signed during image compilation and creation. The public and private key pairs are the same as those of shim. After GRUB is started, it calls the key and the authentication API key registered in UEFI BIOS to validate the kernel. If the validation is successful, GRUB starts the kernel. If the validation fails, an error message is displayed. GRUB needs to sign the image during compilation and creation and uses the public and private key pair that is the same as that of shim. + +##### Constraints + +* Running on the UEFI BIOS that does not support secure boot does not affect existing functions and services. +* The secure boot feature depends on the UEFI BIOS and takes effect only when the UEFI supports this feature. +* When secure boot is enabled in the UEFI BIOS, the system cannot be started if the related components have no signature or the signature is incorrect. +* If secure boot is disabled in the UEFI BIOS, the validation function during the boot process is disabled. +* The second half of the secure boot validation chain, that is, shim->GRUB->kernel, guides the kernel to start. This part of the validation chain is implemented by the OS image. If the OS does not support guiding the kernel for secure boot, the VM secure boot fails. +* Currently, the x86 architecture do not provide nvram file configuration to configure VM secure boot. + +#### Secure Boot Practice + +VM secure boot depends on UEFI BIOS. The UEFI BIOS image is installed using the edk rpm package. This section uses AArch64 as an example to describe how to configure VM secure boot. + +##### Configuring VM + +The components in the edk rpm package are installed in the /usr/share/edk2/aarch64 directory, including `QEMU_EFI-pflash.raw` and `vars-template-pflash.raw`. The following describes the XML configuration of the UEFI BIOS during VM startup. + +``` + + hvm + /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw + /path/to/QEMU-VARS.fd + +``` + +In the preceding configuration, /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw indicates the path of the UEFI BIOS image. /usr/share/edk2/aarch64/vars-template-pflash.raw is the path of the NVRAM image template, and /path/to/QEMU-VARS.fd is the path of the NVRAM image file of the current VM, which is used to store environment variables in the UEFI BIOS. + +##### Importing Certificate + +The certificate for VM secure boot is imported from the BIOS page. Before importing the certificate, you need to import the certificate file to the VM. You can mount the directory where the certificate file is located to the VM by mounting a disk. For example, you can create an image that contains the certificate and mount the image in the XML configuration file of the VM. + +Create a certificate file image. + +``` +dd of='/path/to/data.img' if='/dev/zero' bs=1M count=64 +mkfs.vfat -I /path/to/data.img +mkdir /path/to/mnt +mount path/to/data.img /path/to/mnt/ +cp -a /path/to/certificates/* /path/to/mnt/ +umount /path/to/mnt/ +``` +In the preceding command, /path/to/certificates/ indicates the path where the certificate file is located, /path/to/data.img indicates the path where the certificate file image is located, and /path/to/mnt/ indicates the image mounting path. + +Mount the image in the XML file of the VM. + +``` + + + + + + + + + +``` + +Start the VM and import the PK certificate. The procedure is as follows (the procedure for importing the KEK certificate is the same as that for importing the DB certificate): + +After the VM is started, press F2 to go to the BIOS screen. + +**Figure 1** BIOS screen + +![](./figures/CertEnrollP1.png) + +**Figure 2** Device Manager + +![](./figures/CertEnrollP2.png) + +**Figure 3** Custom Secure Boot Options + +![](./figures/CertEnrollP3.png) + +**Figure 4** PK Options + +![](./figures/CertEnrollP4.png) + +**Figure 5** Enrolling PK + +![](./figures/CertEnrollP5.png) + +In the File Explorer window, many disk directories are displayed, including the certificate file directory mounted through the disk. + +**Figure 6** File Explorer + +![](./figures/CertEnrollP6.png) + +Select the PK certificate to be imported in the disk directory. + +**Figure 7** Disk where the certificate is stored + +![](./figures/CertEnrollP7.png) + +**Figure 8** Selecting Commit Changes and Exit to save the imported certificate + +![](./figures/CertEnrollP8.png) + +After the certificate is imported, the UEFI BIOS writes the certificate information and secure boot attributes to the NVRAM configuration file /path/to/QEMU-VARS.fd. Upon the next startup, the VM reads related configurations from the /path/to/QEMU-VARS.fd file, initializes certificate information and secure boot attributes, automatically imports the certificate, and enables secure boot. Similarly, you can use /path/to/QEMU-VARS.fd as the UEFI BIOS boot configuration template file of other VMs with the same configuration. Modify the nvram template field so that the certificate is automatically imported and the secure boot option is enabled when other VMs are started. The VM XML configuration is modified as follows: + +``` + + hvm + /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw + + +``` + +##### Secure Boot Observation + +After the VM is correctly configured and the PK, KEK, and DB certificates are imported, the VM runs in secure boot mode. You can configure the serial port log file in the VM configuration file in XML format to check whether the VM is in the secure boot mode. The following figure shows how to configure the serial port log file. + +``` + + + +``` + +After the OS image is successfully loaded to the VM, if "UEFI Secure Boot is enabled" is displayed in the serial port log file, the VM is in the secure boot state. diff --git a/content/zh/docs/Administration/public_sys-resources/icon-caution.gif b/docs/en/docs/Virtualization/public_sys-resources/icon-caution.gif similarity index 100% rename from content/zh/docs/Administration/public_sys-resources/icon-caution.gif rename to docs/en/docs/Virtualization/public_sys-resources/icon-caution.gif diff --git a/content/zh/docs/Administration/public_sys-resources/icon-danger.gif b/docs/en/docs/Virtualization/public_sys-resources/icon-danger.gif similarity index 100% rename from content/zh/docs/Administration/public_sys-resources/icon-danger.gif rename to docs/en/docs/Virtualization/public_sys-resources/icon-danger.gif diff --git a/content/zh/docs/Administration/public_sys-resources/icon-note.gif b/docs/en/docs/Virtualization/public_sys-resources/icon-note.gif similarity index 100% rename from content/zh/docs/Administration/public_sys-resources/icon-note.gif rename to docs/en/docs/Virtualization/public_sys-resources/icon-note.gif diff --git a/content/zh/docs/Administration/public_sys-resources/icon-notice.gif b/docs/en/docs/Virtualization/public_sys-resources/icon-notice.gif similarity index 100% rename from content/zh/docs/Administration/public_sys-resources/icon-notice.gif rename to docs/en/docs/Virtualization/public_sys-resources/icon-notice.gif diff --git a/content/zh/docs/Administration/public_sys-resources/icon-tip.gif b/docs/en/docs/Virtualization/public_sys-resources/icon-tip.gif similarity index 100% rename from content/zh/docs/Administration/public_sys-resources/icon-tip.gif rename to docs/en/docs/Virtualization/public_sys-resources/icon-tip.gif diff --git a/content/zh/docs/Administration/public_sys-resources/icon-warning.gif b/docs/en/docs/Virtualization/public_sys-resources/icon-warning.gif similarity index 100% rename from content/zh/docs/Administration/public_sys-resources/icon-warning.gif rename to docs/en/docs/Virtualization/public_sys-resources/icon-warning.gif diff --git a/content/en/docs/Virtualization/system-resource-management.md b/docs/en/docs/Virtualization/system-resource-management.md similarity index 55% rename from content/en/docs/Virtualization/system-resource-management.md rename to docs/en/docs/Virtualization/system-resource-management.md index 998e47d7cd29478435ca7989fb03d60dbac6d24f..c57f96a71d0e8c9ed70c757009cfe141b49b4491 100644 --- a/content/en/docs/Virtualization/system-resource-management.md +++ b/docs/en/docs/Virtualization/system-resource-management.md @@ -1,23 +1,21 @@ -# system Resource Management +# System Resource Management + +- [System Resource Management](#system-resource-management) + - [General Description](#general-description) + - [Managing vCPU](#managing-vcpu) + - [Managing Virtual Memory](#managing-virtual-memory) + - [Live Migration Operations](#live-migration-operations) + + +## General Description +openEuler virtualization uses the **libvirt** command to manage VM system resources, such as vCPUs and virtual memory resources. -The **libvirt** command manages VM system resources, such as vCPU and virtual memory resources. Before you start: - Ensure that the libvirtd daemon is running on the host. - Run the **virsh list --all** command to check that the VM has been defined. -- [System Resource Management](#system-resource-management) - - [Managing vCPU](#managing-vcpu) - - [CPU Shares](#cpu-shares) - - [Binding the QEMU Process to a Physical CPU](#binding-the-qemu-process-to-a-physical-cpu) - - [Adjusting the vCPU Binding Relationship](#adjusting-the-vcpu-binding-relationship) - - [Managing Virtual Memory](#managing-virtual-memory) - - [Introduction to NUMA](#introduction-to-numa) - - [Configuring Host NUMA](#configuring-host-numa) - - [Configuring Guest NUMA](#configuring-guest-numa) - - ## Managing vCPU @@ -203,6 +201,91 @@ Run the **virsh vcpupin** command to adjust the binding relationship between v The preceding commands bind vCPU **0** of VM **openEulerVM** to physical CPUs **0**, **2**, and **3**. That is, vCPU **0** is scheduled only on the three physical CPUs. The modification of the binding relationship does not take effect immediately. Instead, the modification takes effect after the next startup of the VM and takes effect permanently. +### CPU Hot Add + +#### Overview + +This feature allows users to hot add CPUs to a running VM without affecting its normal running. When the internal service pressure of a VM keeps increasing, all CPUs will be overloaded. To improve the computing capability of the VM, you can use the CPU hot add function to increase the number of CPUs on the VM without stopping it. + +#### Constraints + +- For processors using the AArch64 architecture, the specified VM chipset type \(machine\) needs to be virt-4.1 or a later version when a VM is created. For processors using the x86\_64 architecture, the specified VM chipset type \(machine\) needs to be pc-i440fx-1.5 or a later version when a VM is created. +- When configuring Guest NUMA, you need to configure the vCPUs that belong to the same socket in the same vNode. Otherwise, the VM may be soft locked up after the CPU is hot added, which may cause the VM panic. +- VMs do not support CPU hot add during migration, hibernation, wake-up, or snapshot. +- Whether the hot added CPU can automatically go online depends on the VM OS logic rather than the virtualization layer. +- CPU hot add is restricted by the maximum number of CPUs supported by the Hypervisor and GuestOS. +- When a VM is being started, stopped, or restarted, the hot added CPU may become invalid. However, the hot added CPU takes effect after the VM is restarted. +- During VM CPU hot add, if the number of added CPUs is not an integer multiple of the number of cores in the VM CPU topology configuration item, the CPU topology displayed in the VM may be disordered. You are advised to add CPUs whose number is an integer multiple of the number of cores each time. +- If the hot added CPU needs to take effect online and is still valid after the VM is restarted, the --config and --live options need to be transferred to the virsh setvcpus API to persist the hot added CPU. + +#### Procedure + +**VM XML Configuration** + +1. To use the CPU hot add function, configure the number of CPUs, the maximum number of CPUs supported by the VM, and the VM chipset type when creating the VM. (For the AArch64 architecture, the virt-4.1 or a later version is required. For the x86\_64 architecture, the pc-i440fx-1.5 or later version is required. The AArch64 VM is used as an example. The configuration template is as follows: + + ``` + + ... + n + + hvm + + ... + + ``` + + >![](./public_sys-resources/icon-note.gif) **Note** + >- The value of placement must be static. + >- m indicates the current number of CPUs on the VM, that is, the default number of CPUs after the VM is started. n indicates the maximum number of CPUs that can be hot added to a VM. The value cannot exceed the maximum CPU specifications supported by the Hypervisor or GuestOS. n is greater than or equal to m. + + For example, if the current number of CPUs of a VM is 4 and the maximum number of hot added CPUs is 64, the XML configuration is as follows: + + ``` + + …… + 64 + + hvm + + …… + ``` + + +**Hot Adding and Bringing CPUs Online** + +1. If the hot added CPU needs to be automatically brought online, create the udev rules file /etc/udev/rules.d/99-hotplug-cpu.rules in the VM as user root and define the udev rules in the file. The following is an example: + + ``` + # automatically online hot-plugged cpu + ACTION=="add", SUBSYSTEM=="cpu", ATTR{online}="1" + ``` + + >![](./public_sys-resources/icon-note.gif) **Note** + >If you do not use the udev rules, you can use the root permission to manually bring the hot added CPU online by running the following command: + >``` + >for i in `grep -l 0 /sys/devices/system/cpu/cpu*/online` + >do + > echo 1 > $i + >done + >``` + +2. Use the virsh tool to hot add CPUs to the VM. For example, to set the number of CPUs after hot adding to 6 on the VM named openEulerVM and make the hot add take effect online, run the following command: + + ``` + virsh setvcpus openEulerVM 6 --live + ``` + + >![](./public_sys-resources/icon-note.gif) **Note** + >The format for running the virsh setvcpus command to hot add a VM CPU is as follows: + >``` + >virsh setvcpus [--config] [--live] + >``` + >- domain: Parameter, which is mandatory. Specifies the name of a VM. + >- count: Parameter, which is mandatory. Specifies the number of target CPUs, that is, the number of CPUs after hot adding. + >- --config: Option, which is optional. This parameter is still valid when the VM is restarted. + >- --live: Option, which is optional. The configuration takes effect online. + ## Managing Virtual Memory @@ -253,7 +336,7 @@ To improve VM performance, you can specify NUMA nodes for a VM using the VM XML If the vCPU of the VM is bound to the physical CPU of **node 0**, the performance deterioration caused by the vCPU accessing the remote memory can be avoided. - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >- The sum of memory allocated to the VM cannot exceed the remaining available memory of the NUMA node. Otherwise, the VM may fail to start. >- You are advised to bind the VM memory and vCPU to the same NUMA node to avoid the performance deterioration caused by vCPU access to the remote memory. For example, bind the vCPU to NUMA node 0 as well. @@ -288,8 +371,99 @@ After Guest NUMA is configured in the VM XML configuration file, you can view th ``` ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >- **** provides the NUMA topology function for VMs. **cell id** indicates the vNode ID, **cpus** indicates the vCPU ID, and **memory** indicates the memory size on the vNode. >- If you want to use Guest NUMA to provide better performance, configure <**numatune\>** and **** so that the vCPU and memory are distributed on the same physical NUMA node. > - **cellid** in **** corresponds to **cell id** in ****. **mode** can be set to **strict** \(apply for memory from a specified node strictly. If the memory is insufficient, the application fails.\), **preferred** \(apply for memory from a node first. If the memory is insufficient, apply for memory from another node\), or **interleave** \(apply for memory from a specified node in cross mode\).; **nodeset** indicates the specified physical NUMA node. > - In ****, you need to bind the vCPU in the same **cell id** to the physical NUMA node that is the same as the **memnode**. + + + +### Memory Hot Add + +#### Overview +In virtualization scenarios, the memory, CPU, and external devices of VMs are simulated by software. Therefore, the memory can be adjusted online for VMs at the virtualization bottom layer. In the current openEuler version, memory can be added to a VM online. If the physical memory of a VM is insufficient and the VM cannot be shut down, you can use this feature to add physical memory resources to the VM. + +#### Constraints + +- For processors using the AArch64 architecture, the specified VM chipset type \(machine\) needs to be virt-4.1 or a later version when a VM is created.For processors using the x86 architecture, the specified VM chipset type \(machine\) needs to be a later version than pc-i440fx-1.5 when a VM is created. +- Guest NUMA on which the memory hot add feature depends needs to be configured on the VM. Otherwise, the memory hot add process cannot be completed. +- When hot adding memory, you need to specify the ID of Guest NUMA node to which the new memory belongs. Otherwise, the memory hot add fails. +- The VM kernel should support memory hot add. Otherwise, the VM cannot identify the newly added memory or the memory cannot be brought online. +- For a VM that uses hugepages, the capacity of the hot added memory should be an integral multiple of hugepagesz. Otherwise, the hot add fails. +- The hot added memory size should be an integral multiple of the Guest physical memory block size (block\_size\_bytes). Otherwise, the VM cannot go online. The value of block\_size\_bytes can be obtained using the lsmem command in Guest. +- After n pieces of virtio-net NICs are configured, the maximum number of hot add times is set to min\{max\_slot, 64 - n\} to reserve slots for NICs. +- The vhost-user device and the memory hot add feature are mutually exclusive. A VM configured with the vhost-user device does not support memory hot add. After the memory is hot added to a VM, the vhost-user device cannot be hot added. +- If the VM OS is Linux, ensure that the initial memory is greater than or equal to 4 GB. +- If the VM OS is Windows, the first hot added memory needs to be specified to Guest NUMA node0. Otherwise, the hot added memory cannot be identified by the VM. +- In passthrough scenarios, memory needs to be allocated in advance. Therefore, it is normal that the startup and hot add of memory are slower than those of common VMs (especially large-specification VMs). +- It is recommended that the ratio of the available memory to the hot added memory be at least 1:32. That is, at least 1 GB available memory is required for the VM with 32 GB hot added memory. If the ratio is less than 1:32, the VM may be suspended. +- Whether the hot added memory can automatically go online depends on the VM OS logic. You can manually bring the memory online or configure the udev rules to automatically bring the memory online. + +#### Procedure + +**VM XML Configuration** + +1. To use the memory hot add function, configure the maximum hot add memory size and reserved slot number, and configure the Guest NUMA topology when creating a VM. + + For example, run the following command to configure 32 GB initial memory for a VM, reserve 256 slots, set the memory upper limit to 1 TB, and configure two NUMA nodes: + + ``` + + 32 + 1024 + + + + + + + + .... + ``` + + +>![](./public_sys-resources/icon-note.gif) **Note** +>In the preceding information, +>the value of slots in the maxMemory field indicates the reserved memory slots. The maximum value is 256. +>maxMemory indicates the maximum physical memory supported by the VM. +>For details about how to configure Guest NUMA, see "Configuring Guest NUMA." + +**Hot Adding and Bringing Memory Online** + +1. If the hot added memory needs to be automatically brought online, create the udev rules file /etc/udev/rules.d/99-hotplug-memory.rules in the VM as user root and define the udev rules in the file. The following is an example: + + ``` + # automatically online hot-plugged memory + ACTION=="add", SUBSYSTEM=="memory", ATTR{state}="online" + ``` + +2. Create a memory description XML file based on the size of the memory to be hot added and the Guest NUMA node of the VM. + + For example, to hot add 1 GB memory to NUMA node0, run the following command: + + ``` + + + 1024 + 0 + + + ``` + +3. Run the virsh attach-device command to hot add memory to the VM. In the command, openEulerVM indicates the VM name, memory.xml indicates the description file of the hot added memory, and --live indicates that the hot added memory takes effect online. You can also run the --config command to persist the hot added memory to the VM XML file. + + ``` + # virsh attach-device openEulerVM memory.xml --live + ``` + + >![](./public_sys-resources/icon-note.gif) **Note** + >If you do not use the udev rules, you can use the root permission to manually bring the hot added memory online by running the following command: + >``` + >for i in `grep -l offline /sys/devices/system/memory/memory*/state` + >do + > echo online > $i + >done + >``` + + diff --git a/docs/en/docs/Virtualization/tool-guide.md b/docs/en/docs/Virtualization/tool-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..2d7b4dd6356f83aa81a84f5c01ecd3f406ca1957 --- /dev/null +++ b/docs/en/docs/Virtualization/tool-guide.md @@ -0,0 +1 @@ +To help users better use virtualization, openEuler provides a series of tools, including vmtop and LibcarePlus. The following describes how to install and use these tools. diff --git a/content/en/docs/Virtualization/user-and-administrator-guide.md b/docs/en/docs/Virtualization/user-and-administrator-guide.md similarity index 99% rename from content/en/docs/Virtualization/user-and-administrator-guide.md rename to docs/en/docs/Virtualization/user-and-administrator-guide.md index eb75d5342560e396d81dfa5ec83bd0f0a5877a46..47646f59b84e0a9b7e9952054286eba74f6ebdd1 100644 --- a/content/en/docs/Virtualization/user-and-administrator-guide.md +++ b/docs/en/docs/Virtualization/user-and-administrator-guide.md @@ -26,7 +26,7 @@ This chapter describes how to create VMs on the virtualization platform, manage If compute resources are sufficient, the halt-polling feature can be used to enable VMs to obtain performance similar to that of physical machines. If the halt-polling feature is not enabled, the host allocates CPU resources to other processes when the vCPU exits due to idle timeout. When the halt-polling feature is enabled on the host, the vCPU of the VM performs polling when it is idle. The polling duration depends on the actual configuration. If the vCPU is woken up during the polling, the vCPU can continue to run without being scheduled from the host. This reduces the scheduling overhead and improves the VM system performance. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The halt-polling mechanism ensures that the vCPU thread of the VM responds in a timely manner. However, when the VM has no load, the host also performs polling. As a result, the host detects that the CPU usage of the vCPU is high, but the actual CPU usage of the VM is not high. ##### Instructions @@ -319,7 +319,7 @@ QEMU guest agent \(qemu-ga\) is a daemon running within VMs. It allows users on In some scenarios with high security requirements, qemu-ga provides the blacklist function to prevent internal information leakage of VMs. You can use a blacklist to selectively shield some functions provided by qemu-ga. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The qemu-ga installation package is **qemu-guest-agent-**_xx_**.rpm**. It is not installed on openEuler by default. _xx_ indicates the actual version number. ##### Procedure @@ -370,7 +370,7 @@ To add a qemu-ga blacklist, perform the following steps: root 727 1 0 08:17 ? 00:00:00 /usr/bin/qemu-ga --method=virtio-serial --path=/dev/virtio-ports/org.qemu.guest_agent.0 --blacklist=guest-file-open guest-file-close guest-file-read guest-file-write guest-file-seek guest-file-flush -F/etc/qemu-ga/fsfreeze-hook ``` - >![](public_sys-resources/icon-note.gif) **NOTE:** + >![](./public_sys-resources/icon-note.gif) **NOTE:** >For more information about qemu-ga, visit [https://wiki.qemu.org/Features/GuestAgent](https://wiki.qemu.org/Features/GuestAgent). diff --git a/content/en/docs/Virtualization/virtualization.md b/docs/en/docs/Virtualization/virtualization.md similarity index 100% rename from content/en/docs/Virtualization/virtualization.md rename to docs/en/docs/Virtualization/virtualization.md diff --git a/content/en/docs/Virtualization/vm-configuration.md b/docs/en/docs/Virtualization/vm-configuration.md similarity index 96% rename from content/en/docs/Virtualization/vm-configuration.md rename to docs/en/docs/Virtualization/vm-configuration.md index a290a4a05d92b6440a67f627f3857f5cde638164..abb947dd03c5e0891f139444df48af8f189c99c7 100644 --- a/content/en/docs/Virtualization/vm-configuration.md +++ b/docs/en/docs/Virtualization/vm-configuration.md @@ -97,12 +97,34 @@ This section describes how to configure the vCPU and virtual memory. - **cpu**: The mode of the virtual processor. - **mode**: The mode of the vCPU. The **host-passthrough** indicates that the architecture and features of the virtual CPU are the same as those of the host. + **mode**: The mode of the vCPU. + + - **host-passthrough**: indicates that the architecture and features of the virtual CPU are the same as those of the host. + + - **custom**: indicates that the architecture and features of the virtual CPU are configured by the **cpu** element. Sub-element **topology**: A sub-element of the element cpu, used to describe the topology structure of a vCPU mode. - The attributes **socket**, **cores**, and **threads** of the sub-element topology describe the number of CPU sockets of a VM, the number of processor cores included in each CPU socket, and the number of hyperthreads included in each processor core, respectively. The attribute value is a positive integer, and a product of the three values is equal to the number of of vCPUs. + Sub-element **model**: A sub-element of the element cpu, used to describe the CPU model when **mode** is custom. + + Sub-element **feature**: A sub-element of the element cpu, used to enable/disable a CPU feature when **mode** is custom. The attribute **name** describes the name of the CPU feature. And whether enable the CPU feature is controlled by the attribute **policy**: + + - **force**: force enable the CPU feature regardless of it being supported by host CPU. + + - **require**: enable the CPU feature. + + - **optional**: the CPU feature will be enabled if and only if it is supported by host CPU. + + - **disable**: disable the CPU feature. + + - **forbid**: disable the CPU feature and guest creation will fail if the feature is supported by host CPU. + + >![](./public_sys-resources/icon-note.gif) **NOTE:** + > + >The display of user-mode CPU features in VM (e.g. the 'Flags' field of the 'lscpu' command) needs the support of the VM kernel. If you use old kernel in VM, some CPU features may not be displayed. + ### Configuration Example @@ -120,6 +142,21 @@ For example, if the number of vCPUs is 4, the processing mode is host-passthroug ``` +If the virtual memory is 8 GiB, the number of vCPUs is 4, the processing mode is custom, the CPU model is Kunpeng-920, and pmull is disabled, the configuration is as follows: + +``` + + ... + 4 + 8 + + Kunpeng-920 + + + ... + +``` + ## Virtual Device Configuration The VM XML configuration file uses the **devices** elements to configure virtual devices, including storage devices, network devices, buses, and mouse devices. This section describes how to configure common virtual devices. @@ -244,7 +281,7 @@ In this example, two I/O threads, one block disk device and one CD, are configur - + @@ -371,7 +408,7 @@ The bus is a channel for information communication between components of a compu The PCIe bus is a typical tree structure and has good scalability. The buses are associated with each other by using a controller. The following uses the PCIe bus as an example to describe how to configure a bus topology for a VM. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >The bus configuration is complex. If the device topology does not need to be precisely controlled, the default bus configuration automatically generated by libvirt can be used. #### Elements @@ -573,7 +610,7 @@ In addition to storage devices and network devices, some external devices need t For example, in the following example, the VM emulator path, pty serial port, VirtIO media device, USB tablet, USB keyboard, and VNC graphics device are configured. ->![](public_sys-resources/icon-note.gif) **NOTE:** +>![](./public_sys-resources/icon-note.gif) **NOTE:** >When **type** of **graphics** is set to **VNC**, you are advised to set the **passwd** attribute, that is, the password for logging in to the VM using VNC. ``` @@ -744,7 +781,7 @@ An XML configuration file of AArch64 VM, which contains basic elements. The foll - + diff --git a/content/en/docs/Virtualization/vm-live-migration.md b/docs/en/docs/Virtualization/vm-live-migration.md similarity index 100% rename from content/en/docs/Virtualization/vm-live-migration.md rename to docs/en/docs/Virtualization/vm-live-migration.md diff --git a/docs/en/docs/Virtualization/vmtop.md b/docs/en/docs/Virtualization/vmtop.md new file mode 100644 index 0000000000000000000000000000000000000000..f47f36fbd9f2b0541c4192fd3c8dad2654ba3737 --- /dev/null +++ b/docs/en/docs/Virtualization/vmtop.md @@ -0,0 +1,138 @@ +# vmtop + +[[]] + +## Overview +vmtop is a user-mode tool running on the host machine. You can use the vmtop tool to dynamically view the usage of VM resources in real time, such as CPU usage, memory usage, and the number of vCPU traps. Therefore, the vmtop tool can be used to locate virtualization problems and optimize performance. + +The vmtop monitoring items are as follows (sampling difference: difference between two data obtained at a specified interval): +- VM/task-name: VM/Process name +- DID: VM ID +- PID: PID of the qemu process of the VM +- %CPU: CPU usage of a process +- EXThvc: Number of hvc-exits (sampling difference) +- EXTwfe: Number of wfe-exits (sampling difference) +- EXTwfi: Number of wfi-exits (sampling difference) +- EXTmmioU: Number of mmioU-exits (sampling difference) +- EXTmmioK: Number of mmioK-exits (sampling difference) +- EXTfp: Number of fp-exits (sampling difference) +- EXTirq: Number of irq-exits (sampling difference) +- EXTsys64: Number of sys64 exits (sampling difference) +- EXTmabt: Number of mem abort exits (sampling difference) +- EXTsum: Total number of KVM exits (sampling difference) +- S: Process status +- P: Physical CPU usage of a process +- %ST: Ratio of the preemption time to the CPU running time (KVM data) +- %GUE: Ratio of the VM internal occupation time to the CPU running time (KVM data) +- %HYP: Virtualization overhead ratio (KVM data) + +## Usage +vmtop is a command line tool. You can directly run the vmtop in command line mode. +In addition, the vmtop tool provides different options for querying different information. + +### Syntax +```sh +vmtop [option] +``` + +### Option Description +- -d: sets the refresh interval, in seconds. +- -H: displays the VM thread information. +- -n: sets the number of refresh times and exits after the refresh is complete. +- -b: displays Batch mode, which can be used to redirect to a file. +- -h: displays help information. +- -v: displays versions. + +### Keyboard Shortcut +Shortcut key used when the vmtop is running. +- H: displays or stops the VM thread information. The information is displayed by default. +- up/down: moves the VM list upwards or downwards. +- left/right: moves the cursor leftwards or rightwards to display the columns that are hidden due to the screen width. +- f: enters the editing mode of a monitoring item and selects the monitoring item to be enabled. +- q: exits the vmtop process. + +## Example +Run the vmtop command on the host. +```sh +vmtop +``` +The command output is as follows: +```sh +vmtop - 2020-09-14 09:54:48 - 1.0 +Domains: 1 running + + DID VM/task-name PID %CPU EXThvc EXTwfe EXTwfi EXTmmioU EXTmmioK EXTfp EXTirq EXTsys64 EXTmabt EXTsum S P %ST %GUE %HYP + 2 example 4054916 13.0 0 0 1206 10 0 144 62 174 0 1452 S 106 0.0 99.7 16.0 +``` +As shown in the output, there is only one VM named "example" on the host. The ID is 2. The CPU usage is 13.0%. The total number of traps within one second is 1452. The physical CPU occupied by the VM process is CPU 106. The ratio of the VM internal occupation time to the CPU running time is 99.7%. + +1. Display VM thread information. +Press H to display the thread information. +```sh +vmtop - 2020-09-14 10:11:27 - 1.0 +Domains: 1 running + + DID VM/task-name PID %CPU EXThvc EXTwfe EXTwfi EXTmmioU EXTmmioK EXTfp EXTirq EXTsys64 EXTmabt EXTsum S P %ST %GUE %HYP + 2 example 4054916 13.0 0 0 1191 17 4 120 76 147 0 1435 S 119 0.0 123.7 4.0 + |_ qemu-kvm 4054916 0.0 0 0 0 0 0 0 0 0 0 0 S 119 0.0 0.0 0.0 + |_ qemu-kvm 4054928 0.0 0 0 0 0 0 0 0 0 0 0 S 119 0.0 0.0 0.0 + |_ signalfd_com 4054929 0.0 0 0 0 0 0 0 0 0 0 0 S 120 0.0 0.0 0.0 + |_ IO mon_iothr 4054932 0.0 0 0 0 0 0 0 0 0 0 0 S 117 0.0 0.0 0.0 + |_ CPU 0/KVM 4054933 3.0 0 0 280 6 4 28 19 41 0 350 S 105 0.0 27.9 0.0 + |_ CPU 1/KVM 4054934 3.0 0 0 260 0 0 16 12 36 0 308 S 31 0.0 20.0 0.0 + |_ CPU 2/KVM 4054935 3.0 0 0 341 0 0 44 20 26 0 387 R 108 0.0 27.9 4.0 + |_ CPU 3/KVM 4054936 5.0 0 0 310 11 0 32 25 44 0 390 S 103 0.0 47.9 0.0 + |_ memory_lock 4054940 0.0 0 0 0 0 0 0 0 0 0 0 S 126 0.0 0.0 0.0 + |_ vnc_worker 4054944 0.0 0 0 0 0 0 0 0 0 0 0 S 118 0.0 0.0 0.0 + |_ worker 4143738 0.0 0 0 0 0 0 0 0 0 0 0 S 120 0.0 0.0 0.0 +``` +The example VM has 11 threads, including the vCPU thread, vnc_worker, and IO mon_iotreads. Each thread also displays detailed CPU usage and trap information. + +2. Select the monitoring item. +Enter f to edit the monitoring item. +```sh +field filter - select which field to be showed +Use up/down to navigate, use space to set whether chosen filed to be showed +'q' to quit to normal display + + * DID + * VM/task-name + * PID + * %CPU + * EXThvc + * EXTwfe + * EXTwfi + * EXTmmioU + * EXTmmioK + * EXTfp + * EXTirq + * EXTsys64 + * EXTmabt + * EXTsum + * S + * P + * %ST + * %GUE + * %HYP +``` +By default, all monitoring items are displayed. You can press the up or down key to select a monitoring item. Press the space bar to set the monitoring item, and press q to exit. +After %ST, %GUE, and %HYP are hidden, the following information is displayed: +```sh +vmtop - 2020-09-14 10:23:25 - 1.0 +Domains: 1 running + + DID VM/task-name PID %CPU EXThvc EXTwfe EXTwfi EXTmmioU EXTmmioK EXTfp EXTirq EXTsys64 EXTmabt EXTsum S P + 2 example 4054916 12.0 0 0 1213 14 1 144 68 168 0 1464 S 125 + |_ qemu-kvm 4054916 0.0 0 0 0 0 0 0 0 0 0 0 S 125 + |_ qemu-kvm 4054928 0.0 0 0 0 0 0 0 0 0 0 0 S 119 + |_ signalfd_com 4054929 0.0 0 0 0 0 0 0 0 0 0 0 S 120 + |_ IO mon_iothr 4054932 0.0 0 0 0 0 0 0 0 0 0 0 S 117 + |_ CPU 0/KVM 4054933 2.0 0 0 303 6 0 29 10 35 0 354 S 98 + |_ CPU 1/KVM 4054934 4.0 0 0 279 0 0 39 17 49 0 345 S 1 + |_ CPU 2/KVM 4054935 3.0 0 0 283 0 0 33 20 40 0 343 S 122 + |_ CPU 3/KVM 4054936 3.0 0 0 348 8 1 43 21 44 0 422 S 110 + |_ memory_lock 4054940 0.0 0 0 0 0 0 0 0 0 0 0 S 126 + |_ vnc_worker 4054944 0.0 0 0 0 0 0 0 0 0 0 0 S 118 + |_ worker 1794 0.0 0 0 0 0 0 0 0 0 0 0 S 126 +``` +%ST, %GUE, and %HYP will not be displayed on the screen. diff --git a/docs/en/docs/desktop/DDE-User-Manual.md b/docs/en/docs/desktop/DDE-User-Manual.md new file mode 100755 index 0000000000000000000000000000000000000000..f1d10a547cd7c5b2005ef99e17631ca344bceb64 --- /dev/null +++ b/docs/en/docs/desktop/DDE-User-Manual.md @@ -0,0 +1,858 @@ + + +# DDE Desktop Environment + + + + + +- [DDE Desktop Environment](#dde-desktop-environment) + - [Overview](#overview) + - [Desktop](#desktop) + - [Dock](#dock) + - [Launcher](#launcher) + - [Control Center](#control-center) + - [Keyboard Interaction](#keyboard-interaction) + + + + +## Overview +DDE desktop environment is an elegant, secure, reliable and easy to use GUI comprised of the desktop, dock, launcher and control center. Acting as the key basis for our operating system, its main interface is shown as below. + +![1|desk](./figures/43.jpg) + +### Getting Started + +When you enter DDE for the very first time, a welcome program will automatically start. You can watch the introduction video, select your desktop style and icon theme, and learn more about the system functions. + +![0|welcome](./figures/46.png) + + + +## Desktop + +Desktop is the main screen you see after logging in. On the desktop, you can create a new file/folder, sort files, open in terminal, set wallpaper and screensaver and etc. You can also add shortcuts for applications on desktop by using [Send to desktop](#Set App Shortcut). + +![0|contextmenu](./figures/41.png) + +### Create New Folder/Document +Just as in File Manager, you can create a new folder/document on the desktop, or do some operations for the files on it. + +- Right-click the desktop, select **New folder** and enter the name for it. +- Right-click the desktop, select **New document**, select the type and enter its name. + +Right-click a file or folder on the desktop, and use the features of File Manager as below: + +| Function | Description | +| ---------------- | ------------------------------------------------------------ | +| Open with | Select an app to open it. | +| Cut | Move it to another location. | +| Copy | Copy it to another location. | +| Rename | Change its name. | +| Delete | Delete and move it to the trash. | +| Create link | Create a shortcut of the file or folder. | +| Tag information | Add a tag. | +| Compress/Extract | Compress the file or folder, or extract the compressed file. | +| Properties | View the basic info, share it or change the permission. | + +### Sort Files + +Sort the files on your desktop to make it organized and fit your needs. + +1. Right-click the desktop. +2. Click **Sort by**, you can: + + - Click **Name** to display files in the name sequence. + - Click **Size** to display files in the size sequence. + - Click **Type** to display files in type. + - Click **Time modified** to display files in the order of last modified date. + + +> ![tips](./figures/icon125-o.svg)Tips: *Check **Auto arrange**, icons on the desktop will be listed in order automatically, and if an icon is removed, another one will fill in the blank.* + + + + +### Adjust Icon Size + +1. Right-click the desktop. +2. Click **Icon size**, and choose a proper size. + +> ![tips](./figures/icon125-o.svg)Tips: *Press **Ctrl** + ![=](./figures/icon134-o.svg)/![-](./figures/icon132-o.svg) scrolling mouse wheel to adjust icon size on the desktop and in Launcher.* + +### Set Display +You can set display scaling, screen resolution, brightness and so on from the desktop. + +1. Right-click the desktop. +2. Click **Display Settings** to open the settings in Control Center. + +> ![notes](./figures/icon99-o.svg)Notes: *For specific operations, please refer to [Display](#Display).* + +### Change Wallpaper +Select some elegant and fashionable wallpapers to beautify your desktop and make it distinctive. + +1. Right-click the desktop. +2. Click **Wallpaper and Screensaver** to preview all the wallpapers. +3. Click your favorite one and it will apply in your desktop and screen lock. +4. You can also choose **Only desktop** or **Only lock screen**. + +![1|wallpaper](./figures/63.jpg) + + + +> ![tips](./figures/icon125-o.svg)Tips: *You can also set your favorite picture as wallpaper in an image viewer.* + +### Clipboard + +All the texts, pictures and documents cut and copied by the current user after login are displayed in the clipboard, which can be copied quickly by double-clicking the clipboard. The clipboard is cleared automatically after logout and shutdown. + +1. Use the shortcuts **Ctrl**+**Alt**+ **V** to wake up the clipboard. + +2. Double-click in the clipboard to copy the current content quickly and the corresponding block will be moved to the top of the clipboard. + +3. Select the target destination to paste it. + +4. Click![close](./figures/icon57-o.svg)to delete the current content and click **Clear All** to clear the clipboard. + + ![1|clipboard](./figures/40.png) + +## Dock + +Dock is at the bottom of the desktop by default to help you quickly open frequently-used applications, which includes Launcher, applications, system tray, and plugins. In the dock, you can open launcher, show the desktop, enter the workspaces, open and exit apps, set input methods, adjust the volume, connect to the network, view the calendar and enter the shutdown interface, and so on. + +### Icons on Dock +In the Dock, there are icons of Launcher, applications, system tray, and plugins. + + + +![1|fashion](./figures/45.png) + +| Icon | Description | +| ---- | ---- | +| ![launcher](./figures/icon66-o.svg) | Launcher - click to view all the installed applications. | +| ![deepin-toggle-desktop](./figures/icon69-o.svg) | Click to show the desktop. | +| ![dde-file-manager](./figures/icon63-o.svg) | File Manager - click to view files and folders on the disk. | +| ![dde-calendar](./figures/icon62-o.svg) | Calendar - view dates and create new schedules. | +| ![controlcenter](./figures/icon58-o.svg) | Control Center - click to check or change system settings. | +| ![notification](./figures/icon101-o.svg) | Notification Center - show all notifications from the system and applications. | +| ![onboard](./figures/icon103-o.svg) | Onboard virtual keyboard. | +| ![shutdown](./figures/icon122-o.svg) | Click to enter the shutdown interface. | +| ![trash](./figures/icon126-o.svg) | Trash. | + +> ![tips](./figures/icon125-o.svg)Tips: *In Efficient Mode, you can click the right side of Dock to show the desktop. Move the cursor to the running app in the Dock and you will see its preview window.* + +### Switch Display Mode +There are two display modes of Dock: fashion mode and efficient mode, icon sizes are different in them. + +![1|fashion](./figures/46.png) + +![1|efficient](./figures/63.png) + +You can switch the display modes by the following operations: + +1. Right-click the Dock and select **Mode**. +2. Select the display mode. + +### Change Dock Location +You can place Dock on any direction of your desktop. + +1. Right-click the Dock and select **Location**. +2. Select a location. + +### Change Dock Height +Drag the top edge to increase or decrease the height. + + +### Show/Hide Plugins + +1. Right-click the Dock and select **Plugins**. +2. On the submenu, you can check or uncheck **Trash, Power, Show Desktop, Onboard**, and **Datetime** to show or hide the corresponding icon in the Dock. + +### View Notifications +When there are system or application notifications, they will be shown in the middle of the screen. If there are buttons in the message, click buttons to do the actions; if there are not, click the message to close it. + + + +![notification](./figures/51.png) + +Click notification in Dock to view all the notifications. + +### View Date and Time + +- Hover the cursor over the Time icon in Dock to view the current time, date and day of the week. +- Click the Time icon to open Calendar. + +### Enter Shutdown Interface + +There are two ways to enter the shutdown interface: + +- Click ![shutdown](./figures/icon122-o.svg) in Dock. +- Click ![poweroff_normal](./figures/icon136-o.svg) at the bottom right corner of Launcher mini mode. + +| Function | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| Shut down ![poweroff_normal](./figures/icon136-o.svg) | Shut down the computer. | +| Reboot ![reboot_normal](./figures/icon110-o.svg) | Restart the computer. | +| Lock ![lock_normal](./figures/icon90-o.svg) | Lock the computer with the password. Or press **Super** + **L** to lock it. | +| Switch user ![userswitch_normal](./figures/icon128-o.svg) | Log in with another user account. | +| Log out ![logout_normal](./figures/icon92-o.svg) | End all the processes and initialize the system. | +| Start system monitor![deepin-system-monitor](./figures/icon68-o.svg) | View the running processes and end the one you want. | + +> ![notes](./figures/icon99-o.svg)Notes: ![userswitch_normal](./figures/icon128-o.svg) *will be shown if there are multiple accounts in the system.* + +### Trash +You can find all deleted files in the trash, which can be restored or emptied. + +#### Restore Files + +You can restore deleted files in Trash or press **Ctrl** + **Z** to restore the lately deleted files. + +1. Select the file in the trash. +2. Right-click the file and select **Restore**. +3. The file will be in its original path. + +> ![attention](./figures/icon52-o.svg)Attention: *If the original folder of the file has been deleted, the deleted file will be restored to a new folder automatically created.* + +#### Empty Trash +In the trash, click **Empty** to permanently delete all the files in the trash. + +## Launcher +Launcher ![launcher](./figures/icon66-o.svg) helps you manage all the installed applications, where you can quickly find an application by category navigation or by a search. + +> ![tips](./figures/icon125-o.svg)Tips: *You can view newly installed applications in Launcher. The newly-installed ones are followed with a blue dot.* + + +### Switch Launcher Modes + +There are two display modes of Launcher: fullscreen mode and mini mode. Click the icon at the upper right corner to switch modes. + +Both modes support searching applications and sending them to the desktop or Dock. + +The mini mode also supports opening File Manager, Control Center and shutdown interface directly. + +![1|fullscreen](./figures/47.jpg) +![1|mini](./figures/52.png) + +### Sort Applications + +In fullscreen mode, all applications in Launcher are listed by the installation time by default. You can sort the application icons as the ways below: + +- Hover the cursor over an application icon, hold down the left key of mouse, drag and drop the application icon to arrange it freely. +- Click the category icon ![category](./figures/icon56-o.svg) on the upper left in Launcher to arrange the icons by category. + +![1|sortapp](./figures/60.jpg) + +In mini mode, applications are displayed according to using frequency by default. + +### Find Applications + +In Launcher, you can scroll up and down to find an application, or locate it with the category navigation. + +If you already know the application name, just search for it. + +### Set App Shortcut +The shortcut offers a method to run applications easily and quickly. + +#### Create App Shortcut +Send the application icon to the desktop or Dock to facilitate the follow-up operations. + +In Launcher, right-click an app icon and you can: + +* Select **Send to desktop** to create a shortcut on the desktop. +* Select **Send to dock** to fix the application icon in Dock. + +![0|sendto](./figures/58.png) + +> ![notes](./figures/icon99-o.svg)Notes: *You can drag the application icon from Launcher to Dock. But you cannot drag and drop the application while it is running. Then you can right-click the application icon in Dock and select **Dock** to fix it in order to open it quickly for the next time.* + +#### Delete Shortcut +Delete a shortcut from the desktop directly, or remove it from Dock or Launcher. + +**Remove the shortcut from Dock:** + +- Hold down the left key of mouse, drag and drop the icon away from Dock. +- You cannot drag and drop the application icon while it is running. Then you can right-click the application icon in Dock and select **Undock** to remove it from Dock. + +**Remove the shortcut from Launcher:** + +In Launcher, right-click the icon and you can: +- Select **Remove from desktop** to delete the shortcut from the desktop. +- Select **Remove from dock** to remove the application icon from Dock. + +> ![notes](./figures/icon99-o.svg)Notes: *The above operations only delete the shortcut rather than uninstall the applications.* + +### Run Applications +For the applications whose shortcuts have been created on the desktop or Dock, you can open them in the following ways: + +- Double-click the desktop icon or right-click it and select **Open**. +- Click the application icon in Dock or right-click it and select **Open**. + +To open the application only shown in Launcher, click the icon or right-click it and select **Open**. + +> ![tips](./figures/icon125-o.svg)Tips: *For the frequently-used applications, right-click the app icon and select **Add to startup** to run it when the computer boots.* + + +## Control Center +You can manage the system settings in Control Center, including account management, network settings, date and time, personalization, display settings, etc. After entering the desktop environment, click ![controlcenter](./figures/icon58-o.svg) to open Control Center. + +### Homepage Introduction +The homepage of Control Center provides several setting modules and click one to enter the detailed settings. + +![0|dcchomepage](./figures/42.png) + +Once you open a setting module in Control Center, the navigation appears on the left. Click the left navigation to quickly switch to other settings. + +![0|cc-navigation](./figures/39.png) + +#### Title Bar + +The title bar contains the back button, search box, main menu and the window buttons. + +- Back button: Click ![back](./figures/icon53-o.svg) to go back to the homepage. +- Search box: Input a keyword and search the related settings. +- Main menu: Click ![menu](./figures/icon83-o.svg) to enter the main menu where you can set the window theme, view the manual and exit. + +### Accounts +You have already created an account when installing the system. Here you can modify account settings or create a new one. + +![0|account](./figures/38.png) + +#### Create New Account + +1. On the homepage of Control Center, click ![account_normal](./figures/icon49-o.svg). +2. Click ![add](./figures/icon50-o.svg). +3. Input a username and a password twice. +4. Click **Create**. +5. Input the password of the current user account in the authentication dialog box, and the new account will be added to the account list. + + +#### Change Account Avatar + +1. On the homepage of Control Center, click ![account_normal](./figures/icon49-o.svg). +2. Click an existing account in the list. +3. Click the user avatar. +4. Select a avatar or upload a local avatar. + +#### Set Full Name +The account full name is shown in account list and system login interface and you can set it as needed. + +1. On the homepage of Control Center, click ![account_normal](./figures/icon49-o.svg). +2. Click an existing account in the list. +3. Click ![edit](./figures/icon75-o.svg) after **Full Name**, and input a name. + +#### Change Password + +1. On the homepage of Control Center, click ![account_normal](./figures/icon49-o.svg). + +2. Click the current account. + +3. Click **Change Password**. + +4. Input a new password twice and confirm. + +#### Delete Account + +1. On the homepage of Control Center, click ![account_normal](./figures/icon49-o.svg). +2. Click an account that's not logged in. +3. Click **Delete Account**. +4. Click **Delete** in the pop-up window. + +> ![attention](./figures/icon52-o.svg)Attention: *The logged in account cannot be deleted.* + +#### Privilege + +The first account has administrator privilege when you install the system. All other accounts you add after that are common users. One account can be grouped in many user groups. + +##### Group Setting + +When you add or modify accounts, you can: + +- Select a group existing in the system. +- Select the group with the same name as the current user. +- Select the group with the same name as another user when the account was previously added. + +### Display +Set screen resolution, brightness, direction and display scaling properly to have the best visual effect. + +![0|display](./figures/44.png) + + +#### Single Screen Settings + +##### Change Resolution + +1. On the homepage of Control Center, click ![display_normal](./figures/icon72-o.svg). +2. Click **Resolution**. +3. Select a proper resolution in the list. +4. Click **Save**. + +##### Adjust Brightness + +1. On the homepage of Control Center, click ![display_normal](./figures/icon72-o.svg). +2. Click **Brightness**. + - Drag the slider to set screen brightness. + - Switch on **Night Shift**, the screen hue will be auto-adjusted according to your location. + - Switch on **Auto Brightness**, the monitor will change the brightness automatically according to ambient light (shown only if PC has a light sensor). + +##### Change Refresh Rate +1. On the homepage of Control Center, click ![display_normal](./figures/icon72-o.svg). +2. Click **Refresh Rate**. +3. Select a proper one, and click **Save**. + +##### Change Display Direction + +1. On the homepage of Control Center, click ![display_normal](./figures/icon72-o.svg). +2. Click ![rotate](./figures/icon112-o.svg). +3. Every time you click, the screen will rotate 90 degrees counterclockwise. +4. To restore to the original direction, click the right button to exit; to use the current direction, press **Ctrl**+ **S** to save it. + +#### Multiple Screen Settings + +Expand your desktop by multiple screens! Use VGA/HDMI/DP cable to connect your computer to other display devices. + +1. On the homepage of Control Center, click ![display_normal](./figures/icon72-o.svg). +2. Click **Multiple Displays**. +3. Select a display mode: + - **Duplicate**: display the same image on other screens. + - **Extend**: expand the desktop across the screens. + - **Customize**: customize the display settings for multiple screens. + +In multiple displays, press **Super** + **P** to show its OSD. + +Operations are as follows: + +1. Hold **Super** and press **P** or click to select the options. +2. Release the keys, the selected mode will take into effect. + +>![notes](./figures/icon99-o.svg)Notes: *When the multiple displays are in the extend mode, only the main screen supports desktop icon display, right-click menu operation and other functions, while the sub-screens do not.* + +##### Custom Settings + +1. On the homepage of Control Center, click ![display_normal](./figures/icon72-o.svg). +2. Click **Multiple Displays** > **Customize**. +3. Click **Recognize**. +4. Choose **Merge** or **Split** the screens, specify the main screen, set the resolution and refresh rate, and rotate screen if you want. +5. Click **Save**. + +> ![notes](./figures/icon99-o.svg)Notes: *"Merge" means duplicate mode, "Split" means extend mode.* + +### Default Application Settings +If you have installed several applications with similar functions, such as text editor, choose one of them to be the default application to open that type of file. + +![0|default](./figures/39.png) + +#### Set Default Application + +1. Right-click the file, choose **Open with** > **Set default program**. +2. Select one application, **Set as default** is checked by default, and click **Confirm**. +3. The application will automatically be added to the default application list in Control Center. + +#### Change Default Application + +1. On the homepage of Control Center, click ![default_applications_normal](./figures/icon70-o.svg). +2. Select a file type. +3. Select another one in the list as the default application. + +#### Add Default Application + +1. On the homepage of Control Center, click ![default_applications_normal](./figures/icon70-o.svg). +2. Select a file type. +3. Click ![add](./figures/icon50-o.svg) below to add a desktop file (usually at /usr/share/applications) or a specified binary file as the default application. +4. The application will be added to the list and set as default application automatically. + +#### Delete Default Application + +In the default application list, you can only delete the applications you added. To remove other applications from the list, the only way is to uninstall them. Once uninstalled, they will automatically be deleted from the list. + +To delete the default applications you have added, do as below: + +1. On the homepage of Control Center, click ![default_applications_normal](./figures/icon70-o.svg). +2. Select a file type. +3. Click ![close](./figures/icon57-o.svg) after the application name to delete it. + + +### Personalization Settings +You can set theme, accent color, font, change the appearance of the desktop and windows to your favorite style. + +![0|personalise](./figures/56.png) + +#### Set Window Theme +1. On the homepage of Control Center, click ![personalization_normal](./figures/icon105-o.svg). +2. Click **General**. +3. Select one window theme, which will be used as system theme. + +> ![notes](./figures/icon99-o.svg)Notes: *"Auto" means changing window theme automatically according to the sunset and sunrise time. After sunrise, it is light theme; after sunset, it is dark theme.* + +#### Change Accent Color +Accent color refers to the color used when you select one option or file in the system. + +1. On the homepage of Control Center, click ![personalization_normal](./figures/icon105-o.svg). +2. Click **General**. +3. Pick a color under **Accent Color** and view its effects. + +#### Set Icon Theme + +1. On the homepage of Control Center, click ![personalization_normal](./figures/icon105-o.svg). +2. Click **Icon Theme** and select an icon style. + + +#### Set Cursor Theme + +1. On the homepage of Control Center, click ![personalization_normal](./figures/icon105-o.svg). +2. Click **Cursor Theme** and select a set of cursors. + +#### Change Font + +1. On the homepage of Control Center, click ![personalization_normal](./figures/icon105-o.svg). +2. Click **Font**. +3. Set the font and font size for the system. + + +### Network Settings +After login, you need to connect to a network first and then surf the Internet! + +> ![tips](./figures/icon125-o.svg)Tips: *Check your network status by hovering over or clicking the network icon in Dock.* + +![0|network](./figures/54.png) + +#### Wired Network + +Wired network is secure and stable, which makes it the most common way to connect to the Internet. After your router is set, connect both ends of the network cable to the computer and router to connect to a wired network. + +1. Plug the cable into the network slot of a computer. +2. Plug another end of the cable into the router or network port. +3. On the homepage of Control Center, click ![network_normal](./figures/icon97-o.svg). +4. Click **Wired Network** to enter the setting page of wired network. +5. Switch on **Wired Network Adapter** to enable wired network. +6. If it is successfully connected to the network, there will be a prompt "Wired Connection connected". + +You can also edit and add a new wired network in the setting page. + +#### Mobile Network +If you are at a place without network, mobile network adapter is a useful tool to help you connect to the Internet as long as the place is covered by telephone signals. + +1. Plug the mobile network adapter into your computer USB port. +2. Your computer will auto connect to the network. +3. On the homepage of Control Center, click ![network_normal](./figures/icon97-o.svg). +4. Click **Mobile Network** to view the detailed network info. + +#### DSL/PPPoE Connections + +DSL is a dial-up connection using a standard phone line and analog modem to access the Internet. Configure the modem, plug the telephone line into the network interface of the computer, create a broadband dial-up connection, and enter the user name and password provided by the operator to dial up the Internet. + +##### Create a PPPoE Connection + +1. On the homepage of Control Center, click ![network_normal](./figures/icon97-o.svg). +2. Click **DSL**. +3. Click ![add](./figures/icon50-o.svg). +4. Enter the name, your account and password the operator provides. +5. Click **Save**. The connection will automatically start. + + +#### VPN + +VPN is a virtual private network. Its main function is to establish a private network on the public network for encrypted communication. Whether you are on a business trip or working at home, you can use VPN to access intranet resources as long as you can access the Internet. You can also use VPN to speed up access to websites in other countries. + +1. On the homepage of Control Center, click ![network_normal](./figures/icon97-o.svg). +2. Click **VPN**, and click ![add](./figures/icon50-o.svg) or ![import](./figures/icon84-o.svg). +3. Select the VPN protocol type, and enter the name, gateway, account, password and other information. (Importing VPN will automatically fill in information) +4. Click **Save**, the system will try to connect VPN network automatically. +5. You can export the VPN settings to backup or share with other users. + +> ![notes](./figures/icon99-o.svg)Notes: *If you don't want to use the VPN as the default routing, but only want it to take effect on specific network resources, switch on **Only applied in corresponding resources**.* + +#### System Proxy + +1. On the homepage of Control Center, click ![network_normal](./figures/icon97-o.svg). +2. Click **System Proxy**. + - Click **None** and **Save** to disable the proxy. + - Click **Manual** and input the address and port of proxy servers. + - Click **Auto** and input a URL to configure the proxy info. + +#### Application Proxy + +1. On the homepage of Control Center, click ![network_normal](./figures/icon97-o.svg). +2. Click **Application Proxy**. +3. Select a proxy type, and fill in the IP address, port, etc. +4. Click **Save** to save the proxy settings. + +> ![notes](./figures/icon99-o.svg)Notes: *After being configured, run Launcher, right-click any application's icon and check **Use a proxy**, and then the application will be opened by proxy.* + +#### Network Info + +You can view MAC, IP address, gateway and other network info in network details. + +1. On the homepage of Control Center, click ![network_normal](./figures/icon97-o.svg). +2. Click **Network Details**. +3. View the network info of the current network. + +### Sound Settings + +Set your speaker and microphone properly to make you hear more comfortable and make clearer recordings. + +![0|sound](./figures/61.png) + +#### Output + +1. On the homepage of Control Center, click ![sound_normal](./figures/icon116-o.svg). + +2. Click **Output** to: + + - Select output device type from the dropdown list after **Output Device**. + + - Drag the slider to adjust output volume and left/right balance. + - Switch on **Volume Boost**, the volume could be adjustable from 0~150% (the former range is 0~100%). + + + +#### Input + +1. On the homepage of Control Center, click ![sound_normal](./figures/icon116-o.svg). +2. Click **Input** to: + - Select input device type from the dropdown list after **Input Device**. + - Adjust input volume by dragging the slider. + - You can enable **Automatic Noise Suppression** by clicking the button after "Automatic Noise Suppression". + +> ![tips](./figures/icon125-o.svg)Tips: *Usually, you need to turn up the input volume to make sure that you can hear the sound of the sound source, but the volume should not be too high, because it will cause distortion of the sound. Here is how to set input volume: Speak to your microphone at a normal volume and view "Input Level". If the indicator changes obviously according to the volume, then the input volume is at a proper level.* + + + +#### System Sound Effects + +1. On the homepage of Control Center, click ![sound_normal](./figures/icon116-o.svg). +2. Click **Sound Effects**, check the options you want to switch on the sound when the corresponding event occurs. + +> ![tips](./figures/icon125-o.svg)Tips: *Click to listen to the sound effect.* + +### Date and Time +Set your timezone properly to have correct date and time. You can also change them manually. + +![0|time](./figures/62.png) + +#### Change Timezone +You have selected the timezone during system installation and do as follows to change it. + +1. On the homepage of Control Center, click ![time](./figures/icon124-o.svg). +2. Click **Timezone List**. +3. Click **Change System Timezone** and select a timezone by searching or clicking on the map. +4. Click **Confirm**. + +#### Add Timezone +Add another timezone to see the date and time there. + +1. On the homepage of Control Center, click ![time](./figures/icon124-o.svg). +2. Click **Timezone List**. +3. Click ![add](./figures/icon50-o.svg), select a timezone by searching or clicking on the map. +4. Click **Add**. + +#### Delete Timezone + +1. On the homepage of Control Center, click ![time](./figures/icon124-o.svg). +2. Click **Timezone List**. +3. Click **Edit** after "Timezone List". +4. Click ![delete](./figures/icon71-o.svg) to remove the timezone. + +#### Change Date and Time +Note that the auto-sync function will be disabled after changing date and time manually. + +1. On the homepage of Control Center, click ![time](./figures/icon124-o.svg). +2. Click **Time Settings**. + - Switch on/off **Auto Sync**. + - Enter the correct date and time. +3. Click **Confirm**. + +#### Set Time Format + +Setting the format of time and date is supported. + +1. On the homepage of Control Center, click ![time](./figures/icon124-o.svg). +2. Click **Time Format** to set the first day of week, long date, short date, long time, and short time. + + + +### Power Management + +Power management helps you to improve system safety. + +![0|power](./figures/57.png) + + + +#### Time to Suspend + +1. On the homepage of Control Center, click ![power_normal](./figures/icon107-o.svg). +2. Click **Plugged In**. +3. Set the time to suspend. + +#### Time to Lock Screen +1. On the homepage of Control Center, click ![power_normal](./figures/icon107-o.svg). +2. Click **Plugged In**. +3. Set the time to lock screen. + +#### Power button settings + +1. On the homepage of Control Center, click ![power_normal](./figures/icon107-o.svg). +2. Click **Plugged In**. +3. You can select **Shut down, Suspend, Hibernate, Turn off the monitor, Do nothing** from the drop-down list after **When pressing the power button**. + +Any operation done here will take effect immediately. At the same time, the system will notify the user that the power button setting is changed. + + + +### Mouse + +Mouse is common computer input device. Using the mouse, you can make the operation easier and faster. + +![0|mouse](./figures/53.png) + +#### General Settings + +1. On the homepage of Control Center, click ![mouse_touchpad_normal](./figures/icon94-o.svg). +2. Click **General**. +3. Switch on **Left Hand**, and adjust **Scrolling Speed**, **Double-click Speed**. + +> ![notes](./figures/icon99-o.svg)Notes: *If "Left Hand" is enabled, left-click and right-click of the mouse exchange.* + +#### Mouse +After inserting or connecting the mouse, make relevant settings in the Control Center to make it more in line with your usage habits. + +1. On the homepage of Control Center, click ![mouse_touchpad_normal](./figures/icon94-o.svg). +2. Click **Mouse**. +3. Adjust **Pointer Speed**, which helps you to control the speed at which the pointer moves as the mouse moves. +4. Switch on **Natural Scrolling**/**Mouse Acceleration** if you want. + +> ![notes](./figures/icon99-o.svg)Notes: +> - *Turn on the mouse acceleration to improve the accuracy of the pointer. The moving distance of the mouse pointer on the screen will increase according to the acceleration of the moving speed. It can be turned on or off according to the usage.* +> - *If Natural Scrolling is enabled, when you scroll down, the page will scroll down, when you scroll up, the page will scroll up as well.* + +### Keyboard and Language +Set keyboard properties and select your keyboard layout to keep your typing habit. You can also adjust the keyboard layout according to the country and language, change system language, and customize shortcuts here. + +![0|keyboard](./figures/59.png) + +#### Keyboard Properties + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **General**. +3. Adjust **Repeat Delay**/**Repeat Rate**. +4. Click "Test here" and hold down a key to test the repeat rate. +5. Switch on **Numeric Keypad** and **Caps Lock Prompt** if you want. + +#### Keyboard Layout +Set the keyboard layout to customize the keyboard for the current language. When you press a key on the keyboard, the keyboard layout controls which characters are displayed on the screen. After changing the keyboard layout, the characters on the screen may not match the characters on the keyboard keys. + +You have set a keyboard layout during system installation, but you can add more for other purposes. + +![layout](./figures/50.png) + +##### Add Keyboard Layout + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **Keyboard Layout**. +3. Click ![add](./figures/icon50-o.svg). Click a keyboard layout to add it. + +##### Delete Keyboard Layout + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **Keyboard Layout**. +3. Click **Edit**. +4. Click ![delete](./figures/icon71-o.svg) to delete keyboard layout. + +##### Switch Keyboard Layout + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **Keyboard Layout**. +3. Click the layout you want to switch to. +4. After successful switching, the layout will be marked with a check. + +> ![tips](./figures/icon125-o.svg)Tips: *You can also select one or more shortcuts to switch the keyboard layouts in order. Select **Applies to** to make the keyboard layout after switching be applied to the whole system or current application.* + +#### System Language + +The system language is the language you selected when you installed the system by default, which can be changed at any time. + +##### Add System Language +Add multiple languages into the list to change language conveniently. + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **System Language**. +3. Click ![add](./figures/icon50-o.svg) to enter the language list. +4. Select the language you want, and it will be added into system language list automatically. + +##### Change System Language + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **System Language**. +3. Select the language you want to switch to, and the language package will be installed automatically. +4. After being successfully installed, log out and log in again to view the changes. + +> ![attention](./figures/icon52-o.svg)Attention: *The keyboard layout may also be changed in the process of switching the system language. Please make sure that you select a correct keyboard layout to enter the login password.* + +#### Shortcuts +The shortcut list includes all shortcuts in the system. View, modify and customize the shortcuts here as you want. + +![0|shortcut](./figures/59.png) + +##### View Shortcuts + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **Shortcuts**. +3. You can search or view the default shortcuts for system, window and workspace. + + +##### Modify Shortcuts + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **Shortcuts**. +3. Click the shortcut you want to modify. +4. Press new shortcut to change it. + +> ![tips](./figures/icon125-o.svg)Tips: *To disable a shortcut, please press ![Backspace](./figures/icon54-o.svg) on the keyboard. To cancel modifying, press **Esc** or click Restore Defaults at the bottom.* + +##### Customize Shortcuts + +1. On the homepage of Control Center, click ![keyboard_normal](./figures/icon86-o.svg). +2. Click **Shortcuts**. +3. Click ![add](./figures/icon50-o.svg). +4. Enter the name, command and shortcut. +5. Click **Add**. +6. After being successfully added, click **Edit**. +7. Click ![delete](./figures/icon71-o.svg) to delete the custom shortcut. + +> ![tips](./figures/icon125-o.svg)Tips: *To change the shortcut, click it and press a new shortcut to change it directly. To edit the name and command of the custom shortcut, click **Edit ** > ![edit](./figures/icon75-o.svg) near the shortcut name to enter the shortcut settings.* + +### System Info + +You can view system version, authorization info, hardware info, and the agreements here. + +![0|info](./figures/48.png) + +#### About This PC + +1. On the homepage of Control Center, click ![system_info_normal](./figures/icon120-o.svg). +2. Under **About This PC**, you can view system version, authorization and hardware information. +3. If the system has not been activated, click **Activate** to activate the system. + +#### Edition License + +1. On the homepage of Control Center, click ![system_info_normal](./figures/icon120-o.svg). +2. View the system edition license under **Edition License**. + +#### End User License Agreement + +1. On the homepage of Control Center, click ![system_info_normal](./figures/icon120-o.svg). +2. View the End User License Agreement under **End User License Agreement**. + +## Keyboard Interaction + +You can use the keyboard to switch between various interface areas, select objects and perform operations. + +| Key | Function | +| :----------------------------------------------------------- | :----------------------------------------------------------- | +| **Tab** | Switch between different areas or dialog buttons. | +| ![Up](./figures/icon127-o.svg) ![Down](./figures/icon73-o.svg) ![Left](./figures/icon88-o.svg) ![Right](./figures/icon111-o.svg) | Used to select different objects in the same area. Press ![Right](./figures/icon111-o.svg) to enter the lower menu and ![Left](./figures/icon88-o.svg) to return to the upper menu. Press![Up](./figures/icon127-o.svg)and ![Down](./figures/icon73-o.svg) to switch between up and down. | +| **Enter** | Execute the selected operation. | +| **Space** | Preview the selected object in File Manager; start and pause the playback in Music and Movie; expand the drop-down options in the drop-down list (The enter key is also available.). | +| **Ctrl** + **M** | Open the right-click menu. | + diff --git a/docs/en/docs/desktop/Install_XFCE.md b/docs/en/docs/desktop/Install_XFCE.md new file mode 100644 index 0000000000000000000000000000000000000000..c84b735a5bd23d04d8fc60830c9931e5d6a20708 --- /dev/null +++ b/docs/en/docs/desktop/Install_XFCE.md @@ -0,0 +1,69 @@ +# Xfce Installation + +Xfce is a lightweight Linux desktop. In the current version, all components have been updated from GTK2 to GTK3 and from D-Dbus Glib to GDBus. Most components support GObject Introspection (GI), which is used to generate and parse the API meta information of the C program library, so that the dynamic language (or managed language) can be bound to the program library based on C + GObject. In the current version, user experience is optimized, new features are added, and a large number of bugs are fixed. Xfce occupies fewer memory and CPU resources than other UIs (GNOME and KDE), providing smoother and more efficient user experience. + +Xfce supports the x86\_64 and AArch64 architectures. + +You are advised to create an administrator during the installation. + +1. [Download](https://openeuler.org/en/download/) the openEuler ISO image and install the system. Run the following command to update the software source. You are advised to configure the Everything source and the EPOL source. This document describes how to install Xfce in the minimum installation scenario. + + ``` + sudo dnf update + ``` + +2. Run the following command to install the font library: + + ``` + sudo dnf install dejavu-fonts liberation-fonts gnu-*-fonts google-*-fonts + ``` + +3. Run the following command to install Xorg: + + ``` + sudo dnf install xorg-* + ``` + +4. Run the following command to install Xfce: + + ``` + sudo dnf install xfwm4 xfdesktop xfce4-* xfce4-*-plugin + ``` + +5. Run the following command to install the login manager: + + ``` + sudo dnf install lightdm lightdm-gtk + ``` + +6. Run the following command to start Xfce using the login manager: + + ```` + sudo systemctl start lightdm + ```` + + After the login manager is started, choose **Xfce Session** in the upper right corner and enter the user name and password to log in. + +7. Run the following command to set the GUI to start upon system boot: + + ``` + sudo systemctl enable lightdm + sudo systemctl set-default graphical.target + ``` + + If GDM is installed by default, you are advised to disable GDM. + + ``` + systemctl disable gdm + ``` + +8. Restart the server. + + ``` + sudo reboot + ``` + +9. FAQs + **Why Is the Background Color of the LightDM Login Page Black?** + The login page is black because `background` is not set in the default configuration file **/etc/lightdm/lightdm-gtk-greeter.conf** of lghtdm-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. \ No newline at end of file diff --git a/docs/en/docs/desktop/UKUI-user-guide.md b/docs/en/docs/desktop/UKUI-user-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..eb97c390dd771b5c9a13e7df1100a75b25fb65ab --- /dev/null +++ b/docs/en/docs/desktop/UKUI-user-guide.md @@ -0,0 +1,417 @@ +# UKUI Desktop Environment + + + + + + +- [UKUI Desktop Environment](#ukui-desktop-environment) + - [Overview](#overview) + - [Desktop](#desktop) + - [Desktop’s Icons](#desktops-icons) + - [Right-click Menu](#right-click-menu) + - [Taskbar](#taskbar) + - [Basic Function](#basic-function) + - [Multi View Switch](#multi-view-switch) + - [Preview Window](#preview-window) + - [Sidebar](#sidebar) + - [Notification Center](#notification-center) + - [Clipboard](#clipboard) + - [Tray Menu](#tray-menu) + - [Storage Menu](#storage-menu) + - [Input Method](#input-method) + - [USB](#usb) + - [Power Supply](#power-supply) + - [Network](#network) + - [Volume](#volume) + - [Calendar](#calendar) + - [Night Mode](#night-mode) + - [Advanced Setting](#advanced-setting) + - [Window](#window) + - [Window Manager](#window-manager) + - [Window Switch](#window-switch) + - [Start Menu](#start-menu) + - [Basic Function](#basic-function-1) + - [Category Menu at right side](#category-menu-at-right-side) + - [Function Button at right side](#function-button-at-right-side) + - [User Avatar](#user-avatar) + - [Computer](#computer) + - [Control Center](#control-center) + - [Shutdown](#shutdown) + - [Lock Screen](#lock-screen) + - [Switch Users & Log Out](#switch-users-log-out) + - [Shutdown & Reboot](#shutdown-reboot) + - [Advanced Setting](#advanced-setting-1) + - [Applications](#applications) + - [FAQ](#faq) + - [Can’t login to the system after locking the screen?](#cant-login-to-the-system-after-locking-the-screen) + - [Appendix](#appendix) + - [Shortcut Key](#shortcut-key) + + + + +## Overview +Desktop Environment is the basis for the user's operation on the graphical interface, and provides multiple functions including taskbar, start menu, etc. The main interface is shown in figure below. + +![Fig. 1 Desktop main interface-big](./figures/1.png) + +
+ +## Desktop + +### Desktop’s Icons +The system places three icons Computer, Recycle Bin and Personal by default, and double click the left mouse button to open the page. The functions are shown in table below. + +| Icon | Description | +| :------------ | :------------ | +| ![](./figures/icon1.png) | Computer: Show the drives and hardwares connected to the machine| +| ![](./figures/icon2.png) | Recycle Bin: Show documents that have been diverted| +| ![](./figures/icon3.png) | Personal: Show personal home directory| + +
+ +In addition, right-clicking "Computer" and selecting "Properties", it can show the current system version, kernel version, activation and other related informations. + +![Fig. 2 "Computer" - "Properties"-big](./figures/2.png) + +### Right-click Menu +Right-click on the desktop blank and a menu appears as shown in figure below, providing the users with some shortcut features. + +![Fig. 3 Right-click Menu](./figures/3.png) + +Some of the options are described in table below. + +| Option | Description | +| :------------ | :------------ | +| New | Create new folders, text documents, WPS files | +| View type | Four view types are available: small icon, medium icon, large icon, super large icon | +| Sort by | Four ways to arrange documents according to name, type of document, size and date of modification | + +
+ +## Taskbar + +### Basic Function +Taskbar is located at the bottom and includes the Start Menu, Multi View Switch, File Browser, Firefox Web Browser, WPS, and Tray Menu. + +![Fig. 4 Taskbar](./figures/4.png) + +| Component | Decsription | +| :------------ | :------------ | +|![](./figures/icon4.png)| Start menu: Open the system menu to find applications and files | +|![](./figures/icon5.png)| Multi View Switch: Operate in multiple workspaces without interfering with each other | +|![](./figures/icon6.png)| File Browser: Browse and manage documents in the system | +|![](./figures/icon7.png)| Firefox Web Browser: Provide a convenient and safe way to access the Internet | +|![](./figures/icon8.png)| WPS: Realize the most common functions of office software such as text, forms, presentations, and more | +|Window Display Area| The blank part in the middle of the horizontal bar. Display running programs, opened documents, and allow users to close the windows, top the windows, etc | +|![](./figures/icon9.png)| Tray Menu: Include settings for voice, Kylin weather,input method, internet connection, notification center, date, and night mode | +|Show Desktop| The button is on the far right. Minimize all windows on the desktop and return to the desktop; Clicking again will restore the windows | + +#### Multi View Switch +Click the icon "![](./figures/icon10-o.png)" on the taskbar to enter the interface shown in figure below, and select the operation area that users need to work on at the moment in multiple work areas. + +![Fig. 5 Multi View Switch-big](./figures/5.png) + +#### Preview Window +Users move the mouse over the app icon in the taskbar, and then a small preview window will be shown if this app has already been opened. + +Hover over the specified window as shown below for hover state, the window will be slightly fuzzy glass effect (left), the rest of the window as default Status (right). + +![Fig. 6 Taskbar - Preview Window](./figures/6.png) + +Users can close the application by right-clicking on the app icon in the taskbar. + +![Fig. 7 Taskbar - Right-click Preview](./figures/7.png) + +#### Sidebar +The sidebar is located at the right of the entire desktop. Click the icon "![](./figures/icon11-o.png)" in the taskbar tray menu to open the storage menu, and click the icon "![](./figures/icon12-o.png)" in Sidebar to pop up the sidebar as shown in figure below. + +The sidebar consists of two parts: Notification Center, Clipboard and Widget. + +![Fig. 8 Sidebar without message status-big](./figures/8.png) + +##### Notification Center +Notification center will display a list of recent important and newest informations. + +Select "Clear" in the upper right corner to clear the list of informations; Select "Setting" in the upper right corner to go to the notification settings in the control center, and users can set which applications can show informations and the quantity of informations. + +![Fig. 9 Notification Center-big](./figures/9.png) + +Workspace at right side can be set to fold by applications. + +![Fig. 10 Fold messages by applications-big](./figures/10.png) + +Icon "![](./figures/icon13-o.png)" at the top right corner of the sidebar can store unimportant informations. When the messages are more than 999+, it will be shown as the form of ![](./figures/icon14-o.png) which means limitless. + +![Fig. 11 Message Organizer](./figures/11.png) + +##### Clipboard +Clipboard can save the contents those were recently selected to copy or cut, and users can operate them by using the icons in Table. + +![Fig. 12 Clipboard](./figures/12.png) + +Clicking "![](./figures/icon15-o.png)", users can edit the the contents of the clipboard. + +![Fig. 13 edit the content](./figures/13.png) + +| Icon | Description | Icon | Description | +| :------------ | :------------ | :------------ | :------------ | +| ![](./figures/icon16.png) | Copy the content | ![](./figures/icon18.png) | Edit the content | +| ![](./figures/icon17.png) | Delete the content | | | + +
+ +The second label of the clipboard is the small plug-in that contains alarm clock, notebook, user feedback. + +![Fig. 14 Plug-in](./figures/14.png) + +#### Tray Menu +##### Storage Menu +Click "![](./figures/icon19-o.png)" at the tray menu to open the storage menu. + +It contains Kylin Weather, Input Method, Bluetooth, USB, etc. + +![Fig. 15 Storage Menu](./figures/15.png) + +##### Input Method +The taskbar input method defaults to Sogou input method. Use the shortcut key "Ctrl+Space" to switch it out, and the "Shift" key to switch between Chinese and English modes. + +![Fig. 16 Input Method](./figures/16.png) + +##### USB +When the USB is inserted into the computer, it will be matically read the data inside. + +Click "![](./figures/icon26-o.png)" to open the window as shown in figure below. + +When users need to umount the USB, please click the icon "![](./figures/icon27-o.png)". + +![Fig. 17 The status of USB](./figures/17.png) + +##### Power Supply +Click the icon "![](./figures/icon28-o.png)": + +When no power supply is detected. + +![Fig. 18 No Power Supply](./figures/18.png) + +When power supply is detected. + +![Fig. 19 Have Power Supply](./figures/19.png) + +Users right-click the icon "![](./figures/icon30-o.png)" of power manager to open the power setting menu. + +It provides two setting options: adjust screen brightness, and set power and sleep. + +![Fig. 20 Power Manager](./figures/20.png) + +If the power manager pops up a"low battery" window, users can click to turn on the power save mode, and the power manager will set the machine to run in this mode immediately. + +![Fig. 21 Power Saving Mode](./figures/21.png) + +##### Network +Users can choose wired or wireless network connections by clicking the icon "![](./figures/icon31-o.png)" of network manager. + +| Icon | Description | Icon | Description | +| :------------ | :------------ | :------------ | :------------ | +|![](./figures/icon32.png)| Connected |![](./figures/icon37.png)| Unconnected | +|![](./figures/icon33.png)| Connection limited |![](./figures/icon38.png)| Locked | +|![](./figures/icon34.png)| Connecting |![](./figures/icon39.png)| Wifi connected | +|![](./figures/icon35.png)| Wifi unconnected |![](./figures/icon40.png)| Wificonnection limited | +|![](./figures/icon36.png)| Wifi locked |![](./figures/icon41.png)| Wifi connecting | + +
+ +![Fig. 22 Network Connection](./figures/22.png) + +- Wired Network + In the wired network connection interface, click on the wired network plan to expand. Details of the network. + + ![Fig. 23 Wired Network](./figures/23.png) + +- Wireless Network + Click the switch button in the upper right corner to turn on the wireless network connection, and select the WiFi from the list of available wireless networks. Enter the password to access the Internet. + + ![Fig. 24 Wireless Network](./figures/24.png) + +- Network Setting + Right-click the icon "![](./figures/icon42-o.png)" of network mnager to pop up the setting menu. + + ![Fig. 25 Wired Network Setting](./figures/25.png) + + Click network setting to go to the setting window immediately. + + ![Fig. 26 Network Setting](./figures/26.png) + +##### Volume +Click the icon "![](./figures/icon43-o.png)" to open the volume window, and there provides three modes. + +- Mini Mode + It only displays the volume of the speaker. + + ![Fig. 27 Mini Mode](./figures/27.png) + +- According to Equipment + It contains input equipments and output equipments. + + ![Fig. 28 According to Equipment List](./figures/28.png) + +- According to Application + It contains system volume and other applications' volume. + + ![Fig. 29 According to Application List](./figures/29.png) + +##### Calendar +Click the date&time on the taskbar to open the calendar window. + +Users can view the day's informations by filtering the year, month, day. The date will be displayed in large letters, with the time, the week, the festival,and the lunar calendar. Taboos can be seen by checking. + +![Fig. 30 Calendar-big](./figures/30.png) + +##### Night Mode +Click the icon "![](./figures/icon44-o.png)" on the Taskbar and then the system changes to the night mode. + +#### Advanced Setting +Right-click the Taskbar to open the menu. + +![Fig. 31 Right-Clicking Menu](./figures/31.png) + +Users can set the lauserst of taskbar accroding to "Taskbar Settings". + +
+ +## Window +### Window Manager +The functions provided as shown in Table. + +| Function | Description | +| :--------| :----------| +| Title Bar | Show the title name of current window | +| Minimize/Maximize/Close | The three icon buttons at the right of the title bar correspond to minimize, maximize and close respectively | +| Side Sliding | Users can scroll up and down to view the page by the slider at the right of the window | +| Stack | Allow overlap among windows | +| Drag and Drop | Long press the left mouse button at the title bar to move the window to any position | +| Resize | Move the mouse to the corner of the window and long press the left button to resize the window | + +
+ +### Window Switch +There are three ways to switch windows: + +* Click the window title on the Taskbar. + +* Click the different window at the desktop. + +* Use shortcut keys < Alt > + < Tab >. + +
+ +## Start Menu +### Basic Function +Click the button to open the "Start Menu". + +It provides sliding bar. + +![Fig. 32 Start Menu](./figures/32.png) + +#### Category Menu at right side +When the mouse is over the right side of the start menu, it will appear a pre-expanded cue bar. Clicking to expand, and then three categories are showing at the right side by default: "Common Software", "Alphabetical Category", and "Functional category". + +* All Software: List all software, recently used software will be displayed on the top of this page. + +* Alphabetical Category: List all softwares by first letter. + +* Functional category: List all softwares by their functions. + +Users can click the button at top right corner to view fullscreen menu mode. + +![Fig. 33 Fullscreen Menu-big](./figures/33.png) + +#### Function Button at right side +It provides User Avatar, Computer, Control Center and Shutdown four options. + +##### User Avatar +Click "![](./figures/icon45-o.png)" to view user's informations. + +##### Computer +Click "![](./figures/icon46-o.png)" to open personal home folder + +##### Control Center +Click "![](./figures/icon47-o.png)" to go to the control center. + +##### Shutdown +###### Lock Screen +When users do not need to use the computer temporarily, the lock screen can be selected (without affecting the current running state of the system) to prevent misoperations. And input the password to re-enter the system. + + The system will matically lock the screen after a period of idle time by default. + +![Fig. 34 Lock Screen-big](./figures/34.png) + +###### Switch Users & Log Out +When users want to select another user to log in uing the computer, users can select "Log out" or "Switch user". + +At this point, the system will close all running applications; Therefore, please save the current jobs before performing this action. + +###### Shutdown & Reboot +There are two ways: + +1)"Start Menu" > "Power" > "Shutdown" + +It will pop up a dialog box, and users can choose shutdown or reboot as needed. + +![Fig. 35 Shutdown Dialog Box-big](./figures/35.png) + +2)"Start Menu" > right side menu of the "Shutdown" button > "Shutdown"/"Reboot" + +The system will shutdown or reboot immediately without poping up the dialog box. + +### Advanced Setting + +Right-clicking Start Menu, it provides lock screen, switch user, log out, reboot, and shutdown five shortcut options. + +### Applications +Users can search apps in the search box by key words. As shown in figure below, the result will show up matically with the input. + +![Fig. 36 Search Apps](./figures/36.png) + +Right-clicking one app in the Start Menu, the right-click menu poping up. + +![Fig. 37 Right-click Menu](./figures/37.png) + +The options are described in table below. + +| Option | Description | +| :------| :--------| +| Attach to "All Software" |Add the selected software to the top of the list of All Software| +| Attach to Taskbar |Generate icon for the application on the Taskbar| +| Add to Desktop Shortcut |Generate shortcut icon for the application on the desktop| +| Uninstall |Remove the application| + +
+ +## FAQ + +### Can’t login to the system after locking the screen? + +- Switch to character terminal by < Ctrl + Alt + F1 >. + +- Input the user-name and passwd to login to the system. + +- Do "sudo rm -rf ~/.Xauthority". + +- Switch to graphical interface by < Ctrl + Alt + F7 >, and input the passwd. + +
+ +## Appendix +### Shortcut Key + +|Shortcut Key|Function| +| :------ | :----- +| F5 | Refresh the desktop | +| F1 | Open the user-guide| +| Alt + Tab | Switch the window | +| win | Open the Start Menu | +| Ctrl + Alt + L | Lock Screen | +| Ctrl + Alt + Delete | Log out | + diff --git a/docs/en/docs/desktop/Xfce_userguide.md b/docs/en/docs/desktop/Xfce_userguide.md new file mode 100644 index 0000000000000000000000000000000000000000..890662536708e7f7410b041e38927a9c7524725e --- /dev/null +++ b/docs/en/docs/desktop/Xfce_userguide.md @@ -0,0 +1,287 @@ +# Table of Contents + + + + + + +- [Table of Contents](#table-of-contents) +- [Xfce Desktop Environment](#xfce-desktop-environment) + - [1. Overview](#1-overview) + - [2. Desktop](#2-desktop) + - [2.1 Desktop Icons](#21-desktop-icons) + - [2.2 Shortcut Menu](#22-shortcut-menu) + - [3. Taskbar](#3-taskbar) + - [3.1 Basic Functions](#31-basic-functions) + - [3.1.1 Applications](#311-applications) + - [3.1.2 Window Display Area](#312-window-display-area) + - [3.1.3 Multi-View Switching](#313-multi-view-switching) + - [3.1.4 Tray](#314-tray) + - [3.1.4.1 Network](#3141-network) + - [3.1.4.2 Volume](#3142-volume) + - [3.1.4.3 Power supply](#3143-power-supply) + - [3.1.4.4 Notification Center](#3144-notification-center) + - [3.1.4.5 Calendar](#3145-calendar) + - [3.1.4.6 Advanced Settings](#3146-advanced-settings) + - [3.1.4.7 Login User Actions](#3147-login-user-actions) + - [3.1.4.7.1 Lock Screen](#31471-lock-screen) + - [3.1.4.7.2 Switch User](#31472-switch-user) + - [3.1.4.7.3 Suspend](#31473-suspend) + - [3.1.4.7.3 Shut Down](#31473-shut-down) + - [3.1.4.7.3 Log Out](#31473-log-out) + - [4. Shortcut Operation Bar](#4-shortcut-operation-bar) + - [4.1 Basic Functions](#41-basic-functions) + - [4.1.1 Show Desktop](#411-show-desktop) + - [4.1.2 Terminal](#412-terminal) + - [4.1.3 File Manager](#413-file-manager) + - [4.1.4 Web Browser](#414-web-browser) + - [4.1.5 Application Finder](#415-application-finder) + - [4.1.6 User Home Directory](#416-user-home-directory) + + + + +# Xfce Desktop Environment + +## 1. Overview + +Xfce is a lightweight desktop environment running on Unix-like operating systems. Xfce provides multiple functional components, including all applications. This document describes how to use Xfce. + +The following figure shows the WebUI. + +![Figure 1 Main screen of the desktop - big](./figures/xfce-1.png) + +
+ +## 2. Desktop + +### 2.1 Desktop Icons + +By default, icons such as the file system, main folder, and mount directory are placed. You can double-click the icons to open the page. + +![Figure 2 Default desktop icons - big](./figures/xfce-2.png) + +### 2.2 Shortcut Menu + +Right-click in the blank area on the desktop. The shortcut menus are displayed, as shown in the following figure. + +![Figure 3 Shortcut menu](./figures/xfce-3.png) + +The following table describes some options. + +| Parameter| Description| +|:----------|:----------| +| Open in New Window| Open the **Desktop** directory of the login user.| +| Create Launcher| Create a launcher.| +| Create URL Link| Create a URL link.| +| Create Folder| Create a folder.| +| Create Document| Create a text file.| +| Open Terminal Here| Create a terminal.| +| Arrange Desktop Icons| Automatically arrange desktop icons.| +| Desktop Settings| Set the background, menus, and icons.| +| Properties| Set desktop properties, such as the general, logo, and permission.| +| Applications| Applications| + +
+ +## 3. Taskbar + +### 3.1 Basic Functions + +The taskbar is located at the top, including application, window display area, multi-view switch, and tray menus. + +![Figure 4 Taskbar](./figures/xfce-4.png) + +| Component| Description| +|:----------|:----------| +| Applications| Display all applications and settings, and allow you to search for applications and settings.| +| Window display area| The blank area in the middle of the horizontal bar, which displays running programs or opened documents. You can minimize, maximize, close, or pin the window to the top.| +| Switching views| Perform operations in multiple workspaces without interfering with each other.| +| Tray| Set the network connection, sound, power, notification center, calendar, and login user actions.| + +#### 3.1.1 Applications + +![Figure 5 All applications – big](./figures/xfce-5.png) + +#### 3.1.2 Window Display Area + +![Figure 6 Window display area - big](./figures/xfce-6.png) + +#### 3.1.3 Multi-View Switching + +Click ![](./figures/xfce-7.png) in the taskbar to enter the corresponding work area. + +For example, you can use the mouse to switch among multiple workspaces to select the operation area that you want to work in. + +![Figure 7 Switching among multiple views - big](./figures/xfce-71.png) + +#### 3.1.4 Tray + +![Figure 8 Tray menu - big](./figures/xfce-8.png) + +##### 3.1.4.1 Network + +You can click ![](./figures/xfce-81.png) on the taskbar and select a network connection mode as required. + +![Figure 9 Network connection page](./figures/xfce-811.png) + +Network settings dialog box + +Right-click the network icon ![](./figures/xfce-81.png) on the taskbar. The network setting menu is displayed. + +![Figure 10 Network settings](./figures/xfce-812.png) + +Click **Edit Connections**. The network setting dialog box is displayed. + +![Figure 11 Network setting dialog box](./figures/xfce-813.png) + +Double-click the specified network connection, for example, **enp1s0**. The page for setting the connection is displayed. + +![Figure 12 Setting the wired network](./figures/xfce-814.png) + +##### 3.1.4.2 Volume + +Click the volume icon ![](./figures/xfce-82.png) on the taskbar to open the sound page. + +![Figure 13 Volume setting window](./figures/xfce-821.png) + +##### 3.1.4.3 Power supply + +Click ![](./figures/xfce-83.png) on the taskbar. + +![Figure 14 Power supply devices](./figures/xfce-831.png) + +You can click **Power Manager Settings** to configure the display and nodes. + +![Figure 15 Setting the power manager](./figures/xfce-832.png) + +##### 3.1.4.4 Notification Center + +Click ![](./figures/xfce-84.png) on the taskbar. + +![Figure 16 Notification center - big](./figures/xfce-841.png) + +You can disable the notification function by selecting **Do not disturb**. + +The notification center displays the latest important information list. You can click **Clear log** to clear the information list. + +You can click **Notification settings** to go to the notification setting page of the control panel and set the applications to be displayed and the number of messages to be displayed. + +![Figure 17 Notification center - big](./figures/xfce-842.png) + +##### 3.1.4.5 Calendar + +You can click the date and time on the taskbar to display the calendar window and view the calendar, month calendar, and annual calendar. + +You can choose a year, a month and a day to view the information of a specific day. + +![Figure 18 Calendar-big](./figures/xfce-85.png) + +Right-click the time and date on the taskbar and click **Properties** to set the time. + +![Figure 19 Date setting - big](./figures/xfce-851.png) + +#### 3.1.4.6 Advanced Settings + +Right-click the taskbar and choose **Panel** from the shortcut menu. + +![Figure 20 Shortcut menu on the taskbar](./figures/xfce-86.png) + +You can set the layout of the taskbar and add or delete items. + +![Figure 21 Shortcut menu on the taskbar](./figures/xfce-861.png) + +##### 3.1.4.7 Login User Actions + +Click the login user on the task bar to view related actions. + +![Figure 22 Actions of a login user](./figures/xfce-87.png) + +###### 3.1.4.7.1 Lock Screen + +If you use the computer currently, you can lock the screen (which does not affect the current running status of the system) to prevent misoperations. After locking the screen, you can enter the password to log in to the system again. + +By default, the system automatically locks the screen after a period of idle time. + +###### 3.1.4.7.2 Switch User + +If you want to log in to the computer as another user, choose **Switch User**. + +Then, the system closes all running applications. Therefore, before performing this operation, save the current work. + +###### 3.1.4.7.3 Suspend + +For the sake of environmental protection and energy saving, you can select **Suspend****.** + +After that, the related data is read into the memory. Do not switch the power supply. + +###### 3.1.4.7.3 Shut Down + +You can choose **Shut Down** to shut down a computer. + +Before performing this operation, save the current work. + +###### 3.1.4.7.3 Log Out + +To log out of the GUI, click **Log Out**. + +Then, the system closes all running applications. Therefore, before performing this operation, save the current work. + +
+ +## 4. Shortcut Operation Bar + +### 4.1 Basic Functions + +The shortcut operation bar is located at the bottom, including the icons for displaying all the desktops, terminals, file managers, web browsers, application search, and user home directories. + +![Figure 23 Shortcut operation bar](./figures/xfce-9.png) + +| Component| Description | +|:----------|:----------| +| Show Desktop| Hide all windows and show the desktop. Click again to restore the window.| +| Terminal| Open a terminal.| +| File Manager| Open a file manager.| +| Web Browser| Open a web browser.| +| Application Finder| Open the application search window.| +| User Home Directory| Open the home directory of the login user.| + +#### 4.1.1 Show Desktop + +Click ![](./figures/xfce-91.png) on the shortcut operation bar to display the desktop. + +![Figure 24 Showing the desktop - big](./figures/xfce-911.png) + +#### 4.1.2 Terminal + +Click ![](./figures/xfce-92.png) on the shortcut operation bar to open a terminal. + +![Figure 25 Terminal-big](./figures/xfce-921.png) + +#### 4.1.3 File Manager + +You can click the ![](./figures/xfce-93.png) icon on the shortcut operation bar to open a file manager. + +![Figure 26 File manager - big](./figures/xfce-931.png) + +#### 4.1.4 Web Browser + +You can click the ![](./figures/xfce-94.png) icon on the shortcut operation bar to open a web browser. + +![Figure 27 Web browser - big](./figures/xfce-941.png) + +#### 4.1.5 Application Finder + +You can click the ![](./figures/xfce-95.png) icon on the shortcut operation bar to open an application program search interface. + +![Figure 28 Searching for an application - big](./figures/xfce-951.png) + +#### 4.1.6 User Home Directory + +Click ![](./figures/xfce-96.png) on the shortcut operation bar and click **Open File**. The user home directory page is displayed. + +![Figure 29 User home directory - big](./figures/xfce-961.png) + +Click the ![](./figures/xfce-96.png) icon on the shortcut operation bar, and then click **Open in Terminal** to open a terminal. The current directory is the home directory of the user. + +![Figure 30 User home directory - big](./figures/xfce-962.png) \ No newline at end of file diff --git a/docs/en/docs/desktop/dde.md b/docs/en/docs/desktop/dde.md new file mode 100644 index 0000000000000000000000000000000000000000..96d37a7b4d8c7a4544454fce5ca5368845a560a7 --- /dev/null +++ b/docs/en/docs/desktop/dde.md @@ -0,0 +1,3 @@ +# DDE User Guide + +This section describes how to install and use the Deepin Desktop Environment (DDE). \ No newline at end of file diff --git a/docs/en/docs/desktop/desktop.md b/docs/en/docs/desktop/desktop.md new file mode 100644 index 0000000000000000000000000000000000000000..cae11d827bbe884f5f92368f9ccdb6334f8698ef --- /dev/null +++ b/docs/en/docs/desktop/desktop.md @@ -0,0 +1,3 @@ +# Desktop Environment User Guide + +This document describes how to install and use two common desktop environments, which provide a user-friendly, secure, and reliable GUI for better user experience. diff --git a/docs/en/docs/desktop/figures/1.png b/docs/en/docs/desktop/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..40af4242eebb440a76c749a8d970d50cd7b89bf4 Binary files /dev/null and b/docs/en/docs/desktop/figures/1.png differ diff --git a/docs/en/docs/desktop/figures/10.png b/docs/en/docs/desktop/figures/10.png new file mode 100644 index 0000000000000000000000000000000000000000..e588ffbe3d8d7b66d92ae8f2b4bcec7c80d0592c Binary files /dev/null and b/docs/en/docs/desktop/figures/10.png differ diff --git a/docs/en/docs/desktop/figures/11.png b/docs/en/docs/desktop/figures/11.png new file mode 100644 index 0000000000000000000000000000000000000000..1989a5bb08155f920363e154e68bb148715c7e9e Binary files /dev/null and b/docs/en/docs/desktop/figures/11.png differ diff --git a/docs/en/docs/desktop/figures/12.png b/docs/en/docs/desktop/figures/12.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6346161182d2cfeaf3818d5ec518ddb11c732e Binary files /dev/null and b/docs/en/docs/desktop/figures/12.png differ diff --git a/docs/en/docs/desktop/figures/13.png b/docs/en/docs/desktop/figures/13.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7def1fb66c90da62acde799eaffca97e3b5396 Binary files /dev/null and b/docs/en/docs/desktop/figures/13.png differ diff --git a/docs/en/docs/desktop/figures/14.png b/docs/en/docs/desktop/figures/14.png new file mode 100644 index 0000000000000000000000000000000000000000..3a27a66d57e284775420d467f90dcc02889bbffe Binary files /dev/null and b/docs/en/docs/desktop/figures/14.png differ diff --git a/docs/en/docs/desktop/figures/15.png b/docs/en/docs/desktop/figures/15.png new file mode 100644 index 0000000000000000000000000000000000000000..370bea32abcaa8a2b06a1a61c1455d4b35f43474 Binary files /dev/null and b/docs/en/docs/desktop/figures/15.png differ diff --git a/docs/en/docs/desktop/figures/16.png b/docs/en/docs/desktop/figures/16.png new file mode 100644 index 0000000000000000000000000000000000000000..812ee462669c5263ef4bffc49ca4f9b6af4541c6 Binary files /dev/null and b/docs/en/docs/desktop/figures/16.png differ diff --git a/docs/en/docs/desktop/figures/17.png b/docs/en/docs/desktop/figures/17.png new file mode 100644 index 0000000000000000000000000000000000000000..36e524b806874fa3788f5e4dcd78350686281107 Binary files /dev/null and b/docs/en/docs/desktop/figures/17.png differ diff --git a/docs/en/docs/desktop/figures/18.png b/docs/en/docs/desktop/figures/18.png new file mode 100644 index 0000000000000000000000000000000000000000..51b32442980aa60646f77dabd53ade74f55891fe Binary files /dev/null and b/docs/en/docs/desktop/figures/18.png differ diff --git a/docs/en/docs/desktop/figures/19.png b/docs/en/docs/desktop/figures/19.png new file mode 100644 index 0000000000000000000000000000000000000000..c9457d09aa9f1662b2c9e4550cdbdb9f57dd020e Binary files /dev/null and b/docs/en/docs/desktop/figures/19.png differ diff --git a/docs/en/docs/desktop/figures/2.png b/docs/en/docs/desktop/figures/2.png new file mode 100644 index 0000000000000000000000000000000000000000..97917cc245484a43bec8562757d920a06f123121 Binary files /dev/null and b/docs/en/docs/desktop/figures/2.png differ diff --git a/docs/en/docs/desktop/figures/20.png b/docs/en/docs/desktop/figures/20.png new file mode 100644 index 0000000000000000000000000000000000000000..b0943189920d7a541d35da27340593ea93f92a17 Binary files /dev/null and b/docs/en/docs/desktop/figures/20.png differ diff --git a/docs/en/docs/desktop/figures/21.png b/docs/en/docs/desktop/figures/21.png new file mode 100644 index 0000000000000000000000000000000000000000..e590c22c0ea28906b5f4ea7ccbc6ab11e47ad173 Binary files /dev/null and b/docs/en/docs/desktop/figures/21.png differ diff --git a/docs/en/docs/desktop/figures/22.png b/docs/en/docs/desktop/figures/22.png new file mode 100644 index 0000000000000000000000000000000000000000..03a548b1ffb1f0ad53cfa5387af2721af90bca81 Binary files /dev/null and b/docs/en/docs/desktop/figures/22.png differ diff --git a/docs/en/docs/desktop/figures/23.png b/docs/en/docs/desktop/figures/23.png new file mode 100644 index 0000000000000000000000000000000000000000..834c492094715cde1c02c91752ecabfe7921ed62 Binary files /dev/null and b/docs/en/docs/desktop/figures/23.png differ diff --git a/docs/en/docs/desktop/figures/24.png b/docs/en/docs/desktop/figures/24.png new file mode 100644 index 0000000000000000000000000000000000000000..1881e868b74a60888b319576fa38fb4af92ba75c Binary files /dev/null and b/docs/en/docs/desktop/figures/24.png differ diff --git a/docs/en/docs/desktop/figures/25.png b/docs/en/docs/desktop/figures/25.png new file mode 100644 index 0000000000000000000000000000000000000000..f38839725d27a3486984d152e5d9de305364fbd2 Binary files /dev/null and b/docs/en/docs/desktop/figures/25.png differ diff --git a/docs/en/docs/desktop/figures/26.png b/docs/en/docs/desktop/figures/26.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7957119133ecb98b1b6b104e54a3a4647ec2a5 Binary files /dev/null and b/docs/en/docs/desktop/figures/26.png differ diff --git a/docs/en/docs/desktop/figures/27.png b/docs/en/docs/desktop/figures/27.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4733717fdc5172d6479b393005219e65e96df4 Binary files /dev/null and b/docs/en/docs/desktop/figures/27.png differ diff --git a/docs/en/docs/desktop/figures/28.png b/docs/en/docs/desktop/figures/28.png new file mode 100644 index 0000000000000000000000000000000000000000..a77772e818e3f6c11acac3b9cfa18bad14a0a48c Binary files /dev/null and b/docs/en/docs/desktop/figures/28.png differ diff --git a/docs/en/docs/desktop/figures/29.png b/docs/en/docs/desktop/figures/29.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f58ffe5855295268298448744e5aadbdc55276 Binary files /dev/null and b/docs/en/docs/desktop/figures/29.png differ diff --git a/docs/en/docs/desktop/figures/3.png b/docs/en/docs/desktop/figures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb76b336957020ed6867d908e0a8bdcfc953c52 Binary files /dev/null and b/docs/en/docs/desktop/figures/3.png differ diff --git a/docs/en/docs/desktop/figures/30.png b/docs/en/docs/desktop/figures/30.png new file mode 100644 index 0000000000000000000000000000000000000000..d91adefba1753959e90ccf4aa1501ac08d7144bd Binary files /dev/null and b/docs/en/docs/desktop/figures/30.png differ diff --git a/docs/en/docs/desktop/figures/31.png b/docs/en/docs/desktop/figures/31.png new file mode 100644 index 0000000000000000000000000000000000000000..0abef09ab438f5f8cfb68090993f55c493b8c15e Binary files /dev/null and b/docs/en/docs/desktop/figures/31.png differ diff --git a/docs/en/docs/desktop/figures/32.png b/docs/en/docs/desktop/figures/32.png new file mode 100644 index 0000000000000000000000000000000000000000..d567cfbacc07a9eb46ff2c54a68432f45e034e94 Binary files /dev/null and b/docs/en/docs/desktop/figures/32.png differ diff --git a/docs/en/docs/desktop/figures/33.png b/docs/en/docs/desktop/figures/33.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5896e2884520672c0bd88d68471b45a09c56fe Binary files /dev/null and b/docs/en/docs/desktop/figures/33.png differ diff --git a/docs/en/docs/desktop/figures/34.png b/docs/en/docs/desktop/figures/34.png new file mode 100644 index 0000000000000000000000000000000000000000..81bc9480fbbd81a97c559d7a6a74274deeab2bd1 Binary files /dev/null and b/docs/en/docs/desktop/figures/34.png differ diff --git a/docs/en/docs/desktop/figures/35.png b/docs/en/docs/desktop/figures/35.png new file mode 100644 index 0000000000000000000000000000000000000000..ab2399847a643a87279337704e23fea7609bb211 Binary files /dev/null and b/docs/en/docs/desktop/figures/35.png differ diff --git a/docs/en/docs/desktop/figures/36.png b/docs/en/docs/desktop/figures/36.png new file mode 100644 index 0000000000000000000000000000000000000000..536981609b9ae5d32be56bec612f2b3446146184 Binary files /dev/null and b/docs/en/docs/desktop/figures/36.png differ diff --git a/docs/en/docs/desktop/figures/37.png b/docs/en/docs/desktop/figures/37.png new file mode 100644 index 0000000000000000000000000000000000000000..e39aa03587642dc1f8622fff515b05a9a3085b28 Binary files /dev/null and b/docs/en/docs/desktop/figures/37.png differ diff --git a/docs/en/docs/desktop/figures/38.png b/docs/en/docs/desktop/figures/38.png new file mode 100644 index 0000000000000000000000000000000000000000..838f5ff0616a83cdf42edb053f4e72b93bfa644e Binary files /dev/null and b/docs/en/docs/desktop/figures/38.png differ diff --git a/docs/en/docs/desktop/figures/39.png b/docs/en/docs/desktop/figures/39.png new file mode 100644 index 0000000000000000000000000000000000000000..12a379403d73a47b2fa564120a28fdb58d188963 Binary files /dev/null and b/docs/en/docs/desktop/figures/39.png differ diff --git a/docs/en/docs/desktop/figures/4.png b/docs/en/docs/desktop/figures/4.png new file mode 100644 index 0000000000000000000000000000000000000000..5078e36aca713706d2cf08a3ebecdc3769951899 Binary files /dev/null and b/docs/en/docs/desktop/figures/4.png differ diff --git a/docs/en/docs/desktop/figures/40.png b/docs/en/docs/desktop/figures/40.png new file mode 100755 index 0000000000000000000000000000000000000000..bf419894eab852b45604966c62fafa71f051c4df Binary files /dev/null and b/docs/en/docs/desktop/figures/40.png differ diff --git a/docs/en/docs/desktop/figures/41.png b/docs/en/docs/desktop/figures/41.png new file mode 100755 index 0000000000000000000000000000000000000000..f94b0ee72e0d4e9277e9b44b4268cfbdb8402104 Binary files /dev/null and b/docs/en/docs/desktop/figures/41.png differ diff --git a/docs/en/docs/desktop/figures/42.png b/docs/en/docs/desktop/figures/42.png new file mode 100644 index 0000000000000000000000000000000000000000..3182e551c4e4b03885bad6339f1de514b3f55f8c Binary files /dev/null and b/docs/en/docs/desktop/figures/42.png differ diff --git a/docs/en/docs/desktop/figures/43.jpg b/docs/en/docs/desktop/figures/43.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26e9244f58ea9800081fd61ae135477f05b21b40 Binary files /dev/null and b/docs/en/docs/desktop/figures/43.jpg differ diff --git a/docs/en/docs/desktop/figures/44.png b/docs/en/docs/desktop/figures/44.png new file mode 100644 index 0000000000000000000000000000000000000000..c3abaecd6e053272d81e0ad9bd183c6858b4f3c5 Binary files /dev/null and b/docs/en/docs/desktop/figures/44.png differ diff --git a/docs/en/docs/desktop/figures/45.png b/docs/en/docs/desktop/figures/45.png new file mode 100755 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/docs/desktop/figures/45.png differ diff --git a/docs/en/docs/desktop/figures/46.png b/docs/en/docs/desktop/figures/46.png new file mode 100755 index 0000000000000000000000000000000000000000..d8ec41c87628bf28c9905523f99ae93aebd13614 Binary files /dev/null and b/docs/en/docs/desktop/figures/46.png differ diff --git a/docs/en/docs/desktop/figures/47.jpg b/docs/en/docs/desktop/figures/47.jpg new file mode 100755 index 0000000000000000000000000000000000000000..bf95f03c8ea0f84a878bc63af20972c9da71bc04 Binary files /dev/null and b/docs/en/docs/desktop/figures/47.jpg differ diff --git a/docs/en/docs/desktop/figures/48.png b/docs/en/docs/desktop/figures/48.png new file mode 100644 index 0000000000000000000000000000000000000000..ef21fa1ce1e2e9848a8dca16e692de673df7c6d7 Binary files /dev/null and b/docs/en/docs/desktop/figures/48.png differ diff --git a/docs/en/docs/desktop/figures/49.png b/docs/en/docs/desktop/figures/49.png new file mode 100644 index 0000000000000000000000000000000000000000..3b77668e5a4d1bdb3043c473dff9b36fa7144714 Binary files /dev/null and b/docs/en/docs/desktop/figures/49.png differ diff --git a/docs/en/docs/desktop/figures/5.png b/docs/en/docs/desktop/figures/5.png new file mode 100644 index 0000000000000000000000000000000000000000..2976a745cfaede26594d6daa01cfc18d18b1de8b Binary files /dev/null and b/docs/en/docs/desktop/figures/5.png differ diff --git a/docs/en/docs/desktop/figures/50.png b/docs/en/docs/desktop/figures/50.png new file mode 100644 index 0000000000000000000000000000000000000000..b86a55fe4363f56fc18befc9d27025a75ca427ad Binary files /dev/null and b/docs/en/docs/desktop/figures/50.png differ diff --git a/docs/en/docs/desktop/figures/51.png b/docs/en/docs/desktop/figures/51.png new file mode 100755 index 0000000000000000000000000000000000000000..d427ac871dba9c32eb4ffe736d5352f8408da533 Binary files /dev/null and b/docs/en/docs/desktop/figures/51.png differ diff --git a/docs/en/docs/desktop/figures/52.png b/docs/en/docs/desktop/figures/52.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca0a2db05c70bc25f9bb59e82d074f671cfc74e Binary files /dev/null and b/docs/en/docs/desktop/figures/52.png differ diff --git a/docs/en/docs/desktop/figures/53.png b/docs/en/docs/desktop/figures/53.png new file mode 100644 index 0000000000000000000000000000000000000000..76fbc34a1d5621b83c2d8c93222766acad33350d Binary files /dev/null and b/docs/en/docs/desktop/figures/53.png differ diff --git a/docs/en/docs/desktop/figures/54.png b/docs/en/docs/desktop/figures/54.png new file mode 100644 index 0000000000000000000000000000000000000000..49ecae6f8941a118223f3765c23015df074c4983 Binary files /dev/null and b/docs/en/docs/desktop/figures/54.png differ diff --git a/docs/en/docs/desktop/figures/56.png b/docs/en/docs/desktop/figures/56.png new file mode 100644 index 0000000000000000000000000000000000000000..36fee795bfe593b6246c8d6c2bddea9386b06f45 Binary files /dev/null and b/docs/en/docs/desktop/figures/56.png differ diff --git a/docs/en/docs/desktop/figures/57.png b/docs/en/docs/desktop/figures/57.png new file mode 100644 index 0000000000000000000000000000000000000000..539d06b77b058a933cb154c43641d498050986e0 Binary files /dev/null and b/docs/en/docs/desktop/figures/57.png differ diff --git a/docs/en/docs/desktop/figures/58.png b/docs/en/docs/desktop/figures/58.png new file mode 100755 index 0000000000000000000000000000000000000000..396ca16d873e54505bcdbd41d669366eea7f5dee Binary files /dev/null and b/docs/en/docs/desktop/figures/58.png differ diff --git a/docs/en/docs/desktop/figures/59.png b/docs/en/docs/desktop/figures/59.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1de98ac4fe686937ca844d3e9481548a79ce63 Binary files /dev/null and b/docs/en/docs/desktop/figures/59.png differ diff --git a/docs/en/docs/desktop/figures/6.png b/docs/en/docs/desktop/figures/6.png new file mode 100644 index 0000000000000000000000000000000000000000..275c23872f2353f007371672714902babcc3db53 Binary files /dev/null and b/docs/en/docs/desktop/figures/6.png differ diff --git a/docs/en/docs/desktop/figures/60.jpg b/docs/en/docs/desktop/figures/60.jpg new file mode 100755 index 0000000000000000000000000000000000000000..033c88aaadd04f7d4058ec2eb5b2c70498319bf7 Binary files /dev/null and b/docs/en/docs/desktop/figures/60.jpg differ diff --git a/docs/en/docs/desktop/figures/61.png b/docs/en/docs/desktop/figures/61.png new file mode 100644 index 0000000000000000000000000000000000000000..8df17062963a3baf92318a12ec34b1378122687b Binary files /dev/null and b/docs/en/docs/desktop/figures/61.png differ diff --git a/docs/en/docs/desktop/figures/62.png b/docs/en/docs/desktop/figures/62.png new file mode 100644 index 0000000000000000000000000000000000000000..ec312d6c0c22018c1745dd866da71ce9be47fbda Binary files /dev/null and b/docs/en/docs/desktop/figures/62.png differ diff --git a/docs/en/docs/desktop/figures/63.jpg b/docs/en/docs/desktop/figures/63.jpg new file mode 100755 index 0000000000000000000000000000000000000000..504f7cf59768f6fd1cd73a115d01fbc4e15a02e1 Binary files /dev/null and b/docs/en/docs/desktop/figures/63.jpg differ diff --git a/docs/en/docs/desktop/figures/63.png b/docs/en/docs/desktop/figures/63.png new file mode 100755 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/en/docs/desktop/figures/63.png differ diff --git a/docs/en/docs/desktop/figures/64.png b/docs/en/docs/desktop/figures/64.png new file mode 100755 index 0000000000000000000000000000000000000000..cbbd2ede047e735c3766e08b04595f08cd72f5b2 Binary files /dev/null and b/docs/en/docs/desktop/figures/64.png differ diff --git a/docs/en/docs/desktop/figures/7.png b/docs/en/docs/desktop/figures/7.png new file mode 100644 index 0000000000000000000000000000000000000000..4d397959ac7f6d166ef5a3b7084bd5c3c93b475f Binary files /dev/null and b/docs/en/docs/desktop/figures/7.png differ diff --git a/docs/en/docs/desktop/figures/8.png b/docs/en/docs/desktop/figures/8.png new file mode 100644 index 0000000000000000000000000000000000000000..8ade274092d7b3e461c96d7909a9d89d3a944f09 Binary files /dev/null and b/docs/en/docs/desktop/figures/8.png differ diff --git a/docs/en/docs/desktop/figures/9.png b/docs/en/docs/desktop/figures/9.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b2215404929346f1a814b0b1d6d482559c08b5 Binary files /dev/null and b/docs/en/docs/desktop/figures/9.png differ diff --git a/docs/en/docs/desktop/figures/icon1.png b/docs/en/docs/desktop/figures/icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..9bac00355cf4aa57d32287fd4271404f6fd3fd4d Binary files /dev/null and b/docs/en/docs/desktop/figures/icon1.png differ diff --git a/docs/en/docs/desktop/figures/icon10-o.png b/docs/en/docs/desktop/figures/icon10-o.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c56d1a64c588d86f8fe510c74e5a7c4cb810d4 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon10-o.png differ diff --git a/docs/en/docs/desktop/figures/icon101-o.svg b/docs/en/docs/desktop/figures/icon101-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..af1c5d3dc0277a6ea59e71efb6ca97bdfc782e8e --- /dev/null +++ b/docs/en/docs/desktop/figures/icon101-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/docs/desktop/figures/icon103-o.svg b/docs/en/docs/desktop/figures/icon103-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..c06c885725c569ab8db1fe7d595a7c65f18c5142 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon103-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon105-o.svg b/docs/en/docs/desktop/figures/icon105-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..36c49949fa569330b761c2d65518f36c10435508 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon105-o.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon107-o.svg b/docs/en/docs/desktop/figures/icon107-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..fb5a3ea756f6ccb7b3e5c31122a433347a908c96 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon107-o.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon11-o.png b/docs/en/docs/desktop/figures/icon11-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/docs/desktop/figures/icon11-o.png differ diff --git a/docs/en/docs/desktop/figures/icon110-o.svg b/docs/en/docs/desktop/figures/icon110-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..7958e3f192061592e002e1e8a1bad06ffa86742c --- /dev/null +++ b/docs/en/docs/desktop/figures/icon110-o.svg @@ -0,0 +1,12 @@ + + + + reboot_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon111-o.svg b/docs/en/docs/desktop/figures/icon111-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..097d16a08d305a8b3f3b2268ab1ea8342e799377 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon111-o.svg @@ -0,0 +1,13 @@ + + + + Right + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon112-o.svg b/docs/en/docs/desktop/figures/icon112-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..e51628c2b8b10495f3410d219814286696ea2fd5 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon112-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon116-o.svg b/docs/en/docs/desktop/figures/icon116-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..4d79cd6dbbbfd3969f4e0ad0ad88e27398853505 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon116-o.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon12-o.png b/docs/en/docs/desktop/figures/icon12-o.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f0f59dd3879461a0b5bc0632693a4a4124def3 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon12-o.png differ diff --git a/docs/en/docs/desktop/figures/icon120-o.svg b/docs/en/docs/desktop/figures/icon120-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..e895c347d16a200aea46b00428b0b9f1a3c94246 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon120-o.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon122-o.svg b/docs/en/docs/desktop/figures/icon122-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..7fb014b5fd6097ca37a84d0b6a27dc982d675c8a --- /dev/null +++ b/docs/en/docs/desktop/figures/icon122-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/docs/desktop/figures/icon124-o.svg b/docs/en/docs/desktop/figures/icon124-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..960c0ec096c925213f8953398f0e8e5db3cdaed3 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon124-o.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon125-o.svg b/docs/en/docs/desktop/figures/icon125-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..011c05f4b8f296867cd408a339230323fcbb28dd --- /dev/null +++ b/docs/en/docs/desktop/figures/icon125-o.svg @@ -0,0 +1,9 @@ + + + tips + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon126-o.svg b/docs/en/docs/desktop/figures/icon126-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..e0a43b6b8beb434090ac0dd3a8fd68c023f11fce --- /dev/null +++ b/docs/en/docs/desktop/figures/icon126-o.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon127-o.svg b/docs/en/docs/desktop/figures/icon127-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..bed95d35334a8d0151211054236c0bacddcc0dd3 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon127-o.svg @@ -0,0 +1,13 @@ + + + + Up + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon128-o.svg b/docs/en/docs/desktop/figures/icon128-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..aa727f3f5d5883b3fb83a79c4b98e8b5bfe4ade6 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon128-o.svg @@ -0,0 +1,12 @@ + + + + userswitch_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon13-o.png b/docs/en/docs/desktop/figures/icon13-o.png new file mode 100644 index 0000000000000000000000000000000000000000..c05a981b29d8ad11c6682f796f79b4cafd0f088b Binary files /dev/null and b/docs/en/docs/desktop/figures/icon13-o.png differ diff --git a/docs/en/docs/desktop/figures/icon132-o.svg b/docs/en/docs/desktop/figures/icon132-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..588ba9d98864ba67a562fa9179f29405f7687aa0 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon132-o.svg @@ -0,0 +1,15 @@ + + + + - + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon133-o.svg b/docs/en/docs/desktop/figures/icon133-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..886d90a83e33497d134bdb3dcc864a5c2df53f20 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon133-o.svg @@ -0,0 +1,13 @@ + + + + + + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon134-o.svg b/docs/en/docs/desktop/figures/icon134-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..784cf383eb0e8f5c7a57a602047be50ad0a3bc05 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon134-o.svg @@ -0,0 +1,15 @@ + + + + = + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon135-o.svg b/docs/en/docs/desktop/figures/icon135-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..cea628a8f5eb92d10661b690242b6de41ca64816 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon135-o.svg @@ -0,0 +1,15 @@ + + + + ~ + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon136-o.svg b/docs/en/docs/desktop/figures/icon136-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..24aa139ab2fefaee20935551f1af5aef473719ed --- /dev/null +++ b/docs/en/docs/desktop/figures/icon136-o.svg @@ -0,0 +1,12 @@ + + + + poweroff_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon14-o.png b/docs/en/docs/desktop/figures/icon14-o.png new file mode 100644 index 0000000000000000000000000000000000000000..b21deee4d98593d93fb5f72158d2d78f3d3f1cb9 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon14-o.png differ diff --git a/docs/en/docs/desktop/figures/icon15-o.png b/docs/en/docs/desktop/figures/icon15-o.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon15-o.png differ diff --git a/docs/en/docs/desktop/figures/icon16.png b/docs/en/docs/desktop/figures/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f271594dda9d3ad0f038c9d719dd68c3e82c59f1 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon16.png differ diff --git a/docs/en/docs/desktop/figures/icon17.png b/docs/en/docs/desktop/figures/icon17.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe58b89347c857920bce25f067fbd11c308e502 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon17.png differ diff --git a/docs/en/docs/desktop/figures/icon18.png b/docs/en/docs/desktop/figures/icon18.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon18.png differ diff --git a/docs/en/docs/desktop/figures/icon19-o.png b/docs/en/docs/desktop/figures/icon19-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/en/docs/desktop/figures/icon19-o.png differ diff --git a/docs/en/docs/desktop/figures/icon2.png b/docs/en/docs/desktop/figures/icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..9101e4b386df065a87d422bc5a0b287528ea5ec7 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon2.png differ diff --git a/docs/en/docs/desktop/figures/icon20.png b/docs/en/docs/desktop/figures/icon20.png new file mode 100644 index 0000000000000000000000000000000000000000..4de3c7c695893539967245ea5e269b26e2b735be Binary files /dev/null and b/docs/en/docs/desktop/figures/icon20.png differ diff --git a/docs/en/docs/desktop/figures/icon21.png b/docs/en/docs/desktop/figures/icon21.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b4320b6ce1fd4adb52525ba2c60983ffb2eed3 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon21.png differ diff --git a/docs/en/docs/desktop/figures/icon22.png b/docs/en/docs/desktop/figures/icon22.png new file mode 100644 index 0000000000000000000000000000000000000000..43bfa96965ad13e0a34ead3cb1102a76b9346a23 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon22.png differ diff --git a/docs/en/docs/desktop/figures/icon23.png b/docs/en/docs/desktop/figures/icon23.png new file mode 100644 index 0000000000000000000000000000000000000000..aee221ddaa81d06fa7bd5b89a624da90cd1e53da Binary files /dev/null and b/docs/en/docs/desktop/figures/icon23.png differ diff --git a/docs/en/docs/desktop/figures/icon24.png b/docs/en/docs/desktop/figures/icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e5d700431ca1666fe9eda2cefce5dd2f83bdcd Binary files /dev/null and b/docs/en/docs/desktop/figures/icon24.png differ diff --git a/docs/en/docs/desktop/figures/icon25.png b/docs/en/docs/desktop/figures/icon25.png new file mode 100644 index 0000000000000000000000000000000000000000..3de0f9476bbee9e89c3b759afbed968f17b5bbcc Binary files /dev/null and b/docs/en/docs/desktop/figures/icon25.png differ diff --git a/docs/en/docs/desktop/figures/icon26-o.png b/docs/en/docs/desktop/figures/icon26-o.png new file mode 100644 index 0000000000000000000000000000000000000000..2293a893caf6d89c3beb978598fe7f281e68e7d5 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon26-o.png differ diff --git a/docs/en/docs/desktop/figures/icon27-o.png b/docs/en/docs/desktop/figures/icon27-o.png new file mode 100644 index 0000000000000000000000000000000000000000..abbab8e40f7e3ca7c2a6f28ff78f08f15117828e Binary files /dev/null and b/docs/en/docs/desktop/figures/icon27-o.png differ diff --git a/docs/en/docs/desktop/figures/icon28-o.png b/docs/en/docs/desktop/figures/icon28-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/docs/desktop/figures/icon28-o.png differ diff --git a/docs/en/docs/desktop/figures/icon29-o.png b/docs/en/docs/desktop/figures/icon29-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/docs/desktop/figures/icon29-o.png differ diff --git a/docs/en/docs/desktop/figures/icon3.png b/docs/en/docs/desktop/figures/icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..930ee8909e89e3624c581f83d713af271cd96c75 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon3.png differ diff --git a/docs/en/docs/desktop/figures/icon30-o.png b/docs/en/docs/desktop/figures/icon30-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/en/docs/desktop/figures/icon30-o.png differ diff --git a/docs/en/docs/desktop/figures/icon31-o.png b/docs/en/docs/desktop/figures/icon31-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/docs/desktop/figures/icon31-o.png differ diff --git a/docs/en/docs/desktop/figures/icon32.png b/docs/en/docs/desktop/figures/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/docs/desktop/figures/icon32.png differ diff --git a/docs/en/docs/desktop/figures/icon33.png b/docs/en/docs/desktop/figures/icon33.png new file mode 100644 index 0000000000000000000000000000000000000000..88ed145b25f6f025ad795ceb012500e0944cb54c Binary files /dev/null and b/docs/en/docs/desktop/figures/icon33.png differ diff --git a/docs/en/docs/desktop/figures/icon34.png b/docs/en/docs/desktop/figures/icon34.png new file mode 100644 index 0000000000000000000000000000000000000000..8247f52a3424c81b451ceb318f4a7979a5eddece Binary files /dev/null and b/docs/en/docs/desktop/figures/icon34.png differ diff --git a/docs/en/docs/desktop/figures/icon35.png b/docs/en/docs/desktop/figures/icon35.png new file mode 100644 index 0000000000000000000000000000000000000000..7c656e9030b94809a57c7e369921e6a585f3574c Binary files /dev/null and b/docs/en/docs/desktop/figures/icon35.png differ diff --git a/docs/en/docs/desktop/figures/icon36.png b/docs/en/docs/desktop/figures/icon36.png new file mode 100644 index 0000000000000000000000000000000000000000..7d29d173e914dfff48245d3d3a4d42575ce2d1db Binary files /dev/null and b/docs/en/docs/desktop/figures/icon36.png differ diff --git a/docs/en/docs/desktop/figures/icon37.png b/docs/en/docs/desktop/figures/icon37.png new file mode 100644 index 0000000000000000000000000000000000000000..58be4c621b6638115153e361801deb9ee06634d8 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon37.png differ diff --git a/docs/en/docs/desktop/figures/icon38.png b/docs/en/docs/desktop/figures/icon38.png new file mode 100644 index 0000000000000000000000000000000000000000..0c861ccb891f4fb5e533eb7f7151a8fce1571f17 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon38.png differ diff --git a/docs/en/docs/desktop/figures/icon39.png b/docs/en/docs/desktop/figures/icon39.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ba1f347452d0cd1c06c6c51d2cdf5aea5e490b Binary files /dev/null and b/docs/en/docs/desktop/figures/icon39.png differ diff --git a/docs/en/docs/desktop/figures/icon4.png b/docs/en/docs/desktop/figures/icon4.png new file mode 100644 index 0000000000000000000000000000000000000000..548dc8b648edb73ff1dd8a0266e8479203e72ca0 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon4.png differ diff --git a/docs/en/docs/desktop/figures/icon40.png b/docs/en/docs/desktop/figures/icon40.png new file mode 100644 index 0000000000000000000000000000000000000000..9c29dd1e9a1bf22c36abf51cb18fa9e47b455fab Binary files /dev/null and b/docs/en/docs/desktop/figures/icon40.png differ diff --git a/docs/en/docs/desktop/figures/icon41.png b/docs/en/docs/desktop/figures/icon41.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8aea527a2119433fffec5a8800ebfa4fa5062f Binary files /dev/null and b/docs/en/docs/desktop/figures/icon41.png differ diff --git a/docs/en/docs/desktop/figures/icon42-o.png b/docs/en/docs/desktop/figures/icon42-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/docs/desktop/figures/icon42-o.png differ diff --git a/docs/en/docs/desktop/figures/icon42.png b/docs/en/docs/desktop/figures/icon42.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/en/docs/desktop/figures/icon42.png differ diff --git a/docs/en/docs/desktop/figures/icon43-o.png b/docs/en/docs/desktop/figures/icon43-o.png new file mode 100644 index 0000000000000000000000000000000000000000..284bdd551baf25beb4143013402e77a1a4c60ccb Binary files /dev/null and b/docs/en/docs/desktop/figures/icon43-o.png differ diff --git a/docs/en/docs/desktop/figures/icon44-o.png b/docs/en/docs/desktop/figures/icon44-o.png new file mode 100644 index 0000000000000000000000000000000000000000..810f4d784ee140dbf562e67a0d3fd391272626a5 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon44-o.png differ diff --git a/docs/en/docs/desktop/figures/icon45-o.png b/docs/en/docs/desktop/figures/icon45-o.png new file mode 100644 index 0000000000000000000000000000000000000000..3e528ce2c98284f020ae4912a853f5864526396b Binary files /dev/null and b/docs/en/docs/desktop/figures/icon45-o.png differ diff --git a/docs/en/docs/desktop/figures/icon46-o.png b/docs/en/docs/desktop/figures/icon46-o.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6a3ca0fe57016f3685981ed518493ceea1c855 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon46-o.png differ diff --git a/docs/en/docs/desktop/figures/icon47-o.png b/docs/en/docs/desktop/figures/icon47-o.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeaba98d908775bd363a8ffcec27c3b6a214013 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon47-o.png differ diff --git a/docs/en/docs/desktop/figures/icon49-o.svg b/docs/en/docs/desktop/figures/icon49-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..72ffb173fdb95e1aff5b0001b08ed6b71122b7f2 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon49-o.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon5.png b/docs/en/docs/desktop/figures/icon5.png new file mode 100644 index 0000000000000000000000000000000000000000..e4206b7b584bf0702c7cb2f03a3a41e20bfba844 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon5.png differ diff --git a/docs/en/docs/desktop/figures/icon50-o.svg b/docs/en/docs/desktop/figures/icon50-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..05026802be4718205065d6369e14cc0b6ef05bc7 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon50-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon52-o.svg b/docs/en/docs/desktop/figures/icon52-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..23149c05873259cd39721b8ee9c3ab7db86d64c5 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon52-o.svg @@ -0,0 +1,9 @@ + + + attention + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon53-o.svg b/docs/en/docs/desktop/figures/icon53-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..50e33489ce984b0acfd621da4a8ef837fdf048c1 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon53-o.svg @@ -0,0 +1,11 @@ + + + + previous + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon54-o.svg b/docs/en/docs/desktop/figures/icon54-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..3b599aef4b822c707d2f646405bb00837aed96fd --- /dev/null +++ b/docs/en/docs/desktop/figures/icon54-o.svg @@ -0,0 +1,18 @@ + + + + Backspace + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon56-o.svg b/docs/en/docs/desktop/figures/icon56-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..9f13b6861e3858deec8d57a5301c934acc247069 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon56-o.svg @@ -0,0 +1,19 @@ + + + + Slice 1 + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon57-o.svg b/docs/en/docs/desktop/figures/icon57-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..e6fbfa1381b76ab3fcd45652b33267a7f6c69bb7 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon57-o.svg @@ -0,0 +1,11 @@ + + + + titlebutton/close_normal + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon58-o.svg b/docs/en/docs/desktop/figures/icon58-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..9746dcacfc8e5d4c4b63233801e37418a190fc8f --- /dev/null +++ b/docs/en/docs/desktop/figures/icon58-o.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon6.png b/docs/en/docs/desktop/figures/icon6.png new file mode 100644 index 0000000000000000000000000000000000000000..88ced3587e9a42b145fe11393726f40aba9d1b2c Binary files /dev/null and b/docs/en/docs/desktop/figures/icon6.png differ diff --git a/docs/en/docs/desktop/figures/icon62-o.svg b/docs/en/docs/desktop/figures/icon62-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..09f61b446669df2e05a3351d40d8c30879c7b035 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon62-o.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon63-o.svg b/docs/en/docs/desktop/figures/icon63-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..06c03ed99260ffadc681475dad35610aedf67f83 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon63-o.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon66-o.svg b/docs/en/docs/desktop/figures/icon66-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..5793b3846b7fe6a5758379591215b16c7f9e1b52 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon66-o.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon68-o.svg b/docs/en/docs/desktop/figures/icon68-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..a7748052dfa436116d8742dca28f7d90865231ed --- /dev/null +++ b/docs/en/docs/desktop/figures/icon68-o.svg @@ -0,0 +1,23 @@ + + + + deepin-system-monitor + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon69-o.svg b/docs/en/docs/desktop/figures/icon69-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..e21dfd00a32a44ee1c8e3882b4ca8239be04690f --- /dev/null +++ b/docs/en/docs/desktop/figures/icon69-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon7.png b/docs/en/docs/desktop/figures/icon7.png new file mode 100644 index 0000000000000000000000000000000000000000..05fe8aa38c84ca0c0c99b0b005ddec2f2ba42f4a Binary files /dev/null and b/docs/en/docs/desktop/figures/icon7.png differ diff --git a/docs/en/docs/desktop/figures/icon70-o.svg b/docs/en/docs/desktop/figures/icon70-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..b5787a7ffa5ed9519a48c6937c60927fd11fd455 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon70-o.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon71-o.svg b/docs/en/docs/desktop/figures/icon71-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..669a21f143b06cb45ea3f45f7f071809f2cbc8a8 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon71-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon72-o.svg b/docs/en/docs/desktop/figures/icon72-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..79067ed9b9ff7912e1742183b461fa056601b9cc --- /dev/null +++ b/docs/en/docs/desktop/figures/icon72-o.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon73-o.svg b/docs/en/docs/desktop/figures/icon73-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..cf6292387f5e790db6ebd66184aabcbb39257ee7 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon73-o.svg @@ -0,0 +1,13 @@ + + + + Down + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon75-o.svg b/docs/en/docs/desktop/figures/icon75-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..ef6823ccc19858f57374f0b78ad31514e8311be3 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon75-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/en/docs/desktop/figures/icon8.png b/docs/en/docs/desktop/figures/icon8.png new file mode 100644 index 0000000000000000000000000000000000000000..01543c3e0f5e96a023b4e1f0859a03e3a0dafd56 Binary files /dev/null and b/docs/en/docs/desktop/figures/icon8.png differ diff --git a/docs/en/docs/desktop/figures/icon83-o.svg b/docs/en/docs/desktop/figures/icon83-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..35dd6eacc54a933dc9ebc3f3010edfa7363fecc0 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon83-o.svg @@ -0,0 +1,84 @@ + + + + + + image/svg+xml + + img_upload + + + + + + img_upload + Created with Sketch. + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon84-o.svg b/docs/en/docs/desktop/figures/icon84-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..9bd11b9e7b45b506dd7e1c87d09d545d8f48af06 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon84-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon86-o.svg b/docs/en/docs/desktop/figures/icon86-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..5da20233309c43d4fc7b315f441cde476c835c67 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon86-o.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon88-o.svg b/docs/en/docs/desktop/figures/icon88-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..c2570c26575fd14cb5e9d9fe77831d2e8f6c9333 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon88-o.svg @@ -0,0 +1,13 @@ + + + + Left + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon9.png b/docs/en/docs/desktop/figures/icon9.png new file mode 100644 index 0000000000000000000000000000000000000000..a07c9ab8e51decd9a3bca8c969d2ae95bd68512c Binary files /dev/null and b/docs/en/docs/desktop/figures/icon9.png differ diff --git a/docs/en/docs/desktop/figures/icon90-o.svg b/docs/en/docs/desktop/figures/icon90-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..79b5e0a141f7969a8f77ae61f4c240de7187afe9 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon90-o.svg @@ -0,0 +1,12 @@ + + + + lock_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon92-o.svg b/docs/en/docs/desktop/figures/icon92-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..21341b64a832e1935252aa82e7a4e0b083c16eae --- /dev/null +++ b/docs/en/docs/desktop/figures/icon92-o.svg @@ -0,0 +1,12 @@ + + + + logout_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/icon94-o.svg b/docs/en/docs/desktop/figures/icon94-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..a47044149a02101dbd24a3fdb2f3ead77efca6c1 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon94-o.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon97-o.svg b/docs/en/docs/desktop/figures/icon97-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..4f4670de29d8c86885b5aa806b2c8cdc6fc16dcb --- /dev/null +++ b/docs/en/docs/desktop/figures/icon97-o.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/desktop/figures/icon99-o.svg b/docs/en/docs/desktop/figures/icon99-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..e9a3aa60a51404c9390bfbea8d8ff09edc0e2e32 --- /dev/null +++ b/docs/en/docs/desktop/figures/icon99-o.svg @@ -0,0 +1,11 @@ + + + notes + + + + + + + + \ No newline at end of file diff --git a/docs/en/docs/desktop/figures/xfce-1.png b/docs/en/docs/desktop/figures/xfce-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2ed383546fb5b5d4c3729fa72396c7280fec55f9 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-1.png differ diff --git a/docs/en/docs/desktop/figures/xfce-2.png b/docs/en/docs/desktop/figures/xfce-2.png new file mode 100644 index 0000000000000000000000000000000000000000..5656ea4f6a5e632e657c79ea86e89eb5e78be0d3 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-2.png differ diff --git a/docs/en/docs/desktop/figures/xfce-3.png b/docs/en/docs/desktop/figures/xfce-3.png new file mode 100644 index 0000000000000000000000000000000000000000..33377ebd8e620ce777fecd32c849901a61113969 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-3.png differ diff --git a/docs/en/docs/desktop/figures/xfce-4.png b/docs/en/docs/desktop/figures/xfce-4.png new file mode 100644 index 0000000000000000000000000000000000000000..d2a7871d03a33c09576a225c99659d34a6430389 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-4.png differ diff --git a/docs/en/docs/desktop/figures/xfce-5.png b/docs/en/docs/desktop/figures/xfce-5.png new file mode 100644 index 0000000000000000000000000000000000000000..ef043cc24d07307287a8961d3a87047aa92aca5c Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-5.png differ diff --git a/docs/en/docs/desktop/figures/xfce-6.png b/docs/en/docs/desktop/figures/xfce-6.png new file mode 100644 index 0000000000000000000000000000000000000000..25f35d8156a47ec67cd55d3b4f46b8f2f3be5a60 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-6.png differ diff --git a/docs/en/docs/desktop/figures/xfce-7.png b/docs/en/docs/desktop/figures/xfce-7.png new file mode 100644 index 0000000000000000000000000000000000000000..d43d55fc1887cdf3b5e9644a0cf6a33730de4506 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-7.png differ diff --git a/docs/en/docs/desktop/figures/xfce-71.png b/docs/en/docs/desktop/figures/xfce-71.png new file mode 100644 index 0000000000000000000000000000000000000000..e2f11ff9e06ba9a9cc6134b0923f8dfe50a3fa38 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-71.png differ diff --git a/docs/en/docs/desktop/figures/xfce-8.png b/docs/en/docs/desktop/figures/xfce-8.png new file mode 100644 index 0000000000000000000000000000000000000000..375014b1f191b1c5e361820aa1c46ac6dee3e969 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-8.png differ diff --git a/docs/en/docs/desktop/figures/xfce-81.png b/docs/en/docs/desktop/figures/xfce-81.png new file mode 100644 index 0000000000000000000000000000000000000000..3534bc5c4d7a173d230219412353772b717ccceb Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-81.png differ diff --git a/docs/en/docs/desktop/figures/xfce-811.png b/docs/en/docs/desktop/figures/xfce-811.png new file mode 100644 index 0000000000000000000000000000000000000000..6cbf6f8c930c4fa2dd070da99c7d625de8bb98c6 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-811.png differ diff --git a/docs/en/docs/desktop/figures/xfce-812.png b/docs/en/docs/desktop/figures/xfce-812.png new file mode 100644 index 0000000000000000000000000000000000000000..9431c07a3af00da6089abada553c6b44043211e9 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-812.png differ diff --git a/docs/en/docs/desktop/figures/xfce-813.png b/docs/en/docs/desktop/figures/xfce-813.png new file mode 100644 index 0000000000000000000000000000000000000000..e6663494af2b36f7c2bb51bbde7f9417dd5d1989 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-813.png differ diff --git a/docs/en/docs/desktop/figures/xfce-814.png b/docs/en/docs/desktop/figures/xfce-814.png new file mode 100644 index 0000000000000000000000000000000000000000..f588b0ebe0e8e68e01e0d608d84e4920375eb9bb Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-814.png differ diff --git a/docs/en/docs/desktop/figures/xfce-82.png b/docs/en/docs/desktop/figures/xfce-82.png new file mode 100644 index 0000000000000000000000000000000000000000..f2e5a4c1b0223f051d7de988e740493f9ace8872 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-82.png differ diff --git a/docs/en/docs/desktop/figures/xfce-821.png b/docs/en/docs/desktop/figures/xfce-821.png new file mode 100644 index 0000000000000000000000000000000000000000..690f3f0b528dfdaf6586549cdeb105df2214fc44 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-821.png differ diff --git a/docs/en/docs/desktop/figures/xfce-83.png b/docs/en/docs/desktop/figures/xfce-83.png new file mode 100644 index 0000000000000000000000000000000000000000..32ce47754669aa66080f523f052ee6f87cb651a5 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-83.png differ diff --git a/docs/en/docs/desktop/figures/xfce-831.png b/docs/en/docs/desktop/figures/xfce-831.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc09d9599b0be8867f0b73bd776b1a2e8288310 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-831.png differ diff --git a/docs/en/docs/desktop/figures/xfce-832.png b/docs/en/docs/desktop/figures/xfce-832.png new file mode 100644 index 0000000000000000000000000000000000000000..e62fce2944c5e24a176f021d2ff02344a1a09964 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-832.png differ diff --git a/docs/en/docs/desktop/figures/xfce-84.png b/docs/en/docs/desktop/figures/xfce-84.png new file mode 100644 index 0000000000000000000000000000000000000000..e0435c2edf9f68d193cff036215f32c259d378f0 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-84.png differ diff --git a/docs/en/docs/desktop/figures/xfce-841.png b/docs/en/docs/desktop/figures/xfce-841.png new file mode 100644 index 0000000000000000000000000000000000000000..c39c6c81dd5c01ca74135555c1b532134ced6ae5 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-841.png differ diff --git a/docs/en/docs/desktop/figures/xfce-842.png b/docs/en/docs/desktop/figures/xfce-842.png new file mode 100644 index 0000000000000000000000000000000000000000..9c8a48751cb6f11561133837f23a1cf8e944f488 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-842.png differ diff --git a/docs/en/docs/desktop/figures/xfce-85.png b/docs/en/docs/desktop/figures/xfce-85.png new file mode 100644 index 0000000000000000000000000000000000000000..5777b003b3f0795b6169f687dc6954f8676dcf39 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-85.png differ diff --git a/docs/en/docs/desktop/figures/xfce-851.png b/docs/en/docs/desktop/figures/xfce-851.png new file mode 100644 index 0000000000000000000000000000000000000000..7cb5c27952465f18d19de6a1653fe69b91209d39 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-851.png differ diff --git a/docs/en/docs/desktop/figures/xfce-86.png b/docs/en/docs/desktop/figures/xfce-86.png new file mode 100644 index 0000000000000000000000000000000000000000..cf73e3e44f2faa5acfaf2829aa6eaaf42cc58a3f Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-86.png differ diff --git a/docs/en/docs/desktop/figures/xfce-861.png b/docs/en/docs/desktop/figures/xfce-861.png new file mode 100644 index 0000000000000000000000000000000000000000..cccae7de5ab2dcbb4ee5b32ac5925711b3597e5d Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-861.png differ diff --git a/docs/en/docs/desktop/figures/xfce-87.png b/docs/en/docs/desktop/figures/xfce-87.png new file mode 100644 index 0000000000000000000000000000000000000000..0325b922affdaf4d1f685f41972957cf777ff66b Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-87.png differ diff --git a/docs/en/docs/desktop/figures/xfce-9.png b/docs/en/docs/desktop/figures/xfce-9.png new file mode 100644 index 0000000000000000000000000000000000000000..f6402b34a929e520c27318fe16eb509d31c17131 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-9.png differ diff --git a/docs/en/docs/desktop/figures/xfce-91.png b/docs/en/docs/desktop/figures/xfce-91.png new file mode 100644 index 0000000000000000000000000000000000000000..0cdc4824cb3cc1035f5d04863bb5f3eb4d83292b Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-91.png differ diff --git a/docs/en/docs/desktop/figures/xfce-911.png b/docs/en/docs/desktop/figures/xfce-911.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6c564e9a74d187d50ebd3f3c05dcb5d1bd5fa0 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-911.png differ diff --git a/docs/en/docs/desktop/figures/xfce-92.png b/docs/en/docs/desktop/figures/xfce-92.png new file mode 100644 index 0000000000000000000000000000000000000000..a79f2473d27759c79ecdddcdee380b357babcac1 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-92.png differ diff --git a/docs/en/docs/desktop/figures/xfce-921.png b/docs/en/docs/desktop/figures/xfce-921.png new file mode 100644 index 0000000000000000000000000000000000000000..cd436652f3bc251f6f27d707d6eb48eec95e8900 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-921.png differ diff --git a/docs/en/docs/desktop/figures/xfce-93.png b/docs/en/docs/desktop/figures/xfce-93.png new file mode 100644 index 0000000000000000000000000000000000000000..62d98b23d682341e2b0ee835561c6f52b7fd70b9 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-93.png differ diff --git a/docs/en/docs/desktop/figures/xfce-931.png b/docs/en/docs/desktop/figures/xfce-931.png new file mode 100644 index 0000000000000000000000000000000000000000..a868877c0d0ee0ff5a23d6bf2dbf7ada861dd850 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-931.png differ diff --git a/docs/en/docs/desktop/figures/xfce-94.png b/docs/en/docs/desktop/figures/xfce-94.png new file mode 100644 index 0000000000000000000000000000000000000000..09118f9047af97152aae746274d6df4f539b5564 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-94.png differ diff --git a/docs/en/docs/desktop/figures/xfce-941.png b/docs/en/docs/desktop/figures/xfce-941.png new file mode 100644 index 0000000000000000000000000000000000000000..23b9fa1d6b8b033a9126606ca094113bc19b4434 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-941.png differ diff --git a/docs/en/docs/desktop/figures/xfce-95.png b/docs/en/docs/desktop/figures/xfce-95.png new file mode 100644 index 0000000000000000000000000000000000000000..bf970f67c835941961ffcc77632079564c2a9ef5 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-95.png differ diff --git a/docs/en/docs/desktop/figures/xfce-951.png b/docs/en/docs/desktop/figures/xfce-951.png new file mode 100644 index 0000000000000000000000000000000000000000..048fa3f0b26d4a4b609bd9129d0e13b43467ce91 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-951.png differ diff --git a/docs/en/docs/desktop/figures/xfce-96.png b/docs/en/docs/desktop/figures/xfce-96.png new file mode 100644 index 0000000000000000000000000000000000000000..0115dd146cb01ecc61a78c1db55be121ff1e0820 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-96.png differ diff --git a/docs/en/docs/desktop/figures/xfce-961.png b/docs/en/docs/desktop/figures/xfce-961.png new file mode 100644 index 0000000000000000000000000000000000000000..cb76616e9dd459d4046bc634814e46cb970cccc3 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-961.png differ diff --git a/docs/en/docs/desktop/figures/xfce-962.png b/docs/en/docs/desktop/figures/xfce-962.png new file mode 100644 index 0000000000000000000000000000000000000000..35424896fb7348531cdf81a20f434bcae2c71976 Binary files /dev/null and b/docs/en/docs/desktop/figures/xfce-962.png differ diff --git a/docs/en/docs/desktop/install-DDE.md b/docs/en/docs/desktop/install-DDE.md new file mode 100644 index 0000000000000000000000000000000000000000..533c6715a7ef084ccc40125f297cb1b6ade46d8a --- /dev/null +++ b/docs/en/docs/desktop/install-DDE.md @@ -0,0 +1,31 @@ +# DDE Installation +#### Introduction + +DDE is a powerful desktop environment developed by UnionTech. It contains dozens of self-developed desktop applications. + +#### Procedure + +1. [Download](https://openeuler.org/zh/download/) the openEuler ISO file and install the OS. +2. Update the software source. +```bash +sudo dnf update +``` +3. Install DDE. +```bash +sudo dnf install dde +``` +4. Set the system to start with the graphical interface. +```bash +sudo systemctl set-default graphical.target +``` +5. Reboot the system. +```bash +sudo reboot +``` +6. After the reboot is complete, use the user created during the installation process or the **openeuler** user to log in to the desktop. + + > DDE does not allow login as the root user. + > DDE has a built-in openeuler user whose password is openeuler. + +Now you can use DDE. + diff --git a/docs/en/docs/desktop/install-UKUI.md b/docs/en/docs/desktop/install-UKUI.md new file mode 100644 index 0000000000000000000000000000000000000000..0a4466547adbf1866e9d316155aedbc7aada01e3 --- /dev/null +++ b/docs/en/docs/desktop/install-UKUI.md @@ -0,0 +1,21 @@ +# UKUI Installation +UKUI is a Linux desktop built by the KylinSoft software team over the years, primarily based on GTK and QT. Compared to other UI interfaces, UKUI is easy to use. The components of UKUI are small and low coupling, can run alone without relying on other suites. It can provide user a friendly and efficient experience. + +UKUI supports both x86_64 and aarch64 architectures. + +You are advised to create an administrator user before installing UKUI. + +1.Download openEuler 20.03 LTS SP2 and update the software source. +``` +sudo dnf update +``` +2.Install UKUI. +``` +sudo dnf install ukui +``` +3.If you want to set the system to start with the graphical interface after confirming the installation, run the following command and reboot the system (`reboot`). +``` +systemctl set-default graphical.target +``` +UKUI is constantly updated. Please check the latest installation method: +[https://gitee.com/openkylin/ukui-issues](https://gitee.com/openkylin/ukui-issues) diff --git a/docs/en/docs/desktop/ukui.md b/docs/en/docs/desktop/ukui.md new file mode 100644 index 0000000000000000000000000000000000000000..6884f1c40c533d5fc5ee467f36db05b91c103331 --- /dev/null +++ b/docs/en/docs/desktop/ukui.md @@ -0,0 +1,3 @@ +# UKUI User Guide + +This section describes how to install and use the UbuntuKylin UI (UKUI). \ No newline at end of file diff --git a/docs/en/docs/desktop/xfce.md b/docs/en/docs/desktop/xfce.md new file mode 100644 index 0000000000000000000000000000000000000000..f7563d6532f9c442c2a62b0e71cf8d0d22076d01 --- /dev/null +++ b/docs/en/docs/desktop/xfce.md @@ -0,0 +1,3 @@ +# Xfce User Guide + +This section describes how to install and use theXfce. \ No newline at end of file diff --git a/docs/en/docs/secGear/api-description.md b/docs/en/docs/secGear/api-description.md new file mode 100644 index 0000000000000000000000000000000000000000..151a41d19c5c0e3adb0b60a6ad1197cc20ea3181 --- /dev/null +++ b/docs/en/docs/secGear/api-description.md @@ -0,0 +1,283 @@ +# API Description + +The secGear unified programming framework for confidential computing consists of the TEE and REE. This section describes the APIs required for developing applications. In addition to these APIs, the TEE inherits the open-source POSIC APIs of ARM TrustZone and Intel SGX. + +## cc_enclave_create + +Creates an enclave API. + +**Functions**: + +Initialization API. The function calls different TEE creation functions based on the type to initialize the enclave context in different TEE solutions. This API is called by the REE. + +**Function Declarations:** + +cc_enclave_result_t cc_enclave_create(const char* path, enclave_type_t type, uint32_t version,uint32_t flags,const enclave_features_t* features,uint32_t features_count, + cc_enclave_t ** enclave); + +**Parameters:** + +- Path: input parameter, which specifies a path of the enclave to be loaded. +- Type: input parameter, which specifies the TEE solution, for example, SGX_ENCLAVE_TYPE, GP_ENCLAVE_TYPE and AUTO_ENCLAVE_TYPE. +- version: input parameter, which specifies the enclave engine version. Currently, there is only one version, and the value is 0. +- Flags: input parameter, which specifies the running status of the enclave. For example, SECGEAR_DEBUG_FLAG indicates the debugging status, and SECGEAR_SIMULATE_FLAG indicates the simulation status (not supported currently). +- features: input parameter, which specifies some features supported by the enclave, for example, PCL and switchless of the SGX. This parameter is not supported currently. Set it to NULL. +- features_count: input parameter, which specifies the number of features. This parameter is not supported currently. Set it to 0. +- enclave: output parameter, which specifies the created enclave context. + +**Return Values:** + +- CE_SUCCESS: The authentication information is verified successfully. +- CE_ERROR_INVALID_PARAMETER:The input parameter is incorrect. +- CE_ERROR_OUT_OF_MEMORY: No memory is available. +- CC_FAIL: Common failure. +- CC_ERROR_UNEXPECTED: Unexpected error. +- CC_ERROR_ENCLAVE_MAXIMUM: The number of enclaves created by a single app reaches the maximum. +- CC_ERROR_INVALID_PATH: The secure binary path is invalid. +- CC_ERROR_NO_FIND_REGFUNC: The enclave search fails. + +## cc_enclave_destroy + +Destroys the enclave API. + +**Function**: + +Call the exit functions of different TEEs to release the created enclave entities. This function is called by the REE. + +**Function Declaration:** + +cc_enclave_result_t cc_enclave_destroy (cc_enclave_t ** enclave); + +**Parameter:** + +- enclave: input parameter, which specifies the context of the created enclave. + +**Return Values:** + +- CE_SUCCESS: The authentication information is verified successfully. +- CE_ERROR_INVALID_PARAMETER:The input parameter is incorrect. +- CE_ERROR_OUT_OF_MEMORY: No memory is available. +- CC_ERROR_NO_FIND_UNREGFUNC: The enclave search fails. +- CC_FAIL: common failure. +- CC_ERROR_UNEXPECTED: unexpected error. + +## cc_enclave_generate_random + +Generates random numbers. + +**Function**: + +This parameter is used to generate a secure random number for the password on the security side. + +**Function Declaration:** + +cc_enclave_result_t cc_enclave_generate_random(void *buffer, size_t size) + +**Parameters:** + +- *buffer: input parameter, which specifies the buffer for generating random numbers. +- size: input parameter, which specifies the buffer length. + +**Return Values:** + +- CE_OK: Authentication information is verified successfully. +- CE_ERROR_INVALID_PARAMETER:incorrect input parameter. +- CE_ERROR_OUT_OF_MEMORY: no memory is available. + +## cc_enclave_seal_data + +Ensures data persistence. + +**Function**: + +This parameter is used to encrypt the internal data of the enclave so that the data can be persistently stored outside the enclave. It is called by the TEE. + +**Function Declaration:** + +cc_enclave_result_t cc_enclave_seal_data(uint8_t *seal_data, uint32_t seal_data_len, + +​ cc_enclave_sealed_data_t *sealed_data, uint32_t sealed_data_len, + +​ uint8_t *additional_text, uint32_t additional_text_len) + +**Parameters:** + +- seal_data: input parameter, which specifies the data to be encrypted. +- seal_data_len: input parameter, which specifies the length of the data to be encrypted. +- sealed_data: output parameter, which specifies the encrypted data processing handle. +- sealed_data_len: output parameter, which specifies the length of the encrypted ciphertext. +- additional_text: input parameter, which specifies the additional message required for encryption. +- additional_text_len: input parameter, which specifies the additional message length. + +**Return Values:** + +- CE_SUCCESS: Data encryption succeeds. +- CE_ERROR_INVALID_PARAMETER:incorrect input parameter. +- CE_ERROR_OUT_OF_MEMORY: no memory is available. +- CC_ERROR_SHORT_BUFFER: The input buffer is too small. +- CC_ERROR_GENERIC: Common bottom-layer hardware error. + +## cc_enclave_unseal_data + +Decrypts data. + +**Function**: + +This parameter is used to decrypt the data sealed by the enclave and import the external persistent data back to the enclave. It is called by the TEE. + +**Function Declaration:** + +cc_enclave_result_t cc_enclave_unseal_data(cc_enclave_sealed_data_t *sealed_data, + + uint8_t *decrypted_data, uint32_t *decrypted_data_len, + + uint8_t *additional_text, uint32_t *additional_text_len) + +**Parameters:** + +- sealed_data: input parameter, which specifies the handle of the encrypted data. +- decrypted_data: output parameter, which specifies the buffer of the decrypted ciphertext data. +- decrypted_data_len: output parameter, which specifies the length of the decrypted ciphertext. +- additional_text: output parameter, which specifies an additional message after decryption. +- additional_text_len: output parameter, which specifies the length of the additional message after decryption. + +**Return Values:** + +- CE_SUCCESS: Data decryption is successful. +- CE_ERROR_INVALID_PARAMETER:incorrect input parameter. +- CE_ERROR_OUT_OF_MEMORY: no memory is available. +- CC_ERROR_SHORT_BUFFER: The input buffer is too small. +- CC_ERROR_GENERIC: common bottom-layer hardware error. + +## cc_enclave_get_sealed_data_size + +Obtains the size of the encrypted data. + +**Function**: + +Size of the sealed_data data, which is used to allocate the decrypted data space and can be called by the TEE and REE. + +**Function Declaration:** + +uint32_t cc_enclave_get_sealed_data_size(const uint32_t add_len, const uint32_t seal_data_len); + +**Parameters:** + +- add_len: input parameter, which specifies the additional message length. +- sealed_data_len: input parameter, which specifies the length of the encrypted information. + +**Return Values:** + +- UINT32_MAX: Parameter error or function execution error. +- others: The function is successfully executed, and the return value is the size of the sealed_data structure. + +## cc_enclave_get_encrypted_text_size + +Obtains the length of an encrypted message. + +**Function**: + +This parameter is used to obtain the length of the encrypted message in the encrypted data. It is called by the TEE. + +**Function Declaration:** + +uint32_t cc_enclave_get_encrypted_text_size(const cc_enclave_sealed_data_t *sealed_data); + +**Parameter:** + +- sealed_data: input parameter, which specifies the handle of the encrypted data + +**Return Values:** + +- UINT32_MAX: Parameter error or function execution error. +- others: The function is executed successfully, and the return value is the length of the encrypted message in sealed_data. + +## cc_enclave_get_add_text_size + +Obtains the length of an additional message. + +**Function**: + +This parameter is used to obtain the length of the additional message in the encrypted data. It is called by the TEE. + +**Function Declaration:** + +uint32_t cc_enclave_get_add_text_size(const cc_enclave_sealed_data_t *sealed_data); + +**Parameter:** + +- sealed_data: input parameter, handle of the encrypted data. + +**Return Values:** + +- UINT32_MAX: Parameter error or function execution error. +- others: The function is successfully executed, and the return value is the length of the additional message in sealed_data. + +## cc_enclave_memory_in_enclave + +Performs security memory check. (Currently, this function is only supported in Intel SGX, and it is not supported in +iTrustee, because iTrustee do not support an enclave(TA) to write the memory outside enclave(TEE). It means that there is no need +for users to do this check in iTrustee.) + +**Function**: + +This parameter is used to check whether the memory addresses of the specified length belong to the TEE and is called by the TEE. + +**Function Declaration:** + +bool cc_enclave_memory_in_enclave(const void *addr, size_t size) + +**Parameters:** + +- *addr: input parameter, which specifies the memory address to be verified. +- size: input parameter, which specifies the length to be verified starting from the memory address. + +**Return Values:** + +- true: The memory in the specified zone is in the secure zone. +- false: Some or all memory in the specified area is not within the secure range. + +## cc_enclave_memory_out_enclave + +Performs security memory check. (Currently, this function is only supported in Intel SGX, and it is not supported in +iTrustee, because iTrustee do not support an enclave(TA) to write the memory outside enclave(TEE). It means that there is no need +for users to do this check in iTrustee.) + +**Function**: + +This parameter is used to check whether the memory addresses of the specified length belong to the REE and is called by the TEE. + +**Function Declaration:** + +bool cc_enclave_memory_out_enclave(const void *addr, size_t size) + +**Parameters:** + +- *addr: input parameter, which specifies the memory address to be verified. +- size: input parameter, length to be verified starting from the memory address. + +**Return Values:** + +- true: The memory of the specified area is in the non-secure area. +- false: Some or all of the memory in the specified zone is in the secure area. + +## PrintInfo + +Prints messages. + +**Function**: + +This parameter is used to print TEE logs. This API outputs the information that the TEE user wants to print. The input logs are stored in the REE /var/log/secgear/secgear.log. + +**Function Declaration:** + +void PrintInfo(int level, const char *fmt, ...); + +**Parameters:** + +- level: log print level, which is an input parameter. The value can be PRINT_ERROR, PRINT_WARNING, PRINT_STRACE, and PRINT_DEBUG. +- fmt: Input parameter, and a character to be output. + +**Return Value:** + +- None diff --git a/docs/en/docs/secGear/figures/architecture.png b/docs/en/docs/secGear/figures/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..9f2f15ebaa8404ae10cd770b514b7efa78c7538d Binary files /dev/null and b/docs/en/docs/secGear/figures/architecture.png differ diff --git a/docs/en/docs/secGear/installing-secGear.md b/docs/en/docs/secGear/installing-secGear.md new file mode 100644 index 0000000000000000000000000000000000000000..187729577e6c8e31f7e22fc0fc8d3293b319bb3b --- /dev/null +++ b/docs/en/docs/secGear/installing-secGear.md @@ -0,0 +1,29 @@ +# Installing secGear + +## Environment Requirements + +Currently, the secGear supports only the following software and hardware. More software and hardware will be available in the furture. + +- Processor: The secGear supports only the x86_64 processor architecture, and the processor must support the Intel Software Guard Extensions (Intel SGX) function. + +- Operating system: openEuler 21.03 or later + +## Installation Guide + +To use the secGear confidential computing programming framework, you need to install the secGear and secGear-devel development packages. Before the installation, ensure that the openEuler yum repository has been configured. + +1. Run the following command as user root to install the secGear component: + + ```shell + #yum install secGear + #yum install secGear-devel + ``` + +2. Check whether the secGear is successfully installed. If the following command output is displayed, the installation is successful. + + ```shell + #rpm -q secGear + secGear-1.0-1.oe1.x86_64 + #rpm -q secGear-devel + secGear-devel-1.0-1.oe1.x86_64 + ``` diff --git a/docs/en/docs/secGear/introduction-to-secGear.md b/docs/en/docs/secGear/introduction-to-secGear.md new file mode 100644 index 0000000000000000000000000000000000000000..a93a1ff1e2312cd50f2abbea5d31963704ec73e6 --- /dev/null +++ b/docs/en/docs/secGear/introduction-to-secGear.md @@ -0,0 +1,19 @@ +### Overview + +With the rapid development of cloud computing, more and more enterprises deploy computing services on the cloud, which makes data protection more complex. In addition, data leakage is a major security problem faced by cloud computing. Therefore, how to ensure the security of user data on the cloud becomes especially important. Currently, data protection focuses on offline storage security and network transmission security, and lacks security protection during data running. To ensure the security of data running on the cloud and facilitate developers to develop cloud applications, openEuler launches secGear. + +secGear is a unified confidential computing programming framework that provides easy-to-use development suites, including lifecycle management of secure zones (the system is divided into TEE and REE), secure development library, code generation assistance tool, code building and signing tool, security capability and security service component implementation solution. It can be used in various scenarios, such as trust rings, encrypted databases, multi-party computing, and AI security protection. + +This document describes how to use the secGear to guide developers to develop applications based on the secGear to better protect data. + +### Architecture + +![](./figures/architecture.png) + +As shown in the preceding figure, the secGear theme consists of three layers (currently, only the base layer is open-source, and the service layer and middleware layer are gradually open-source): + +- Service layer: provides complete security services running on the security side. + +- Middleware layer: provides a set of protocol APIs to meet basic security application requirements of users. + +- Base layer: provides abundant enclave development APIs or tools and supports C POSIX APIs and standard OpenSSL APIs in the security domain. Users can develop secure applications based on these APIs. diff --git a/docs/en/docs/secGear/secGear-development-guide.md b/docs/en/docs/secGear/secGear-development-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..3068c7b13c63aa51b9bb2ff2f0da793e0ea172f3 --- /dev/null +++ b/docs/en/docs/secGear/secGear-development-guide.md @@ -0,0 +1,431 @@ +# secGear Development Guide + +The following example describes how to use secGear to develop the helloworld program using the C language, helping you understand how to use secGear to develop applications. + +## Directory Structure Description + +Applications developed using secGear comply with the following unified directory structure: + +``` +├── helloworld +│ ├── CMakeLists.txt +│ ├── enclave +│ │ ├── CMakeLists.txt +│ │ ├── Enclave.config.xml +│ │ ├── Enclave.lds +│ │ ├── hello.c +│ │ ├── manifest.txt.in +│ │ └── rsa_public_key_cloud.pem +│ ├── helloworld.edl +│ └── host +│ ├── CMakeLists.txt +│ └── main.c +``` + +## Getting Started + +1. Create the program working directory helloworld and create enclave and host in the helloworld directory. + +2. Compile an enclave definition language (EDL) file. + + To ensure code consistency, secGear provides secgear_urts.h and secgear_tstdc.edl to mask the differences between the underlying Intel SGX and ARM iTrustee. Therefore, when the C language function library is used, the secgear_urts.h and secgear_tstdc.edl files need to be imported by default. The helloworld.edl file is as follows: + + ```c + enclave { + include "secgear_urts.h" + from "secgear_tstdc.edl" import *; + trusted { + public int get_string([out, size=32]char *buf); + }; + }; + ``` + + Note: For details about the EDL syntax, see the Intel SGX Development Guide. + +3. Compile the top-level file CMakeLists.txt. + + Compile the top-level file CMakeLists.txt and place it in the helloworld working directory. This file is used to configure information such as the processor architecture and required EDL files during compilation. + + In the preceding command, EDL_FILE indicates the EDL file, which needs to be specified by users. In this example, the EDL file is helloworld.edl. DPATH is the dynamic library loaded in the TEE. The configuration is shown in the example: + + ```c + cmake_minimum_required(VERSION 3.12 FATAL_ERROR) + project(HelloWorld C) + set(CMAKE_C_STANDARD 99) + set(CURRENT_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) + set(EDL_FILE helloworld.edl) + set(LOCAL_ROOT_PATH "$ENV{CC_SDK}") + set(SECGEAR_INSTALL_PATH /lib64/) + if(CC_GP) + set(CODETYPE trustzone) + set(CODEGEN codegen_arm64) + execute_process(COMMAND uuidgen -r OUTPUT_VARIABLE UUID) + string(REPLACE "\n" "" UUID ${UUID}) + add_definitions(-DPATH="/data/${UUID}.sec") + endif() + if(CC_SGX) + set(CODETYPE sgx) + set(CODEGEN codegen_x86_64) + add_definitions(-DPATH="${CMAKE_CURRENT_BINARY_DIR}/enclave/enclave.signed.so") + endif() + add_subdirectory(${CURRENT_ROOT_PATH}/enclave) + add_subdirectory(${CURRENT_ROOT_PATH}/host) + ``` + +4. Compile the REE code and CMakeLists.txt. + + 4.1 Compile the main.c file. + + Compile the main.c file in the REE and place it in the host directory. enclave.h is the secGear header file, and helloworld_u.h is the header file generated by the auxiliary code generation tool. Use cc_enclave_create to create the enclave context in the secure zone and cc_enclave_destroy to destroy the enclave context in the secure zone. + get_string is the trusted TEE function defined in the EDL file. Note that this function is different from the get_string function defined in the EDL file. The context parameter is the context of the secure area, and the retval parameter is the return value of get_string in the EDL file. + res indicates that the get_string function is successfully called. + + ```c + #include + #include "enclave.h" + #include "helloworld_u.h" + + #define BUF_LEN 32 + + int main() + { + int retval = 0; + char *path = PATH; + char buf[BUF_LEN]; + cc_enclave_t *context = NULL; + cc_enclave_result_t res; + res = cc_enclave_create(path, AUTO_ENCLAVE_TYPE, 0, SECGEAR_DEBUG_FLAG, NULL, 0, &context); + ... + + res = get_string(context, &retval, buf); + if (res != CC_SUCCESS || retval != (int)CC_SUCCESS) { + printf("Ecall enclave error\n"); + } else { + printf("%s\n", buf); + } + + if (context != NULL) { + res = cc_enclave_destroy(context); + ... + } + return res; + } + ``` + + 4.2 Compile CMakeLists.txt in the REE. + + ```c + # Set compilation environment variables. + #set auto code prefix + set(PREFIX helloworld) + #set host exec name + set(OUTPUT secgear_helloworld) + #set host src code + set(SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/main.c) + + # Use the code generation tool to generate auxiliary code. The CODEGEN and CODETYPE variables are also defined in the top-level CMakeLists.txt file. --search-path is used to specify the path of other dependent EDL files imported to helloword.edl. + #set auto code + if(CC_GP) + set(AUTO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_u.h ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_u.c ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_args.h) + add_custom_command(OUTPUT ${AUTO_FILES} + DEPENDS ${CURRENT_ROOT_PATH}/${EDL_FILE} + COMMAND ${CODEGEN} --${CODETYPE} --untrusted ${CURRENT_ROOT_PATH}/${EDL_FILE} --search-path ${LOCAL_ROOT_PATH}/inc/host_inc/gp) + endif() + + if(CC_SGX) + set(AUTO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_u.h ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_u.c) + add_custom_command(OUTPUT ${AUTO_FILES} + DEPENDS ${CURRENT_ROOT_PATH}/${EDL_FILE} + COMMAND ${CODEGEN} --${CODETYPE} --untrusted ${CURRENT_ROOT_PATH}/${EDL_FILE} --search-path ${LOCAL_ROOT_PATH}/inc/host_inc/sgx --search-path ${SGXSDK}/include) + endif() + + # Set compilation and link options. + set(CMAKE_C_FLAGS "-fstack-protector-all -W -Wall -Werror -Wextra -Werror=array-bounds -D_FORTIFY_SOURCE=2 -O2 -ftrapv -fPIE") + set(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack") + + # Compilation link reference directory + if(CC_GP) + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") + link_directories(${SECGEAR_INSTALL_PATH}) + endif() + add_executable(${OUTPUT} ${SOURCE_FILE} ${AUTO_FILES}) + target_include_directories(${OUTPUT} PRIVATE + /usr/include/secGear/host_inc + /usr/include/secGear/host_inc/gp + ${CMAKE_CURRENT_BINARY_DIR}) + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0") + target_link_directories(${OUTPUT} PRIVATE ${SECGEAR_INSTALL_PATH}) + endif() + target_link_libraries(${OUTPUT} secgear) + endif() + if(CC_SGX) + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") + link_directories(${SECGEAR_INSTALL_PATH} ${SGXSDK}/lib64) + endif() + set(SGX_MODE HW) + if(${SGX_MODE} STREQUAL HW) + set(Urts_Library_Name sgx_urts) + else() + set(Urts_Library_Name sgx_urts_sim) + endif() + add_executable(${OUTPUT} ${SOURCE_FILE} ${AUTO_FILES} ${LOCAL_ROOT_PATH}/src/host_src/sgx/sgx_log.c) + target_include_directories(${OUTPUT} PRIVATE + /usr/include/secGear/host_inc + /usr/include/secGear/host_inc/sgx + ${CMAKE_CURRENT_BINARY_DIR}) + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0") + target_link_directories(${OUTPUT} PRIVATE ${SECGEAR_INSTALL_PATH} ${SGXSDK}/lib64) + endif() + target_link_libraries(${OUTPUT} secgear ${Urts_Library_Name}) + endif() + + # Specify the binary installation directory. + set_target_properties(${OUTPUT} PROPERTIES SKIP_BUILD_RPATH TRUE) + if(CC_GP) + install(TARGETS ${OUTPUT} + RUNTIME + DESTINATION /vendor/bin/ + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ) + endif() + if(CC_SGX) + install(TARGETS ${OUTPUT} + RUNTIME + DESTINATION ${CMAKE_BINARY_DIR}/bin/ + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ) + endif() + ``` + +5. Compile the TEE code, CMakeLists.txt, and configuration file, and save them in the enclave directory. + + 5.1 Compile the TEE code file hello.c. + + Compile the TEE code file hello.c and place it in the enclave directory. helloworld_t.h is an auxiliary code generation tool. It uses the EDL file to generate a TEE header file. + + ```c + #include + #include + #include "helloworld_t.h" + + #define TA_HELLO_WORLD "secGear hello world!" + #define BUF_MAX 32 + int get_string(char *buf) + { + strncpy(buf, TA_HELLO_WORLD, strlen(TA_HELLO_WORLD) + 1); + return 0; + } + ``` + + 5.2 Compile the TEE CMakeLists.txt file. + + ``` + #set auto code prefix + set(PREFIX helloworld) + + #set sign key + set(PEM Enclave_private.pem) + + #set sign tool + set(SIGN_TOOL ${LOCAL_ROOT_PATH}/tools/sign_tool/sign_tool.sh) + + #set enclave src code + set(SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/hello.c) + + #set log level + set(PRINT_LEVEL 3) + add_definitions(-DPRINT_LEVEL=${PRINT_LEVEL}) + + # WHITE_LIS_X sets the iTrustee whitelist. Only the host binary files in these paths can call the security image, and a maximum of eight list paths can be configured. The user set by WHITE_LIST_OWNER will be applied to all whitelist paths. The DEVICEPEM public key is used by the iTrustee to encrypt the TEE secure dynamic library using the dynamically generated AES key. + if(CC_GP) + #set signed output + set(OUTPUT ${UUID}.sec) + #set itrustee device key + set(DEVICEPEM ${CMAKE_CURRENT_SOURCE_DIR}/rsa_public_key_cloud.pem) + #set whilelist. default: /vendor/bin/teec_hello + set(WHITE_LIST_0 /vendor/bin/helloworld) + set(WHITE_LIST_OWNER root) + set(WHITE_LIST_1 /vendor/bin/secgear_helloworld) + set(WHITELIST WHITE_LIST_0 WHITE_LIST_1) + + set(AUTO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_t.h ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_t.c ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_args.h) + add_custom_command(OUTPUT ${AUTO_FILES} + DEPENDS ${CURRENT_ROOT_PATH}/${EDL_FILE} + COMMAND ${CODEGEN} --${CODETYPE} --trusted ${CURRENT_ROOT_PATH}/${EDL_FILE} --search-path ${LOCAL_ROOT_PATH}/inc/host_inc/gp) + endif() + + # Signature of the dynamic library on the SGX TEE side. + if(CC_SGX) + set(OUTPUT enclave.signed.so) + set(AUTO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_t.h ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_t.c) + add_custom_command(OUTPUT ${AUTO_FILES} + DEPENDS ${CURRENT_ROOT_PATH}/${EDL_FILE} + COMMAND ${CODEGEN} --${CODETYPE} --trusted ${CURRENT_ROOT_PATH}/${EDL_FILE} --search-path ${LOCAL_ROOT_PATH}/inc/host_inc/sgx --search-path ${SGXSDK}/include) + endif() + + # Set compilation options. + set(COMMON_C_FLAGS "-W -Wall -Werror -fno-short-enums -fno-omit-frame-pointer -fstack-protector \ + -Wstack-protector --param ssp-buffer-size=4 -frecord-gcc-switches -Wextra -nostdinc -nodefaultlibs \ + -fno-peephole -fno-peephole2 -Wno-main -Wno-error=unused-parameter \ + -Wno-error=unused-but-set-variable -Wno-error=format-truncation=") + + set(COMMON_C_LINK_FLAGS "-Wl,-z,now -Wl,-z,relro -Wl,-z,noexecstack -Wl,-nostdlib -nodefaultlibs -nostartfiles") + + # The manifest.txt file needs to be generated for the iTrustee. Specify the iTrustee compilation options and the search path for header files and link files. + if(CC_GP) + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/manifest.txt.in" "${CMAKE_CURRENT_SOURCE_DIR}/manifest.txt") + + set(CMAKE_C_FLAGS "${COMMON_C_FLAGS} -march=armv8-a ") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -s -fPIC") + set(CMAKE_SHARED_LINKER_FLAGS "${COMMON_C_LINK_FLAGS} -Wl,-s") + + set(ITRUSTEE_TEEDIR ${iTrusteeSDK}/) + set(ITRUSTEE_LIBC ${iTrusteeSDK}/thirdparty/open_source/musl/libc) + + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") + link_directories(${CMAKE_BINARY_DIR}/lib/) + endif() + + add_library(${PREFIX} SHARED ${SOURCE_FILES} ${AUTO_FILES}) + + target_include_directories( ${PREFIX} PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + ${LOCAL_ROOT_PATH}/inc/host_inc + ${LOCAL_ROOT_PATH}/inc/host_inc/gp + ${LOCAL_ROOT_PATH}/inc/enclave_inc + ${LOCAL_ROOT_PATH}/inc/enclave_inc/gp + ${ITRUSTEE_TEEDIR}/include/TA + ${ITRUSTEE_TEEDIR}/include/TA/huawei_ext + ${ITRUSTEE_LIBC}/arch/aarch64 + ${ITRUSTEE_LIBC}/ + ${ITRUSTEE_LIBC}/arch/arm/bits + ${ITRUSTEE_LIBC}/arch/generic + ${ITRUSTEE_LIBC}/arch/arm + ${LOCAL_ROOT_PATH}/inc/enclave_inc/gp/itrustee) + + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0") + target_link_directories(${PREFIX} PRIVATE + ${CMAKE_BINARY_DIR}/lib/) + endif() + + foreach(WHITE_LIST ${WHITELIST}) + add_definitions(-D${WHITE_LIST}="${${WHITE_LIST}}") + endforeach(WHITE_LIST) + add_definitions(-DWHITE_LIST_OWNER="${WHITE_LIST_OWNER}") + + target_link_libraries(${PREFIX} -lsecgear_tee) + + add_custom_command(TARGET ${PREFIX} + POST_BUILD + COMMAND bash ${SIGN_TOOL} -d sign -x trustzone -i ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${PREFIX}.so -m ${CMAKE_CURRENT_SOURCE_DIR}/manifest.txt + -e ${DEVICEPEM} -o ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${OUTPUT}) + + install(FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${OUTPUT} + DESTINATION /data + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + + endif() + + if(CC_SGX) + set(SGX_DIR ${SGXSDK}) + set(CMAKE_C_FLAGS "${COMMON_C_FLAGS} -m64 -fvisibility=hidden") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -s") + set(LINK_LIBRARY_PATH ${SGX_DIR}/lib64) + + if(CC_SIM) + set(Trts_Library_Name sgx_trts_sim) + set(Service_Library_Name sgx_tservice_sim) + else() + set(Trts_Library_Name sgx_trts) + set(Service_Library_Name sgx_tservice) + endif() + + set(Crypto_Library_Name sgx_tcrypto) + + set(CMAKE_SHARED_LINKER_FLAGS "${COMMON_C_LINK_FLAGS} -Wl,-z,defs -Wl,-pie -Bstatic -Bsymbolic -eenclave_entry \ + -Wl,--export-dynamic -Wl,--defsym,__ImageBase=0 -Wl,--gc-sections -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/Enclave.lds") + + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") + link_directories(${LINK_LIBRARY_PATH}) + endif() + + add_library(${PREFIX} SHARED ${SOURCE_FILES} ${AUTO_FILES}) + + target_include_directories(${PREFIX} PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + ${SGX_DIR}/include/tlibc + ${SGX_DIR}/include/libcxx + ${SGX_DIR}/include + ${LOCAL_ROOT_PATH}/inc/host_inc + ${LOCAL_ROOT_PATH}/inc/host_inc/sgx) + + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0") + target_link_directories(${PREFIX} PRIVATE + ${LINK_LIBRARY_PATH}) + endif() + + target_link_libraries(${PREFIX} -Wl,--whole-archive ${Trts_Library_Name} -Wl,--no-whole-archive + -Wl,--start-group -lsgx_tstdc -lsgx_tcxx -l${Crypto_Library_Name} -l${Service_Library_Name} -Wl,--end-group) + add_custom_command(TARGET ${PREFIX} + POST_BUILD + COMMAND umask 0177 + COMMAND openssl genrsa -3 -out ${PEM} 3072 + COMMAND bash ${SIGN_TOOL} -d sign -x sgx -i ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${PREFIX}.so -k ${PEM} -o ${OUTPUT} -c ${CMAKE_CURRENT_SOURCE_DIR}/Enclave.config.xml) + endif() + + set_target_properties(${PREFIX} PROPERTIES SKIP_BUILD_RPATH TRUE) + ``` + +6. Compile the configuration file. + + For the x86_64 processor architecture that uses Intel SGX, compile the Enclave.config.xml and Enclave.lds files and place them in the enclave directory in the TEE. For details about the file configuration format, see the SGX official document. + + Enclave.config.xml reference: + + ```c + + 0 + 0 + 0x40000 + 0x100000 + 10 + 1 + + 0 + 0 + 0xFFFFFFFF + + ``` + + Enclave.lds reference: + + ```c + enclave.so + { + global: + g_global_data_sim; + g_global_data; + enclave_entry; + g_peak_heap_used; + local: + *; + }; + ``` + + Copy the device public key file rsa_public_key_cloud.pem to the enclave directory. The device public key is used to encrypt the dynamic library in the security zone by using the temporarily generated AES key. + + Note: The rsa_public_key_cloud.pem file is downloaded from . + +7. Compile the program. + + Run the following command to compile the SGX version. After the compilation, the executable program secgear_helloworld is generated. + + ```shell + cmake -DCMAKE_BUILD_TYPE=debug -DCC_SGX=ON -DSGXSDK="PATH" ./ && make + ``` + +8. Execute the program. + + ```c + $ ./secgear_helloworld + Create secgear enclave + secgear hello world! + ``` diff --git a/docs/en/docs/secGear/secGear.md b/docs/en/docs/secGear/secGear.md new file mode 100644 index 0000000000000000000000000000000000000000..16e7e1b3e56be4aa9244fd83bb3de44f91f873d5 --- /dev/null +++ b/docs/en/docs/secGear/secGear.md @@ -0,0 +1 @@ +# secGear Development Guide This document describes how to use secGear, the unified confidential computing programming framework, to develop applications and how to use tools contained in the framework. \ No newline at end of file diff --git a/docs/en/docs/secGear/using-the-secGear-tool.md b/docs/en/docs/secGear/using-the-secGear-tool.md new file mode 100644 index 0000000000000000000000000000000000000000..eee3139e9915520358c454886e1ed171eeb62392 --- /dev/null +++ b/docs/en/docs/secGear/using-the-secGear-tool.md @@ -0,0 +1,141 @@ +# Using the secGear Tool + +secGear provides a tool set to facilitate application development. This document describes the tools and how to use them. + +## Codegener: Code Generation Tool + +### Overview + +secGear codegener is a tool developed based on Intel SGX SDK edger8r. It is used to parse the EDL file to generate intermediate C code, that is, to assist in generating code that is called between the TEE and REE. + +The EDL file format defined by secGear codegener is the same as that defined by Intel SGX SDK edger8r, but the complete syntax definition of Intel is not supported: + +- The public can be used only in methods. Functions without public are declared as private by default. +- Switchless calls from the REE to the TEE and from the TEE to the REE are not supported. +- The Outside Call (OCALL) does not support some calling modes (such as cdecl, stdcall, and fastcall). + +The EDL file syntax is similar to the C language syntax. The following describes parts different from the C language syntax: + +| Member | Description | +| ----------------------- | ------------------------------------------------------------ | +| include "my_type.h” | Uses the type defined in the external inclusion file. | +| trusted | Declares that secure functions are available on the trusted application (TA) side. | +| untrusted | Declares that insecure functions are available on the TA side. | +| return_type | Defines the return value type. | +| parameter_type | Defines the parameter type. | +| [in, size = len] | For the ECALL, this parameter indicates that data needs to be transferred from the REE to the TEE. For the OCALL, this parameter is required for the pointer type, and size indicates the buffer that is actually used. | +| [out, size = len] | For the ECALL, this parameter indicates that data needs to be transferred from the TEE to the REE. For the OCALL, this parameter needs to be used for the pointer type, and size indicates the buffer that is actually used.| + +### Usage Instructions + +#### **Command Format** + +The format of the codegen command is as follows: + +**codegen** < --trustzone | --sgx > [--trusted-dir | **--untrusted-dir** | --trusted | --untrusted ] edlfile + +#### **Parameter Description** + +The parameters are described as follows: + +| **Parameter** | Mandatory/Optional | Description | +| ---------------------- | -------- | ------------------------------------------------------------ | +| --trustzone \| --sgx | Mandatory | Generates the API function corresponding to the confidential computing architecture only in the current command directory. If no parameter is specified, the SGX API function is generated by default. | +| --search-path | Optional | Specifies the search path of the file that the EDL file to be converted depends on. | +| --use-prefix | Optional | Adds a prefix to the proxy function name. The prefix is the name of the EDL file. | +| --header-only | Optional | Specifies that the code generation tool generates only header files. | +| --trusted-dir | Optional | Specifies the directory where the generated TEE auxiliary code is stored. If this parameter is not specified, the current path is used by default. | +| --untrusted-dir | Optional | Specifies the directory where the auxiliary code for generating insecure functions is located. | +| --trusted | Optional | Generates TEE auxiliary code. | +| --untrusted | Optional | Generates REE auxiliary code. | +| edlfile | Mandatory | EDL file to be converted, for example, hello.edl. | + +#### Examples + +- Convert *helloworld.edl* to generate TEE auxiliary code in *enclave-directory* and generate REE auxiliary code in *host-directory*. An example command is as follows: + +```shell +codegen --sgx --trusted-dir enclave-directory --untrusted-dir host-directory helloworld.edl +``` + +- Convert *helloworld.edl* to generate TEE auxiliary code in the current directory. The following is a command example for not generating REE auxiliary code: + +```shell +codegen --sgx --trusted helloworld.edl +``` + +- Convert *helloworld.edl* to generate REE auxiliary code in the current directory. The following is a command example that does not generate TEE auxiliary code: + +```shell +codegen --sgx --untrusted helloworld.edl +``` + +- Convert *helloworld.edl*. An example of the command for generating TEE and REE auxiliary code in the current directory is as follows: + +```shell +codegen --sgx helloworld.edl +``` + +## Signature Tool: sign_tool + +### Overview + +secGear sign_tool is a command line tool, including the compilation tool chain and signature tool, which are used for enclave signing. The sign_tool has two signature modes: + +- Single-step signature: applies only to the debugging mode. +- Two-step signature: applies to the commercial scenario. Obtain the signature private key from a third-party platform or an independent security device to sign envlave. + +### Operation Instructions + +#### **Format** + +The sign_tool contains the sign command (for signing the enclave) and the digest command (for generating the digest value). Command format: + +**sign_tool.sh -d** [sign | digest | dump] **-x** **-i** **-s** [OPTIONS] **–o** + +#### **Parameter Description** + +| sign Command Parameter | Description | Mandatory/Optional | +| -------------- | -------------------------------------------------------------| -------------------------------------------- | +| -c | Basic configuration file | The parameter is mandatory only for the trustzone type. | +| -d | Specifies the operation (sign or digest or dump) to be performed by the signature tool. | Only the sign operation is performed in single-step mode. In two-step mode, the digest operation must be performed before the sign operation. The dump operation is used to generate metadata for SGX signed enclave which is submitted to Intel for whitelisting. | +| -i | Library file to be signed for digest/sign operation, and signed enclavae for dump operation. | Mandatory | +| -k | Private key (PEM file) required for one-step signature. | This parameter is mandatory only for the SGX type. | +| -m | Additional config_cloud.ini file. | This parameter is mandatory only for the trustzone type. | +| -o | Output file. | Mandatory | +| -p | Public key certificate (PEM file) of the signature server required for two-step signing. | This parameter is mandatory only for the SGX type. | +| -s | Signed digest value required for two-step signing. | Mandatory | +| -x | encalve type (sgx or trustzone) | Mandatory | +| -h | Prints the help information. | Optional | + +#### **Single-Step Signature** + +Set the enclave type is SGX, sign the test.enclave, and generate the signature file signed.enclave. The following is an example: + +```shell +sign_tool.sh –d sign –x sgx –i test.enclave -k private_test.pem –o signed.enclave +``` + +#### **Two-Step Signature** + +The following uses SGX as an example to describe the two-step signature procedure: + +1. Generate digest value. + + Use the sign_tool to generate the digest value digest.data and the temporary intermediate file signdata. The file is used when the signature file is generated and is automatically deleted after being signed. Example: + + ```shell + sign_tool.sh –d digest –x sgx –i input –o digest.data + ``` + +2. Send digest.data to the signature authority or platform and obtain the corresponding signature. + +3. Use the obtained signature to generate the signed dynamic library signed.enclave. + + ```shell + sign_tool.sh –d sign –x sgx–i input –p pub.pem –s signature –o signed.enclave + ``` + +Note: +1.When signing the trustzone enclave, it is recommended that use the absolute path to specify the file parameters, if provide a relative path, it should be a path relative to 'signtool_v3.py'. +2. To release an official version of applications supported by Intel SGX, you need to apply for an Intel whitelist. For details about the process, see the Intel document at . diff --git a/docs/en/docs/thirdparty_migration/OpenStack-Queens.md b/docs/en/docs/thirdparty_migration/OpenStack-Queens.md new file mode 100644 index 0000000000000000000000000000000000000000..d7ea375e63efc80cd14835a67890965c52ad7887 --- /dev/null +++ b/docs/en/docs/thirdparty_migration/OpenStack-Queens.md @@ -0,0 +1,2061 @@ +# OpenStack-Queens Deployment Guide + + +- [OpenStack-Queens Deployment Guide](#openstack-queens-deployment-guide) + - [Introduction to OpenStack](#introduction-to-openstack) + - [Conventions](#conventions) + - [Preparing the Environment](#preparing-the-environment) + - [Configuring the Environment](#configuring-the-environment) + - [Installing the SQL Database](#installing-the-sql-database) + - [Installing RabbitMQ](#installing-rabbitmq) + - [Installing Memcached](#installing-memcached) + - [Installing OpenStack](#installing-openstack) + - [Installing Keystone](#installing-keystone) + - [Installing Glance](#installing-glance) + - [Installing Nova](#installing-nova) + - [Installing Neutron](#installing-neutron) + - [Installing Cinder](#installing-cinder) + - [Installing Horizon](#installing-horizon) + - [Installing Tempest](#installing-tempest) + - [Installing Ironic](#installing-ironic) + - [Installing Kolla](#installing-kolla) + - [Inalling Trove](#installing-trove) + + +## Introduction to OpenStack + +OpenStack is an open source cloud computing infrastructure software project developed by the community. It provides an operating platform or tool set for deploying the cloud, offering scalable and flexible cloud computing capabilities for organizations. + +As an open source cloud computing management platform, OpenStack consists of several major components, such as Nova, Cinder, Neutron, Glance, Keystone, and Horizon. OpenStack supports almost all cloud environments. The project aims to provide a cloud computing management platform that is easy-to-use, scalable, unified, and standardized. OpenStack provides an infrastructure as a service (IaaS) solution that combines complementary services, each of which provides an API for integration. + +The third-party oepkg Yum source certified by openEuler 20.03 LTS SP2 supports Openstack-Queens. You can configure the oepkg Yum source and deploy OpenStack based on this document. + +## Conventions + +OpenStack supports multiple deployment modes. This document supports two deployment modes: `ALL in One` and `Distributed`. The conventions are as follows: + +`ALL in One` mode: + +```text +Ignore all possible suffixes. +``` + +`Distributed` mode: + +```text +The suffix "CTL" indicates that the configuration or command applies only to the control node. +The suffix "CPT" indicates that the configuration or command applies only to compute nodes. +Otherwise, the configuration or command applies to both the controller node and compute nodes. +``` + +***Note*** + +The services involved in the above conventions are as follows: + +- Cinder +- Nova +- Neutron + +## Preparing the Environment + +### Configuring the Environment + +1. Configure the third-party oepkg source that is certified by 20.03 LTS SP2. + + ```shell + cat << EOF >> /etc/yum.repos.d/OpenStack_Queens.repo + [openstack_queens] + name=OpenStack_Queens + baseurl=https://repo.oepkgs.net/openEuler/rpm/openEuler-20.03-LTS-SP2/budding-openeuler/openstack/queens/$basearch/ + gpgcheck=0 + enabled=1 + EOF + + yum clean all && yum makecache + ``` + +2. Modify the host names and mappings. + + Set the host name of each node. + + ```shell + hostnamectl set-hostname controller (CTL) + hostnamectl set-hostname compute (CPT) + ``` + + Assume that the IP address of the controller node is `10.0.0.11` and the IP address of the compute node (if any) is `10.0.0.12`, add the following information in `/etc/hosts`: + + ```shell + 10.0.0.11 controller + 10.0.0.12 compute + ``` + +### Installing the SQL Database + +1. Run the following command to install the software package: + + ```shell + yum install mariadb mariadb-server python2-PyMySQL + ``` + +2. Run the following command to create and edit the `/etc/my.cnf.d/openstack.cnf` file: + + ```shell + vim /etc/my.cnf.d/openstack.cnf + + [mysqld] + bind-address = 10.0.0.11 + default-storage-engine = innodb + innodb_file_per_table = on + max_connections = 4096 + collation-server = utf8_general_ci + character-set-server = utf8 + ``` + + ***Note*** + + **Set `bind-address` to the management IP address of the controller node.** + +3. Start the database service and enable it to automatically start upon system boot: + + ```shell + systemctl enable mariadb.service + systemctl start mariadb.service + ``` + +4. (Optional) Configure the default password for the database. + + ```shell + mysql_secure_installation + ``` + + ***Note*** + + **Follow the prompts.** + +### Installing RabbitMQ + +1. Run the following command to install the software package: + + ```shell + yum install rabbitmq-server + ``` + +2. Start the RabbitMQ service and enable it to automatically start upon system boot. + + ```shell + systemctl enable rabbitmq-server.service + systemctl start rabbitmq-server.service + ``` + +3. Add an OpenStack user. + + ```shell + rabbitmqctl add_user openstack RABBIT_PASS + ``` + + ***Note*** + + **Replace `RABBIT_PASS` with the password of the OpenStack user.** + +4. Run the following command to set the permission of the **openstack** user so that the user can perform configuration, write, and read operations: + + ```shell + rabbitmqctl set_permissions openstack ".*" ".*" ".*" + ``` + +### Installing Memcached + +1. Run the following command to install the target software package: + + ```shell + yum install memcached python2-memcached + ``` + +2. Edit the `/etc/sysconfig/memcached` file. + + ```shell + vim /etc/sysconfig/memcached + + OPTIONS="-l 127.0.0.1,::1,controller" + ``` + +3. Run the following command to start the Memcached service and enable it to automatically start upon system boot: + + ```shell + systemctl enable memcached.service + systemctl start memcached.service + ``` + + After the service is started, you can run the `memcached-tool controller stats` command to ensure that the service is available. Replace `controller` with the management IP address of the controller node. + +## Installing OpenStack + +### Installing Keystone + +1. Create the **keystone** database and grant access to the **keystone** database. + + ```sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE keystone; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ + IDENTIFIED BY 'KEYSTONE_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ + IDENTIFIED BY 'KEYSTONE_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***Note*** + + **Replace `KEYSTONE_DBPASS` with the password of the keystone database.** + +2. Install the software package. + + ```shell + yum install openstack-keystone httpd python2-mod_wsgi + ``` + +3. Configure the Keystone. + + ```shell + vim /etc/keystone/keystone.conf + + [database] + connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone + + [token] + provider = fernet + ``` + + **Note** + + In the **\[database]** section, configure the database entry. + + In the **\[token]** section, configure the token provider. + + ***Notes:*** + + **Replace `KEYSTONE_DBPASS` with the password of the keystone database.** + +4. Synchronize the database. + + ```shell + su -s /bin/sh -c "keystone-manage db_sync" keystone + ``` + +5. Initialize the Fernet keystore. + + ```shell + keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone + keystone-manage credential_setup --keystone-user keystone --keystone-group keystone + ``` + +6. Start the service: + + ```shell + keystone-manage bootstrap --bootstrap-password ADMIN_PASS \ + --bootstrap-admin-url http://controller:5000/v3/ \ + --bootstrap-internal-url http://controller:5000/v3/ \ + --bootstrap-public-url http://controller:5000/v3/ \ + --bootstrap-region-id RegionOne + ``` + + ***Note*** + + **Replace `ADMIN_PASS` with the password of the admin user.** + +7. Configure the Apache HTTP server. + + ```shell + vim /etc/httpd/conf/httpd.conf + + ServerName controller + ``` + + ```shell + ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ + ``` + + **Note** + + Configure the `ServerName` item to reference the controller node. + + Create the `ServerName` item if it does not exist. + +8. Start Apache HTTP services. + + ```shell + systemctl enable httpd.service + systemctl start httpd.service + ``` + +9. Create environment variable configurations. + + ```shell + cat << EOF >> ~/.admin-openrc + export OS_PROJECT_DOMAIN_NAME=Default + export OS_USER_DOMAIN_NAME=Default + export OS_PROJECT_NAME=admin + export OS_USERNAME=admin + export OS_PASSWORD=ADMIN_PASS + export OS_AUTH_URL=http://controller:5000/v3 + export OS_IDENTITY_API_VERSION=3 + export OS_IMAGE_API_VERSION=2 + EOF + ``` + + ***Note*** + + **Replace `ADMIN_PASS` with the password of the admin user.** + +10. Create python2-openstackclient before creating the domain, projects, users, and roles. + + ``` + yum install python2-openstackclient + ``` + + Import environmental variables. + + ```shell + source ~/.admin-openrc + ``` + + Create the project `service`. The domain `default` has been created during keystone-manage bootstrap. + + ```shell + openstack domain create --description "An Example Domain" example + ``` + + ```shell + openstack project create --domain default --description "Service Project" service + ``` + + Create a non-admin project `myproject`, user `myuser`, and role `myrole`, and add role `myrole` to `myproject` and `myuser`. + + ```shell + openstack project create --domain default --description "Demo Project" myproject + openstack user create --domain default --password-prompt myuser + openstack role create myrole + openstack role add --project myproject --user myuser myrole + ``` + +11. Perform verification. + + Cancel the temporary environment variables **OS\_AUTH\_URL** and **OS\_PASSWORD**. + + ```shell + source ~/.admin-openrc + unset OS_AUTH_URL OS_PASSWORD + ``` + + Request a token for the **admin** user: + + ```shell + openstack --os-auth-url http://controller:5000/v3 \ + --os-project-domain-name Default --os-user-domain-name Default \ + --os-project-name admin --os-username admin token issue + ``` + + Request a token for the **myuser** user: + + ```shell + openstack --os-auth-url http://controller:5000/v3 \ + --os-project-domain-name Default --os-user-domain-name Default \ + --os-project-name myproject --os-username myuser token issue + ``` + +### Installing Glance + +1. Create a database, service credentials, and API endpoints. + + Create a database. + + ```sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE glance; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \ + IDENTIFIED BY 'GLANCE_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \ + IDENTIFIED BY 'GLANCE_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***Note:*** + + **Replace `GLANCE_DBPASS` with the password of the **glance** database.** + + Create service credentials. + + ```shell + source ~/.admin-openrc + + openstack user create --domain default --password-prompt glance + openstack role add --project service --user glance admin + openstack service create --name glance --description "OpenStack Image" image + ``` + + Create API endpoints for the image service. + + ```shell + openstack endpoint create --region RegionOne image public http://controller:9292 + openstack endpoint create --region RegionOne image internal http://controller:9292 + openstack endpoint create --region RegionOne image admin http://controller:9292 + ``` + +2. Install the software package. + + ```shell + yum install openstack-glance + ``` + +3. Configure the **glance** database. + + ```shell + vim /etc/glance/glance-api.conf + + [database] + connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = glance + password = GLANCE_PASS + + [paste_deploy] + flavor = keystone + + [glance_store] + stores = file,http + default_store = file + filesystem_store_datadir = /var/lib/glance/images/ + ``` + + ```shell + vim /etc/glance/glance-registry.conf + + [database] + connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = glance + password = GLANCE_PASS + + [paste_deploy] + flavor = keystone + + [glance_store] + stores = file,http + default_store = file + filesystem_store_datadir = /var/lib/glance/images/ + ``` + + ***Note:*** + + In the **\[database]** section, configure the database entry. + + In the **\[keystone\_authtoken]** and **\[paste\_deploy]** sections, configure the entry for the identity service. + + In the **\[glance\_store]** section, configure the local file system storage and the location where image files are stored. + + **Replace `GLANCE_DBPASS` with the password of the glance database.** + + **Replace `GLANCE_PASS` with the password of the glance user.** + +4. Synchronize the database. + + ```shell + su -s /bin/sh -c "glance-manage db_sync" glance + ``` + +5. Start the service. + + ```shell + systemctl enable openstack-glance-api.service openstack-glance-registry.service + systemctl start openstack-glance-api.service openstack-glance-registry.service + ``` + +6. Perform verification. + + Download the image. + + ```shell + source ~/.admin-openrc + + wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img + ``` + + ***Note*** + + **If the Kunpeng architecture is used, download the image of the ARM64 version.** + + Upload the image to the image service. + + ```shell + openstack image create --disk-format qcow2 --container-format bare \ + --file cirros-0.4.0-x86_64-disk.img --public cirros + ``` + + Confirm the image upload and verify the attributes. + + ```shell + openstack image list + ``` + +### Installing Nova + +1. Create a database, service credentials, and API endpoints. + + Create a database. + + ```sql + mysql -u root -p (CPT) + + MariaDB [(none)]> CREATE DATABASE nova_api; + MariaDB [(none)]> CREATE DATABASE nova; + MariaDB [(none)]> CREATE DATABASE nova_cell0; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***Note*** + + **Replace NOVA_DBPASS with the password of the nova database.** + + ```shell + source ~/.admin-openrc (CPT) + ``` + + Create Nova service credentials. + + ```shell + openstack user create --domain default --password-prompt nova (CTP) + openstack role add --project service --user nova admin (CPT) + openstack service create --name nova --description "OpenStack Compute" compute (CPT) + ``` + + Create Placement service credentials. + + ```shell + openstack user create --domain default --password-prompt placement (CPT) + openstack role add --project service --user placement admin (CPT) + openstack service create --name placement --description "Placement API" placement (CPT) + ``` + + Create Nova API endpoints. + + ```shell + openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 (CPT) + openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1 (CPT) + openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1 (CPT) + ``` + + Create Placement API endpoints. + + ```shell + openstack endpoint create --region RegionOne placement public http://controller:8778 (CPT) + openstack endpoint create --region RegionOne placement internal http://controller:8778 (CPT) + openstack endpoint create --region RegionOne placement admin http://controller:8778 (CPT) + ``` + +2. Install software packages. + + ```shell + yum install openstack-nova-api openstack-nova-conductor openstack-nova-console \ + openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api (CTL) + + yum install openstack-nova-compute (CPT) + ``` + + ***Note*** + + **If the ARM64 structure is used, run the following command:** + + ```shell + yum install edk2-aarch64 (CPT) + ``` + +3. Configures the Nova. + + ```shell + vim /etc/nova/nova.conf + + [DEFAULT] + enabled_apis = osapi_compute,metadata + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + my_ip = 10.0.0.1 + use_neutron = true + firewall_driver = nova.virt.firewall.NoopFirewallDriver + compute_driver=libvirt.LibvirtDriver (CPT) + instances_path = /var/lib/nova/instances/ (CPT) + lock_path = /var/lib/nova/tmp (CPT) + + [api_database] + connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api (CTL) + + [database] + connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova (CTL) + + [api] + auth_strategy = keystone + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000/ + auth_url = http://controller:5000/ + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = nova + password = NOVA_PASS + + [vnc] + enabled = true + server_listen = $my_ip + server_proxyclient_address = $my_ip + novncproxy_base_url = http://controller:6080/vnc_auto.html (CPT) + + [libvirt] + virt_type = qemu (CPT) + cpu_mode = custom (CPT) + cpu_model = cortex-a7 (CPT) + + [glance] + api_servers = http://controller:9292 + + [oslo_concurrency] + lock_path = /var/lib/nova/tmp (CTL) + + [placement] + region_name = RegionOne + project_domain_name = Default + project_name = service + auth_type = password + user_domain_name = Default + auth_url = http://controller:5000/v3 + username = placement + password = PLACEMENT_PASS + + [neutron] + auth_url = http://controller:5000 + auth_type = password + project_domain_name = default + user_domain_name = default + region_name = RegionOne + project_name = service + username = neutron + password = NEUTRON_PASS + service_metadata_proxy = true (CTL) + metadata_proxy_shared_secret = METADATA_SECRET (CTL) + ``` + + **Description** + + In the **\[default]** section, enable the compute and metadata APIs, configure the RabbitMQ message queue entrance, **my\_ip**, and enable the network service Neutron. + + In the **\[api\_database]** and **\[database]** sections, configure the database entry. + + In the **\[api]** and **\[keystone\_authtoken]** sections, configure the identity service entry. + + In the **\[vnc]** section, enable and configure the entry for the remote console. + + In the **\[glance]** section, configure the API address for the image service. + + In the **\[oslo\_concurrency]** section, configure the lock path. + + In the **\[placement]** section, configure the entry of the Placement service. + + ***Note*** + + **Replace `RABBIT_PASS` with the password of the openstack user in RabbitMQ.** + + **Set `my_ip` to the management IP address of the controller node.** + + **Replace `NOVA_DBPASS` with the password of the nova database.** + + **Replace `NOVA_PASS` with the password of the nova user.** + + **Replace `PLACEMENT_PASS` with the password of the placement user.** + + **Replace `NEUTRON_PASS` with the password of the neutron user.** + + **Replace `METADATA_SECRET` with a proper metadata agent secret.** + + **Exception** + + Manually add the Placement API access configuration. + + ```shell + vim /etc/httpd/conf.d/00-nova-placement-api.conf (CTL) + + + = 2.4> + Require all granted + + + Order allow,deny + Allow from all + + + ``` + + Restart the httpd service. + + ```shell + systemctl restart httpd (CTL) + ``` + + Check whether VM hardware acceleration (x86 architecture) is supported: + + ```shell + egrep -c '(vmx|svm)' /proc/cpuinfo (CPT) + ``` + + If the returned value is **0**, hardware acceleration is not supported. You need to configure libvirt to use QEMU instead of KVM. + + ```shell + vim /etc/nova/nova.conf (CPT) + + [libvirt] + virt_type = qemu + ``` + + If the returned value is **1** or a larger value, hardware acceleration is supported, and no extra configuration is required. + + ***Note*** + + **If the ARM64 structure is used, run the following command:** + + ```shell + mkdir -p /usr/share/AAVMF + chown nova:nova /usr/share/AAVMF + + ln -s /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw \ + /usr/share/AAVMF/AAVMF_CODE.fd (CPT) + ln -s /usr/share/edk2/aarch64/vars-template-pflash.raw \ + /usr/share/AAVMF/AAVMF_VARS.fd (CPT) + + vim /etc/libvirt/qemu.conf + + nvram = ["/usr/share/AAVMF/AAVMF_CODE.fd: \ + /usr/share/AAVMF/AAVMF_VARS.fd", \ + "/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw: \ + /usr/share/edk2/aarch64/vars-template-pflash.raw"] (CPT) + ``` + +4. Synchronize the database. + + Run the following command to synchronize the **nova-api** database: + + ```shell + su -s /bin/sh -c "nova-manage api_db sync" nova (CTL) + ``` + + Run the following command to register the **cell0** database: + + ```shell + su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova (CTL) + ``` + + Create the **cell1** cell: + + ```shell + su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova (CTL) + ``` + + Synchronize the **nova** database: + + ```shell + su -s /bin/sh -c "nova-manage db sync" nova (CTL) + ``` + + Verify whether **cell0** and **cell1** are correctly registered: + + ```shell + su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova (CTL) + ``` + + Add a compute node to the OpenStack cluster. + + ```shell + su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova (CPT) + ``` + +5. Start the service. + + ```shell + systemctl enable \ (CTL) + openstack-nova-api.service \ + openstack-nova-consoleauth.service \ + openstack-nova-scheduler.service \ + openstack-nova-conductor.service \ + openstack-nova-novncproxy.service + + systemctl start \ (CTL) + openstack-nova-api.service \ + openstack-nova-consoleauth.service \ + openstack-nova-scheduler.service \ + openstack-nova-conductor.service \ + openstack-nova-novncproxy.service + ``` + + ```shell + systemctl enable libvirtd.service openstack-nova-compute.service (CPT) + systemctl start libvirtd.service openstack-nova-compute.service (CPT) + ``` + +6. Perform verification. + + ```shell + source ~/.admin-openrc (CTL) + ``` + + List service components to verify that each process is successfully started and registered. + + ```shell + openstack compute service list (CTL) + ``` + + List the API endpoints in the identity service and verify the connection to the identity service. + + ```shell + openstack catalog list (CTL) + ``` + + List the images in the image service and verify the connections: + + ```shell + openstack image list (CTL) + ``` + + Check whether the cells and placement APIs are running properly and whether other prerequisites are met. + + ```shell + nova-status upgrade check (CTL) + ``` + +### Installing Neutron + +1. Create a database, service credentials, and API endpoints. + + Create a database. + + ```sql + mysql -u root -p (CTL) + + MariaDB [(none)]> CREATE DATABASE neutron; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \ + IDENTIFIED BY 'NEUTRON_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \ + IDENTIFIED BY 'NEUTRON_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***Note*** + + **Replace `NEUTRON_DBPASS` with the password of the neutron database.** + + ```shell + source ~/.admin-openrc (CTL) + ``` + + Create the **neutron** service credential. + + ```shell + openstack user create --domain default --password-prompt neutron (CTL) + openstack role add --project service --user neutron admin (CTL) + openstack service create --name neutron --description "OpenStack Networking" network (CTL) + ``` + + Create API endpoints of the Neutron service. + + ```shell + openstack endpoint create --region RegionOne network public http://controller:9696 (CTL) + openstack endpoint create --region RegionOne network internal http://controller:9696 (CTL) + openstack endpoint create --region RegionOne network admin http://controller:9696 (CTL) + ``` + +2. Install the software package: + + ```shell + yum install openstack-neutron openstack-neutron-linuxbridge-agent ebtables ipset \ (CTL) + openstack-neutron-l3-agent openstack-neutron-dhcp-agent \ + openstack-neutron-metadata-agent + ``` + + ```shell + yum install openstack-neutron-linuxbridge-agent ebtables ipset (CPT) + ``` + +3. Configures the Neutron. + + Configure the main body. + + ```shell + vim /etc/neutron/neutron.conf + + [database] + connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron (CTL) + + [DEFAULT] + core_plugin = ml2 (CTL) + service_plugins = router (CTL) + allow_overlapping_ips = true (CTL) + transport_url = rabbit://openstack:RABBIT_PASS@controller + auth_strategy = keystone + notify_nova_on_port_status_changes = true (CTL) + notify_nova_on_port_data_changes = true (CTL) + api_workers = 3 (CTL) + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = neutron + password = NEUTRON_PASS + + [nova] + auth_url = http://controller:5000 (CTL) + auth_type = password (CTL) + project_domain_name = Default (CTL) + user_domain_name = Default (CTL) + region_name = RegionOne (CTL) + project_name = service (CTL) + username = nova (CTL) + password = NOVA_PASS (CTL) + + [oslo_concurrency] + lock_path = /var/lib/neutron/tmp + ``` + + ***Description** + + In the **\[database]** section, configure the database entry. + + In the **\[default]** section, enable the ML2 and router plug-ins. Allow IP address overlapping, and configure the RabbitMQ message queue entry. + + In the **\[default]** and **\[keystone]** sections, configure the identity service entry. + + In the **\[default]** and **\[nova]** sections, enable the network to notify the change of the computing network topology. + + In the **\[oslo\_concurrency]** section, configure the lock path. + + ***Note*** + + **Replace `NEUTRON_DBPASS` with the password of the neutron database.** + + **Replace `RABBIT_PASS` with the password of the openstack user in RabbitMQ.** + + **Replace `NEUTRON_PASS` with the password of the neutron user.** + + **Replace `NOVA_PASS` with the password of the nova user.** + + Configure the ML2 plug-in. + + ```shell + vim /etc/neutron/plugins/ml2/ml2_conf.ini + + [ml2] + type_drivers = flat,vlan,vxlan + tenant_network_types = vxlan + mechanism_drivers = linuxbridge,l2population + extension_drivers = port_security + + [ml2_type_flat] + flat_networks = provider + + [ml2_type_vxlan] + vni_ranges = 1:1000 + + [securitygroup] + enable_ipset = true + ``` + + Create a symbolic link to **/etc/neutron/plugin.ini.** + + ```shell + ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini + ``` + + **Note** + + **In the \[ml2] section, enable the flat, VLAN, and VXLAN networks, enable the Linux bridge and L2 population mechanisms, and enable the port security extension driver.** + + **In the \[ml2\_type\_flat] section, configure the flat network as the provider virtual network.** + + **In the \[ml2\_type\_vxlan] section, configure the VXLAN network identifier range.** + + **In the \[securitygroup] section, set ipset.** + + **Supplement** + + **The L2 configuration can be modified as required. In this document, the provider network and Linux bridge are used.** + + Configure the Linux bridge agent: + + ```shell + vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini + + [linux_bridge] + physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME + + [vxlan] + enable_vxlan = true + local_ip = OVERLAY_INTERFACE_IP_ADDRESS + l2_population = true + + [securitygroup] + enable_security_group = true + firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver + ``` + + **Description** + + In the **\[linux\_bridge]** section, map the Provider virtual network to the physical network API. + + In the **\[vxlan]** section, enable the VXLAN network. Configure the IP address of the physical network API that processes the coverage network, and enable layer-2 population. + + In the **\[securitygroup]** section, enable the security group and configure the **linux bridge iptables** firewall driver. + + ***Note*** + + **Replace `PROVIDER_INTERFACE_NAME` with the physical network API.** + + **Replace `OVERLAY_INTERFACE_IP_ADDRESS` with the management IP address of the controller node.** + + Configure the Layer 3 proxy. + + ```shell + vim /etc/neutron/l3_agent.ini (CTL) + + [DEFAULT] + interface_driver = linuxbridge + ``` + + **Description** + + In the **\[default]** section, set the API driver to **linuxbridge**. + + Configures the DHCP agent: + + ```shell + vim /etc/neutron/dhcp_agent.ini (CTL) + + [DEFAULT] + interface_driver = linuxbridge + dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq + enable_isolated_metadata = true + ``` + + **Description** + + In the **\[default]** section, configure the Linux bridge API driver and Dnsmasq DHCP driver. Enable the isolated metadata. + + Configure the metadata proxy. + + ```shell + vim /etc/neutron/metadata_agent.ini (CTL) + + [DEFAULT] + nova_metadata_host = controller + metadata_proxy_shared_secret = METADATA_SECRET + ``` + + **Description** + + In the **\[default]** section, configure the metadata host and shared secret. + + ***Note*** + + **Replace `METADATA_SECRET` with a proper metadata agent secret.** + +4. Configures Nova. + + ```shell + vim /etc/nova/nova.conf + + [neutron] + auth_url = http://controller:5000 + auth_type = password + project_domain_name = Default + user_domain_name = Default + region_name = RegionOne + project_name = service + username = neutron + password = NEUTRON_PASS + service_metadata_proxy = true (CTL) + metadata_proxy_shared_secret = METADATA_SECRET (CTL) + ``` + + **Description** + + In the **\[neutron]** section, configure access parameters, enable the metadata proxy, and configure secret. + + ***Note*** + + **Replace `NEUTRON_PASS` with the password of the neutron user.** + + **Replace `METADATA_SECRET` with a proper metadata agent secret.** + +5. Synchronize the database. + + ```shell + su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \ + --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron + ``` + +6. Run the following command to restart the computing API service: + + ```shell + systemctl restart openstack-nova-api.service + ``` + +7. Start network services. + + ```shell + systemctl enable openstack-neutron-server.service \ (CTL) + openstack-neutron-linuxbridge-agent.service openstack-neutron-dhcp-agent.service \ + openstack-neutron-metadata-agent.service openstack-neutron-l3-agent.service + systemctl restart openstack-nova-api.service openstack-neutron-server.service (CTL) + openstack-neutron-linuxbridge-agent.service openstack-neutron-dhcp-agent.service \ + openstack-neutron-metadata-agent.service openstack-neutron-l3-agent.service + + systemctl enable openstack-neutron-linuxbridge-agent.service (CPT) + systemctl restart openstack-neutron-linuxbridge-agent.service openstack-nova-compute.service (CPT) + ``` + +8. Perform verification. + + Run the following command to list the neutron agents: + + ```shell + openstack network agent list + ``` + +### Installing Cinder + +1. Create a database, service credentials, and API endpoints. + + Create a database. + + ```sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE cinder; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \ + IDENTIFIED BY 'CINDER_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \ + IDENTIFIED BY 'CINDER_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***Note*** + + **Replace `CINDER_DBPASS` with the password of the cinder database.** + + ```shell + source ~/.admin-openrc + ``` + + Create Cinder service credentials: + + ```shell + openstack user create --domain default --password-prompt cinder + openstack role add --project service --user cinder admin + openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2 + openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3 + ``` + + Create API endpoints for the block storage service. + + ```shell + openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s + openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s + openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s + openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s + openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s + openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s + ``` + +2. Install the software package: + + ```shell + yum install openstack-cinder-api openstack-cinder-scheduler (CTL) + ``` + + ```shell + yum install lvm2 device-mapper-persistent-data scsi-target-utils rpcbind nfs-utils \ (CPT) + openstack-cinder-volume openstack-cinder-backup + ``` + +3. Prepare storage devices. The following is an example: + + ```shell + pvcreate /dev/vdb + vgcreate cinder-volumes /dev/vdb + + vim /etc/lvm/lvm.conf + + + devices { + ... + filter = [ "a/vdb/", "r/.*/"] + ``` + + **Description** + + In the **devices** section, add filtering to allow the /dev/vdb device to reject other devices. + +4. Prepare NFS. + + ```shell + mkdir -p /root/cinder/backup + + cat << EOF >> /etc/export + /root/cinder/backup 192.168.1.0/24(rw,sync,no_root_squash,no_all_squash) + EOF + + ``` + +5. Configure the Cinder. + + ```shell + vim /etc/cinder/cinder.conf + + [DEFAULT] + transport_url = rabbit://openstack:RABBIT_PASS@controller + auth_strategy = keystone + my_ip = 10.0.0.11 + enabled_backends = lvm (CPT) + backup_driver=cinder.backup.drivers.nfs.NFSBackupDriver (CPT) + backup_share=HOST:PATH (CPT) + + [database] + connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = cinder + password = CINDER_PASS + + [oslo_concurrency] + lock_path = /var/lib/cinder/tmp + + [lvm] + volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver (CPT) + volume_group = cinder-volumes (CPT) + iscsi_protocol = iscsi (CPT) + iscsi_helper = tgtadm (CPT) + ``` + + **Description** + + In the **\[database]** section, configure the database entry. + + In the **\[DEFAULT]** section, configure the RabbitMQ message queue entry and **my\_ip**. + + In the **\[DEFAULT]** and **\[keystone\_authtoken]** sections, configure the identity service entry. + + In the **\[oslo\_concurrency]** section, configure the lock path. + + ***Note*** + + **Replace `CINDER_DBPASS` with the password of the cinder database.** + + **Replace `RABBIT_PASS` with the password of the openstack user in RabbitMQ.** + + **Set `my_ip` to the management IP address of the controller node.** + + **Replace `CINDER_PASS` with the password of the cinder user.** + + **Replace `HOST:PATH` with the host IP address of the NFS and the password of the shared path user.** + +6. Synchronize the database. + + ```shell + su -s /bin/sh -c "cinder-manage db sync" cinder (CTL) + ``` + +7. Configure Nova. + + ```shell + vim /etc/nova/nova.conf (CTL) + + [cinder] + os_region_name = RegionOne + ``` + +8. Restart the computing API service. + + ```shell + systemctl restart openstack-nova-api.service + ``` + +9. Start the Cinder service. + + ```shell + systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service (CTL) + systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service (CTL) + ``` + + ```shell + systemctl enable rpcbind.service nfs-server.service tgtd.service iscsid.service \ (CPT) + openstack-cinder-volume.service \ + openstack-cinder-backup.service + systemctl start rpcbind.service nfs-server.service tgtd.service iscsid.service \ (CPT) + openstack-cinder-volume.service \ + openstack-cinder-backup.service + ``` + + ***Note*** + + If Cinder uses tgtadm to attach volumes, modify **/etc/tgt/tgtd.conf** to ensure that tgtd can discover the iSCSI target of cinder-volume. + + ``` + include /var/lib/cinder/volumes/* + ``` + +10. Perform verification. + + ```shell + source ~/.admin-openrc + openstack volume service list + ``` + +### Installing Horizon + +1. Install the software package. + + ```shell + yum install openstack-dashboard + ``` + +2. Modify the file. + + Modify the variables. + + ```text + vim /etc/openstack-dashboard/local_settings + + ALLOWED_HOSTS = ['*', ] + OPENSTACK_HOST = "controller" + OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST + ``` + +3. Restart the httpd service. + + ```shell + systemctl restart httpd + ``` + +4. Perform verification. +Open a browser and enter in the address bar to log in to Horizon. + + ***Note*** + + **Replace HOSTIP with the management plane IP address of the controller node.** + +### Installing Tempest + +Tempest is an integration test service of OpenStack. You are advised to use Tempest if you need to fully and automatically test the functions of the installed OpenStack environment. Otherwise, the installation is not required. + +1. Install Tempest. + + ```shell + yum install openstack-tempest + ``` + +2. Initialize the catalog. + + ```shell + tempest init mytest + ``` + +3. Modify the configuration file. + + ```shell + cd mytest + vi etc/tempest.conf + ``` + + Information about the current OpenStack environment needs to be configured in **tempest.conf**. For details, see the [Sample Configuration File](https://docs.openstack.org/tempest/latest/sampleconf.html). + +4. Performing the Test + + ```shell + tempest run + ``` + +### Installing Ironic + +Ironic is a bare metal service of OpenStack. You are advised to use Ironic if you need to deploy a bare metal server. Otherwise, the installation is not required. + +1. Set the database. + + The bare metal service stores information in the database. Create an Ironic database that can be accessed by the **ironic** user and replace **Ironic\_DBPASSWORD** with a proper password. + + ```sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE ironic CHARACTER SET utf8; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'localhost' \ + IDENTIFIED BY 'IRONIC_DBPASSWORD'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'%' \ + IDENTIFIED BY 'IRONIC_DBPASSWORD'; + ``` + +2. Create the service user and perform verification. + + 1\. Create the bare metal service users. + + ```shell + openstack user create --password IRONIC_PASSWORD \ + --email ironic@example.com ironic + openstack role add --project service --user ironic admin + openstack service create --name ironic + --description "Ironic baremetal provisioning service" baremetal + + openstack service create --name ironic-inspector --description "Ironic inspector baremetal provisioning service" baremetal-introspection + openstack user create --password IRONIC_INSPECTOR_PASSWORD --email ironic_inspector@example.com ironic_inspector + openstack role add --project service --user ironic-inspector admin + ``` + + 2\. Create the bare metal service access portals. + + ```shell + openstack endpoint create --region RegionOne baremetal admin http://$IRONIC_NODE:6385 + openstack endpoint create --region RegionOne baremetal public http://$IRONIC_NODE:6385 + openstack endpoint create --region RegionOne baremetal internal http://$IRONIC_NODE:6385 + openstack endpoint create --region RegionOne baremetal-introspection internal http://172.20.19.13:5050/v1 + openstack endpoint create --region RegionOne baremetal-introspection public http://172.20.19.13:5050/v1 + openstack endpoint create --region RegionOne baremetal-introspection admin http://172.20.19.13:5050/v1 + ``` + +3. Configuring the ironic-api Service + + Configuration file path: **/etc/ironic/ironic.conf** + + 1\. Set **connection** to the database location, as shown in the following example. Replace **IRONIC\_DBPASSWORD** with the password of the **ironic** user and **DB\_IP** with the IP address of the database server. + + ```shell + [database] + + # The SQLAlchemy connection string used to connect to the + # database (string value) + + connection = mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic + ``` + + 2\. Configure the ironic-api service to use the RabbitMQ message broker and replace **RPC_\*** with the address and credential of RabbitMQ. + + ```shell + [DEFAULT] + + # A URL representing the messaging driver to use and its full + # configuration. (string value) + + transport_url = rabbit://RPC_USER:RPC_PASSWORD@RPC_HOST:RPC_PORT/ + ``` + + You can also use JSON-RPC to replace RabbitMQ. + + 3\. Configure the credential for the ironic-api service to use the identity service. Replace **PUBLIC\_IDENTITY\_IP** with the public IP address of the server of the identity service, and replace **PRIVATE\_IDENTITY\_IP** with the private IP address of the identity service server. Replace **Ironic\_PASSWORD** with the password of user **ironic**. + + ```shell + [DEFAULT] + + # Authentication strategy used by ironic-api: one of + # "keystone" or "noauth". "noauth" should not be used in a + # production environment because all authentication will be + # disabled. (string value) + + auth_strategy=keystone + + [keystone_authtoken] + # Authentication type to load (string value) + auth_type=password + # Complete public Identity API endpoint (string value) + www_authenticate_uri=http://PUBLIC_IDENTITY_IP:5000 + # Complete admin Identity API endpoint. (string value) + auth_url=http://PRIVATE_IDENTITY_IP:5000 + # Service username. (string value) + username=ironic + # Service account password. (string value) + password=IRONIC_PASSWORD + # Service tenant name. (string value) + project_name=service + # Domain name containing project (string value) + project_domain_name=Default + # User's domain name (string value) + user_domain_name=Default + ``` + + 4\. Create a database table for the bare metal service. + + ```shell + ironic-dbsync --config-file /etc/ironic/ironic.conf create_schema + ``` + + 5\. Restart the ironic-api service. + + ```shell + sudo systemctl restart openstack-ironic-api + ``` + +4. Configuring the ironic-conductor Service + + 1\. Replace **HOST\_IP** with the IP address of the conductor host. + + ```shell + [DEFAULT] + + # IP address of this host. If unset, will determine the IP + # programmatically. If unable to do so, will use "127.0.0.1". + # (string value) + + my_ip=HOST_IP + ``` + + 2\. Configure the database location. The configuration of ironic-conductor must be the same as that of ironic-api. Replace **IRONIC\_DBPASSWORD** with the password of the **ironic** user and **DB\_IP** with the IP address of the database server. + + ```shell + [database] + + # The SQLAlchemy connection string to use to connect to the + # database. (string value) + + connection = mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic + ``` + + 3\. Configure the ironic-api service to use the RabbitMQ. The configuration of ironic-conductor service must be the same as that of ironic-api. Replace **RPC\_***\** with the address and credential of RabbitMQ. + + ```shell + [DEFAULT] + + # A URL representing the messaging driver to use and its full + # configuration. (string value) + + transport_url = rabbit://RPC_USER:RPC_PASSWORD@RPC_HOST:RPC_PORT/ + ``` + + You can also use JSON-RPC to replace RabbitMQ. + + 4\. Configure credentials to access other OpenStack services. + + To communicate with other OpenStack services, the service user needs to use the OpenStack Identity service for authentication when the bare metal service requests other services. The credentials for these users must be configured in each configuration file associated with the respective service. + + ```shell + [neutron] - Access OpenStack network service. + [glance] - Access the OpenStack image service. + [swift] - Access the OpenStack object storage service. + [cinder] Access the OpenStack block storage service. + [inspector] - Access the OpenStack inspection service of the bare metal service. + [service_catalog] - A special item used to store the credentials used by the bare metal service to discover its own API URL endpoints registered in the OpenStack identity service catalog. + ``` + + For simplicity, you can use the same service user for all services. For backward compatibility, this user must be the same as that configured in **\[keystone\_authtoken]** of the ironic-api service. This is not mandatory. You can create and configure different service users for each service. + + In the following example, the configuration for the authentication information for users to access the OpenStack network service is: + + ```shell + Network services are deployed in the identity service domain named "RegionOne". Only public endpoint APIs are registered in the service catalog. + + A specific CA SSL certificate is used for HTTPS connection when requested. + + The same service user with ironic-api service is configured. + + The dynamic password authentication plug-in discovers the appropriate version of the identity service API based on other options. + ``` + + ```shell + [neutron] + + # Authentication type to load (string value) + auth_type = password + # Authentication URL (string value) + auth_url=https://IDENTITY_IP:5000/ + # Username (string value) + username=ironic + # User's password (string value) + password=IRONIC_PASSWORD + # Project name to scope to (string value) + project_name=service + # Domain ID containing project (string value) + project_domain_id=default + # User's domain id (string value) + user_domain_id=default + # PEM encoded Certificate Authority to use when verifying + # HTTPs connections. (string value) + cafile=/opt/stack/data/ca-bundle.pem + # The default region_name for endpoint URL discovery. (string + # value) + region_name = RegionOne + # List of interfaces, in order of preference, for endpoint + # URL. (list value) + valid_interfaces=public + ``` + + By default, to communicate with other services, the bare metal service attempts to discover the appropriate endpoints of the service through the service catalog of the identity service. If you want to use a different endpoint for a specific service, specify the **endpoint\_override** option in the bare metal service configuration file. + + ```shell + [neutron] ... endpoint_override = + ``` + + 5\. Configure allowed drivers and hardware types. + + Configure **enabled\_hardware\_types** to set the hardware types allowed by the ironic-conductor service. + + ```shell + [DEFAULT] enabled_hardware_types = ipmi + ``` + + Configure the hardware API. + + ```shell + enabled_boot_interfaces = pxe enabled_deploy_interfaces = direct,iscsi enabled_inspect_interfaces = inspector enabled_management_interfaces = ipmitool enabled_power_interfaces = ipmitool + ``` + + Configure API default values. + + ```shell + [DEFAULT] default_deploy_interface = direct default_network_interface = neutron + ``` + + If any driver that uses Direct Deploy is enabled, you must install and configure the Swift backend of the . The Ceph object gateway (RADOS gateway) can also be used as a backend for the image service. + + 6\. Restart the ironic-conductor service. + + ```shell + sudo systemctl restart openstack-ironic-conductor + ``` + +5. Configure the ironic-conductor service. + + Configuration file path: **/etc/ironic-inspector/inspector.conf** + + 1\. Create a database. + + ```shell + # mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE ironic_inspector CHARACTER SET utf8; + + MariaDB [(none)]> GRANT ALL PRIVILEGES ON ironic_inspector.* TO 'ironic_inspector'@'localhost' \ IDENTIFIED BY 'IRONIC_INSPECTOR_DBPASSWORD'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON ironic_inspector.* TO 'ironic_inspector'@'%' \ + IDENTIFIED BY 'IRONIC_INSPECTOR_DBPASSWORD'; + ``` + + 2\. Set **connection** to the database location, as shown in the following example. Replace **IRONIC\_INSPECTOR\_DBPASSWORD** with the password of the **ironic\_inspector** user and **DB\_IP** with the IP address of the database server. + + ```shell + [database] + backend = sqlalchemy + connection = mysql+pymysql://ironic_inspector:IRONIC_INSPECTOR_DBPASSWORD@DB_IP/ironic_inspector + ``` + + 3\. Configure the communication address of the message queue. + + ```shell + [DEFAULT] transport_url = rabbit://RPC_USER:RPC_PASSWORD@RPC_HOST:RPC_PORT/ + ``` + + 4\. Configure Keystone authentication. + + ```shell + [DEFAULT] + + auth_strategy = keystone + + [ironic] + + api_endpoint = http://IRONIC_API_HOST_ADDRRESS:6385 + auth_type = password + auth_url = http://PUBLIC_IDENTITY_IP:5000 + auth_strategy = keystone + ironic_url = http://IRONIC_API_HOST_ADDRRESS:6385 + os_region = RegionOne + project_name = service + project_domain_name = Default + user_domain_name = Default + username = IRONIC_SERVICE_USER_NAME + password = IRONIC_SERVICE_USER_PASSWORD + ``` + + 5\. Configure the ironic inspector Dnsmasq service. + + ```shell + #Configuration file path: /etc/ironic-inspector/dnsmasq.conf + port=0 + interface=enp3s0 #Replace it with the actual listening network API. + dhcp-range=172.20.19.100,172.20.19.110 #Replace it with the actual DHCP address range. + bind-interfaces + enable-tftp + + dhcp-match=set:efi,option:client-arch,7 + dhcp-match=set:efi,option:client-arch,9 + dhcp-match=aarch64, option:client-arch,11 + dhcp-boot=tag:aarch64,grubaa64.efi + dhcp-boot=tag:!aarch64,tag:efi,grubx64.efi + dhcp-boot=tag:!aarch64,tag:!efi,pxelinux.0 + + tftp-root=/tftpboot #Replace it with the actual tftpboot directory. + log-facility=/var/log/dnsmasq.log + ``` + + 6\. Enable the services. + + ```shell + systemctl enable --now openstack-ironic-inspector.service + systemctl enable --now openstack-ironic-inspector-dnsmasq.service + ``` + +6. Create a deploy ramdisk image. + + RAMDisk images of OpenStack-Queens can be created using the ironic-python-agent service or disk-image-builder tool, or the latest ironic-python-agent-builder in the community. You can also use other tools. If the native tool of OpenStack-Queens RAMDisk is used, you need to install the corresponding software package. + + ``` + yum install openstack-ironic-python-agent + Or + yum install diskimage-builder + ``` + + For details, see the [official document](https://docs.openstack.org/ironic/queens/install/deploy-ramdisk.html). + + This section describes how to use ironic-python-agent-builder to build the deploy image used by Ironic. + + 1. Install ironic-python-agent-builder. + + 1. Install the tool. + + ```shell + pip install ironic-python-agent-builder + ``` + + 2. Modify the Python interpreter in the following file: + + ```shell + /usr/bin/yum /usr/libexec/urlgrabber-ext-down + ``` + + 3. Install other necessary tools. + + ```shell + yum install git + ``` + + `DIB` depends on `semanage`. Before creating an image, check whether the `semanage --help` command is available. If no such command is displayed, install it. + + ```shell + #Query the package to be installed. + [root@localhost ~]# yum provides /usr/sbin/semanage + Loaded plug-in: fastestmirror + Loading mirror speeds from cached hostfile + * base: mirror.vcu.edu + * extras: mirror.vcu.edu + * updates: mirror.math.princeton.edu + policycoreutils-python-2.5-34.el7.aarch64 : SELinux policy core python utilities + Source: base + Matching source: + File name: /usr/sbin/semanage + #Installation + [root@localhost ~]# yum install policycoreutils-python + ``` + + 2. Create the image. + + If the `arm` architecture is used, add the following information: + + ```shell + export ARCH=aarch64 + ``` + + Basic usage: + + ```shell + usage: ironic-python-agent-builder [-h] [-r RELEASE] [-o OUTPUT] [-e ELEMENT] + [-b BRANCH] [-v] [--extra-args EXTRA_ARGS] + distribution + + positional arguments: + distribution Distribution to use + + optional arguments: + -h, --help show this help message and exit + -r RELEASE, --release RELEASE + Distribution release to use + -o OUTPUT, --output OUTPUT + Output base file name + -e ELEMENT, --element ELEMENT + Additional DIB element to use + -b BRANCH, --branch BRANCH + If set, override the branch that is used for ironic- + python-agent and requirements + -v, --verbose Enable verbose logging in diskimage-builder + --extra-args EXTRA_ARGS + Extra arguments to pass to diskimage-builder + ``` + + Example: + + ```shell + ironic-python-agent-builder centos -o /mnt/ironic-agent-ssh -b origin/stable/rocky + ``` + + 3. Allow SSH login. + + Initialize environment variables and create the image. + + ```shell + export DIB_DEV_USER_USERNAME=ipa \ + export DIB_DEV_USER_PWDLESS_SUDO=yes \ + export DIB_DEV_USER_PASSWORD='123' + ironic-python-agent-builder centos -o /mnt/ironic-agent-ssh -b origin/stable/rocky -e selinux-permissive -e devuser + ``` + + 4. Specify a code repository. + + Initialize the corresponding environment variables and create an image. + + ```shell + #Specify the repository address and version. + DIB_REPOLOCATION_ironic_python_agent=git@172.20.2.149:liuzz/ironic-python-agent.git + DIB_REPOREF_ironic_python_agent=origin/develop + + #Clone code directly from Gerrit. + DIB_REPOLOCATION_ironic_python_agent=https://review.opendev.org/openstack/ironic-python-agent + DIB_REPOREF_ironic_python_agent=refs/changes/43/701043/1 + ``` + + For details, see [source-repositories](https://docs.openstack.org/diskimage-builder/latest/elements/source-repositories/README.html). + + The verification of the specified repository address and version is successful. + +### Installing Kolla + +Kolla provides container-based deployment for OpenStack services in the production environment. The Kolla and Kolla-ansible services are introduced in openEuler 20.03 LTS SP2. + +The installation of Kolla is simple. You only need to install the corresponding RPM package. + +``` +yum install openstack-kolla openstack-kolla-ansible +``` + +After the installation, you can use commands including `kolla-ansible`, `kolla-build`, `kolla-genpwd`, and `kolla-mergepwd`. + +### Installing Trove + +Trove is a database service provided by OpenStack. You are advised to use Trove if you use the database service provided by OpenStack. Otherwise, the installation is not required. + +1. Set the database. + + The database service stores information in the database. Create a **trove** user to access the **trove** database. Replace **TROVE\_DBPASSWORD** with a proper password. + + ```sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE trove CHARACTER SET utf8; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'localhost' \ + IDENTIFIED BY 'TROVE_DBPASSWORD'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'%' \ + IDENTIFIED BY 'TROVE_DBPASSWORD'; + ``` + +2. Create the service user and perform verification. + + 1\. Create a Trove service user. + + ```shell + openstack user create --password TROVE_PASSWORD \ + --email trove@example.com trove + openstack role add --project service --user trove admin + openstack service create --name trove + --description "Database service" database + ``` + + **Note:** Replace `TROVE_PASSWORD` with the password of the `trove` user. + + 2\. Create a database service access portal. + + ```shell + openstack endpoint create --region RegionOne database public http://$TROVE_NODE:8779/v1.0/%\(tenant_id\)s + openstack endpoint create --region RegionOne database internal http://$TROVE_NODE:8779/v1.0/%\(tenant_id\)s + openstack endpoint create --region RegionOne database admin http://$TROVE_NODE:8779/v1.0/%\(tenant_id\)s + ``` + + **Note:** Replace `$TROVE_NODE` with the API service deployment node of the Trove. + +3. Install and configure Trove components. +1\. Install the Trove package. + + ```shell script + yum install openstack-trove python-troveclient + ``` + + 2. Configure `trove.conf`. + + ```shell script + vim /etc/trove/trove.conf + + [DEFAULT] + bind_host=TROVE_NODE_IP + log_dir = /var/log/trove + + auth_strategy = keystone + # Config option for showing the IP address that nova doles out + add_addresses = True + network_label_regex = ^NETWORK_LABEL$ + api_paste_config = /etc/trove/api-paste.ini + + trove_auth_url = http://controller:35357/v3/ + nova_compute_url = http://controller:8774/v2 + cinder_url = http://controller:8776/v1 + + nova_proxy_admin_user = admin + nova_proxy_admin_pass = ADMIN_PASS + nova_proxy_admin_tenant_name = service + taskmanager_manager = trove.taskmanager.manager.Manager + use_nova_server_config_drive = True + + # Set these if using Neutron Networking + network_driver=trove.network.neutron.NeutronDriver + network_label_regex=.* + + + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + + [database] + connection = mysql+pymysql://trove:TROVE_DBPASS@controller/trove + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000/v3/ + auth_url=http://controller:35357/v3/ + #auth_uri = http://controller/identity + #auth_url = http://controller/identity_admin + auth_type = password + project_domain_name = default + user_domain_name = default + project_name = service + username = trove + password = TROVE_PASS + + ``` + + **Note:** + + - Set `bind_host` in the `[Default]` section to the IP address of the Trove node in the group. + - `nova_compute_url` and `cinder_url` are endpoints created in Keystone for Nova and Cinder. + - `nova_proxy_XXX` shows the information about a user who can access the Nova service. In the preceding example, the `admin` user is used as an example. + - `transport_url` is the connection information of `RabbitMQ`. Replace `RABBIT_PASS` with the RabbitMQ password. + - `connection` in the `[database]` section is the information about the database created for Trove in the MySQL. + - Replace `TROVE_PASS` with the actual password of the **trove** user. + + 3. Configure `trove-taskmanager.conf`. + + ```shell script + vim /etc/trove/trove-taskmanager.conf + + [DEFAULT] + log_dir = /var/log/trove + trove_auth_url = http://controller/identity/v2.0 + nova_compute_url = http://controller:8774/v2 + cinder_url = http://controller:8776/v1 + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + + [database] + connection = mysql+pymysql://trove:TROVE_DBPASS@controller/trove + ``` + + **Note:** Refer to the configuration of `trove.conf`. + + 4. Configure `trove-conductor.conf`. + + ```shell script + vim /etc/trove/trove-conductor.conf + + [DEFAULT] + log_dir = /var/log/trove + trove_auth_url = http://controller/identity/v2.0 + nova_compute_url = http://controller:8774/v2 + cinder_url = http://controller:8776/v1 + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + + [database] + connection = mysql+pymysql://trove:trove@controller/trove + ``` + + **Note:** Refer to the configuration of `trove.conf`. + + 5. Configure `trove-guestagent.conf`. + + ```shell script + vim /etc/trove/trove-guestagent.conf + [DEFAULT] + rabbit_host = controller + rabbit_password = RABBIT_PASS + nova_proxy_admin_user = admin + nova_proxy_admin_pass = ADMIN_PASS + nova_proxy_admin_tenant_name = service + trove_auth_url = http://controller/identity_admin/v2.0 + ``` + + **Note:** `guestagent` is an independent component of Trove and needs to be built into the VM image created by the Trove through Nova. After a database instance is created, the guest agent process is started to report heartbeat messages to the Trove through the message queue (RabbitMQ). Therefore, you need to configure the RabbitMQ user name and password. + + 6. Generate the `Trove` database table. + + ```shell script + su -s /bin/sh -c "trove-manage db_sync" trove + ``` + +4. Complete the installation and configuration. + + 1. Configure the automatic startup of the Trove service. + + ```shell script + systemctl enable openstack-trove-api.service \ + openstack-trove-taskmanager.service \ + openstack-trove-conductor.service + ``` + + 2. Start the service. + + ```shell script + systemctl start openstack-trove-api.service \ + openstack-trove-taskmanager.service \ + openstack-trove-conductor.service + ``` \ No newline at end of file diff --git a/docs/en/docs/thirdparty_migration/OpenStack-Rocky.md b/docs/en/docs/thirdparty_migration/OpenStack-Rocky.md new file mode 100644 index 0000000000000000000000000000000000000000..bc79f41920ad28a3a98dc32683cf366d317bfbba --- /dev/null +++ b/docs/en/docs/thirdparty_migration/OpenStack-Rocky.md @@ -0,0 +1,2140 @@ +# OpenStack-Rocky Deployment Guide + + +- [OpenStack-Rocky Deployment Guide](#openstack-rocky-deployment-guide) + - [Introduction to OpenStack](#introduction-to-openstack) + + - [Preparing the Environment](#preparing-the-environment) + - [Configuring OpenStack Yum Source](#configuring-openStack-yum-source) + - [Configuring the Environment](#configuring-the-environment) + - [Installing the SQL Database](#installing-the-sql-database) + - [Installing RabbitMQ](#installing-rabbitmq) + - [Installing Memcached](#installing-memcached) + + - [Installing OpenStack](#installing-openstack) + - [Installing Keystone](#installing-keystone) + + - [Installing Glance](#installing-glance) + + - [Installing Nova](#installing-nova) + + - [Installing Neutron](#installing-neutron) + + - [Installing Cinder](#installing-cinder) + + - [Installing Horizon](#installing-horizon) + + - [Installing Tempest](#installing-tempest) + + - [Installing Ironic](#installing-ironic) + + - [Installing Kolla](#installing-kolla) + + - [Installing Trove](#installing-trove) + + + +## Introduction to OpenStack + +OpenStack is an open source cloud computing infrastructure software project developed by the community. It provides an operating platform or tool set for deploying the cloud, offering scalable and flexible cloud computing capabilities for organizations. + +As an open source cloud computing management platform, OpenStack consists of several major components, such as Nova, Cinder, Neutron, Glance, Keystone, and Horizon. OpenStack supports almost all cloud environments. The project aims to provide a cloud computing management platform that is easy-to-use, scalable, unified, and standardized. OpenStack provides an infrastructure as a service (IaaS) solution that combines complementary services, each of which provides an API for integration. + +The third-party oepkg Yum source certified by openEuler 20.03 LTS SP2 supports OpenStack-Rocky. You can configure the oepkg Yum source and deploy OpenStack based on this document. + +## Preparing the Environment + +### Configuring OpenStack Yum Source + +Configure third-party oepkg source that is certified by 20.03 LTS SP2. The following uses x86\_64 as an example. + +```shell +$ cat << EOF >> /etc/yum.repos.d/OpenStack_Rocky.repo +[openstack_rocky] +name=OpenStack_Rocky +baseurl=https://repo.oepkgs.net/openEuler/rpm/openEuler-20.03-LTS-SP2/budding-openeuler/openstack/rocky/x86_64/ +gpgcheck=0 +enabled=1 +EOF +``` + +```shell +$ yum clean all && yum makecache +``` + +### Configuring the Environment + +Add controller information in `/etc/hosts`. For example, if the node IP address is `10.0.0.11`, add the following information: + +``` +10.0.0.11 controller +``` + +### Installing the SQL Database + +1. Run the following command to install the software package: + + ```shell + $ yum install mariadb mariadb-server python2-PyMySQL + ``` + +2. Create a file named `/etc/my.cnf.d/openstack.cnf` and edit it. + + Copy the following content to the file (set **bind-address** to the management IP address of the controller node): + + ```ini + [mysqld] + bind-address = 10.0.0.11 + default-storage-engine = innodb + innodb_file_per_table = on + max_connections = 4096 + collation-server = utf8_general_ci + character-set-server = utf8 + ``` + +3. Start the database service and enable it to automatically start upon system boot: + + ```shell + $ systemctl enable mariadb.service + $ systemctl start mariadb.service + ``` + +### Installing RabbitMQ + +1. Run the following command to install the software package: + + ```shell + $ yum install rabbitmq-server + ``` + +2. Start the RabbitMQ service and enable it to automatically start upon system boot. + + ```shell + $ systemctl enable rabbitmq-server.service + $ systemctl start rabbitmq-server.service + ``` + +3. Add an OpenStack user. + + ```shell + $ rabbitmqctl add_user openstack RABBIT_PASS + ``` + +4. Replace **RABBIT\_PASS** with the password of the OpenStack user. + +5. Run the following command to set the permission of the **openstack** user so that the user can perform configuration, write, and read operations: + + ```shell + $ rabbitmqctl set_permissions openstack ".*" ".*" ".*" + ``` + +### Installing Memcached + +1. Run the following command to install the target software package: + + ```shell + $ yum install memcached python2-memcached + ``` + +2. Edit the `/etc/sysconfig/memcached` file and add the following content: + + ```shell + OPTIONS="-l 127.0.0.1,::1,controller" + ``` + + Change the value of **OPTIONS** to the actual management IP address of the controller node. + +3. Run the following command to start the Memcached service and enable it to automatically start upon system boot: + + ```shell + $ systemctl enable memcached.service + $ systemctl start memcached.service + ``` + +## Installing OpenStack + +### Installing Keystone + +1. Log in to the database as the **root** user. Create the Keystone database, and grant permissions to the user. + + ```shell + $ mysql -u root -p + ``` + + ```sql + MariaDB [(none)]> CREATE DATABASE keystone; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ + IDENTIFIED BY 'KEYSTONE_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ + IDENTIFIED BY 'KEYSTONE_DBPASS'; + MariaDB [(none)]> exit + ``` + + Replace **KEYSTONE\_DBPASS** with the password of the Keystone database. + +2. Run the following command to install the software package: + + ```shell + $ yum install openstack-keystone httpd python2-mod_wsgi + ``` + +3. Edit the `/etc/keystone/keystone.conf` file to configure Keystone. In the **\[database]** section, configure the database entry. In the **\[token]** section, configure the token provider. + + ```ini + [database] + connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone + [token] + provider = fernet + ``` + + Replace **KEYSTONE\_DBPASS** with the password of the Keystone database. + +4. Run the following command to synchronize the database. + + ```shell + su -s /bin/sh -c "keystone-manage db_sync" keystone + ``` + +5. Run the following command to initialize the Fernet keystore: + + ```shell + $ keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone + $ keystone-manage credential_setup --keystone-user keystone --keystone-group keystone + ``` + +6. Run the following commands to enable the identity service: + + ```shell + $ keystone-manage bootstrap --bootstrap-password ADMIN_PASS \ + --bootstrap-admin-url http://controller:5000/v3/ \ + --bootstrap-internal-url http://controller:5000/v3/ \ + --bootstrap-public-url http://controller:5000/v3/ \ + --bootstrap-region-id RegionOne + ``` + + Replace **ADMIN\_PASS** with the password of the **admin** user. + +7. Edit the `/etc/httpd/conf/httpd.conf` file and configure the Apache HTTP server. + + ```shell + $ vim /etc/httpd/conf/httpd.conf + ``` + + Enable **ServerName** to reference the controller node: + + ``` + ServerName controller + ``` + + If **ServerName** does not exist, create it. + +8. Run the following command to create a link for the `/usr/share/keystone/wsgi-keystone.conf` file: + + ```shell + $ ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ + ``` + +9. After the installation is complete, run the following command to start the Apache HTTP service: + + ```shell + $ systemctl enable httpd.service + $ systemctl start httpd.service + ``` + +10. Install the OpenStack client. + + ```shell + $ yum install python2-openstackclient + ``` + +11. Create the environment script for the OpenStack client. + + Run the following command to create environment variable script for the **admin** user: + + ```shell + # vim admin-openrc + + export OS_PROJECT_DOMAIN_NAME=Default + export OS_USER_DOMAIN_NAME=Default + export OS_PROJECT_NAME=admin + export OS_USERNAME=admin + export OS_PASSWORD=ADMIN_PASS + export OS_AUTH_URL=http://controller:5000/v3 + export OS_IDENTITY_API_VERSION=3 + export OS_IMAGE_API_VERSION=2 + ``` + + Replace **ADMIN\_PASS** with the password of user **admin** that is set in the preceding `keystone-manage bootstrap` command. Run the following script to load environment variables: + + ```shell + $ source admin-openrc + ``` + +12. Run the following commands to create the domains, projects, users, and roles: + + Create a domain named **example**. + + ```shell + $ openstack domain create --description "An Example Domain" example + ``` + + Note: The domain **default** has been created in **keystone-manage bootstrap**. + + Create a project named **service**. + + ```shell + $ openstack project create --domain default --description "Service Project" service + ``` + + Create a non-admin project named **myproject**, a user named **myuser**, and a role named **myrole**. Add the **myrole** role to **myproject** and **myuser**. + + ```shell + $ openstack project create --domain default --description "Demo Project" myproject + $ openstack user create --domain default --password-prompt myuser + $ openstack role create myrole + $ openstack role add --project myproject --user myuser myrole + ``` + +13. Perform verification. + + Cancel the temporary environment variables **OS\_AUTH\_URL** and **OS\_PASSWORD**. + + ```shell + $ unset OS_AUTH_URL OS_PASSWORD + ``` + + Request a token for the **admin** user: + + ```shell + $ openstack --os-auth-url http://controller:5000/v3 \ + --os-project-domain-name Default --os-user-domain-name Default \ + --os-project-name admin --os-username admin token issue + ``` + + Request a token for the **myuser** user: + + ```shell + $ openstack --os-auth-url http://controller:5000/v3 \ + --os-project-domain-name Default --os-user-domain-name Default \ + --os-project-name myproject --os-username myuser token issue + ``` + +### Installing Glance + +1. Create a database, service credentials, and API endpoints. + + Create a database. + + Log in to the database as the **root** user. Create the **glance** database and grant proper access to the **glance** database. + + ```shell + $ mysql -u root -p + ``` + + ```sql + MariaDB [(none)]> CREATE DATABASE glance; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \ + IDENTIFIED BY 'GLANCE_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \ + IDENTIFIED BY 'GLANCE_DBPASS'; + MariaDB [(none)]> exit + ``` + + Replace **GLANCE\_DBPASS** with the password of the **glance** database. + + ```shell + $ source admin-openrc + ``` + + Run the following commands to create the **glance** service credential, create the **glance** user, and add the **admin** role to the **glance** user: + + ```shell + $ openstack user create --domain default --password-prompt glance + $ openstack role add --project service --user glance admin + $ openstack service create --name glance --description "OpenStack Image" image + ``` + + Create API endpoints for the image service. + + ```shell + $ openstack endpoint create --region RegionOne image public http://controller:9292 + $ openstack endpoint create --region RegionOne image internal http://controller:9292 + $ openstack endpoint create --region RegionOne image admin http://controller:9292 + ``` + +2. Perform the installation and configuration. + + Install the software package: + + ```shell + $ yum install openstack-glance + ``` + + Configure Glance: + + Open the `/etc/glance/glance-api.conf` file. + + In the **\[database]** section, configure the database entry. + + In the **\[keystone\_authtoken]** and **\[paste\_deploy]** sections, configure the identity service entry. + + In the **\[glance\_store]** section, configure the local file system storage and the location where image files are stored. + + ```ini + [database] + # ... + connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance + [keystone_authtoken] + # ... + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = glance + password = GLANCE_PASS + [paste_deploy] + # ... + flavor = keystone + [glance_store] + # ... + stores = file,http + default_store = file + filesystem_store_datadir = /var/lib/glance/images/ + ``` + + Open the `/etc/glance/glance-registry.conf` file. + + In the **\[database]** section, configure the database entry. + + In the **\[keystone\_authtoken]** and **\[paste\_deploy]** sections, configure the identity service entry. + + ```ini + [database] + # ... + connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance + [keystone_authtoken] + # ... + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = glance + password = GLANCE_PASS + [paste_deploy] + # ... + flavor = keystone + ``` + + In the preceding command, replace **GLANCE\_DBPASS** with the password of the **glance** database, and replace **GLANCE\_PASS** with the password of the **glance** user. + + Synchronize the database: + + ```shell + $ su -s /bin/sh -c "glance-manage db_sync" glance + ``` + + Run the following command to start the image service: + + ```shell + $ systemctl enable openstack-glance-api.service openstack-glance-registry.service + $ systemctl start openstack-glance-api.service openstack-glance-registry.service + ``` + +3. Perform verification. + + Download the image. + + ```shell + $ source admin-openrc + #Note: If the Kunpeng architecture is used, download the image of the ARM64 version. + $ wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img + ``` + + Upload the image to the image service. + + ```shell + $ glance image-create --name "cirros" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --visibility=public + ``` + + Confirm the image upload and verify the attributes. + + ```shell + $ glance image-list + ``` + +### Installing Nova + +1. Create a database, service credentials, and API endpoints. + + Create a database. + + Access the database as the **root** user. Create the **nova**, **nova\_api**, and **nova\_cell0** databases and grant permissions. + + ```shell + $ mysql -u root -p + ``` + + ```SQL + MariaDB [(none)]> CREATE DATABASE nova_api; + MariaDB [(none)]> CREATE DATABASE nova; + MariaDB [(none)]> CREATE DATABASE nova_cell0; + MariaDB [(none)]> CREATE DATABASE placement; + + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' \ + IDENTIFIED BY 'PLACEMENT_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' \ + IDENTIFIED BY 'PLACEMENT_DBPASS'; + MariaDB [(none)]> exit + ``` + + Replace **NOVA\_DBPASS** and **PLACEMENT\_DBPASS** with the passwords for the Nova and Placement databases. + + Run the following commands to create Nova service credentials, create a **nova** user, and add the **admin** role to the **nova** user: + + ```shell + $ . admin-openrc + $ openstack user create --domain default --password-prompt nova + $ openstack role add --project service --user nova admin + $ openstack service create --name nova --description "OpenStack Compute" compute + ``` + + Create API endpoints for the computing service. + + ```shell + $ openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 + $ openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1 + $ openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1 + ``` + + Create the **placement** user and add the **admin** role to the **placement** user. + + ```shell + $ openstack user create --domain default --password-prompt placement + $ openstack role add --project service --user placement admin + ``` + + Create the **placement** service credential and API service endpoint. + + ```shell + $ openstack service create --name placement --description "Placement API" placement + $ openstack endpoint create --region RegionOne placement public http://controller:8778 + $ openstack endpoint create --region RegionOne placement internal http://controller:8778 + $ openstack endpoint create --region RegionOne placement admin http://controller:8778 + ``` + +2. Perform the installation and configuration. + + Install the software package: + + ```shell + $ yum install openstack-nova-api openstack-nova-conductor \ + openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-compute \ + openstack-nova-placement-api openstack-nova-console + ``` + + Configure Nova: + + Open the `/etc/nova/nova.conf` file. + + In the **\[DEFAULT]** section, enable the computing and metadata APIs, configure the RabbitMQ message queue entrance, configure **my\_ip**, and enable the network service Neutron. + + In the **\[api\_database]**, **\[database]**, and **\[placement\_database]** sections, configure the database entry. + + In the **\[api]** and **\[keystone\_authtoken]** sections, configure the identity service entry. + + In the **\[vnc]** section, enable and configure the entry for the remote console. + + In the **\[glance]** section, configure the API address for the image service. + + In the **\[oslo\_concurrency]** section, configure the lock path. + + In the **\[placement]** section, configure the entry of the Placement service. + + ```ini + [DEFAULT] + # ... + enabled_apis = osapi_compute,metadata + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + my_ip = 10.0.0.11 + use_neutron = true + firewall_driver = nova.virt.firewall.NoopFirewallDriver + compute_driver = libvirt.LibvirtDriver + instances_path = /var/lib/nova/instances/ + [api_database] + # ... + connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api + [database] + # ... + connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova + [placement_database] + # ... + connection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement + [api] + # ... + auth_strategy = keystone + [keystone_authtoken] + # ... + www_authenticate_uri = http://controller:5000/ + auth_url = http://controller:5000/ + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = nova + password = NOVA_PASS + [vnc] + enabled = true + # ... + server_listen = $my_ip + server_proxyclient_address = $my_ip + novncproxy_base_url = http://controller:6080/vnc_auto.html + [glance] + # ... + api_servers = http://controller:9292 + [oslo_concurrency] + # ... + lock_path = /var/lib/nova/tmp + [placement] + # ... + region_name = RegionOne + project_domain_name = Default + project_name = service + auth_type = password + user_domain_name = Default + auth_url = http://controller:5000/v3 + username = placement + password = PLACEMENT_PASS + [neutron] + # ... + auth_url = http://controller:5000 + auth_type = password + project_domain_name = Default + user_domain_name = Default + region_name = RegionOne + project_name = service + username = neutron + password = NEUTRON_PASS + ``` + + Replace **RABBIT\_PASS** with the password of the **openstack** user in RabbitMQ. + + Set **my\_ip** to the management IP address of the controller node. + + Replace **NOVA\_DBPASS** with the password of the **nova** database. + + Replace **PLACEMENT\_DBPASS** with the password of the Placement database. + + Replace **NOVA\_PASS** with the password of the **nova** user. + + Replace **PLACEMENT\_PASS** with the password of the **placement** user. + + Replace **NEUTRON\_PASS** with the password of the **neutron** user. + + Open `/etc/httpd/conf.d/00-nova-placement-api.conf` and add the Placement API access configuration. + + ```xml + + = 2.4> + Require all granted + + + Order allow,deny + Allow from all + + + ``` + + Restart the httpd service. + + ```shell + $ systemctl restart httpd + ``` + + Run the following command to synchronize the **nova-api** database: + + ```shell + $ su -s /bin/sh -c "nova-manage api_db sync" nova + ``` + + Run the following command to register the **cell0** database: + + ```shell + $ su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova + ``` + + Create the **cell1** cell: + + ```shell + $ su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova + ``` + + Synchronize the **nova** database: + + ```shell + $ su -s /bin/sh -c "nova-manage db sync" nova + ``` + + Verify whether **cell0** and **cell1** are correctly registered: + + ```shell + su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova + ``` + + Check whether VM hardware acceleration (x86 architecture) is supported: + + ```shell + $ egrep -c '(vmx|svm)' /proc/cpuinfo + ``` + + If the returned value is **0**, hardware acceleration is not supported. You need to configure libvirt to use QEMU instead of KVM. **Notes:** For an ARM64 server, set `cpu_mode` to `custom`, `cpu_model` to `cortex-a72`. + + ```ini + # vim /etc/nova/nova.conf + [libvirt] + # ... + virt_type = qemu + cpu_mode = custom + cpu_model = cortex-a72 + ``` + + If the returned value is **1** or a larger value, hardware acceleration is supported, and no extra configuration is required. + + ***Notice*** + + **If the ARM64 structure is used, run the following command on the `compute` node:** + + ```shell + mkdir -p /usr/share/AAVMF + ln -s /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw \ + /usr/share/AAVMF/AAVMF_CODE.fd + ln -s /usr/share/edk2/aarch64/vars-template-pflash.raw \ + /usr/share/AAVMF/AAVMF_VARS.fd + chown nova:nova /usr/share/AAVMF -R + + vim /etc/libvirt/qemu.conf + + nvram = ["/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd", + "/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2/aarch64/vars-template-pflash.raw" + ] + ``` + + Start the computing service and its dependencies, and enable the service to start automatically upon system boot. + + ```shell + $ systemctl enable \ + openstack-nova-api.service \ + openstack-nova-scheduler.service \ + openstack-nova-conductor.service \ + openstack-nova-novncproxy.service + $ systemctl start \ + openstack-nova-api.service \ + openstack-nova-scheduler.service \ + openstack-nova-conductor.service \ + openstack-nova-novncproxy.service + ``` + + ```bash + $ systemctl enable libvirtd.service openstack-nova-compute.service + $ systemctl start libvirtd.service openstack-nova-compute.service + ``` + + Add the compute nodes to the **cell** database: + + Check whether the compute node exists: + + ```bash + $ . admin-openrc + $ openstack compute service list --service nova-compute + ``` + + Register a compute node: + + ```bash + $ su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova + ``` + +3. Perform verification. + + ```shell + $ . admin-openrc + ``` + + List service components to verify that each process is successfully started and registered. + + ```shell + $ openstack compute service list + ``` + + List the API endpoints in the identity service and verify the connection to the identity service. + + ```shell + $ openstack catalog list + ``` + + List the images in the image service and verify the connections: + + ```shell + $ openstack image list + ``` + + Check whether the cells and placement APIs are running properly and whether other prerequisites are met. + + ```shell + $ nova-status upgrade check + ``` + +### Installing Neutron + +1. Create a database, service credentials, and API endpoints. + + Create a database. + + Access the database as the **root** user, create the **neutron** database, and grant permissions. + + ```shell + $ mysql -u root -p + ``` + + ```sql + MariaDB [(none)]> CREATE DATABASE neutron; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \ + IDENTIFIED BY 'NEUTRON_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \ + IDENTIFIED BY 'NEUTRON_DBPASS'; + MariaDB [(none)]> exit + ``` + + Replace **NEUTRON\_DBPASS** with the password of the **neutron** database. + + ```shell + $ . admin-openrc + ``` + + Run the following commands to create the **neutron** service credential, create the **neutron** user, and add the **admin** role to the **neutron** user: + + Create the **neutron** service credential. + + ```shell + $ openstack user create --domain default --password-prompt neutron + $ openstack role add --project service --user neutron admin + $ openstack service create --name neutron --description "OpenStack Networking" network + ``` + + Create API endpoints of the network services. + + ```shell + $ openstack endpoint create --region RegionOne network public http://controller:9696 + $ openstack endpoint create --region RegionOne network internal http://controller:9696 + $ openstack endpoint create --region RegionOne network admin http://controller:9696 + ``` + +2. Install and configure the self-service network. + + Install the software package: + + ```shell + $ yum install openstack-neutron openstack-neutron-ml2 \ + openstack-neutron-linuxbridge ebtables ipset + ``` + + Configure Neutron: + + Edit the **/etc/neutron/neutron.conf** file: + + In the **\[database]** section, configure the database entry. + + In the **\[default]** section, enable the ML2 and router plug-ins. Allow IP address overlapping, and configure the RabbitMQ message queue entry. + + In the **\[default]** and **\[keystone]** sections, configure the identity service entry. + + In the **\[default]** and **\[nova]** sections, enable the network to notify the change of the computing network topology. + + In the **\[oslo\_concurrency]** section, configure the lock path. + + ```ini + [database] + # ... + connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron + [DEFAULT] + # ... + core_plugin = ml2 + service_plugins = router + allow_overlapping_ips = true + transport_url = rabbit://openstack:RABBIT_PASS@controller + auth_strategy = keystone + notify_nova_on_port_status_changes = true + notify_nova_on_port_data_changes = true + [keystone_authtoken] + # ... + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = neutron + password = NEUTRON_PASS + [nova] + # ... + auth_url = http://controller:5000 + auth_type = password + project_domain_name = Default + user_domain_name = Default + region_name = RegionOne + project_name = service + username = nova + password = NOVA_PASS + [oslo_concurrency] + # ... + lock_path = /var/lib/neutron/tmp + ``` + + Replace **NEUTRON\_DBPASS** with the password of the **neutron** database. + + Replace **RABBIT\_PASS** with the password of the **openstack** user in RabbitMQ. + + Replace **NEUTRON\_PASS** with the password of the **neutron** user. + + Replace **NOVA\_PASS** with the password of the **nova** user. + + Configure the ML2 plug-in. + + Edit the **/etc/neutron/plugins/ml2/ml2\_conf.ini** file. + + In the **\[ml2]** section, enable the flat, VLAN, and VXLAN networks, enable the bridge and layer-2 population mechanism, and enable the port security extension driver. + + In the **\[ml2\_type\_flat]** section, configure the flat network as the provider virtual network. + + In the **\[ml2\_type\_vxlan]** section, configure the VXLAN network identifier range. + + In the **\[securitygroup]** section, set **ipset**. + + ```ini + # vim /etc/neutron/plugins/ml2/ml2_conf.ini + [ml2] + # ... + type_drivers = flat,vlan,vxlan + tenant_network_types = vxlan + mechanism_drivers = linuxbridge,l2population + extension_drivers = port_security + [ml2_type_flat] + # ... + flat_networks = provider + [ml2_type_vxlan] + # ... + vni_ranges = 1:1000 + [securitygroup] + # ... + enable_ipset = true + ``` + + Configure the Linux bridge agent: + + Edit the **/etc/neutron/plugins/ml2/linuxbridge\_agent.ini** file: + + In the **\[linux\_bridge]** section, map the provider virtual network to the physical network API. + + In the **\[vxlan]** section, enable the VXLAN network. Configure the IP address of the physical network API that processes the coverage network, and enable layer-2 population. + + In the **\[securitygroup]** section, enable the security group and configure the **linux bridge iptables** firewall driver. + + ```ini + [linux_bridge] + physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME + [vxlan] + enable_vxlan = true + local_ip = OVERLAY_INTERFACE_IP_ADDRESS + l2_population = true + [securitygroup] + # ... + enable_security_group = true + firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver + ``` + + Replace **PROVIDER\_INTERFACE\_NAME** with the physical network API. + + Replace **OVERLAY\_INTERFACE\_IP\_ADDRESS** with the management IP address of the controller node. + + Configure the Layer 3 proxy. + + Edit the **/etc/neutron/l3\_agent.ini** file: + + In the **\[default]** section, set the API driver to **linuxbridge**. + + ```ini + [DEFAULT] + # ... + interface_driver = linuxbridge + ``` + + Configures the DHCP agent: + + Edit the **/etc/neutron/dhcp\_agent.ini** file. + + In the **\[default]** section, configure the Linux bridge API driver and Dnsmasq DHCP driver. Enable the isolated metadata. + + ```ini + [DEFAULT] + # ... + interface_driver = linuxbridge + dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq + enable_isolated_metadata = true + ``` + + Configure the metadata proxy. + + Edit the **/etc/neutron/metadata\_agent.ini** file. + + In the **\[default]**, configure the metadata host and shared secret. + + ```ini + [DEFAULT] + # ... + nova_metadata_host = controller + metadata_proxy_shared_secret = METADATA_SECRET + ``` + + Replace **METADATA\_SECRET** with a proper metadata agent secret. + +3. Configure the computing service. + + Edit the **/etc/nova/nova.conf** file. + + In the **\[neutron]** section, configure access parameters, enable the metadata proxy, and configure secret. + + ```ini + [neutron] + # ... + auth_url = http://controller:5000 + auth_type = password + project_domain_name = Default + user_domain_name = Default + region_name = RegionOne + project_name = service + username = neutron + password = NEUTRON_PASS + service_metadata_proxy = true + metadata_proxy_shared_secret = METADATA_SECRET + ``` + + Replace **NEUTRON\_PASS** with the password of the **neutron** user. + + Replace **METADATA\_SECRET** with a proper metadata agent secret. + +4. Complete the installation. + + Add the link for the configuration file: + + ```shell + $ ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini + ``` + + Synchronize the database: + + ```shell + $ su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \ + --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron + ``` + + Run the following command to restart the computing API service: + + ```shell + $ systemctl restart openstack-nova-api.service + ``` + + Start the network service and enable the service to start automatically upon system boot. + + ```shell + $ systemctl enable neutron-server.service \ + neutron-linuxbridge-agent.service neutron-dhcp-agent.service \ + neutron-metadata-agent.service + $ systemctl start neutron-server.service \ + neutron-linuxbridge-agent.service neutron-dhcp-agent.service \ + neutron-metadata-agent.service + $ systemctl enable neutron-l3-agent.service + $ systemctl start neutron-l3-agent.service + ``` + +5. Perform verification. + + Run the following command to list the neutron agents: + + ```shell + $ openstack network agent list + ``` + +### Installing Cinder + +1. Create a database, service credentials, and API endpoints. + + Create a database. + + Access the database as the **root** user. Create the **cinder** database, and grant permissions. + + ```shell + $ mysql -u root -p + MariaDB [(none)]> CREATE DATABASE cinder; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \ + IDENTIFIED BY 'CINDER_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \ + IDENTIFIED BY 'CINDER_DBPASS'; + MariaDB [(none)]> exit + ``` + + Replace **CINDER\_DBPASS** with the password for the **cinder** database. + + ```shell + $ source admin-openrc + ``` + + Create Cinder service credentials: + + Create the **cinder** user. + + Add the **admin** role to the **cinder** user. + + Create the **cinderv2** and **cinderv3** services. + + ```shell + $ openstack user create --domain default --password-prompt cinder + $ openstack role add --project service --user cinder admin + $ openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2 + $ openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3 + ``` + + Create API endpoints for the block storage service. + + ```shell + $ openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s + $ openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s + $ openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s + $ openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s + $ openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s + $ openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s + ``` + +2. Install and configure the controller node. + + Install the software package: + + ```shell + $ yum install openstack-cinder + ``` + + Configure Cinder: + + Open the `/etc/cinder/cinder.conf` file. + + In the **\[database]** section, configure the database entry. + + In the **\[DEFAULT]** section, configure the RabbitMQ message queue entry and **my\_ip**. + + In the **\[DEFAULT]** and **\[keystone\_authtoken]** sections, configure the identity service entry. + + In the **\[oslo\_concurrency]** section, configure the lock path. + + ```ini + [database] + # ... + connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder + [DEFAULT] + # ... + transport_url = rabbit://openstack:RABBIT_PASS@controller + auth_strategy = keystone + my_ip = 10.0.0.11 + [keystone_authtoken] + # ... + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = cinder + password = CINDER_PASS + [oslo_concurrency] + # ... + lock_path = /var/lib/cinder/tmp + ``` + + Replace **CINDER\_DBPASS** with the password of the **cinder** database. + + Replace **RABBIT\_PASS** with the password of the **openstack** user in RabbitMQ. + + Set **my\_ip** to the management IP address of the controller node. + + Replace **CINDER\_PASS** with the password of the **cinder** user. + + Synchronize the database: + + ```shell + $ su -s /bin/sh -c "cinder-manage db sync" cinder + ``` + + Configure the block storage for the compute nodes. + + Edit the **/etc/nova/nova.conf** file. + + ```ini + [cinder] + os_region_name = RegionOne + ``` + + Complete the installation. + + Restart the computing API service. + + ```shell + $ systemctl restart openstack-nova-api.service + ``` + + Start the block storage service. + + ```shell + $ systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service + $ systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service + ``` + +3. Install and configure the storage node (LVM). + + Install the software package: + + ```shell + $ yum install lvm2 device-mapper-persistent-data scsi-target-utils python2-keystone \ + openstack-cinder-volume + ``` + + Create the LVM physical volume **/dev/sdb**. + + ```shell + $ pvcreate /dev/sdb + ``` + + Create the LVM volume group **cinder-volumes**. + + ```shell + $ vgcreate cinder-volumes /dev/sdb + ``` + + Edit the **/etc/lvm/lvm.conf** file. + + In the **devices** section, add filtering to allow the **/dev/sdb** device to reject other devices. + + ```ini + devices { + + # ... + + filter = [ "a/sdb/", "r/.*/"] + ``` + + Open the `/etc/cinder/cinder.conf` file. + + In the **\[lvm]** section, configure the LVM backend using the LVM driver, cinder-volumes volume group, iSCSI protocol, and appropriate iSCSI services. + + In the **\[DEFAULT]** section, enable the LVM backend and configure the location of the API of the image service. + + ```ini + [lvm] + volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver + volume_group = cinder-volumes + target_protocol = iscsi + target_helper = lioadm + [DEFAULT] + # ... + enabled_backends = lvm + glance_api_servers = http://controller:9292 + ``` + + ***Notice*** + + If Cinder uses tgtadm to attach volumes, modify **/etc/tgt/tgtd.conf** to ensure that tgtd can discover the iSCSI target of the cinder-volume. + + ``` + include /var/lib/cinder/volumes/* + ``` + + Complete the installation. + + ```shell + $ systemctl enable openstack-cinder-volume.service tgtd.service iscsid.service + $ systemctl start openstack-cinder-volume.service tgtd.service iscsid.service + ``` + +4. Install and configure a storage node (ceph RBD). + + Install the software package: + + ```shell + $ yum install ceph-common python2-rados python2-rbd python2-keystone openstack-cinder-volume + ``` + + In the **\[DEFAULT]** section, enable the LVM backend and configure the location of the API of the image service. + + ```ini + [DEFAULT] + enabled_backends = ceph-rbd + ``` + + Add the ceph rbd configuration. The configuration block name is the same as that in **enabled\_backends**. + + ```ini + [ceph-rbd] + glance_api_version = 2 + rados_connect_timeout = -1 + rbd_ceph_conf = /etc/ceph/ceph.conf + rbd_flatten_volume_from_snapshot = False + rbd_max_clone_depth = 5 + rbd_pool = # RBD storage pool name. + rbd_secret_uuid = # Randomly generate a secret UUID. + rbd_store_chunk_size = 4 + rbd_user = + volume_backend_name = ceph-rbd + volume_driver = cinder.volume.drivers.rbd.RBDDriver + ``` + + Configure the ceph client on the storage node. Ensure that the **/etc/ceph/** directory contains the ceph cluster access configuration, including **ceph.conf** and **keyring**. + + ```shell + [root@openeuler ~]# ll /etc/ceph + -rw-r--r-- 1 root root 82 Jun 16 17:11 ceph.client..keyring + -rw-r--r-- 1 root root 1.5K Jun 16 17:11 ceph.conf + -rw-r--r-- 1 root root 92 Jun 16 17:11 rbdmap + ``` + + Check whether the ceph cluster is accessible on the storage node. + + ```shell + [root@openeuler ~]# ceph --user cinder -s + cluster: + id: b7b2fac6-420f-4ec1-aea2-4862d29b4059 + health: HEALTH_OK + + services: + mon: 3 daemons, quorum VIRT01,VIRT02,VIRT03 + mgr: VIRT03(active), standbys: VIRT02, VIRT01 + mds: cephfs_virt-1/1/1 up {0=VIRT03=up:active}, 2 up:standby + osd: 15 osds: 15 up, 15 in + + data: + pools: 7 pools, 1416 pgs + objects: 5.41M objects, 19.8TiB + usage: 49.3TiB used, 59.9TiB / 109TiB avail + pgs: 1414 active + + io: + client: 2.73MiB/s rd, 22.4MiB/s wr, 3.21kop/s rd, 1.19kop/s wr + ``` + + Start the service. + + ```shell + $ systemctl enable openstack-cinder-volume.service + $ systemctl start openstack-cinder-volume.service + ``` + +5. Install and configure the backup service. + + Edit the **/etc/cinder/cinder.conf** file. + + In the **\[DEFAULT]** section, configure the backup options. + + ```ini + [DEFAULT] + # ... + # Note: openEuler 21.03 does not provide the OpenStack Swift software package. You need to install it by yourself, or use another backup backend, such as NFS. The NFS has been tested and can be used properly. + backup_driver = cinder.backup.drivers.swift.SwiftBackupDriver + backup_swift_url = SWIFT_URL + ``` + + Replace **SWIFT\_URL** with the URL of the object storage service. The URL can be found through the object storage API endpoint. + + ```shell + $ openstack catalog show object-store + ``` + + Complete the installation. + + ```shell + $ systemctl enable openstack-cinder-backup.service + $ systemctl start openstack-cinder-backup.service + ``` + +6. Perform verification. + + List service components and verify that each step is successful. + + ```shell + $ source admin-openrc + $ openstack volume service list + ``` + + Note: Currently, the Swift component is not supported. If possible, you can configure the interconnection with Ceph. + +### Installing Horizon + +1. Installing Software Packages + + ```shell + $ yum install openstack-dashboard + ``` + +2. Open the `/usr/share/openstack-dashboard/openstack_dashboard/local/local_settings.py` file. + + Modify the variables. + + ```ini + ALLOWED_HOSTS = ['*', ] + OPENSTACK_HOST = "controller" + OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST + OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True + SESSION_ENGINE = 'django.contrib.sessions.backends.cache' + CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + 'LOCATION': 'controller:11211', + } + } + ``` + + Add the variables. + + ```ini + OPENSTACK_API_VERSIONS = { + "identity": 3, + "image": 2, + "volume": 3, + } + WEBROOT = "/dashboard/" + COMPRESS_OFFLINE = True + OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default" + OPENSTACK_KEYSTONE_DEFAULT_ROLE = "admin" + LOGIN_URL = '/dashboard/auth/login/' + LOGOUT_URL = '/dashboard/auth/logout/' + ``` + +3. Modify the **/etc/httpd/conf.d/openstack-dashboard.conf** file. + + ```xml + WSGIDaemonProcess dashboard + WSGIProcessGroup dashboard + WSGISocketPrefix run/wsgi + WSGIApplicationGroup %{GLOBAL} + + WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi + Alias /dashboard/static /usr/share/openstack-dashboard/static + + + Options All + AllowOverride All + Require all granted + + + + Options All + AllowOverride All + Require all granted + + ``` + +4. Run the following command in the **/usr/share/openstack-dashboard** directory: + + ```shell + $ ./manage.py compress + ``` + +5. Restart the httpd service. + + ```shell + $ systemctl restart httpd + ``` + +6. Open a browser and enter **http://***\* in the address box to log in to Horizon. + +### Installing Tempest + +Tempest is an integration test service of OpenStack. You are advised to use Tempest if you need to fully and automatically test the functions of the installed OpenStack environment. Otherwise, the installation is not required. + +1. Installing Tempest + + ```shell + $ yum install openstack-tempest + ``` + +2. Initializing the Directories + + ```shell + $ tempest init mytest + ``` + +3. Modify the configuration file. + + ```shell + $ cd mytest + $ vi etc/tempest.conf + ``` + + Information about the current OpenStack environment needs to be configured in the **tempest.conf** file. For details, see the [Sample Configuration File](https://docs.openstack.org/tempest/latest/sampleconf.html). + +4. Performing the Test + + ```shell + $ tempest run + ``` + +### Installing Ironic + +Ironic is the bare metal service of OpenStack. You are advised to use Ironic if you need to deploy a bare metal server. Otherwise, the installation is not required. + +1. Set the database. + + The bare metal service stores information in the database. Create an Ironic database that can be accessed by the **ironic** user and replace **Ironic\_DBPASSWORD** with a proper password. + + ```shell + $ mysql -u root -p + ``` + + ```sql + MariaDB [(none)]> CREATE DATABASE ironic CHARACTER SET utf8; + + MariaDB [(none)]> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'localhost' \ + IDENTIFIED BY 'IRONIC_DBPASSWORD'; + + MariaDB [(none)]> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'%' \ + IDENTIFIED BY 'IRONIC_DBPASSWORD'; + ``` + +2. Install and configure components. + + ##### Create the service user and perform verification. + + 1\. Create the bare metal service users. + + ```shell + $ openstack user create --password IRONIC_PASSWORD \ + --email ironic@example.com ironic + $ openstack role add --project service --user ironic admin + $ openstack service create --name ironic --description \ + "Ironic baremetal provisioning service" baremetal + + $ openstack service create --name ironic-inspector --description "Ironic inspector baremetal provisioning service" baremetal-introspection + $ openstack user create --password IRONIC_INSPECTOR_PASSWORD --email ironic_inspector@example.com ironic_inspector + $ openstack role add --project service --user ironic-inspector admin + ``` + + 2\. Create the bare metal service access portals. + + ```shell + $ openstack endpoint create --region RegionOne baremetal admin http://$IRONIC_NODE:6385 + $ openstack endpoint create --region RegionOne baremetal public http://$IRONIC_NODE:6385 + $ openstack endpoint create --region RegionOne baremetal internal http://$IRONIC_NODE:6385 + $ openstack endpoint create --region RegionOne baremetal-introspection internal http://$IRONIC_NODE:5050/v1 + $ openstack endpoint create --region RegionOne baremetal-introspection public http://$IRONIC_NODE:5050/v1 + $ openstack endpoint create --region RegionOne baremetal-introspection admin http://$IRONIC_NODE:5050/v1 + ``` + + ##### Configuring the ironic-api Service + + Configuration file path: **/etc/ironic/ironic.conf** + + 1\. Set **connection** to the database location, as shown in the following example. Replace **IRONIC\_DBPASSWORD** with the password of the **ironic** user and **DB\_IP** with the IP address of the database server. + + ```ini + [database] + + # The SQLAlchemy connection string used to connect to the + # database (string value) + + connection = mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic + ``` + + 2\. Configure the ironic-api service to use the RabbitMQ message broker and replace **RPC\_***\** with the address and credential of RabbitMQ. + + ```ini + [DEFAULT] + + # A URL representing the messaging driver to use and its full + # configuration. (string value) + + transport_url = rabbit://RPC_USER:RPC_PASSWORD@RPC_HOST:RPC_PORT/ + ``` + + You can also use JSON-RPC to replace RabbitMQ. + + 3\. Configure the credential for the ironic-api service to use the identity service. Replace **PUBLIC\_IDENTITY\_IP** with the public IP address of the identity server, and replace **PRIVATE\_IDENTITY\_IP** with the private IP address of the identity server. Replace **Ironic\_PASSWORD** with the password of user **ironic** in the identity service. + + ```ini + [DEFAULT] + + # Authentication strategy used by ironic-api: one of + # "keystone" or "noauth". "noauth" should not be used in a + # production environment because all authentication will be + # disabled. (string value) + + auth_strategy=keystone + + [keystone_authtoken] + # Authentication type to load (string value) + auth_type=password + # Complete public Identity API endpoint (string value) + www_authenticate_uri=http://PUBLIC_IDENTITY_IP:5000 + # Complete admin Identity API endpoint. (string value) + auth_url=http://PRIVATE_IDENTITY_IP:5000 + # Service username. (string value) + username=ironic + # Service account password. (string value) + password=IRONIC_PASSWORD + # Service tenant name. (string value) + project_name=service + # Domain name containing project (string value) + project_domain_name=Default + # User's domain name (string value) + user_domain_name=Default + ``` + + 4\. Create a database table for the bare metal service. + + ```shell + $ ironic-dbsync --config-file /etc/ironic/ironic.conf create_schema + ``` + + 5\. Restart the ironic-api service. + + ```shell + $ systemctl restart openstack-ironic-api + ``` + + ##### Configuring the ironic-conductor Service + + 1\. Replace **HOST\_IP** with the IP address of the conductor host. + + ```ini + [DEFAULT] + + # IP address of this host. If unset, will determine the IP + # programmatically. If unable to do so, will use "127.0.0.1". + # (string value) + + my_ip=HOST_IP + ``` + + 2\. Configure the database location. The configuration of ironic-conductor must be the same as that of ironic-api. Replace **IRONIC\_DBPASSWORD** with the password of the **ironic** user and **DB\_IP** with the IP address of the database server. + + ```ini + [database] + + # The SQLAlchemy connection string to use to connect to the + # database. (string value) + + connection = mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic + ``` + + 3\. Configure the ironic-api service to use the RabbitMQ. The configuration of ironic-conductor service must be the same as that of ironic-api. Replace **RPC\_***\** with the address and credential of RabbitMQ. + + ```ini + [DEFAULT] + + # A URL representing the messaging driver to use and its full + # configuration. (string value) + + transport_url = rabbit://RPC_USER:RPC_PASSWORD@RPC_HOST:RPC_PORT/ + ``` + + You can also use JSON-RPC to replace RabbitMQ. + + 4\. Configure credentials to access other OpenStack services. + + To communicate with other OpenStack services, the service user need to use the OpenStack Identity service for authentication when the bare metal service requests other services. The credentials for these users must be configured in each configuration file associated with the respective service. + + **\[neutron]** - Access the OpenStack network service. +**\[glance]** - Access the OpenStack image service. +**\[swift]** - Access the OpenStack object storage service. +**\[cinder]** - Access the OpenStack block storage service. +**\[inspector]** - Access the introspection service of OpenStack bare metal service. +**\[service\_catalog]** - A special item used to store the credentials used by the bare metal service to discover its own API URL endpoints registered in the OpenStack identity service catalog. + + For simplicity, you can use the same service user for all services. For backward compatibility, this user must be the same as that configured in **\[keystone\_authtoken]** of the ironic-api service. This is not mandatory. You can create and configure different service users for each service. + + In the following example, the configuration for the authentication information for users to access the OpenStack network service is: + + Network services are deployed in the identity service domain named "RegionOne". Only public endpoint APIs are registered in the service catalog. + + A specific CA SSL certificate is used for HTTPS connection when requested. + + The same service user with ironic-api service is configured. + + The dynamic password authentication plug-in discovers the appropriate version of the authentication service API based on other options. + + ```ini + [neutron] + + # Authentication type to load (string value) + auth_type = password + # Authentication URL (string value) + auth_url=https://IDENTITY_IP:5000/ + # Username (string value) + username=ironic + # User's password (string value) + password=IRONIC_PASSWORD + # Project name to scope to (string value) + project_name=service + # Domain ID containing project (string value) + project_domain_id=default + # User's domain id (string value) + user_domain_id=default + # PEM encoded Certificate Authority to use when verifying + # HTTPs connections. (string value) + cafile=/opt/stack/data/ca-bundle.pem + # The default region_name for endpoint URL discovery. (string + # value) + region_name = RegionOne + # List of interfaces, in order of preference, for endpoint + # URL. (list value) + valid_interfaces=public + ``` + + By default, to communicate with other services, the bare metal service attempts to discover the appropriate endpoint of the service through the service catalog of the authentication service. If you want to use a different endpoint for a specific service, specify the **endpoint\_override** option in the bare metal service configuration file. + + ```ini + [neutron] + # ... + endpoint_override = + ``` + + 5\. Configure allowed drivers and hardware types. + + Configure **enabled\_hardware\_types** to set the hardware types allowed by the ironic-conductor service. + + ```ini + [DEFAULT] + enabled_hardware_types = ipmi + ``` + + Configure the hardware API. + + ```ini + enabled_boot_interfaces = pxe + enabled_deploy_interfaces = direct,iscsi + enabled_inspect_interfaces = inspector + enabled_management_interfaces = ipmitool + enabled_power_interfaces = ipmitool + ``` + + Configure API default values. + + ```ini + [DEFAULT] + default_deploy_interface = direct + default_network_interface = neutron + ``` + + If any driver that uses Direct Deploy is enabled, you must install and configure the Swift backend of the image service. The Ceph object gateway (RADOS gateway) is also supported as a backend for the image service. + + 6\. Restart the ironic-conductor service. + + ```shell + $ systemctl restart openstack-ironic-conductor + ``` + + ##### Configure the ironic-inspector service. + + Configuration file path: `/etc/ironic-inspector/inspector.conf`. + + 1\. Create a database. + + ```shell + $ mysql -u root -p + ``` + + ```sql + MariaDB [(none)]> CREATE DATABASE ironic_inspector CHARACTER SET utf8; + + MariaDB [(none)]> GRANT ALL PRIVILEGES ON ironic_inspector.* TO 'ironic_inspector'@'localhost' \ IDENTIFIED BY 'IRONIC_INSPECTOR_DBPASSWORD'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON ironic_inspector.* TO 'ironic_inspector'@'%' \ + IDENTIFIED BY 'IRONIC_INSPECTOR_DBPASSWORD'; + ``` + + 2\. Set **connection** to the database location, as shown in the following example. Replace **IRONIC\_INSPECTOR\_DBPASSWORD** with the password of the **ironic\_inspector** user and **DB\_IP** with the IP address of the database server. + + ```ini + [database] + backend = sqlalchemy + connection = mysql+pymysql://ironic_inspector:IRONIC_INSPECTOR_DBPASSWORD@DB_IP/ironic_inspector + ``` + + 3\. Configure the communication address of the message queue. + + ```ini + [DEFAULT] + transport_url = rabbit://RPC_USER:RPC_PASSWORD@RPC_HOST:RPC_PORT/ + ``` + + 4\. Configure Keystone authentication. + + ```ini + [DEFAULT] + + auth_strategy = keystone + + [ironic] + + api_endpoint = http://IRONIC_API_HOST_ADDRRESS:6385 + auth_type = password + auth_url = http://PUBLIC_IDENTITY_IP:5000 + auth_strategy = keystone + ironic_url = http://IRONIC_API_HOST_ADDRRESS:6385 + os_region = RegionOne + project_name = service + project_domain_name = Default + user_domain_name = Default + username = IRONIC_SERVICE_USER_NAME + password = IRONIC_SERVICE_USER_PASSWORD + ``` + + 5\. Configure the ironic inspector dnsmasq service. + + ```ini + #Configuration file path: /etc/ironic-inspector/dnsmasq.conf + port=0 + interface=enp3s0 #Replace it with the actual listening network API. + dhcp-range=172.20.19.100,172.20.19.110 #Replace it with the actual DHCP address range. + bind-interfaces + enable-tftp + + dhcp-match=set:efi,option:client-arch,7 + dhcp-match=set:efi,option:client-arch,9 + dhcp-match=aarch64, option:client-arch,11 + dhcp-boot=tag:aarch64,grubaa64.efi + dhcp-boot=tag:!aarch64,tag:efi,grubx64.efi + dhcp-boot=tag:!aarch64,tag:!efi,pxelinux.0 + + tftp-root=/tftpboot #Replace it with the actual tftpboot directory. + log-facility=/var/log/dnsmasq.log + ``` + + 6\. Enable the services. + + ```shell + $ systemctl enable --now openstack-ironic-inspector.service + $ systemctl enable --now openstack-ironic-inspector-dnsmasq.service + ``` + +3. Create a deploy + + Currently, ramdisk images can be created using ironic python agent builder. This section describes how to use this tool to build deploy images used by ironic. + + ##### Installing ironic-python-agent-builder + + 2. Install the tool. + + ```shell + $ pip install ironic-python-agent-builder + ``` + + 3. Modify the Python interpreter in the following file: + + ```shell + $ /usr/bin/yum /usr/libexec/urlgrabber-ext-down + ``` + + 4. Install other necessary tools. + + ```shell + $ yum install git + ``` + + `DIB` depends on `semanage`. Before creating an image, check whether the `semanage --help` command is available. If no such command is displayed, it. + + ```shell + #Query the package to be installed. + [root@localhost ~]# yum provides /usr/sbin/semanage + Loaded plug-in: fastestmirror + Loading mirror speeds from cached hostfile + * base: mirror.vcu.edu + * extras: mirror.vcu.edu + * updates: mirror.math.princeton.edu + policycoreutils-python-2.5-34.el7.aarch64 : SELinux policy core python utilities + Source: base + Matching source: + File name: /usr/sbin/semanage + #Install. + [root@localhost ~]# yum install policycoreutils-python + ``` + + ##### Creating the Image + + If the `aarch64` architecture is used, add the following information: + + ```shell + $ export ARCH=aarch64 + ``` + + ###### Common Image + + Basic usage: + + ```shell + usage: ironic-python-agent-builder [-h] [-r RELEASE] [-o OUTPUT] [-e ELEMENT] + [-b BRANCH] [-v] [--extra-args EXTRA_ARGS] + distribution + + positional arguments: + distribution Distribution to use + + optional arguments: + -h, --help show this help message and exit + -r RELEASE, --release RELEASE + Distribution release to use + -o OUTPUT, --output OUTPUT + Output base file name + -e ELEMENT, --element ELEMENT + Additional DIB element to use + -b BRANCH, --branch BRANCH + If set, override the branch that is used for ironic- + python-agent and requirements + -v, --verbose Enable verbose logging in diskimage-builder + --extra-args EXTRA_ARGS + Extra arguments to pass to diskimage-builder + ``` + + Examples: + + ```shell + $ ironic-python-agent-builder centos -o /mnt/ironic-agent-ssh -b origin/stable/rocky + ``` + + ###### Allowing SSH Login + + Initialize environment variables and create an image. + + ```shell + $ export DIB_DEV_USER_USERNAME=ipa \ + $ export DIB_DEV_USER_PWDLESS_SUDO=yes \ + $ export DIB_DEV_USER_PASSWORD='123' + $ ironic-python-agent-builder centos -o /mnt/ironic-agent-ssh -b origin/stable/rocky -e selinux-permissive -e devuser + ``` + + ###### Specifying the Code Repositories + + Initialize the corresponding environment variables and create an image. + + ```ini + #Specify the repository address and version. + DIB_REPOLOCATION_ironic_python_agent=git@172.20.2.149:liuzz/ironic-python-agent.git + DIB_REPOREF_ironic_python_agent=origin/develop + + #Clone code directly from Gerrit. + DIB_REPOLOCATION_ironic_python_agent=https://review.opendev.org/openstack/ironic-python-agent + DIB_REPOREF_ironic_python_agent=refs/changes/43/701043/1 + ``` + + For details, see [source-repositories](https://docs.openstack.org/diskimage-builder/latest/elements/source-repositories/README.html). + + The verification of the specified repository address and version is successful. + +### Installing Kolla + +Kolla provides container-based deployment for OpenStack services in the production environment. The Kolla and Kolla-ansible services are introduced in openEuler 20.03 LTS SP2. + +The installation of Kolla is simple. You only need to install the corresponding RPM package. + +```shell +$ yum install openstack-kolla openstack-kolla-ansible +``` + +After the installation, you can use commands including `kolla-ansible`, `kolla-build`, `kolla-genpwd` and `kolla-mergepwd`. + +### Installing Trove + +Trove is a database service provided by OpenStack. You are advised to use Trove if you use the database service provided by OpenStack. Otherwise, the installation is not required. + +1. Set the database. + + The database service stores information in the database. Create a **trove** user to access the **trove** database. Replace **TROVE\_DBPASSWORD** with the corresponding password. + + ```shell + $ mysql -u root -p + ``` + + ```sql + MariaDB [(none)]> CREATE DATABASE trove CHARACTER SET utf8; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'localhost' \ + IDENTIFIED BY 'TROVE_DBPASSWORD'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'%' \ + IDENTIFIED BY 'TROVE_DBPASSWORD'; + ``` + +2. Create the service user and perform verification. + + 1\. Create a Trove service user. + + ```shell + $ openstack user create --password TROVE_PASSWORD \ + --email trove@example.com trove + $ openstack role add --project service --user trove admin + $ openstack service create --name trove + --description "Database service" database + ``` + + **Note:** Replace `TROVE_PASSWORD` with the password of the `trove` user. + + 2\. Create the database service access . + + ```shell + $ openstack endpoint create --region RegionOne database public http://$TROVE_NODE:8779/v1.0/%\(tenant_id\)s + $ openstack endpoint create --region RegionOne database internal http://$TROVE_NODE:8779/v1.0/%\(tenant_id\)s + $ openstack endpoint create --region RegionOne database admin http://$TROVE_NODE:8779/v1.0/%\(tenant_id\)s + ``` + + **Note:** Replace `$TROVE_NODE` with the API service deployment node of the Trove. + +3. Install and configure Trove components. + + 1\. Install the Trove package. + + ```shell + $ yum install openstack-trove python-troveclient + ``` + + 2\. Configure `/etc/trove/trove.conf`. + + ```ini + [DEFAULT] + bind_host=TROVE_NODE_IP + log_dir = /var/log/trove + + auth_strategy = keystone + # Config option for showing the IP address that nova doles out + add_addresses = True + network_label_regex = ^NETWORK_LABEL$ + api_paste_config = /etc/trove/api-paste.ini + + trove_auth_url = http://controller:35357/v3/ + nova_compute_url = http://controller:8774/v2 + cinder_url = http://controller:8776/v1 + + nova_proxy_admin_user = admin + nova_proxy_admin_pass = ADMIN_PASS + nova_proxy_admin_tenant_name = service + taskmanager_manager = trove.taskmanager.manager.Manager + use_nova_server_config_drive = True + + # Set these if using Neutron Networking + network_driver=trove.network.neutron.NeutronDriver + network_label_regex=.* + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + + [database] + connection = mysql+pymysql://trove:TROVE_DBPASS@controller/trove + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000/v3/ + auth_url=http://controller:35357/v3/ + #auth_uri = http://controller/identity + #auth_url = http://controller/identity_admin + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = trove + password = TROVE_PASS + + ``` + + **Note:** + + - Set `bind_host` of the `[Default]` group to the IP address of the Trove node. + - `nova_compute_url` and `cinder_url` are the endpoints created in Keystone by Nova and Cinder. + - `nova_proxy_XXX` shows the information about a user who can access the Nova service. In the preceding example, the `admin` user is used as an example. + - `transport_url` is the connection information for `RabbitMQ`. Replace `RABBIT_PASS` with the RabbitMQ password. + - The `connection` in the `[database]` group is the information about the database created for Trove in MySQL. + - Replace `TROVE_PASS` of the Trove user information with the password of the actual Trove user. + + 3\. Configure `/etc/trove/trove-taskmanager.conf`. + + ```ini + [DEFAULT] + log_dir = /var/log/trove + trove_auth_url = http://controller/identity/v2.0 + nova_compute_url = http://controller:8774/v2 + cinder_url = http://controller:8776/v1 + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + + [database] + connection = mysql+pymysql://trove:TROVE_DBPASS@controller/trove + ``` + + **Note:** Refer to the configuration of `trove.conf`. +4. Configure `/etc/trove/trove-conductor.conf`. + + ```ini + [DEFAULT] + log_dir = /var/log/trove + trove_auth_url = http://controller/identity/v2.0 + nova_compute_url = http://controller:8774/v2 + cinder_url = http://controller:8776/v1 + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + + [database] + connection = mysql+pymysql://trove:trove@controller/trove + ``` + + **Note:** Refer to the configuration of `trove.conf`. + + 5\. Configure `/etc/trove/trove-guestagent.conf`. + + ```ini + [DEFAULT] + rabbit_host = controller + rabbit_password = RABBIT_PASS + nova_proxy_admin_user = admin + nova_proxy_admin_pass = ADMIN_PASS + nova_proxy_admin_tenant_name = service + trove_auth_url = http://controller/identity_admin/v2.0 + ``` + + **Note:** `guestagent` is an independent component of Trove and needs to be built into the VM image created by the Trove through Nova. After a database instance is created, the guest agent process is started to report heartbeat messages to the Trove through the message queue (RabbitMQ). Therefore, you need to configure the RabbitMQ user name and password. + + 6\. Generate `Trove` database table. + + ```shell + $ su -s /bin/sh -c "trove-manage db_sync" trove + ``` + +4. Complete the installation and configuration. +1\. Configure the automatic startup of the Trove service. + + ```shell + $ systemctl enable openstack-trove-api.service \ + openstack-trove-taskmanager.service \ + openstack-trove-conductor.service + ``` + + 2\. Start the service. + + ```shell + $ systemctl start openstack-trove-api.service \ + openstack-trove-taskmanager.service \ + openstack-trove-conductor.service + ``` \ No newline at end of file diff --git a/themes/project/layouts/partials/docs/inject/head.html b/docs/en/docs/thirdparty_migration/figures/.keep similarity index 100% rename from themes/project/layouts/partials/docs/inject/head.html rename to docs/en/docs/thirdparty_migration/figures/.keep diff --git a/docs/en/docs/thirdparty_migration/figures/calicotag.png b/docs/en/docs/thirdparty_migration/figures/calicotag.png new file mode 100644 index 0000000000000000000000000000000000000000..3563a3e692ca223d5f13f1d16338ca5cfaac79a5 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/calicotag.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/clusteradd.png b/docs/en/docs/thirdparty_migration/figures/clusteradd.png new file mode 100644 index 0000000000000000000000000000000000000000..b25de17014deb022c1bc9ab18246c0b51bdff942 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/clusteradd.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/configmaster.png b/docs/en/docs/thirdparty_migration/figures/configmaster.png new file mode 100644 index 0000000000000000000000000000000000000000..f545b04d33e4e4e823c213cf997c44ec0c548b8b Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/configmaster.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/createuser.png b/docs/en/docs/thirdparty_migration/figures/createuser.png new file mode 100644 index 0000000000000000000000000000000000000000..9964a86c0cf16073fc790dd5fae724883b612368 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/createuser.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/downloaddocker.png b/docs/en/docs/thirdparty_migration/figures/downloaddocker.png new file mode 100644 index 0000000000000000000000000000000000000000..2e86a5b102c3641f753bfd367e215b1146901e53 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/downloaddocker.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/extend1.png b/docs/en/docs/thirdparty_migration/figures/extend1.png new file mode 100644 index 0000000000000000000000000000000000000000..8bdd8e0b1ef60145ea16be676e2f70b9068804fb Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/extend1.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/faq1.png b/docs/en/docs/thirdparty_migration/figures/faq1.png new file mode 100644 index 0000000000000000000000000000000000000000..6856b9d37975bf518c2aeb144d6bc54ec1a29bec Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/faq1.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/host_env1.png b/docs/en/docs/thirdparty_migration/figures/host_env1.png new file mode 100644 index 0000000000000000000000000000000000000000..60754da6d76bc817f6dbb05b30ac1749798f584b Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/host_env1.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/host_env10.png b/docs/en/docs/thirdparty_migration/figures/host_env10.png new file mode 100644 index 0000000000000000000000000000000000000000..16705810949ee42054d345628599dd0fde26504e Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/host_env10.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/host_env11.png b/docs/en/docs/thirdparty_migration/figures/host_env11.png new file mode 100644 index 0000000000000000000000000000000000000000..16c9a0d4bed1cfff308c9f8f5e93e98f8ba2c72c Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/host_env11.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/host_env5.png b/docs/en/docs/thirdparty_migration/figures/host_env5.png new file mode 100644 index 0000000000000000000000000000000000000000..deddc3d6af1687939d274c80307d3e2c0ee7bd6c Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/host_env5.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/host_env6.png b/docs/en/docs/thirdparty_migration/figures/host_env6.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7ca24a78979fe3346eb37793152cceaaee7145 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/host_env6.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/host_env7.png b/docs/en/docs/thirdparty_migration/figures/host_env7.png new file mode 100644 index 0000000000000000000000000000000000000000..03370058ff0a6e237f291b543195392efcc05f5d Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/host_env7.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/host_env8.png b/docs/en/docs/thirdparty_migration/figures/host_env8.png new file mode 100644 index 0000000000000000000000000000000000000000..e797f91df999dc4fcf81f4f96814573abf708494 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/host_env8.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/host_env9.png b/docs/en/docs/thirdparty_migration/figures/host_env9.png new file mode 100644 index 0000000000000000000000000000000000000000..aa848dfd00347b2e6d3385d6bcb372c49dc0928e Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/host_env9.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/install1.png b/docs/en/docs/thirdparty_migration/figures/install1.png new file mode 100644 index 0000000000000000000000000000000000000000..a01325bb62e2e2f874d6110df8a19dea197b69e7 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/install1.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/installarm.png b/docs/en/docs/thirdparty_migration/figures/installarm.png new file mode 100644 index 0000000000000000000000000000000000000000..d400c62147abe8c5c2b7f35e317e757d8aa85f97 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/installarm.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/installx86.png b/docs/en/docs/thirdparty_migration/figures/installx86.png new file mode 100644 index 0000000000000000000000000000000000000000..3547bcf70e1b17574006e80be3578daf88344ff0 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/installx86.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/modify_timeout_value.png b/docs/en/docs/thirdparty_migration/figures/modify_timeout_value.png new file mode 100644 index 0000000000000000000000000000000000000000..690a5252fe1c675cb4766c93b5756f47c8e7e636 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/modify_timeout_value.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/run1.png b/docs/en/docs/thirdparty_migration/figures/run1.png new file mode 100644 index 0000000000000000000000000000000000000000..1c653188ef2d6874a07a5dc185139339dc502dbc Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/run1.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/run2.png b/docs/en/docs/thirdparty_migration/figures/run2.png new file mode 100644 index 0000000000000000000000000000000000000000..7d17f2d56c7adf3ccc9ef7a5e53da636561d8795 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/run2.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/run3.png b/docs/en/docs/thirdparty_migration/figures/run3.png new file mode 100644 index 0000000000000000000000000000000000000000..cc4d4fbd02e4d60017d5599b74b0fda90843353c Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/run3.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/run4.png b/docs/en/docs/thirdparty_migration/figures/run4.png new file mode 100644 index 0000000000000000000000000000000000000000..05ff12603bbabfb188f05c7f47551016b7aa110f Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/run4.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/run5.png b/docs/en/docs/thirdparty_migration/figures/run5.png new file mode 100644 index 0000000000000000000000000000000000000000..e149c3286189a4ef4cc93f7add118f43e20cc96c Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/run5.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/run6.png b/docs/en/docs/thirdparty_migration/figures/run6.png new file mode 100644 index 0000000000000000000000000000000000000000..27c9263dbf447a0199a2a8d12af1192661efa7bb Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/run6.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/stack.png b/docs/en/docs/thirdparty_migration/figures/stack.png new file mode 100644 index 0000000000000000000000000000000000000000..63edbbbaac901b154d906eaf803f31bf6fe61bbe Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/stack.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/startvm.png b/docs/en/docs/thirdparty_migration/figures/startvm.png new file mode 100644 index 0000000000000000000000000000000000000000..1254e08e85b6f515791b258e12b9ac4891cc1ffd Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/startvm.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/vmlist.png b/docs/en/docs/thirdparty_migration/figures/vmlist.png new file mode 100644 index 0000000000000000000000000000000000000000..830261f13c434327c8bb9a01cc4fb5e6988a01c2 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/vmlist.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/x86_build_fail.png b/docs/en/docs/thirdparty_migration/figures/x86_build_fail.png new file mode 100644 index 0000000000000000000000000000000000000000..2d91001fa9c76c3154fdaffa31c4b2befc4f34c0 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/x86_build_fail.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/yumarm.png b/docs/en/docs/thirdparty_migration/figures/yumarm.png new file mode 100644 index 0000000000000000000000000000000000000000..538df33bcb5134c2a3f50b12cc5097d25bab1c76 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/yumarm.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/yumx86.png b/docs/en/docs/thirdparty_migration/figures/yumx86.png new file mode 100644 index 0000000000000000000000000000000000000000..880f54f8836ad7992345e74075ff355209a08f70 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/yumx86.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296836364.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296836364.png new file mode 100644 index 0000000000000000000000000000000000000000..092be1b363b87b5890c1e825e38f8cc4a6b07980 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296836364.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296836374.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296836374.png new file mode 100644 index 0000000000000000000000000000000000000000..7b407c4ac75025d0beb65a231a30b1129776a45b Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296836374.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296837434.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296837434.png new file mode 100644 index 0000000000000000000000000000000000000000..e947112112a9dff8c3e1d7460dbf00bf2e167adb Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296837434.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296837436.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296837436.png new file mode 100644 index 0000000000000000000000000000000000000000..de9500feba2988934b130bf876a9134e65919f9c Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296837436.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838174.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838174.png new file mode 100644 index 0000000000000000000000000000000000000000..771a238544b18a196e8dc4fce484c037ece281c0 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838174.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838176.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838176.png new file mode 100644 index 0000000000000000000000000000000000000000..240395d4cf2625c2fd762b647d8d371eb3f010c7 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838176.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838182.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838182.png new file mode 100644 index 0000000000000000000000000000000000000000..983ec2e4e16e3570897ece58d3499f1e384d3c55 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838182.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838184.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838184.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea8a5003de5e5a1a6bcbf04ccfda6be3c7591e4 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838184.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838200.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838200.png new file mode 100644 index 0000000000000000000000000000000000000000..ff90e70830df6c5c5c06dadb2446e1aad6739ad6 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838200.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838202.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838202.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcf05ec51cc58c710eede1197923494c4c57f98 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838202.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838204.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838204.png new file mode 100644 index 0000000000000000000000000000000000000000..f65f87817f5c921893dac464460fe1ea714e54b8 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838204.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838206.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838206.png new file mode 100644 index 0000000000000000000000000000000000000000..5096cabacc305fec55b581432a5cd127cae84362 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838206.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838208.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838208.png new file mode 100644 index 0000000000000000000000000000000000000000..a406893b51db2081c41c91929f17429ad3072d08 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838208.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838210.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838210.png new file mode 100644 index 0000000000000000000000000000000000000000..3d51ce1a6d6b4de233a4d3c81744f64ac18aea8a Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838210.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838212.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838212.png new file mode 100644 index 0000000000000000000000000000000000000000..49c8735599f0e0633eeb046d9f0795df2d0f5870 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838212.png differ diff --git a/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838214.png b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838214.png new file mode 100644 index 0000000000000000000000000000000000000000..8efa6420b0f2c4fbf6774fe991dcd0242a8a1ea9 Binary files /dev/null and b/docs/en/docs/thirdparty_migration/figures/zh-cn_image_0296838214.png differ diff --git a/docs/en/docs/thirdparty_migration/k8sinstall.md b/docs/en/docs/thirdparty_migration/k8sinstall.md new file mode 100644 index 0000000000000000000000000000000000000000..fb17e859f971df0a7eca6dc365e7882c23c39c10 --- /dev/null +++ b/docs/en/docs/thirdparty_migration/k8sinstall.md @@ -0,0 +1,520 @@ +# Guide to Porting Kubernetes to openEuler + +- [Software Overview](#software-overview) +- [Environment Configuration](#environment-configuration) +- [System Configuration](#system-configuration) +- [Software Installation](#software-installation) +- [Software Uninstallation](#software-uninstallation) + +## Software Overview + +The Kubernetes (K8s for short) is an open source container cluster management platform that implements the automatic deployment, automatic scaling, and maintenance of container clusters. The goal of Kubernetes is to promote a mature ecosystem of components and tools to run applications more easily on the cloud. + +The Kubernetes cluster has two types of nodes: master and worker. The master node manages and controls the entire cluster. Control commands executed for the cluster are sent to the master node. The worker node is a workload node in the Kubernetes cluster. The workload on a worker node is allocated by the master node. When a worker node breaks down, the master node transfers the workload on the faulty worker node to other nodes. + +This document describes how to use two nodes to set up a Kubernetes cluster. One is the master node, and the other is the worker node. + +## Environment Configuration + +**Software Platform** + +| Software |Version Number |Installation Method | +|:--- |:---- |:---- | +| openEuler | 20.03-LTS-SP2 |ISO | +| gnu | 7.3.0 | | +| python3 | 3.7.4 | | +| bash | 5.0.11 | | + +**Required Dependency Packages** + +| Software |Version Number |Installation Method | +|:--- |:---- |:---- | +| docker-engine | 18.09.0-101 |Refer to Installing Docker and Configuring the Yum Source | +| kubelet | 1.15.10/1.18/1.16 | Refer to Installing K8s Components | +| kubeadm | 1.15.10/1.18/1.16 | Refer to Installing K8s Components | +| kubectl | 1.15.10/1.18/1.16 | Refer to Installing K8s Components | +| kubernetes-cni | 1.15.10/1.18/1.16 | Refer to Installing K8s Components | + +> ![](./public_sys-resources/icon-note.gif) **Note** +> +> This document applies to K8s 1.15.10, 1.16, and 1.18, and uses K8s 1.15.10 as an example. + +## System Configuration + +### Modifying Host Configuration + +Edit the `/etc/hosts` files of the master and worker nodes, and add the IP addresses of the master and worker nodes to the end of the files. + +``` +192.168.122.72 master +192.168.122.130 worker +``` + +### Installing Docker and Configuring the Yum Source + +1. This operation is optional. The Yum source has been configured in the officially released image. If the openEuler Yum source is not configured in the system, perform the following operations to add a repo file. The `baseurl` value uses the source address in the released version. + +* AArch64 architecture + + ``` + $ vim /etc/yum.repos.d/openEuler_aarch64.repo + ``` + + ![](./figures/yumarm.png) + +* x86 architecture + + ``` + $ vim /etc/yum.repos.d/openEuler_x86_64.repo + ``` + + ![](./figures/yumx86.png) + +2. Perform the preceding operation on the master and worker nodes, respectively. Clear the software packages and old headers in the cache and create the cache again. + + ``` + $ yum clean all + $ yum makecache + ``` + +3. Install Docker, start related services, and output the Docker status information. + + ``` + $ yum -y install docker-engine + $ systemctl daemon-reload + $ systemctl status docker + $ systemctl restart docker + $ systemctl status docker + $ systemctl enable docker + ``` + +### Disabling the Firewall and SELinux + +Due to the back-end compatibility issue of nftables, duplicate firewall rules are generated. You need to disable the firewall. To enable the container to access the file system of the host, you need to disable SELinux. + +Run the following commands on the master and worker nodes to disable the firewall and SELinux: + +``` +$ systemctl stop firewalld +$ systemctl disable firewalld +$ setenforce 0 +$ sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config +``` + +### Configuring the Kubernetes Yum Source + +1. Run the following command on the master and worker nodes to configure the Yum source of Kubernetes: + + * AArch64 architecture + + ``` + cat < /etc/yum.repos.d/kubernetes.repo + + [kubernetes] + name=Kubernetes + baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64 + enable=1 + gpgcheck=1 + repo_gpgcheck=1 + gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg + http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg + EOF + ``` + + * x86 architecture + + ``` + cat < /etc/yum.repos.d/kubernetes.repo + + [kubernetes] + name=Kubernetes + baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 + enable=1 + gpgcheck=1 + repo_gpgcheck=1 + gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg + http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg + EOF + ``` + +2. After the configuration is completed, run the following commands to clear the software packages and old headers in the cache and create the cache again: + + ``` + $ yum clean all + $ yum makecache + ``` + +### Disabling the Swap Partition + +When installing the K8s cluster, you need to disable the swap memory exchange mechanism of the Linux OS. Otherwise, the system performance and stability will be affected due to memory exchange. + +1. Run the following commands on the master and worker nodes to disable the swap partition: + + ``` + $ swapoff -a + $ cp -p /etc/fstab /etc/fstab.bak$(date '+%Y%m%d%H%M%S') + $ sed -i "s/\/dev\/mapper\/openeuler-swap/\#\/dev\/mapper\/openeuler-swap/g" /etc/fstab + ``` + +2. Run the following command to check whether the modification is successful: + + ``` + $ cat /etc/fstab + ``` + + ![](./figures/zh-cn_image_0296836364.png) + +3. Run the following command to reboot the system: + + ``` + $ reboot + ``` + +## Software Installation + +### Installing K8s Components + +Run the following command on the master and worker nodes to install the K8s components: + +``` +$ yum install -y kubelet-1.15.10 kubeadm-1.15.10 kubectl-1.15.10 kubernetes-cni-0.7.5 +``` + +### Configuring Startup Items + +1. Run the following command on the master and worker nodes to set kubelet to start upon system boot: + + ``` + $ systemctl enable kubelet + ``` + +2. Create the `/etc/sysctl.d/k8s.conf` files on the master and worker nodes and add the following content to the files: + + ``` + net.bridge.bridge-nf-call-ip6tables = 1 + net.bridge.bridge-nf-call-iptables = 1 + net.ipv4.ip_forward = 1 + vm.swappiness=0 + ``` + +3. Run the following commands on the master and worker nodes to make the modification take effect: + + ``` + $ modprobe br_netfilter + $ sysctl -p /etc/sysctl.d/k8s.conf + ``` + +### Downloading Components Using Docker + +The master and worker nodes download other components using Docker. When downloading images, you need to select the version that corresponds to the architecture. Perform the following operations on the two nodes: + +1. Run the following command to view the images required for initialization: + + ``` + $ kubeadm config images list + ``` + + ![](./figures/downloaddocker.png) + + > ![](./public_sys-resources/icon-note.gif) **Note** +The image versions required by K8s may change. Therefore, you need to check the list to select the proper Docker images to be downloaded. The following image versions are for reference only. + +2. Run the following commands to download the images from Docker Hub: + + * AArch64 architecture + + ``` + $ docker pull gcmirrors/kube-apiserver-arm64:v1.15.10 + $ docker pull gcmirrors/kube-controller-manager-arm64:v1.15.10 + $ docker pull gcmirrors/kube-scheduler-arm64:v1.15.10 + $ docker pull gcmirrors/kube-proxy-arm64:v1.15.10 + $ docker pull gcmirrors/pause-arm64:3.1 + $ docker pull gcmirrors/etcd-arm64:3.3.10 + $ docker pull coredns/coredns:1.3.1 + ``` + + * x86 architecture + + ``` + $ docker pull gcmirrors/kube-apiserver-amd64:v1.15.10 + $ docker pull gcmirrors/kube-controller-manager-amd64:v1.15.10 + $ docker pull gcmirrors/kube-scheduler-amd64:v1.15.10 + $ docker pull gcmirrors/kube-proxy-amd64:v1.15.10 + $ docker pull gcmirrors/pause-amd64:3.1 + $ docker pull gcmirrors/etcd-amd64:3.3.10 + $ docker pull coredns/coredns:1.3.1 + ``` + + > ![](./public_sys-resources/icon-note.gif) **Note** + > If the Docker image library proxy is configured, you can directly change the tag to **k8s.gcr.io** and skip the following steps. + +3. Run the following commands to tag the downloaded images: + + * AArch64 architecture + + ``` + $ docker tag gcmirrors/kube-apiserver-arm64:v1.15.10 k8s.gcr.io/kube-apiserver:v1.15.10 + $ docker tag gcmirrors/kube-controller-manager-arm64:v1.15.10 k8s.gcr.io/kube-controller-manager:v1.15.10 + $ docker tag gcmirrors/kube-scheduler-arm64:v1.15.10 k8s.gcr.io/kube-scheduler:v1.15.10 + $ docker tag gcmirrors/kube-proxy-arm64:v1.15.10 k8s.gcr.io/kube-proxy:v1.15.10 + $ docker tag gcmirrors/pause-arm64:3.1 k8s.gcr.io/pause:3.1 + $ docker tag gcmirrors/etcd-arm64:3.3.10 k8s.gcr.io/etcd:3.3.10 + $ docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1 + ``` + + * x86 architecture + + ``` + $ docker tag gcmirrors/kube-apiserver-amd64:v1.15.10 k8s.gcr.io/kube-apiserver:v1.15.10 + $ docker tag gcmirrors/kube-controller-manager-amd64:v1.15.10 k8s.gcr.io/kube-controller-manager:v1.15.10 + $ docker tag gcmirrors/kube-scheduler-amd64:v1.15.10 k8s.gcr.io/kube-scheduler:v1.15.10 + $ docker tag gcmirrors/kube-proxy-amd64:v1.15.10 k8s.gcr.io/kube-proxy:v1.15.10 + $ docker tag gcmirrors/pause-amd64:3.1 k8s.gcr.io/pause:3.1 + $ docker tag gcmirrors/etcd-amd64:3.3.10 k8s.gcr.io/etcd:3.3.10 + $ docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1 + ``` + +4. Run the following command to check whether the K8s tag is successfully added to the images: + + ``` + $ docker images | grep k8s + ``` + + ![](./figures/zh-cn_image_0296836374.png) + +5. After the tag is added, run the following commands to delete the old images in the current environment: + + * AArch64 architecture + + ``` + $ docker rmi gcmirrors/kube-apiserver-arm64:v1.15.10 + $ docker rmi gcmirrors/kube-controller-manager-arm64:v1.15.10 + $ docker rmi gcmirrors/kube-scheduler-arm64:v1.15.10 + $ docker rmi gcmirrors/kube-proxy-arm64:v1.15.10 + $ docker rmi gcmirrors/pause-arm64:3.1 + $ docker rmi gcmirrors/etcd-arm64:3.3.10 + $ docker rmi coredns/coredns:1.3.1 + ``` + + * x86 architecture + + ``` + $ docker rmi gcmirrors/kube-apiserver-amd64:v1.15.10 + $ docker rmi gcmirrors/kube-controller-manager-amd64:v1.15.10 + $ docker rmi gcmirrors/kube-scheduler-amd64:v1.15.10 + $ docker rmi gcmirrors/kube-proxy-amd64:v1.15.10 + $ docker rmi gcmirrors/pause-amd64:3.1 + $ docker rmi gcmirrors/etcd-amd64:3.3.10 + $ docker rmi coredns/coredns:1.3.1 + ``` + +### Configuring the Master Node + +1. Run the following commands on the master node to initialize the cluster: + + ``` + $ systemctl daemon-reload + $ systemctl restart kubelet + $ kubeadm init --kubernetes-version v1.15.10 --pod-network-cidr=10.244.0.0/16 + ``` + + After the cluster is initialized, the following information is displayed: + + ![](./figures/configmaster.png) + + Save the `kubeadm join` command in the preceding figure. Run this command when [adding the worker node to the cluster](#jump2). + + > ![](./public_sys-resources/icon-note.gif) **Note** + > + > The Kubernetes installed using kubeadm automatically generates the certificates required by the cluster. All certificates are stored in the `/etc/kubernetes/pki` directory. + +2. Configure the cluster based on the information displayed on the console upon successful initialization, and run the following commands: + + ``` + $ mkdir -p $HOME/.kube + $ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config + $ chown $(id -u):$(id -g) $HOME/.kube/config + ``` + +3. Run the following command on the master node to view the cluster node information: + + ``` + $ kubectl get node + ``` + + The node is not ready because the Calico network is not configured. + +### Installing the Calico Network Plug-in + +1. Run the following commands on the master and worker nodes to download the Calico container image: + + * AArch64 architecture + + ``` + $ docker pull calico/cni:v3.14.2-arm64 + $ docker pull calico/node:v3.14.2-arm64 + $ docker pull calico/kube-controllers:v3.14.2-arm64 + $ docker pull calico/pod2daemon-flexvol:v3.14.2-arm64 + ``` + + * x86 architecture + + ``` + $ docker pull calico/cni:v3.14.2-amd64 + $ docker pull calico/node:v3.14.2-amd64 + $ docker pull calico/kube-controllers:v3.14.2-amd64 + $ docker pull calico/pod2daemon-flexvol:v3.14.2-amd64 + ``` + +2. Run the following commands on the master and worker nodes to modify the downloaded image tags: + + * AArch64 architecture + + ``` + $ docker tag calico/cni:v3.14.2-arm64 calico/cni:v3.14.2 + $ docker tag calico/node:v3.14.2-arm64 calico/node:v3.14.2 + $ docker tag calico/kube-controllers:v3.14.2-arm64 calico/kube-controllers:v3.14.2 + $ docker tag calico/pod2daemon-flexvol:v3.14.2-arm64 calico/pod2daemon-flexvol:v3.14.2 + ``` + + * x86 architecture + + ``` + $ docker tag calico/cni:v3.14.2-amd64 calico/cni:v3.14.2 + $ docker tag calico/node:v3.14.2-amd64 calico/node:v3.14.2 + $ docker tag calico/kube-controllers:v3.14.2-amd64 calico/kube-controllers:v3.14.2 + $ docker tag calico/pod2daemon-flexvol:v3.14.2-amd64 calico/pod2daemon-flexvol:v3.14.2 + ``` + +3. Run the following command to check whether the Calico tag is successfully added: + + ``` + $ docker images | grep calico + ``` + + ![](./figures/calicotag.png) + +4. Run the following commands on the master and worker nodes to delete the old image: + + * AArch64 architecture + + ``` + $ docker rmi calico/cni:v3.14.2-arm64 + $ docker rmi calico/node:v3.14.2-arm64 + $ docker rmi calico/kube-controllers:v3.14.2-arm64 + $ docker rmi calico/pod2daemon-flexvol:v3.14.2-arm64 + ``` + + * x86 architecture + + ``` + $ docker rmi calico/cni:v3.14.2-amd64 + $ docker rmi calico/node:v3.14.2-amd64 + $ docker rmi calico/kube-controllers:v3.14.2-amd64 + $ docker rmi calico/pod2daemon-flexvol:v3.14.2-amd64 + ``` + +5. Run the following command on the master node to download the YAML file: + + ``` + $ wget https://docs.projectcalico.org/v3.14/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml --no-check-certificate + ``` + +6. Run the following command on the master node to deploy Calico: + + ``` + $ kubectl apply -f calico.yaml + ``` + +7. Run the following command on the master node to check the node status. If the node status is **Ready**, the installation is successful. + + ``` + $ kubectl get nodes + ``` + +### Adding Nodes to the Cluster + +1. Run the command saved in [Configuring the Master Node](#jump1) to add the worker node to the cluster. + + ``` + $ kubeadm join 192.168.122.72:6443 --token 9hyjsw.102m4qpmr93msfdv --discovery-token-ca-cert-hash sha256:ccf9a7762c7ae08fab3ec0649897b1de8e3ef37cf789517f42ea95fad0bd29b1 + ``` + + > ![](./public_sys-resources/icon-note.gif) **Note** + > + > The default validity period of a token is 24 hours. If the token times out, run the `kubeadm token create --print-join-command` command on the master node to generate a new token. + +2. Run the following command on the master node to check the subnodes added to the cluster: + + ``` + $ kubectl get nodes + ``` + +3. Run the following command on the master node to check the pod status in the cluster. If the status of all pods is **Running**, the configuration is successful. The page of successful configuration is shown in the following figure: + + ``` + $ kubectl get pods -A + ``` + + ![](./figures/clusteradd.png) + +### Commands for Viewing Status Information + +* Information of all pods: + + ``` + kubectl get pods -A + ``` + +* Information of all pods running in a namespace on the current node: + + ``` + kubectl get pods -n $namespace + ``` + +* Information of all pods running in a namespace: + + ``` + kubectl get pods -n $namespace -o wide + ``` + +* Information of a single pod, which can be used to locate pod status exceptions: + + ``` + kubectl describe pod $podname -n $namespace + ``` + +* Pod deletion: After a running pod is deleted, the controller immediately creates a pod. + + ``` + kubectl delete pods $podname + ``` + +## Software Uninstallation + +If you do not need the K8s cluster, perform the operations in this section to delete the K8s cluster. The following commands must be executed on the master and worker nodes. + +1. Run the following commands to clear the K8s cluster settings: + + ``` + $ kubeadm reset + $ rm –rf $HOME/.kube/config + ``` + +2. Run the following commands to delete the basic component image: + + ``` + $ docker rmi k8s.gcr.io/kube-apiserver:v1.15.10 + $ docker rmi k8s.gcr.io/kube-controller-manager:v1.15.10 + $ docker rmi k8s.gcr.io/kube-scheduler:v1.15.10 + $ docker rmi k8s.gcr.io/kube-proxy:v1.15.10 + $ docker rmi k8s.gcr.io/pause:3.1 + $ docker rmi k8s.gcr.io/etcd:3.3.10 + $ docker rmi k8s.gcr.io/coredns:1.3.1 + ``` + +3. Run the following command to uninstall the management software: + + ``` + $ yum erase –y kubelet kubectl kubeadm kubernetes-cni + ``` \ No newline at end of file diff --git a/docs/en/docs/thirdparty_migration/openstack-train.md b/docs/en/docs/thirdparty_migration/openstack-train.md new file mode 100644 index 0000000000000000000000000000000000000000..b6f6e54366d66078739f77c29bb5231e09036608 --- /dev/null +++ b/docs/en/docs/thirdparty_migration/openstack-train.md @@ -0,0 +1,547 @@ +# Guide to Porting OpenStack-Train to openEuler + +- [Software Overview](#software-overview) +- [Environment Configuration](#environment-configuration) +- [System Configuration](#system-configuration) +- [Software Compilation](#software-compilation) +- [Running the devstack Script to Install OpenStack](#running-the-devstack-script-to-install-openstack) +- [Software Running](#software-running) +- [Software Uninstallation](#software-uninstallation) +- [FAQs](#faqs) +- [Appendix](#appendix) + +## Software Overview + +### OpenStack + +OpenStack is an open source cloud computing infrastructure software project developed by the community. It provides an operating platform or toolset for deploying the cloud, offering scalable and flexible cloud computing for organizations. + +OpenStack consists of several major components, such as nova、neutron、glance、keystone、horizon and so on.It supports almost all cloud environment types. The project aims to provide a cloud computing management platform that is easy-to-use, scalable, unified, and standardized. OpenStack provides an infrastructure as a service (IaaS) solution that combines complementary services, each of which provides an API for integration. + +### Applicable Version + +This document uses the Train release for adaptation. Unveiled on October 16, 2019, Train is the 20th release of the most widely deployed open source cloud software. + +### DevStack + +DevStack is a modular set of scripts that allow developers to quickly deploy OpenStack. The scripts can be run on a single node that is a bare metal server (BMS) or a virtual machine (VM). It can also be configured to deploy on multiple nodes. + +By default, the core services for OpenStack are installed, but users can also modify the configuration file to deploy other services. All services are installed from source, which can be obtained from [devstack.github](https://github.com/OpenStack/devstack). + +Generally, DevStack will pull the core services from git master unless configured to clone from a stable branch, such as stable/pike. + +This document uses the **devstack** script for installation, deployment, and testing. The all-in-one mode is used to install DevStack on x86- or ARM-based servers. For the installation on these two architectures, only some commands or procedures are different. This document will elaborate the differences. + +## Environment Configuration + +It is recommended that the memory of the deployment environment be greater than 2 GB. + +### Software Platform + +| Software |Version Number |Installation Method | Remarks | +|:--- |:---- |:---- |:---- | +| openEuler | 20.03-LTS-SP2 |iso | In terms of architecture, openEuler can be deployed on x86-based VMs and physical machines, but only on ARM-based physical machines.| +| gcc | 7.3.0 |Refer to Installing Required Libraries and Dependencies | | +| python3 | 3.7.9 |Refer to Installing Required Libraries and Dependencies | | +| bash | 5.0 |Refer to Installing Required Libraries and Dependencies | | +| devstack | Latest |Refer to Modifying the devstack Script and Related Configurations |[devstack](https://github.com/OpenStack/devstack) | + +### Required Dependency Packages + +| Software |Version Number |Installation Method | +|:--- |:---- |:---- | +| python3-systemd | 234 |Refer to Installing Required Libraries and Dependencies | +| pcp-system-tools | 4.1.3 |Refer to Installing Required Libraries and Dependencies | +| haproxy | 2.0.14 |Refer to Installing Required Libraries and Dependencies | +| httpd httpd-devel | 2.4.43 |Refer to Installing Required Libraries and Dependencies | +| memcached | 1.5.10 |Refer to Installing Required Libraries and Dependencies | +| python3-devel | 3.7.9 |Refer to Installing Required Libraries and Dependencies | +| libffi-devel | 3.3.7 |Refer to Installing Required Libraries and Dependencies| +| open-iscsi-devel | 2.1.1 |Refer to Installing Required Libraries and Dependencies | +| libxml2 libxml2-devel python3-libxml2 | 2.9.10 |Refer to Installing Required Libraries and Dependencies | +| python3-lxml | 4.2.3 |Refer to Installing Required Libraries and Dependencies | +| libxslt libxslt-devel | 1.1.34 |Refer to Installing Required Libraries and Dependencies | +| edk2-ovmf(x86) edk2-aarch64(ARM) edk2-devel python3-edk2-devel | 202002 |Refer to Installing Required Libraries and Dependencies | +| qemu qemu-guest-agent | 4.1.0 |Refer to Installing Required Libraries and Dependencies | +| libvirt* python3-libvirt | 6.2.0 |Refer to Installing Required Libraries and Dependencies | +| rabbitmq-server | 3.7.23 |Refer to Installing Required Libraries and Dependencies | +| python3-copr | 1.105 |Refer to Installing Required Libraries and Dependencies | +| python3-uWSGI | 2.0.19 |Refer to Installing Required Libraries and Dependencies | +| python3-mod_wsgi | 4.6.4 |Refer to Installing Required Libraries and Dependencies | +| python3-sqlalchemy python3-SQLAlchemy-Utils | 1.2.19 |Refer to Installing Required Libraries and Dependencies | +| python3-scss | 1.3.5 |Refer to Installing Required Libraries and Dependencies | +| openeuler-lsb | 5.0 |Refer to Installing Required Libraries and Dependencies | +| mariadb-server | 10.3.9 |Refer to Installing Required Libraries and Dependencies | + +## System Configuration + +### Disabling the Firewall + +1. Run the following command to stop the firewall: + + ``` + # systemctl stop firewalld.service + ``` + +2. Run the following command to disable the firewall: + + ``` + # systemctl disable firewalld.service + ``` + +### Changing the Value of SELINUX to disabled + +Run the following commands to disable SELINUX: + +``` +# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux +# setenforce 0 +``` + +## Software Compilation + +### Installing Required Libraries and Dependencies (Local Yum Source) + +> ![](./public_sys-resources/icon-note.gif) **Note** +> You can run the automation script **prep\_install.sh** to implement what is described in this section. For details, see the Appendix. + +Run the following commands to install the libraries and dependencies required for executing the script: + +``` +# yum -y install tar git bash +# yum -y install rust +# yum -y install python3-systemd +# yum -y install libffi-devel +# yum -y install open-iscsi-devel +# yum -y install libxml2-devel +# yum -y install python3-lxml python3-libxml2 libxslt libxslt-devel +# yum -y install pcp-system-tools +# yum -y install haproxy +# yum -y install qemu qemu-guest-agent +# yum -y install libvirt* python3-libvirt +# yum -y install httpd httpd-devel +# yum -y install memcached +# yum -y install mariadb-server +# yum -y install rabbitmq-server +# yum -y install python3-uWSGI +# yum -y install python3-mod_wsgi +# yum -y install python3-copr +# yum -y install python3-scss +# yum -y install gcc-c++ +# yum -y install python3-devel +# yum -y install python3-sqlalchemy python3-SQLAlchemy-Utils +# yum -y install openeuler-lsb +``` + +Use the Yum source to install UEFI-related libraries. The commands for the x86 and ARM architectures are as follows: + +* x86 architecture + + ``` + # yum -y install edk2-ovmf edk2-devel python3-edk2-devel + ``` + +* ARM architecture + + ``` + # yum -y install edk2-aarch64 edk2-devel python3-edk2-devel + ``` + +### Creating an Execution User + +1. Log in to the target host as root user and run the following command to create a stack user to execute the script: + + ``` + # useradd -s /bin/bash -d /home/stack -m stack + ``` + +2. Perform the following operations to set root permission for the stack user: + + ``` + # chmod +w /etc/sudoers + # vi /etc/sudoers //Insert "stack ALL=(ALL) NOPASSWD: ALL" in the position shown in the figure. + # chmod -w /etc/sudoers + ``` + + ![](./figures/createuser.png) + +### Downloading the devstack Script + +Switch to the stack user and run the following command to download the **devstack** script file: + +``` +# su - stack +# git clone -b stable/train https://opendev.org/OpenStack/devstack +``` + +Perform the following operations as the stack user. + +1. In the **/home/stack/devstack/files/rpms/nova** file, change **mysql-devel** to **mariadb-devel**. + +2. In the **/home/stack/devstack/files/rpms/neutron-common** file, change **mysql-devel** to **mariadb-devel**. + +3. In the **/home/stack/devstack/files/rpms/general** file, change **redhat-rpm-config** to **openEuler-rpm-config**. + +4. Delete the **dstat** line from the **/home/stack/devstack/files/\rpms/dstat** file. + +5. In the **/home/stack/devstack/lib/nova_plugins/functions-libvirt** file, change **install_package qemu-kvm** in line 80 to **install_package qemu**. + +6. Modify line 130 in the **/home/stack/devstack/stackrc** file as follows: + + ``` + 130 export USE_PYTHON3=$(trueorfalse True USE_PYTHON3) + ``` + +7. Modify lines 126 and 128 in the **/home/stack/devstack/lib/apache** file as follows: + + ``` + 126 uwsgi=$(ls uWSGI*) + 127 tar xvf $uwsgi + 128 cd ./apache2 + ``` + +8. In the **/home/stack/devstack/lib/lvm** file, comment out line 130 and add line 131 as follows: + + ``` + 130 #start service lvm2_lvmetad + 131 sleep 1 + ``` + +9. Query the default Python version. If the version is not 3.7.9, change it to 3.7.9. + + ``` + cd /usr/bin + sudo rm -rf python + sudo ln -s /usr/bin/python3.7 /usr/bin/python + ``` + + + +### Modifying the Host Environment + +> ![](./public_sys-resources/icon-note.gif) **Note** +> You can run the automation script **prep\_install.sh** to implement what is described in this section. For details, see the Appendix. + +1. Run the `sudo vi /etc/httpd/conf/httpd.conf` command to add the following configuration to the `/etc/httpd/conf/httpd.conf` file as the administrator so that the third-party plug-in service can be loaded. The following figure shows the position where the configuration is added: + + ``` + LoadModule wsgi_module modules/mod_wsgi_python3.so + ``` + + ![](./figures/host_env1.png) + +2. Run the following commands to fix the bug that occurs when Yum is used to install **edk2.x86\_64** (or **edk2.aarch64** for the ARM architecture). Pay attention to the directory and file permissions. + + * x86 architecture + + ``` + # cd /usr/share + # sudo mkdir OVMF && sudo chmod -R 755 OVMF + # cd OVMF + # sudo ln -s ../edk2/ovmf/OVMF_CODE.fd OVMF_CODE.fd + # sudo ln -s ../edk2/ovmf/OVMF_VARS.fd OVMF_VARS.fd + ``` + + * ARM architecture + + ``` + # cd /usr/share + # sudo mkdir AAVMF && sudo chmod -R 755 AAVMF + # cd AAVMF + # sudo ln -s ../edk2/aarch64/QEMU_EFI-pflash.raw AAVMF_CODE.fd + # sudo ln -s ../edk2/aarch64/vars-template-pflash.raw AAVMF_VARS.fd + ``` + +3. Add the following configuration to the `/etc/libvirt/qemu.conf` file to enable QEMU to support UEFI: + + * x86 architecture + + ``` + nvram = ["/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd","/usr/share/edk2/ovmf/OVMF_CODE.fd:/usr/share/edk2/ovmf/OVMF_VARS.fd"] + ``` + + * ARM architecture + + ``` + nvram = ["/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd","/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2/aarch64/vars-template-pflash.raw"] + ``` + +### Modifying the devstack Script and Related Configurations + +1. Run the following commands to create the `local.conf` file: + + ``` + # cd /home/stack/devstack + # touch local.conf + ``` + +2. Edit the `local.conf` file and configure the following information: + + * x86 architecture + + ``` + [[local|localrc]] + HOST_IP=172.168.132.11 + ADMIN_PASSWORD=a123456 + DATABASE_PASSWORD=d123456 + RABBIT_PASSWORD=r123456 + SERVICE_PASSWORD=s123456 + + disable_service tempest + + GIT_BASE=http://git.trystack.cn + NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git + SPICE_REPO=http://git.trystack.cn/git/spice/spice-html5.git + + LOGFILE=$DEST/logs/stack.sh.log + + ``` + + * ARM architecture + + ``` + [[local|localrc]] + HOST_IP=192.168.122.8 + ADMIN_PASSWORD=a123456 + DATABASE_PASSWORD=d123456 + RABBIT_PASSWORD=r123456 + SERVICE_PASSWORD=s123456 + + disable_service tempest + + GIT_BASE=http://git.trystack.cn + NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git + SPICE_REPO=http://git.trystack.cn/git/spice/spice-html5.git + + DOWNLOAD_DEFAULT_IMAGES=False + IMAGE_URLS="https://github.com/cirros-dev/cirros/releases/download/0.5.1/cirros-0.5.1-aarch64-disk.img" + ETCD_DOWNLOAD_LOCATION=https://mirrors.huaweicloud.com/etcd/v3.3.12/etcd-v3.3.12-linux-arm64.tar.gz + + LOGFILE=$DEST/logs/stack.sh.log + + ``` + +> ![](./public_sys-resources/icon-note.gif) **Note** +> You can run the automation script **prep\_install.sh** to implement what is described in this section. For details, see the Appendix. + +3. Edit the `/home/stack/devstack/stackrc` file and change the value of the field shown in the following figure to **stable/train** to specify the OpenStack release to be installed. + + ![](./figures/host_env5.png) + +4. The devstack currently does not maintain the openEuler platform. run the following command to adapt to the OpenEuler version installation. + + ``` + # cd /home/stack/devstack + # sed -i "/\# Git Functions/i\\function is_openeuler {\n\tif [[ -z \"\$os_VENDOR\" ]]; then\n\tGetOSVersion\n\tfi\n\n\t[[ \"\$os_VENDOR\" =~ (openEuler) ]]\n}\n" functions-common + # sed -i "s/elif is_fedora/elif is_fedora || is_openeuler/g" functions-common + # sed -i "/DISTRO=\"f\$os_RELEASE\"/a\ \ \ \ elif [[ \"\$os_VENDOR\" =~ (openEuler) ]]; then\n\tDISTRO=\"openEuler-\$os_RELEASE\"" functions-common + # grep -nir "is_fedora" | grep -v functions-common | cut -d ":" -f1 | sort | uniq | for line in `xargs`;do sed -i "s/is_fedora/is_fedora || is_openeuler/g" $line;done + ``` + +5. The default python-libvirt version in the script file does not adapt to openEuler. Therefore, you need to edit the `/home/stack/devstack/lib/nova_plugins/functions-libvirt` file and comment out the code related to python-libvirt installation. python-libvirt has been manually installed in the Yum source of openEuler-20.03-LTS-SP2. + + ![](./figures/host_env7.png) + +6. Edit the `/home/stack/devstack/inc/python` file and change the value of the `cmd_pip` parameter to the Chinese source, as shown in the following figure: + + ![](./figures/host_env8.png) + +7. Modify the `/home/stack/devstack/inc/python` file to install the **Glance** component by default. + + ![](./figures/host_env9.png) + +8. Modify the `/home/stack/devstack/lib/neutron_plugins/services/l3` file and add the following configuration to the position shown in the following figure: + + ``` + # source openrc admin admin + ``` + + ![](./figures/host_env10.png) + +9. Modify the `/home/stack/devstack/stackrc` file and change the value of `VIRTUALENV_CMD`. + + ![](./figures/host_env11.png) + + After the modification is completed, save the modification and exit. Then, run the following command: + + ``` + # pip3 install virtualenv + ``` + +## Running the devstack Script to Install OpenStack + +Run the following commands as the stack user to execute the **stack.sh** script to install OpenStack on a single-node system: + +``` +# cd /home/stack/devstack +# FORCE=yes ./stack.sh + +``` + +The installation takes more than 10 minutes. The information displayed after the successful installation is the same for both x86 and ARM architectures. The following uses the ARM architecture as an example. If the installation is successful, the page shown in the following figure is displayed: + +![](./figures/stack.png) + +## Software Running + +If the **devstack.sh** script is executed successfully, the specified sub-modules are installed on the current host according to the configuration information in the **local.conf** file. If no sub-module is specified in the **local.conf** file, all sub-modules are installed. + +Run the following command as the stack user to log in to the OpenStack client as the administrator: + +``` +# source openrc admin admin +``` + +* Obtain the resource lists + + - Run the following command to obtain the image resource list: + ``` + # openstack image list + ``` + - Run the following command to obtain the network resource list: + ``` + # openstack network list + ``` + - Run the following command to obtain the VM configuration type list: + ``` + # openstack flavor list + ``` + +* Start an instance + + - Run the following command to create a VM using the queried resources: + * x86 architecture + ``` + # openstack server create -image cirros-0.5.1-x86_64-disk -flavor 1 vm + ``` + + ![](./figures/startvm.png) + * ARM architecture + + ``` + # openstack server create --image cirros-0.5.1-aarch64-disk --flavor 1 vm + ``` + - Run the following command to check the VM status: + + ``` + # openstack server list //Check the VM status. + ``` + + ![](./figures/vmlist.png) + + +## Software Uninstallation + +1. Run the following commands to uninstall and clear the files generated by devstack and the environment configuration: + + ``` + # cd /home/stack/devstack + # ./unstack.sh + # ./clean.sh + ``` + +2. Delete the devstack. + + ``` + # cd /home/stack + # rm -rf devstack + # rm -rf /opt/stack + ``` + +## FAQs + +### The OpenStack Project List Occasionally Fails Due to Network Problems + +**Symptom** + +An error is reported when the script runs the `openstack project list` command. + +**Cause Analysis** + +This is a network problem. After running the `source openrc admin admin` command, wait for a period of time and run the `openstack project list` command to make the execution take effect. + +**Solution** + +Modify the `/home/stack/devstack/lib/neutron\_plugins/services/l3` file as shown in the following figure: + +![](./figures/faq1.png) + +### The devstack@q-meta.service Occasionally Fails to Be Started + +**Symptom** + +The `sudo systemctl start devstack@q-meta.service` command fails to be executed. + +**Cause Analysis** + +After running the `systemctl enable devstack@q-meta.service` command, you need to wait for a period of time. + +**Solution** + +After the service is enabled, wait for 30 seconds and then start the service. + +Modify the `/home/stack/devstack/functions-common` file as shown in the following figure: + +![](./figures/zh-cn_image_0296837434.png) + +### The MariaDB Service Fails to Be Started + +**Symptom** + +The MariaDB service fails to be started. + +**Cause Analysis** + +The **mysql\_install\_db** database fails to be created, and a message is displayed indicating that the gssapi plug-in reports an error. + +**Solution** + +The gssapi plug-in is not used. Run the following command to uninstall the **mariadb-gssapi-server** package: + +``` +# ./unstack.sh ./clean.sh && FORCE=yes ./stack.sh +``` + +### The Neutron Service Fails to Be Started + +**Symptom** + +The Neutron service occasionally fails to be started. + +**Cause Analysis** + +The network is unstable. As a result, the network node fails to be set up. + +**Solution** + +Run the following command to execute the script again: + +``` +# ./unstack.sh && FORCE=yes ./stack.sh +``` + +### The pip Boot Fails + +**Symptom** + +The pip boot fails, and the console displays the error message **ERROR: Links are not allowed as constraints**. + +**Cause Analysis** + +The latest pip 20.3 release has been available, but it does not adapt to openEuler. + +**Solution** + +Refer to the community solution. Use the patch to modify the devstack source code. Run the following commands in the **/home/stack/devstack** directory: + +``` +# wget https://github.com/openstack/devstack/commit/7a3a7ce87.patch +# sudo yum install patch -y +# patch -p1 < 7a3a7ce87.patch +``` + +## Appendix + +Click [prep\_install.sh](https://gitee.com/openeuler/docs/blob/stable2-20.03_LTS_SP2/docs/en/docs/thirdparty_migration/prep_install.sh) to obtain the automation script **prep\_install.sh**. + +Save the script to the `/home/stack` directory and run the `bash -x prep_install.sh` command to install required libraries and dependencies, modify the host environment, and modify the **devstack** script and related configurations. \ No newline at end of file diff --git a/docs/en/docs/thirdparty_migration/prep_install.sh b/docs/en/docs/thirdparty_migration/prep_install.sh new file mode 100644 index 0000000000000000000000000000000000000000..3ff22d0fd2dbf658575bca6559a50fff9f01832a --- /dev/null +++ b/docs/en/docs/thirdparty_migration/prep_install.sh @@ -0,0 +1,145 @@ +#!/bin/bash +# This script contains the preparations before installing openstack + +HTTPD_CG="/etc/httpd/conf/httpd.conf" +QEMU_CG="/etc/libvirt/qemu.conf" + +EDK2_UEFI_PATH="/usr/share/edk2" +UEFI_DIR_ARM="/usr/share/AAVMF" +UEFI_DIR_X86="/usr/share/OVMF" +DEVSTACK_HOME="/home/stack/devstack" + +# Confirm installation mode for openstack +function install_mode() +{ + if [[ ! `rpm -qa` =~ "openeuler-lsb" ]]; then + echo "Maybe you should confirm whether openeuler-lsb is installed" + exit 1 + fi + + # init function is_openeuler + sed -i "/\# Git Functions/i\\function is_openeuler {\n\tif [[ -z \"\$os_VENDOR\" ]]; then\n\tGetOSVersion\n\tfi\n\n\t[[ \"\$os_VENDOR\" =~ (openEuler) ]]\n}\n" $DEVSTACK_HOME/functions-common + + # build function is_openeuler in functions-common + sed -i "s/elif is_fedora/elif is_fedora || is_openeuler/g" $DEVSTACK_HOME/functions-common + sed -i "/DISTRO=\"f\$os_RELEASE\"/a\ \ \ \ elif [[ \"\$os_VENDOR\" =~ (openEuler) ]]; then\n\tDISTRO=\"openEuler-\$os_RELEASE\"" $DEVSTACK_HOME/functions-common + # build function is_openeuler with remaining + grep -nir "is_fedora" | grep -v functions-common | cut -d ":" -f1 | sort | uniq | for line in `xargs` + do + sed -i "s/is_fedora/is_fedora || is_openeuler/g" $line + done + + # install glance + sed -i "/\${LIBS_FROM_GIT} = 'ALL'/i\\\ \ \ \ if [ \$name == \"glance_store\" ]; then enabled=0; fi" $DEVSTACK_HOME/inc/python + + # source openrc + sed -i "/openstack project list/i\\source openrc admin admin" $DEVSTACK_HOME/lib/neutron_plugins/services/l3 + + # Change VIRTUALENV_CMD + pip3 install virtualenv + sed -i "s/python3 -m venv/virtualenv/g" $DEVSTACK_HOME/stackrc + + # Fixed git branch + sed -i "s/master/stable\/train/g" $DEVSTACK_HOME/stackrc + + # Change pypi repo + sed -i "s/\$cmd_pip install/\$cmd_pip install -i https:\/\/mirrors.aliyun.com\/pypi\/simple/g" $DEVSTACK_HOME/inc/python +} + +# Config mod_wsgi +function mod_wsgi_cg() +{ + sudo ls -al $HTTPD_CG 2>&1 > /dev/null + if [[ $? -ne 0 ]]; then + echo "Maybe you should confirm whether httpd is installed" + exit 1 + fi + + sudo sed -i "/Include conf.modules.d\/\*.conf/i\\LoadModule wsgi_module modules/mod_wsgi_python3.so" $HTTPD_CG +} + +# QEMU support for uefi +function qemu_uefi_init() +{ + sudo ls -al $QEMU_CG 2>&1 > /dev/null + if [[ $? -ne 0 ]]; then + echo "Maybe you should confirm whether qemu is installed" + exit 1 + fi + + if [[ `arch` == aarch64 ]]; then + sudo sed -i '$anvram = [\"/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd\",\"/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2/aarch64/vars-template-pflash.raw\"]' $QEMU_CG + fi + if [[ `arch` == x86_64 ]]; then + sudo sed -i '$anvram = [\"/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd\",\"/usr/share/edk2/ovmf/OVMF_CODE.fd:/usr/share/edk2/ovmf/OVMF_VARS.fd"]' $QEMU_CG + fi +} + +# Bugfix when yum install edk2 +function edk2_uefi_init() +{ + if [[ ! -d $EDK2_UEFI_PATH ]]; then + echo "Maybe you should confirm whether edk2 is installed" + exit 1 + fi + + if [[ `arch` == "aarch64" ]]; then + sudo mkdir $UEFI_DIR_ARM && pushd $UEFI_DIR_ARM + sudo ln -s $EDK2_UEFI_PATH/aarch64/QEMU_EFI-pflash.raw AAVMF_CODE.fd + sudo ln -s $EDK2_UEFI_PATH/aarch64/vars-tmplate-pflash.raw AAVMF_VARS.fd + popd + fi + if [[ `arch` == "x86_64" ]]; then + sudo mkdir $UEFI_DIR_X86 && pushd $UEFI_DIR_X86 + sudo ln -s $EDK2_UEFI_PATH/ovmf/OVMF_CODE.fd OVMF_CODE.fd + sudo ln -s $EDK2_UEFI_PATH/ovmf/OVMF_VARS.fd OVMF_VARS.fd + popd + + fi + + qemu_uefi_init +} + +# Fixed libvirt version +function libvirt_version_fixed() +{ + if [[ ! `rpm -qa` =~ "python3-libvirt" ]]; then + echo "Maybe you should confirm whether python3-libvirt is installed" + exit 1 + fi + sudo sed -i "s/pip_uninstall libvirt-python//g" $DEVSTACK_HOME/lib/nova_plugins/functions-libvirt + sudo sed -i "s/pip_install_gr libvirt-python//g" $DEVSTACK_HOME/lib/nova_plugins/functions-libvirt +} + +# The installation system script execution process must depend on +function yum_pkgs() +{ + # install base service + sudo yum install -y gcc-c++ python3-devel tar patch git + # install necessary dependences + sudo yum install -y python3-systemd + sudo yum install -y libffi-devel + sudo yum install -y open-iscsi-devel + sudo yum install -y libxml2 libxml2-devel + sudo yum install -y python3-lxml python3-libxml2 libxslt libxslt-devel + sudo yum install -y pcp-system-tools + sudo yum install -y haproxy + if [[ `arch` == "aarch64" ]]; then + sudo yum install -y edk2-aarch64 edk2-devel python3-edk2-devel + fi + if [[ `arch` == "x86_64" ]]; then + sudo yum install -y edk2-ovmf edk2-devel python3-edk2-devel + fi + sudo yum install -y libvirt* python3-libvirt && libvirt_version_fixed + sudo yum install -y qemu qemu-guest-agent && edk2_uefi_init + sudo yum install -y httpd httpd-devel + sudo yum install -y memcached + sudo yum install -y mariadb-server + sudo yum install -y rabbitmq-server + sudo yum install -y python3-uWSGI python3-mod_wsgi && mod_wsgi_cg + sudo yum install -y python3-copr python3-scss + sudo yum install -y openeuler-lsb && install_mode + sudo yum install -y python3-sqlalchemy python3-SQLAlchemy-Utils +} + +yum_pkgs diff --git a/themes/project/layouts/partials/docs/inject/menu-after.html b/docs/en/docs/thirdparty_migration/public_sys-resources/.keep similarity index 100% rename from themes/project/layouts/partials/docs/inject/menu-after.html rename to docs/en/docs/thirdparty_migration/public_sys-resources/.keep diff --git a/content/zh/docs/ApplicationDev/public_sys-resources/icon-note.gif b/docs/en/docs/thirdparty_migration/public_sys-resources/icon-note.gif similarity index 100% rename from content/zh/docs/ApplicationDev/public_sys-resources/icon-note.gif rename to docs/en/docs/thirdparty_migration/public_sys-resources/icon-note.gif diff --git a/content/zh/docs/ApplicationDev/public_sys-resources/icon-notice.gif b/docs/en/docs/thirdparty_migration/public_sys-resources/icon-notice.gif similarity index 100% rename from content/zh/docs/ApplicationDev/public_sys-resources/icon-notice.gif rename to docs/en/docs/thirdparty_migration/public_sys-resources/icon-notice.gif diff --git a/docs/en/docs/thirdparty_migration/springframework.md b/docs/en/docs/thirdparty_migration/springframework.md new file mode 100644 index 0000000000000000000000000000000000000000..76903acfdfb6828e14178f6cd1529297c1ffc947 --- /dev/null +++ b/docs/en/docs/thirdparty_migration/springframework.md @@ -0,0 +1,415 @@ +# Guide to Porting Spring Framework to openEuler + + - [Software Overview](#software-overview) + - [Environment Configuration](#environment-configuration) + - [System Configuration](#system-configuration) + - [Software Compilation](#software-compilation) + - [Software Running](#software-running) + - [FAQs](#faqs) + +## Software Overview + +### Spring Framework + +Spring Framework is an open source framework that aims to solve problems that occur when a Java EE application is developed using the Enterprise JavaBean (EJB), such as redundant code and complex configurations. Spring is a container that supports multiple technologies, such as JMS, MQ, and UnitTest. It also uses aspect oriented programming (AOP) to facilitate transaction and log management, indicating its solid support for mainstream frameworks. + +[Figure 1](#fig1601161484619) shows the Spring Framework architecture. + +**Figure 1** Spring Framework structure +![](./figures/zh-cn_image_0296838174.png) + +The Spring Framework consists of three core modules: Spring-Core, Spring-Context, and Spring-Beans. It also incorporates basic modules such as Spring-AOP, Spring-Web, and Spring-Webmvc. The functions of each module are described as follows: + +**Spring-Core** + +The core container provides basic functions of the Spring Framework, including the main module BeanFactory that manages the Bean. + +**Spring-Context** + +A configuration file that provides context for the Spring Framework. The context includes enterprise services such as JNDI, EJB, e-mail, internationalization, validation, and scheduling. + +**Spring-Beans** + +The package that implements the inversion of control (IoC), which is a key feature of the Spring Framework. + +**Spring-AOP** + +This module integrates the aspect-oriented programming (AOP) into the Spring Framework, making it easy to manage any object with the Spring Framework. The Spring-AOP module provides a transaction management service for objects in Spring-based applications, allowing applications to perform declarative transaction management without EJB components. + +**Spring-Web** + +This module is built on top of the Spring-Context module and provides context for web-based applications. + +**Spring-Webmvc** + +This module implements all the basic features of a core spring framework. It helps build web applications and incorporates a large number of view technologies. The MVC framework becomes highly configurable using the policy interface. + +According to the preceding description, the Spring-Beans (implementation package of IOC) and the Spring-AOP (implementation package of AOP) are the basis of the entire framework, and Spring-Core is the core of the entire framework. Spring-Context provides the context environment and binds each module. The web functions are implemented by Spring-Web and Spring-Webmvc. + +### Spring Boot and Spring Cloud + +After introducing the Spring Framework to the local Maven repository, you can use this framework to build Maven for Java programs. However, Spring build requires configuring a large number of XML files, which is complex. Building Spring Boot based on the Spring Framework helps quickly build Spring applications. Spring Cloud is a distributed environment for building Spring Boot, that is, cloud applications. Spring Boot connects the upper layer to the lower layer. + +[Figure 2](#fig1601161484620) shows the relationship between Spring Framework, Spring Boot, and Spring Cloud. + +**Figure 2** Module relationship +![](./figures/zh-cn_image_0296838176.png) + +Spring Boot is a quick configuration solution of Spring and can be used to quickly develop a single microservice. It focuses on conveniently deploying services on a single server. Spring Cloud is a cloud application development tool based on Spring Boot, and is the global service governance framework. Spring Boot can be used for development projects without Spring Cloud, but Spring Cloud cannot be used without Spring Boot. + +## Environment Configuration + +It is recommended that the memory of the deployment environment be greater than 2 GB. + +### Software platform + +| Software |Version Number |Installation Method | +|:--- |:---- |:---- | +| openEuler | 20.03-LTS-SP2 |ISO | +| tar | 1.32 |Yum install | +| wget | 1.20.3 |Yum install | +| git | 2.27 |Yum install | + +### Required dependency packages + +| Software |Version Number |Installation Method | +|:--- |:---- |:---- | +| jdk | 1.8.0 |Refer to Basic Software Installation | +| maven | 3.5.4 |Refer to Basic Software Installation | + +## System Configuration + +### Configuring the Local Yum Source + +If the Internet is available in the environment, you can use the configured source or add other network sources without configuring the local source. + +1. Run the following command to configure the source file and view the repo file of the configured Yum source: + + ``` + # cat /etc/yum.repos.d/openEuler.repo + [base] + name=base + baseurl=file:///mnt + enable=1 + gpgcheck=0 + ``` + +2. Run the following command to mount the source image: + + ``` + # mount /root/openEuler-20.03-LTS-SP2-everything-aarch64-dvd.iso /mnt + ``` + +## Software Compilation + +### Using the Local Yum Source to Install Basic Software + +1. Run the following command to install the Maven build tool: + + ``` + # yum -y install maven + ``` + +2. Run the following command to install JDK using the Yum source: + + ``` + # yum -y install java-1.8.0-openjdk-devel + ``` + +3. Verify the installation. After the installation is completed, run the following commands to check the Maven and Java versions and the javac usage: + + ``` + # mvn -version + # java -version + # javac -help + ``` + + ![](./figures/install1.png) + +### Installing Spring Framework to the Local Maven Repository + +1. Run the following commands to obtain the Spring Framework source code package: + + ``` + # cd /home + # wget https://github.com/Spring-projects/Spring-framework/archive/v5.2.10.RELEASE.tar.gz + # tar -xvf v5.2.10.RELEASE.tar.gz + ``` + +2. Run the following commands to compile the Spring Framework source code package. If the compilation is successful, the following information is displayed: + + ``` + # cd /home/spring-framework-5.2.10.RELEASE + # ./gradlew build + ``` + + ![](./figures/zh-cn_image_0296838182.png) + +3. Run the following command to install Spring Framework to the local Maven repository: + + ``` + # ./gradlew publishToMavenLocal -x javadoc -x dokka -x asciidoctor + ``` + + After the installation is completed, the `springframework` folder is generated in `/root/.m2/repository/org/`. + + ![](./figures/zh-cn_image_0296838184.png) + +### Compiling Tomcat Cases of the Spring Boot Project + +1. Run the following commands to obtain the case source code: + + ``` + # cd /home + # wget https://github.com/Spring-projects/Spring-boot/archive/v1.5.4.RELEASE.tar.gz + # tar -xvf v1.5.4.RELEASE.tar.gz + # cd /home/spring-boot-1.5.4.RELEASE/spring-boot-samples/spring-boot-sample-tomcat + ``` + +2. Run the following command to compile the project: + + ``` + # mvn package -DskipTests + ``` + +### Compiling Cases of the Spring Cloud Project + +1. Run the following commands to compile the Spring-cloud-gateway-sample project: + + ``` + # cd /home + # git clone https://github.com/Spring-cloud-samples/Spring-cloud-gateway-sample.git + # cd /home/Spring-cloud-gateway-sample + # mvn package -DskipTests + ``` + +2. Run the following commands to compile the zuul-server-1.0.0.BUILD-SNAPSHOT project: + + ``` + # cd /home + # git clone https://github.com/Spring-cloud-samples/zuul-server.git + # cd /home/zuul-server + # mvn package -DskipTests + ``` + +3. Run the following commands to compile the eureka-0.0.1-SNAPSHOT project: + + ``` + # cd /home + # git clone https://github.com/Spring-cloud-samples/eureka.git + # cd /home/eureka + # mvn package -DskipTests + ``` + +4. Run the following commands to compile the feign-eureka project: + + ``` + # cd /home + # git clone https://github.com/Spring-cloud-samples/feign-eureka.git + # cd /home/feign-eureka + # mvn package -DskipTests + ``` + +## Software Running + +### Examples of Running Spring Boot on a Single-Node System + +1. If the spring-boot-sample-tomcat is compiled successfully, the `spring-boot-sample-tomcat-1.5.4.RELEASE.jar` file is generated in the `/home/spring-boot-1.5.4.RELEASE/spring-boot-samples/spring-boot-samples-tomcat/target` folder in the project directory. Run the following command to execute the JAR file: + + ``` + # java -jar spring-boot-sample-tomcat-1.5.4.RELEASE.jar + ``` + +2. After **tomcat start** is displayed on the console, open a new window and run the following command to check the running status of the Tomcat service: + + ``` + # curl http://localhost:8080 + ``` + + If **helloworld** is displayed in the command output, the execution is successful. + +3. To disable the Spring-Boot service, press **Ctrl+C** in the window displayed in Step 1. + +### Examples of Running Spring Cloud on a Single-Node System + +#### Example of running the spring-cloud-gateway-sample project + +1. If the spring-cloud-gateway-sample project is compiled successfully, the `spring-cloud-gateway-sample-0.0.1-SNAPSHOT.jar` file is generated in the `/home/Spring-cloud-gateway-sample/target` folder in the project directory. Run the following commands: + + ``` + # java -jar spring-cloud-gateway-sample-0.0.1-SNAPSHOT.jar + ``` +2. After the message **Started DemogatewayApplication** is displayed on the console, start a new window and run the following command to check the service running status.If the command output shown in the following figure is displayed, the execution is successful. + + ``` + # curl http://localhost:8080/get + ``` + + ![](./figures/run1.png) +3. To stop the service, press **Ctrl+C** in the windows in Step 1. + +#### Example of running the zuul-server project + +1. Run the zuul-server service after running the eureka project. In the `/home/eureka/target` directory, run the following command to start the eureka service: + + ``` + # java -jar eureka-0.0.1-SNAPSHOT.jar + ``` + +2. After the message **Started EurekaApplicattion** is displayed on the console, start a new window and run the following command in the project directory `/home/zuul-server/target` to start the zuul-server service: + + ``` + # java -jar zuul-server-1.0.0.BUILD-SNAPSHOT.jar + ``` + +3. After the message Started ZuulServerApplicatttion is displayed on the console, start a new window and run the following command to check the service running status: + + ``` + # curl http://localhost:8765 + ``` + + After the zuul-server service is started, the console displays the access port 8765. When you access the local port 8765 using curl, the 404 information with the timestamp is returned, and an access event is recorded on the server. + + The following figure shows how to access the port 8765 using curl: + + ![](./figures/run3.png) + + The following figure shows the log information printed by the server when the user accesses the port: + + ![](./figures/run4.png) + +4. To stop the service, press **Ctrl+C** in the windows in Step 2 and Step 3. + +#### Example of running the feign-eureka project + +1. Run the zuul-server service after running the eureka project. In the `/home/eureka/target` directory, run the following command to start the eureka service: + + ``` + # java -jar eureka-0.0.1-SNAPSHOT.jar + ``` + +2. After the message **Started EurekaApplicattion** is displayed on the console, start a new window and run the following command in the project directory `/home/feign-eureka/server/target` to start the zuul-server service: + + ``` + # java -jar feign-eureka-hello-server-0.0.1-SNAPSHOT.jar + ``` + +3. After the message **Started HelloServerApplication** is displayed on the console, start a new window and run the following command in the project directory `/home/feign-eureka/client/target` to start the zuul-server service: + + ``` + # java -jar feign-eureka-hello-client-0.0.1-SNAPSHOT.jar + ``` + +4. After the message **Started HelloClientApplication** is displayed on the console, start a new window and run the following command to check the service running status: + + ``` + # curl http://localhost:7211 + ``` + + After the service is started, you can see that port 7211 is enabled on the client console. Access this port using curl to obtain the Hello Server information. + + The following figure shows the opened port 7211 of the feign-eureka project: + + ![](./figures/run5.png) + + Access the feign-eureka service to view the returned result, as shown in the following figure: + + ![](./figures/run6.png) + +## FAQs + +### Spring-webmvc:test Fails During Spring Framework Compilation + +**Symptom** + +The assertion in MvcNamespaceTests.java fails to pass the test. The following figure shows the failure message: + +![](./figures/zh-cn_image_0296838200.png) + +**Cause Analysis** + +There is an 8-hour difference between the message return time displayed on two servers. + +**Solution** + +Modify the `spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java` file in the project directory. + +Forcibly set the date member time of the handler to **0**, which is the same as the default time converted from the local date. + +![](./figures/zh-cn_image_0296838204.png) + +### Fails to Execute the asciidoctor Task + +**Symptom** + +The system prompts that the `/root/.gem/jruby/1.9` folder cannot be found. + +![](./figures/zh-cn_image_0296838206.png) + +**Cause Analysis** + +The Gradle release used by some Spring Framework versions may have problems when running on JDK 9 (due to the upgrade from AspectJ to 1.9). + +**Solution** + +Run the **./gradlew clean test** command to build the environment. + +### Fails to Execute the Spring-test:compileJava Task + +**Symptom** + +The Spring-test:compileJava task fails to be executed, and the error message in the following figure is displayed: + +![](./figures/zh-cn_image_0296838208.png) + +**Cause Analysis** + +The error message is displayed due to the warning. According to the cause analysis, some old packages do not exist in the repo (the repo source is specified by the **build.gradle** script). As a result, a warning is reported during compilation. + +**Solution** + +Edit the **build.gradle** script of the project and delete the **-Werror** option from the compilation parameters. + +![](./figures/zh-cn_image_0296838210.png) + +### The repo Source Is Invalid + +**Symptom** + +The repo source is invalid, and the error message in the following figure is displayed: + +![](./figures/zh-cn_image_0296838212.png) + +**Cause Analysis** + +This issue occasionally occurs because the network is unstable or the repo source specified in the compilation script fails to provide the required package. + +**Solution** + +Check whether the repo source settings of the **build.gradle** file are correct. Log in to the repo source and check whether any file is missing. + +![](./figures/zh-cn_image_0296838214.png) + +The following valid repo sources are for reference: + +[https://repo.Spring.io/plugins-release](https://repo.Spring.io/plugins-release) + +[https://repo.Springsource.org/plugins-release](https://repo.Springsource.org/plugins-release) + +### Build Failed Due to Timeout Error + +**Symptom** + +The network-related modules fail to pass the test, and the message Task: spring-webflux:test FAILED is displayed. In addition, the code line that fails is not reported in each time of compilation. + +**Cause Analysis** + +According to the code analysis, the build fails because the response from the remote service is not received within the specified period and a timeout error occurs. + +![](./figures/x86_build_fail.png) + +**Solution** + +Prolong the timeout period based on the code line prompted in the error message. You can modify .verify\(Duration.ofSeconds\(TIMEOUT\)\) or .block\(TIMEOUT\) in the code prompted to double the value of TIMEOUT. For example, the timeout period is changed from 5 seconds to 10 seconds in the following figure: + +![](./figures/modify_timeout_value.png) diff --git a/docs/en/docs/thirdparty_migration/thidrparty.md b/docs/en/docs/thirdparty_migration/thidrparty.md new file mode 100644 index 0000000000000000000000000000000000000000..892e057a4f05528172f3c770ee8bea4663e06374 --- /dev/null +++ b/docs/en/docs/thirdparty_migration/thidrparty.md @@ -0,0 +1,5 @@ +# Third-Party Software Porting Guide + +This document helps you quickly port and deploy third-party software on openEuler, including Spring (Spring Framework, Spring Boot, and Spring Cloud), OpenStack, and Kubernetes. + +This document is intended for community developers, open source enthusiasts, and partners who use the openEuler OS and intend to learn more about third-party software. Basic knowledge about the Linux OS is required for reading this document. \ No newline at end of file diff --git a/docs/en/menu/index.md b/docs/en/menu/index.md new file mode 100644 index 0000000000000000000000000000000000000000..518405d79d4b8fbfc6dbe20076c0d166fea1a3a7 --- /dev/null +++ b/docs/en/menu/index.md @@ -0,0 +1,179 @@ +--- +headless: true +--- +- [Terms of Use]({{< relref "./docs/Releasenotes/terms-of-use.md" >}}) +- [Release Notes]({{< relref "./docs/Releasenotes/release_notes.md" >}}) + - [User Notice]({{< relref "./docs/Releasenotes/user-notice.md" >}}) + - [Introduction]({{< relref "./docs/Releasenotes/introduction.md" >}}) + - [Installing the OS]({{< relref "./docs/Releasenotes/installing-the-os.md" >}}) + - [Key Features]({{< relref "./docs/Releasenotes/key-features.md" >}}) + - [Interface Change]({{< relref "./docs/Releasenotes/interface-change.md" >}}) + - [Known Issues]({{< relref "./docs/Releasenotes/known-issues.md" >}}) + - [Resolved Issues]({{< relref "./docs/Releasenotes/resolved-issues.md" >}}) + - [Common Vulnerabilities and Exposures]({{< relref "./docs/Releasenotes/cve.md" >}}) + - [Source Code]({{< relref "./docs/Releasenotes/source-code.md" >}}) + - [Contribution]({{< relref "./docs/Releasenotes/contribution.md" >}}) + - [appendix]({{< relref "./docs/Releasenotes/appendix.md" >}}) + - [Acknowledgment]({{< relref "./docs/Releasenotes/acknowledgment.md" >}}) +- [Quick Start]({{< relref "./docs/Quickstart/quick-start.md" >}}) +- [Installation Guide]({{< relref "./docs/Installation/Installation.md" >}}) + - [Installation on Servers]({{< relref "./docs/Installation/install-server.md" >}}) + - [Installation Preparations]({{< relref "./docs/Installation/installation-preparations.md" >}}) + - [Installation Mode]({{< relref "./docs/Installation/installation-mode.md" >}}) + - [Installation Guideline]({{< relref "./docs/Installation/installation-guideline.md" >}}) + - [Using Kickstart for Automatic Installation]({{< relref "./docs/Installation/using-kickstart-for-automatic-installation.md" >}}) + - [FAQs]({{< relref "./docs/Installation/faqs.md" >}}) + - [Installation on Raspberry Pi]({{< relref "./docs/Installation/install-pi.md" >}}) + - [Installation Preparations]({{< relref "./docs/Installation/Installation-Preparations1.md" >}}) + - [Installation Mode]({{< relref "./docs/Installation/Installation-Modes1.md" >}}) + - [Installation Guideline]({{< relref "./docs/Installation/Installation-Guide1" >}}) + - [FAQs]({{< relref "./docs/Installation/FAQ1.md" >}}) + - [More Resources]({{< relref "./docs/Installation/More-Resources.md" >}}) +- [Administrator Guide]({{< relref "./docs/Administration/administration.md" >}}) + - [Viewing System Information]({{< relref "./docs/Administration/viewing-system-information.md" >}}) + - [Basic Configuration]({{< relref "./docs/Administration/basic-configuration.md" >}}) + - [User and User Group Management]({{< relref "./docs/Administration/user-and-user-group-management.md" >}}) + - [Using the DNF to Manage Software Packages]({{< relref "./docs/Administration/using-the-dnf-to-manage-software-packages.md" >}}) + - [Service Management]({{< relref "./docs/Administration/service-management.md" >}}) + - [Process Management]({{< relref "./docs/Administration/process-management.md" >}}) + - [Configuring the Network]({{< relref "./docs/Administration/configuring-the-network.md" >}}) + - [Managing Hard Disks Through LVM]({{< relref "./docs/Administration/managing-hard-disks-through-lvm.md" >}}) + - [Using the KAE]({{< relref "./docs/Administration/using-the-kae.md" >}}) + - [Configuring Services]({{< relref "./docs/Administration/configuring-services.md" >}}) + - [Configuring the Repo Server]({{< relref "./docs/Administration/configuring-the-repo-server.md" >}}) + - [Configuring the FTP Server]({{< relref "./docs/Administration/configuring-the-ftp-server.md" >}}) + - [Configuring the Web Server]({{< relref "./docs/Administration/configuring-the-web-server.md" >}}) + - [Setting Up the Database Server]({{< relref "./docs/Administration/setting-up-the-database-server.md" >}}) + - [FAQs]({{< relref "./docs/Administration/faqs.md" >}}) +- [Security Hardening Guide]({{< relref "./docs/SecHarden/secHarden.md" >}}) + - [OS Hardening Overview]({{< relref "./docs/SecHarden/os-hardening-overview.md" >}}) + - [Security Hardening Guide]({{< relref "./docs/SecHarden/security-hardening-guide.md" >}}) + - [Account Passwords]({{< relref "./docs/SecHarden/account-passwords.md" >}}) + - [Authentication and Authorization]({{< relref "./docs/SecHarden/authentication-and-authorization.md" >}}) + - [System Services]({{< relref "./docs/SecHarden/system-services.md" >}}) + - [File Permissions]({{< relref "./docs/SecHarden/file-permissions.md" >}}) + - [Kernel Parameters]({{< relref "./docs/SecHarden/kernel-parameters.md" >}}) + - [SELinux Configuration]({{< relref "./docs/SecHarden/selinux-configuration.md" >}}) + - [Security Hardening Tools]({{< relref "./docs/SecHarden/security-hardening-tools.md" >}}) + - [Appendix]({{< relref "./docs/SecHarden/appendix.md" >}}) +- [Virtualization User Guide]({{< relref "./docs/Virtualization/virtualization.md" >}}) + - [Introduction to Virtualization]({{< relref "./docs/Virtualization/introduction-to-virtualization.md" >}}) + - [Installation to Virtualization]({{< relref "./docs/Virtualization/installation-to-virtualization.md" >}}) + - [Environment Preparation]({{< relref "./docs/Virtualization/environment-preparation.md" >}}) + - [VM Configuration]({{< relref "./docs/Virtualization/vm-configuration.md" >}}) + - [Managing VMs]({{< relref "./docs/Virtualization/managing-vms.md" >}}) + - [VM Live Migration]({{< relref "./docs/Virtualization/vm-live-migration.md" >}}) + - [System Resource Management]({{< relref "./docs/Virtualization/system-resource-management.md" >}}) + - [Managing Devices]({{< relref "./docs/Virtualization/managing-devices.md" >}}) + - [Best Practices]({{< relref "./docs/Virtualization/best-practices.md" >}}) + - [Tool Guide]({{< relref "./docs/Virtualization/tool-guide.md" >}}) + - [vmtop]({{< relref "./docs/Virtualization/vmtop.md" >}}) + - [LibcarePlus]({{< relref "./docs/Virtualization/LibcarePlus.md" >}}) + - [Appendix]({{< relref "./docs/Virtualization/appendix.md" >}}) +- [StratoVirt Virtualization User Guide]({{< relref "./docs/StratoVirt/StratoVrit_guidence.md" >}}) + - [Introduction to StratoVirt]({{< relref "./docs/StratoVirt/StratoVirt_intoduction.md" >}}) + - [Installing StratoVirt]({{< relref "./docs/StratoVirt/Install_StratoVirt.md" >}}) + - [Preparing the Environment]({{< relref "./docs/StratoVirt/Prepare_env.md" >}}) + - [Configuring VMs]({{< relref "./docs/StratoVirt/VM_configuration.md" >}}) + - [Managing VMs]({{< relref "./docs/StratoVirt/VM_management.md" >}}) + - [Interconnecting with iSula Security Containers]({{< relref "./docs/StratoVirt/Interconnect_isula.md" >}}) + - [Best Practices]({{< relref "./docs/StratoVirt/Best_practices.md" >}}) +- [Container User Guide]({{< relref "./docs/Container/container.md" >}}) + - [iSulad Container Engine]({{< relref "./docs/Container/isulad-container-engine.md" >}}) + - [Installation, Upgrade and Uninstallation]({{< relref "./docs/Container/installation-upgrade-Uninstallation.md" >}}) + - [Installation and Configuration]({{< relref "./docs/Container/installation-configuration.md" >}}) + - [Upgrade Methods]({{< relref "./docs/Container/upgrade-methods.md" >}}) + - [Uninstallation]({{< relref "./docs/Container/uninstallation.md" >}}) + - [Application Scenarios]({{< relref "./docs/Container/application-scenarios.md" >}}) + - [Container Management]({{< relref "./docs/Container/container-management.md" >}}) + - [Interconnection with the CNI Network]({{< relref "./docs/Container/interconnection-with-the-cni-network.md" >}}) +}) + - [Container Resource Management]({{< relref "./docs/Container/container-resource-management.md" >}}) + - [Privileged Container]({{< relref "./docs/Container/privileged-container.md" >}}) + - [CRI]({{< relref "./docs/Container/cri.md" >}}) + - [Image Management]({{< relref "./docs/Container/image-management.md" >}}) + - [Checking the Container Health Status]({{< relref "./docs/Container/checking-the-container-health-status.md" >}}) + - [Querying Information]({{< relref "./docs/Container/querying-information.md" >}}) + - [Security Features]({{< relref "./docs/Container/security-features.md" >}}) + - [Supporting OCI hooks]({{< relref "./docs/Container/supporting-oci-hooks.md" >}}) + - [Local Volume Management]({{< relref "./docs/Container/local-volume-management.md" >}}) + - [Appendix]({{< relref "./docs/Container/appendix.md" >}}) + - [System Container]({{< relref "./docs/Container/system-container.md" >}}) + - [Installation Guideline]({{< relref "./docs/Container/installation-guideline.md" >}}) + - [Usage Guide]({{< relref "./docs/Container/usage-guide.md" >}}) + - [Specifying Rootfs to Create a Container]({{< relref "./docs/Container/specifying-rootfs-to-create-a-container.md" >}}) + - [Using systemd to Start a Container]({{< relref "./docs/Container/using-systemd-to-start-a-container.md" >}}) + - [Reboot or Shutdown in a Container]({{< relref "./docs/Container/reboot-or-shutdown-in-a-container.md" >}}) + - [Configurable Cgroup Path]({{< relref "./docs/Container/configurable-cgroup-path.md" >}}) + - [Writable Namespace Kernel Parameters]({{< relref "./docs/Container/writable-namespace-kernel-parameters.md" >}}) + - [Shared Memory Channels]({{< relref "./docs/Container/shared-memory-channels.md" >}}) + - [Dynamically Loading the Kernel Module]({{< relref "./docs/Container/dynamically-loading-the-kernel-module.md" >}}) + - [Environment Variable Persisting]({{< relref "./docs/Container/environment-variable-persisting.md" >}}) + - [Maximum Number of Handles]({{< relref "./docs/Container/maximum-number-of-handles.md" >}}) + - [Security and Isolation]({{< relref "./docs/Container/security-and-isolation.md" >}}) + - [Dynamically Managing Container Resources \\(syscontainer-tools\\)]({{< relref "./docs/Container/dynamically-managing-container-resources-(syscontainer-tools).md" >}}) + - [Appendix]({{< relref "./docs/Container/appendix-1.md" >}}) + - [Secure Container]({{< relref "./docs/Container/secure-container.md" >}}) + - [Installation and Deployment]({{< relref "./docs/Container/installation-and-deployment-1.md" >}}) + - [Application Scenarios]({{< relref "./docs/Container/application-scenarios-2.md" >}}) + - [Managing the Lifecycle of a Secure Container]({{< relref "./docs/Container/managing-the-lifecycle-of-a-secure-container.md" >}}) + - [Configuring Resources for a Secure Container]({{< relref "./docs/Container/configuring-resources-for-a-secure-container.md" >}}) + - [Configuring Networking for a Secure Container]({{< relref "./docs/Container/configuring-networking-for-a-secure-container.md" >}}) + - [Monitoring Secure Containers]({{< relref "./docs/Container/monitoring-secure-containers.md" >}}) + - [Appendix]({{< relref "./docs/Container/appendix-2.md" >}}) + - [Docker Container]({{< relref "./docs/Container/docker-container.md" >}}) + - [Installation and Deployment]({{< relref "./docs/Container/installation-and-deployment-2.md" >}}) + - [Container Management]({{< relref "./docs/Container/container-management-1.md" >}}) + - [Image Management]({{< relref "./docs/Container/image-management-1.md" >}}) + - [Command Reference]({{< relref "./docs/Container/command-reference.md" >}}) + - [Container Engine]({{< relref "./docs/Container/container-engine.md" >}}) + - [Container Management]({{< relref "./docs/Container/container-management-2.md" >}}) + - [Image Management]({{< relref "./docs/Container/image-management-2.md" >}}) + - [Statistics]({{< relref "./docs/Container/statistics.md" >}}) + - [Container Tools]({{< relref "./docs/Container/container-tools.md" >}}) + - [Image Building]({{< relref "./docs/Container/isula-build.md" >}}) + - [Container Migration]({{< relref "./docs/Container/isula-transform.md" >}}) +- [A-Tune User Guide]({{< relref "./docs/A-Tune/A-Tune.md" >}}) + - [Getting to Know A-Tune]({{< relref "./docs/A-Tune/getting-to-know-a-tune.md" >}}) + - [Installation and Deployment]({{< relref "./docs/A-Tune/installation-and-deployment.md" >}}) + - [Application Scenarios]({{< relref "./docs/A-Tune/application-scenarios.md" >}}) + - [FAQs]({{< relref "./docs/A-Tune/faqs.md" >}}) + - [Appendixes]({{< relref "./docs/A-Tune/appendixes.md" >}}) +- [Application Development Guide]({{< relref "./docs/ApplicationDev/application-development.md" >}}) + - [Preparation]({{< relref "./docs/ApplicationDev/preparation.md" >}}) + - [Using GCC for Compilation]({{< relref "./docs/ApplicationDev/using-gcc-for-compilation.md" >}}) + - [Using Make for Compilation]({{< relref "./docs/ApplicationDev/using-make-for-compilation.md" >}}) + - [Using JDK for Compilation]({{< relref "./docs/ApplicationDev/using-jdk-for-compilation.md" >}}) + - [Building an RPM Package]({{< relref "./docs/ApplicationDev/building-an-rpm-package.md" >}}) +- [Kubernetes Cluster Deployment Guide]({{< relref "./docs/Kubernetes/Kubernetes.md" >}}) + - [Preparing VMs]( {{< relref "./docs/Kubernetes/preparing-VMs.md">}}) + - [Deploying a Kubernetes Cluster]({{< relref "./docs/Kubernetes/deploying-a-Kubernetes-cluster.md" >}}) + - [Installing the Kubernetes Software Package]( {{< relref "./docs/Kubernetes/installing-the-Kubernetes-software-package.md" >}}) + - [Preparing Certificates] ({{< relref "./docs/Kubernetes/preparing-certificates.md" >}}) + - [Installing ETCD] ({{< relref "./docs/Kubernetes/installing-etcd.md" >}}) + - [Deploying Components on the Control Plane]({{< relref "./docs/Kubernetes/deploying-control-plane-components.md" >}}) + - [Deploying a Node Component]({{< relref "./docs/Kubernetes/deploying-a-node-component.md" >}}) + - [Running the Test Pod]({{< relref "./docs/Kubernetes/running-the-test-pod.md" >}}) +- [Third-Party Software Porting Guide]({{< relref "./docs/thirdparty_migration/thidrparty.md" >}}) + - [Guide to Porting OpenStack-Train to openEuler]({{< relref "./docs/thirdparty_migration/openstack-train.md" >}}) + - [Guide to Porting Kubernetes to openEuler]({{< relref "./docs/thirdparty_migration/k8sinstall.md" >}}) + - [Guide to Porting Spring Framework to openEuler]({{< relref "./docs/thirdparty_migration/springframework.md" >}}) + - [Guide to Porting OpenStack-Rocky to openEuler]({{< relref "./docs/thirdparty_migration/OpenStack-Rocky.md" >}}) + - [Guide to Porting OpenStack-Queens to openEuler]({{< relref "./docs/thirdparty_migration/OpenStack-Queens.md" >}}) +- [Desktop Environment User Guide]({{< relref "./docs/desktop/desktop.md" >}}) + - [UKUI]({{< relref "./docs/desktop/ukui.md" >}}) + - [UKUI Installation]({{< relref "./docs/desktop/install-UKUI.md" >}}) + - [UKUI User Guide]({{< relref "./docs/desktop/UKUI-user-guide.md" >}}) + - [DDE]({{< relref "./docs/desktop/dde.md" >}}) + - [DDE Installation]({{< relref "./docs/desktop/install-DDE.md" >}}) + - [DDE User Guide]({{< relref "./docs/desktop/DDE-User-Manual.md" >}}) + - [Xfce]({{< relref "./docs/desktop/xfce.md" >}}) + - [Xfce Installation]({{< relref "./docs/desktop/Install_XFCE.md" >}}) + - [Xfce User Guide]({{< relref "./docs/desktop/Xfce_userguide.md" >}}) +- [HA User Guide]({{< relref "./docs/HA/HAuserguide.md" >}}) +- [secGear Development Guide]({{< relref "./docs/secGear/secGear.md" >}}) + - [Introduction to secGear]({{< relref "./docs/secGear/introduction-to-secGear.md" >}}) + - [Installing secGear]({{< relref "./docs/secGear/installing-secGear.md" >}}) + - [secGear Development Guide]( {{< relref "./docs/secGear/secGear-development-guide" >}}) + - [Using the secGear Tool](For {{< relref "./docs/secGear/using-the-secGear-tool.md" >}}) + - [API Description]({{< relref "./docs/secGear/api-description.md" >}}) diff --git a/content/zh/docs/A-Tune/A-Tune.md b/docs/zh/docs/A-Tune/A-Tune.md similarity index 100% rename from content/zh/docs/A-Tune/A-Tune.md rename to docs/zh/docs/A-Tune/A-Tune.md diff --git a/content/zh/docs/A-Tune/figures/zh-cn_image_0213178479.png b/docs/zh/docs/A-Tune/figures/zh-cn_image_0213178479.png similarity index 100% rename from content/zh/docs/A-Tune/figures/zh-cn_image_0213178479.png rename to docs/zh/docs/A-Tune/figures/zh-cn_image_0213178479.png diff --git a/content/zh/docs/A-Tune/figures/zh-cn_image_0213178480.png b/docs/zh/docs/A-Tune/figures/zh-cn_image_0213178480.png similarity index 100% rename from content/zh/docs/A-Tune/figures/zh-cn_image_0213178480.png rename to docs/zh/docs/A-Tune/figures/zh-cn_image_0213178480.png diff --git a/content/zh/docs/A-Tune/figures/zh-cn_image_0214540398.png b/docs/zh/docs/A-Tune/figures/zh-cn_image_0214540398.png similarity index 100% rename from content/zh/docs/A-Tune/figures/zh-cn_image_0214540398.png rename to docs/zh/docs/A-Tune/figures/zh-cn_image_0214540398.png diff --git a/docs/zh/docs/A-Tune/figures/zh-cn_image_0227497000.png b/docs/zh/docs/A-Tune/figures/zh-cn_image_0227497000.png new file mode 100644 index 0000000000000000000000000000000000000000..164276104a55cb161f4fc47f8728d90dd16746e1 Binary files /dev/null and b/docs/zh/docs/A-Tune/figures/zh-cn_image_0227497000.png differ diff --git a/docs/zh/docs/A-Tune/figures/zh-cn_image_0227497343.png b/docs/zh/docs/A-Tune/figures/zh-cn_image_0227497343.png new file mode 100644 index 0000000000000000000000000000000000000000..2637a96f0a4fdbfd4550ac13728ffcb68c8d6d5c Binary files /dev/null and b/docs/zh/docs/A-Tune/figures/zh-cn_image_0227497343.png differ diff --git a/content/zh/docs/A-Tune/figures/zh-cn_image_0231122163.png b/docs/zh/docs/A-Tune/figures/zh-cn_image_0231122163.png similarity index 100% rename from content/zh/docs/A-Tune/figures/zh-cn_image_0231122163.png rename to docs/zh/docs/A-Tune/figures/zh-cn_image_0231122163.png diff --git a/docs/zh/docs/A-Tune/figures/zh-cn_image_0245342444.png b/docs/zh/docs/A-Tune/figures/zh-cn_image_0245342444.png new file mode 100644 index 0000000000000000000000000000000000000000..10f0fceb42c00c80ef49decdc0c480eb04c2ca6d Binary files /dev/null and b/docs/zh/docs/A-Tune/figures/zh-cn_image_0245342444.png differ diff --git a/content/zh/docs/ApplicationDev/public_sys-resources/icon-caution.gif b/docs/zh/docs/A-Tune/public_sys-resources/icon-caution.gif similarity index 100% rename from content/zh/docs/ApplicationDev/public_sys-resources/icon-caution.gif rename to docs/zh/docs/A-Tune/public_sys-resources/icon-caution.gif diff --git a/content/zh/docs/ApplicationDev/public_sys-resources/icon-danger.gif b/docs/zh/docs/A-Tune/public_sys-resources/icon-danger.gif similarity index 100% rename from content/zh/docs/ApplicationDev/public_sys-resources/icon-danger.gif rename to docs/zh/docs/A-Tune/public_sys-resources/icon-danger.gif diff --git a/content/zh/docs/Container/public_sys-resources/icon-note.gif b/docs/zh/docs/A-Tune/public_sys-resources/icon-note.gif similarity index 100% rename from content/zh/docs/Container/public_sys-resources/icon-note.gif rename to docs/zh/docs/A-Tune/public_sys-resources/icon-note.gif diff --git a/content/zh/docs/Container/public_sys-resources/icon-notice.gif b/docs/zh/docs/A-Tune/public_sys-resources/icon-notice.gif similarity index 100% rename from content/zh/docs/Container/public_sys-resources/icon-notice.gif rename to docs/zh/docs/A-Tune/public_sys-resources/icon-notice.gif diff --git a/content/zh/docs/ApplicationDev/public_sys-resources/icon-tip.gif b/docs/zh/docs/A-Tune/public_sys-resources/icon-tip.gif similarity index 100% rename from content/zh/docs/ApplicationDev/public_sys-resources/icon-tip.gif rename to docs/zh/docs/A-Tune/public_sys-resources/icon-tip.gif diff --git a/content/zh/docs/ApplicationDev/public_sys-resources/icon-warning.gif b/docs/zh/docs/A-Tune/public_sys-resources/icon-warning.gif similarity index 100% rename from content/zh/docs/ApplicationDev/public_sys-resources/icon-warning.gif rename to docs/zh/docs/A-Tune/public_sys-resources/icon-warning.gif diff --git "a/content/zh/docs/A-Tune/\344\275\277\347\224\250\346\226\271\346\263\225.md" "b/docs/zh/docs/A-Tune/\344\275\277\347\224\250\346\226\271\346\263\225.md" similarity index 70% rename from "content/zh/docs/A-Tune/\344\275\277\347\224\250\346\226\271\346\263\225.md" rename to "docs/zh/docs/A-Tune/\344\275\277\347\224\250\346\226\271\346\263\225.md" index 9839fd35342575be2482db35d4c716361c24d917..32beaa75c305259a590649a352e60ac5c48bef77 100644 --- "a/content/zh/docs/A-Tune/\344\275\277\347\224\250\346\226\271\346\263\225.md" +++ "b/docs/zh/docs/A-Tune/\344\275\277\347\224\250\346\226\271\346\263\225.md" @@ -2,6 +2,7 @@ 用户可以通过命令行客户端atune-adm使用A-Tune提供的功能。本章介绍A-Tune客户端包含的功能和使用方法。 + - [使用方法](#使用方法) - [总体说明](#总体说明) - [查询负载类型](#查询负载类型) @@ -42,10 +43,6 @@ - define、update、undefine、collection、train、upgrade不支持远程执行。 - 命令格式中,\[ \] 表示参数可选,<\> 表示参数必选,具体参数由实际情况确定。 -- 命令格式中,各命令含义如下: - - WORKLOAD\_TYPE:用户自定义负载类型的名称,负载支持的类型参考list命令查询结果。 - - PROFILE\_NAME:用户自定义profile的名称 - - PROFILE\_PATH:用户自定义profile的路径 ## 查询负载类型 @@ -53,7 +50,7 @@ ### 功能描述 -查询系统当前支持的workload\_type和对应的profile,以及当前处于active状态的profile。 +查询系统当前支持的profile,以及当前处于active状态的profile。 ### 命令格式 @@ -62,35 +59,109 @@ ### 使用示例 ``` -# atune-adm list - -Support WorkloadTypes: -+-----------------------------------+------------------------+-----------+ -| WorkloadType | ProfileName | Active | -+===================================+========================+===========+ -| default | default | true | -+-----------------------------------+------------------------+-----------+ -| webserver | ssl_webserver | false | -+-----------------------------------+------------------------+-----------+ -| big_database | database | false | -+-----------------------------------+------------------------+-----------+ -| big_data | big_data | false | -+-----------------------------------+------------------------+-----------+ -| in-memory_computing | in-memory_computing | false | -+-----------------------------------+------------------------+-----------+ -| in-memory_database | in-memory_database | false | -+-----------------------------------+------------------------+-----------+ -| single_computer_intensive_jobs | compute-intensive | false | -+-----------------------------------+------------------------+-----------+ -| communication | rpc_communication | false | -+-----------------------------------+------------------------+-----------+ -| idle | default | false | -+-----------------------------------+------------------------+-----------+ +# atune-adm list + +Support profiles: ++------------------------------------------------+-----------+ +| ProfileName | Active | ++================================================+===========+ +| arm-native-android-container-robox | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-fio | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-lmbench | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-netperf | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-stream | false | ++------------------------------------------------+-----------+ +| basic-test-suite-euleros-baseline-unixbench | false | ++------------------------------------------------+-----------+ +| basic-test-suite-speccpu-speccpu2006 | false | ++------------------------------------------------+-----------+ +| basic-test-suite-specjbb-specjbb2015 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-hdfs-dfsio-hdd | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-hdfs-dfsio-ssd | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-bayesian | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-kmeans | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql1 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql10 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql2 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql3 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql4 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql5 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql6 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql7 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql8 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-sql9 | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-tersort | false | ++------------------------------------------------+-----------+ +| big-data-hadoop-spark-wordcount | false | ++------------------------------------------------+-----------+ +| cloud-compute-kvm-host | false | ++------------------------------------------------+-----------+ +| database-mariadb-2p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| database-mariadb-4p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| database-mongodb-2p-sysbench | false | ++------------------------------------------------+-----------+ +| database-mysql-2p-sysbench-hdd | false | ++------------------------------------------------+-----------+ +| database-mysql-2p-sysbench-ssd | false | ++------------------------------------------------+-----------+ +| database-postgresql-2p-sysbench-hdd | false | ++------------------------------------------------+-----------+ +| database-postgresql-2p-sysbench-ssd | false | ++------------------------------------------------+-----------+ +| default-default | false | ++------------------------------------------------+-----------+ +| docker-mariadb-2p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| docker-mariadb-4p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| hpc-gatk4-human-genome | false | ++------------------------------------------------+-----------+ +| in-memory-database-redis-redis-benchmark | false | ++------------------------------------------------+-----------+ +| middleware-dubbo-dubbo-benchmark | false | ++------------------------------------------------+-----------+ +| storage-ceph-vdbench-hdd | false | ++------------------------------------------------+-----------+ +| storage-ceph-vdbench-ssd | false | ++------------------------------------------------+-----------+ +| virtualization-consumer-cloud-olc | false | ++------------------------------------------------+-----------+ +| virtualization-mariadb-2p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| virtualization-mariadb-4p-tpcc-c3 | false | ++------------------------------------------------+-----------+ +| web-apache-traffic-server-spirent-pingpo | false | ++------------------------------------------------+-----------+ +| web-nginx-http-long-connection | true | ++------------------------------------------------+-----------+ +| web-nginx-https-short-connection | false | ++------------------------------------------------+-----------+ ``` ->![](public_sys-resources/icon-note.gif) **说明:** ->Active为true表示当前激活的profile,示例表示当前激活的是default类型对应的profile。 +>![](./public_sys-resources/icon-note.gif) **说明:** +>Active为true表示当前激活的profile,示例表示当前激活的profile是web-nginx-http-long-connection。 ## 分析负载类型并自优化 ### analysis @@ -108,6 +179,7 @@ Support WorkloadTypes: - OPTIONS + + + +

参数

描述

@@ -119,19 +191,30 @@ Support WorkloadTypes:

用户自训练产生的新模型

--characterization, -c

+

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

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

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

-

--workload_type, -t

+

--app_type, -t

-

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

+

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

--duration, -d

@@ -264,14 +345,14 @@ example.conf 可以参考如下方式书写(以下各优化项非必填,仅 ### 使用示例 ``` -# atune-adm collection --filename name --interval 5 --duration 1200 --output_path /home/data --disk sda --network eth0 --workload_type test_type +# atune-adm collection --filename name --interval 5 --duration 1200 --output_path /home/data --disk sda --network eth0 --app_type test_type ``` ### train ### 功能描述 -使用采集的数据进行模型的训练。训练时至少采集两种workload\_type的数据,否则训练会出错。 +使用采集的数据进行模型的训练。训练时至少采集两种应用类型的数据,否则训练会出错。 ### 命令格式 @@ -314,18 +395,18 @@ example.conf 可以参考如下方式书写(以下各优化项非必填,仅 ### 功能描述 -删除用户自定义的workload\_type。 +删除用户自定义的profile。 ### 命令格式 -**atune-adm undefine** +**atune-adm undefine** ### 使用示例 -删除自定义的负载类型test\_type。 +删除自定义的profile。 ``` -# atune-adm undefine test_type +# atune-adm undefine test_service-test_app-test_scenario ``` ## 查询profile @@ -334,26 +415,26 @@ example.conf 可以参考如下方式书写(以下各优化项非必填,仅 ### 功能描述 -查看workload\_type对应的profile内容。 +查看对应的profile内容。 ### 命令格式 -**atune-adm info** _ +**atune-adm info** ### 使用示例 -查看webserver的profile内容: +查看web-nginx-http-long-connection的profile内容: ``` -# atune-adm info webserver +# atune-adm info web-nginx-http-long-connection -*** ssl_webserver: +*** web-nginx-http-long-connection: # -# webserver tuned configuration +# nginx http long connection A-Tune configuration # [main] -#TODO CONFIG +include = default-default [kernel_config] #TODO CONFIG @@ -361,11 +442,18 @@ example.conf 可以参考如下方式书写(以下各优化项非必填,仅 [bios] #TODO CONFIG +[bootloader.grub2] +iommu.passthrough = 1 + [sysfs] #TODO CONFIG +[systemctl] +sysmonitor = stop +irqbalance = stop + [sysctl] -fs.file-max=6553600 +fs.file-max = 6553600 fs.suid_dumpable = 1 fs.aio-max-nr = 1048576 kernel.shmmax = 68719476736 @@ -393,36 +481,23 @@ net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 -[systemctl] -sysmonitor=stop -irqbalance=stop - -[bootloader.grub2] -selinux=0 -iommu.passthrough=1 - -[tip] -bind your master process to the CPU near the network = affinity -bind your network interrupt to the CPU that has this network = affinity -relogin into the system to enable limits setting = OS - [script] -openssl_hpre = 0 prefetch = off +ethtool = -X {network} hfunc toeplitz [ulimit] {user}.hard.nofile = 102400 {user}.soft.nofile = 102400 -[affinity.task] -#TODO CONFIG - -[affinity.irq] +[schedule_policy] #TODO CONFIG [check] #TODO CONFIG +[tip] +SELinux provides extra control and security features to linux kernel. Disabling SELinux will improve the performance but may cause security risks. = kernel +disable the nginx log = application ``` ## 更新profile @@ -432,18 +507,18 @@ prefetch = off ### 功能描述 -将workload\_type原来的优化项更新为new.conf中的内容。 +将已有profile中原来的优化项更新为new.conf中的内容。 ### 命令格式 -**atune-adm update** +**atune-adm update** ### 使用示例 -更新负载类型为test\_type,优化项名称为test\_name的优化项为new.conf。 +更新名为test_service-test_app-test_scenario的profile优化项为new.conf。 ``` -# atune-adm update test_type test_name ./new.conf +# atune-adm update test_service-test_app-test_scenario ./new.conf ``` ## 激活profile @@ -451,22 +526,22 @@ prefetch = off ### 功能描述 -手动激活workload\_type对应的profile,使得workload\_type处于active状态。 +手动激活profile,使其处于active状态。 ### 命令格式 -**atune-adm profile **_<_WORKLOAD\_TYPE_\>_ +**atune-adm profile** ### 参数说明 -WORKLOAD\_TYPE支持的类型参考list命令查询结果。 +profile名参考list命令查询结果。 ### 使用示例 -激活webserver对应的profile配置。 +激活web-nginx-http-long-connection对应的profile配置。 ``` -# atune-adm profile webserver +# atune-adm profile web-nginx-http-long-connection ``` ## 回滚profile @@ -556,10 +631,10 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数 ### 命令格式 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >在运行命令前,需要满足如下条件: ->1. 编辑好服务端yaml配置文件,且需要服务端管理员将该配置文件放到服务端的/etc/atuned/tuning/目录下。 ->2. 编辑好客户端yaml配置文件并放在客户端任一目录。 +>1. 服务端的yaml配置文件已经编辑完成并放置于 atuned服务下的/etc/atuned/tuning/目录中。 +>2. 客户端的yaml配置文件已经编辑完成并放置于atuned客户端任意目录下。 **atune-adm tuning** \[OPTIONS\] @@ -568,6 +643,7 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数 - OPTIONS + + + + + + +

参数

描述

@@ -584,11 +660,22 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数

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

--restart, -c

+

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

+

--detail, -d

+

打印tuning过程的详细信息

+
- - >![](public_sys-resources/icon-note.gif) **说明:** - >当使用参数时,上述两个参数需要同时使用,且-p参数后需要跟具体的项目名称。 + + + >![](./public_sys-resources/icon-note.gif) **说明:** + >当使用参数时,-p参数后需要跟具体的项目名称且必须指定该项目yaml文件。 - PROJECT\_YAML:客户端yaml配置文件。 @@ -660,6 +747,7 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数 **表 2** object项配置说明 + - - - - - - - - @@ -769,21 +857,15 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数 - - - - -

配置名称

配置说明

@@ -726,36 +814,36 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数

dtype

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

+

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

枚举

int, string

+

int, float, string

scope

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

+

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

整型

+

整型/浮点型

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

step

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

+

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

整型

+

整型/浮点型

用户自定义

items

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

+

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

整型

+

整型/浮点型

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

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

ref

-

参数的推荐初始值

-

整型或字符串

-

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

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

配置名称

配置说明

@@ -803,6 +885,15 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数

-

engine

+

调优算法

+

字符串

+

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

+

iterations

调优迭代次数

@@ -812,6 +903,51 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数

>=10

random_starts

+

随机迭代次数

+

整型

+

<iterations

+

feature_filter_engine

+

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

+

字符串

+

"lhs"

+

feature_filter_cycle

+

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

+

整型

+

-

+

feature_filter_iters

+

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

+

整型

+

-

+

split_count

+

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

+

整型

+

-

+

benchmark

性能测试脚本

@@ -834,9 +970,12 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数
+ + **表 4** evaluations项配置说明 + - - - +

配置名称

配置说明

@@ -900,102 +1039,60 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数 服务端yaml文件配置示例: ``` -project: "example" -maxiterations: 10 +project: "compress" +maxiterations: 500 startworkload: "" stopworkload: "" object : - - name : "vm.swappiness" + name : "compressLevel" info : - desc : "the vm.swappiness" - get : "sysctl -a | grep vm.swappiness" - set : "sysctl -w vm.swappiness=$value" - needrestart: "false" + desc : "The compresslevel parameter is an integer from 1 to 9 controlling the level of compression" + get : "cat /root/A-Tune/examples/tuning/compress/compress.py | grep 'compressLevel=' | awk -F '=' '{print $2}'" + set : "sed -i 's/compressLevel=\\s*[0-9]*/compressLevel=$value/g' /root/A-Tune/examples/tuning/compress/compress.py" + needrestart : "false" type : "continuous" scope : - - 0 - - 10 - ref : 1 - - - name : "irqbalance" - info : - desc : "system irqbalance" - get : "systemctl status irqbalance" - set : "systemctl $value sysmonitor;systemctl $value irqbalance" - needrestart: "false" - type : "discrete" - options: - - "start" - - "stop" - dtype : "string" - ref : "start" - - - name : "net.tcp_min_tso_segs" - info : - desc : "the minimum tso number" - get : "cat /proc/sys/net/ipv4/tcp_min_tso_segs" - set : "echo $value > /proc/sys/net/ipv4/tcp_min_tso_segs" - needrestart: "false" - type : "continuous" - scope: - 1 - - 16 - ref : 2 + - 9 + dtype : "int" - - name : "prefetcher" + name : "compressMethod" info : - desc : "" - get : "cat /sys/class/misc/prefetch/policy" - set : "echo $value > /sys/class/misc/prefetch/policy" - needrestart: "false" + desc : "The compressMethod parameter is a string controlling the compression method" + get : "cat /root/A-Tune/examples/tuning/compress/compress.py | grep 'compressMethod=' | awk -F '=' '{print $2}' | sed 's/\"//g'" + set : "sed -i 's/compressMethod=\\s*[0-9,a-z,\"]*/compressMethod=\"$value\"/g' /root/A-Tune/examples/tuning/compress/compress.py" + needrestart : "false" type : "discrete" - options: - - "0" - - "15" + options : + - "bz2" + - "zlib" + - "gzip" dtype : "string" - ref : "15" - - - name : "kernel.sched_min_granularity_ns" - info : - desc : "Minimal preemption granularity for CPU-bound tasks" - get : "sysctl kernel.sched_min_granularity_ns" - set : "sysctl -w kernel.sched_min_granularity_ns=$value" - needrestart: "false" - type : "continuous" - scope: - - 5000000 - - 50000000 - ref : 10000000 - - - name : "kernel.sched_latency_ns" - info : - desc : "" - get : "sysctl kernel.sched_latency_ns" - set : "sysctl -w kernel.sched_latency_ns=$value" - needrestart: "false" - type : "continuous" - scope: - - 10000000 - - 100000000 - ref : 16000000 - ``` 客户端yaml文件配置示例: ``` -project: "example" -iterations : 10 -benchmark : "sh /home/Benchmarks/mysql/tunning_mysql.sh" +project: "compress" +engine : "gbrt" +iterations : 20 +random_starts : 10 + +benchmark : "python3 /root/A-Tune/examples/tuning/compress/compress.py" evaluations : - - name: "tps" + name: "time" + info: + get: "echo '$out' | grep 'time' | awk '{print $3}'" + type: "positive" + weight: 20 + - + name: "compress_ratio" info: - get: "echo -e '$out' |grep 'transactions:' |awk '{print $3}' | cut -c 2-" + get: "echo '$out' | grep 'compress_ratio' | awk '{print $3}'" type: "negative" - weight: 100 - threshold: 100 + weight: 80 ``` ### 使用示例 @@ -1003,13 +1100,13 @@ evaluations : - 进行tuning调优 ``` - # atune-adm tuning example-client.yaml + # atune-adm tuning --project compress --detail compress_client.yaml ``` -- 恢复tuning调优前的初始配置,example为yaml文件中的项目名称 +- 恢复tuning调优前的初始配置,compress为yaml文件中的项目名称 ``` - # atune-adm tuning --restore --project example + # atune-adm tuning --restore --project compress ``` diff --git "a/content/zh/docs/A-Tune/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" "b/docs/zh/docs/A-Tune/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" similarity index 32% rename from "content/zh/docs/A-Tune/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" rename to "docs/zh/docs/A-Tune/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" index ba4ec2d291b4cad7ddaf9ec6e4ca274aed275547..e94be143cd47c51dac9cbbf53650cf9e28a07838 100644 --- "a/content/zh/docs/A-Tune/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" +++ "b/docs/zh/docs/A-Tune/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" @@ -2,16 +2,18 @@ 本章介绍如何安装和部署A-Tune。 + - [安装与部署](#安装与部署) - [软硬件要求](#软硬件要求) - [环境准备](#环境准备) - - [安装A-Tune](#安装A-Tune) + - [安装A-Tune](#安装a-tune) - [安装模式介绍](#安装模式介绍) - [安装操作](#安装操作) - - [部署A-Tune](#部署A-Tune) + - [部署A-Tune](#部署a-tune) - [配置介绍](#配置介绍) - - [启动A-Tune](#启动A-Tune) - + - [启动A-Tune](#启动a-tune) + - [启动A-Tune engine](#启动a-tune-engine) + ## 软硬件要求 @@ -21,11 +23,11 @@ ### 软件要求 -- 操作系统:openEuler 20.03 LTS +- 操作系统:openEuler 20.03 LTS SP3 ## 环境准备 -- 安装openEuler系统,安装方法参考《openEuler 20.03 LTS 安装指南》。 +- 安装openEuler系统,安装方法参考《openEuler 20.03 LTS SP3 安装指南》。 - 安装A-Tune需要使用root权限。 @@ -47,7 +49,7 @@ A-Tune支持单机模式和分布式模式安装: 两种安装模式的简单图示如下: -![](figures/zh-cn_image_0231122163.png) +![](./figures/zh-cn_image_0231122163.png) ### 安装操作 @@ -56,7 +58,7 @@ A-Tune支持单机模式和分布式模式安装: 1. 挂载openEuler的iso文件。 ``` - # mount openEuler-20.03-LTS-aarch64-dvd.iso /mnt + # mount openEuler-20.03-LTS-SP3-aarch64-dvd.iso /mnt ``` 2. 配置本地yum源。 @@ -82,13 +84,14 @@ A-Tune支持单机模式和分布式模式安装: ``` -4. 安装A-Tune服务端。 +4. 安装A-Tune服务端。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >本步骤会同时安装服务端和客户端软件包,对于单机部署模式,请跳过**步骤5**。 ``` # yum install atune -y + # yum install atune-engine -y ``` 5. 若为分布式部署,请安装A-Tune客户端。 @@ -104,6 +107,7 @@ A-Tune支持单机模式和分布式模式安装: atune-client-xxx atune-db-xxx atune-xxx + atune-engine-xxx ``` @@ -114,16 +118,37 @@ A-Tune支持单机模式和分布式模式安装: A-Tune配置文件/etc/atuned/atuned.cnf的配置项说明如下: -- A-Tune服务启动配置 +- A-Tune服务启动配置 可根据需要进行修改。 - protocol:系统grpc服务使用的协议,unix或tcp,unix为本地socket通信方式,tcp为socket监听端口方式。默认为unix。 - - address:系统grpc服务的侦听地址,默认为unix socket,若为分布式部署,需修改为侦听的ip地址。 - port:系统grpc服务的侦听端口,范围为0\~65535未使用的端口。如果protocol配置是unix,则不需要配置。 - - rest\_port:系统restservice的侦听端口, 范围为0\~65535未使用的端口。 - - sample\_num:系统执行analysis流程时采集样本的数量。 + - connect:若为集群部署时,atune所在节点的ip列表,ip地址以逗号分隔。 + - rest_host:系统rest service的侦听地址,默认为localhost。 + - rest_port:系统rest service的侦听端口,范围为0~65535未使用的端口,默认为8383。 + - engine_host:与系统atune engine service链接的地址。 + - engine_port:与系统atune engine service链接的端口。 + - sample_num:系统执行analysis流程时采集样本的数量,默认为20。 + - interval:系统执行analysis流程时采集样本的间隔时间,默认为5s。 + - grpc_tls:系统grpc的SSL/TLS证书校验开关,默认不开启。开启grpc_tls后,atune-adm命令在使用前需要设置以下环境变量方可与服务端进行通讯: + - export ATUNE_TLS=yes + - export ATUNED_CACERT=<客户端CA证书路径> + - export ATUNED_CLIENTCERT=<客户端证书路径> + - export ATUNED_CLIENTKEY=<客户端秘钥路径> + - export ATUNED_SERVERCN=server + - tlsservercafile:gPRC服务端CA证书路径。 + - tlsservercertfile:gPRC服务端证书路径。 + - tlsserverkeyfile:gPRC服务端秘钥路径。 + - rest_tls:系统rest service的SSL/TLS证书校验开关,默认开启。 + - tlsrestcacertfile:系统rest service的服务端CA证书路径。 + - tlsrestservercertfile:系统rest service的服务端证书路径 + - tlsrestserverkeyfile:系统rest service的服务端秘钥路径。 + - engine_tls:系统atune engine service的SSL/TLS证书校验开关,默认开启。 + - tlsenginecacertfile:系统atune engine service的客户端CA证书路径。 + - tlsengineclientcertfile:系统atune engine service的客户端证书路径 + - tlsengineclientkeyfile:系统atune engine service的客户端秘钥路径 - system信息 @@ -131,84 +156,158 @@ A-Tune配置文件/etc/atuned/atuned.cnf的配置项说明如下: - disk:执行analysis流程时需要采集的对应磁盘的信息或执行磁盘相关优化时需要指定的磁盘。 - network:执行analysis时需要采集的对应的网卡的信息或执行网卡相关优化时需要指定的网卡。 + - user:执行ulimit相关优化时用到的用户名。目前只支持root用户。 - - tls:开启A-Tune的gRPC和http服务SSL/TLS证书校验,默认不开启。开启TLS后atune-adm命令在使用前需要设置以下环境变量方可与服务端进行通讯: - - export ATUNE\_TLS=yes - - export ATUNE\_CLICERT=<客户端证书路径\> - - - tlsservercertfile:gPRC服务端证书路径。 - - tlsserverkeyfile:gPRC服务端秘钥路径。 - - tlshttpcertfile:http服务端证书路径。 - - tlshttpkeyfile:http服务端秘钥路径。 - - tlshttpcacertfile:http服务端CA证书路径。 - + - 日志信息 - 根据情况修改日志的路径和级别,默认的日志信息在/var/log/messages中。 + 根据情况修改日志的级别,默认为info级别,日志信息打印在/var/log/messages中。 - monitor信息 为系统启动时默认采集的系统硬件信息。 + +- tuning信息 + + tuning为系统进行离线调优时需要用到的参数信息。 + + - noise:高斯噪声的评估值。 + - sel_feature:控制离线调优参数重要性排名输出的开关,默认关闭。 ### 配置示例 ``` -##################################### server ############################### -# atuned config -[server] -# the protocol grpc server running on -# ranges: unix or tcp -protocol = unix - -# the address that the grpc server to bind to -# default is unix socket /var/run/atuned/atuned.sock -# ranges: /var/run/atuned/atuned.sock or ip -address = /var/run/atuned/atuned.sock - -# the atuned grpc listening port, default is 60001 -# the port can be set between 0 to 65535 which not be used -port = 60001 - -# the rest service listening port, default is 8383 -# the port can be set between 0 to 65535 which not be used -rest_port = 8383 - -# when run analysis command, the numbers of collected data. -# default is 20 -sample_num = 20 - -# Enable gRPC and http server authentication SSL/TLS -# default is false -# tls = true -# tlsservercertfile = /etc/atuned/server.pem -# tlsserverkeyfile = /etc/atuned/server.key -# tlshttpcertfile = /etc/atuned/http/server.pem -# tlshttpkeyfile = /etc/atuned/http/server.key -# tlshttpcacertfile = /etc/atuned/http/cacert.pem - -##################################### log ############################### -# Either "debug", "info", "warn", "error", "critical", default is "info" -level = info - -##################################### monitor ############################### -[monitor] -# With the module and format of the MPI, the format is {module}_{purpose} -# The module is Either "mem", "net", "cpu", "storage" -# The purpose is "topo" -module = mem_topo, cpu_topo - -##################################### system ############################### -# you can add arbitrary key-value here, just like key = value -# you can use the key in the profile -[system] -# the disk to be analysis -disk = sda - -# the network to be analysis -network = enp189s0f0 - -user = root +#################################### server ############################### + # atuned config + [server] + # the protocol grpc server running on + # ranges: unix or tcp + protocol = unix + + # the address that the grpc server to bind to + # default is unix socket /var/run/atuned/atuned.sock + # ranges: /var/run/atuned/atuned.sock or ip address + address = /var/run/atuned/atuned.sock + + # the atune nodes in cluster mode, separated by commas + # it is valid when protocol is tcp + # connect = ip01,ip02,ip03 + + # the atuned grpc listening port + # the port can be set between 0 to 65535 which not be used + # port = 60001 + + # the rest service listening port, default is 8383 + # the port can be set between 0 to 65535 which not be used + rest_host = localhost + rest_port = 8383 + + # the tuning optimizer host and port, start by engine.service + # if engine_host is same as rest_host, two ports cannot be same + # the port can be set between 0 to 65535 which not be used + engine_host = localhost + engine_port = 3838 + + # when run analysis command, the numbers of collected data. + # default is 20 + sample_num = 20 + + # interval for collecting data, default is 5s + interval = 5 + + # enable gRPC authentication SSL/TLS + # default is false + # grpc_tls = false + # tlsservercafile = /etc/atuned/grpc_certs/ca.crt + # tlsservercertfile = /etc/atuned/grpc_certs/server.crt + # tlsserverkeyfile = /etc/atuned/grpc_certs/server.key + + # enable rest server authentication SSL/TLS + # default is true + rest_tls = true + tlsrestcacertfile = /etc/atuned/rest_certs/ca.crt + tlsrestservercertfile = /etc/atuned/rest_certs/server.crt + tlsrestserverkeyfile = /etc/atuned/rest_certs/server.key + + # enable engine server authentication SSL/TLS + # default is true + engine_tls = true + tlsenginecacertfile = /etc/atuned/engine_certs/ca.crt + tlsengineclientcertfile = /etc/atuned/engine_certs/client.crt + tlsengineclientkeyfile = /etc/atuned/engine_certs/client.key + + + #################################### log ############################### + [log] + # either "debug", "info", "warn", "error", "critical", default is "info" + level = info + + #################################### monitor ############################### + [monitor] + # with the module and format of the MPI, the format is {module}_{purpose} + # the module is Either "mem", "net", "cpu", "storage" + # the purpose is "topo" + module = mem_topo, cpu_topo + + #################################### system ############################### + # you can add arbitrary key-value here, just like key = value + # you can use the key in the profile + [system] + # the disk to be analysis + disk = sda + + # the network to be analysis + network = enp189s0f0 + + user = root + + #################################### tuning ############################### + # tuning configs + [tuning] + noise = 0.000000001 + sel_feature = false +``` + +A-Tune engine配置文件/etc/atuned/engine.cnf的配置项说明如下: + +- A-Tune engine服务启动配置 + + 可根据需要进行修改。 + + - engine_host:系统atune engine service的侦听地址,默认为localhost。 + - engine_port:系统atune engine service的侦听端口,范围为0~65535未使用的端口,默认为3838。 + - engine_tls:系统atune engine service的SSL/TLS证书校验开关,默认开启。 + - tlsenginecacertfile:系统atune engine service的服务端CA证书路径。 + - tlsengineservercertfile:系统atune engine service的服务端证书路径 + - tlsengineserverkeyfile:系统atune engine service的服务端秘钥路径。 + +- 日志信息 + + 根据情况修改日志的级别,默认为info级别,日志信息打印在/var/log/messages中。 + +### 配置示例 + +``` + #################################### engine ############################### + [server] + # the tuning optimizer host and port, start by engine.service + # if engine_host is same as rest_host, two ports cannot be same + # the port can be set between 0 to 65535 which not be used + engine_host = localhost + engine_port = 3838 + + # enable engine server authentication SSL/TLS + # default is true + engine_tls = true + tlsenginecacertfile = /etc/atuned/engine_certs/ca.crt + tlsengineservercertfile = /etc/atuned/engine_certs/server.crt + tlsengineserverkeyfile = /etc/atuned/engine_certs/server.key + + #################################### log ############################### + [log] + # either "debug", "info", "warn", "error", "critical", default is "info" + level = info ``` ## 启动A-Tune @@ -230,6 +329,25 @@ A-Tune安装完成后,需要启动A-Tune服务才能使用。 若回显为如下,则服务启动成功。 - ![](figures/zh-cn_image_0214540398.png) + ![](./figures/zh-cn_image_0214540398.png) + +## 启动A-Tune engine + +若需要使用AI相关的功能,需要启动A-Tune engine服务才能使用。 + +- 启动atune-engine服务: + + ``` + # systemctl start atune-engine + ``` + + +- 查询atune-engine服务状态: + + ``` + # systemctl status atune-engine + ``` + 若回显为如下,则服务启动成功。 + ![](./figures/zh-cn_image_0245342444.png) diff --git "a/content/zh/docs/A-Tune/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/A-Tune/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" similarity index 100% rename from "content/zh/docs/A-Tune/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" rename to "docs/zh/docs/A-Tune/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" diff --git "a/docs/zh/docs/A-Tune/\350\256\244\350\257\206A-Tune.md" "b/docs/zh/docs/A-Tune/\350\256\244\350\257\206A-Tune.md" new file mode 100644 index 0000000000000000000000000000000000000000..4d2933c39612d5e41f80ea802b7654d75db95fbb --- /dev/null +++ "b/docs/zh/docs/A-Tune/\350\256\244\350\257\206A-Tune.md" @@ -0,0 +1,303 @@ +# 认识A-Tune + + +- [认识A-Tune](#认识A-Tune) + - [简介](#简介) + - [架构](#架构) + - [支持特性与业务模型](#支持特性与业务模型) + + +## 简介 + +操作系统作为衔接应用和硬件的基础软件,如何调整系统和应用配置,充分发挥软硬件能力,从而使业务性能达到最优,对用户至关重要。然而,运行在操作系统上的业务类型成百上千,应用形态千差万别,对资源的要求各不相同。当前硬件和基础软件组成的应用环境涉及高达7000多个配置对象,随着业务复杂度和调优对象的增加,调优所需的时间成本呈指数级增长,导致调优效率急剧下降,调优成为了一项极其复杂的工程,给用户带来巨大挑战。 + +其次,操作系统作为基础设施软件,提供了大量的软硬件管理能力,每种能力适用场景不尽相同,并非对所有的应用场景都通用有益,因此,不同的场景需要开启或关闭不同的能力,组合使用系统提供的各种能力,才能发挥应用程序的最佳性能。 + +另外,实际业务场景成千上万,计算、网络、存储等硬件配置也层出不穷,实验室无法遍历穷举所有的应用和业务场景,以及不同的硬件组合。 + +为了应对上述挑战,openEuler推出了A-Tune。 + +A-Tune是一款基于AI开发的系统性能优化引擎,它利用人工智能技术,对业务场景建立精准的系统画像,感知并推理出业务特征,进而做出智能决策,匹配并推荐最佳的系统参数配置组合,使业务处于最佳运行状态。 + +![](./figures/zh-cn_image_0227497000.png) + +## 架构 + +A-Tune核心技术架构如下图,主要包括智能决策、系统画像和交互系统三层。 + +- 智能决策层:包含感知和决策两个子系统,分别完成对应用的智能感知和对系统的调优决策。 +- 系统画像层:主要包括自动特征工程和两层分类模型,自动特征工程用于业务特征的自动选择,两层分类模型用于业务模型的学习和分类。 +- 交互系统层:用于各类系统资源的监控和配置,调优策略执行在本层进行。 + +![](./figures/zh-cn_image_0227497343.png) + +## 支持特性与业务模型 + +### 支持特性 + +A-Tune支持的主要特性、特性成熟度以及使用建议请参见[表1](#table1919220557576)。 + +**表 1** 特性成熟度 + + + + + + + + + + + + + + + + + + + + +

特性

+

成熟度

+

使用建议

+

14大类50款应用负载类型自动优化

+

已测试

+

试用

+

自定义profile和业务模型

+

已测试

+

试用

+

参数自调优

+

已测试

+

试用

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

业务大类

+
+

业务类型

+
+

瓶颈点

+
+

支持的应用

+
+

default

+
+

默认类型

+
+

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

+
+

N/A

+
+

webserver

+
+

web应用

+
+

算力瓶颈、网络瓶颈

+
+

Nginx、Apache Traffic Server、Tomcat、Apache Http Server、Squid、Postfix、lighttpd

+
+

ftp server

+
+

ftp应用

+
+

算力瓶颈、网络瓶颈

+
+

vsftpd、proftpd

+
+

database

+
+

数据库

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

Mongodb、Mysql、Postgresql、Mariadb、openGauss、tidb、sqlite、QuestDB、influxdb、splunk、Cassandra、Neo4j

+
+

distributed data store

+
+

分布式存储

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

storm、glusterFS、Ceph、Infinispan、ElasticSearch

+
+

big-data

+
+

大数据

+
+

算力瓶颈、内存瓶颈

+
+

Hadoop-hdfs、Hadoop-spark、hive

+
+

middleware

+
+

中间件框架

+
+

算力瓶颈、网络瓶颈

+
+

Dubbo、Zookeeper、kafka、rabbitMQ、activeMQ、rocketMQ、etcd、karaf

+
+

in-memory-database

+
+

内存数据库

+
+

内存瓶颈、IO瓶颈

+
+

Redis、Memcached、cachefilesd

+
+

operation

+
+

运维工具

+
+

算力瓶颈、网络瓶颈

+
+

prometheus、ansible、puppet、zabbix

+

basic-test-suite

+
+

基础测试套

+
+

算力瓶颈、内存瓶颈

+
+

SPECCPU2006、SPECjbb2015

+
+

hpc

+
+

人类基因组

+
+

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

+
+

Gatk4

+
+

virtualization

+
+

虚拟化

+
+

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

+
+

Consumer-cloud、Mariadb

+
+

docker

+
+

容器

+
+

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

+
+

Mariadb

+
+

others

+
+

其他

+
+

-

+
+

Encryption

+
+ + diff --git "a/content/zh/docs/A-Tune/\351\231\204\345\275\225.md" "b/docs/zh/docs/A-Tune/\351\231\204\345\275\225.md" similarity index 69% rename from "content/zh/docs/A-Tune/\351\231\204\345\275\225.md" rename to "docs/zh/docs/A-Tune/\351\231\204\345\275\225.md" index f533f90985f5861224579785e2ea25a8bfcba1a9..80c87bad98827cce03e146ba202bad25b65b32fa 100644 --- "a/content/zh/docs/A-Tune/\351\231\204\345\275\225.md" +++ "b/docs/zh/docs/A-Tune/\351\231\204\345\275\225.md" @@ -17,11 +17,7 @@

workload_type

-

负载类型,用于标记具有相同特征的一类业务

-

profile

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

@@ -29,3 +25,4 @@
+ diff --git a/docs/zh/docs/Administration/FAQ-54.md b/docs/zh/docs/Administration/FAQ-54.md new file mode 100644 index 0000000000000000000000000000000000000000..d31e1a74d6cb63f93bc66452c818a44cb83cb9c8 --- /dev/null +++ b/docs/zh/docs/Administration/FAQ-54.md @@ -0,0 +1,562 @@ +# FAQ + +[[toc]] + +## 使用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命令的内存占用率含义不同,所以查询结果不同。 + +## 设置RAID0卷,参数stripsize设置为4时出错 + +### 问题现象 + +设置RAID0卷,参数stripsize设置为4时出错。 + +### 原因分析 + +64K页表开启只能支持64K场景。 + +### 解决方法 + +不需要修改配置文件,openeuler执行lvcreate命令时,条带化规格支持的stripesize最小值为64KB,将参数stripesize设置为64。 + +## 使用rpmbuild编译mariadb失败 + +### 问题描述 + +如果使用root账号登录系统,并在该账号下使用rpmbuild命令编译mariadb源代码,会出现编译失败现象,提示: + +``` ++ echo 'mysql can'\''t run test as root' +mysql can't run test as root ++ exit 1 +``` + +### 原因分析 + +mariadb数据库不允许使用root权限的账号进行测试用例执行,所以会阻止编译过程(编译过程中会自动执行测试用例)。 + +### 解决方案 + +使用vi等文本编辑工具,修改mariadb.spec文件中runtest变量的值。 + +修改前: + +``` +%global runtest 1 +``` + +修改后: + +``` +%global runtest 0 +``` + +该修改关闭了编译阶段执行测试用例的功能,但不会影响编译和编译后的RPM包内容。 + +## 使用默认配置启动SNTP服务失败 + +### 问题现象 + +默认配置情况下SNTP服务启动失败。 + +### 原因分析 + +默认配置中未添加授时服务器域名。 + +### 解决方案 + +修改/etc/sysconfig/sntp文件 ,在文件中添加中国NTP快速授时服务器域名:0.generic.pool.ntp.org。 + +## 安装时出现软件包冲突、文件冲突或缺少软件包导致安装失败 + +### 问题现象 + +安装软件包过程中,可能出现软件包冲突、文件冲突或缺少软件包,从而导致升安装被中断,最终安装失败。软件包冲突、文件冲突和缺少软件包的报错信息分别如下所示。 + +软件包冲突报错信息示例(以 libev-libevent-devel-4.24-11.oe1.aarch64与libevent-devel-2.1.11-2.oe1.aarch64冲突为例): + +``` +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文件冲突为例): + +``` +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软件包为例): + +``` +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**命令将与待安装软件包冲突的软件包单独卸载。 + + ``` + # 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**命令将不需要安装的软件包单独卸载。 + + ``` + # 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软件包才能安装的软件包单独卸载。 + + ``` + # dnf remove python2-blivet-1:3.1.1-5.noarch + ``` + + - 升级软件包时加上\-\-allowerasing参数。 + + ``` + # yum update blivet-data-1:3.1.1-5.noarch -y --allowerasing + ``` + +3. 重新进行升级操作。 + + +## 通过dnf update 默认方式升级openssh软件包时无法安装openssh相关包 + +### 问题现象 + +通过dnf update 默认方式升级openssh软件包时会出现无法安装openssh相关包,提示如下: + + + ``` + cannot install both openssh-7.8p1-8.oe1.aarch64 and openssh-8.2p1-5.oe1.aarch64 + cannot install both openssh-7.8p1-8.oe1.aarch64 and openssh-8.2p1-4.oe1.aarch64 + cannot install the best update condidate for package openssh-clients-8.2p1-5.oe1.aarch64 + cannot install the best update condidate for package openssh-8.2p1-5.oe1.aarch64 + + ``` + +### 原因分析 + +DNF 默认情况下会启用DNF包管理器的“best”模式(对应的参数为--best),该默认选型将始终尝试将升级的包升级到可用的最高版本,即使最高版本无法完全满足它需要的依赖关系。如果使用默认启用的DNF best模式,将提醒用户更新的软件包版本可用但不能满足依赖性。如果出现问题,DNF会提示用户相关依赖问题,以便用户知道。openEuler社区开发人员正在寻求进行此默认更改,以防由于依赖性问题导致无法进行安全修复程序包升级,在当前前提下,它可能会被默默忽略而用户不会意识到。此外,使用DNF最佳模式将迅速提醒开发人员升级路径中的问题。 + +### 解决方案 + +DNF的--nobest选项可用于覆盖/关闭默认的“best”行为,以使用户需要升级的包存在依赖问题的场景下可以正常进行安全修改程序包的升级。 +本次openEuler 20.03 LTS SP3 版本中开发人员已识别到在openssh包安全修复版本升级过程中会存在该场景,建议用户了解上面的分析的情况下,选择合理的升级方式,openEuler同步给出具体升级示例操作: + + + ``` + dnf update –y –nobest openssh + + ``` + +### 安装冲突实例 +* 文件冲突 + +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 +``` + +## libiscsi降级失败 + +### 问题现象 + +libiscsi-1.19.2 版本及以上降级到 libiscsi-1.19.1 及以下版本时失败。 + +``` +Error: Transaction test error: +file /usr/bin/iscsi-inq from install of libiscsi-1.19.0-1.eulerosv2r9.x86_64 conflicts with file from package libiscsi-utils-1.19.0-2.eulerosv2r9.x86_64 +file /usr/bin/iscsi-ls from install of libiscsi-1.19.0-1.eulerosv2r9.x86_64 conflicts with file from package libiscsi-utils-1.19.0-2.eulerosv2r9.x86_64 +file /usr/bin/iscsi-perf from install of libiscsi-1.19.0-1.eulerosv2r9.x86_64 conflicts with file from package libiscsi-utils-1.19.0-2.eulerosv2r9.x86_64 +file /usr/bin/iscsi-readcapacity16 from install of libiscsi-1.19.0-1.eulerosv2r9.x86_64 conflicts with file from package libiscsi-utils-1.19.0-2.eulerosv2r9.x86_64 +file /usr/bin/iscsi-swp from install of libiscsi-1.19.0-1.eulerosv2r9.x86_64 conflicts with file from package libiscsi-utils-1.19.0-2.eulerosv2r9.x86_64 +file /usr/bin/iscsi-test-cu from install of libiscsi-1.19.0-1.eulerosv2r9.x86_64 conflicts with file from package libiscsi-utils-1.19.0-2.eulerosv2r9.x86_64 +``` + +### 原因分析 + +libiscsi-1.19.1 之前的版本把 iscsi-xxx 等二进制文件打包进了主包 libiscsi,而这些二进制文件引入了不合理的依赖 CUnit, 为了解决这种不合理的依赖,在 libiscsi-1.19.2 版本把这些二进制文件单独拆分出来一个子包 libiscsi-utils,主包弱依赖于子包,产品可以根据自己的需求在做镜像时是否集成该子包;不集成或卸载子包不会影响 libiscsi 主包的功能。 + +如果系统中安装了 libiscsi-utils 子包,libiscsi-1.19.2 及以上版本降级到 libiscsi-1.19.1 及以下版本时,由于 libiscsi-1.19.1 及以下版本无法提供对应的 libiscsi-utils,因此 libiscsi-utils 不会降级,但 libiscsi-utils 依赖于降级前的 libiscsi 主包,导致依赖问题无法解决,最终导致降级失败。 + +### 解决方案 + +执行以下命令,卸载 libiscsi-utils 子包,卸载成功后再进行降级操作。 + +``` +yum remove libiscsi-utils +``` + +## xfsprogs降级失败 + +### 问题现象 + +xfsprogs-5.6.0-2 及以上版本降级到 xfsprogs-5.6.0-1 及以下版本时失败。 + +``` +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 子包,卸载成功后再进行降级操作。 + +``` +yum remove xfsprogs-xfs_scrub +``` + +## 不合理使用glibc正则表达式引起ReDoS攻击 + +### 问题现象 + +使用glibc的regcomp/regexec接口编程,或者grep/sed等应用glibc正则表达式的shell命令,不合理的正则表达式或输入会造成ReDoS攻击(CVE-2019-9192/CVE-2018-28796)。 +典型正则表达式pattern为“反向引用”(\1表示)与“*”(匹配零次或多次)、“+”(匹配一次或多次)、“{m,n}”(最小匹配m次,最多匹配n次)的组合,或者配合超长字符串输入,示例如下: +``` +# 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. 用户需保证正则表达式的正确性,不输入无效正则表达式,或者超长字符串配合正则的“引用” “*”等容易触发无限递归的组合。 + ``` + # ()(\1\1)* + # "a"*400000 + ``` +3. 用户程序在检测到进程异常之后,通过重启进程等手段恢复业务,提升程序的可靠性。 + +## emacs编辑文件时会存在缓存文件 + +### 问题现象 + +emacs未进行配置时,编辑文件保存后会存在以“~”结尾的缓存文件。 + +### 原因分析 + +emacs未进行配置,或者未生成有效的配置文件,会导致存在缓存文件,缓存文件的功能是为了防止系统意外关闭导致的数据丢失,用户可自行决定是否启用该功能。 + +### 解决方案 + +1. 安装好emacs后进入emacs界面。 +2. 在emacs界面输入alt键加x键。 +3. 输入customize后可进行各种设置,对任一功能设置后会生成一个.emacs配置文件,会显示出相应的配置文件路径,如/root/.emacs(自行创建的.emacs无功能作用)。 +4. 若需更改缓存文件配置,有如下方案,可自选: + + * 复制如下代码到/root/.emacs,关闭缓存文件功能: + ``` + (setq make-backup-files nil) + ``` + + + * 复制如下代码到/root/.emacs,指定集中保存备份文件的目录: + ``` + (setq backup-directory-alist (quote (("." . "/.emacs-backups")))) + ``` + +## rtkit-daemon 服务启动报错“Failed to make ourselves RT: Operation not permitted” + +### 问题现象 + +默认情况下rtkit-daemon服务启动正常,但是在安装docker-engine的情况下启动 +rtkit-daemon会有报错信息,如下所示: + +``` +12月 18 09:34:15 openEuler systemd[1]: Started RealtimeKit Scheduling Policy Service. +12月 18 09:34:15 openEuler rtkit-daemon[22560]: Successfully called chroot. +12月 18 09:34:15 openEuler rtkit-daemon[22560]: Successfully dropped privileges. +12月 18 09:34:15 openEuler rtkit-daemon[22560]: Successfully limited resources. +12月 18 09:34:15 openEuler rtkit-daemon[22560]: Running. +12月 18 09:34:15 openEuler rtkit-daemon[22560]: Canary thread running. +12月 18 09:34:15 openEuler rtkit-daemon[22560]: Failed to make ourselves RT: Operation not permitted +12月 18 09:34:15 openEuler rtkit-daemon[22560]: Watchdog thread running. +``` + +### 原因分析 + +rtkit-daemon报错的原因是有服务(如docker.service)配置了Delegate=yes。 + +在没有配置该参数的情况下,rtkit-daemon的cgroup信息如下所示,此时服务表现正常。 +``` +[root@openEuler ~]# cat /proc/pidof rtkit-daemon/cgroup | grep system +12:pids:/system.slice/rtkit-daemon.service +7:devices:/system.slice/rtkit-daemon.service +5:memory:/system.slice/rtkit-daemon.service +2:blkio:/system.slice +1:name=systemd:/system.slice/rtkit-daemon.service +``` + +在配置了Delegate=yes的情况下,systemd会创建相关slice,并把cpu cgroup也移动到 +slice中。这样rtkit-daemon服务的cgroup信息如下所示。rtkit-daemon被移动到了 +3:cpu,cpuacct:/system.slice/rtkit-daemon.service 但是里面的cpu.rt_runtime_us又 +没有设置合理的数值,所以有报错。 + +``` +[root@openEuler ~]# cat /proc/pidof rtkit-daemon/cgroup | grep system +12:pids:/system.slice/rtkit-daemon.service +7:devices:/system.slice/rtkit-daemon.service +5:memory:/system.slice/rtkit-daemon.service +3:cpu,cpuacct:/system.slice/rtkit-daemon.service +2:blkio:/system.slice/rtkit-daemon.service +1:name=systemd:/system.slice/rtkit-daemon.service +``` + +### 解决方案 + +方法一:修改rtkit-daemon.service,添加如下配置,这种方式即使用系统默认cpu cgroup配置。 + +``` +Slice=-.slice +DisableControllers=cpu cpuacct +``` + +方法二:修改rtkit-daemon.service,添加如下配置,这种方法即根据需要配置调度参数。 + +``` +ExecStartPre=/usr/bin/bash -c "mkdir -p /sys/fs/cgroup/cpu,cpuacct/system.slice/rtkit-daemon.service" +ExecStartPre=/usr/bin/bash -c "echo 950000 > /sys/fs/cgroup/cpu,cpuacct/system.slice/cpu.rt_runtime_us" +ExecStartPre=/usr/bin/bash -c "echo 950000 > /sys/fs/cgroup/cpu,cpuacct/system.slice/rtkit-daemon.service/cpu.rt_runtime_us" +``` + +## 通过dnf update进行软件包全量升级,由20.03-LTS 升级到 20.03-LTS-SP3时,系统重启失败 + +### 问题现象 + +x86_64架构 Legacy引导模式下,/boot目录未单独分区,通过dnf进行软件包全量升级,由20.03-LTS升级到20.03-LTS-SP3,出现系统升级成功但重启时引导失败,提示如下: +``` +error: ../../grub-core/fs/fshelp.c:258:file +'/vmlinuz-4.19.90-2012.5.0.0054.oe1.x86_64' +not found. +error: ../../grub-core/loader/i386/pc/linux.c:417:you need to load the kernel first. + +Press any key to continue... +``` + +### 原因分析 + +20.03-LTS以前默认采用传统cfg,而20.03-LTS-SP3的grub2升级2.04版本后默认变为bls格式,openEuler目前对bls格式的cfg文件不做支持,导致重启后无法根据该格式的grub.cfg找到内核,启动失败。openEuler社区开发人员正在寻求进行此默认更改,以防由于cfg格式问题导致软件包升级后重启失败。 + +### 解决方案 + +1. 在引导界面按e进行grub2配置修改界面,修改内核与initrd部分的路径,如: + ``` + linux ($root)/vmlinuz-4.19-xxx root=xxx --->>> linux ($root)/boot/vmlinuz-4.19-xxx root=xxx + initrd ($root)/initramfs-4.19-xxx --->>> initrd ($root)/boot/initramfs-4.19-xxx + ``` + 随后,按ctrl+x引导系统启动。 + +2. 重新安装grub2-2.04-8及以后的版本 +3. 重新生成cfg文件,grub2-mkconfig -o /boot/grub2/grub.cfg +4. 再次重启,系统成功引导 + +## 版本升级后,httpd服务启动失败 + +### 问题现象 + +从旧版本升级到最新版本时,http.service服务启动失败。 + +### 原因分析 + +当待升级环境开启了selinux,并且安装了httpd的子包mod_md时,升级到最新版本后,http.service服务启动失败。查看系统messages日志`/var/log/messags`,可以看到日志记录如下: + +``` +openEuler setroubleshoot[****]: SELinux is preventing /usr/sbin/httpd from add_name access on the directory md. +... +openEuler setroubleshoot[****]: SELinux is preventing httpd from setattr access on the directory challenges. +``` + +可以看到,selinux阻止httpd进程对md/challenges目录执行操作。因此,当selinux使能,且安装有mod_md子包时,需要修改selinux配置,否则selinux权限问题会导致http.service服务启动失败。 + +### 解决方案 + +1. 执行以下命令,允许httpd访问网络。 + + ``` + # setsebool -P httpd_can_network_connect on + ``` + +2. 创建文件 `httpd-md.te`,用于描述对资源的访问许可。文件内容如下: + + ``` + # create new + module httpd-md 1.0; + + require { + type httpd_config_t; + type httpd_t; + class dir { add_name create remove_name rename reparent rmdir setattr }; + class file { create rename setattr unlink write }; + } + + #============= httpd_t ============== + allow httpd_t httpd_config_t:dir { add_name create remove_name rename reparent rmdir setattr }; + allow httpd_t httpd_config_t:file { create rename setattr unlink write }; + ``` + +3. 检查并编译安全策略文件。 + + ``` + # checkmodule -m -M -o httpd-md.mod httpd-md.te + ``` + +4. 创建策略模块。 + + ``` + # semodule_package --outfile httpd-md.pp --module httpd-md.mod + ``` + +5. 安装策略模块。 + + ``` + # semodule -i httpd-md.pp + ``` + +6. 重启httpd.service服务。 + + ``` + # systemctl status httpd.service + ``` + +## fuse包2.9.9-4前后、fuse3包3.9.2-4前后升降级说明 + +### 问题现象 + +1. dnf upgrade fuse fuse-common fuse3 升级失败 +2. dnf downgrade fuse, fuse3会降级或安装 +3. dnf downgrade fuse3, fuse会降级 + +### 原因分析 + +1. dnf upgrade fuse fuse-common fuse3失败原因:在2.9.9-3及之前,fuse,fuse3均obsoletes fuse-common,按顺序解析包依赖关系,解析fuse-common依赖关系时,fuse-common仍被fuse3 obsoletes,导致fuse-common无法升级。 +2. dnf downgrade fuse, fuse3会降级或安装:降级fuse的时候,也会降级fuse-common,在fuse 2.9.9-3 以及fuse3 3.9.2-3版本之前,fuse-common包包含在fuse和fuse3中,在降级fuse-common时发现其旧版本包含在fuse3中,所以将fuse3降级或者安装。 +3. dnf downgrade fuse3, fuse会降级:降级fuse3的时候,也会降级fuse-common,在fuse 2.9.9-3 以及fuse3 3.9.2-3版本之前,fuse-common包包含在fuse和fuse3中,在降级fuse-common解析时其旧版本包含在fuse中,所以将fuse降级。 + +### 解决方案 + +1. 升级fuse使用dnf upgrade fuse,升级fuse3使用dnf fuse fuse3 fuse-common。 +2. 无需解决。 +3. 无需解决。 + +## 安装卸载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包引入进来,所以出现了如下告警信息。 +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软件包,告警信息消失。 + +## bind升级输出异常日志 + +### 问题现象 +在升级bind的时候输出日志:ImportError: cannot import name 'IbpkeyconRange' from 'setools.policyrep',导致升级过程中semanage命令执行失败。 +``` + File "/usr/lib64/python3.7/site-packages/setools/__init__.py", line 31, in + from .policyrep import SELinuxPolicy, BoundsRuletype, ConstraintRuletype, DefaultRuletype, \ +ImportError: cannot import name 'IbpkeyconRange' from 'setools.policyrep' (/usr/lib64/python3.7/site-packages/setools/policyrep/__init__.py) +``` + +### 原因分析 +全量升级的流程是先升级所有软件包,都升级到新版本后,才去统一清理旧版本文件。policyrep模块属于python3-setools软件包,setools包结构发生过变更: +- 在setools-4.2.0之前版本中,policyrep模块在/usr/lib64/python3.7/site-packages/setools/policyrep目录中。 +- 在社区稳定版本setools-4.2.0及之后版本中,policyrep模块集成到动态库/usr/lib64/python3.7/site-packages/setools/policyrep.cpython-37m-aarch64-linux-gnu.so。 + +全量升级过程中,bind升级时以上两者都存在,寻找policyrep模块时,python的机制会优先找policyrep目录,导致找到了旧版本的文件从而没有成功执行semanage命令。由于bind是在post和postun处理的以下语句中执行semanage命令,如果用户需要配置selinux策略,执行失败会影响selinux策略的配置。 +- post处理: +``` +%selinux_set_booleans named_write_master_zones=1 +``` +- postun处理: +``` +%selinux_unset_booleans named_write_master_zones=1 +``` + +### 解决方案 +bind能升级到新版本,但影响升级时的semanage命令的正常执行。为不影响关于bind的selinux策略的配置,请使用“dnf -y reinstall bind”命令重新安装bind软件包。 diff --git a/content/zh/docs/Administration/administration.md b/docs/zh/docs/Administration/administration.md similarity index 100% rename from content/zh/docs/Administration/administration.md rename to docs/zh/docs/Administration/administration.md diff --git "a/content/zh/docs/Administration/figures/\346\220\255\345\273\272\346\225\260\346\215\256\347\233\230-0.png" b/docs/zh/docs/Administration/figures/Creating_DataDisk-0.png similarity index 100% rename from "content/zh/docs/Administration/figures/\346\220\255\345\273\272\346\225\260\346\215\256\347\233\230-0.png" rename to docs/zh/docs/Administration/figures/Creating_DataDisk-0.png diff --git "a/content/zh/docs/Administration/figures/\346\220\255\345\273\272\346\225\260\346\215\256\347\233\230.png" b/docs/zh/docs/Administration/figures/Creating_DataDisk.png similarity index 100% rename from "content/zh/docs/Administration/figures/\346\220\255\345\273\272\346\225\260\346\215\256\347\233\230.png" rename to docs/zh/docs/Administration/figures/Creating_DataDisk.png diff --git a/content/zh/docs/Administration/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png b/docs/zh/docs/Administration/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png similarity index 100% rename from content/zh/docs/Administration/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png rename to docs/zh/docs/Administration/figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png diff --git a/content/zh/docs/Administration/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png b/docs/zh/docs/Administration/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png similarity index 100% rename from content/zh/docs/Administration/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png rename to docs/zh/docs/Administration/figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png diff --git "a/content/zh/docs/Administration/figures/MariaDB\351\200\273\350\276\221\346\236\266\346\236\204.png" b/docs/zh/docs/Administration/figures/Logical_architecture_MariaDB.png similarity index 100% rename from "content/zh/docs/Administration/figures/MariaDB\351\200\273\350\276\221\346\236\266\346\236\204.png" rename to docs/zh/docs/Administration/figures/Logical_architecture_MariaDB.png diff --git "a/content/zh/docs/Administration/figures/PostgreSql\346\236\266\346\236\204.png" b/docs/zh/docs/Administration/figures/PostgreSQL_architecture.png similarity index 100% rename from "content/zh/docs/Administration/figures/PostgreSql\346\236\266\346\236\204.png" rename to docs/zh/docs/Administration/figures/PostgreSQL_architecture.png diff --git "a/content/zh/docs/Administration/figures/top\346\230\276\347\244\272.png" b/docs/zh/docs/Administration/figures/Top_Display.png similarity index 100% rename from "content/zh/docs/Administration/figures/top\346\230\276\347\244\272.png" rename to docs/zh/docs/Administration/figures/Top_Display.png diff --git a/docs/zh/docs/Administration/figures/etmem-system-architecture.png b/docs/zh/docs/Administration/figures/etmem-system-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..1e077e00f44c0404526a4742d49c6e866601eee1 Binary files /dev/null and b/docs/zh/docs/Administration/figures/etmem-system-architecture.png differ diff --git "a/content/zh/docs/Administration/figures/\347\231\273\345\275\225.png" b/docs/zh/docs/Administration/figures/login.png similarity index 100% rename from "content/zh/docs/Administration/figures/\347\231\273\345\275\225.png" rename to docs/zh/docs/Administration/figures/login.png diff --git "a/content/zh/docs/Administration/figures/nginx\351\203\250\347\275\262\346\210\220\345\212\237.png" b/docs/zh/docs/Administration/figures/nginx-deploy-success.png similarity index 100% rename from "content/zh/docs/Administration/figures/nginx\351\203\250\347\275\262\346\210\220\345\212\237.png" rename to docs/zh/docs/Administration/figures/nginx-deploy-success.png diff --git "a/content/zh/docs/Administration/figures/nginx\346\234\215\345\212\241\345\220\257\345\212\250\345\244\261\350\264\245.png" b/docs/zh/docs/Administration/figures/nginx-start-failed.png similarity index 100% rename from "content/zh/docs/Administration/figures/nginx\346\234\215\345\212\241\345\220\257\345\212\250\345\244\261\350\264\245.png" rename to docs/zh/docs/Administration/figures/nginx-start-failed.png diff --git "a/content/zh/docs/Administration/figures/nginx\346\234\215\345\212\241\345\220\257\345\212\250\346\210\220\345\212\237.png" b/docs/zh/docs/Administration/figures/nginx-start-success.png similarity index 100% rename from "content/zh/docs/Administration/figures/nginx\346\234\215\345\212\241\345\220\257\345\212\250\346\210\220\345\212\237.png" rename to docs/zh/docs/Administration/figures/nginx-start-success.png diff --git a/content/zh/docs/Administration/figures/postgres.png b/docs/zh/docs/Administration/figures/postgres.png similarity index 100% rename from content/zh/docs/Administration/figures/postgres.png rename to docs/zh/docs/Administration/figures/postgres.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0229622729.png b/docs/zh/docs/Administration/figures/zh-cn_image_0229622729.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0229622729.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0229622729.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0229622789.png b/docs/zh/docs/Administration/figures/zh-cn_image_0229622789.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0229622789.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0229622789.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0230050789.png b/docs/zh/docs/Administration/figures/zh-cn_image_0230050789.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0230050789.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0230050789.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143176.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143176.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143176.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143176.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143177.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143177.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143177.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143177.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143178.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143178.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143178.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143178.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143180.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143180.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143180.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143180.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143181.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143181.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143181.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143181.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143183.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143183.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143183.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143183.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143185.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143185.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143185.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143185.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143187.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143187.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143187.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143187.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143189.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143189.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143189.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143189.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143191.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143191.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143191.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143191.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143193.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143193.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143193.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143193.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143195.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143195.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143195.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143195.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143196.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143196.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143196.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143196.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143197.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143197.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143197.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143197.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231143198.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143198.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231143198.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143198.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231563132.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231563132.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231563132.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231563132.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231563134.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231563134.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231563134.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231563134.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231563135.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231563135.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231563135.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231563135.png diff --git a/content/zh/docs/Administration/figures/zh-cn_image_0231563136.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231563136.png similarity index 100% rename from content/zh/docs/Administration/figures/zh-cn_image_0231563136.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231563136.png diff --git a/docs/zh/docs/Administration/memory-management.md b/docs/zh/docs/Administration/memory-management.md new file mode 100644 index 0000000000000000000000000000000000000000..8bdb000dc2f5593d09e17a5717ab555164d35ab2 --- /dev/null +++ b/docs/zh/docs/Administration/memory-management.md @@ -0,0 +1,211 @@ +# etmem内存分级扩展 + +## 介绍 +随着CPU算力的发展,尤其是ARM核成本的降低,内存成本和内存容量成为约束业务成本和性能的核心痛点,因此如何节省内存成本,如何扩大内存容量成为存储迫切要解决的问题。 + +etmem内存分级扩展技术,通过DRAM+内存压缩/高性能存储新介质形成多级内存存储,对内存数据进行分级,将分级后的内存冷数据从内存介质迁移到高性能存储介质中,达到内存容量扩展的目的,从而实现内存成本下降。(当前暂时还没有对非易失内存介质的支持) + +## 软件架构 +![](./figures/etmem-system-architecture.png) + +etmem客户端通过socket通信机制与服务端进行交互,下发创建/删除工程、启动/停止工程、查询工程的命令,服务端通过客户端下发的配置文件,读取project管理配置信息,以及engine配置信息,并执行客户端下发的操作。启动工程之后,服务端会对业务进程进行扫描,并根据扫描统计结果以及淘汰策略,对页面进行分级淘汰,实现节省内存的目标。 + + +## 编译教程 + +1. 下载etmem源码 +``` + # git clone https://gitee.com/src-openeuler/etmem.git +``` +2. 编译和运行依赖 + +etmem的编译和运行依赖于libboundscheck组件。 + +3. 编译 +``` + # cd etmem + # mkdir build + # cd build + # cmake .. + # make +``` +## 使用说明 + +### 启动etmemd进程 + +#### 使用方法 + +通过运行etmemd二进制运行服务端进程,例如: +``` +# etmemd -l 0 -s etmemd_socket +``` +#### 帮助信息 +``` +options: +-l|--log-level Log level +-s|--socket Socket name to listen to +-h|--help Show this message +``` +#### 命令行参数说明 + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 参数范围 | 示例说明 | +| --------------- | ---------------------------------- | -------- | ---------- | --------------------- | ------------------------------------------------------------ | +| -l或--log-level | etmemd日志级别 | 否 | 是 | 0~3 | 0:debug级别 1:info级别 2:warning级别 3:error级别 只有大于等于配置的级别才会打印到/var/log/message文件中 | +| -s或--socket | etmemd监听的名称,用于与客户端交互 | 是 | 是 | 107个字符之内的字符串 | 指定服务端监听的名称 | +| -h或--help | 帮助信息 | 否 | 否 | NA | 执行时带有此参数会打印后退出 | + +### etmem配置文件 + +在运行etmem进程之前,需要管理员预先规划哪些进程需要做内存扩展,将进程信息配置到etmem配置文件中,并配置内存扫描的周期、扫描次数、内存冷热阈值等信息。 + +配置文件的示例文件在源码包中,放置在源码根目录的conf/example_conf.yaml,建议在使用时放置在/etc/etmem/目录下,示例内容为: + +``` +options: + loop : 3 + interval : 1 + sleep: 2 + policies: + type : pid/name + value : 123456/mysql + max_threads: 3 + engine : slide + param: + T: 3 +``` + +配置文件各字段说明: + +| **置项** | **配置项含义** | **是否必须** | **是否有参数** | **参数范围** | **示例说明** | +| ----------- | ------------------------------------------------------------ | ------------ | -------------- | ------------------------- | ------------------------------------------------------------ | +| options | project公用配置段起始标识 | 是 | 否 | NA | 每个配置文件有且仅有一个此字段,并且文件以此字段开始 | +| loop | 内存扫描的循环次数 | 是 | 是 | 1~120 | loop:3 //扫描3次 | +| interval | 每次内存扫描的时间间隔 | 是 | 是 | 1~1200 | interval:5 //每次扫描之间间隔5s | +| sleep | 每个内存扫描+操作的大周期之间时间间隔 | 是 | 是 | 1~1200 | sleep:10 //每次大周期之间间隔10s | +| policies | project中各task任务配置段起始标识 | 是 | 否 | NA | 一个project中可以配置多个task,每个task以policies:开头 | +| type | 目标进程识别的方式 | 是 | 是 | pid/name | pid代表通过进程号识别,name代表通过进程名称识别 | +| value | 目标进程识别的具体字段 | 是 | 是 | 实际的进程号/进程名称 | 与type字段配合使用,指定目标进程的进程号或进程名称,由使用者保证配置的正确及唯一性 | +| max_threads | etmemd内部线程池最大线程数,每个线程处理一个进程/子进程的内存扫描+操作任务 | 否 | 是 | 1~2 * core数 + 1,默认为1 | 对外部无表象,控制etmemd服务端内部处理线程个数,当目标进程有多个子进程时,配置越大,并发执行的个数也多,但占用资源也越多 | +| engine | 扫描引擎类型 | 是 | 是 | slide | 声明使用slide引擎进行冷热内存识别 | +| param | 扫描引擎私有参数配置起始标识 | 是 | 否 | NA | 引擎私有参数配置段以此标识起始,每个task对应一种引擎,每个引擎对应一个param及其字段 | +| T | slide引擎的水线配置 | 是 | 否 | 1~3 * loop | 水线阈值,大于等于此值的内存会被识别为热内存,反之为冷内存 | + +### etmem工程创建、删除、查询 + +#### 场景描述 + +1)管理员创建etmem工程(一个工程可包含多个etmem任务) + +2)管理员查询已有的etmem工程 + +3)管理员删除已有的etmem工程(删除工程前,会自动先停止该工程中的所有任务) + +#### 使用方法 + +通过etmem二进制执行工程创建/删除/查询操作,前提是服务端已经成功运行,并且配置文件(e.g. /etc/etmem/example_conf.yaml)内容正确。 + +添加工程: +``` +# etmem project add -n test -f /etc/etmem/example_conf.yaml -s etmemd_socket +``` +删除工程: +``` +# etmem project del -n test -s etmemd_socket +``` +查询工程: +``` +# etmem project show -s etmemd_socket +``` +打印帮助: +``` +# etmem project help +``` +#### 帮助信息 +``` +Usage: + etmem project add [options] + etmem project del [options] + etmem project show + etmem project help + + Options: + -f|--file Add configuration file + -n|--name Add project name + -s|--sock Socket name to connect + + Notes: + 1. Project name and socket name must be given when execute add or del option. + 2. Configuration file must be given when execute add option. + 3. Socket name must be given when execute show option. +``` +#### 命令行参数说明 + +add命令: + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 示例说明 | +| ------------ | ------------------------------------------------------------ | -------- | ---------- | -------------------------------------------------------- | +| -n或--name | 指定project名称 | 是 | 是 | project名称,与配置文件一一对应 | +| -f或--file | 指定project的配置文件 | 是 | 是 | 需要指定路径名称 | +| -s或--socket | 与etmemd服务端通信的socket名称,需要与etmemd启动时指定的保持一致 | 是 | 是 | 必须配置,在有多个etmemd时,由管理员选择与哪个etmemd通信 | + +del命令: + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 示例说明 | +| ------------ | ------------------------------------------------------------ | -------- | ---------- | -------------------------------------------------------- | +| -n或--name | 指定project名称 | 是 | 是 | project名称,与配置文件一一对应 | +| -s或--socket | 与etmemd服务端通信的socket名称,需要与etmemd启动时指定的保持一致 | 是 | 是 | 必须配置,在有多个etmemd时,由管理员选择与哪个etmemd通信 | + +show命令: + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 示例说明 | +| ------------ | ------------------------------------------------------------ | -------- | ---------- | -------------------------------------------------------- | +| -s或--socket | 与etmemd服务端通信的socket名称,需要与etmemd启动时指定的保持一致 | 是 | 是 | 必须配置,在有多个etmemd时,由管理员选择与哪个etmemd通信 | + +### etmem任务启动、停止 + +#### 场景描述 + +在已经通过etmem project add添加工程之后,在还未调用etmem project del删除工程之前,可以对etmem的工程进行启动和停止。 + +1)管理员启动已添加的工程 + +2)管理员停止已启动的工程 + +在管理员调用project del删除工程时,如果工程已经启动,则会自动停止。 + +#### 使用方法 + +通过etmem二进制执行任务启动/停止操作,前提是服务端已经成功运行,配置文件(e.g. /etc/etmem/example_conf.yaml)内容正确,且etmem工程已经创建。 + +启动工程 +``` +# etmem migrate start -n test -s etmemd_socket +``` +停止工程 +``` +# etmem migrate stop -n test -s etmemd_socket +``` +打印帮助 +``` +# etmem migrate help +``` +#### 帮助信息 +``` +Usage: + etmem migrate start [options] + etmem migrate stop [options] + etmem migrate help + + Options: + -n|--name Add project name + -s|--sock Socket name to connect + + Notes: + Project name and socket name must be given when execute start or stop option. +``` +#### 命令行参数说明 + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 示例说明 | +| ------------ | ------------------------------------------------------------ | -------- | ---------- | -------------------------------------------------------- | +| -n或--name | 指定project名称 | 是 | 是 | project名称,与配置文件一一对应 | +| -s或--socket | 与etmemd服务端通信的socket名称,需要与etmemd启动时指定的保持一致 | 是 | 是 | 必须配置,在有多个etmemd时,由管理员选择与哪个etmemd通信 | diff --git a/content/zh/docs/Container/public_sys-resources/icon-caution.gif b/docs/zh/docs/Administration/public_sys-resources/icon-caution.gif similarity index 100% rename from content/zh/docs/Container/public_sys-resources/icon-caution.gif rename to docs/zh/docs/Administration/public_sys-resources/icon-caution.gif diff --git a/content/zh/docs/Container/public_sys-resources/icon-danger.gif b/docs/zh/docs/Administration/public_sys-resources/icon-danger.gif similarity index 100% rename from content/zh/docs/Container/public_sys-resources/icon-danger.gif rename to docs/zh/docs/Administration/public_sys-resources/icon-danger.gif diff --git a/content/zh/docs/Installation/public_sys-resources/icon-note.gif b/docs/zh/docs/Administration/public_sys-resources/icon-note.gif similarity index 100% rename from content/zh/docs/Installation/public_sys-resources/icon-note.gif rename to docs/zh/docs/Administration/public_sys-resources/icon-note.gif diff --git a/content/zh/docs/Installation/public_sys-resources/icon-notice.gif b/docs/zh/docs/Administration/public_sys-resources/icon-notice.gif similarity index 100% rename from content/zh/docs/Installation/public_sys-resources/icon-notice.gif rename to docs/zh/docs/Administration/public_sys-resources/icon-notice.gif diff --git a/content/zh/docs/Container/public_sys-resources/icon-tip.gif b/docs/zh/docs/Administration/public_sys-resources/icon-tip.gif similarity index 100% rename from content/zh/docs/Container/public_sys-resources/icon-tip.gif rename to docs/zh/docs/Administration/public_sys-resources/icon-tip.gif diff --git a/content/zh/docs/Container/public_sys-resources/icon-warning.gif b/docs/zh/docs/Administration/public_sys-resources/icon-warning.gif similarity index 100% rename from content/zh/docs/Container/public_sys-resources/icon-warning.gif rename to docs/zh/docs/Administration/public_sys-resources/icon-warning.gif diff --git "a/content/zh/docs/Administration/\344\275\277\347\224\250DNF\347\256\241\347\220\206\350\275\257\344\273\266\345\214\205.md" "b/docs/zh/docs/Administration/\344\275\277\347\224\250DNF\347\256\241\347\220\206\350\275\257\344\273\266\345\214\205.md" similarity index 92% rename from "content/zh/docs/Administration/\344\275\277\347\224\250DNF\347\256\241\347\220\206\350\275\257\344\273\266\345\214\205.md" rename to "docs/zh/docs/Administration/\344\275\277\347\224\250DNF\347\256\241\347\220\206\350\275\257\344\273\266\345\214\205.md" index 91cffb82946202d9805fc1d6d2a53be00374398f..b4db8ef034fc6a2d190748a14fc493f892f00ac4 100644 --- "a/content/zh/docs/Administration/\344\275\277\347\224\250DNF\347\256\241\347\220\206\350\275\257\344\273\266\345\214\205.md" +++ "b/docs/zh/docs/Administration/\344\275\277\347\224\250DNF\347\256\241\347\220\206\350\275\257\344\273\266\345\214\205.md" @@ -1,598 +1,604 @@ -# 使用DNF管理软件包 - -DNF是一款Linux软件包管理工具,用于管理RPM软件包。DNF可以查询软件包信息,从指定软件库获取软件包,自动处理依赖关系以安装或卸载软件包,以及更新系统到最新可用版本。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->- DNF与YUM完全兼容,提供了YUM兼容的命令行以及为扩展和插件提供的API。 ->- 使用DNF需要管理员权限,本章所有命令需要在管理员权限下执行。 - - -- [使用DNF管理软件包](#使用dnf管理软件包) - - [配置DNF](#配置dnf) - - [DNF配置文件](#dnf配置文件) - - [创建本地软件源仓库](#创建本地软件源仓库) - - [添加、启用和禁用软件源](#添加启用和禁用软件源) - - [管理软件包](#管理软件包) - - [搜索软件包](#搜索软件包) - - [列出软件包清单](#列出软件包清单) - - [显示RPM包信息](#显示rpm包信息) - - [安装RPM包](#安装rpm包) - - [下载软件包](#下载软件包) - - [删除软件包](#删除软件包) - - [管理软件包组](#管理软件包组) - - [列出软件包组清单](#列出软件包组清单) - - [显示软件包组信息](#显示软件包组信息) - - [安装软件包组](#安装软件包组) - - [删除软件包组](#删除软件包组) - - [检查并更新](#检查并更新) - - [检查更新](#检查更新) - - [升级](#升级) - - [更新所有的包和它们的依赖](#更新所有的包和它们的依赖) - - - -## 配置DNF - - - -### DNF配置文件 - -DNF 的主要配置文件是 /etc/dnf/dnf.conf,该文件包含两部分: - -- “main”部分保存着DNF的全局设置。 - -- “repository”部分保存着软件源的设置,可以有一个或多个“repository”。 - -另外,在/etc/yum.repos.d 目录中保存着一个或多个repo源相关文件,它们也可以定义不同的“repository”。 - -所以openEuler软件源的配置一般有两种方式,一种是直接配置/etc/dnf/dnf.conf文件中的“repository”部分,另外一种是在/etc/yum.repos.d目录下增加.repo文件。 - -#### 配置main部分 - -/etc/dnf/dnf.conf 文件包含的“main”部分,配置示例如下: - -``` -[main] -gpgcheck=1 -installonly_limit=3 -clean_requirements_on_remove=True -best=True -``` - -常用选项说明: - -**表 1** main参数说明 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数

-

说明

-

cachedir

-

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

-

keepcache

-

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

-

debuglevel

-

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

-

clean_requirements_on_remove

-

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

-

best

-

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

-

obsoletes

-

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

-

gpgcheck

-

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

-

plugins

-

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

-

installonly_limit

-

设置可以同时安装“installonlypkgs”指令列出包的数量。默认值为3,不建议降低此值。

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

参数

-

说明

-

name=repository_name

-

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

-

baseurl=repository_url

-

软件仓库(repository )的地址。

-
  • 使用http协议的网络位置:例如 http://path/to/repo
  • 使用ftp协议的网络位置:例如 ftp://path/to/repo
  • 本地位置:例如 file:///path/to/local/repo
-
- - -- 配置/etc/yum.repos.d目录下的.repo文件 - - openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装]({{< relref "../Releasenotes/系统安装.md" >}}),以AArch64架构的OS repo源为例。使用root权限在openEuler_aarch64.repo文件中添加openEuler repo源,示例如下: - - ``` - # vi /etc/yum.repos.d/openEuler_aarch64.repo - ``` - - ``` - [osrepo] - name=osrepo - baseurl=https://repo.openeuler.org/openEuler-20.03-LTS/OS/aarch64/ - enabled=1 - gpgcheck=1 - gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS/OS/aarch64/RPM-GPG-KEY-openEuler - - ``` - - >![](public_sys-resources/icon-note.gif) **说明:** - > - enabled为是否启用该软件源仓库,可选值为1和0。默认值为1,表示启用该软件源仓库。 - > - gpgkey为验证签名用的公钥。 - - -#### 显示当前配置 - -- 要显示当前的配置信息: - - ``` - dnf config-manager --dump - ``` - -- 要显示相应软件源的配置,首先查询repo id: - - ``` - dnf repolist - ``` - - 然后执行如下命令,显示对应id的软件源配置,其中 _repository_ 为查询得到的repo id: - - ``` - dnf config-manager --dump repository - ``` - -- 您也可以使用一个全局正则表达式,来显示所有匹配部分的配置: - - ``` - dnf config-manager --dump glob_expression - ``` - - -### 创建本地软件源仓库 - -要建立一个本地软件源仓库,请按照下列步骤操作。 - -1. 安装createrepo软件包。在root权限下执行如下命令: - - ``` - dnf install createrepo - ``` - -2. 将需要的软件包复制到一个目录下,如/mnt/local\_repo/ 。 -3. 创建软件源,执行以下命令: - - ``` - createrepo --database /mnt/local_repo - ``` - - -### 添加、启用和禁用软件源 - -本节将介绍如何通过“dnf config-manager”命令添加、启用和禁用软件源仓库。 - -#### 添加软件源 - -要定义一个新的软件源仓库,您可以在 /etc/dnf/dnf.conf 文件中添加“repository”部分,或者在/etc/yum.repos.d/目录下添加“.repo”文件进行说明。建议您通过添加“.repo”的方式,每个软件源都有自己对应的“.repo”文件,以下介绍该方式的操作方法。 - -要在您的系统中添加一个这样的源,请在root权限下执行如下命令,执行完成之后会在/etc/yum.repos.d/目录下生成对应的repo文件。其中 _repository\_url_ 为repo源地址,详情请参见[表2](#zh-cn_topic_0151921080_t2df9dceb0ff64b2f8db8ec5cd779792a)。 - -``` -dnf config-manager --add-repo repository_url -``` - -#### 启用软件源 - -要启用软件源,请在root权限下执行如下命令,其中 _repository_ 为新增.repo文件中的repo id(可通过dnf repolist查询): - -``` -dnf config-manager --set-enable repository -``` - -您也可以使用一个全局正则表达式,来启用所有匹配的软件源。其中 _glob\_expression_ 为对应的正则表达式,用于同时匹配多个repo id: - -``` -dnf config-manager --set-enable glob_expression -``` - -#### 禁用软件源 - -要禁用软件源,请在root权限下执行如下命令: - -``` -dnf config-manager --set-disable repository -``` - -同样的,您也可以使用一个全局正则表达式来禁用所有匹配的软件源: - -``` -dnf config-manager --set-disable glob_expression -``` - -## 管理软件包 - -使用dnf能够让您方便的进行查询、安装、删除软件包等操作。 - -### 搜索软件包 - -您可以使用rpm包名称、缩写或者描述搜索需要的RPM包,使用命令如下: - -``` -dnf search term -``` - -示例如下: - -``` -$ dnf search httpd -========================================== N/S matched: httpd ========================================== -httpd.aarch64 : Apache HTTP Server -httpd-devel.aarch64 : Development interfaces for the Apache HTTP server -httpd-manual.noarch : Documentation for the Apache HTTP server -httpd-tools.aarch64 : Tools for use with the Apache HTTP Server -libmicrohttpd.aarch64 : Lightweight library for embedding a webserver in applications -mod_auth_mellon.aarch64 : A SAML 2.0 authentication module for the Apache Httpd Server -mod_dav_svn.aarch64 : Apache httpd module for Subversion server -``` - -### 列出软件包清单 - -要列出系统中所有已安装的以及可用的RPM包信息,使用命令如下: - -``` -dnf list all -``` - -要列出系统中特定的RPM包信息,使用命令如下: - -``` -dnf list glob_expression... -``` - -示例如下: - -``` -$ dnf list httpd -Available Packages -httpd.aarch64 2.4.34-8.h5.oe1 Local -``` - -### 显示RPM包信息 - -要显示一个或者多个RPM包信息,使用命令如下: - -``` -dnf info package_name... -``` - -例如搜索,命令如下: - -``` -$ dnf info httpd -Available Packages -Name : httpd -Version : 2.4.34 -Release : 8.h5.oe1 -Arch : aarch64 -Size : 1.2 M -Repo : Local -Summary : Apache HTTP Server -URL : http://httpd.apache.org/ -License : ASL 2.0 -Description : The Apache HTTP Server is a powerful, efficient, and extensible - : web server. -``` - -### 安装RPM包 - -要安装一个软件包及其所有未安装的依赖,请在root权限下执行如下命令: - -``` -dnf install package_name -``` - -您也可以通过添加软件包名字同时安装多个软件包。配置文件/etc/dnf/dnf.conf添加参数strict=False,运行dnf命令参数添加\-\-setopt=strict=0。请在root权限下执行如下命令: - -``` -dnf install package_name package_name... --setopt=strict=0 -``` - -示例如下: - -``` -# dnf install httpd -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->安装RPM包过程中,若出现安装失败,可参考[安装时出现软件包冲突、文件冲突或缺少软件包导致安装失败](FAQ-54.html#安装时出现软件包冲突文件冲突或缺少软件包导致安装失败)。 - -### 下载软件包 - -使用dnf下载软件包,请在root权限下输入如下命令: - -``` -dnf download package_name -``` - -如果需要同时下载未安装的依赖,则加上\-\-resolve,使用命令如下: - -``` -dnf download --resolve package_name -``` - -示例如下: - -``` -# dnf download --resolve httpd -``` - -### 删除软件包 - -要卸载软件包以及相关的依赖软件包,请在root权限下执行如下命令: - -``` -dnf remove package_name... -``` - -示例如下: - -``` -# dnf remove totem -``` - -## 管理软件包组 - -软件包集合是服务于一个共同的目的一组软件包,例如系统工具集等。使用dnf可以对软件包组进行安装/删除等操作,使相关操作更高效。 - -### 列出软件包组清单 - -使用summary参数,可以列出系统中所有已安装软件包组、可用的组,可用的环境组的数量,命令如下: - -``` -dnf groups summary -``` - -使用示例如下: - -``` -# dnf groups summary -Last metadata expiration check: 0:11:56 ago on Sat 17 Aug 2019 07:45:14 PM CST. -Available Groups: 8 -``` - -要列出所有软件包组和它们的组ID ,命令如下: - -``` -dnf group list -``` - -使用示例如下: - -``` -# dnf group list -Last metadata expiration check: 0:10:32 ago on Sat 17 Aug 2019 07:45:14 PM CST. -Available Environment Groups: - Minimal Install - Custom Operating System - Server -Available Groups: - Development Tools - Graphical Administration Tools - Headless Management - Legacy UNIX Compatibility - Network Servers - Scientific Support - Security Tools - System Tools - -``` - -### 显示软件包组信息 - -要列出包含在一个软件包组中必须安装的包和可选包,使用命令如下: - -``` -dnf group info glob_expression... -``` - -例如显示Development Tools信息,示例如下: - -``` -# dnf group info "Development Tools" -Last metadata expiration check: 0:14:54 ago on Wed 05 Jun 2019 08:38:02 PM CST. - -Group: Development Tools - Description: A basic development environment. - Mandatory Packages: - binutils - glibc-devel - make - pkgconf - pkgconf-m4 - pkgconf-pkg-config - rpm-sign - Optional Packages: - expect -``` - -### 安装软件包组 - -每一个软件包组都有自己的名称以及相应的ID(groupid),您可以使用软件包组名称或它的ID进行安装。 - -要安装一个软件包组,请在root权限下执行如下命令: - -``` -dnf group install group_name -``` - -``` -dnf group install groupid -``` - -例如安装Development Tools相应的软件包组,命令如下: - -``` -# dnf group install "Development Tools" -``` - -``` -# dnf group install development -``` - -### 删除软件包组 - -要卸载软件包组,您可以使用软件包组名称或它的ID,在root权限下执行如下命令: - -``` -dnf group remove group_name -``` - -``` -dnf group remove groupid -``` - -例如删除Development Tools相应的软件包组,命令如下: - -``` -# dnf group remove "Development Tools" -``` - -``` -# dnf group remove development -``` - -## 检查并更新 - -dnf可以检查您的系统中是否有软件包需要更新。您可以通过dnf列出需要更新的软件包,并可以选择一次性全部更新或者只对指定包进行更新。 - -### 检查更新 - -如果您需要显示当前系统可用的更新,使用命令如下: - -``` -dnf check-update -``` - -使用实例如下: - -``` -# dnf check-update -Last metadata expiration check: 0:02:10 ago on Sun 01 Sep 2019 11:28:07 PM CST. - -anaconda-core.aarch64 19.31.123-1.14 updates -anaconda-gui.aarch64 19.31.123-1.14 updates -anaconda-tui.aarch64 19.31.123-1.14 updates -anaconda-user-help.aarch64 19.31.123-1.14 updates -anaconda-widgets.aarch64 19.31.123-1.14 updates -bind-libs.aarch64 32:9.9.4-29.3 updates -bind-libs-lite.aarch64 32:9.9.4-29.3 updates -bind-license.noarch 32:9.9.4-29.3 updates -bind-utils.aarch64 32:9.9.4-29.3 updates -... -``` - -### 升级 - -如果您需要升级单个软件包,在root权限下执行如下命令: - -``` -dnf update package_name -``` - -例如升级rpm包,示例如下: - -``` -# dnf update anaconda-gui.aarch64 -Last metadata expiration check: 0:02:10 ago on Sun 01 Sep 2019 11:30:27 PM CST. -Dependencies Resolved -================================================================================ - Package Arch Version Repository Size -================================================================================ -Updating: - anaconda-gui aarch64 19.31.123-1.14 updates 461 k - anaconda-core aarch64 19.31.123-1.14 updates 1.4 M - anaconda-tui aarch64 19.31.123-1.14 updates 274 k - anaconda-user-help aarch64 19.31.123-1.14 updates 315 k - anaconda-widgets aarch64 19.31.123-1.14 updates 748 k - -Transaction Summary -================================================================================ -Upgrade 5 Package - -Total download size: 3.1 M -Is this ok [y/N]: -``` - -类似的,如果您需要升级软件包组,在root权限下执行如下命令: - -``` -dnf group update group_name -``` - -### 更新所有的包和它们的依赖 - -要更新所有的包和它们的依赖,在root权限下执行如下命令: - -``` -dnf update -``` +# 使用DNF管理软件包 + +DNF是一款Linux软件包管理工具,用于管理RPM软件包。DNF可以查询软件包信息,从指定软件库获取软件包,自动处理依赖关系以安装或卸载软件包,以及更新系统到最新可用版本。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>- DNF与YUM完全兼容,提供了YUM兼容的命令行以及为扩展和插件提供的API。 +>- 使用DNF需要管理员权限,本章所有命令需要在管理员权限下执行。 + + +- [使用DNF管理软件包](#使用dnf管理软件包) + - [配置DNF](#配置dnf) + - [DNF配置文件](#dnf配置文件) + - [创建本地软件源仓库](#创建本地软件源仓库) + - [添加、启用和禁用软件源](#添加启用和禁用软件源) + - [管理软件包](#管理软件包) + - [搜索软件包](#搜索软件包) + - [列出软件包清单](#列出软件包清单) + - [显示RPM包信息](#显示rpm包信息) + - [安装RPM包](#安装rpm包) + - [下载软件包](#下载软件包) + - [删除软件包](#删除软件包) + - [管理软件包组](#管理软件包组) + - [列出软件包组清单](#列出软件包组清单) + - [显示软件包组信息](#显示软件包组信息) + - [安装软件包组](#安装软件包组) + - [删除软件包组](#删除软件包组) + - [检查并更新](#检查并更新) + - [检查更新](#检查更新) + - [升级](#升级) + - [更新所有的包和它们的依赖](#更新所有的包和它们的依赖) + + + +## 配置DNF + + + +### DNF配置文件 + +DNF 的主要配置文件是 /etc/dnf/dnf.conf,该文件包含两部分: + +- “main”部分保存着DNF的全局设置。 + +- “repository”部分保存着软件源的设置,可以有一个或多个“repository”。 + +另外,在/etc/yum.repos.d 目录中保存着一个或多个repo源相关文件,它们也可以定义不同的“repository”。 + +所以openEuler软件源的配置一般有两种方式,一种是直接配置/etc/dnf/dnf.conf文件中的“repository”部分,另外一种是在/etc/yum.repos.d目录下增加.repo文件。 + +#### 配置main部分 + +/etc/dnf/dnf.conf 文件包含的“main”部分,配置示例如下: + +``` +[main] +gpgcheck=1 +installonly_limit=3 +clean_requirements_on_remove=True +best=True +skip_if_unavailable=False +``` + +常用选项说明: + +**表 1** main参数说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

说明

+

cachedir

+

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

+

keepcache

+

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

+

debuglevel

+

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

+

clean_requirements_on_remove

+

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

+

best

+

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

+

obsoletes

+

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

+

gpgcheck

+

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

+

plugins

+

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

+

installonly_limit

+

设置可以同时安装“installonlypkgs”指令列出包的数量。默认值为3,不建议降低此值。

+

skip_if_unavailable

+

可选值True和False,用来控制元数据仓库不可用时的行为。默认值为False,当元数据仓库不可用时会停止存储并报错。

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

参数

+

说明

+

name=repository_name

+

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

+

baseurl=repository_url

+

软件仓库(repository )的地址。

+
  • 使用http协议的网络位置:例如 http://path/to/repo
  • 使用ftp协议的网络位置:例如 ftp://path/to/repo
  • 本地位置:例如 file:///path/to/local/repo
+
+ + +- 配置/etc/yum.repos.d目录下的.repo文件 + + openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](./../Releasenotes/系统安装.md\),使用管理员权限添加openEuler repo源,示例如下: + + ``` + # vi /etc/yum.repos.d/openEuler.repo + ``` + + ``` + [OS] + name=openEuler-$releasever - OS + baseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/$basearch/ + enabled=1 + gpgcheck=1 + gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/$basearch/RPM-GPG-KEY-openEuler + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + > - enabled为是否启用该软件源仓库,可选值为1和0。默认值为1,表示启用该软件源仓库。 + > - gpgkey为验证签名用的公钥。 + + +#### 显示当前配置 + +- 要显示当前的配置信息: + + ``` + dnf config-manager --dump + ``` + +- 要显示相应软件源的配置,首先查询repo id: + + ``` + dnf repolist + ``` + + 然后执行如下命令,显示对应id的软件源配置,其中 _repository_ 为查询得到的repo id: + + ``` + dnf config-manager --dump repository + ``` + +- 您也可以使用一个全局正则表达式,来显示所有匹配部分的配置: + + ``` + dnf config-manager --dump glob_expression + ``` + + +### 创建本地软件源仓库 + +要建立一个本地软件源仓库,请按照下列步骤操作。 + +1. 安装createrepo软件包。在root权限下执行如下命令: + + ``` + dnf install createrepo + ``` + +2. 将需要的软件包复制到一个目录下,如/mnt/local\_repo/ 。 +3. 创建软件源,执行以下命令: + + ``` + createrepo --database /mnt/local_repo + ``` + + +### 添加、启用和禁用软件源 + +本节将介绍如何通过“dnf config-manager”命令添加、启用和禁用软件源仓库。 + +#### 添加软件源 + +要定义一个新的软件源仓库,您可以在 /etc/dnf/dnf.conf 文件中添加“repository”部分,或者在/etc/yum.repos.d/目录下添加“.repo”文件进行说明。建议您通过添加“.repo”的方式,每个软件源都有自己对应的“.repo”文件,以下介绍该方式的操作方法。 + +要在您的系统中添加一个这样的源,请在root权限下执行如下命令,执行完成之后会在/etc/yum.repos.d/目录下生成对应的repo文件。其中 _repository\_url_ 为repo源地址,详情请参见[表2](#zh-cn_topic_0151921080_t2df9dceb0ff64b2f8db8ec5cd779792a)。 + +``` +dnf config-manager --add-repo repository_url +``` + +#### 启用软件源 + +要启用软件源,请在root权限下执行如下命令,其中 _repository_ 为新增.repo文件中的repo id(可通过dnf repolist查询): + +``` +dnf config-manager --set-enable repository +``` + +您也可以使用一个全局正则表达式,来启用所有匹配的软件源。其中 _glob\_expression_ 为对应的正则表达式,用于同时匹配多个repo id: + +``` +dnf config-manager --set-enable glob_expression +``` + +#### 禁用软件源 + +要禁用软件源,请在root权限下执行如下命令: + +``` +dnf config-manager --set-disable repository +``` + +同样的,您也可以使用一个全局正则表达式来禁用所有匹配的软件源: + +``` +dnf config-manager --set-disable glob_expression +``` + +## 管理软件包 + +使用dnf能够让您方便的进行查询、安装、删除软件包等操作。 + +### 搜索软件包 + +您可以使用rpm包名称、缩写或者描述搜索需要的RPM包,使用命令如下: + +``` +dnf search term +``` + +示例如下: + +``` +$ dnf search httpd +========================================== N/S matched: httpd ========================================== +httpd.aarch64 : Apache HTTP Server +httpd-devel.aarch64 : Development interfaces for the Apache HTTP server +httpd-manual.noarch : Documentation for the Apache HTTP server +httpd-tools.aarch64 : Tools for use with the Apache HTTP Server +libmicrohttpd.aarch64 : Lightweight library for embedding a webserver in applications +mod_auth_mellon.aarch64 : A SAML 2.0 authentication module for the Apache Httpd Server +mod_dav_svn.aarch64 : Apache httpd module for Subversion server +``` + +### 列出软件包清单 + +要列出系统中所有已安装的以及可用的RPM包信息,使用命令如下: + +``` +dnf list all +``` + +要列出系统中特定的RPM包信息,使用命令如下: + +``` +dnf list glob_expression... +``` + +示例如下: + +``` +$ dnf list httpd +Available Packages +httpd.aarch64 2.4.34-8.h5.oe1 Local +``` + +### 显示RPM包信息 + +要显示一个或者多个RPM包信息,使用命令如下: + +``` +dnf info package_name... +``` + +例如搜索,命令如下: + +``` +$ dnf info httpd +Available Packages +Name : httpd +Version : 2.4.34 +Release : 8.h5.oe1 +Arch : aarch64 +Size : 1.2 M +Repo : Local +Summary : Apache HTTP Server +URL : http://httpd.apache.org/ +License : ASL 2.0 +Description : The Apache HTTP Server is a powerful, efficient, and extensible + : web server. +``` + +### 安装RPM包 + +要安装一个软件包及其所有未安装的依赖,请在root权限下执行如下命令: + +``` +dnf install package_name +``` + +您也可以通过添加软件包名字同时安装多个软件包。配置文件/etc/dnf/dnf.conf添加参数strict=False,运行dnf命令参数添加\-\-setopt=strict=0。请在root权限下执行如下命令: + +``` +dnf install package_name package_name... --setopt=strict=0 +``` + +示例如下: + +``` +# dnf install httpd +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>安装RPM包过程中,若出现安装失败,可参考[安装时出现软件包冲突、文件冲突或缺少软件包导致安装失败](./FAQ-54.html#安装时出现软件包冲突文件冲突或缺少软件包导致安装失败)。 + +### 下载软件包 + +使用dnf下载软件包,请在root权限下输入如下命令: + +``` +dnf download package_name +``` + +如果需要同时下载未安装的依赖,则加上\-\-resolve,使用命令如下: + +``` +dnf download --resolve package_name +``` + +示例如下: + +``` +# dnf download --resolve httpd +``` + +### 删除软件包 + +要卸载软件包以及相关的依赖软件包,请在root权限下执行如下命令: + +``` +dnf remove package_name... +``` + +示例如下: + +``` +# dnf remove totem +``` + +## 管理软件包组 + +软件包集合是服务于一个共同的目的一组软件包,例如系统工具集等。使用dnf可以对软件包组进行安装/删除等操作,使相关操作更高效。 + +### 列出软件包组清单 + +使用summary参数,可以列出系统中所有已安装软件包组、可用的组,可用的环境组的数量,命令如下: + +``` +dnf groups summary +``` + +使用示例如下: + +``` +# dnf groups summary +Last metadata expiration check: 0:11:56 ago on Sat 17 Aug 2019 07:45:14 PM CST. +Available Groups: 8 +``` + +要列出所有软件包组和它们的组ID ,命令如下: + +``` +dnf group list +``` + +使用示例如下: + +``` +# dnf group list +Last metadata expiration check: 0:10:32 ago on Sat 17 Aug 2019 07:45:14 PM CST. +Available Environment Groups: + Minimal Install + Custom Operating System + Server +Available Groups: + Development Tools + Graphical Administration Tools + Headless Management + Legacy UNIX Compatibility + Network Servers + Scientific Support + Security Tools + System Tools + +``` + +### 显示软件包组信息 + +要列出包含在一个软件包组中必须安装的包和可选包,使用命令如下: + +``` +dnf group info glob_expression... +``` + +例如显示Development Tools信息,示例如下: + +``` +# dnf group info "Development Tools" +Last metadata expiration check: 0:14:54 ago on Wed 05 Jun 2019 08:38:02 PM CST. + +Group: Development Tools + Description: A basic development environment. + Mandatory Packages: + binutils + glibc-devel + make + pkgconf + pkgconf-m4 + pkgconf-pkg-config + rpm-sign + Optional Packages: + expect +``` + +### 安装软件包组 + +每一个软件包组都有自己的名称以及相应的ID(groupid),您可以使用软件包组名称或它的ID进行安装。 + +要安装一个软件包组,请在root权限下执行如下命令: + +``` +dnf group install group_name +``` + +``` +dnf group install groupid +``` + +例如安装Development Tools相应的软件包组,命令如下: + +``` +# dnf group install "Development Tools" +``` + +``` +# dnf group install development +``` + +### 删除软件包组 + +要卸载软件包组,您可以使用软件包组名称或它的ID,在root权限下执行如下命令: + +``` +dnf group remove group_name +``` + +``` +dnf group remove groupid +``` + +例如删除Development Tools相应的软件包组,命令如下: + +``` +# dnf group remove "Development Tools" +``` + +``` +# dnf group remove development +``` + +## 检查并更新 + +dnf可以检查您的系统中是否有软件包需要更新。您可以通过dnf列出需要更新的软件包,并可以选择一次性全部更新或者只对指定包进行更新。 + +### 检查更新 + +如果您需要显示当前系统可用的更新,使用命令如下: + +``` +dnf check-update +``` + +使用示例如下: + +``` +# dnf check-update +Last metadata expiration check: 0:02:10 ago on Sun 01 Sep 2019 11:28:07 PM CST. + +anaconda-core.aarch64 19.31.123-1.14 updates +anaconda-gui.aarch64 19.31.123-1.14 updates +anaconda-tui.aarch64 19.31.123-1.14 updates +anaconda-user-help.aarch64 19.31.123-1.14 updates +anaconda-widgets.aarch64 19.31.123-1.14 updates +bind-libs.aarch64 32:9.9.4-29.3 updates +bind-libs-lite.aarch64 32:9.9.4-29.3 updates +bind-license.noarch 32:9.9.4-29.3 updates +bind-utils.aarch64 32:9.9.4-29.3 updates +... +``` + +### 升级 + +如果您需要升级单个软件包,在root权限下执行如下命令: + +``` +dnf update package_name +``` + +例如升级rpm包,示例如下: + +``` +# dnf update anaconda-gui.aarch64 +Last metadata expiration check: 0:02:10 ago on Sun 01 Sep 2019 11:30:27 PM CST. +Dependencies Resolved +================================================================================ + Package Arch Version Repository Size +================================================================================ +Updating: + anaconda-gui aarch64 19.31.123-1.14 updates 461 k + anaconda-core aarch64 19.31.123-1.14 updates 1.4 M + anaconda-tui aarch64 19.31.123-1.14 updates 274 k + anaconda-user-help aarch64 19.31.123-1.14 updates 315 k + anaconda-widgets aarch64 19.31.123-1.14 updates 748 k + +Transaction Summary +================================================================================ +Upgrade 5 Package + +Total download size: 3.1 M +Is this ok [y/N]: +``` + +类似的,如果您需要升级软件包组,在root权限下执行如下命令: + +``` +dnf group update group_name +``` + +### 更新所有的包和它们的依赖 + +要更新所有的包和它们的依赖,在root权限下执行如下命令: + +``` +dnf update +``` diff --git "a/content/zh/docs/Administration/\344\275\277\347\224\250KAE\345\212\240\351\200\237\345\274\225\346\223\216.md" "b/docs/zh/docs/Administration/\344\275\277\347\224\250KAE\345\212\240\351\200\237\345\274\225\346\223\216.md" similarity index 96% rename from "content/zh/docs/Administration/\344\275\277\347\224\250KAE\345\212\240\351\200\237\345\274\225\346\223\216.md" rename to "docs/zh/docs/Administration/\344\275\277\347\224\250KAE\345\212\240\351\200\237\345\274\225\346\223\216.md" index da7e0e65396e5d3b6ec0186f2d591df1fd2e27ff..af1c66d9cad1dae12c48baa9b02f1793a553c1c5 100644 --- "a/content/zh/docs/Administration/\344\275\277\347\224\250KAE\345\212\240\351\200\237\345\274\225\346\223\216.md" +++ "b/docs/zh/docs/Administration/\344\275\277\347\224\250KAE\345\212\240\351\200\237\345\274\225\346\223\216.md" @@ -80,12 +80,12 @@ KAE加速引擎主要有以下应用场景,如[表1](#table11915824163418)所 - TaiShan 200服务器,开启加速引擎功能 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >- 需要导入加速器许可证,具体操作请参考《[TaiShan 机架服务器 iBMC \(V500及以上\) 用户指南](https://support.huawei.com/enterprise/zh/doc/EDOC1100121687)》中“许可证管理”章节。 >- 物理机场景使用加速器需要关闭SMMU,具体操作请参考《[TaiShan 200服务器BIOS参数参考](https://support.huawei.com/enterprise/zh/doc/EDOC1100088653)》。 - CPU:Kunpeng 920 -- 操作系统:openEuler-20.03-LTS-aarch64-dvd.iso +- 操作系统:openEuler-20.03-LTS-SP3-aarch64-dvd.iso ##### KAE加速引擎软件说明 @@ -141,7 +141,7 @@ KAE加速引擎主要有以下应用场景,如[表1](#table11915824163418)所 3. 使用SSH远程登录工具,将所有加速引擎软件包拷贝到已建好的目录下。 4. 在存放加速引擎软件包目录下,使用rpm -ivh命令安装加速器引擎软件包。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >由于libkae包的安装依赖libwd包,所以libwd的安装必须先于libkae。 ``` @@ -286,7 +286,7 @@ hisi_zip-1.2.10-4.oe1.aarch64 ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >使用KAE引擎加速后签名性能从724.1 sign/s提升到2819sign/s。 - 使用OpenSSL的软件算法测试异步RSA性能。 @@ -308,7 +308,7 @@ hisi_zip-1.2.10-4.oe1.aarch64 ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >使用KAE引擎加速后异步RSA签名性能从735.7 sign/s提升到 54384.1sign/s。 - 使用OpenSSL的软件算法测试SM4 CBC模式性能。 @@ -336,7 +336,7 @@ hisi_zip-1.2.10-4.oe1.aarch64 ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >使用KAE加速后SM4 CBC模式在输入数据块大小为8M时,从82312.53k/s提升到383317.33k/s。 - 使用OpenSSL的软件算法测试SM3模式性能。 @@ -363,7 +363,7 @@ hisi_zip-1.2.10-4.oe1.aarch64 ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >使用KAE加速后SM3算法在输入数据块大小为8M时,从52428.80 k/s提升到668292.44k/s。 - 使用OpenSSL软件算法测试AES算法CBC模式异步性能。 @@ -392,7 +392,7 @@ hisi_zip-1.2.10-4.oe1.aarch64 ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >- AES仅支持数据长度为256KB及以下场景的异步使用。 >- 使用KAE加速后AES算法在输入数据块为100K大小时,从1123328.00k/s提升到3996774.40 k/s 。 @@ -411,15 +411,15 @@ hisi_zip-1.2.10-4.oe1.aarch64 命令和信息回显如下所示。 - ![](figures/zh-cn_image_0231143189.png) + ![](./figures/zh-cn_image_0231143189.png) - ![](figures/zh-cn_image_0231143191.png) + ![](./figures/zh-cn_image_0231143191.png) 5. 使用rpm -qa 命令查询是否升级成功。确认查询到的版本是最新的升级后版本。 - ![](figures/zh-cn_image_0231143193.png) + ![](./figures/zh-cn_image_0231143193.png) - ![](figures/zh-cn_image_0231143195.png) + ![](./figures/zh-cn_image_0231143195.png) 6. 重启系统或通过命令行手动卸载旧版本驱动,然后加载新版本驱动,并查看是否加载成功 @@ -466,16 +466,16 @@ hisi_zip-1.2.10-4.oe1.aarch64 3. 通过rpm -e 命令卸载加速引擎软件包。示例如下。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >由于存在依赖关系,卸载libwd前须先卸载libkae引擎软件包。 - ![](figures/zh-cn_image_0231143196.png) + ![](./figures/zh-cn_image_0231143196.png) - ![](figures/zh-cn_image_0231143197.png) + ![](./figures/zh-cn_image_0231143197.png) 4. 使用rpm -qa |grep 软件包名命令查询是否卸载成功。 - ![](figures/zh-cn_image_0231143198.png) + ![](./figures/zh-cn_image_0231143198.png) ## 日志查询 @@ -519,7 +519,7 @@ hisi_zip-1.2.10-4.oe1.aarch64 ## 加速引擎的应用 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >如果用户未购买引擎许可证,建议用户不要通过kae引擎调用相应算法,否则可能会影响openssl加密算法的性能。 ### KAE引擎使用示例代码 diff --git "a/content/zh/docs/Administration/\344\275\277\347\224\250LVM\347\256\241\347\220\206\347\241\254\347\233\230.md" "b/docs/zh/docs/Administration/\344\275\277\347\224\250LVM\347\256\241\347\220\206\347\241\254\347\233\230.md" similarity index 99% rename from "content/zh/docs/Administration/\344\275\277\347\224\250LVM\347\256\241\347\220\206\347\241\254\347\233\230.md" rename to "docs/zh/docs/Administration/\344\275\277\347\224\250LVM\347\256\241\347\220\206\347\241\254\347\233\230.md" index 3add822aacd8b9d070e747d11a9de35cb7c464bc..08be596ebd0403fabd21c2642755cad5e8c22ec0 100644 --- "a/content/zh/docs/Administration/\344\275\277\347\224\250LVM\347\256\241\347\220\206\347\241\254\347\233\230.md" +++ "b/docs/zh/docs/Administration/\344\275\277\347\224\250LVM\347\256\241\347\220\206\347\241\254\347\233\230.md" @@ -61,10 +61,10 @@ LVM是逻辑卷管理(Logical Volume Manager)的简称,它是Linux环境 ## 安装 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >openEuler操作系统默认已安装LVM。可通过**rpm -qa | grep lvm2**命令查询,若打印信息中包含“lvm2”信息,则表示已安装LVM,可跳过本章节内;若无任何打印信息,则表示未安装,可参考本章节内容进行安装。 -1. 配置本地yum源,详细信息请参考[搭建repo服务器](搭建repo服务器.html)。 +1. 配置本地yum源,详细信息请参考[搭建repo服务器](./搭建repo服务器.html)。 2. 清除缓存。 ``` @@ -372,7 +372,7 @@ lvdisplay [option] [lvname] - lvname:指定要显示属性的逻辑卷对应的设备文件。如果省略,则显示所有的逻辑卷属性。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >逻辑卷对应的设备文件保存在卷组目录下,例如:在卷组vg1上创建一个逻辑卷lv1,则此逻辑卷对应的设备文件为/dev/vg1/lv1。 diff --git "a/content/zh/docs/Administration/\345\237\272\347\241\200\351\205\215\347\275\256.md" "b/docs/zh/docs/Administration/\345\237\272\347\241\200\351\205\215\347\275\256.md" similarity index 60% rename from "content/zh/docs/Administration/\345\237\272\347\241\200\351\205\215\347\275\256.md" rename to "docs/zh/docs/Administration/\345\237\272\347\241\200\351\205\215\347\275\256.md" index 316b2356e1af95e44845e63a785082a96d0ab422..d10354ea6ca81250d0e1dc9dc320f04abdf7a4f5 100644 --- "a/content/zh/docs/Administration/\345\237\272\347\241\200\351\205\215\347\275\256.md" +++ "b/docs/zh/docs/Administration/\345\237\272\347\241\200\351\205\215\347\275\256.md" @@ -1,470 +1,456 @@ -# 基础配置 - - -- [基础配置](#基础配置) - - [设置语言环境](#设置语言环境) - - [显示当前语言环境状态](#显示当前语言环境状态) - - [列出可用的语言环境](#列出可用的语言环境) - - [设置语言环境](#设置语言环境-1) - - [设置键盘](#设置键盘) - - [显示当前设置](#显示当前设置) - - [列出可用的键盘布局](#列出可用的键盘布局) - - [设置键盘布局](#设置键盘布局) - - [设置日期和时间](#设置日期和时间) - - [使用timedatectl命令设置](#使用timedatectl命令设置) - - [使用date命令设置](#使用date命令设置) - - [使用hwclock命令设置](#使用hwclock命令设置) - - [设置kdump](#设置kdump) - - [设置kdump预留内存](#设置kdump预留内存) - - [预留内存推荐值](#预留内存推荐值) - - [禁用网络相关驱动](#禁用网络相关驱动) - - - - -## 设置语言环境 - -您可以通过localectl修改系统的语言环境,对应的参数设置保存在/etc/locale.conf文件中。这些参数会在系统启动过程中被systemd的守护进程读取。 - -### 显示当前语言环境状态 - -显示当前语言环境,命令如下: - -``` -$ localectl status -``` - -例如显示系统当前的设置,命令和输出如下: - -``` -$ localectl status - System Locale: LANG=zh_CN.UTF-8 - VC Keymap: cn - X11 Layout: cn -``` - -### 列出可用的语言环境 - -显示当前可用的语言环境,命令如下: - -``` -$ localectl list-locales -``` - -例如显示当前系统中所有可用的中文环境,命令和输出如下: - -``` -$ localectl list-locales | grep zh -zh_CN.UTF-8 -``` - -### 设置语言环境 - -要设置语言环境,在root权限下执行如下命令,其中 _locale_ 是您要设置的语言类型,取值范围可通过**localectl list-locales**获取,请根据实际情况修改。 - -``` -# localectl set-locale LANG=locale -``` - -例如设置为简体中文语言环境,在root权限下执行如下命令: - -``` -# localectl set-locale LANG=zh_CN.UTF-8 -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->修改后需要重新登录或者在root权限下执行`source /etc/locale.conf`命令刷新配置文件,使修改生效。 - - -## 设置键盘 - -您可以通过localectl修改系统的键盘设置,对应的参数设置保存在/etc/locale.conf文件中。这些参数,会在系统启动的早期被systemd的守护进程读取。 - -### 显示当前设置 - -显示当前键盘设置,命令如下: - -``` -$ localectl status -``` - -例如显示系统当前的设置,命令和输出如下: - -``` -$ localectl status - System Locale: LANG=zh_CN.UTF-8 - VC Keymap: cn - X11 Layout: cn -``` - -### 列出可用的键盘布局 - -显示当前可用的键盘布局,命令如下: - -``` -$ localectl list-keymaps -``` - -例如显示系统当前的中文键盘布局,命令和输出如下: - -``` -$ localectl list-keymaps | grep cn -cn -``` - -### 设置键盘布局 - -设置键盘布局,在root权限下执行如下命令,其中 _map_ 是您想要设置的键盘类型,取值范围可通过**localectl list-keymaps**获取,请根据实际情况修改: - -``` -# localectl set-keymap map -``` - -此时设置的键盘布局同样也会应用到图形界面中。 - -设置完成后,查看当前状态: - -``` -$ localectl status - System Locale: LANG=zh_CN.UTF-8 - VC Keymap: cn - X11 Layout: us -``` - -## 设置日期和时间 - -本节介绍如何通过timedatectl、date、hwclock命令来设置系统的日期、时间和时区等。 - - - -### 使用timedatectl命令设置 - -#### 显示日期和时间 - -显示当前的日期和时间,命令如下: - -``` -$ timedatectl -``` - -例如显示系统当前的日期和时间,命令和输出如下: - -``` -$ timedatectl - Local time: Mon 2019-09-30 04:05:00 EDT - Universal time: Mon 2019-09-30 08:05:00 UTC - RTC time: Mon 2019-09-30 08:05:00 - Time zone: America/New_York (EDT, -0400) -System clock synchronized: no - NTP service: inactive - RTC in local TZ: no -``` - -#### 通过远程服务器进行时间同步 - -您可以启用NTP远程服务器进行系统时钟的自动同步。是否启用NTP,可在root权限下执行如下命令进行设置。其中 _boolean_ 可取值yes和no,分别表示启用和不启用NTP进行系统时钟自动同步,请根据实际情况修改。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->若启用了NTP远程服务器进行系统时钟自动同步,则不能手动修改日期和时间。若需要手动修改日期或时间,则需确保已经关闭NTP系统时钟自动同步。可执行**timedatectl set-ntp** no命令进行关闭。 - -``` -# timedatectl set-ntp boolean -``` - -例如开启自动远程时间同步,命令如下: - -``` -# timedatectl set-ntp yes -``` - -#### 修改日期 - ->![](public_sys-resources/icon-note.gif) **说明:** ->修改日期前,请确保已经关闭NTP系统时钟自动同步。 - -修改当前的日期,在root权限下执行如下命令,其中 _YYYY_ 代表年份,_MM_ 代表月份,_DD_ 代表某天,请根据实际情况修改: - -``` -# timedatectl set-time YYYY-MM-DD -``` - -例如修改当前的日期为2019年8月14号,命令如下: - -``` -# timedatectl set-time '2019-08-14' -``` - -#### 修改时间 - ->![](public_sys-resources/icon-note.gif) **说明:** ->修改时间前,请确保已经关闭NTP系统时钟自动同步。 - -修改当前的时间,在root权限下执行如下命令,其中 _HH_ 代表小时,_MM_ 代表分钟,_SS_ 代表秒,请根据实际情况修改: - -``` -# timedatectl set-time HH:MM:SS -``` - -例如修改当前的时间为15点57分24秒,命令如下: - -``` -# timedatectl set-time 15:57:24 -``` - -#### 修改时区 - -显示当前可用时区,命令如下: - -``` -$ timedatectl list-timezones -``` - -要修改当前的时区,在root权限下执行如下命令,其中 _time\_zone_ 是您想要设置的时区,请根据实际情况修改: - -``` -# timedatectl set-timezone time_zone -``` - -例如修改当前的时区,首先查询所在地域的可用时区,此处以Asia为例: - -``` -# timedatectl list-timezones | grep Asia -Asia/Aden -Asia/Almaty -Asia/Amman -Asia/Anadyr -Asia/Aqtau -Asia/Aqtobe -Asia/Ashgabat -Asia/Baghdad -Asia/Bahrain -…… - -Asia/Seoul -Asia/Shanghai -Asia/Singapore -Asia/Srednekolymsk -Asia/Taipei -Asia/Tashkent -Asia/Tbilisi -Asia/Tehran -Asia/Thimphu -Asia/Tokyo -``` - -然后修改当前的时区为“Asia/Shanghai”,命令如下: - -``` -# timedatectl set-timezone Asia/Shanghai -``` - -### 使用date命令设置 - -#### 显示当前的日期和时间 - -显示当前的日期和时间,命令如下: - -``` -$ date -``` - -默认情况下,date命令显示本地时间。要显示UTC时间,添加\-\-utc或-u参数: - -``` -$ date --utc -``` - -要自定义对应的输出信息格式,添加 +"format" 参数: - -``` -$ date +"format" -``` - -**表 1** 参数说明 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

格式参数

-

说明

-

%H

-

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

-

%M

-

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

-

%S

-

秒以SS格式(例如 25)。

-

%d

-

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

-

%m

-

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

-

%Y

-

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

-

%Z

-

时区缩写(例如CEST)。

-

%F

-

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

-

%T

-

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

-
- -实际使用示例如下: - -- 显示当前的日期和本地时间。 - - ``` - $ date - 2019年 08月 17日 星期六 17:26:34 CST - ``` - -- 显示当前的日期和UTC时间。 - - ``` - $ date --utc - 2019年 08月 17日 星期六 09:26:18 UTC - ``` - -- 自定义date命令的输出。 - - ``` - $ date +"%Y-%m-%d %H:%M" - 2019-08-17 17:24 - ``` - - -#### 修改时间 - -要修改当前的时间,添加\-\-set或者-s参数。在root权限下执行如下命令,其中 _HH_ 代表小时,_MM_ 代表分钟,_SS_ 代表秒,请根据实际情况修改: - -``` -# date --set HH:MM:SS -``` - -默认情况下, date命令设置本地时间。要设置UTC时间,添加\-\-utc或-u参数: - -``` -# date --set HH:MM:SS --utc -``` - -例如修改当前的时间为23点26分00秒,在root权限下执行如下命令: - -``` -# date --set 23:26:00 -``` - -#### 修改日期 - -修改当前的日期,添加\-\-set或者-s参数。在root权限下执行如下命令,其中 _YYYY_ 代表年份,_MM_ 代表月份,_DD_ 代表某天,请根据实际情况修改: - -``` -# date --set YYYY-MM-DD -``` - -例如修改当前的日期为2019年11月2日,命令如下: - -``` -# date --set 2019-11-02 -``` - -### 使用hwclock命令设置 - -可以使用 hwclock 命令设置硬件时钟RTC \(Real Time Clock\) 。 - -#### 硬件时钟和系统时钟 - -Linux 将时钟分为: - -- 系统时钟 \(System Clock\) :当前Linux Kernel中的时钟。 -- 硬件时钟 RTC:主板上由电池供电的主板硬件时钟,该时钟可以在BIOS的 "Standard BIOS Feature" 项中进行设置。 - -当Linux启动时,会读取硬件时钟,并根据硬件时间来设置系统时间。 - -#### 显示日期和时间 - -显示当前硬件的日期和时间,在root权限下执行如下命令: - -``` -# hwclock -``` - -例如显示当前硬件的日期和时间,命令和输出如下: - -``` -# hwclock -2019-08-26 10:18:42.528948+08:00 -``` - -#### 设置日期和时间 - -修改当前硬件的日期和时间,在root权限下执行如下命令,其中 _dd_ 表示日,_mm_ 表示月份,_yyyy_ 表示年份,_HH_ 表示小时,_MM_ 表示分钟,请根据实际情况修改: - -``` -# hwclock --set --date "dd mm yyyy HH:MM" -``` - -例如修改当前的时间为2019年10月21日21点17分,命令如下: - -``` -# hwclock --set --date "21 Oct 2019 21:17" --utc -``` - -## 设置kdump -本节介绍如何设置kdump预留内存及kdump配置文件参数修改。 - - - -### 设置kdump预留内存 -#### 预留内存参数格式 - -kdump预留内存参数必须添加到内核启动参数中,配置文件为/boot/efi/EFI/openEuler/grub.cfg,openEuler发布版本中默认已经添加,可以根据实际使用情况调整。添加和修改启动参数后,重启系统生效。kdump预留内存参数格式如下: - -| 内核启动参数 | 描述 | 默认值 | 备注 | -|--------------------|-------------------------------------------|---------------|------------------------------------------------------------| -| crashkernel=x | 在4G以下的物理内存预留x大小的内存给kdump使用。 | x86版本默认配置512M | 该配置方法只在4G以下内存预留,必须保证4G以下连续可用内存足够预留。 | -| crashkernel=x@y | 在y起始地址预留x大小的内存给kdump使用。 | 未使用 | 需要确保y起始地址的x大小的内存未被其他模块预留。 | -| crashkernel=x,high | 在4G以下的物理内存中预留256M内存,在4G以上预留x大小内存给kdump使用。 | arm64版本默认配置1024M,high | 需要确保4G以下有256M连续可用的物理内存,4G以上有连续的x大小的连续物理内存。实际预留内存大小为256M+x。 | -| crashkernel=x,low crashkernel=y,high | 在4G以下的物理内存中预留x大小,在4G以上预留y大小内存给kdump使用。 | 未使用 | 需要确保4G以下有连续的x大小物理内存,4G以上有连续的y大小物理内存。 | - - -### 预留内存推荐值 -| 推荐方案 | 预留参数 | 参数说明 | -|------|------------------------|----------------------------------------------| -| 通用方案 | crashkernel=2048M,high | 4G以下预留256M,4G以上预留2048M内存给kdump使用。共256+2048M。 | -| 经济方案 | crashkernel=1024M,high | 4G以下预留256M,4G以上预留1024M内存给kdump使用。共256+1024M。 推荐系统512G内存以内的场景,并不使用网络转储kdump文件。对于虚拟机场景,可以适当减少内存预留值,推荐虚拟机设置为crashkernel=512M或者crashkernel=256M,high | ->![](public_sys-resources/icon-note.gif) **说明:** ->不通过网络转储kdump文件时,需要设置kdump文件系统不打包网络相关驱动。网络驱动加载需要申请较大内存,可能导致预留内存不足,kdump失败。因此建议禁用网络相关驱动。 - - -### 禁用网络相关驱动 -kdump配置文件(/etc/kdump.conf)中,dracut参数可以设置裁剪的驱动模块,可以将网络驱动配置到裁剪驱动列表中,让kdump文件系统中不加载该驱动,修改配置文件后,重启kdump服务生效。dracut参数配置如下所示: - -`dracut_args --omit-drivers "mdio-gpi usb_8dev et1011c rt2x00usb bcm-phy-lib mac80211_hwsim rtl8723be rndis_host hns3_cae amd vrf rtl8192cu mt76x02-lib int51x1 ppp_deflate team_mode_loadbalance smsc911x aweth bonding mwifiex_usb hnae dnet rt2x00pci vaser_pci hdlc_ppp marvell rtl8xxxu mlxsw_i2c ath9k_htc rtl8150 smc91x cortina at803x rockchip cxgb4 spi_ks8995 mt76x2u smsc9420 mdio-cavium bnxt_en ch9200 dummy macsec ice mt7601u rtl8188ee ixgbevf net1080 liquidio_vf be2net mlxsw_switchx2 gl620a xilinx_gmii2rgmii ppp_generic rtl8192de sja1000_platform ath10k_core cc770_platform realte igb c_can_platform c_can ethoc dm9601 smsc95xx lg-vl600 ifb enic ath9 mdio-octeon ppp_mppe ath10k_pci cc770 team_mode_activebackup marvell10g hinic rt2x00lib mlx4_en iavf broadcom igc c_can_pci alx rtl8192se rtl8723ae microchip lan78xx atl1c rtl8192c-common almia ax88179_178a qed netxen_nic brcmsmac rt2800usb e1000 qla3xxx mdio-bitbang qsemi mdio-mscc-miim plx_pci ipvlan r8152 cx82310_eth slhc mt76x02-usb ems_pci xen-netfront usbnet pppoe mlxsw_minimal mlxsw_spectrum cdc_ncm rt2800lib rtl_usb hnae3 ath9k_common ath9k_hw catc mt76 hns_enet_drv ppp_async huawei_cdc_ncm i40e rtl8192ce dl2 qmi_wwan mii peak_usb plusb can-dev slcan amd-xgbe team_mode_roundrobin ste10Xp thunder_xcv pptp thunder_bgx ixgbe davicom icplus tap tun smsc75xx smsc dlci hns_dsaf mlxsw_core rt2800mmi softing uPD60620 vaser_usb dp83867 brcmfmac mwifiex_pcie mlx4_core micrel team macvlan bnx2 virtio_net rtl_pci zaurus hns_mdi libcxgb hv_netvsc nicvf mt76x0u teranetics mlxfw cdc_eem qcom-emac pppox mt76-usb sierra_net i40evf bcm87xx mwifiex pegasus rt2x00mmi sja1000 ena hclgevf cnic cxgb4vf ppp_synctty iwlmvm team_mode_broadcast vxlan vsockmon hdlc_cisc rtl8723-common bsd_comp fakelb dp83822 dp83tc811 cicada fm10 8139t sfc hs geneve hclge xgene-enet-v2 cdc_mbim hdlc asix netdevsim rt2800pci team_mode_random lxt ems_usb mlxsw_pci sr9700 mdio-thunder mlxsw_switchib macvtap atlantic cdc_ether mcs7830 nicpf mdi peak_pci atl1e cdc_subset ipvtap btcoexist mt76x0-common veth slip iwldvm bcm7xxx vitesse netconsole epic100 myri10ge r8169 qede microchip_t1 liquidi bnx2x brcmutil mwifiex_sdi mlx5_core rtlwifi vmxnet3 nlmon hns3 hdlc_raw esd_usb2 atl2 mt76x2-common iwlwifi mdio-bcm-unimac national ath rtwpci rtw88 nfp rtl8821ae fjes thunderbolt-net 8139cp atl1 mscc vcan dp83848 dp83640 hdlc_fr e1000e ipheth net_failover aquantia rtl8192ee igbvf rocker intel-xway tg3" --omit "ramdisk network ifcfg qemu-net" --install "chmod" --nofscks` +# 基础配置 + + +## 设置语言环境 + +您可以通过localectl修改系统的语言环境,对应的参数设置保存在/etc/locale.conf文件中。这些参数会在系统启动过程中被systemd的守护进程读取。 + +### 显示当前语言环境状态 + +显示当前语言环境,命令如下: + +``` +$ localectl status +``` + +例如显示系统当前的设置,命令和输出如下: + +``` +$ localectl status + System Locale: LANG=zh_CN.UTF-8 + VC Keymap: cn + X11 Layout: cn +``` + +### 列出可用的语言环境 + +显示当前可用的语言环境,命令如下: + +``` +$ localectl list-locales +``` + +例如显示当前系统中所有可用的中文环境,命令和输出如下: + +``` +$ localectl list-locales | grep zh +zh_CN.UTF-8 +``` + +### 设置语言环境 + +要设置语言环境,在root权限下执行如下命令,其中 _locale_ 是您要设置的语言类型,取值范围可通过**localectl list-locales**获取,请根据实际情况修改。 + +``` +# localectl set-locale LANG=locale +``` + +例如设置为简体中文语言环境,在root权限下执行如下命令: + +``` +# localectl set-locale LANG=zh_CN.UTF-8 +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>修改后需要重新登录或者在root权限下执行`source /etc/locale.conf`命令刷新配置文件,使修改生效。 + + +## 设置键盘 + +您可以通过localectl修改系统的键盘设置,对应的参数设置保存在/etc/locale.conf文件中。这些参数,会在系统启动的早期被systemd的守护进程读取。 + +### 显示当前设置 + +显示当前键盘设置,命令如下: + +``` +$ localectl status +``` + +例如显示系统当前的设置,命令和输出如下: + +``` +$ localectl status + System Locale: LANG=zh_CN.UTF-8 + VC Keymap: cn + X11 Layout: cn +``` + +### 列出可用的键盘布局 + +显示当前可用的键盘布局,命令如下: + +``` +$ localectl list-keymaps +``` + +例如显示系统当前的中文键盘布局,命令和输出如下: + +``` +$ localectl list-keymaps | grep cn +cn +``` + +### 设置键盘布局 + +设置键盘布局,在root权限下执行如下命令,其中 _map_ 是您想要设置的键盘类型,取值范围可通过**localectl list-keymaps**获取,请根据实际情况修改: + +``` +# localectl set-keymap map +``` + +此时设置的键盘布局同样也会应用到图形界面中。 + +设置完成后,查看当前状态: + +``` +$ localectl status + System Locale: LANG=zh_CN.UTF-8 + VC Keymap: cn + X11 Layout: us +``` + +## 设置日期和时间 + +本节介绍如何通过timedatectl、date、hwclock命令来设置系统的日期、时间和时区等。 + + + +### 使用timedatectl命令设置 + +#### 显示日期和时间 + +显示当前的日期和时间,命令如下: + +``` +$ timedatectl +``` + +例如显示系统当前的日期和时间,命令和输出如下: + +``` +$ timedatectl + Local time: Mon 2019-09-30 04:05:00 EDT + Universal time: Mon 2019-09-30 08:05:00 UTC + RTC time: Mon 2019-09-30 08:05:00 + Time zone: America/New_York (EDT, -0400) +System clock synchronized: no + NTP service: inactive + RTC in local TZ: no +``` + +#### 通过远程服务器进行时间同步 + +您可以启用NTP远程服务器进行系统时钟的自动同步。是否启用NTP,可在root权限下执行如下命令进行设置。其中 _boolean_ 可取值yes和no,分别表示启用和不启用NTP进行系统时钟自动同步,请根据实际情况修改。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>若启用了NTP远程服务器进行系统时钟自动同步,则不能手动修改日期和时间。若需要手动修改日期或时间,则需确保已经关闭NTP系统时钟自动同步。可执行**timedatectl set-ntp** no命令进行关闭。 + +``` +# timedatectl set-ntp boolean +``` + +例如开启自动远程时间同步,命令如下: + +``` +# timedatectl set-ntp yes +``` + +#### 修改日期 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>修改日期前,请确保已经关闭NTP系统时钟自动同步。 + +修改当前的日期,在root权限下执行如下命令,其中 _YYYY_ 代表年份,_MM_ 代表月份,_DD_ 代表某天,请根据实际情况修改: + +``` +# timedatectl set-time YYYY-MM-DD +``` + +例如修改当前的日期为2019年8月14号,命令如下: + +``` +# timedatectl set-time '2019-08-14' +``` + +#### 修改时间 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>修改时间前,请确保已经关闭NTP系统时钟自动同步。 + +修改当前的时间,在root权限下执行如下命令,其中 _HH_ 代表小时,_MM_ 代表分钟,_SS_ 代表秒,请根据实际情况修改: + +``` +# timedatectl set-time HH:MM:SS +``` + +例如修改当前的时间为15点57分24秒,命令如下: + +``` +# timedatectl set-time 15:57:24 +``` + +#### 修改时区 + +显示当前可用时区,命令如下: + +``` +$ timedatectl list-timezones +``` + +要修改当前的时区,在root权限下执行如下命令,其中 _time\_zone_ 是您想要设置的时区,请根据实际情况修改: + +``` +# timedatectl set-timezone time_zone +``` + +例如修改当前的时区,首先查询所在地域的可用时区,此处以Asia为例: + +``` +# timedatectl list-timezones | grep Asia +Asia/Aden +Asia/Almaty +Asia/Amman +Asia/Anadyr +Asia/Aqtau +Asia/Aqtobe +Asia/Ashgabat +Asia/Baghdad +Asia/Bahrain +…… + +Asia/Seoul +Asia/Shanghai +Asia/Singapore +Asia/Srednekolymsk +Asia/Taipei +Asia/Tashkent +Asia/Tbilisi +Asia/Tehran +Asia/Thimphu +Asia/Tokyo +``` + +然后修改当前的时区为“Asia/Shanghai”,命令如下: + +``` +# timedatectl set-timezone Asia/Shanghai +``` + +### 使用date命令设置 + +#### 显示当前的日期和时间 + +显示当前的日期和时间,命令如下: + +``` +$ date +``` + +默认情况下,date命令显示本地时间。要显示UTC时间,添加\-\-utc或-u参数: + +``` +$ date --utc +``` + +要自定义对应的输出信息格式,添加 +"format" 参数: + +``` +$ date +"format" +``` + +**表 1** 参数说明 + +| 格式参数 | 说明 | +| :---- | :---- | +| %H | 小时以HH格式(例如 17) | +| %M | 分钟以MM格式(例如 37) | +| %S | 秒以SS格式(例如 25) | +| %d | 日期以DD格式(例如 15) | +| %m | 月份以MM格式(例如 07) | +| %Y | 年份以YYYY格式(例如 2019) | +| %Z | 时区缩写(例如CEST) | +| %F | 日期整体格式为YYYY-MM-DD(例如 2019-7-15),等同%Y-%m-%d | +| %T | 时间整体格式为HH:MM:SS(例如 18:30:25),等同%H:%M:%S | + +实际使用示例如下: + +- 显示当前的日期和本地时间。 + + ``` + $ date + 2019年 08月 17日 星期六 17:26:34 CST + ``` + +- 显示当前的日期和UTC时间。 + + ``` + $ date --utc + 2019年 08月 17日 星期六 09:26:18 UTC + ``` + +- 自定义date命令的输出。 + + ``` + $ date +"%Y-%m-%d %H:%M" + 2019-08-17 17:24 + ``` + + +#### 修改时间 + +要修改当前的时间,添加\-\-set或者-s参数。在root权限下执行如下命令,其中 _HH_ 代表小时,_MM_ 代表分钟,_SS_ 代表秒,请根据实际情况修改: + +``` +# date --set HH:MM:SS +``` + +默认情况下, date命令设置本地时间。要设置UTC时间,添加\-\-utc或-u参数: + +``` +# date --set HH:MM:SS --utc +``` + +例如修改当前的时间为23点26分00秒,在root权限下执行如下命令: + +``` +# date --set 23:26:00 +``` + +#### 修改日期 + +修改当前的日期,添加\-\-set或者-s参数。在root权限下执行如下命令,其中 _YYYY_ 代表年份,_MM_ 代表月份,_DD_ 代表某天,请根据实际情况修改: + +``` +# date --set YYYY-MM-DD +``` + +例如修改当前的日期为2019年11月2日,命令如下: + +``` +# date --set 2019-11-02 +``` + +### 使用hwclock命令设置 + +可以使用 hwclock 命令设置硬件时钟RTC \(Real Time Clock\) 。 + +#### 硬件时钟和系统时钟 + +Linux 将时钟分为: + +- 系统时钟 \(System Clock\) :当前Linux Kernel中的时钟。 +- 硬件时钟 RTC:主板上由电池供电的主板硬件时钟,该时钟可以在BIOS的 "Standard BIOS Feature" 项中进行设置。 + +当Linux启动时,会读取硬件时钟,并根据硬件时间来设置系统时间。 + +#### 显示日期和时间 + +显示当前硬件的日期和时间,在root权限下执行如下命令: + +``` +# hwclock +``` + +例如显示当前硬件的日期和时间,命令和输出如下: + +``` +# hwclock +2019-08-26 10:18:42.528948+08:00 +``` + +#### 设置日期和时间 + +修改当前硬件的日期和时间,在root权限下执行如下命令,其中 _dd_ 表示日,_mm_ 表示月份,_yyyy_ 表示年份,_HH_ 表示小时,_MM_ 表示分钟,请根据实际情况修改: + +``` +# hwclock --set --date "dd mm yyyy HH:MM" +``` + +例如修改当前的时间为2019年10月21日21点17分,命令如下: + +``` +# hwclock --set --date "21 Oct 2019 21:17" --utc +``` + +## 设置kdump +本节介绍如何设置kdump预留内存及kdump配置文件参数修改。 + + + +### 设置kdump预留内存 +#### 预留内存参数格式 + +kdump预留内存参数必须添加到内核启动参数中,配置文件为/boot/efi/EFI/openEuler/grub.cfg,openEuler发布版本中默认已经添加,可以根据实际使用情况调整。添加和修改启动参数后,重启系统生效。kdump预留内存参数格式如下: + +| 内核启动参数 | 描述 | 默认值 | 备注 | +|--------------------|-------------------------------------------|---------------|------------------------------------------------------------| +| crashkernel=x | 在4G以下的物理内存预留x大小的内存给kdump使用。 | x86版本默认配置512M | 该配置方法只在4G以下内存预留,必须保证4G以下连续可用内存足够预留。 | +| crashkernel=x@y | 在y起始地址预留x大小的内存给kdump使用。 | 未使用 | 需要确保y起始地址的x大小的内存未被其他模块预留。 | +| crashkernel=x,high | 在4G以下的物理内存中预留256M内存,在4G以上预留x大小内存给kdump使用。 | arm64版本默认配置1024M,high | 需要确保4G以下有256M连续可用的物理内存,4G以上有连续的x大小的连续物理内存。实际预留内存大小为256M+x。 | +| crashkernel=x,low crashkernel=y,high | 在4G以下的物理内存中预留x大小,在4G以上预留y大小内存给kdump使用。 | 未使用 | 需要确保4G以下有连续的x大小物理内存,4G以上有连续的y大小物理内存。 | + + +### 预留内存推荐值 +| 推荐方案 | 预留参数 | 参数说明 | +|------|------------------------|----------------------------------------------| +| 通用方案 | crashkernel=2048M,high | 4G以下预留256M,4G以上预留2048M内存给kdump使用。共256+2048M。 | +| 经济方案 | crashkernel=1024M,high | 4G以下预留256M,4G以上预留1024M内存给kdump使用。共256+1024M。 推荐系统512G内存以内的场景,并不使用网络转储kdump文件。对于虚拟机场景,可以适当减少内存预留值,推荐虚拟机设置为crashkernel=512M或者crashkernel=256M,high | +>![](./public_sys-resources/icon-note.gif) **说明:** +>不通过网络转储kdump文件时,需要设置kdump文件系统不打包网络相关驱动。网络驱动加载需要申请较大内存,可能导致预留内存不足,kdump失败。因此建议禁用网络相关驱动。 + + +### 禁用网络相关驱动 +kdump配置文件(/etc/kdump.conf)中,dracut参数可以设置裁剪的驱动模块,可以将网络驱动配置到裁剪驱动列表中,让kdump文件系统中不加载该驱动,修改配置文件后,重启kdump服务生效。dracut参数配置如下所示: + +`dracut_args --omit-drivers "mdio-gpi usb_8dev et1011c rt2x00usb bcm-phy-lib mac80211_hwsim rtl8723be rndis_host hns3_cae amd vrf rtl8192cu mt76x02-lib int51x1 ppp_deflate team_mode_loadbalance smsc911x aweth bonding mwifiex_usb hnae dnet rt2x00pci vaser_pci hdlc_ppp marvell rtl8xxxu mlxsw_i2c ath9k_htc rtl8150 smc91x cortina at803x rockchip cxgb4 spi_ks8995 mt76x2u smsc9420 mdio-cavium bnxt_en ch9200 dummy macsec ice mt7601u rtl8188ee ixgbevf net1080 liquidio_vf be2net mlxsw_switchx2 gl620a xilinx_gmii2rgmii ppp_generic rtl8192de sja1000_platform ath10k_core cc770_platform realte igb c_can_platform c_can ethoc dm9601 smsc95xx lg-vl600 ifb enic ath9 mdio-octeon ppp_mppe ath10k_pci cc770 team_mode_activebackup marvell10g hinic rt2x00lib mlx4_en iavf broadcom igc c_can_pci alx rtl8192se rtl8723ae microchip lan78xx atl1c rtl8192c-common almia ax88179_178a qed netxen_nic brcmsmac rt2800usb e1000 qla3xxx mdio-bitbang qsemi mdio-mscc-miim plx_pci ipvlan r8152 cx82310_eth slhc mt76x02-usb ems_pci xen-netfront usbnet pppoe mlxsw_minimal mlxsw_spectrum cdc_ncm rt2800lib rtl_usb hnae3 ath9k_common ath9k_hw catc mt76 hns_enet_drv ppp_async huawei_cdc_ncm i40e rtl8192ce dl2 qmi_wwan mii peak_usb plusb can-dev slcan amd-xgbe team_mode_roundrobin ste10Xp thunder_xcv pptp thunder_bgx ixgbe davicom icplus tap tun smsc75xx smsc dlci hns_dsaf mlxsw_core rt2800mmi softing uPD60620 vaser_usb dp83867 brcmfmac mwifiex_pcie mlx4_core micrel team macvlan bnx2 virtio_net rtl_pci zaurus hns_mdi libcxgb hv_netvsc nicvf mt76x0u teranetics mlxfw cdc_eem qcom-emac pppox mt76-usb sierra_net i40evf bcm87xx mwifiex pegasus rt2x00mmi sja1000 ena hclgevf cnic cxgb4vf ppp_synctty iwlmvm team_mode_broadcast vxlan vsockmon hdlc_cisc rtl8723-common bsd_comp fakelb dp83822 dp83tc811 cicada fm10 8139t sfc hs geneve hclge xgene-enet-v2 cdc_mbim hdlc asix netdevsim rt2800pci team_mode_random lxt ems_usb mlxsw_pci sr9700 mdio-thunder mlxsw_switchib macvtap atlantic cdc_ether mcs7830 nicpf mdi peak_pci atl1e cdc_subset ipvtap btcoexist mt76x0-common veth slip iwldvm bcm7xxx vitesse netconsole epic100 myri10ge r8169 qede microchip_t1 liquidi bnx2x brcmutil mwifiex_sdi mlx5_core rtlwifi vmxnet3 nlmon hns3 hdlc_raw esd_usb2 atl2 mt76x2-common iwlwifi mdio-bcm-unimac national ath rtwpci rtw88 nfp rtl8821ae fjes thunderbolt-net 8139cp atl1 mscc vcan dp83848 dp83640 hdlc_fr e1000e ipheth net_failover aquantia rtl8192ee igbvf rocker intel-xway tg3" --omit "ramdisk network ifcfg qemu-net" --install "chmod" --nofscks` + +## 设置磁盘调度算法 +本节介绍如何设置磁盘调度算法。 + + + +### 临时修改调度策略 + +例如将所有IO调度算法修改为mq-deadline,此修改重启后会失效。 +``` +echo mq-deadline > /sys/block/sd*/queue/scheduler +``` + +### 永久设置调度策略 + +可以通过在内核启动配置文件grub.cfg中的kernel行追加:elevator=mq-deadline,重启后生效。 +``` +linux /vmlinuz-4.19.90-2003.4.0.0036.oe1.x86_64 root=/dev/mapper/openeuler-root ro resume=/dev/mapper/openeuler-swap rd.lvm.lv=openeuler/root rd.lvm.lv=openeuler/swap quiet crashkernel=512M elevator=mq-deadline +``` +## 设置NMI watchdog +NMI(Non-Maskable Interrupt)作为系统最高优先级的中断,属于不可屏蔽的中断类型。NMI watchdog 可用于检测服务器异常挂起事件,触发系统收集故障信息后重启。openEuler QA 团队实验室测试结果表明:开启 NMI watchdog 的情况下,NMI 偶尔会产生大量中断,并可能会降低服务器部分性能,请在了解该功能影响的情况下合理使用。 + +Note:以下NMI watchdog设置仅限openEuler社区已完成兼容性验证的硬件服务器类型,其余类型服务器和虚拟机下NMI watchdog仅限参考; + +### 显示当前NMI watchdog配置状态 + +``` +# sudo sysctl kernel.nmi_watchdog +kernel.nmi_watchdog = 0 +``` + +### 设置NMI watchdog配置参数 + +``` +# sudo sysctl -w kernel.nmi_watchdog=1 +``` +参数值为 1 表示开启, 0 表示关闭。 + +## 显示内核日志打印级别 + +``` +# sysctl kernel.printk +kernel.printk = 4 4 1 7 +``` + +如果要调整内核日志打印级别,可修改/etc/sysctl.d/21-openEuler.conf文件,执行以下命令,使其生效。 + +``` +# sysctl -p /etc/sysctl.d/21-openEuler.conf +``` \ No newline at end of file diff --git "a/content/zh/docs/Administration/\346\220\255\345\273\272FTP\346\234\215\345\212\241\345\231\250.md" "b/docs/zh/docs/Administration/\346\220\255\345\273\272FTP\346\234\215\345\212\241\345\231\250.md" similarity index 99% rename from "content/zh/docs/Administration/\346\220\255\345\273\272FTP\346\234\215\345\212\241\345\231\250.md" rename to "docs/zh/docs/Administration/\346\220\255\345\273\272FTP\346\234\215\345\212\241\345\231\250.md" index f77d385e17dec27ef5d1fccce199932bca11d848..d1cbc9f4337f20bf1a976623d797d9225cc3fa6b 100644 --- "a/content/zh/docs/Administration/\346\220\255\345\273\272FTP\346\234\215\345\212\241\345\231\250.md" +++ "b/docs/zh/docs/Administration/\346\220\255\345\273\272FTP\346\234\215\345\212\241\345\231\250.md" @@ -92,7 +92,7 @@ FTP的正常工作需要使用到多个网络端口,服务器端会使用到 tcp6 0 0 :::21 :::* LISTEN 19716/vsftpd ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >如果没有**netstat**命令,可以执行**dnf install net-tools**命令安装后再使用**netstat**命令。 - 停止vsftpd服务 @@ -173,7 +173,7 @@ FTP的正常工作需要使用到多个网络端口,服务器端会使用到 ### 默认配置说明 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >文档中的配置内容仅供参考,请用户根据实际情况(例如安全加固需要)进行修改。 openEuler系统中 ,vsftpd默认不开放匿名用户,使用vim命令查看主配置文件,其内容如下: @@ -390,7 +390,7 @@ ftp> bye 221 Goodbye. ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >如果没有**ftp**命令,可以在root权限下执行**dnf install ftp**命令安装后再使用**ftp**命令。 @@ -488,7 +488,7 @@ ftp> ftp> mget *.* ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >- 此时每下载一个文件,都会有提示信息。如果要屏蔽提示信息,则在 **mget \*.\*** 命令前先执行**prompt off** >- 文件都被下载到Linux主机的当前目录下。比如,在/home/myopenEuler/下运行的ftp命令,则文件都下载到/home/myopenEuler/下。 diff --git "a/content/zh/docs/Administration/\346\220\255\345\273\272repo\346\234\215\345\212\241\345\231\250.md" "b/docs/zh/docs/Administration/\346\220\255\345\273\272repo\346\234\215\345\212\241\345\231\250.md" similarity index 83% rename from "content/zh/docs/Administration/\346\220\255\345\273\272repo\346\234\215\345\212\241\345\231\250.md" rename to "docs/zh/docs/Administration/\346\220\255\345\273\272repo\346\234\215\345\212\241\345\231\250.md" index dcc2d240f784cbf274403312525b67d3ae6da91f..decc9dad82a9475b4daaf7b84c1303180009d8a9 100644 --- "a/content/zh/docs/Administration/\346\220\255\345\273\272repo\346\234\215\345\212\241\345\231\250.md" +++ "b/docs/zh/docs/Administration/\346\220\255\345\273\272repo\346\234\215\345\212\241\345\231\250.md" @@ -1,400 +1,400 @@ -# 搭建repo服务器 - ->![](public_sys-resources/icon-note.gif) **说明:** ->openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](../Releasenotes/系统安装.md)。若用户无法在线获取openEuler repo源,则可使用openEuler提供的ISO发布包创建为本地openEuler repo源。本章节中以openEuler-20.03-LTS-aarch64-dvd.iso发布包为例,请根据实际需要的ISO发布包进行修改。 - - - -- [搭建repo服务器](#搭建repo服务器) - - [概述](#概述) - - [创建/更新本地repo源](#创建更新本地repo源) - - [获取ISO发布包](#获取iso发布包) - - [挂载ISO创建repo源](#挂载iso创建repo源) - - [创建本地repo源](#创建本地repo源) - - [更新repo源](#更新repo源) - - [部署远端repo源](#部署远端repo源) - - [nginx安装与配置](#nginx安装与配置) - - [启动nginx服务](#启动nginx服务) - - [repo源部署](#repo源部署) - - [使用repo源](#使用repo源) - - [repo配置为yum源(软件源)](#repo配置为yum源软件源) - - [repo优先级](#repo优先级) - - [dnf相关命令](#dnf相关命令) - - - -## 概述 - -将openEuler提供的ISO发布包openEuler-20.03-LTS-aarch64-dvd.iso创建为repo源,如下以使用nginx进行repo源部署,提供http服务为例进行说明。 - -## 创建/更新本地repo源 - -使用mount挂载,将openEuler的ISO发布包openEuler-20.03-LTS-aarch64-dvd.iso创建为repo源,并能够对repo源进行更新。 -### 获取ISO发布包 - -请从如下网址获取openEuler的ISO发布包: - -[https://repo.openeuler.org/openEuler-20.03-LTS/ISO/](https://repo.openeuler.org/openEuler-20.03-LTS/ISO/) - -### 挂载ISO创建repo源 - -在root权限下使用mount命令挂载ISO发布包。 - -示例如下: - -``` -# mount /home/openEuler/openEuler-20.03-LTS-aarch64-dvd.iso /mnt/ -``` - -挂载好的mnt目录如下: - -``` -. -│── boot.catalog -│── docs -│── EFI -│── images -│── Packages -│── repodata -│── TRANS.TBL -└── RPM-GPG-KEY-openEuler -``` - -其中,Packages为rpm包所在的目录,repodata为repo源元数据所在的目录,RPM-GPG-KEY-openEuler为openEuler的签名公钥。 - -### 创建本地repo源 - -可以拷贝ISO发布包中相关文件至本地目录以创建本地repo源,示例如下: - -``` -# mount /home/openEuler/openEuler-20.03-LTS-aarch64-dvd.iso /mnt/ -$ mkdir -p ~/srv/repo/ -$ cp -r /mnt/Packages ~/srv/repo/ -$ cp -r /mnt/repodata ~/srv/repo/ -$ cp -r /mnt/RPM-GPG-KEY-openEuler ~/srv/repo/ -``` - -从而本地repo目录如下: - -``` -. -│── Packages -│── repodata -└── RPM-GPG-KEY-openEuler -``` - -Packages为rpm包所在的目录,repodata为repo源元数据所在的目录,RPM-GPG-KEY-openEuler为openEuler的签名公钥。 - -### 更新repo源 - -更新repo源有两种方式: - -- 通过新版本的ISO更新已有的repo源,与创建repo源的方式相同,即挂载ISO发布包或重新拷贝ISO发布包至本地目录。 - -- 在repo源的Packages目录下添加rpm包,然后通过createrepo命令更新repo源 - - ``` - $ createrepo --update --workers=10 ~/srv/repo - ``` - - 其中,\-\-update表示更新,\-\-workers表示线程数,可自定义。 - - >![](public_sys-resources/icon-note.gif) **说明:** - >若命令打印信息为“createrepo:未找到命令”,则表示未安装createrepo软件,可在root权限下执行**dnf install createrepo**进行安装。 - - -## 部署远端repo源 - -安装openEuler操作系统,在openEuler上通过nginx部署repo源。 -### nginx安装与配置 - -1. 请自行下载nginx工具并在root权限下安装nginx。 -2. 安装nginx之后,在root权限下配置/etc/nginx/nginx.conf。 - - >![](public_sys-resources/icon-note.gif) **说明:** - >文档中的配置内容仅供参考,请用户根据实际情况(例如安全加固需要)进行配置。 - - ``` - user nginx; - worker_processes auto; # 建议设置为core-1 - error_log /var/log/nginx/error.log warn; # log存放位置 - pid /var/run/nginx.pid; - - events { - worker_connections 1024; - } - - http { - include /etc/nginx/mime.types; - default_type application/octet-stream; - - log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - - access_log /var/log/nginx/access.log main; - sendfile on; - keepalive_timeout 65; - - server { - listen 80; - server_name localhost; # 服务器名(url) - client_max_body_size 4G; - root /usr/share/nginx/repo; # 服务默认目录 - - location / { - autoindex on; # 开启访问目录下层文件 - autoindex_exact_size on; - autoindex_localtime on; - } - - } - - } - ``` - - -### 启动nginx服务 - -1. 在root权限下通过systemd启动nginx服务: - - ``` - # systemctl enable nginx - # systemctl start nginx - ``` - -2. nginx是否启动成功可通过下面命令查看: - - ``` - $ systemctl status nginx - ``` - - - [图1](#zh-cn_topic_0151920971_fd25e3f1d664b4087ae26631719990a71)表示nginx服务启动成功 - - **图 1** nginx服务启动成功 - ![](figures/nginx服务启动成功.png "nginx服务启动成功") - - - 若nginx服务启动失败,查看错误信息: - - ``` - $ systemctl status nginx.service --full - ``` - - **图 2** nginx服务启动失败 - ![](figures/nginx服务启动失败.png "nginx服务启动失败") - - 如[图2](#zh-cn_topic_0151920971_f1f9f3d086e454b9cba29a7cae96a4c54)所示nginx服务创建失败,是由于目录/var/spool/nginx/tmp/client\_body创建失败,在root权限下手动进行创建,类似的问题也这样处理: - - ``` - # mkdir -p /var/spool/nginx/tmp/client_body - # mkdir -p /var/spool/nginx/tmp/proxy - # mkdir -p /var/spool/nginx/tmp/fastcgi - # mkdir -p /usr/share/nginx/uwsgi_temp - # mkdir -p /usr/share/nginx/scgi_temp - ``` - - -### repo源部署 - -1. 在root权限下创建nginx配置文件/etc/nginx/nginx.conf中指定的目录/usr/share/nginx/repo: - - ``` - # mkdir -p /usr/share/nginx/repo - ``` - -2. 在root权限下修改目录/usr/share/nginx/repo的权限: - - ``` - # chmod -R 755 /usr/share/nginx/repo - ``` - -3. 设置防火墙规则,开启nginx设置的端口(此处为80端口),在root权限下通过firewall设置端口开启: - - ``` - # firewall-cmd --add-port=80/tcp --permanent - # firewall-cmd --reload - ``` - - 在root权限下查询80端口是否开启成功,输出为yes则表示80端口开启成功: - - ``` - # firewall-cmd --query-port=80/tcp - ``` - - 也可在root权限下通过iptables来设置80端口开启: - - ``` - # iptables -I INPUT -p tcp --dport 80 -j ACCEPT - ``` - -4. nginx服务设置好之后,即可通过ip直接访问网页,如[图3](#zh-cn_topic_0151921017_fig1880404110396): - - **图 3** nginx部署成功 - ![](figures/nginx部署成功.png "nginx部署成功") - -5. 通过下面几种方式将repo源放入到/usr/share/nginx/repo下: - - 在root权限下拷贝镜像中相关文件至/usr/share/nginx/repo下,并修改目录权限。 - - ``` - # mount /home/openEuler/openEuler-20.03-LTS-aarch64-dvd.iso /mnt/ - # cp -r /mnt/Packages /usr/share/nginx/repo - # cp -r /mnt/repodata /usr/share/nginx/repo - # cp -r /mnt/RPM-GPG-KEY-openEuler /usr/share/nginx/repo - # chmod -R 755 /usr/share/nginx/repo - ``` - - openEuler-20.03-LTS-aarch64-dvd.iso存放在/home/openEuler目录下。 - - - 使用root在/usr/share/nginx/repo下创建repo源的软链接。 - - ``` - # ln -s /mnt /usr/share/nginx/repo/os - ``` - - /mnt为已经创建好的repo源,/usr/share/nginx/repo/os将指向/mnt。 - - - -## 使用repo源 - -repo可配置为yum源,yum(全称为 Yellow dog Updater, Modified)是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载和安装。 -### repo配置为yum源(软件源) - -构建好的repo可以配置为yum源使用,在/etc/yum.repos.d/目录下使用root权限创建\*\*\*.repo的配置文件(必须以.repo为扩展名),分为本地和http服务器配置yum源两种方式: - -- 配置本地yum源 - - 在/etc/yum.repos.d目录下创建openEuler.repo文件,使用构建的本地repo源作为yum源,openEuler.repo的内容如下: - - ``` - [base] - name=base - baseurl=file:///home/openEuler/srv/repo - enabled=1 - gpgcheck=1 - gpgkey=file:///home/openEuler/srv/repo/RPM-GPG-KEY-openEuler - ``` - - >![](public_sys-resources/icon-note.gif) **说明:** - > - \[*repoid*\]中的repoid为软件仓库(repository)的ID号,所有.repo配置文件中的各repoid不能重复,必须唯一。示例中repoid设置为**base**。 - > - name为软件仓库描述的字符串。 - > - baseurl为软件仓库的地址。 - > - enabled为是否启用该软件源仓库,可选值为1和0。默认值为1,表示启用该软件源仓库。 - > - gpgcheck可设置为1或0,1表示进行gpg(GNU Private Guard)校验,0表示不进行gpg校验,gpgcheck可以确定rpm包的来源是有效和安全的。 - > - gpgkey为验证签名用的公钥。 - -- 配置http服务器yum源 - - 在/etc/yum.repos.d目录下创建openEuler.repo文件。 - - - 若使用用户部署的http服务端的repo源作为yum源,openEuler.repo的内容如下: - - ``` - [base] - name=base - baseurl=http://192.168.139.209/ - enabled=1 - gpgcheck=1 - gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler - ``` - - >![](public_sys-resources/icon-note.gif) **说明:** - >“192.168.139.209”为示例地址,请用户根据实际情况进行配置。 - - - 若使用openEuler提供的openEuler repo源作为yum源,以AArch64架构的OS repo源为例,openEuler.repo的内容如下: - - ``` - [base] - name=base - baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/OS/aarch64/ - enabled=1 - gpgcheck=1 - gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/OS/aarch64/RPM-GPG-KEY-openEuler - ``` - - - -### repo优先级 - -当有多个repo源时,可通过在.repo文件的priority参数设置repo的优先级(如果不设置,默认优先级是99,当相同优先级的源中存在相同rpm包时,会安装最新的版本)。其中,1为最高优先级,99为最低优先级,如给openEuler.repo配置优先级为2: - -``` -[base] -name=base -baseurl=http://192.168.139.209/ -enabled=1 -priority=2 -gpgcheck=1 -gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler -``` - -### dnf相关命令 - -dnf命令在安装升级时能够自动解析包的依赖关系,一般的使用方式如下: - -``` -dnf -``` - -常用的命令如下: - -- 安装,需要在root权限下执行。 - - ``` - # dnf install - ``` - -- 升级,需要在root权限下执行。 - - ``` - # dnf update - ``` - -- 回退,需要在root权限下执行。 - - ``` - # dnf downgrade - ``` - -- 检查更新 - - ``` - $ dnf check-update - ``` - -- 卸载,需要在root权限下执行。 - - ``` - # dnf remove - ``` - -- 查询 - - ``` - $ dnf search - ``` - -- 本地安装,需要在root权限下执行。 - - ``` - # dnf localinstall - ``` - -- 查看历史记录 - - ``` - $ dnf history - ``` - -- 清除缓存目录 - - ``` - $ dnf clean all - ``` - -- 更新缓存 - - ``` - $ dnf makecache - ``` - +# 搭建repo服务器 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](./../Releasenotes/系统安装.md\)。若用户无法在线获取openEuler repo源,则可使用openEuler提供的ISO发布包创建为本地openEuler repo源。本章节中以openEuler-20.03-LTS-SP3-aarch64-dvd.iso发布包为例,请根据实际需要的ISO发布包进行修改。 + + + +- [搭建repo服务器](#搭建repo服务器) + - [概述](#概述) + - [创建/更新本地repo源](#创建更新本地repo源) + - [获取ISO发布包](#获取iso发布包) + - [挂载ISO创建repo源](#挂载iso创建repo源) + - [创建本地repo源](#创建本地repo源) + - [更新repo源](#更新repo源) + - [部署远端repo源](#部署远端repo源) + - [nginx安装与配置](#nginx安装与配置) + - [启动nginx服务](#启动nginx服务) + - [repo源部署](#repo源部署) + - [使用repo源](#使用repo源) + - [repo配置为yum源(软件源)](#repo配置为yum源软件源) + - [repo优先级](#repo优先级) + - [dnf相关命令](#dnf相关命令) + + + +## 概述 + +将openEuler提供的ISO发布包openEuler-20.03-LTS-SP3-aarch64-dvd.iso创建为repo源,如下以使用nginx进行repo源部署,提供http服务为例进行说明。 + +## 创建/更新本地repo源 + +使用mount挂载,将openEuler的ISO发布包openEuler-20.03-LTS-SP3-aarch64-dvd.iso创建为repo源,并能够对repo源进行更新。 +### 获取ISO发布包 + +请从如下网址获取openEuler的ISO发布包: + +[https://repo.openeuler.org/openEuler-20.03-LTS-SP3/ISO/](https://repo.openeuler.org/openEuler-20.03-LTS-SP3/ISO/) + +### 挂载ISO创建repo源 + +在root权限下使用mount命令挂载ISO发布包。 + +示例如下: + +``` +# mount /home/openEuler/openEuler-20.03-LTS-SP3-aarch64-dvd.iso /mnt/ +``` + +挂载好的mnt目录如下: + +``` +. +│── boot.catalog +│── docs +│── EFI +│── images +│── Packages +│── repodata +│── TRANS.TBL +└── RPM-GPG-KEY-openEuler +``` + +其中,Packages为rpm包所在的目录,repodata为repo源元数据所在的目录,RPM-GPG-KEY-openEuler为openEuler的签名公钥。 + +### 创建本地repo源 + +可以拷贝ISO发布包中相关文件至本地目录以创建本地repo源,示例如下: + +``` +# mount /home/openEuler/openEuler-20.03-LTS-SP3-aarch64-dvd.iso /mnt/ +$ mkdir -p ~/srv/repo/ +$ cp -r /mnt/Packages ~/srv/repo/ +$ cp -r /mnt/repodata ~/srv/repo/ +$ cp -r /mnt/RPM-GPG-KEY-openEuler ~/srv/repo/ +``` + +从而本地repo目录如下: + +``` +. +│── Packages +│── repodata +└── RPM-GPG-KEY-openEuler +``` + +Packages为rpm包所在的目录,repodata为repo源元数据所在的目录,RPM-GPG-KEY-openEuler为openEuler的签名公钥。 + +### 更新repo源 + +更新repo源有两种方式: + +- 通过新版本的ISO更新已有的repo源,与创建repo源的方式相同,即挂载ISO发布包或重新拷贝ISO发布包至本地目录。 + +- 在repo源的Packages目录下添加rpm包,然后通过createrepo命令更新repo源 + + ``` + $ createrepo --update --workers=10 ~/srv/repo + ``` + + 其中,\-\-update表示更新,\-\-workers表示线程数,可自定义。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >若命令打印信息为“createrepo:未找到命令”,则表示未安装createrepo软件,可在root权限下执行**dnf install createrepo**进行安装。 + + +## 部署远端repo源 + +安装openEuler操作系统,在openEuler上通过nginx部署repo源。 +### nginx安装与配置 + +1. 请自行下载nginx工具并在root权限下安装nginx。 +2. 安装nginx之后,在root权限下配置/etc/nginx/nginx.conf。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >文档中的配置内容仅供参考,请用户根据实际情况(例如安全加固需要)进行配置。 + + ``` + user nginx; + worker_processes auto; # 建议设置为core-1 + error_log /var/log/nginx/error.log warn; # log存放位置 + pid /var/run/nginx.pid; + + events { + worker_connections 1024; + } + + http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + sendfile on; + keepalive_timeout 65; + + server { + listen 80; + server_name localhost; # 服务器名(url) + client_max_body_size 4G; + root /usr/share/nginx/repo; # 服务默认目录 + + location / { + autoindex on; # 开启访问目录下层文件 + autoindex_exact_size on; + autoindex_localtime on; + } + + } + + } + ``` + + +### 启动nginx服务 + +1. 在root权限下通过systemd启动nginx服务: + + ``` + # systemctl enable nginx + # systemctl start nginx + ``` + +2. nginx是否启动成功可通过下面命令查看: + + ``` + $ systemctl status nginx + ``` + + - [图1](#zh-cn_topic_0151920971_fd25e3f1d664b4087ae26631719990a71)表示nginx服务启动成功 + + **图 1** nginx服务启动成功 + ![](./figures/nginx-start-success.png "nginx服务启动成功") + + - 若nginx服务启动失败,查看错误信息: + + ``` + $ systemctl status nginx.service --full + ``` + + **图 2** nginx服务启动失败 + ![](./figures/nginx-start-failed.png "nginx服务启动失败") + + 如[图2](#zh-cn_topic_0151920971_f1f9f3d086e454b9cba29a7cae96a4c54)所示nginx服务创建失败,是由于目录/var/spool/nginx/tmp/client\_body创建失败,在root权限下手动进行创建,类似的问题也这样处理: + + ``` + # mkdir -p /var/spool/nginx/tmp/client_body + # mkdir -p /var/spool/nginx/tmp/proxy + # mkdir -p /var/spool/nginx/tmp/fastcgi + # mkdir -p /usr/share/nginx/uwsgi_temp + # mkdir -p /usr/share/nginx/scgi_temp + ``` + + +### repo源部署 + +1. 在root权限下创建nginx配置文件/etc/nginx/nginx.conf中指定的目录/usr/share/nginx/repo: + + ``` + # mkdir -p /usr/share/nginx/repo + ``` + +2. 在root权限下修改目录/usr/share/nginx/repo的权限: + + ``` + # chmod -R 755 /usr/share/nginx/repo + ``` + +3. 设置防火墙规则,开启nginx设置的端口(此处为80端口),在root权限下通过firewall设置端口开启: + + ``` + # firewall-cmd --add-port=80/tcp --permanent + # firewall-cmd --reload + ``` + + 在root权限下查询80端口是否开启成功,输出为yes则表示80端口开启成功: + + ``` + # firewall-cmd --query-port=80/tcp + ``` + + 也可在root权限下通过iptables来设置80端口开启: + + ``` + # iptables -I INPUT -p tcp --dport 80 -j ACCEPT + ``` + +4. nginx服务设置好之后,即可通过ip直接访问网页,如[图3](#zh-cn_topic_0151921017_fig1880404110396): + + **图 3** nginx部署成功 + ![](./figures/nginx-deploy-success.png "nginx部署成功") + +5. 通过下面几种方式将repo源放入到/usr/share/nginx/repo下: + - 在root权限下拷贝镜像中相关文件至/usr/share/nginx/repo下,并修改目录权限。 + + ``` + # mount /home/openEuler/openEuler-20.03-LTS-SP3-aarch64-dvd.iso /mnt/ + # cp -r /mnt/Packages /usr/share/nginx/repo + # cp -r /mnt/repodata /usr/share/nginx/repo + # cp -r /mnt/RPM-GPG-KEY-openEuler /usr/share/nginx/repo + # chmod -R 755 /usr/share/nginx/repo + ``` + + openEuler-20.03-LTS-SP3-aarch64-dvd.iso存放在/home/openEuler目录下。 + + - 使用root在/usr/share/nginx/repo下创建repo源的软链接。 + + ``` + # ln -s /mnt /usr/share/nginx/repo/os + ``` + + /mnt为已经创建好的repo源,/usr/share/nginx/repo/os将指向/mnt。 + + + +## 使用repo源 + +repo可配置为yum源,yum(全称为 Yellow dog Updater, Modified)是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载和安装。 +### repo配置为yum源(软件源) + +构建好的repo可以配置为yum源使用,在/etc/yum.repos.d/目录下使用root权限创建\*\*\*.repo的配置文件(必须以.repo为扩展名),分为本地和http服务器配置yum源两种方式: + +- 配置本地yum源 + + 在/etc/yum.repos.d目录下创建openEuler.repo文件,使用构建的本地repo源作为yum源,openEuler.repo的内容如下: + + ``` + [base] + name=base + baseurl=file:///home/openEuler/srv/repo + enabled=1 + gpgcheck=1 + gpgkey=file:///home/openEuler/srv/repo/RPM-GPG-KEY-openEuler + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + > - \[*repoid*\]中的repoid为软件仓库(repository)的ID号,所有.repo配置文件中的各repoid不能重复,必须唯一。示例中repoid设置为**base**。 + > - name为软件仓库描述的字符串。 + > - baseurl为软件仓库的地址。 + > - enabled为是否启用该软件源仓库,可选值为1和0。默认值为1,表示启用该软件源仓库。 + > - gpgcheck可设置为1或0,1表示进行gpg(GNU Private Guard)校验,0表示不进行gpg校验,gpgcheck可以确定rpm包的来源是有效和安全的。 + > - gpgkey为验证签名用的公钥。 + +- 配置http服务器yum源 + + 在/etc/yum.repos.d目录下创建openEuler.repo文件。 + + - 若使用用户部署的http服务端的repo源作为yum源,openEuler.repo的内容如下: + + ``` + [base] + name=base + baseurl=http://192.168.139.209/ + enabled=1 + gpgcheck=1 + gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >“192.168.139.209”为示例地址,请用户根据实际情况进行配置。 + + - 若使用openEuler提供的openEuler repo源作为yum源,以AArch64架构的OS repo源为例,openEuler.repo的内容如下: + + ``` + [base] + name=base + baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/aarch64/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/aarch64/RPM-GPG-KEY-openEuler + ``` + + + +### repo优先级 + +当有多个repo源时,可通过在.repo文件的priority参数设置repo的优先级(如果不设置,默认优先级是99,当相同优先级的源中存在相同rpm包时,会安装最新的版本)。其中,1为最高优先级,99为最低优先级,如给openEuler.repo配置优先级为2: + +``` +[base] +name=base +baseurl=http://192.168.139.209/ +enabled=1 +priority=2 +gpgcheck=1 +gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler +``` + +### dnf相关命令 + +dnf命令在安装升级时能够自动解析包的依赖关系,一般的使用方式如下: + +``` +dnf +``` + +常用的命令如下: + +- 安装,需要在root权限下执行。 + + ``` + # dnf install + ``` + +- 升级,需要在root权限下执行。 + + ``` + # dnf update + ``` + +- 回退,需要在root权限下执行。 + + ``` + # dnf downgrade + ``` + +- 检查更新 + + ``` + $ dnf check-update + ``` + +- 卸载,需要在root权限下执行。 + + ``` + # dnf remove + ``` + +- 查询 + + ``` + $ dnf search + ``` + +- 本地安装,需要在root权限下执行。 + + ``` + # dnf localinstall + ``` + +- 查看历史记录 + + ``` + $ dnf history + ``` + +- 清除缓存目录 + + ``` + $ dnf clean all + ``` + +- 更新缓存 + + ``` + $ dnf makecache + ``` + diff --git "a/content/zh/docs/Administration/\346\220\255\345\273\272web\346\234\215\345\212\241\345\231\250.md" "b/docs/zh/docs/Administration/\346\220\255\345\273\272web\346\234\215\345\212\241\345\231\250.md" similarity index 98% rename from "content/zh/docs/Administration/\346\220\255\345\273\272web\346\234\215\345\212\241\345\231\250.md" rename to "docs/zh/docs/Administration/\346\220\255\345\273\272web\346\234\215\345\212\241\345\231\250.md" index b0878f072c7e5585f45877ba0756ea253b75a119..47a06bc374adce4ce9442eb593b1a7a6778dbe88 100644 --- "a/content/zh/docs/Administration/\346\220\255\345\273\272web\346\234\215\345\212\241\345\231\250.md" +++ "b/docs/zh/docs/Administration/\346\220\255\345\273\272web\346\234\215\345\212\241\345\231\250.md" @@ -39,7 +39,7 @@ openEuler系统中的web服务器版本是Apache HTTP服务器2.4版本,即htt # dnf install httpd ``` - 更多关于管理服务的内容,请参见[管理服务](管理服务.html)。 + 更多关于管理服务的内容,请参见[管理服务](./管理服务.html)。 - 启动、停止和重启httpd服务,需要使用root权限。 @@ -60,7 +60,7 @@ openEuler系统中的web服务器版本是Apache HTTP服务器2.4版本,即htt ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >假如正在运行的Apache HTTP服务器作为一个安全服务器,系统开机启动后需要密码,这个密码使用的是加密的私有SSL密钥。 #### 停止服务 @@ -157,7 +157,7 @@ $ systemctl is-active httpd Syntax OK ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >- 在修改配置文件之前,请先备份原始文件,以便出现问题时能够快速恢复配置文件。 >- 需要重启web服务,才能使修改后的配置文件生效。 @@ -198,7 +198,7 @@ httpd服务是一个模块化的应用,它和许多动态共享对象DSO(Dyn ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >**httpd 的常用命令** > >- httpd -v : 查看httpd的版本号。 @@ -316,7 +316,7 @@ Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件 ### 安装 -1. 配置本地yum源,详细信息请参考[搭建repo服务器](搭建repo服务器.html)。 +1. 配置本地yum源,详细信息请参考[搭建repo服务器](./搭建repo服务器.html)。 2. 清除缓存。 ``` @@ -352,7 +352,7 @@ Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件 - 为了能够使用nginx服务,请确保您的系统中已经安装nginx服务。若未安装,可参考[安装](#安装)进行安装。 - 更多关于管理服务的内容,请参见[管理服务](管理服务.html)。 + 更多关于管理服务的内容,请参见[管理服务](./管理服务.html)。 - 启动、停止和重启nginx服务,需要使用root权限。 @@ -373,7 +373,7 @@ Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件 ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >假如正在运行的nginx服务器作为一个安全服务器,系统开机启动后需要密码,这个密码使用的是加密的私有SSL密钥。 #### 停止服务 @@ -466,7 +466,7 @@ $ systemctl is-active nginx 如果回显信息中有“syntax is ok”,说明配置文件语法正确。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >- 在修改配置文件之前,请先备份原始文件,以便出现问题时能够快速恢复配置文件。 >- 需要重启web服务,才能使修改后的配置文件生效。 diff --git "a/content/zh/docs/Administration/\346\220\255\345\273\272\346\225\260\346\215\256\345\272\223\346\234\215\345\212\241\345\231\250.md" "b/docs/zh/docs/Administration/\346\220\255\345\273\272\346\225\260\346\215\256\345\272\223\346\234\215\345\212\241\345\231\250.md" similarity index 93% rename from "content/zh/docs/Administration/\346\220\255\345\273\272\346\225\260\346\215\256\345\272\223\346\234\215\345\212\241\345\231\250.md" rename to "docs/zh/docs/Administration/\346\220\255\345\273\272\346\225\260\346\215\256\345\272\223\346\234\215\345\212\241\345\231\250.md" index a6a66a23842316b8a1329110c09784b8b207e0c1..f25a11eab155a2cc58bc534729164773f7b6d97f 100644 --- "a/content/zh/docs/Administration/\346\220\255\345\273\272\346\225\260\346\215\256\345\272\223\346\234\215\345\212\241\345\231\250.md" +++ "b/docs/zh/docs/Administration/\346\220\255\345\273\272\346\225\260\346\215\256\345\272\223\346\234\215\345\212\241\345\231\250.md" @@ -28,7 +28,7 @@ PostgreSQL的架构如[图1](#fig26022387391)所示,主要进程说明如[表1](#table62020913417)所示。 **图 1** PostgreSql架构 -![](figures/PostgreSql架构.png "PostgreSql架构") +![](./figures/PostgreSQL_architecture.png) **表 1** PostgreSql中的主要进程说明 @@ -105,11 +105,11 @@ PostgreSQL的架构如[图1](#fig26022387391)所示,主要进程说明如[表1 ### 配置环境 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >以下环境配置仅为参考示例,具体配置视实际需求做配置 #### 关闭防火墙并取消开机自启动 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >测试环境下通常会关闭防火墙以避免部分网络因素影响,视实际需求做配置。 1. 在root权限下停止防火墙。 @@ -124,7 +124,7 @@ PostgreSQL的架构如[图1](#fig26022387391)所示,主要进程说明如[表1 # systemctl disable firewalld ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >执行disable命令关闭防火墙的同时,也取消了开机自启动。 @@ -139,7 +139,7 @@ PostgreSQL的架构如[图1](#fig26022387391)所示,主要进程说明如[表1 #### 创建组和用户 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >服务器环境下,为了系统安全,通常会为进程分配单独的用户,以实现权限隔离。本章节创建的组和用户都是操作系统层面的,不是数据库层面的。 1. 在root权限下创建PostgreSQL用户(组)。 @@ -161,7 +161,7 @@ PostgreSQL的架构如[图1](#fig26022387391)所示,主要进程说明如[表1 #### 搭建数据盘 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >- 测试极限性能时,建议单独挂载IO性能更优的NVME SSD存储介质创建PostgreSQL测试实例,避免磁盘IO对性能测试结果的影响,本文以单独挂载NVME SSD为例,参考步骤1\~步骤4。 >- 非性能测试时,在root权限下执行以下命令,创建数据目录即可。然后跳过本小节: > \# mkdir /data @@ -194,10 +194,10 @@ PostgreSQL的架构如[图1](#fig26022387391)所示,主要进程说明如[表1 ``` -### 安装、运行和卸载 +### 安装、运行和卸载 #### 安装 -1. 配置本地yum源,详细信息请参考[搭建repo服务器](搭建repo服务器.html)。 +1. 配置本地yum源,详细信息请参考[搭建repo服务器](./搭建repo服务器.html)。 2. 清除缓存。 ``` @@ -226,7 +226,7 @@ PostgreSQL的架构如[图1](#fig26022387391)所示,主要进程说明如[表1 #### 运行 ##### 初始化数据库 ->![](public_sys-resources/icon-notice.gif) **须知:** +>![](./public_sys-resources/icon-notice.gif) **须知:** >此步骤在postgres用户下操作。 1. 切换到已创建的PostgreSQL用户。 @@ -258,7 +258,7 @@ PostgreSQL的架构如[图1](#fig26022387391)所示,主要进程说明如[表1 命令执行后,打印信息如下图所示,PostgreSQL相关进程已经正常启动了。 - ![](figures/postgres.png) + ![](./figures/postgres.png) ##### 登录数据库 @@ -269,9 +269,9 @@ PostgreSQL的架构如[图1](#fig26022387391)所示,主要进程说明如[表1 $ /usr/bin/psql -U postgres ``` - ![](figures/登录.png) + ![](./figures/login.png) - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >初次登录数据库,无需密码。 @@ -283,7 +283,7 @@ PostgreSQL的架构如[图1](#fig26022387391)所示,主要进程说明如[表1 postgres=#alter user postgres with password '123456'; ``` - ![](figures/zh-cn_image_0230050789.png) + ![](./figures/zh-cn_image_0230050789.png) ##### 退出数据库 @@ -702,7 +702,7 @@ postgres=# \l; 可以使用DROP DATABASE语句或dropdb来删除数据库。dropdb是对DROP DATABASE命令的封装,需要在shell界面执行,而不是在数据库界面。 ->![](public_sys-resources/icon-caution.gif) **注意:** +>![](./public_sys-resources/icon-caution.gif) **注意:** >删除数据库要谨慎操作,一旦删除,数据库中的所有表和数据都会删除。 ``` @@ -790,14 +790,14 @@ psql命令不会自动创建databasename数据库,所以在执行psql恢复数 ``` ## Mariadb服务器 -### 软件介绍 +### 软件介绍 MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品,MariaDB还提供了许多更好的新特性。 MariaDB的架构如[图2](#fig13492418164520)所示。 **图 2** MariaDB逻辑架构 -![](figures/MariaDB逻辑架构.png "MariaDB逻辑架构") +![](./figures/Logical_architecture_MariaDB.png "MariaDB逻辑架构") 当Mariadb接受到Sql语句时,其详细的执行过程如下: @@ -817,13 +817,13 @@ MariaDB的架构如[图2](#fig13492418164520)所示。 - MEMORY,将数据存储在内存当中。 - CSV,将数据存储为CSV格式。 -### 配置环境 +### 配置环境 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >以下环境配置仅为参考示例,具体配置视实际需求做配置 #### 关闭防火墙并取消开机自启动 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >测试环境下通常会关闭防火墙以避免部分网络因素影响,视实际需求做配置。 1. 在root权限下停止防火墙。 @@ -838,7 +838,7 @@ MariaDB的架构如[图2](#fig13492418164520)所示。 # systemctl disable firewalld ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >执行disable命令关闭防火墙的同时,也取消了开机自启动。 @@ -853,7 +853,7 @@ MariaDB的架构如[图2](#fig13492418164520)所示。 #### 创建组和用户 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >服务器环境下,为了系统安全,通常会为进程分配单独的用户,以实现权限隔离。本章节创建的组和用户都是操作系统层面的,不是数据库层面的。 1. 在root权限下创建MySQL用户(组)。 @@ -877,7 +877,7 @@ MariaDB的架构如[图2](#fig13492418164520)所示。 #### 搭建数据盘 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >- 进行性能测试时,数据目录使用单独硬盘,需要对硬盘进行格式化并挂载,参考方法一或者方法二 >- 非性能测试时,在root权限下执行以下命令,创建数据目录即可。然后跳过本小节: > \#mkdir /data @@ -916,17 +916,17 @@ MariaDB的架构如[图2](#fig13492418164520)所示。 其中,/dev/nvme0n1p1为示例,具体名称以实际情况为准。 - ![](figures/搭建数据盘.png) + ![](./figures/Creating_DataDisk.png) ##### 方法二:在root权限下使用LVM进行磁盘管理 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >此步骤需要安装镜像中的lvm2相关包,步骤如下: > ->1. 配置本地yum源,详细信息请参考[搭建repo服务器](搭建repo服务器.html)。如果已经执行,则可跳过此步。 +>1. 配置本地yum源,详细信息请参考[搭建repo服务器](./搭建repo服务器.html)。如果已经执行,则可跳过此步。 >2. 在root权限下执行命令安装lvm2。 -> **\# yum install lvm2** +> **\# yum install lvm2** 1. 创建物理卷(sdb为硬盘名称,具体名字以实际为准)。 @@ -966,7 +966,7 @@ MariaDB的架构如[图2](#fig13492418164520)所示。 其中,/dev/datavg/datalv为示例,具体名称以实际情况为准。 - ![](figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png) + ![](./figures/D1376B2A-D036-41C4-B852-E8368F363B5E.png) #### 创建数据库目录并且授权 @@ -981,10 +981,10 @@ MariaDB的架构如[图2](#fig13492418164520)所示。 ``` -### 安装、运行和卸载 +### 安装、运行和卸载 #### 安装 -1. 配置本地yum源,详细信息请参考[搭建repo服务器](搭建repo服务器.html)。 +1. 配置本地yum源,详细信息请参考[搭建repo服务器](./搭建repo服务器.html)。 2. 清除缓存。 ``` @@ -1034,7 +1034,7 @@ MariaDB的架构如[图2](#fig13492418164520)所示。 命令执行后提示输入密码。密码为[2](#li197143190587)中设置的密码。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >执行 **\\q** 或者 **exit** 可退出数据库。 @@ -1043,10 +1043,9 @@ MariaDB的架构如[图2](#fig13492418164520)所示。 1. 在root权限下关闭数据库进程。 ``` - $ ps -ef | grep mysql - # kill -9 进程ID + # systemctl stop mariadb ``` - + 2. 在root权限下执行**dnf remove mariadb-server**命令卸载mariadb。 ``` @@ -1054,7 +1053,7 @@ MariaDB的架构如[图2](#fig13492418164520)所示。 ``` -### 管理数据库用户 +### 管理数据库用户 #### 创建用户 可以使用CREATE USER语句来创建一个或多个用户,并设置相应的口令。 @@ -1169,7 +1168,7 @@ SET PASSWORD FOR 'username'@'hostname' = PASSWORD('newpassword'); - FOR 'username'@'hostname':FOR字句,可选项,指定欲修改密码的用户名及主机名。 - PASSWORD\('newpassword'\):表示使用函数PASSWORD\(\)设置新口令,即新口令必须传递到函数PASSWORD\(\)中进行加密。 ->![](public_sys-resources/icon-caution.gif) **注意:** +>![](./public_sys-resources/icon-caution.gif) **注意:** >PASSWORD\(\)函数为单向加密函数,一旦加密后不能解密出原明文。 在SET PASSWORD语句中,若不加上FOR子句,表示修改当前用户的密码。 @@ -1194,7 +1193,7 @@ FOR字句中必须以'username'@'hostname'的格式给定,username为账户的 DROP USER 'username1'@'hostname1' [,'username2'@'hostname2']…; ``` ->![](public_sys-resources/icon-caution.gif) **注意:** +>![](./public_sys-resources/icon-caution.gif) **注意:** >用户的删除不会影响他们之前所创建的表、索引或其他数据库对象,因为数据库并不会记录创建了这些对象的账号。 DROP USER语句可用于删除一个或多个数据库账号,并删除其原有权限。 @@ -1263,7 +1262,7 @@ REVOKE privilege ON databasename.tablename FROM 'username'@'hostname'; > REVOKE INSERT ON *.* FROM 'userexample'@'localhost'; ``` -### 管理数据库 +### 管理数据库 #### 创建数据库 可以使用CREATE DATABASE语句来创建数据库。 @@ -1320,7 +1319,7 @@ USE databasename; 可以使用DROP DATABASE语句来删除数据库。 ->![](public_sys-resources/icon-caution.gif) **注意:** +>![](./public_sys-resources/icon-caution.gif) **注意:** >删除数据库要谨慎操作,一旦删除,数据库中的所有表和数据都会删除。 ``` @@ -1416,7 +1415,7 @@ mysqldump [options] -all-databases > outputfile 可以在root权限下使用mysql命令恢复数据库。 -备份一个或多个表: +恢复一个或多个表: ``` mysql -h hostname -P portnumber -u username -ppassword databasename < infile @@ -1440,7 +1439,7 @@ mysql -h hostname -P portnumber -u username -ppassword databasename < infile ``` ## MySQL服务器 -### 软件介绍 +### 软件介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下产品。MySQL是业界最流行的RDBMS \(Relational Database Management System,关系数据库管理系统\)之一,尤其在WEB应用方面。 @@ -1448,13 +1447,13 @@ MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发, MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权模式,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。 -### 配置环境 +### 配置环境 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >以下环境配置仅为参考示例,具体配置视实际需求做配置 #### 关闭防火墙并取消开机自启动 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >测试环境下通常会关闭防火墙以避免部分网络因素影响,视实际需求做配置。 1. 在root权限下停止防火墙。 @@ -1469,7 +1468,7 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 # systemctl disable firewalld ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >执行disable命令关闭防火墙的同时,也取消了开机自启动。 @@ -1484,7 +1483,7 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 #### 创建组和用户 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >服务器环境下,为了系统安全,通常会为进程分配单独的用户,以实现权限隔离。本章节创建的组和用户都是操作系统层面的,不是数据库层面的。 1. 在root权限下创建MySQL用户(组)。 @@ -1508,7 +1507,7 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 #### 搭建数据盘 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >- 进行性能测试时,数据目录使用单独硬盘,需要对硬盘进行格式化并挂载,参考方法一或者方法二 >- 非性能测试时,在root权限下执行以下命令,创建数据目录即可。然后跳过本小节: > \# mkdir /data @@ -1547,14 +1546,14 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 其中,/dev/nvme0n1p1为示例,具体名称以实际情况为准。 - ![](figures/搭建数据盘-0.png) + ![](./figures/Creating_DataDisk-0.png) ##### 方法二:在root权限下使用LVM进行磁盘管理 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >此步骤需要安装镜像中的lvm2相关包,步骤如下: ->1. 配置本地yum源,详细信息请参考[搭建repo服务器](搭建repo服务器.html)。如果已经执行,则可跳过此步。 +>1. 配置本地yum源,详细信息请参考[搭建repo服务器](./搭建repo服务器.html)。如果已经执行,则可跳过此步。 >2. 执行命令安装lvm2。 > **\#yum install lvm2** @@ -1596,7 +1595,7 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 其中,/dev/datavg/datalv为示例,具体名称以实际情况为准。 - ![](figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png) + ![](./figures/D1376B2A-D036-41C4-B852-E8368F363B5E-1.png) #### 创建数据库目录并且授权 @@ -1611,10 +1610,23 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 ``` -### 安装、运行和卸载 +### 安装、运行和卸载 #### 安装 +>![](./public_sys-resources/icon-note.gif) **说明:** +>针对20.03 LTS SP3 版本,如果用户从mysql-8.0.17-3.oe1版本升级到较新版本,使用rpm -Uvh xxx(其中XXX指具体的版本,例如mysql-8.0.21-1.oe1.aarch64.rpm)命令,升级后功能不可用,可以通过以下两种方式进行版本升级(以mysql-8.0.17-3.oe1升级到mysql-8.0.21-1.oe1举例): +> +>方法1,执行如下升级命令实现: + ``` + # rpm -Uvh mysql-8.0.21-1.oe1.aarch64.rpm --noscripts + ``` +> +>方法2,先卸载旧版本的mysql,再安装新版本的mysql,命令如下: + ``` + # rpm -e mysql-8.0.17-3.oe1 + # rpm -ivh mysql-8.0.21-1.oe1.aarch64.rpm + ``` -1. 配置本地yum源,详细信息请参考[搭建repo服务器](搭建repo服务器.html)章节。 +1. 配置本地yum源,详细信息请参考[搭建repo服务器](./搭建repo服务器.html)章节。 2. 清除缓存。 ``` @@ -1630,13 +1642,13 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 4. 在root权限下安装MySQL服务器。 ``` - # dnf install mysql + # dnf install mysql-server ``` 5. 查看安装后的rpm包。 ``` - $ rpm -qa | grep mysql + $ rpm -qa | grep mysql-server ``` @@ -1677,9 +1689,9 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 $ cat /etc/my.cnf ``` - ![](figures/zh-cn_image_0231563132.png) + ![](./figures/zh-cn_image_0231563132.png) - >![](public_sys-resources/icon-caution.gif) **注意:** + >![](./public_sys-resources/icon-caution.gif) **注意:** >其中basedir为软件安装路径,请根据实际情况修改。 3. 在root权限下修改/etc/my.cnf文件的组和用户为mysql:mysql @@ -1695,7 +1707,7 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 # echo export PATH=$PATH:/usr/local/mysql/bin >> /etc/profile ``` - >![](public_sys-resources/icon-caution.gif) **注意:** + >![](./public_sys-resources/icon-caution.gif) **注意:** >其中PATH中的“/usr/local/mysql/bin“路径,为MySQL软件安装目录下的bin文件的绝对路径。请根据实际情况修改。 2. 在root权限下使环境变量配置生效。 @@ -1706,7 +1718,7 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 3. 在root权限下初始化数据库。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >本步骤倒数第2行中有初始密码,请注意保存,登录数据库时需要使用。 ``` @@ -1720,7 +1732,7 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 4. 启动数据库。 - >![](public_sys-resources/icon-caution.gif) **注意:** + >![](./public_sys-resources/icon-caution.gif) **注意:** >如果第一次启动数据库服务,以root用户启动数据库,则启动时会提示缺少mysql.log文件而导致失败。使用mysql用户启动之后,会在/data/mysql/log目录下生成mysql.log文件,再次使用root用户启动则不会报错。 1. 在root权限下修改文件权限。 @@ -1745,7 +1757,7 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 5. 登录数据库。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >- 提示输入密码时,请输入[3](#li15634560582)产生的初始密码。 >- 如果采用官网RPM安装方式,则mysql文件在/usr/bin目录下。登录数据库的命令根据实际情况修改。 @@ -1753,7 +1765,7 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 $ /usr/local/mysql/bin/mysql -uroot -p -S /data/mysql/run/mysql.sock ``` - ![](figures/zh-cn_image_0231563134.png) + ![](./figures/zh-cn_image_0231563134.png) 6. 配置数据库帐号密码。 1. 登录数据库以后,修改通过root用户登录数据库的密码。 @@ -1775,7 +1787,7 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 mysql> flush privileges; ``` - ![](figures/zh-cn_image_0231563135.png) + ![](./figures/zh-cn_image_0231563135.png) 7. 退出数据库。 @@ -1785,7 +1797,7 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 mysql> exit ``` - ![](figures/zh-cn_image_0231563136.png) + ![](./figures/zh-cn_image_0231563136.png) #### 卸载 @@ -1793,10 +1805,9 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 1. 在root权限下关闭数据库进程。 ``` - $ ps -ef | grep mysql - # kill -9 进程ID + # systemctl stop mysql ``` - + 2. 在root权限下执行**dnf remove mysql**命令卸载MySQL。 ``` @@ -1804,7 +1815,7 @@ MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。 ``` -### 管理数据库用户 +### 管理数据库用户 #### 创建用户 可以使用CREATE USER语句来创建一个或多个用户,并设置相应的口令。 @@ -1941,7 +1952,7 @@ FOR字句中必须以'username'@'hostname'的格式给定,username为账户的 DROP USER 'username1'@'hostname1' [,'username2'@'hostname2']…; ``` ->![](public_sys-resources/icon-caution.gif) **注意:** +>![](./public_sys-resources/icon-caution.gif) **注意:** >用户的删除不会影响他们之前所创建的表、索引或其他数据库对象,因为数据库并不会记录创建了这些对象的账号。 DROP USER语句可用于删除一个或多个数据库账号,并删除其原有权限。 @@ -2010,7 +2021,7 @@ REVOKE privilege ON databasename.tablename FROM 'username'@'hostname'; > REVOKE INSERT ON *.* FROM 'userexample'@'localhost'; ``` -### 管理数据库 +### 管理数据库 #### 创建数据库 可以使用CREATE DATABASE语句来创建数据库。 @@ -2067,7 +2078,7 @@ USE databasename; 可以使用DROP DATABASE语句来删除数据库。 ->![](public_sys-resources/icon-caution.gif) **注意:** +>![](./public_sys-resources/icon-caution.gif) **注意:** >删除数据库要谨慎操作,一旦删除,数据库中的所有表和数据都会删除。 ``` @@ -2163,7 +2174,7 @@ mysqldump [options] -all-databases > outputfile 可以在root权限下使用mysql命令恢复数据库。 -备份一个或多个表: +恢复一个或多个表: ``` mysql -h hostname -P portnumber -u username -ppassword databasename < infile diff --git "a/content/zh/docs/Administration/\346\220\255\345\273\272\346\234\215\345\212\241.md" "b/docs/zh/docs/Administration/\346\220\255\345\273\272\346\234\215\345\212\241.md" similarity index 100% rename from "content/zh/docs/Administration/\346\220\255\345\273\272\346\234\215\345\212\241.md" rename to "docs/zh/docs/Administration/\346\220\255\345\273\272\346\234\215\345\212\241.md" diff --git "a/content/zh/docs/Administration/\346\237\245\347\234\213\347\263\273\347\273\237\344\277\241\346\201\257.md" "b/docs/zh/docs/Administration/\346\237\245\347\234\213\347\263\273\347\273\237\344\277\241\346\201\257.md" similarity index 75% rename from "content/zh/docs/Administration/\346\237\245\347\234\213\347\263\273\347\273\237\344\277\241\346\201\257.md" rename to "docs/zh/docs/Administration/\346\237\245\347\234\213\347\263\273\347\273\237\344\277\241\346\201\257.md" index c96e6112cdf7d80a9728c91607f194c1e810d926..72fb02d8a454963a0be1a2c00ae728ce00bcd305 100644 --- "a/content/zh/docs/Administration/\346\237\245\347\234\213\347\263\273\347\273\237\344\277\241\346\201\257.md" +++ "b/docs/zh/docs/Administration/\346\237\245\347\234\213\347\263\273\347\273\237\344\277\241\346\201\257.md" @@ -1,46 +1,46 @@ -# 查看系统信息 - -- 查看系统信息,命令如下: - - ``` - $ cat /etc/os-release - ``` - - 例如,命令和输出如下: - - ``` - $ cat /etc/os-release - NAME="openEuler" - VERSION="20.09" - ID="openEuler" - VERSION_ID="20.09" - PRETTY_NAME="openEuler 20.09" - ANSI_COLOR="0;31" - ``` - - -- 查看系统相关的资源信息。 - - 查看CPU信息,命令如下: - - ``` - $ lscpu - ``` - - 查看内存信息,命令如下: - - ``` - $ free - ``` - - 查看磁盘信息,命令如下: - - ``` - $ fdisk -l - ``` - -- 查看系统资源实时信息,命令如下: - - ``` - $ top - ``` +# 查看系统信息 + +- 查看系统信息,命令如下: + + ``` + $ cat /etc/os-release + ``` + + 例如,命令和输出如下: + + ``` + $ cat /etc/os-release + NAME="openEuler" + VERSION="20.03 (LTS-SP3)" + ID="openEuler" + VERSION_ID="20.03" + PRETTY_NAME="openEuler 20.03 (LTS-SP3)" + ANSI_COLOR="0;31" + ``` + + +- 查看系统相关的资源信息。 + + 查看CPU信息,命令如下: + + ``` + $ lscpu + ``` + + 查看内存信息,命令如下: + + ``` + $ free + ``` + + 查看磁盘信息,命令如下: + + ``` + $ fdisk -l + ``` + 查看系统资源实时信息,命令如下: + + ``` + $ top + ``` + diff --git "a/content/zh/docs/Administration/\347\256\241\347\220\206\346\234\215\345\212\241.md" "b/docs/zh/docs/Administration/\347\256\241\347\220\206\346\234\215\345\212\241.md" similarity index 94% rename from "content/zh/docs/Administration/\347\256\241\347\220\206\346\234\215\345\212\241.md" rename to "docs/zh/docs/Administration/\347\256\241\347\220\206\346\234\215\345\212\241.md" index 4ad3fba84371272ea948a9ef2a52d4af97faf311..6cc51effbdac9609633db427216cbd73fe936c33 100644 --- "a/content/zh/docs/Administration/\347\256\241\347\220\206\346\234\215\345\212\241.md" +++ "b/docs/zh/docs/Administration/\347\256\241\347\220\206\346\234\215\345\212\241.md" @@ -53,148 +53,89 @@ systemd开启和监督整个系统是基于unit的概念。unit是由一个与 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

unit名称

后缀名

描述

Service unit

.service

系统服务。

Target unit

.target

一组systemd units。

Automount unit

.automount

文件系统挂载点。

Device unit

.device

内核识别的设备文件。

Mount unit

.mount

文件系统挂载点。

Path unit

.path

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

Scope unit

.scope

外部创建的进程。

Slice unit

.slice

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

Snapshot unit

-

.snapshot

-

systemd manager的保存状态。

-

Socket unit

.socket

一个进程间通信的Socket。

Swap unit

.swap

swap设备或者swap文件。

Timer unit

.timer

systemd计时器。

@@ -205,37 +146,25 @@ systemd开启和监督整个系统是基于unit的概念。unit是由一个与 - - - - - - - - - - - -

路径

描述

/usr/lib/systemd/system/

随安装的RPM产生的systemd units。

/run/systemd/system/

在运行时创建systemd units。

/etc/systemd/system/

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

@@ -288,7 +217,7 @@ systemd提供了和sysvinit以及LSB initscripts兼容的特性。系统中已 systemd支持按需启动,因此系统的运行状态是动态变化的,人们无法准确地知道系统当前运行了哪些服务。systemd快照提供了一种将当前系统运行状态保存并恢复的能力。 -比如系统当前正运行服务A和B,可以用systemd命令行对当前系统运行状况创建快照。然后将进程A停止,或者做其他的任意的对系统的改变,比如启动新的进程C。在这些改变之后,运行systemd的快照恢复命令,就可立即将系统恢复到快照时刻的状态,即只有服务A,B在运行。一个可能的应用场景是调试:比如服务器出现一些异常,为了调试用户将当前状态保存为快照,然后可以进行任意的操作,比如停止服务等等。等调试结束,恢复快照即可。 +比如系统当前正运行服务A和B,可以用systemd命令行对当前系统运行状况创建快照。然后将进程A停止,或者做其他的任意的对系统的改变,比如启动新的进程C。在这些改变之后,运行systemd的快照恢复命令,就可立即将系统恢复到快照时刻的状态,即只有服务A和B在运行。一个可能的应用场景是调试:比如服务器出现一些异常,为了调试用户将当前状态保存为快照,然后可以进行任意的操作,比如停止服务等等。等调试结束,恢复快照即可。 ## 管理系统服务 @@ -481,35 +410,10 @@ is-active命令的返回结果如下: **表 5** is-active命令的返回结果 - - - - - - - - - - - - - - - - - - -

状态

-

含义

-

active(running)

-

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

-

active(exited)

-

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

-

active(waiting)

-

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

-

inactive

-

这个服务没有运行

-
+| 状态 | 含义 | +|:---|:---| +| active | 这个服务正在运行。 | +| inactive | 这个服务没有运行。 | 同样,如果您需要判断某个服务是否被启用,可执行如下命令: @@ -741,7 +645,7 @@ systemd用目标(target)替代了运行级别的概念,提供了更大的

emergency.target

-

紧急Shell

+

紧急Shell。

@@ -787,15 +691,7 @@ systemctl isolate name.target systemctl rescue ``` -这条命令和“systemctl isolate rescue.target”类似。命令执行后会在串口有如下打印信息: - -``` -You are in rescue mode. After logging in, type "journalctl -xb" to viewsystem logs, "systemctl reboot" to reboot, "systemctl default" or "exit"to boot into default mode. -Give root password for maintenance -(or press Control-D to continue): -``` - ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >用户需要重启系统,从救援模式进入正常模式。 ### 切换到紧急模式 @@ -814,7 +710,7 @@ Give root password for maintenance (or press Control-D to continue): ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >用户需要重启系统,从紧急模式进入正常模式。 ## 关闭、暂停和休眠系统 diff --git "a/content/zh/docs/Administration/\347\256\241\347\220\206\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204.md" "b/docs/zh/docs/Administration/\347\256\241\347\220\206\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204.md" similarity index 97% rename from "content/zh/docs/Administration/\347\256\241\347\220\206\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204.md" rename to "docs/zh/docs/Administration/\347\256\241\347\220\206\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204.md" index f207145e2f27c81a56a4999da2bc1637ef2d19a2..200ffcae1af23f3d10bbdceb857e541d88a3c630 100644 --- "a/content/zh/docs/Administration/\347\256\241\347\220\206\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204.md" +++ "b/docs/zh/docs/Administration/\347\256\241\347\220\206\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204.md" @@ -52,7 +52,7 @@ useradd [options] username # useradd userexample ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >没有任何提示,表明用户建立成功。这时并没有设置用户的口令,请使用passwd命令修改用户的密码,没有设置密码的新账号不能登录系统。 @@ -101,7 +101,7 @@ Retype new password: passwd: all authentication tokens updated successfully. ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >若打印信息中出现“BAD PASSWORD: The password fails the dictionary check - it is too simplistic/sytematic”,表示设置的密码过于简单,建议设置复杂度较高的密码。 ### 修改用户账号 @@ -171,7 +171,7 @@ usermod -e MM/DD/YY username 如果想同时删除该用户的主目录以及其中所有内容,要使用-r参数递归删除。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >不建议直接删除已经进入系统的用户,如果需要强制删除,请使用 userdel -f _Test_ 命令。 ### 管理员账户授权 @@ -223,7 +223,7 @@ sudo /usr/sbin/useradd newuserl 这一句说明ted1主机上的newuser1具有以root用户权限执行useradd,userdel命令的功能。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >- 可以在一行定义多个别名,中间用冒号 \(:\) 隔开。 >- 可在命令或命令别名之前加上感叹号 \(!\),使该命令或命令别名无效。 >- 有两个关键词:ALL和NOPASSWD。ALL意味着“所有”(所有文件、所有主机或所有命令),NOPASSWD意味着不用密码。 @@ -312,7 +312,7 @@ groupmod -n newgroupname oldgroupname # groupdel Test ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >groupdel不能直接删除用户的主组,如果需要强制删除用户主组,请使用 groupdel -f _Test_ 命令。 ### 将用户加入用户组或从用户组中移除 diff --git "a/content/zh/docs/Administration/\347\256\241\347\220\206\350\277\233\347\250\213.md" "b/docs/zh/docs/Administration/\347\256\241\347\220\206\350\277\233\347\250\213.md" similarity index 97% rename from "content/zh/docs/Administration/\347\256\241\347\220\206\350\277\233\347\250\213.md" rename to "docs/zh/docs/Administration/\347\256\241\347\220\206\350\277\233\347\250\213.md" index e966f9c0d46a438942975c562345ec3b1bc4d99b..415addd61b584788978bd057b725c19007a6d541 100644 --- "a/content/zh/docs/Administration/\347\256\241\347\220\206\350\277\233\347\250\213.md" +++ "b/docs/zh/docs/Administration/\347\256\241\347\220\206\350\277\233\347\250\213.md" @@ -1,350 +1,350 @@ -# 管理进程 - -操作系统管理多个用户的请求和多个任务。大多数系统都只有一个CPU和一个主要存储,但一个系统可能有多个二级存储磁盘和多个输入/输出设备。操作系统管理这些资源并在多个用户间共享资源,当用户提出一个请求时,造成好像系统被用户独占的假象。实际上操作系统监控着一个等待执行的任务队列,这些任务包括用户任务、操作系统任务、邮件和打印任务等。本章节将从用户的角度讲述如何控制进程。 - - -- [管理进程](#管理进程) - - [查看进程](#查看进程) - - [who命令](#who命令) - - [ps命令](#ps命令) - - [top命令](#top命令) - - [kill命令](#kill命令) - - [调度启动进程](#调度启动进程) - - [定时运行一批程序(at)](#定时运行一批程序at) - - [周期性运行一批程序(cron)](#周期性运行一批程序cron) - - [挂起/恢复进程](#挂起恢复进程) - - -## 查看进程 - -Linux是一个多任务系统,经常需要对这些进程进行一些调配和管理。要进行管理,首先就要知道现在的进程情况:有哪些进程、进程的状态如何等。Linux提供了多种命令来了解进程的状况。 - -### who命令 - -who命令主要用于查看当前系统中的用户情况。如果用户想和其他用户建立即时通讯,比如使用talk命令,那么首先要确定的就是该用户确实在线上,不然talk进程就无法建立起来。又如,系统管理员希望监视每个登录的用户此时此刻的所作所为,也要使用who命令。who命令应用起来非常简单,可以比较准确地掌握用户的情况,所以使用非常广泛。 - -例如查看系统中的用户及其状态。使用如下: - -``` -$ who -admin tty1 Jul 28 15:55 -admin pts/0 Aug 5 15:46 (192.168.0.110) -admin pts/2 Jul 29 19:52 (192.168.0.110) -root pts/3 Jul 30 12:07 (192.168.0.110) -root pts/4 Jul 31 10:29 (192.168.0.144) -root pts/5 Jul 31 14:52 (192.168.0.11) -root pts/6 Aug 6 10:12 (192.168.0.234) -root pts/8 Aug 6 11:34 (192.168.0.234) -``` - -### ps命令 - -ps命令是最基本又非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等,大部分进程信息都是可以通过执行该命令得到的。 - -ps命令最常用的还是用来监控后台进程的工作情况,因为后台进程是不与屏幕、键盘这些标准输入/输出设备进行通信的,所以如果需要检测其状况,就可使用ps命令。ps命令的常见选项如[表1](#zh-cn_topic_0151921029_t34619d964a3d41ad8694189ec383359c)所示。 - -**表 1** 选项说明 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

选项

-

描述

-

-e

-

显示所有进程。

-

-f

-

全格式。

-

-h

-

不显示标题。

-

-l

-

使用长格式。

-

-w

-

宽行输出。

-

-a

-

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

-

-r

-

只显示正在运行的进程。

-

-x

-

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

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

参数

-

描述

-

minute

-

分钟(0~59)。

-

hour

-

小时(0~23)。

-

day-of-month

-

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

-

month-of-year

-

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

-

day-of-week

-

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

-

commands

-

需要执行的命令。

-
- -这些项都不能为空,必须指定值。除了数字还有几个特殊的符号“\*”、“/”和“-”、“,”。其中,\*代表所有的取值范围内的数字,/代表每的意思,“\*/5”表示每5个单位,“-”代表从某个数字到某个数字,“,”分开几个离散时数字。对于要执行的命令,调用的时候需要写出命令的完整路径。 - -例如晚上18点到22点之间每两个小时,在/tmp/test.txt文件中加入sleepy文本。在crontab文件中对应的行如下: - -``` -* 18-22/2 * * * echo "sleepy" >> /tmp/test.txt -``` - -每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件。此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e来编辑。用户也可以另外建立一个文件,使用“cron文件名”命令导入cron设置。 - -假设有个用户名为userexample,它需要为自己创建的一个crontab文件。步骤如下: - -1. 首先可以使用任何文本编辑器建立一个新文件,并将向该文件加入需要运行的命令和要定期执行的时间,假设该文件为 \~/userexample.cron。 -2. 然后在root权限下使用crontab命令安装这个文件,使用crontab命令使之成为该用户的crontab文件。命令如下: - - ``` - # crontab -u userexample ~/userexample.cron - ``` - - -这样crontab文件就建立好了,可以转到/var/spool/cron目录下面查看,发现多了一个userexample文件。这个文件就是所需的crontab文件。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->cron启动后,每过一分钟读一次crontab文件,检查是否要执行里面的命令。因此该文件被修改后不需要重新启动cron服务。 - -#### 编辑配置文件 - -cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此通过配置这个文件也能得到cron的服务。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式如下: - -``` -SHELL=/bin/sh -PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin -MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个账号 -HOME=/ -# run-parts -01 * * * * root run-parts /etc/cron.hourly //每个小时执行一次/etc/cron.hourly里的脚本 -02 4 * * * root run-parts /etc/cron.daily //每天执行一次/etc/cron.daily里的脚本 -22 4 * * 0 root run-parts /etc/cron.weekly //每周执行一次/etc/cron.weekly里的脚本 -42 4 1 * * root run-parts /etc/cron.monthly //每月执行一次/etc/cron.monthly里的脚本 -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->如果去掉run-parts参数,其后面就是运行的某个脚本名,而不是目录名。 - -## 挂起/恢复进程 - -作业控制允许进程挂起并可以在需要时恢复进程的运行,被挂起的作业恢复后将从中止处开始继续运行。只要在键盘上按Ctrl+Z键,即可挂起当前的前台作业。在键盘上按Ctrl+Z键后,将挂起当前执行的命令cat。使用jobs命令可以显示shell的作业清单,包括具体的作业、作业号以及作业当前所处的状态。 - -恢复进程执行时,有两种选择:用fg命令将挂起的作业放回到前台执行;用bg命令将挂起的作业放到后台执行。灵活使用上述命令,将给自己带来很大的方便。 - +# 管理进程 + +操作系统管理多个用户的请求和多个任务。大多数系统都只有一个CPU和一个主要存储,但一个系统可能有多个二级存储磁盘和多个输入/输出设备。操作系统管理这些资源并在多个用户间共享资源,当用户提出一个请求时,造成好像系统被用户独占的假象。实际上操作系统监控着一个等待执行的任务队列,这些任务包括用户任务、操作系统任务、邮件和打印任务等。本章节将从用户的角度讲述如何控制进程。 + + +- [管理进程](#管理进程) + - [查看进程](#查看进程) + - [who命令](#who命令) + - [ps命令](#ps命令) + - [top命令](#top命令) + - [kill命令](#kill命令) + - [调度启动进程](#调度启动进程) + - [定时运行一批程序(at)](#定时运行一批程序at) + - [周期性运行一批程序(cron)](#周期性运行一批程序cron) + - [挂起/恢复进程](#挂起恢复进程) + + +## 查看进程 + +Linux是一个多任务系统,经常需要对这些进程进行一些调配和管理。要进行管理,首先就要知道现在的进程情况:有哪些进程、进程的状态如何等。Linux提供了多种命令来了解进程的状况。 + +### who命令 + +who命令主要用于查看当前系统中的用户情况。如果用户想和其他用户建立即时通讯,比如使用talk命令,那么首先要确定的就是该用户确实在线上,不然talk进程就无法建立起来。又如,系统管理员希望监视每个登录的用户此时此刻的所作所为,也要使用who命令。who命令应用起来非常简单,可以比较准确地掌握用户的情况,所以使用非常广泛。 + +例如查看系统中的用户及其状态。使用如下: + +``` +$ who +admin tty1 Jul 28 15:55 +admin pts/0 Aug 5 15:46 (192.168.0.110) +admin pts/2 Jul 29 19:52 (192.168.0.110) +root pts/3 Jul 30 12:07 (192.168.0.110) +root pts/4 Jul 31 10:29 (192.168.0.144) +root pts/5 Jul 31 14:52 (192.168.0.11) +root pts/6 Aug 6 10:12 (192.168.0.234) +root pts/8 Aug 6 11:34 (192.168.0.234) +``` + +### ps命令 + +ps命令是最基本又非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等,大部分进程信息都是可以通过执行该命令得到的。 + +ps命令最常用的还是用来监控后台进程的工作情况,因为后台进程是不与屏幕、键盘这些标准输入/输出设备进行通信的,所以如果需要检测其状况,就可使用ps命令。ps命令的常见选项如[表1](#zh-cn_topic_0151921029_t34619d964a3d41ad8694189ec383359c)所示。 + +**表 1** 选项说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

选项

+

描述

+

-e

+

显示所有进程。

+

-f

+

全格式。

+

-h

+

不显示标题。

+

-l

+

使用长格式。

+

-w

+

宽行输出。

+

-a

+

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

+

-r

+

只显示正在运行的进程。

+

-x

+

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

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

参数

+

描述

+

minute

+

分钟(0~59)。

+

hour

+

小时(0~23)。

+

day-of-month

+

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

+

month-of-year

+

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

+

day-of-week

+

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

+

commands

+

需要执行的命令。

+
+ +这些项都不能为空,必须指定值。除了数字还有几个特殊的符号“\*”、“/”和“-”、“,”。其中,\*代表所有的取值范围内的数字,/代表每的意思,“\*/5”表示每5个单位,“-”代表从某个数字到某个数字,“,”分开几个离散时数字。对于要执行的命令,调用的时候需要写出命令的完整路径。 + +例如晚上18点到22点之间每两个小时,在/tmp/test.txt文件中加入sleepy文本。在crontab文件中对应的行如下: + +``` +* 18-22/2 * * * echo "sleepy" >> /tmp/test.txt +``` + +每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件。此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e来编辑。用户也可以另外建立一个文件,使用“cron文件名”命令导入cron设置。 + +假设有个用户名为userexample,它需要为自己创建的一个crontab文件。步骤如下: + +1. 首先可以使用任何文本编辑器建立一个新文件,并将向该文件加入需要运行的命令和要定期执行的时间,假设该文件为 \~/userexample.cron。 +2. 然后在root权限下使用crontab命令安装这个文件,使用crontab命令使之成为该用户的crontab文件。命令如下: + + ``` + # crontab -u userexample ~/userexample.cron + ``` + + +这样crontab文件就建立好了,可以转到/var/spool/cron目录下面查看,发现多了一个userexample文件。这个文件就是所需的crontab文件。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>cron启动后,每过一分钟读一次crontab文件,检查是否要执行里面的命令。因此该文件被修改后不需要重新启动cron服务。 + +#### 编辑配置文件 + +cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此通过配置这个文件也能得到cron的服务。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式如下: + +``` +SHELL=/bin/sh +PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin +MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个账号 +HOME=/ +# run-parts +01 * * * * root run-parts /etc/cron.hourly //每个小时执行一次/etc/cron.hourly里的脚本 +02 4 * * * root run-parts /etc/cron.daily //每天执行一次/etc/cron.daily里的脚本 +22 4 * * 0 root run-parts /etc/cron.weekly //每周执行一次/etc/cron.weekly里的脚本 +42 4 1 * * root run-parts /etc/cron.monthly //每月执行一次/etc/cron.monthly里的脚本 +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>如果去掉run-parts参数,其后面就是运行的某个脚本名,而不是目录名。 + +## 挂起/恢复进程 + +作业控制允许进程挂起并可以在需要时恢复进程的运行,被挂起的作业恢复后将从中止处开始继续运行。只要在键盘上按Ctrl+Z键,即可挂起当前的前台作业。在键盘上按Ctrl+Z键后,将挂起当前执行的命令cat。使用jobs命令可以显示shell的作业清单,包括具体的作业、作业号以及作业当前所处的状态。 + +恢复进程执行时,有两种选择:用fg命令将挂起的作业放回到前台执行;用bg命令将挂起的作业放到后台执行。灵活使用上述命令,将给自己带来很大的方便。 + diff --git "a/content/zh/docs/Administration/\351\205\215\347\275\256\347\275\221\347\273\234.md" "b/docs/zh/docs/Administration/\351\205\215\347\275\256\347\275\221\347\273\234.md" similarity index 96% rename from "content/zh/docs/Administration/\351\205\215\347\275\256\347\275\221\347\273\234.md" rename to "docs/zh/docs/Administration/\351\205\215\347\275\256\347\275\221\347\273\234.md" index 9da7a61e63c1da6388f52e3dd4a2c1bd40172e65..0e1bd9dcefbd2cadbc5bc09872fee01a9d8da183 100644 --- "a/content/zh/docs/Administration/\351\205\215\347\275\256\347\275\221\347\273\234.md" +++ "b/docs/zh/docs/Administration/\351\205\215\347\275\256\347\275\221\347\273\234.md" @@ -1,1333 +1,1366 @@ -# 配置网络 - - -- [配置网络](#配置网络) - - [配置 IP](#配置-ip) - - [使用nmcli命令](#使用nmcli命令) - - [使用ip命令](#使用ip命令) - - [通过ifcfg文件配置网络](#通过ifcfg文件配置网络) - - [配置主机名](#配置主机名) - - [简介](#简介) - - [使用hostnamectl配置主机名](#使用hostnamectl配置主机名) - - [使用nmcli配置主机名](#使用nmcli配置主机名) - - [配置网络绑定](#配置网络绑定) - - [使用nmcli](#使用nmcli) - - [使用命令行](#使用命令行) - - [IPv6使用差异说明(vs IPv4)](#ipv6使用差异说明vs-ipv4) - - [约束限制](#约束限制) - - [配置说明](#配置说明) - - [FAQ](#faq) - - - - -## 配置 IP - - -### 使用nmcli命令 - ->![](public_sys-resources/icon-note.gif) **说明:** ->使用nmcli命令配置的网络配置可以立即生效且系统重启后配置也不会丢失。 - - - -#### nmcli介绍 - -nmcli是NetworkManager的一个命令行工具,它提供了使用命令行配置由NetworkManager管理网络连接的方法。nmcli命令的基本格式为: - -``` - nmcli [OPTIONS] OBJECT { COMMAND | help } -``` - -其中,OBJECT选项可以是general、networking、radio、connection或device等。在日常使用中,最常使用的是-t, \-\-terse(用于脚本)、-p, \-\-pretty选项(用于用户)及-h, \-\-help选项,用户可以使用“ nmcli help”获取更多参数及使用信息。 - -``` -$ nmcli help -``` - -常用命令使用举例如下: - -- 显示NetworkManager状态: - - ``` - $ nmcli general status - ``` - -- 显示所有连接: - - ``` - $ nmcli connection show - ``` - -- 只显示当前活动连接,如下所示添加 -a, \-\-active: - - ``` - $ nmcli connection show --active - ``` - -- 显示由NetworkManager识别到设备及其状态: - - ``` - $ nmcli device status - ``` - -- 使用nmcli工具启动和停止网络接口,在root权限下执行如下命令: - - ``` - # nmcli connection up id enp3s0 - # nmcli device disconnect enp3s0 - ``` - - -#### 设置网络连接 - -列出目前可用的网络连接: - -``` -$ nmcli con show - - -NAME UUID TYPE DEVICE -enp4s0 5afce939-400e-42fd-91ee-55ff5b65deab ethernet enp4s0 -enp3s0 c88d7b69-f529-35ca-81ab-aa729ac542fd ethernet enp3s0 -virbr0 ba552da6-f014-49e3-91fa-ec9c388864fa bridge virbr0 -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->输出结果中的NAME字段代表连接ID(名称)。 - -添加一个网络连接会生成相应的配置文件,并与相应的设备关联。检查可用的设备,方法如下: - -``` -$ nmcli dev status - -DEVICE TYPE STATE CONNECTION -enp3s0 ethernet connected enp3s0 -enp4s0 ethernet connected enp4s0 -virbr0 bridge connected virbr0 -lo loopback unmanaged -- -virbr0-nic tun unmanaged -- -``` - - -##### 配置动态IP连接 - -###### 配置IP - -要使用 DHCP 分配网络时,可以使用动态IP配置添加网络配置文件,命令格式如下: - -``` -nmcli connection add type ethernet con-name connection-name ifname interface-name -``` - -例如创建名为net-test的动态连接配置文件,在root权限下使用以下命令: - -``` -# nmcli connection add type ethernet con-name net-test ifname enp3s0 -Connection 'net-test' (a771baa0-5064-4296-ac40-5dc8973967ab) successfully added. -``` - -NetworkManager 会将参数 connection.autoconnect 设定为 yes,并将设置保存到 “/etc/sysconfig/network-scripts/ifcfg-net-test”文件中,在该文件中会将 ONBOOT 设置为 yes。 - -###### 激活连接并检查状态 - -在root权限下使用以下命令激活网络连接: - -``` -# nmcli con up net-test -Connection successfully activated (D-Bus active path:/org/freedesktop/NetworkManager/ActiveConnection/5) -``` - -检查这些设备及连接的状态,使用以下命令: - -``` -$ nmcli device status - -DEVICE TYPE STATE CONNECTION -enp4s0 ethernet connected enp4s0 -enp3s0 ethernet connected net-test -virbr0 bridge connected virbr0 -lo loopback unmanaged -- -virbr0-nic tun unmanaged -- -``` - -##### 配置静态IP连接 - -###### 配置IP - -添加静态 IPv4 配置的网络连接,可使用以下命令: - -``` -nmcli connection add type ethernet con-name connection-name ifname interface-name ip4 address gw4 address -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->如果要添加 IPv6 地址和网关信息,使用 ip6 和 gw6 选项。 - -例如创建名为 net-static的静态连接配置文件,在root权限下使用以下命令: - -``` -# nmcli con add type ethernet con-name net-static ifname enp3s0 ip4 192.168.0.10/24 gw4 192.168.0.254 -``` - -还可为该设备同时指定 IPv6 地址和网关,示例如下: - -``` -# nmcli con add type ethernet con-name test-lab ifname enp3s0 ip4 192.168.0.10/24 gw4 192.168.0.254 ip6 abbe::**** gw6 2001:***::* -Connection 'net-static' (63aa2036-8665-f54d-9a92-c3035bad03f7) successfully added. -``` - -NetworkManager 会将其内部参数 ipv4.method 设定为 manual,将 connection.autoconnect 设定为yes,并将设置写入 /etc/sysconfig/network-scripts/ifcfg-my-office 文件,其中会将对应 BOOTPROTO 设定为 none,将 ONBOOT 设定为 yes。 - -设定两个 IPv4 DNS 服务器地址,在root权限下使用以下命令: - -``` -# nmcli con mod net-static ipv4.dns "*.*.*.* *.*.*.*" -``` - -设置两个 IPv6 DNS 服务器地址,在root权限下使用以下命令: - -``` -# nmcli con mod net-static ipv6.dns "2001:4860:4860::**** 2001:4860:4860::****" -``` - -###### 激活连接并检查状态 - -激活新的网络连接,在root权限下使用以下命令: - -``` -# nmcli con up net-static ifname enp3s0 -Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6) -``` - -检查这些设备及连接的状态,使用以下命令: - -``` -$ nmcli device status - -DEVICE TYPE STATE CONNECTION -enp4s0 ethernet connected enp4s0 -enp3s0 ethernet connected net-static -virbr0 bridge connected virbr0 -lo loopback unmanaged -- -virbr0-nic tun unmanaged -- -``` - -查看配置的连接详情,使用以下命令(使用 -p, \-\-pretty 选项在输出结果中添加标题和分段): - -``` -$ nmcli -p con show net-static -=============================================================================== -Connection profile details (net-static ) -=============================================================================== -connection.id: net-static -connection.uuid: b9f18801-6084-4aee-af28-c8f0598ff5e1 -connection.stable-id: -- -connection.type: 802-3-ethernet -connection.interface-name: enp3s0 -connection.autoconnect: yes -connection.autoconnect-priority: 0 -connection.autoconnect-retries: -1 (default) -connection.multi-connect: 0 (default) -connection.auth-retries: -1 -connection.timestamp: 1578988781 -connection.read-only: no -connection.permissions: -- -connection.zone: -- -connection.master: -- -connection.slave-type: -- -connection.autoconnect-slaves: -1 (default) -connection.secondaries: -- -connection.gateway-ping-timeout: 0 -connection.metered: unknown -connection.lldp: default -connection.mdns: -1 (default) -connection.llmnr: -1 (default) -``` - -##### 添加 Wi-Fi 连接 - -使用以下命令查看可用 Wi-Fi 访问点: - -``` -$ nmcli dev wifi list -``` - -使用以下命令生成使用的静态 IP 配置,但允许自动 DNS 地址分配的 Wi-Fi 连接: - -``` -$ nmcli con add con-name Wifi ifname wlan0 type wifi ssid MyWifi ip4 192.168.100.101/24 gw4 192.168.100.1 -``` - -请使用以下命令设定 WPA2 密码,例如 “answer”: - -``` -$ nmcli con modify Wifi wifi-sec.key-mgmt wpa-psk -$ nmcli con modify Wifi wifi-sec.psk answer -``` - -使用以下命令更改 Wi-Fi 状态: - -``` -$ nmcli radio wifi [ on | off ] -``` - -##### 更改属性 - -请使用以下命令检查具体属性,比如 mtu: - -``` -$ nmcli connection show id 'Wifi ' | grep mtu -802-11-wireless.mtu: auto -``` - -使用如下命令更改设置的属性: - -``` -$ nmcli connection modify id 'Wifi ' 802-11-wireless.mtu 1350 -``` - -使用如下命令确认更改: - -``` -$ nmcli connection show id 'Wifi ' | grep mtu -802-11-wireless.mtu: 1350 -``` - -#### 配置静态路由 - -- 使用nmcli命令为网络连接配置静态路由,使用命令如下: - - ``` - $ nmcli connection modify enp3s0 +ipv4.routes "192.168.122.0/24 10.10.10.1" - ``` - - -- 使用编辑器配置静态路由,使用如下命令: - - ``` - $ nmcli con edit type ethernet con-name enp3s0 - ===| nmcli interactive connection editor |=== - Adding a new '802-3-ethernet' connection - Type 'help' or '?' for available commands. - Type 'describe [.]' for detailed property description. - You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, ipv4, ipv6, dcb - nmcli> set ipv4.routes 192.168.122.0/24 10.10.10.1 - nmcli> - nmcli> save persistent - Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection. - Do you still want to save? [yes] yes - Connection 'enp3s0' (1464ddb4-102a-4e79-874a-0a42e15cc3c0) successfully saved. - nmcli> quit - ``` - - -### 使用ip命令 - ->![](public_sys-resources/icon-note.gif) **说明:** ->使用ip命令配置的网络配置可以立即生效但系统重启后配置会丢失。 - - - -#### 配置IP地址 - -使用ip命令为接口配置地址,命令格式如下,其中 _interface-name_ 为网卡名称。 - -``` -ip addr [ add | del ] address dev interface-name -``` - -##### 配置静态地址 -在root权限下,配置设置IP地址,使用示例如下: - -``` -# ip address add 192.168.0.10/24 dev enp3s0 -``` - -查看配置结果,在root权限使用如下命令: - -``` -# ip addr show dev enp3s0 -2: enp3s0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 - link/ether 52:54:00:aa:ad:4a brd ff:ff:ff:ff:ff:ff - inet 192.168.202.248/16 brd 192.168.255.255 scope global dynamic noprefixroute enp3s0 - valid_lft 9547sec preferred_lft 9547sec - inet 192.168.0.10/24 scope global enp3s0 - valid_lft forever preferred_lft forever - inet6 fe80::32e8:cc22:9db2:f4d4/64 scope link noprefixroute - valid_lft forever preferred_lft forever -``` - -##### 配置多个地址 -ip 命令支持为同一接口分配多个地址,可在root权限下重复多次使用 ip 命令实现分配多个地址。使用示例如下: - -``` -# ip address add 192.168.2.223/24 dev enp4s0 -# ip address add 192.168.4.223/24 dev enp4s0 -# ip addr - -3: enp4s0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 - link/ether 52:54:00:aa:da:e2 brd ff:ff:ff:ff:ff:ff - inet 192.168.203.12/16 brd 192.168.255.255 scope global dynamic noprefixroute enp4s0 - valid_lft 8389sec preferred_lft 8389sec - inet 192.168.2.223/24 scope global enp4s0 - valid_lft forever preferred_lft forever - inet 192.168.4.223/24 scope global enp4s0 - valid_lft forever preferred_lft forever - inet6 fe80::1eef:5e24:4b67:f07f/64 scope link noprefixroute - valid_lft forever preferred_lft forever -``` - -#### 配置静态路由 - -如果需要静态路由,可使用 ip route add 命令在路由表中添加,使用 ip route del 命令删除。最常使用的 ip route 命令格式如下: - -``` -ip route [ add | del | change | append | replace ] destination-address -``` - -在root权限下使用 ip route 命令显示当前的 IP 路由表。示例如下: - -``` -# ip route - -default via 192.168.0.1 dev enp3s0 proto dhcp metric 100 -default via 192.168.0.1 dev enp4s0 proto dhcp metric 101 -192.168.0.0/16 dev enp3s0 proto kernel scope link src 192.168.202.248 metric 100 -192.168.0.0/16 dev enp4s0 proto kernel scope link src 192.168.203.12 metric 101 -192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown -``` - -在主机地址中添加一个静态路由,在 root 权限下,使用以下命令格式: - -``` -ip route add 192.168.2.1 via 10.0.0.1 [dev interface-name] -``` - -其中 192.168.2.1 是用点分隔的十进制符号中的 IP 地址,10.0.0.1 是下一个跃点,_interface-name_ 是进入下一个跃点的退出接口。 - -要在网络中添加一个静态路由,即代表 IP 地址范围的 IP 地址,请在root权限下运行以下命令格式: - -``` -ip route add 192.168.2.0/24 via 10.0.0.1 [dev interface-name] -``` - -其中 192.168.2.1 是目标网络的 IP 地址,10.0.0.1 是网络前缀,_interface-name_ 为网卡名称。 - -### 通过ifcfg文件配置网络 - ->![](public_sys-resources/icon-note.gif) **说明:** ->通过ifcfg文件配置的网络配置不会立即生效,需要在root权限下执行**systemctl reload NetworkManager**命令以重启网络服务后才生效。 - -#### 配置静态网络 - -以enp4s0网络接口进行静态网络设置为例,通过在root权限下修改ifcfg文件实现,在/etc/sysconfig/network-scripts/目录中生成名为ifcfg-enp4s0的文件中,修改参数配置,示例如下: - -``` -TYPE=Ethernet -PROXY_METHOD=none -BROWSER_ONLY=no -BOOTPROTO=none -IPADDR=192.168.0.10 -PREFIX=24 -DEFROUTE=yes -IPV4_FAILURE_FATAL=no -IPV6INIT=yes -IPV6_AUTOCONF=yes -IPV6_DEFROUTE=yes -IPV6_FAILURE_FATAL=no -IPV6_ADDR_GEN_MODE=stable-privacy -NAME=enp4s0static -UUID=08c3a30e-c5e2-4d7b-831f-26c3cdc29293 -DEVICE=enp4s0 -ONBOOT=yes -``` - -#### 配置动态网络 - -要通过ifcfg文件为em1接口配置动态网络,请按照如下操作在/etc/sysconfig/network-scripts/目录中生成名为 ifcfg-em1 的文件,示例如下: - -``` -DEVICE=em1 -BOOTPROTO=dhcp -ONBOOT=yes -``` - -要配置一个向DHCP服务器发送不同的主机名的接口,请在ifcfg文件中新增一行内容,如下所示: - -``` -DHCP_HOSTNAME=hostname -``` - -要配置忽略由DHCP服务器发送的路由,防止网络服务使用从DHCP服务器接收的DNS服务器更新/etc/resolv.conf。请在ifcfg文件中新增一行内容,如下所示: - -``` -PEERDNS=no -``` - -要配置一个接口使用具体DNS服务器,请将参数PEERDNS=no,并在ifcfg文件中添加以下行: - -``` -DNS1=ip-address -DNS2=ip-address -``` - -其中ip-address是DNS服务器的地址。这样就会让网络服务使用指定的DNS服务器更新/etc/resolv.conf。 - -#### 配置默认网关 - -在确定默认网关时,首先解析 /etc/sysconfig/network 文件,然后解析 ifcfg 文件 ,将最后读取的 GATEWAY 的取值作为路由表中的默认路由。 - -在动态网络环境中,使用 NetworkManager 管理主机时,建议设置为由 DHCP 来分配。 - -## 配置主机名 - - -### 简介 - -hostname有三种类型:static、transient和pretty。 - -- static:静态主机名,可由用户自行设置,并保存在/etc/hostname 文件中。 -- transient:动态主机名,由内核维护,初始是 static 主机名,默认值为“localhost”。可由DHCP或mDNS在运行时更改。 -- pretty:灵活主机名,允许使用自由形式(包括特殊/空白字符)进行设置。静态/动态主机名遵从域名的通用限制。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->static和transient主机名只能包含a-z、A-Z、0-9、“-”、“\_”和“.”,不能在开头或结尾处使用句点,不允许使用两个相连的句点,大小限制为 64 个字符。 - -### 使用hostnamectl配置主机名 - -#### 查看所有主机名 -查看当前的主机名,使用如下命令: - -``` -$ hostnamectl status -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->如果命令未指定任何选项,则默认使用status选项。 - -#### 设定所有主机名 -在root权限下,设定系统中的所有主机名,使用如下命令: - -``` -# hostnamectl set-hostname name -``` - -#### 设定特定主机名 -在root权限下,通过不同的参数来设定特定主机名,使用如下命令: - -``` -# hostnamectl set-hostname name [option...] -``` - -其中option可以是\-\-pretty、\-\-static、\-\-transient中的一个或多个选项。 - -如果\-\-static或\-\-transient与\-\-pretty选项一同使用时,则会将static和transient主机名简化为pretty主机名格式,使用“-”替换空格,并删除特殊字符。 - -当设定pretty主机名时,如果主机名中包含空格或单引号,需要使用引号。命令示例如下: - -``` -# hostnamectl set-hostname "Stephen's notebook" --pretty -``` - -#### 清除特定主机名 -要清除特定主机名,并将其还原为默认形式,在root权限下,使用如下命令: - -``` -# hostnamectl set-hostname "" [option...] -``` - -其中 "" 是空白字符串,option是\-\-pretty、\-\-static和\-\-transient中的一个或多个选项。 - -#### 远程更改主机名 -在远程系统中运行hostnamectl命令时,要使用-H,\-\-host 选项,在root权限下使用如下命令: - -``` -# hostnamectl set-hostname -H [username]@hostname new_hostname -``` - -其中hostname是要配置的远程主机,username为自选项,new\_hostname为新主机名。hostnamectl会通过SSH连接到远程系统。 - -### 使用nmcli配置主机名 - -查询static主机名,使用如下命令: - -``` -$ nmcli general hostname -``` - -在root权限下,将static主机名设定为host-server,使用如下命令: - -``` -# nmcli general hostname host-server -``` - -要让系统hostnamectl感知到static主机名的更改,在root权限下,重启hostnamed服务,使用如下命令: - -``` -# systemctl restart systemd-hostnamed -``` - -## 配置网络绑定 - - -### 使用nmcli - -- 创建名为mybond0的绑定,使用示例如下: - - ``` - $ nmcli con add type bond con-name mybond0 ifname mybond0 mode active-backup - ``` - -- 添加从属接口,使用示例如下: - - ``` - $ nmcli con add type bond-slave ifname enp3s0 master mybond0 - ``` - - 要添加其他从属接口,重复上一个命令,并在命令中使用新的接口,使用示例如下: - - ``` - $ nmcli con add type bond-slave ifname enp4s0 master mybond0 - Connection 'bond-slave-enp4s0' (05e56afc-b953-41a9-b3f9-0791eb49f7d3) successfully added. - ``` - -- 要启动绑定,则必须首先启动从属接口,使用示例如下: - - ``` - $ nmcli con up bond-slave-enp3s0 - Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/14) - ``` - - ``` - $ nmcli con up bond-slave-enp4s0 - Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/15) - ``` - - 现在可以启动绑定,使用示例如下: - - ``` - $ nmcli con up mybond0 - Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/16) - ``` - - -### 使用命令行 - - - -#### 检查是否已安装Bonding内核模块 - -在系统中默认已加载相应模块。要载入绑定模块,可在root权限下使用如下命令: - -``` -# modprobe --first-time bonding -``` - -显示该模块的信息,可在root权限下使用如下命令: - -``` -# modinfo bonding -``` - -更多命令请在root权限下使用modprobe \-\-help查看。 - -#### 创建频道绑定接口 - -要创建绑定接口,可在root权限下通过在 /etc/sysconfig/network-scripts/ 目录中创建名为 ifcfg-bondN 的文件(使用接口号码替换 N,比如 0)。 - -根据要绑定接口类型的配置文件来编写相应的内容,比如网络接口。接口配置文件示例如下: - -``` -DEVICE=bond0 -NAME=bond0 -TYPE=Bond -BONDING_MASTER=yes -IPADDR=192.168.1.1 -PREFIX=24 -ONBOOT=yes -BOOTPROTO=none -BONDING_OPTS="bonding parameters separated by spaces" -``` - -#### 创建从属接口 - -创建频道绑定接口后,必须在从属接口的配置文件中添加 MASTER 和 SLAVE 指令。 - -例如将两个网络接口enp3s0 和 enp4s0 以频道方式绑定,其配置文件示例分别如下: - -``` -TYPE=Ethernet -NAME=bond-slave-enp3s0 -UUID=3b7601d1-b373-4fdf-a996-9d267d1cac40 -DEVICE=enp3s0 -ONBOOT=yes -MASTER=bond0 -SLAVE=yes -``` - -``` -TYPE=Ethernet -NAME=bond-slave-enp4s0 -UUID=00f0482c-824f-478f-9479-abf947f01c4a -DEVICE=enp4s0 -ONBOOT=yes -MASTER=bond0 -SLAVE=yes -``` - -#### 激活频道绑定 - -要激活绑定,则需要启动所有从属接口。请在root权限下,运行以下命令: - -``` -# ifup enp3s0 -Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7) -``` - -``` -# ifup enp4s0 -Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8) -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->对于已经处于“up”状态的接口,请首先使用“ifdown _enp3s0_ ”命令修改状态为down,其中 _enp3s0_ 为实际网卡名称。 - -完成后,启动所有从属接口以便启动绑定(不将其设定为 “down”)。 - -要让 NetworkManager 感知到系统所做的修改,在每次修改后,请在root权限下,运行以下命令: - -``` -# nmcli con load /etc/sysconfig/network-scripts/ifcfg-device -``` - -查看绑定接口的状态,请在root权限下运行以下命令: - -``` -# ip link show - -1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 - link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 -2: enp3s0: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 - link/ether 52:54:00:aa:ad:4a brd ff:ff:ff:ff:ff:ff -3: enp4s0: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 - link/ether 52:54:00:aa:da:e2 brd ff:ff:ff:ff:ff:ff -4: virbr0: mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000 - link/ether 86:a1:10:fb:ef:07 brd ff:ff:ff:ff:ff:ff -5: virbr0-nic: mtu 1500 qdisc fq_codel master virbr0 state DOWN mode DEFAULT group default qlen 1000 - link/ether 52:54:00:29:35:4c brd ff:ff:ff:ff:ff:ff -``` - -#### 创建多个绑定 - -系统会为每个绑定创建一个频道绑定接口,包括 BONDING\_OPTS 指令。使用这个配置方法可让多个绑定设备使用不同的配置。请按照以下操作创建多个频道绑定接口: - -- 创建多个 ifcfg-bondN 文件,文件中包含 BONDING\_OPTS 指令,让网络脚本根据需要创建绑定接口。 -- 创建或编辑要绑定的现有接口配置文件,添加 SLAVE 指令。 -- 使用 MASTER 指令工具在频道绑定接口中分配要绑定的接口,即从属接口。 - -以下是频道绑定接口配置文件示例: - -``` -DEVICE=bondN -NAME=bondN -TYPE=Bond -BONDING_MASTER=yes -IPADDR=192.168.1.1 -PREFIX=24 -ONBOOT=yes -BOOTPROTO=none -BONDING_OPTS="bonding parameters separated by spaces" -``` - -在这个示例中,使用绑定接口的号码替换 N。例如要创建两个接口,则需要使用正确的 IP 地址创建两个配置文件 ifcfg-bond0 和 ifcfg-bond1。 - -## IPv6使用差异说明(vs IPv4) - - - -### 约束限制 - -- chrony支持全局地址(global address),不支持链路本地地址(link-local address)。 -- Firefox支持通过http/https协议访问全局地址(global address),不支持链路本地地址(link-local address)。 - -### 配置说明 -#### 设置接口设备MTU值 - -##### 概述 - -IPv6场景中会发现整个路由路径中的最小mtu的值作为当前链接的PMTU的值,源端根据PMTU的值确定是否进行分片发送,而在整个路径中的其它设备将不再需要进行分片处理,从而可以降低中间路由设备的负载大小。其中IPv6 PMTU设置的最小值为1280。 - -##### 设置接口设备的mtu - -如果在配置了IPv6地址的接口上设置mtu的值小于1280(IPv6 PMTU设置的最小值),则会导致该接口的IPv6地址被删除。并且无法再次添加IPv6地址。所以在IPv6场景中,对接口设备的mtu的配置一定要大于等于1280。 -请在root权限下运行如下命令查看具体现象: - -``` -# ip addr show enp3s0 -3: enp3s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 - link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx - inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 - valid_lft 38663sec preferred_lft 38663sec - inet6 2001:222::2/64 scope global - valid_lft forever preferred_lft forever -``` - -``` -# ip link set dev enp3s0 mtu 1200 -# ip addr show enp3s0 -3: enp3s0: mtu 1200 qdisc pfifo_fast state UP group default qlen 1000 - link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx - inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 - valid_lft 38642sec preferred_lft 38642sec -``` - -``` -# ip addr add 2001:222::2/64 dev enp3s0 -RTNETLINK answers: No buffer space available -``` - -``` -# ip link set dev enp3s0 mtu 1500 -# ip addr show enp3s0 -3: enp3s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 - link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx - inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 - valid_lft 38538sec preferred_lft 38538sec -``` - -``` -# ip addr add 2001:222::2/64 dev enp3s0 -# ip addr show enp3s0 -3: enp3s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 - link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx - inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 - valid_lft 38531sec preferred_lft 38531sec - inet6 2001:222::2/64 scope global - valid_lft forever preferred_lft forever -``` - -#### 有状态自动配置IPv6地址 - -##### 概述 - -IPv6与IPv4都可以在root权限下通过DHCP的方式获得IP地址。IPv6地址有两种配置方式:无状态自动配置和有状态自动配置。 - -- 无状态自动配置 - - 不需要DHCP服务进行管理,设备根据网络RA(路由公告)获得网络前缀,或者link-local地址为固定fe80::。而接口ID则根据ifcfg配置IPV6\_ADDR\_GEN\_MODE的具体设置来进行自动获得: - - 1. IPv6\_ADDR\_GEN\_MODE="stable-privacy" 则根据设备及网络环境来确定一个随机接口ID。 - 2. IPv6\_ADDR\_GEN\_MODE="EUI64" 则根据设备MAC地址来确定接口ID。 - -- 有状态自动配置:需要DHCP服务器进行管理分配,服从DHCPv6协议来从DHCPv6服务器端租赁IPv6地址。 - - 在有状态自动配置IPv6地址时,DHCPv6服务端可以通过客户端设置的vendor class将客户端进行分类,不同类别分配不同地址段的IPv6地址。在IPv4场景中,客户端可以直接用dhclient的-V选项来设置vendor-class-identifier,DHCP服务端在配置文件中根据vendor-class-identifier来对客户端进行分类处理。而IPv6场景中,如果使用同样的方法对客户端分类,则分类并不会生效。 - - ``` - dhclient -6 -V - ``` - - 这是由于DHCPv6和DHCP协议存在较大差异,DHCPv6的可选项中使用vendor-class-option替代了DHCP中的vendor-class-identifier。而dhclient的-V选项并不能设置vendor-class-option。 - - -##### 有状态自动配置IPv6地址时dhclient设置vendor class方法 - -- 在客户端使用配置文件方式添加对vendor class的设置,使用方法如下: - - 客户端配置文件(/etc/dhcp/dhclient6.conf),文件位置可以自定义,在使用时需要通过dhclient -cf选项来指定配置文件: - - ``` - option dhcp6.vendor-class code 16 = {integer 32, integer 16, string}; - interface "enp3s0" { - send dhcp6.vendor-class ; - } - ``` - - >![](public_sys-resources/icon-note.gif) **说明:** - >- \,32位整型数字,企业标识号,企业通过IANA注册。 - >- \,16位整型数字,vendor class字符串长度。 - >- \,要设置的vendor class字符串,例如:“HWHW”。 - - 客户端使用方法: - - ``` - dhclient -6 -cf /etc/dhcp/dhclient6.conf - ``` - - -- DHCPv6服务端配置文件(/etc/dhcp/dhcpd6.conf),需要dhcpd -cf选项来指定该配置文件: - - ``` - option dhcp6.vendor-class code 16 = {integer 32, integer 16, string}; - subnet6 fc00:4:12:ffff::/64 { - class "hw" { - match if substring ( option dhcp6.vendor-class, 6, 10 ) = "HWHW"; - } - pool6 { - allow members of "hw"; - range6 fc00:4:12:ffff::ff10 fc00:4:12:ffff::ff20; - } - pool6 { - allow unknown clients; - range6 fc00:4:12:ffff::100 fc00:4:12:ffff::120; - } - } - ``` - - >![](public_sys-resources/icon-note.gif) **说明:** - >substring \( option dhcp6.vendor-class, 6, 10 \) 其中子字符串的开始位置为6,因为前面包含4个字节的和2个字节的。而子字符串的结束位置位:6+。这里vendor class string为“HWHW”,字符串的长度为4,所以子字符串的结束位置为6+4=10。用户可以根据实际需要来确定及相应的。 - - 服务端使用方法: - - ``` - dhcpd -6 -cf /etc/dhcp/dhcpd6.conf - ``` - - -#### 内核支持socket相关系统调用 - -##### 概述 - -IPv6地址长度扩展到128比特,所以有足够的IPv6地址可供分配使用。同时IPv6头相比IPv4头进行了简化,并增强了IPv6的自动配置功能。IPv6地址分为单播地址,组播地址和任意播地址。常用的单播地址又包含:链路本地地址(link-local address),唯一本地地址(Unique local address)和全局地址(global address)。由于IPv6的全局地址十分充足,唯一本地地址一般不被使用(其前身为站点本地地址(site-local address),已于2004年被废弃)。当前主要使用的单播地址为:链路本地地址(link-local address)和全局地址(global address)。当前内核支持socket系统调用,在使用单播地址的链路本地地址和全局地址时存在差异。 - -##### link-local地址和global地址在socket调用时的差异 - -RFC 2553: Basic Socket Interface Extensions for IPv6 定义sockaddr\_in6的数据结构如下; - -``` -struct sockaddr_in6 { - uint8_t sin6_len; /* length of this struct */ - sa_family_t sin6_family; /* AF_INET6 */ - in_port_t sin6_port; /* transport layer port # */ - uint32_t sin6_flowinfo; /* IPv6 flow information */ - struct in6_addr sin6_addr; /* IPv6 address */ - uint32_t sin6_scope_id; /* set of interfaces for a scope */ -}; -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->sin6\_scope\_id: 32位整型,对于链路本地地址(link-local address),对于链路范围的sin6\_addr,它可以用来标识指定的接口索引号。如果是站点范围的sin6\_addr,则用来作为站点的标识符(站点本地地址已被抛弃)。 - -在使用link-local地址进行socket通信时,在构造目的地址时,需要制定该地址所对应的接口索引号。一般可以通过if\_nametoindex函数将接口名转化为接口索引号。具体方式如下, - -``` -int port = 1234; -int sk_fd; -int iff_index = 0; -char iff_name[100] = "enp3s0"; -char * ll_addr[100] = "fe80::123:456:789"; -struct sockaddr_in6 server_addr; - -memset(&server_addr,0,sizeof(structsockaddr_in6)); -iff_index=if_nametoindex(iff_name); - -server_addr.sin6_family=AF_INET6; -server_addr.sin6_port=htons(port); -server_addr.sin6_scope_id=iff_index; -inet_pton(AF_INET6, ll_addr, &(server_addr.sin6_addr)); - -sk_fd=socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP); -connect(sk_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in6)); -``` - -#### IPv4的dhclient守护进程持久化配置 - -##### 概述 - -通过NetworkManager服务来管理网络服务时,如果接口ifcfg-配置文件中配置了DHCP方式获得IP地址,则相应地NetworkManager服务会拉起dhclient守护进程来通过DHCP协议方式来从DHCP服务器获取IP地址。 - -dhclient提供了"-1"选项来决定dhclient进程在未获得DHCP服务响应时,是会不断持久化尝试请求地址还是会尝试时间超时后退出。针对IPv4的dhclient守护进程,可以在ifcfg-配置文件中设置PERSISTENT\_DHCLIENT来决定是否设置IPv4的dhclient进程的持久化。 - -##### 约束限制 - -1. 当dhclient进程在运行中被杀死,network服务无法自动将其拉起,可靠性需要用户自己保障。 -2. 配置了持久化选项PERSISTENT\_DHCLIENT,需要确保有相应的DHCP服务器。如果在拉起network时无可用DHCP服务器,dhclient进程不断尝试发送请求包但无回应,则会导致network服务卡死直到network服务超时失败。由于network服务在拉起多个网卡的IPv4 dhclient进程时,是通过串行的方式来拉起的。如果有网卡配置了持久化而DHCP服务器没有准备好,则会导致network服务在给该网卡获取IPv4地址超时卡死,进而导致后续网卡无法获得IPv4/IPv6地址。 - -以上两种约束限制是特殊的应用场景,需要用户自己进行可靠性保障。 - -##### IPv4 DHCP和IPv6 DHCPv6方式获取地址的配置差异 - -可以通过配置接口ifcfg-参数来分别实现IPv4和IPv6通过DHCP/DHCPv6协议来动态获取IP地址,具体配置说明如下; - -``` -BOOTPROTO=none|bootp|dhcp -DHCPV6C=yes|no -PERSISTENT_DHCLIENT=yes|no|1|0 -``` - -- BOOTPROTO: none表示静态配置IPv4地址,bootp|dhcp则会拉起DHCP dhclient来动态获取IPv4地址。 -- DHCPV6C: no表示静态配置IPv6地址,yes则会拉起DHCPv6 dhclient来动态获取IPv6地址。 -- PERSISTENT\_DHCLIENT:no|0表示IPv4的dhclient进程配置为“非持久化”,当dhclient向DHCP服务器发送一次请求报文而无响应,则会间隔一段时间后退出,退出值为2。yes|1则表示IPv4的dhclient进程配置为“持久化”,dhclient会向DHCP服务器反复发送请求报文。**如果没有配置PERSISTENT\_DHCLIENT项,则IPv4的dhclient会默认设置为“持久化”**。 - - >![](public_sys-resources/icon-note.gif) **说明:** - >PERSISTENT\_DHCLIENT配置只针对IPv4生效,对IPv6相关dhclient -6进程不生效,IPv6默认不进行持久化配置。 - - -#### iproute相关命令配置IPv4与IPv6时的差异说明 - -##### 概述 - -由于IPv4和IPv6是两个不同的协议标准,iproute相关命令在使用方法上存在一定的差异。本章节主要梳理iproute包中用户经常使用到命令在IPv4和IPv6使用方面的差异,从而可以更好地指导用户使用iproute包中相关命令。 - -iproute相关命令均需要在root权限下运行。 - -##### IPv6地址的生命周期 - - - - - - - - - - - - - - - - - - - -

IPv6状态

-

解释

-

tentative

-

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

-

preferred

-

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

-

deprecated

-

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

-

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

-

invalid

-

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

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

IPv4

-

IPv6

-

含义说明

-

NA

-

IPV6FORWARDING=yes|no

-

IPv6转发,默认不转发。

-

NA

-

IPV6_AUTOCONF=yes|no

-

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

-

NA

-

IPV6_ROUTER=yes|no

-

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

-

NA

-

IPV6_AUTOTUNNEL=yes|no

-

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

-

GATEWAY

-

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

-

在IPv6中设置默认网关。

-

NA

-

IPV6_DEFAULTDEV=<interface> (optional)

-

指定默认转发的网卡。

-

NA

-

IPV6_RADVD_PIDFILE=<pid-file> (optional)

-

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

-

NA

-

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

-

radvd默认触发动作。

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

IPv4

-

IPv6

-

含义说明

-

IPADDRn

-

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

-

ip地址。

-

PREFIXn

-

NA

-

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

-

NETMASKn

-

NA

-

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

-

GATEWAY

-

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

-

默认网关。

-

MTU

-

IPV6_MTU=<MTU of link> (optional)

-

默认MTU。

-

IPV4_FAILURE_FATAL=yes|no

-

IPV6_FAILURE_FATAL

-

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

-

NA

-

IPV6_PRIVACY=rfc3041

-

默认禁用。

-

NA

-

IPV6INIT=yes|no

-

默认开启IPv6。

-

NA

-

IPV6FORWARDING=yes|no

-

默认关闭,已废弃。

-
- -### FAQ -#### iscsi-initiator-utils不支持登录fe80 IPv6地址 - -##### 问题现象 - -客户端通过IPv6登录iscsi服务端时,使用如“iscsiadm -m node -p ipv6address -l”的命令格式登录,如果是全局地址(global address),直接替换将命令范例中的“ipv6address”替换为全局地址即可;但如果是链路本地地址(link-local address,fe80开头的IPv6地址)则无法使用,因为iscsi-initiator-utils目前机制还不支持用链路本地地址(link-local address)地址登录iscsi服务端。 - -##### 原因分析 - -如果使用格式如“iscsiadm -m node -p fe80::xxxx -l”登录,会登录超时返回,这是因为使用链路本地地址必须指定接口,否则使用iscsi\_io\_tcp\_connect函数调用connect函数会失败,并且产生标准错误码22。 - -如果使用格式如“iscsiadm -m node -p fe80::xxxx%enp3s0 -l”登录时,iscsi\_addr\_match函数会将地址“fe80::xxxx%enp3s0”与服务端返回的node信息中的地址“fe80::xxxx”对比,对比结果不匹配,导致登录失败。 - -因此,**iscsi-initiator-utils目前机制还不支持用链路本地地址(link-local address)登录iscsi服务端**。 - -#### 网卡down掉之后,IPv6地址丢失 - -##### 问题现象 - -通过ip link down+up网卡或ifconfig down+up网卡命令,将网卡down掉之后再上线,查看网卡上配置的ip地址,发现ipv4地址不丢失,而配置的IPv6地址丢失。 - -##### 原因分析 - -内核中的处理逻辑为如果网卡设置为down状态,会清空所有IPv4及IPv6地址,将网卡重新up之后,ipv4地址自动恢复,网卡上自动配置的IPv6链路本地地址也会恢复,但是其他IPv6地址默认会丢失。如果需要保留这些IPv6地址,可以通过“sysctl -w net.ipv6.conf.<网卡名\>.keep\_addr\_on\_down=1”来实现。 - -#### bond口已具有多个IPv6地址时,添加或删除IPv6地址耗时过久 - -##### 问题现象 - -下列方式配置或删除(包括flush)IPv6地址方式,X为动态变化的低16位,并且配置在bond口时,耗时会随已配置的IPv6地址数量成数倍增加。例如由4个物理网卡组成的bond口添加IPv6地址时,单线程添加删除3000 IPv6地址均需大概5分钟,而普通物理网卡耗时在10秒内。 - -``` -ip a add/del 192:168::18:X/64 dev DEVICE -``` - -##### 原因分析 - -bond口在添加IPv6地址时,会生成IPv6组播地址,并进行同步到所有的物理网卡上,此耗时会随IPv6数量增加而增加,导致耗时过长。 - -##### 解决方法 - -IPv6的组播地址是由IPv6地址的低24位与33-33-ff组合生成,组播地址过多会导致添加删除耗时增加,如果生成的组播地址为少量,耗时不会受此影响。 - -建议添加IPv6地址时,可保持低24位一致,保持高位变动,单网卡中仅需一个网段的一个地址即可与外部正常通信,此配置更符合常规使用。 - -#### Rsyslog在IPv4和IPv6混合使用场景中日志传输延迟 - -##### 问题现象 - -rsyslog客户端配置文件同时配置IPv4和IPv6地址,且端口配置相同的情况下,服务端收集log时会概率性出现日志打印延迟。 - -##### 原因分析 - -延迟是因为rsyslog内部存在缓冲队列机制,默认情况下需要缓冲区队列达到一定数量才会写入文件。 - -##### 解决方法 - -可在root权限下通过配置Direct模式,关闭缓冲队列机制解决该问题。在rsyslog远程传输服务端的/etc/rsyslog.d目录下新增的远程传输配置文件中,最开头增加如下配置: - -``` -$ActionQueueType Direct -$MainMsgQueueType Direct -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->- Direct模式减少队列大小为1,所以在队列中会保留1条日志到下次日志打印; ->- Direct模式会降低服务器端的rsyslog性能。 +# 配置网络 + + +- [配置网络](#配置网络) + - [配置 IP](#配置-ip) + - [使用nmcli命令](#使用nmcli命令) + - [使用ip命令](#使用ip命令) + - [通过ifcfg文件配置网络](#通过ifcfg文件配置网络) + - [配置主机名](#配置主机名) + - [简介](#简介) + - [使用hostnamectl配置主机名](#使用hostnamectl配置主机名) + - [使用nmcli配置主机名](#使用nmcli配置主机名) + - [配置网络绑定](#配置网络绑定) + - [使用nmcli](#使用nmcli) + - [使用命令行](#使用命令行) + - [IPv6使用差异说明(vs IPv4)](#ipv6使用差异说明vs-ipv4) + - [约束限制](#约束限制) + - [配置说明](#配置说明) + - [FAQ](#faq) + + + + +## 配置 IP + + +### 使用nmcli命令 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>使用nmcli命令配置的网络配置可以立即生效且系统重启后配置也不会丢失。 + + + +#### nmcli介绍 + +nmcli是NetworkManager的一个命令行工具,它提供了使用命令行配置由NetworkManager管理网络连接的方法。nmcli命令的基本格式为: + +``` + nmcli [OPTIONS] OBJECT { COMMAND | help } +``` + +其中,OBJECT选项可以是general、networking、radio、connection或device等。在日常使用中,最常使用的是-t, \-\-terse(用于脚本)、-p, \-\-pretty选项(用于用户)及-h, \-\-help选项,用户可以使用“ nmcli help”获取更多参数及使用信息。 + +``` +$ nmcli help +``` + +常用命令使用举例如下: + +- 显示NetworkManager状态: + + ``` + $ nmcli general status + ``` + +- 显示所有连接: + + ``` + $ nmcli connection show + ``` + +- 只显示当前活动连接,如下所示添加 -a, \-\-active: + + ``` + $ nmcli connection show --active + ``` + +- 显示由NetworkManager识别到设备及其状态: + + ``` + $ nmcli device status + ``` + +- 使用nmcli工具启动和停止网络接口,在root权限下执行如下命令: + + ``` + # nmcli connection up id enp3s0 + # nmcli device disconnect enp3s0 + ``` + + +#### 设备管理 + +##### 连接到设备 + +使用如下命令,NetworkManager将连接到对应网络设备,尝试找到合适的连接配置,并激活配置。 + +``` +$nmcli device connect "$IFNAME" +``` +>如果不存在相应的配置连接,NetworkManager将创建并激活具有默认设置的新配置文件。 + +##### 断开设备连接 + +使用如下命令,NetworkManager将断开设备连接,并防止设备自动激活。 + + +``` +$nmcli device disconnect "$IFNAME" +``` + +#### 设置网络连接 + +列出目前可用的网络连接: + +``` +$ nmcli con show + + +NAME UUID TYPE DEVICE +enp4s0 5afce939-400e-42fd-91ee-55ff5b65deab ethernet enp4s0 +enp3s0 c88d7b69-f529-35ca-81ab-aa729ac542fd ethernet enp3s0 +virbr0 ba552da6-f014-49e3-91fa-ec9c388864fa bridge virbr0 +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>输出结果中的NAME字段代表连接ID(名称)。 + +添加一个网络连接会生成相应的配置文件,并与相应的设备关联。检查可用的设备,方法如下: + +``` +$ nmcli dev status + +DEVICE TYPE STATE CONNECTION +enp3s0 ethernet connected enp3s0 +enp4s0 ethernet connected enp4s0 +virbr0 bridge connected virbr0 +lo loopback unmanaged -- +virbr0-nic tun unmanaged -- +``` + + +##### 配置动态IP连接 + +###### 配置IP + +要使用 DHCP 分配网络时,可以使用动态IP配置添加网络配置文件,命令格式如下: + +``` +nmcli connection add type ethernet con-name connection-name ifname interface-name +``` + +例如创建名为net-test的动态连接配置文件,在root权限下使用以下命令: + +``` +# nmcli connection add type ethernet con-name net-test ifname enp3s0 +Connection 'net-test' (a771baa0-5064-4296-ac40-5dc8973967ab) successfully added. +``` + +NetworkManager 会将参数 connection.autoconnect 设定为 yes,并将设置保存到 “/etc/sysconfig/network-scripts/ifcfg-net-test”文件中,在该文件中会将 ONBOOT 设置为 yes。 + +###### 激活连接并检查状态 + +在root权限下使用以下命令激活网络连接: + +``` +# nmcli con up net-test +Connection successfully activated (D-Bus active path:/org/freedesktop/NetworkManager/ActiveConnection/5) +``` + +检查这些设备及连接的状态,使用以下命令: + +``` +$ nmcli device status + +DEVICE TYPE STATE CONNECTION +enp4s0 ethernet connected enp4s0 +enp3s0 ethernet connected net-test +virbr0 bridge connected virbr0 +lo loopback unmanaged -- +virbr0-nic tun unmanaged -- +``` + +##### 配置静态IP连接 + +###### 配置IP + +添加静态 IPv4 配置的网络连接,可使用以下命令: + +``` +nmcli connection add type ethernet con-name connection-name ifname interface-name ip4 address gw4 address +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>如果要添加 IPv6 地址和网关信息,使用 ip6 和 gw6 选项。 + +例如创建名为 net-static的静态连接配置文件,在root权限下使用以下命令: + +``` +# nmcli con add type ethernet con-name net-static ifname enp3s0 ip4 192.168.0.10/24 gw4 192.168.0.254 +``` + +还可为该设备同时指定 IPv6 地址和网关,示例如下: + +``` +# nmcli con add type ethernet con-name test-lab ifname enp3s0 ip4 192.168.0.10/24 gw4 192.168.0.254 ip6 abbe::**** gw6 2001:***::* +Connection 'net-static' (63aa2036-8665-f54d-9a92-c3035bad03f7) successfully added. +``` + +NetworkManager 会将其内部参数 ipv4.method 设定为 manual,将 connection.autoconnect 设定为yes,并将设置写入 /etc/sysconfig/network-scripts/ifcfg-my-office 文件,其中会将对应 BOOTPROTO 设定为 none,将 ONBOOT 设定为 yes。 + +设定两个 IPv4 DNS 服务器地址,在root权限下使用以下命令: + +``` +# nmcli con mod net-static ipv4.dns "*.*.*.* *.*.*.*" +``` + +设置两个 IPv6 DNS 服务器地址,在root权限下使用以下命令: + +``` +# nmcli con mod net-static ipv6.dns "2001:4860:4860::**** 2001:4860:4860::****" +``` + +###### 激活连接并检查状态 + +激活新的网络连接,在root权限下使用以下命令: + +``` +# nmcli con up net-static ifname enp3s0 +Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6) +``` + +检查这些设备及连接的状态,使用以下命令: + +``` +$ nmcli device status + +DEVICE TYPE STATE CONNECTION +enp4s0 ethernet connected enp4s0 +enp3s0 ethernet connected net-static +virbr0 bridge connected virbr0 +lo loopback unmanaged -- +virbr0-nic tun unmanaged -- +``` + +查看配置的连接详情,使用以下命令(使用 -p, \-\-pretty 选项在输出结果中添加标题和分段): + +``` +$ nmcli -p con show net-static +=============================================================================== +Connection profile details (net-static ) +=============================================================================== +connection.id: net-static +connection.uuid: b9f18801-6084-4aee-af28-c8f0598ff5e1 +connection.stable-id: -- +connection.type: 802-3-ethernet +connection.interface-name: enp3s0 +connection.autoconnect: yes +connection.autoconnect-priority: 0 +connection.autoconnect-retries: -1 (default) +connection.multi-connect: 0 (default) +connection.auth-retries: -1 +connection.timestamp: 1578988781 +connection.read-only: no +connection.permissions: -- +connection.zone: -- +connection.master: -- +connection.slave-type: -- +connection.autoconnect-slaves: -1 (default) +connection.secondaries: -- +connection.gateway-ping-timeout: 0 +connection.metered: unknown +connection.lldp: default +connection.mdns: -1 (default) +connection.llmnr: -1 (default) +``` + +##### 添加 Wi-Fi 连接 + +有两种方式添加Wi-Fi 连接。 + +**方法1,通过网络接口连接wifi** + +连接到由SSID或BSSID指定的wifi网络。命令如下,该命令找到匹配的连接或创建一个连接,然后在设备上激活它。 + +``` +$ nmcli device wifi connect "$SSID" password "$PASSWORD" ifname "$IFNAME" +$ nmcli --ask device wifi connect "$SSID" +``` + +**方法2,通过配置文件连接Wi-Fi** + +1,使用以下命令查看可用 Wi-Fi 访问点: + +``` +$ nmcli dev wifi list +``` + +2,使用以下命令生成使用的静态 IP 配置,但允许自动 DNS 地址分配的 Wi-Fi 连接: + +``` +$ nmcli con add con-name Wifi ifname wlan0 type wifi ssid MyWifi ip4 192.168.100.101/24 gw4 192.168.100.1 +``` + +3,请使用以下命令设定 WPA2 密码,例如 “answer”: + +``` +$ nmcli con modify Wifi wifi-sec.key-mgmt wpa-psk +$ nmcli con modify Wifi wifi-sec.psk answer +``` + +4,使用以下命令更改 Wi-Fi 状态: + +``` +$ nmcli radio wifi [ on | off ] +``` + +##### 更改属性 + +请使用以下命令检查具体属性,比如 mtu: + +``` +$ nmcli connection show id 'Wifi ' | grep mtu +802-11-wireless.mtu: auto +``` + +使用如下命令更改设置的属性: + +``` +$ nmcli connection modify id 'Wifi ' 802-11-wireless.mtu 1350 +``` + +使用如下命令确认更改: + +``` +$ nmcli connection show id 'Wifi ' | grep mtu +802-11-wireless.mtu: 1350 +``` + +#### 配置静态路由 + +- 使用nmcli命令为网络连接配置静态路由,使用命令如下: + + ``` + $ nmcli connection modify enp3s0 +ipv4.routes "192.168.122.0/24 10.10.10.1" + ``` + + +- 使用编辑器配置静态路由,使用如下命令: + + ``` + $ nmcli con edit type ethernet con-name enp3s0 + ===| nmcli interactive connection editor |=== + Adding a new '802-3-ethernet' connection + Type 'help' or '?' for available commands. + Type 'describe [.]' for detailed property description. + You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, ipv4, ipv6, dcb + nmcli> set ipv4.routes 192.168.122.0/24 10.10.10.1 + nmcli> + nmcli> save persistent + Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection. + Do you still want to save? [yes] yes + Connection 'enp3s0' (1464ddb4-102a-4e79-874a-0a42e15cc3c0) successfully saved. + nmcli> quit + ``` + + +### 使用ip命令 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>使用ip命令配置的网络配置可以立即生效但系统重启后配置会丢失。 + + + +#### 配置IP地址 + +使用ip命令为接口配置地址,命令格式如下,其中 _interface-name_ 为网卡名称。 + +``` +ip addr [ add | del ] address dev interface-name +``` + +##### 配置静态地址 +在root权限下,配置设置IP地址,使用示例如下: + +``` +# ip address add 192.168.0.10/24 dev enp3s0 +``` + +查看配置结果,在root权限使用如下命令: + +``` +# ip addr show dev enp3s0 +2: enp3s0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 + link/ether 52:54:00:aa:ad:4a brd ff:ff:ff:ff:ff:ff + inet 192.168.202.248/16 brd 192.168.255.255 scope global dynamic noprefixroute enp3s0 + valid_lft 9547sec preferred_lft 9547sec + inet 192.168.0.10/24 scope global enp3s0 + valid_lft forever preferred_lft forever + inet6 fe80::32e8:cc22:9db2:f4d4/64 scope link noprefixroute + valid_lft forever preferred_lft forever +``` + +##### 配置多个地址 +ip 命令支持为同一接口分配多个地址,可在root权限下重复多次使用 ip 命令实现分配多个地址。使用示例如下: + +``` +# ip address add 192.168.2.223/24 dev enp4s0 +# ip address add 192.168.4.223/24 dev enp4s0 +# ip addr + +3: enp4s0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 + link/ether 52:54:00:aa:da:e2 brd ff:ff:ff:ff:ff:ff + inet 192.168.203.12/16 brd 192.168.255.255 scope global dynamic noprefixroute enp4s0 + valid_lft 8389sec preferred_lft 8389sec + inet 192.168.2.223/24 scope global enp4s0 + valid_lft forever preferred_lft forever + inet 192.168.4.223/24 scope global enp4s0 + valid_lft forever preferred_lft forever + inet6 fe80::1eef:5e24:4b67:f07f/64 scope link noprefixroute + valid_lft forever preferred_lft forever +``` + +#### 配置静态路由 + +如果需要静态路由,可使用 ip route add 命令在路由表中添加,使用 ip route del 命令删除。最常使用的 ip route 命令格式如下: + +``` +ip route [ add | del | change | append | replace ] destination-address +``` + +在root权限下使用 ip route 命令显示当前的 IP 路由表。示例如下: + +``` +# ip route + +default via 192.168.0.1 dev enp3s0 proto dhcp metric 100 +default via 192.168.0.1 dev enp4s0 proto dhcp metric 101 +192.168.0.0/16 dev enp3s0 proto kernel scope link src 192.168.202.248 metric 100 +192.168.0.0/16 dev enp4s0 proto kernel scope link src 192.168.203.12 metric 101 +192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown +``` + +在主机地址中添加一个静态路由,在 root 权限下,使用以下命令格式: + +``` +ip route add 192.168.2.1 via 10.0.0.1 [dev interface-name] +``` + +其中 192.168.2.1 是用点分隔的十进制符号中的 IP 地址,10.0.0.1 是下一个跃点,_interface-name_ 是进入下一个跃点的退出接口。 + +要在网络中添加一个静态路由,即代表 IP 地址范围的 IP 地址,请在root权限下运行以下命令格式: + +``` +ip route add 192.168.2.0/24 via 10.0.0.1 [dev interface-name] +``` + +其中 192.168.2.1 是目标网络的 IP 地址,10.0.0.1 是网络前缀,_interface-name_ 为网卡名称。 + +### 通过ifcfg文件配置网络 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>通过ifcfg文件配置的网络配置不会立即生效,需要在root权限下执行**systemctl reload NetworkManager**命令以重启网络服务后才生效。 + +#### 配置静态网络 + +以enp4s0网络接口进行静态网络设置为例,通过在root权限下修改ifcfg文件实现,在/etc/sysconfig/network-scripts/目录中生成名为ifcfg-enp4s0的文件中,修改参数配置,示例如下: + +``` +TYPE=Ethernet +PROXY_METHOD=none +BROWSER_ONLY=no +BOOTPROTO=none +IPADDR=192.168.0.10 +PREFIX=24 +DEFROUTE=yes +IPV4_FAILURE_FATAL=no +IPV6INIT=yes +IPV6_AUTOCONF=yes +IPV6_DEFROUTE=yes +IPV6_FAILURE_FATAL=no +IPV6_ADDR_GEN_MODE=stable-privacy +NAME=enp4s0static +UUID=08c3a30e-c5e2-4d7b-831f-26c3cdc29293 +DEVICE=enp4s0 +ONBOOT=yes +``` + +#### 配置动态网络 + +要通过ifcfg文件为em1接口配置动态网络,请按照如下操作在/etc/sysconfig/network-scripts/目录中生成名为 ifcfg-em1 的文件,示例如下: + +``` +DEVICE=em1 +BOOTPROTO=dhcp +ONBOOT=yes +``` + +要配置一个向DHCP服务器发送不同的主机名的接口,请在ifcfg文件中新增一行内容,如下所示: + +``` +DHCP_HOSTNAME=hostname +``` + +要配置忽略由DHCP服务器发送的路由,防止网络服务使用从DHCP服务器接收的DNS服务器更新/etc/resolv.conf。请在ifcfg文件中新增一行内容,如下所示: + +``` +PEERDNS=no +``` + +要配置一个接口使用具体DNS服务器,请将参数PEERDNS=no,并在ifcfg文件中添加以下行: + +``` +DNS1=ip-address +DNS2=ip-address +``` + +其中ip-address是DNS服务器的地址。这样就会让网络服务使用指定的DNS服务器更新/etc/resolv.conf。 + +#### 配置默认网关 + +在确定默认网关时,首先解析 /etc/sysconfig/network 文件,然后解析 ifcfg 文件 ,将最后读取的 GATEWAY 的取值作为路由表中的默认路由。 + +在动态网络环境中,使用 NetworkManager 管理主机时,建议设置为由 DHCP 来分配。 + +## 配置主机名 + + +### 简介 + +hostname有三种类型:static、transient和pretty。 + +- static:静态主机名,可由用户自行设置,并保存在/etc/hostname 文件中。 +- transient:动态主机名,由内核维护,初始是 static 主机名,默认值为“localhost”。可由DHCP或mDNS在运行时更改。 +- pretty:灵活主机名,允许使用自由形式(包括特殊/空白字符)进行设置。静态/动态主机名遵从域名的通用限制。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>static和transient主机名只能包含a-z、A-Z、0-9、“-”、“\_”和“.”,不能在开头或结尾处使用句点,不允许使用两个相连的句点,大小限制为 64 个字符。 + +### 使用hostnamectl配置主机名 + +#### 查看所有主机名 +查看当前的主机名,使用如下命令: + +``` +$ hostnamectl status +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>如果命令未指定任何选项,则默认使用status选项。 + +#### 设定所有主机名 +在root权限下,设定系统中的所有主机名,使用如下命令: + +``` +# hostnamectl set-hostname name +``` + +#### 设定特定主机名 +在root权限下,通过不同的参数来设定特定主机名,使用如下命令: + +``` +# hostnamectl set-hostname name [option...] +``` + +其中option可以是\-\-pretty、\-\-static、\-\-transient中的一个或多个选项。 + +如果\-\-static或\-\-transient与\-\-pretty选项一同使用时,则会将static和transient主机名简化为pretty主机名格式,使用“-”替换空格,并删除特殊字符。 + +当设定pretty主机名时,如果主机名中包含空格或单引号,需要使用引号。命令示例如下: + +``` +# hostnamectl set-hostname "Stephen's notebook" --pretty +``` + +#### 清除特定主机名 +要清除特定主机名,并将其还原为默认形式,在root权限下,使用如下命令: + +``` +# hostnamectl set-hostname "" [option...] +``` + +其中 "" 是空白字符串,option是\-\-pretty、\-\-static和\-\-transient中的一个或多个选项。 + +#### 远程更改主机名 +在远程系统中运行hostnamectl命令时,要使用-H,\-\-host 选项,在root权限下使用如下命令: + +``` +# hostnamectl set-hostname -H [username]@hostname new_hostname +``` + +其中hostname是要配置的远程主机,username为自选项,new\_hostname为新主机名。hostnamectl会通过SSH连接到远程系统。 + +### 使用nmcli配置主机名 + +查询static主机名,使用如下命令: + +``` +$ nmcli general hostname +``` + +在root权限下,将static主机名设定为host-server,使用如下命令: + +``` +# nmcli general hostname host-server +``` + +要让系统hostnamectl感知到static主机名的更改,在root权限下,重启hostnamed服务,使用如下命令: + +``` +# systemctl restart systemd-hostnamed +``` + +## 配置网络绑定 + + +### 使用nmcli + +- 创建名为mybond0的绑定,使用示例如下: + + ``` + $ nmcli con add type bond con-name mybond0 ifname mybond0 mode active-backup + ``` + +- 添加从属接口,使用示例如下: + + ``` + $ nmcli con add type bond-slave ifname enp3s0 master mybond0 + ``` + + 要添加其他从属接口,重复上一个命令,并在命令中使用新的接口,使用示例如下: + + ``` + $ nmcli con add type bond-slave ifname enp4s0 master mybond0 + Connection 'bond-slave-enp4s0' (05e56afc-b953-41a9-b3f9-0791eb49f7d3) successfully added. + ``` + +- 要启动绑定,则必须首先启动从属接口,使用示例如下: + + ``` + $ nmcli con up bond-slave-enp3s0 + Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/14) + ``` + + ``` + $ nmcli con up bond-slave-enp4s0 + Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/15) + ``` + + 现在可以启动绑定,使用示例如下: + + ``` + $ nmcli con up mybond0 + Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/16) + ``` + + +### 使用命令行 + + + +#### 检查是否已安装Bonding内核模块 + +在系统中默认已加载相应模块。要载入绑定模块,可在root权限下使用如下命令: + +``` +# modprobe --first-time bonding +``` + +显示该模块的信息,可在root权限下使用如下命令: + +``` +# modinfo bonding +``` + +更多命令请在root权限下使用modprobe \-\-help查看。 + +#### 创建频道绑定接口 + +要创建绑定接口,可在root权限下通过在 /etc/sysconfig/network-scripts/ 目录中创建名为 ifcfg-bondN 的文件(使用接口号码替换 N,比如 0)。 + +根据要绑定接口类型的配置文件来编写相应的内容,比如网络接口。接口配置文件示例如下: + +``` +DEVICE=bond0 +NAME=bond0 +TYPE=Bond +BONDING_MASTER=yes +IPADDR=192.168.1.1 +PREFIX=24 +ONBOOT=yes +BOOTPROTO=none +BONDING_OPTS="bonding parameters separated by spaces" +``` + +#### 创建从属接口 + +创建频道绑定接口后,必须在从属接口的配置文件中添加 MASTER 和 SLAVE 指令。 + +例如将两个网络接口enp3s0 和 enp4s0 以频道方式绑定,其配置文件示例分别如下: + +``` +TYPE=Ethernet +NAME=bond-slave-enp3s0 +UUID=3b7601d1-b373-4fdf-a996-9d267d1cac40 +DEVICE=enp3s0 +ONBOOT=yes +MASTER=bond0 +SLAVE=yes +``` + +``` +TYPE=Ethernet +NAME=bond-slave-enp4s0 +UUID=00f0482c-824f-478f-9479-abf947f01c4a +DEVICE=enp4s0 +ONBOOT=yes +MASTER=bond0 +SLAVE=yes +``` + +#### 激活频道绑定 + +要激活绑定,则需要启动所有从属接口。请在root权限下,运行以下命令: + +``` +# ifup enp3s0 +Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7) +``` + +``` +# ifup enp4s0 +Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8) +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>对于已经处于“up”状态的接口,请首先使用“ifdown _enp3s0_ ”命令修改状态为down,其中 _enp3s0_ 为实际网卡名称。 + +完成后,启动所有从属接口以便启动绑定(不将其设定为 “down”)。 + +要让 NetworkManager 感知到系统所做的修改,在每次修改后,请在root权限下,运行以下命令: + +``` +# nmcli con load /etc/sysconfig/network-scripts/ifcfg-device +``` + +查看绑定接口的状态,请在root权限下运行以下命令: + +``` +# ip link show + +1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 +2: enp3s0: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 + link/ether 52:54:00:aa:ad:4a brd ff:ff:ff:ff:ff:ff +3: enp4s0: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 + link/ether 52:54:00:aa:da:e2 brd ff:ff:ff:ff:ff:ff +4: virbr0: mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000 + link/ether 86:a1:10:fb:ef:07 brd ff:ff:ff:ff:ff:ff +5: virbr0-nic: mtu 1500 qdisc fq_codel master virbr0 state DOWN mode DEFAULT group default qlen 1000 + link/ether 52:54:00:29:35:4c brd ff:ff:ff:ff:ff:ff +``` + +#### 创建多个绑定 + +系统会为每个绑定创建一个频道绑定接口,包括 BONDING\_OPTS 指令。使用这个配置方法可让多个绑定设备使用不同的配置。请按照以下操作创建多个频道绑定接口: + +- 创建多个 ifcfg-bondN 文件,文件中包含 BONDING\_OPTS 指令,让网络脚本根据需要创建绑定接口。 +- 创建或编辑要绑定的现有接口配置文件,添加 SLAVE 指令。 +- 使用 MASTER 指令工具在频道绑定接口中分配要绑定的接口,即从属接口。 + +以下是频道绑定接口配置文件示例: + +``` +DEVICE=bondN +NAME=bondN +TYPE=Bond +BONDING_MASTER=yes +IPADDR=192.168.1.1 +PREFIX=24 +ONBOOT=yes +BOOTPROTO=none +BONDING_OPTS="bonding parameters separated by spaces" +``` + +在这个示例中,使用绑定接口的号码替换 N。例如要创建两个接口,则需要使用正确的 IP 地址创建两个配置文件 ifcfg-bond0 和 ifcfg-bond1。 + +## IPv6使用差异说明(vs IPv4) + + + +### 约束限制 + +- chrony支持全局地址(global address),不支持链路本地地址(link-local address)。 +- Firefox支持通过http/https协议访问全局地址(global address),不支持链路本地地址(link-local address)。 + +### 配置说明 +#### 设置接口设备MTU值 + +##### 概述 + +IPv6场景中会发现整个路由路径中的最小mtu的值作为当前链接的PMTU的值,源端根据PMTU的值确定是否进行分片发送,而在整个路径中的其它设备将不再需要进行分片处理,从而可以降低中间路由设备的负载大小。其中IPv6 PMTU设置的最小值为1280。 + +##### 设置接口设备的mtu + +如果在配置了IPv6地址的接口上设置mtu的值小于1280(IPv6 PMTU设置的最小值),则会导致该接口的IPv6地址被删除。并且无法再次添加IPv6地址。所以在IPv6场景中,对接口设备的mtu的配置一定要大于等于1280。 +请在root权限下运行如下命令查看具体现象: + +``` +# ip addr show enp3s0 +3: enp3s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx + inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 + valid_lft 38663sec preferred_lft 38663sec + inet6 2001:222::2/64 scope global + valid_lft forever preferred_lft forever +``` + +``` +# ip link set dev enp3s0 mtu 1200 +# ip addr show enp3s0 +3: enp3s0: mtu 1200 qdisc pfifo_fast state UP group default qlen 1000 + link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx + inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 + valid_lft 38642sec preferred_lft 38642sec +``` + +``` +# ip addr add 2001:222::2/64 dev enp3s0 +RTNETLINK answers: No buffer space available +``` + +``` +# ip link set dev enp3s0 mtu 1500 +# ip addr show enp3s0 +3: enp3s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx + inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 + valid_lft 38538sec preferred_lft 38538sec +``` + +``` +# ip addr add 2001:222::2/64 dev enp3s0 +# ip addr show enp3s0 +3: enp3s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + link/ether 52:54:00:62:xx:xx brd ff:ff:ff:ff:xx:xx + inet 10.41.125.236/16 brd 10.41.255.255 scope global noprefixroute dynamic enp3s0 + valid_lft 38531sec preferred_lft 38531sec + inet6 2001:222::2/64 scope global + valid_lft forever preferred_lft forever +``` + +#### 有状态自动配置IPv6地址 + +##### 概述 + +IPv6与IPv4都可以在root权限下通过DHCP的方式获得IP地址。IPv6地址有两种配置方式:无状态自动配置和有状态自动配置。 + +- 无状态自动配置 + + 不需要DHCP服务进行管理,设备根据网络RA(路由公告)获得网络前缀,或者link-local地址为固定fe80::。而接口ID则根据ifcfg配置IPV6\_ADDR\_GEN\_MODE的具体设置来进行自动获得: + + 1. IPv6\_ADDR\_GEN\_MODE="stable-privacy" 则根据设备及网络环境来确定一个随机接口ID。 + 2. IPv6\_ADDR\_GEN\_MODE="EUI64" 则根据设备MAC地址来确定接口ID。 + +- 有状态自动配置:需要DHCP服务器进行管理分配,服从DHCPv6协议来从DHCPv6服务器端租赁IPv6地址。 + + 在有状态自动配置IPv6地址时,DHCPv6服务端可以通过客户端设置的vendor class将客户端进行分类,不同类别分配不同地址段的IPv6地址。在IPv4场景中,客户端可以直接用dhclient的-V选项来设置vendor-class-identifier,DHCP服务端在配置文件中根据vendor-class-identifier来对客户端进行分类处理。而IPv6场景中,如果使用同样的方法对客户端分类,则分类并不会生效。 + + ``` + dhclient -6 -V + ``` + + 这是由于DHCPv6和DHCP协议存在较大差异,DHCPv6的可选项中使用vendor-class-option替代了DHCP中的vendor-class-identifier。而dhclient的-V选项并不能设置vendor-class-option。 + + +##### 有状态自动配置IPv6地址时dhclient设置vendor class方法 + +- 在客户端使用配置文件方式添加对vendor class的设置,使用方法如下: + + 客户端配置文件(/etc/dhcp/dhclient6.conf),文件位置可以自定义,在使用时需要通过dhclient -cf选项来指定配置文件: + + ``` + option dhcp6.vendor-class code 16 = {integer 32, integer 16, string}; + interface "enp3s0" { + send dhcp6.vendor-class ; + } + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >- \,32位整型数字,企业标识号,企业通过IANA注册。 + >- \,16位整型数字,vendor class字符串长度。 + >- \,要设置的vendor class字符串,例如:“HWHW”。 + + 客户端使用方法: + + ``` + dhclient -6 -cf /etc/dhcp/dhclient6.conf + ``` + + +- DHCPv6服务端配置文件(/etc/dhcp/dhcpd6.conf),需要dhcpd -cf选项来指定该配置文件: + + ``` + option dhcp6.vendor-class code 16 = {integer 32, integer 16, string}; + subnet6 fc00:4:12:ffff::/64 { + class "hw" { + match if substring ( option dhcp6.vendor-class, 6, 10 ) = "HWHW"; + } + pool6 { + allow members of "hw"; + range6 fc00:4:12:ffff::ff10 fc00:4:12:ffff::ff20; + } + pool6 { + allow unknown clients; + range6 fc00:4:12:ffff::100 fc00:4:12:ffff::120; + } + } + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >substring \( option dhcp6.vendor-class, 6, 10 \) 其中子字符串的开始位置为6,因为前面包含4个字节的和2个字节的。而子字符串的结束位置位:6+。这里vendor class string为“HWHW”,字符串的长度为4,所以子字符串的结束位置为6+4=10。用户可以根据实际需要来确定及相应的。 + + 服务端使用方法: + + ``` + dhcpd -6 -cf /etc/dhcp/dhcpd6.conf + ``` + + +#### 内核支持socket相关系统调用 + +##### 概述 + +IPv6地址长度扩展到128比特,所以有足够的IPv6地址可供分配使用。同时IPv6头相比IPv4头进行了简化,并增强了IPv6的自动配置功能。IPv6地址分为单播地址,组播地址和任意播地址。常用的单播地址又包含:链路本地地址(link-local address),唯一本地地址(Unique local address)和全局地址(global address)。由于IPv6的全局地址十分充足,唯一本地地址一般不被使用(其前身为站点本地地址(site-local address),已于2004年被废弃)。当前主要使用的单播地址为:链路本地地址(link-local address)和全局地址(global address)。当前内核支持socket系统调用,在使用单播地址的链路本地地址和全局地址时存在差异。 + +##### link-local地址和global地址在socket调用时的差异 + +RFC 2553: Basic Socket Interface Extensions for IPv6 定义sockaddr\_in6的数据结构如下; + +``` +struct sockaddr_in6 { + uint8_t sin6_len; /* length of this struct */ + sa_family_t sin6_family; /* AF_INET6 */ + in_port_t sin6_port; /* transport layer port # */ + uint32_t sin6_flowinfo; /* IPv6 flow information */ + struct in6_addr sin6_addr; /* IPv6 address */ + uint32_t sin6_scope_id; /* set of interfaces for a scope */ +}; +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>sin6\_scope\_id: 32位整型,对于链路本地地址(link-local address),对于链路范围的sin6\_addr,它可以用来标识指定的接口索引号。如果是站点范围的sin6\_addr,则用来作为站点的标识符(站点本地地址已被抛弃)。 + +在使用link-local地址进行socket通信时,在构造目的地址时,需要制定该地址所对应的接口索引号。一般可以通过if\_nametoindex函数将接口名转化为接口索引号。具体方式如下, + +``` +int port = 1234; +int sk_fd; +int iff_index = 0; +char iff_name[100] = "enp3s0"; +char * ll_addr[100] = "fe80::123:456:789"; +struct sockaddr_in6 server_addr; + +memset(&server_addr,0,sizeof(structsockaddr_in6)); +iff_index=if_nametoindex(iff_name); + +server_addr.sin6_family=AF_INET6; +server_addr.sin6_port=htons(port); +server_addr.sin6_scope_id=iff_index; +inet_pton(AF_INET6, ll_addr, &(server_addr.sin6_addr)); + +sk_fd=socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP); +connect(sk_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in6)); +``` + +#### IPv4的dhclient守护进程持久化配置 + +##### 概述 + +通过NetworkManager服务来管理网络服务时,如果接口ifcfg-配置文件中配置了DHCP方式获得IP地址,则相应地NetworkManager服务会拉起dhclient守护进程来通过DHCP协议方式来从DHCP服务器获取IP地址。 + +dhclient提供了"-1"选项来决定dhclient进程在未获得DHCP服务响应时,是会不断持久化尝试请求地址还是会尝试时间超时后退出。针对IPv4的dhclient守护进程,可以在ifcfg-配置文件中设置PERSISTENT\_DHCLIENT来决定是否设置IPv4的dhclient进程的持久化。 + +##### 约束限制 + +1. 当dhclient进程在运行中被杀死,network服务无法自动将其拉起,可靠性需要用户自己保障。 +2. 配置了持久化选项PERSISTENT\_DHCLIENT,需要确保有相应的DHCP服务器。如果在拉起network时无可用DHCP服务器,dhclient进程不断尝试发送请求包但无回应,则会导致network服务卡死直到network服务超时失败。由于network服务在拉起多个网卡的IPv4 dhclient进程时,是通过串行的方式来拉起的。如果有网卡配置了持久化而DHCP服务器没有准备好,则会导致network服务在给该网卡获取IPv4地址超时卡死,进而导致后续网卡无法获得IPv4/IPv6地址。 + +以上两种约束限制是特殊的应用场景,需要用户自己进行可靠性保障。 + +##### IPv4 DHCP和IPv6 DHCPv6方式获取地址的配置差异 + +可以通过配置接口ifcfg-参数来分别实现IPv4和IPv6通过DHCP/DHCPv6协议来动态获取IP地址,具体配置说明如下; + +``` +BOOTPROTO=none|bootp|dhcp +DHCPV6C=yes|no +PERSISTENT_DHCLIENT=yes|no|1|0 +``` + +- BOOTPROTO: none表示静态配置IPv4地址,bootp|dhcp则会拉起DHCP dhclient来动态获取IPv4地址。 +- DHCPV6C: no表示静态配置IPv6地址,yes则会拉起DHCPv6 dhclient来动态获取IPv6地址。 +- PERSISTENT\_DHCLIENT:no|0表示IPv4的dhclient进程配置为“非持久化”,当dhclient向DHCP服务器发送一次请求报文而无响应,则会间隔一段时间后退出,退出值为2。yes|1则表示IPv4的dhclient进程配置为“持久化”,dhclient会向DHCP服务器反复发送请求报文。**如果没有配置PERSISTENT\_DHCLIENT项,则IPv4的dhclient会默认设置为“持久化”**。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >PERSISTENT\_DHCLIENT配置只针对IPv4生效,对IPv6相关dhclient -6进程不生效,IPv6默认不进行持久化配置。 + + +#### iproute相关命令配置IPv4与IPv6时的差异说明 + +##### 概述 + +由于IPv4和IPv6是两个不同的协议标准,iproute相关命令在使用方法上存在一定的差异。本章节主要梳理iproute包中用户经常使用到命令在IPv4和IPv6使用方面的差异,从而可以更好地指导用户使用iproute包中相关命令。 + +iproute相关命令均需要在root权限下运行。 + +##### IPv6地址的生命周期 + + + + + + + + + + + + + + + + + + + +

IPv6状态

+

解释

+

tentative

+

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

+

preferred

+

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

+

deprecated

+

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

+

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

+

invalid

+

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

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

IPv4

+

IPv6

+

含义说明

+

NA

+

IPV6FORWARDING=yes|no

+

IPv6转发,默认不转发。

+

NA

+

IPV6_AUTOCONF=yes|no

+

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

+

NA

+

IPV6_ROUTER=yes|no

+

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

+

NA

+

IPV6_AUTOTUNNEL=yes|no

+

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

+

GATEWAY

+

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

+

在IPv6中设置默认网关。

+

NA

+

IPV6_DEFAULTDEV=<interface> (optional)

+

指定默认转发的网卡。

+

NA

+

IPV6_RADVD_PIDFILE=<pid-file> (optional)

+

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

+

NA

+

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

+

radvd默认触发动作。

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

IPv4

+

IPv6

+

含义说明

+

IPADDRn

+

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

+

ip地址。

+

PREFIXn

+

NA

+

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

+

NETMASKn

+

NA

+

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

+

GATEWAY

+

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

+

默认网关。

+

MTU

+

IPV6_MTU=<MTU of link> (optional)

+

默认MTU。

+

IPV4_FAILURE_FATAL=yes|no

+

IPV6_FAILURE_FATAL

+

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

+

NA

+

IPV6_PRIVACY=rfc3041

+

默认禁用。

+

NA

+

IPV6INIT=yes|no

+

默认开启IPv6。

+

NA

+

IPV6FORWARDING=yes|no

+

默认关闭,已废弃。

+
+ +### FAQ +#### iscsi-initiator-utils不支持登录fe80 IPv6地址 + +##### 问题现象 + +客户端通过IPv6登录iscsi服务端时,使用如“iscsiadm -m node -p ipv6address -l”的命令格式登录,如果是全局地址(global address),直接替换将命令范例中的“ipv6address”替换为全局地址即可;但如果是链路本地地址(link-local address,fe80开头的IPv6地址)则无法使用,因为iscsi-initiator-utils目前机制还不支持用链路本地地址(link-local address)地址登录iscsi服务端。 + +##### 原因分析 + +如果使用格式如“iscsiadm -m node -p fe80::xxxx -l”登录,会登录超时返回,这是因为使用链路本地地址必须指定接口,否则使用iscsi\_io\_tcp\_connect函数调用connect函数会失败,并且产生标准错误码22。 + +如果使用格式如“iscsiadm -m node -p fe80::xxxx%enp3s0 -l”登录时,iscsi\_addr\_match函数会将地址“fe80::xxxx%enp3s0”与服务端返回的node信息中的地址“fe80::xxxx”对比,对比结果不匹配,导致登录失败。 + +因此,**iscsi-initiator-utils目前机制还不支持用链路本地地址(link-local address)登录iscsi服务端**。 + +#### 网卡down掉之后,IPv6地址丢失 + +##### 问题现象 + +通过ip link down+up网卡或ifconfig down+up网卡命令,将网卡down掉之后再上线,查看网卡上配置的ip地址,发现ipv4地址不丢失,而配置的IPv6地址丢失。 + +##### 原因分析 + +内核中的处理逻辑为如果网卡设置为down状态,会清空所有IPv4及IPv6地址,将网卡重新up之后,ipv4地址自动恢复,网卡上自动配置的IPv6链路本地地址也会恢复,但是其他IPv6地址默认会丢失。如果需要保留这些IPv6地址,可以通过“sysctl -w net.ipv6.conf.<网卡名\>.keep\_addr\_on\_down=1”来实现。 + +#### bond口已具有多个IPv6地址时,添加或删除IPv6地址耗时过久 + +##### 问题现象 + +下列方式配置或删除(包括flush)IPv6地址方式,X为动态变化的低16位,并且配置在bond口时,耗时会随已配置的IPv6地址数量成数倍增加。例如由4个物理网卡组成的bond口添加IPv6地址时,单线程添加删除3000 IPv6地址均需大概5分钟,而普通物理网卡耗时在10秒内。 + +``` +ip a add/del 192:168::18:X/64 dev DEVICE +``` + +##### 原因分析 + +bond口在添加IPv6地址时,会生成IPv6组播地址,并进行同步到所有的物理网卡上,此耗时会随IPv6数量增加而增加,导致耗时过长。 + +##### 解决方法 + +IPv6的组播地址是由IPv6地址的低24位与33-33-ff组合生成,组播地址过多会导致添加删除耗时增加,如果生成的组播地址为少量,耗时不会受此影响。 + +建议添加IPv6地址时,可保持低24位一致,保持高位变动,单网卡中仅需一个网段的一个地址即可与外部正常通信,此配置更符合常规使用。 + +#### Rsyslog在IPv4和IPv6混合使用场景中日志传输延迟 + +##### 问题现象 + +rsyslog客户端配置文件同时配置IPv4和IPv6地址,且端口配置相同的情况下,服务端收集log时会概率性出现日志打印延迟。 + +##### 原因分析 + +延迟是因为rsyslog内部存在缓冲队列机制,默认情况下需要缓冲区队列达到一定数量才会写入文件。 + +##### 解决方法 + +可在root权限下通过配置Direct模式,关闭缓冲队列机制解决该问题。在rsyslog远程传输服务端的/etc/rsyslog.d目录下新增的远程传输配置文件中,最开头增加如下配置: + +``` +$ActionQueueType Direct +$MainMsgQueueType Direct +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>- Direct模式减少队列大小为1,所以在队列中会保留1条日志到下次日志打印; +>- Direct模式会降低服务器端的rsyslog性能。 diff --git a/content/zh/docs/ApplicationDev/application-development.md b/docs/zh/docs/ApplicationDev/application-development.md similarity index 95% rename from content/zh/docs/ApplicationDev/application-development.md rename to docs/zh/docs/ApplicationDev/application-development.md index 21d1513b77eeacb2a4fe6da5049bb2796fe4fb2c..6abc3ddfa58ab2cfef92ef326f79582355be2469 100644 --- a/content/zh/docs/ApplicationDev/application-development.md +++ b/docs/zh/docs/ApplicationDev/application-development.md @@ -29,13 +29,13 @@ -

+

![](./figures/zh-cn_image_0229243712.png)

用于传递设备或环境安全警示信息,若不避免,可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。

“注意”不涉及人身伤害。

-

+

![](./figures/zh-cn_image_0229243671.png)

用于突出重要/关键信息、最佳实践和小窍门等。

“说明”不是安全警示信息,不涉及人身、设备及环境伤害。

@@ -80,7 +80,7 @@

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

-

{ x | y | ... }*

+

{ x | y | ... }\*

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

diff --git "a/content/zh/docs/ApplicationDev/figures/Add-file\351\241\265\351\235\242.png" b/docs/zh/docs/ApplicationDev/figures/add-file-page.png similarity index 100% rename from "content/zh/docs/ApplicationDev/figures/Add-file\351\241\265\351\235\242.png" rename to docs/zh/docs/ApplicationDev/figures/add-file-page.png diff --git "a/content/zh/docs/ApplicationDev/figures/Branch-Confirmation\351\241\265\351\235\242.png" b/docs/zh/docs/ApplicationDev/figures/branch-confirmation-page.png similarity index 100% rename from "content/zh/docs/ApplicationDev/figures/Branch-Confirmation\351\241\265\351\235\242.png" rename to docs/zh/docs/ApplicationDev/figures/branch-confirmation-page.png diff --git "a/content/zh/docs/ApplicationDev/figures/Create-Package\351\241\265\351\235\242.png" b/docs/zh/docs/ApplicationDev/figures/create-package-page.png similarity index 100% rename from "content/zh/docs/ApplicationDev/figures/Create-Package\351\241\265\351\235\242.png" rename to docs/zh/docs/ApplicationDev/figures/create-package-page.png diff --git "a/content/zh/docs/ApplicationDev/figures/\345\210\233\345\273\272\350\275\257\344\273\266\345\214\205\344\277\241\346\201\257\345\241\253\345\206\231\351\241\265\351\235\242.png" b/docs/zh/docs/ApplicationDev/figures/creating-a-software-package.png similarity index 100% rename from "content/zh/docs/ApplicationDev/figures/\345\210\233\345\273\272\350\275\257\344\273\266\345\214\205\344\277\241\346\201\257\345\241\253\345\206\231\351\241\265\351\235\242.png" rename to docs/zh/docs/ApplicationDev/figures/creating-a-software-package.png diff --git "a/content/zh/docs/ApplicationDev/figures/\345\210\240\351\231\244\345\255\220\345\267\245\347\250\213\344\270\255\350\275\257\344\273\266\345\214\205.png" b/docs/zh/docs/ApplicationDev/figures/deleting-a-software-package-from-a-subproject.png similarity index 100% rename from "content/zh/docs/ApplicationDev/figures/\345\210\240\351\231\244\345\255\220\345\267\245\347\250\213\344\270\255\350\275\257\344\273\266\345\214\205.png" rename to docs/zh/docs/ApplicationDev/figures/deleting-a-software-package-from-a-subproject.png diff --git "a/content/zh/docs/ApplicationDev/figures/Repositories\351\241\265\351\235\242.png" b/docs/zh/docs/ApplicationDev/figures/repositories-page.png similarity index 100% rename from "content/zh/docs/ApplicationDev/figures/Repositories\351\241\265\351\235\242.png" rename to docs/zh/docs/ApplicationDev/figures/repositories-page.png diff --git "a/content/zh/docs/ApplicationDev/figures/RPM\350\275\257\344\273\266\345\214\205\344\270\213\350\275\275\351\241\265\351\235\242.png" b/docs/zh/docs/ApplicationDev/figures/rpm-software-package-download-page.png similarity index 100% rename from "content/zh/docs/ApplicationDev/figures/RPM\350\275\257\344\273\266\345\214\205\344\270\213\350\275\275\351\241\265\351\235\242.png" rename to docs/zh/docs/ApplicationDev/figures/rpm-software-package-download-page.png diff --git "a/content/zh/docs/ApplicationDev/figures/succeeded\347\232\204\351\241\265\351\235\242.png" b/docs/zh/docs/ApplicationDev/figures/succeeded-page.png similarity index 100% rename from "content/zh/docs/ApplicationDev/figures/succeeded\347\232\204\351\241\265\351\235\242.png" rename to docs/zh/docs/ApplicationDev/figures/succeeded-page.png diff --git a/content/zh/docs/ApplicationDev/figures/zh-cn_image_0229243671.png b/docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243671.png similarity index 100% rename from content/zh/docs/ApplicationDev/figures/zh-cn_image_0229243671.png rename to docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243671.png diff --git a/content/zh/docs/ApplicationDev/figures/zh-cn_image_0229243702.png b/docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243702.png similarity index 100% rename from content/zh/docs/ApplicationDev/figures/zh-cn_image_0229243702.png rename to docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243702.png diff --git a/content/zh/docs/ApplicationDev/figures/zh-cn_image_0229243704.png b/docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243704.png similarity index 100% rename from content/zh/docs/ApplicationDev/figures/zh-cn_image_0229243704.png rename to docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243704.png diff --git a/content/zh/docs/ApplicationDev/figures/zh-cn_image_0229243712.png b/docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243712.png similarity index 100% rename from content/zh/docs/ApplicationDev/figures/zh-cn_image_0229243712.png rename to docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243712.png diff --git a/content/zh/docs/Installation/public_sys-resources/icon-caution.gif b/docs/zh/docs/ApplicationDev/public_sys-resources/icon-caution.gif similarity index 100% rename from content/zh/docs/Installation/public_sys-resources/icon-caution.gif rename to docs/zh/docs/ApplicationDev/public_sys-resources/icon-caution.gif diff --git a/content/zh/docs/Installation/public_sys-resources/icon-danger.gif b/docs/zh/docs/ApplicationDev/public_sys-resources/icon-danger.gif similarity index 100% rename from content/zh/docs/Installation/public_sys-resources/icon-danger.gif rename to docs/zh/docs/ApplicationDev/public_sys-resources/icon-danger.gif diff --git a/content/zh/docs/Quickstart/public_sys-resources/icon-note.gif b/docs/zh/docs/ApplicationDev/public_sys-resources/icon-note.gif similarity index 100% rename from content/zh/docs/Quickstart/public_sys-resources/icon-note.gif rename to docs/zh/docs/ApplicationDev/public_sys-resources/icon-note.gif diff --git a/content/zh/docs/Quickstart/public_sys-resources/icon-notice.gif b/docs/zh/docs/ApplicationDev/public_sys-resources/icon-notice.gif similarity index 100% rename from content/zh/docs/Quickstart/public_sys-resources/icon-notice.gif rename to docs/zh/docs/ApplicationDev/public_sys-resources/icon-notice.gif diff --git a/content/zh/docs/Installation/public_sys-resources/icon-tip.gif b/docs/zh/docs/ApplicationDev/public_sys-resources/icon-tip.gif similarity index 100% rename from content/zh/docs/Installation/public_sys-resources/icon-tip.gif rename to docs/zh/docs/ApplicationDev/public_sys-resources/icon-tip.gif diff --git a/content/zh/docs/Installation/public_sys-resources/icon-warning.gif b/docs/zh/docs/ApplicationDev/public_sys-resources/icon-warning.gif similarity index 100% rename from content/zh/docs/Installation/public_sys-resources/icon-warning.gif rename to docs/zh/docs/ApplicationDev/public_sys-resources/icon-warning.gif diff --git "a/content/zh/docs/ApplicationDev/\344\275\277\347\224\250GCC\347\274\226\350\257\221.md" "b/docs/zh/docs/ApplicationDev/\344\275\277\347\224\250GCC\347\274\226\350\257\221.md" similarity index 99% rename from "content/zh/docs/ApplicationDev/\344\275\277\347\224\250GCC\347\274\226\350\257\221.md" rename to "docs/zh/docs/ApplicationDev/\344\275\277\347\224\250GCC\347\274\226\350\257\221.md" index 6a987cb35038cf518d4e999e0a4a6844171d61a6..2681010c2b0fae8527a8744c879895625b7ee9ff 100644 --- "a/content/zh/docs/ApplicationDev/\344\275\277\347\224\250GCC\347\274\226\350\257\221.md" +++ "b/docs/zh/docs/ApplicationDev/\344\275\277\347\224\250GCC\347\274\226\350\257\221.md" @@ -307,12 +307,12 @@ $ gcc main.c libtest.so -o app.out 若使用下面搜索动态库的方式,则为了确保程序在运行时能够链接到动态库,需要通过如下三种方法中的任一种实现。 - 将动态库保存在标准目录下,例如 /usr/lib。 -- 把动态库所在路径libaryDIR增加到环境变量LD\_LIBRARY\_PATH中 - - $ export LD\_LIBRARY\_PATH=libraryDIR:$LD\_LIBRARY\_PATH - - >![](public_sys-resources/icon-note.gif) **说明:** - >LD\_LIBRARY\_PATH为动态库的环境变量。当运行动态库时,若动态库不在缺省文件夹(/lib 和/usr/lib)下,则需要指定环境变量LD\_LIBRARY\_PATH。 +- 把动态库所在路径libaryDIR增加到环境变量LD_LIBRARY_PATH中 + ``` + $ export LD_LIBRARY_PATH=libraryDIR:$LD_LIBRARY_PATH + ``` + >![](./public_sys-resources/icon-note.gif) **说明:** + >LD\_LIBRARY\_PATH为动态库的环境变量。当运行动态库时,若动态库不在缺省文件夹(/lib 和/usr/lib)下,则需要指定环境变量LD_LIBRARY_PATH。 - 把动态库所在路径libaryDIR增加 /etc/ld.so.conf中然后执行ldconfig或者以动态库所在路径libaryDIR为参数执行ldconfig。 diff --git "a/content/zh/docs/ApplicationDev/\344\275\277\347\224\250JDK\347\274\226\350\257\221.md" "b/docs/zh/docs/ApplicationDev/\344\275\277\347\224\250JDK\347\274\226\350\257\221.md" similarity index 99% rename from "content/zh/docs/ApplicationDev/\344\275\277\347\224\250JDK\347\274\226\350\257\221.md" rename to "docs/zh/docs/ApplicationDev/\344\275\277\347\224\250JDK\347\274\226\350\257\221.md" index 04b393703e35a00edab3461e7a81d8c154137dd6..362c714257edde54d5b6b83ff239eb3fdf0574a0 100644 --- "a/content/zh/docs/ApplicationDev/\344\275\277\347\224\250JDK\347\274\226\350\257\221.md" +++ "b/docs/zh/docs/ApplicationDev/\344\275\277\347\224\250JDK\347\274\226\350\257\221.md" @@ -38,17 +38,17 @@ JDK(Java Development Kit)是 Java 开发者进行 Java 开发所必须的软

.java

-

java语言源代码文件。

+

Java语言源代码文件。

.class

-

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

+

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

.jar

-

java的jar压缩文件。

+

Java的jar压缩文件。

diff --git "a/content/zh/docs/ApplicationDev/\344\275\277\347\224\250make\347\274\226\350\257\221.md" "b/docs/zh/docs/ApplicationDev/\344\275\277\347\224\250make\347\274\226\350\257\221.md" similarity index 100% rename from "content/zh/docs/ApplicationDev/\344\275\277\347\224\250make\347\274\226\350\257\221.md" rename to "docs/zh/docs/ApplicationDev/\344\275\277\347\224\250make\347\274\226\350\257\221.md" diff --git "a/content/zh/docs/ApplicationDev/\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" "b/docs/zh/docs/ApplicationDev/\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" similarity index 83% rename from "content/zh/docs/ApplicationDev/\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" rename to "docs/zh/docs/ApplicationDev/\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" index a08946a37e886d5c20ac895c0020585773ea8fd4..ce182f6c3e95b41a39a1fe82089ddaee67819a9d 100644 --- "a/content/zh/docs/ApplicationDev/\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" +++ "b/docs/zh/docs/ApplicationDev/\345\274\200\345\217\221\347\216\257\345\242\203\345\207\206\345\244\207.md" @@ -1,24 +1,9 @@ # 开发环境准备 - - -- [开发环境准备](#开发环境准备) - - [环境要求](#环境要求) - - [操作系统要求](#操作系统要求) - - [配置openEuler yum源(软件源)](#配置openeuler-yum源软件源) - - [通过直接获取在线的openEuler repo源配置在线yum源](#通过直接获取在线的openeuler-repo源配置在线yum源) - - [通过挂载ISO创建本地openEuler repo源配置本地yum源](#通过挂载iso创建本地openeuler-repo源配置本地yum源) - - [安装软件包](#安装软件包) - - [安装JDK软件包](#安装jdk软件包) - - [安装rpm-build软件包](#安装rpm-build软件包) - - [使用IDE进行Java开发](#使用ide进行java开发) - - [简介](#简介) - - [使用MobaXterm登录服务器](#使用mobaxterm登录服务器) - - [设置JDK环境](#设置jdk环境) - - [下载安装GTK库](#下载安装gtk库) - - [设置X11 Forwarding](#设置x11-forwarding) - - [下载并运行IntelliJ IDEA](#下载并运行intellij-idea) - - + +- [环境要求](#环境要求) +- [配置openEuler yum源(软件源)](#配置openEuler_yum源_(软件源)) +- [安装软件包](#安装软件包) +- [使用IDE进行Java开发](#使用IDE进行Java开发) ## 环境要求 @@ -58,7 +43,7 @@

硬盘

-

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

+

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

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

@@ -115,7 +100,7 @@ 操作系统要求为openEuler操作系统。 -openEuler操作系统具体安装方法请参考[openEuler 20.09 安装指南]({{< relref "../Installation/Installation.md" >}}),其中“软件选择”页面的“已选环境的附加选项”中将“开发工具”勾选。 +openEuler操作系统具体安装方法请参考[openEuler 20.03 LTS SP2 安装指南](./../Installation/installation.md),其中“软件选择”页面的“已选环境的附加选项”中将“开发工具”勾选。 ## 配置openEuler yum源(软件源) @@ -123,39 +108,42 @@ openEuler操作系统具体安装方法请参考[openEuler 20.09 安装指南]({ ### 通过直接获取在线的openEuler repo源配置在线yum源 ->![](public_sys-resources/icon-note.gif) **说明:** ->openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装]({{< relref "../Releasenotes/系统安装.md" >}})。本操作以AArch64架构的OS repo源为例将其配置为yum源。 +>![](./public_sys-resources/icon-note.gif) **说明:** +>openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](./../Releasenotes/系统安装.md)。本操作以AArch64架构的OS repo源为例将其配置为yum源。 1. 进入到yum源目录并查看目录下的.repo配置文件。 ``` $ cd /etc/yum.repos.d $ ls - openEuler.repo + openEuler_aarch64.repo ``` -2. 在root权限下编辑openEuler.repo文件,将在线的openEuler repo源配置为yum源。 +2. 在root权限下编辑openEuler_aarch64.repo文件,将在线的openEuler repo源配置为yum源。 ``` - # vi openEuler.repo + # vi openEuler_aarch64.repo ``` - 编辑openEuler.repo文件的内容如下: + 编辑openEuler_aarch64.repo文件的内容如下: ``` [osrepo] + name=osrepo - baseurl=http://repo.openeuler.org/openEuler-20.09/OS/aarch64/ + + baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/aarch64/ + enabled=1 gpgcheck=1 - gpgkey=http://repo.openeuler.org/openEuler-20.09/OS/aarch64/RPM-GPG-KEY-openEuler + gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/aarch64/RPM-GPG-KEY-openEuler ``` **** - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** > - \[*repoid*\]中的repoid为软件仓库(repository)的ID号,所有.repo配置文件中的各repoid不能重复,必须唯一。示例中repoid设置为**osrepo**。 > - name为软件仓库描述的字符串。 > - baseurl为软件仓库的地址。 @@ -165,23 +153,23 @@ openEuler操作系统具体安装方法请参考[openEuler 20.09 安装指南]({ ### 通过挂载ISO创建本地openEuler repo源配置本地yum源 ->![](public_sys-resources/icon-note.gif) **说明:** ->openEuler提供了多种ISO发布包,各ISO发布包含义可参考[系统安装]({{< relref "../Releasenotes/系统安装.md" >}})。本操作以openEuler-20.09-aarch64-dvd.iso发布包和openEuler-20.09-aarch64-dvd.iso.sha256sum校验文件为例,请根据实际需要的ISO发布包和校验文件进行修改。 +>![](./public_sys-resources/icon-note.gif) **说明:** +>openEuler提供了多种ISO发布包,各ISO发布包含义可参考[系统安装](./../Releasenotes/系统安装.md\)。本操作以openEuler-20.03-LTS-SP2-aarch64-dvd.iso发布包和openEuler-20.03-LTS-SP2-aarch64-dvd.iso.sha256sum校验文件为例,请根据实际需要的ISO发布包和校验文件进行修改。 1. 下载ISO发布包。 - 通过跨平台文件传输工具下载ISO镜像 1. 登录openEuler社区,网址为:[https://openeuler.org](https://openeuler.org)。 2. 单击“下载”,进入下载页面。 3. 单击“获取ISO:”后面的“Link”,显示版本列表。 - 4. 选择需要下载的版本,如openEuler 20.09,则单击“openEuler-20.09”,进入下载列表。 + 4. 选择需要下载的版本,如openEuler 20.03 LTS SP2,则单击“openEuler-20.03-LTS-SP2”,进入下载列表。 5. 单击“ISO”,进入ISO下载列表。 - aarch64:AArch64架构的ISO。 - x86\_64:x86\_64架构的ISO。 - source:openEuler源码ISO。 6. 单击“aarch64”。 - 7. 单击“openEuler-20.09-aarch64-dvd.iso”,将openEuler发布包下载到本地。 - 8. 单击“openEuler-20.09-aarch64-dvd.iso.sha256sum”,将openEuler校验文件下载到本地。 + 7. 单击“openEuler-20.03-LTS-SP2-aarch64-dvd.iso”,将openEuler发布包下载到本地。 + 8. 单击“openEuler-20.03-LTS-SP2-aarch64-dvd.iso.sha256sum”,将openEuler校验文件下载到本地。 9. 登录openEuler操作系统,新建用于存放发布包和检验文件的目录,如“~/iso”。 ``` @@ -194,15 +182,15 @@ openEuler操作系统具体安装方法请参考[openEuler 20.09 安装指南]({ 1. 登录openEuler社区,网址为:[https://openeuler.org](https://openeuler.org)。 2. 单击“下载”,进入下载页面。 3. 单击“获取ISO:”后面的“Link”,显示版本列表。 - 4. 选择需要下载的版本,如openEuler 20.03 LTS,则单击“openEuler-20.09”,进入下载列表。 + 4. 选择需要下载的版本,如openEuler 20.03 LTS SP2,则单击“openEuler-20.03-LTS-SP2”,进入下载列表。 5. 单击“ISO”,进入ISO下载列表。 - aarch64:AArch64架构的ISO。 - x86\_64:x86\_64架构的ISO。 - source:openEuler源码ISO。 6. 单击“aarch64”。 - 7. 右键单击“openEuler-20.09-aarch64-dvd.iso”,单击“复制链接地址”,将openEuler发布包地址记录好。 - 8. 右键单击“openEuler-20.09-aarch64-dvd.iso.sha256sum”,单击“复制链接地址”,将openEuler校验文件地址记录好。 + 7. 右键单击“openEuler-20.03-LTS-SP2-aarch64-dvd.iso”,单击“复制链接地址”,将openEuler发布包地址记录好。 + 8. 右键单击“openEuler-20.03-LTS-SP2-aarch64-dvd.iso.sha256sum”,单击“复制链接地址”,将openEuler校验文件地址记录好。 9. 登录openEuler操作系统,新建用于存放发布包和检验文件的目录,如“~/iso”,并切换到该目录。 ``` @@ -222,13 +210,13 @@ openEuler操作系统具体安装方法请参考[openEuler 20.09 安装指南]({ 1. 获取校验文件中的校验值。 ``` - $ cat openEuler-20.09-aarch64-dvd.iso.sha256sum + $ cat openEuler-20.03-LTS-SP2-aarch64-dvd.iso.sha256sum ``` 2. 计算openEuler发布包的sha256校验值。 ``` - $ sha256sum openEuler-20.09-aarch64-dvd.iso + $ sha256sum openEuler-20.03-LTS-SP2-aarch64-dvd.iso ``` 命令执行完成后,输出校验值。 @@ -244,7 +232,7 @@ openEuler操作系统具体安装方法请参考[openEuler 20.09 安装指南]({ 示例如下: ``` - # mount /home/iso/openEuler-20.09-aarch64-dvd.iso /mnt/ + # mount /home/iso/openEuler-20.03-LTS-SP2-aarch64-dvd.iso /mnt/ ``` 挂载好的mnt目录如下: @@ -268,25 +256,29 @@ openEuler操作系统具体安装方法请参考[openEuler 20.09 安装指南]({ ``` $ cd /etc/yum.repos.d $ ls - openEuler.repo + openEuler_aarch64.repo ``` -2. 在root权限下编辑openEuler.repo文件,将[3](#li6236932222)中创建的repo源配置为本地yum源。 +2. 在root权限下编辑openEuler_aarch64.repo文件,将[3](#li6236932222)中创建的repo源配置为本地yum源。 ``` - # vi openEuler.repo + # vi openEuler_aarch64.repo ``` - 编辑openEuler.repo文件的内容如下: + 编辑openEuler_aarch64.repo文件的内容如下: ``` - [localosrepo] + [localosrepo] + name=localosrepo + baseurl=file:///mnt + enabled=1 + gpgcheck=1 - gpgkey=file:///mnt/RPM-GPG-KEY-openEuler - ``` + gpgkey=file:///mnt/RPM-GPG-KEY-openEuler + ``` @@ -323,7 +315,7 @@ openEuler操作系统具体安装方法请参考[openEuler 20.09 安装指南]({ $ dnf search jdk | grep jdk ``` - 查看命令打印信息,选择安装java-x.x.x-openjdk-devel.aarch64软件包。其中x.x.x为版本号。 + 查看命令打印信息,选择安装java-x.x.x-openjdk-devel.aarch64软件包。其中x.x.x为版本号,同时支持openjdk 1.8、openjdk 11和 openjdk latest 版本。 5. 在root权限下安装JDK软件包,以安装java-1.8.0-openjdk-devel软件包为例。 diff --git "a/content/zh/docs/ApplicationDev/\346\236\204\345\273\272RPM\345\214\205.md" "b/docs/zh/docs/ApplicationDev/\346\236\204\345\273\272RPM\345\214\205.md" similarity index 97% rename from "content/zh/docs/ApplicationDev/\346\236\204\345\273\272RPM\345\214\205.md" rename to "docs/zh/docs/ApplicationDev/\346\236\204\345\273\272RPM\345\214\205.md" index e8251e05948a8ccce8c978014fc84e26a71ca12c..a9034047104deb68cbc7291e4860655f695971e1 100644 --- "a/content/zh/docs/ApplicationDev/\346\236\204\345\273\272RPM\345\214\205.md" +++ "b/docs/zh/docs/ApplicationDev/\346\236\204\345\273\272RPM\345\214\205.md" @@ -1,6 +1,6 @@ # 构建RPM包 -本章介绍通过本地或OBS构建RPM软件包的方法。详见[打包规则](https://gitee.com/openeuler/community/blob/master/zh/contributors/packaging.md)。 +本章介绍通过本地或OBS构建RPM软件包的方法。详见[打包规则](https://gitee.com/openeuler/community/blob/master/zh/contributors/packaging.md\)。 - [构建RPM包](#构建rpm包) @@ -27,7 +27,7 @@ RPM打包的时候需要编译源码,需要把编译好的配置文件、二 $ rpmdev-setuptree ``` -rpmdev-setuptree这个命令就是安装 rpmdevtools 带来的。可以看到运行了这个命令之后,在“/root“目录(非root用户为“/home/用户名“目录)下多了一个 rpmbuild 的文件夹,目录结构如下: +rpmdev-setuptree这个命令就是安装 rpmdevtools 带来的。可以看到运行了这个命令之后,在"/root"目录(非root用户为"/home/用户名"目录)下多了一个 rpmbuild 的文件夹,目录结构如下: ``` $ tree rpmbuild @@ -404,7 +404,7 @@ $ vi hello.spec ``` Name: hello Version: 2.10 -Release: 1%{?dist} +Release: Summary: The "Hello World" program from GNU Summary(zh_CN): GNU "Hello World" 程序 License: GPLv3+ @@ -510,7 +510,7 @@ OBS使用工程组织软件包。基础的权限控制、相关的存仓库和 #### 构建已有软件包 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >- 若为首次使用,请首先在OBS网页注册个人账号。 >- 该方法需要拷贝修改后的代码,因此,请在执行下述操作前完成代码修改并提交到正确的代码路径。代码路径会在\_service文件中指定。 @@ -523,7 +523,7 @@ OBS使用工程组织软件包。基础的权限控制、相关的存仓库和 5. 单击“Branch package”,在弹出的确认页面单击“Accept”确认创建子工程,如[图1](#fig77646143214)所示。 **图 1** Branch Confirmation页面 - ![](figures/Branch-Confirmation页面.png "Branch-Confirmation页面") + ![](./figures/branch-confirmation-page.png) 6. 单击“\_service”文件进入编辑页面,修改\_service内容后点击“Save”保存该文件。\_service内容示例如下,其中 _userCodeURL_、 _userCommitID_ 分别为用户代码托管路径、用户代码提交版本号或分支。 @@ -541,14 +541,14 @@ OBS使用工程组织软件包。基础的权限控制、相关的存仓库和 ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >单击“Save”保存\_service文件后,OBS服务会根据\_service文件描述,从指定的url下载源码到OBS对应工程的软件目录下并替换原有文件,例如上述例子中 “openEuler:Mainline”工程的kernel目录。 7. 文件拷贝并替换完成后,OBS会自动开始构建RPM软件包。等待构建完成,并查看右侧状态栏的构建状态。 - succeeded:构建成功。用户可以单击“succeeded”查看构建日志,如[图2](#fig10319114217337)所示。 **图 2** succeeded的页面 - ![](figures/succeeded的页面.png "succeeded的页面") + ![](./figures/succeeded-page.png) - failed:构建失败。请单击“failed”查看错误日志进行问题定位后重新构建。 - unresolvable:未进行构建,可能由于缺失依赖。 @@ -567,23 +567,23 @@ OBS使用工程组织软件包。基础的权限控制、相关的存仓库和 5. 单击“Delete package”,删除新创建子工程中的软件包,如[图3](#fig18306181103615)所示。 **图 3** 删除子工程中软件包 - ![](figures/删除子工程中软件包.png "删除子工程中软件包") + ![](./figures/deleting-a-software-package-from-a-subproject.png) - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >通过已有软件创建新工程是为了继承环境等依赖,而不需要实际的文件,所以这里需要把这些文件删除。 6. 单击“Create Package”,在弹出的页面输入软件包名称、标题和软件包描述,然后单击“Create”创建软件包,分别如[图4](#fig6762111693811)、[图5](#fig18351153518389)所示。 **图 4** Create Package页面 - ![](figures/Create-Package页面.png "Create-Package页面") + ![](./figures/create-package-page.png) **图 5** 创建软件包信息填写页面 - ![](figures/创建软件包信息填写页面.png "创建软件包信息填写页面") + ![](./figures/creating-a-software-package.png) 7. 在页面中单击“Add file”上传spec文件和需要编译的文件(在spec文件中指定),如[图6](#fig1475845284011)所示。 **图 6** Add file页面 - ![](figures/Add-file页面.png "Add-file页面") + ![](./figures/add-file-page.png) 8. 文件上传成功后,OBS会自动开始构建RPM软件包。等待构建完成,并查看右侧状态栏的构建状态。 - succeed:构建成功。用户可以单击“succeeded”查看构建日志。 @@ -601,15 +601,15 @@ RPM软件包构建完成后,通过网页端获取对应RPM软件包的方法 2. 单击“All Projects”找到所需软件包的对应工程,例如“openEuler:Mainline”。 3. 在工程下单击所需软件包的包名,进入该软件包详请页面。例如上述例子中的kernel页面。 -1. 选择Repositories页签进入软件包的软件仓库管理页面,在Publish Flag中通过单击选择“Enable”开启(状态由![](figures/zh-cn_image_0229243704.png)变为![](figures/zh-cn_image_0229243702.png))对应的RPM软件包下载功能,如[图7](#fig17480830144217)所示。 +1. 选择Repositories页签进入软件包的软件仓库管理页面,在Publish Flag中通过单击选择“Enable”开启(状态由![](./figures/zh-cn_image_0229243704.png)变为![](./figures/zh-cn_image_0229243702.png))对应的RPM软件包下载功能,如[图7](#fig17480830144217)所示。 **图 7** Repositories页面 - ![](figures/Repositories页面.png "Repositories页面") + ![](./figures/repositories-page.png) 2. 单击Repository列的构建工程名称,进入RPM软件包下载页面,单击RPM软件包右侧的“Download”即可下载对应RPM软件包,如[图8](#fig12152145615438)所示。 **图 8** RPM软件包下载页面 - ![](figures/RPM软件包下载页面.png "RPM软件包下载页面") + ![](./figures/rpm-software-package-download-page.png) ### 使用osc构建软件包 @@ -630,7 +630,7 @@ RPM软件包构建完成后,通过网页端获取对应RPM软件包的方法 # dnf install osc build ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >编译RPM软件包的过程中会依赖build。 2. 配置osc。 @@ -711,25 +711,31 @@ RPM软件包构建完成后,通过网页端获取对应RPM软件包的方法 $ osc addremove * ``` -2. 修改源代码和spec文件,并将对应软件包的所有修改同步到OBS服务器。参考命令如下,-m参数后的信息为提交记录。 +2. 修改源代码和spec文件,并执行如下命令更新文件。 + + ``` + $ osc up + ``` + +3. 将对应软件包的所有修改同步到OBS服务器。参考命令如下,-m参数后的信息为提交记录。 ``` $ osc ci -m "commit log" ``` -3. 获取当前工程的仓库名称和架构,参考命令如下: +4. 获取当前工程的仓库名称和架构,参考命令如下: ``` $ osc repos home:testUser:branches:openEuler:Mainline ``` -4. 修改提交成功后,OBS会自动开始编译软件包。可以通过如下命令,查看对应仓库的编译日志,其中 _standard_aarch64_ 、 _aarch64_ 分别为查询所得仓库名称和架构。 +5. 修改提交成功后,OBS会自动开始编译软件包。可以通过如下命令,查看对应仓库的编译日志,其中 _standard_aarch64_ 、 _aarch64_ 分别为查询所得仓库名称和架构。 ``` $ osc buildlog standard_aarch64 aarch64 ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >用户也可以通过网页端打开自己创建的对应工程,查看构建日志。 @@ -785,7 +791,7 @@ RPM软件包构建完成后,通过网页端获取对应RPM软件包的方法 $ osc buildlog standard_aarch64 aarch64 ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >用户也可以通过网页端打开自己创建的对应工程,查看构建日志。 @@ -804,5 +810,5 @@ $ osc getbinaries home:testUser:branches:openEuler:Mainline my-first-obs-package - _standard\_aarch64_ :仓库名称 - _aarch64_ :仓库架构名称 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >使用osc构建的软件包也可以在网页端获取,获取方式请参见[获取软件包](#获取软件包)。 diff --git "a/content/zh/docs/Container/CRI\346\216\245\345\217\243.md" "b/docs/zh/docs/Container/CRI\346\216\245\345\217\243.md" similarity index 99% rename from "content/zh/docs/Container/CRI\346\216\245\345\217\243.md" rename to "docs/zh/docs/Container/CRI\346\216\245\345\217\243.md" index 26b0321a4da95e83bf5b7b2e65d1c5fe10280ab4..d5dc8d1ecca6fd668a7e37de20ea4c2a379699d1 100644 --- "a/content/zh/docs/Container/CRI\346\216\245\345\217\243.md" +++ "b/docs/zh/docs/Container/CRI\346\216\245\345\217\243.md" @@ -45,7 +45,7 @@ CRI API 接口是由kubernetes 推出的容器运行时接口,CRI定义了容 ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出入,以本文档描述的接口为准。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >CRI接口websocket流式服务,服务端侦听地址为127.0.0.1,端口为10350,端口可通过命令行--websocket-server-listening-port参数接口或者daemon.json配置文件进行配置。 ## 接口 @@ -1722,7 +1722,7 @@ rpc RunPodSandbox(RunPodSandboxRequest) returns (RunPodSandboxResponse) {} #### 注意事项 1. 启动sandbox的默认镜像为rnd-dockerhub.huawei.com/library/pause-$\{machine\}:3.0, 其中$\{machine\}为架构,在x86\_64上,machine的值为amd64,在arm64上,machine的值为aarch64,当前rnd-dockerhub仓库上只有amd64和aarch64镜像可供下载,若机器上无此镜像,请确保机器能从rnd-dockerhub下载,若要使用其它镜像,请参考“iSulad部署配置”中的pod-sandbox-image指定镜像。 -2. 由于容器命名以PodSandboxMetadata中的字段为来源,且以下划线"\_"为分割字符,因此限制metadata中的数据不能包含下划线,否则会出现sandbox运行成功,但无法使用ListPodSandbox接口查询的现象。 +2. 由于容器命名以PodSandboxMetadata中的字段为来源,且以下划线“\_”为分割字符,因此限制metadata中的数据不能包含下划线,否则会出现sandbox运行成功,但无法使用ListPodSandbox接口查询的现象。 #### 参数 @@ -1977,7 +1977,7 @@ grpc::Status CreateContainer(grpc::ServerContext *context, const runtime::Create

string pod_sandbox_id

-

待在其中创建容器的PodSandbox的ID。

+

待在其中创建容器的PodSandbox的ID

ContainerConfig config

diff --git "a/content/zh/docs/Container/Docker\345\256\271\345\231\250.md" "b/docs/zh/docs/Container/Docker\345\256\271\345\231\250.md" similarity index 91% rename from "content/zh/docs/Container/Docker\345\256\271\345\231\250.md" rename to "docs/zh/docs/Container/Docker\345\256\271\345\231\250.md" index c6d46c4ffb1d9f71dd6be3be7947412bfcd0d66b..07b0b5833155d630566cd03b73f66148baea5e73 100644 --- "a/content/zh/docs/Container/Docker\345\256\271\345\231\250.md" +++ "b/docs/zh/docs/Container/Docker\345\256\271\345\231\250.md" @@ -1,9 +1,9 @@ -# Docker容器 - -Docker是一个开源的Linux容器引擎项目, 用以实现应用的快速打包、部署和交付。Docker的英文本意是码头工人,码头工人的工作就是将商品打包到container\(集装箱\)并且搬运container、装载container。 对应到Linux中,Docker就是将app打包到container,通过container实现app在各种平台上的部署、运行。Docker通过Linux Container技术将app变成一个标准化的、可移植的、自管理的组件,从而实现应用的“一次构建,到处运行”。Docker技术特点就是:应用快速发布、部署简单、管理方便,应用密度更高。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->Docker容器的安装和使用需要root权限。 - - - +# Docker容器 + +Docker是一个开源的Linux容器引擎项目, 用以实现应用的快速打包、部署和交付。Docker的英文本意是码头工人,码头工人的工作就是将商品打包到container\(集装箱\)并且搬运container、装载container。 对应到Linux中,Docker就是将app打包到container,通过container实现app在各种平台上的部署、运行。Docker通过Linux Container技术将app变成一个标准化的、可移植的、自管理的组件,从而实现应用的“一次构建,到处运行”。Docker技术特点就是:应用快速发布、部署简单、管理方便,应用密度更高。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>Docker容器的安装和使用需要root权限。 + + + diff --git "a/content/zh/docs/Container/cgroup\350\267\257\345\276\204\345\217\257\351\205\215\347\275\256.md" "b/docs/zh/docs/Container/cgroup\350\267\257\345\276\204\345\217\257\351\205\215\347\275\256.md" similarity index 99% rename from "content/zh/docs/Container/cgroup\350\267\257\345\276\204\345\217\257\351\205\215\347\275\256.md" rename to "docs/zh/docs/Container/cgroup\350\267\257\345\276\204\345\217\257\351\205\215\347\275\256.md" index 97bc19b7ff48e23587c93512b5dffc8391cc1d67..d737c0cd97db19684ae5821a30045bc5e51ef071 100644 --- "a/content/zh/docs/Container/cgroup\350\267\257\345\276\204\345\217\257\351\205\215\347\275\256.md" +++ "b/docs/zh/docs/Container/cgroup\350\267\257\345\276\204\345\217\257\351\205\215\347\275\256.md" @@ -1,11 +1,11 @@ -# cgroup路径可配置 -## 功能描述 - -系统容器提供在宿主机上进行容器资源隔离和预留的能力。通过\--cgroup-parent参数,可以将容器使用的cgroup目录指定到某个特定目录下,从而达到灵活分配宿主机资源的目的。例如可以设置容器a、b、c的cgroup父路径为/lxc/cgroup1,容器d、e、f的cgroup父路径为/lxc/cgroup2,这样通过cgroup路径将容器分为两个group,实现容器cgroup组层面的资源隔离。 - -## 参数说明 - - +# cgroup路径可配置 +## 功能描述 + +系统容器提供在宿主机上进行容器资源隔离和预留的能力。通过\--cgroup-parent参数,可以将容器使用的cgroup目录指定到某个特定目录下,从而达到灵活分配宿主机资源的目的。例如可以设置容器a、b、c的cgroup父路径为/lxc/cgroup1,容器d、e、f的cgroup父路径为/lxc/cgroup2,这样通过cgroup路径将容器分为两个group,实现容器cgroup组层面的资源隔离。 + +## 参数说明 + + -

命令

参数

@@ -22,11 +22,11 @@
- -除了通过命令行指定单个系统容器对应的cgroup父路径外,还可通过修改iSulad容器引擎启动配置文件,指定所有容器的cgroup路径。 - - + + +除了通过命令行指定单个系统容器对应的cgroup父路径外,还可通过修改iSulad容器引擎启动配置文件,指定所有容器的cgroup路径。 + + -

配置文件路径

配置项

@@ -43,53 +43,53 @@
- -## 约束限制 - -- 如果daemon端和客户端都设置了cgroup parent参数,最终以客户端指定的\--cgroup-parent生效。 -- 如果已启动容器A,然后启动容器B,容器B的cgroup父路径指定为容器A的cgroup路径,在删除容器的时候需要先删除容器B再删除容器A,否则会导致cgroup资源残留。 - -## 使用示例 - -启动系统容器,指定--cgroup-parent参数: - -``` -[root@localhost ~]# isula run -tid --cgroup-parent /lxc/cgroup123 --system-container --external-rootfs /root/myrootfs none init -115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e -``` - -查看容器init进程的cgroup信息: - -``` -[root@localhost ~]# isula inspect -f "{{json .State.Pid}}" 11 -22167 -[root@localhost ~]# cat /proc/22167/cgroup -13:blkio:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e -12:perf_event:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e -11:cpuset:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e -10:pids:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e -9:rdma:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e -8:devices:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e -7:hugetlb:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e -6:memory:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e -5:net_cls,net_prio:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e -4:cpu,cpuacct:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e -3:files:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e -2:freezer:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e -1:name=systemd:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e/init.scope -0::/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e -``` - -可以看到容器的cgroup父路径被设置为/sys/fs/cgroup//lxc/cgroup123 - -同时,对于所有容器cgroup父路径的设置可以配置一下容器daemon文件,例如: - -``` -{ - "cgroup-parent": "/lxc/cgroup123", -} -``` - -然后重启容器引擎,配置生效。 - + + +## 约束限制 + +- 如果daemon端和客户端都设置了cgroup parent参数,最终以客户端指定的\--cgroup-parent生效。 +- 如果已启动容器A,然后启动容器B,容器B的cgroup父路径指定为容器A的cgroup路径,在删除容器的时候需要先删除容器B再删除容器A,否则会导致cgroup资源残留。 + +## 使用示例 + +启动系统容器,指定--cgroup-parent参数: + +``` +[root@localhost ~]# isula run -tid --cgroup-parent /lxc/cgroup123 --system-container --external-rootfs /root/myrootfs none init +115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +``` + +查看容器init进程的cgroup信息: + +``` +[root@localhost ~]# isula inspect -f "{{json .State.Pid}}" 11 +22167 +[root@localhost ~]# cat /proc/22167/cgroup +13:blkio:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +12:perf_event:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +11:cpuset:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +10:pids:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +9:rdma:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +8:devices:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +7:hugetlb:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +6:memory:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +5:net_cls,net_prio:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +4:cpu,cpuacct:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +3:files:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +2:freezer:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +1:name=systemd:/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e/init.scope +0::/lxc/cgroup123/115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e +``` + +可以看到容器的cgroup父路径被设置为/sys/fs/cgroup//lxc/cgroup123 + +同时,对于所有容器cgroup父路径的设置可以配置一下容器daemon文件,例如: + +``` +{ + "cgroup-parent": "/lxc/cgroup123", +} +``` + +然后重启容器引擎,配置生效。 + diff --git a/content/zh/docs/Container/container.md b/docs/zh/docs/Container/container.md similarity index 97% rename from content/zh/docs/Container/container.md rename to docs/zh/docs/Container/container.md index 72e34041ee1ac1eeebcdb11b258e6d5dac3d27f6..c86353b2a248e0fa2233e64b712164bc2c68c82a 100644 --- a/content/zh/docs/Container/container.md +++ b/docs/zh/docs/Container/container.md @@ -1,18 +1,18 @@ -## 概述 - -openEuler软件包中同时提供了轻量化容器引擎iSulad与docker engine两种容器引擎。 - -同时根据不同使用场景,提供多种容器形态,包括: - -- 适合大部分通用场景的普通容器 -- 适合强隔离与多租户场景的安全容器 -- 适合使用systemd管理容器内业务场景的系统容器 - -本文档提供容器引擎的安装和使用方法以及各个容器形态的部署使用方法。 - -## 读者对象 - -本文档主要适用于使用openEuler并需要安装容器的用户。用户需要具备以下经验和技能: - -- 熟悉Linux基本操作 +## 概述 + +openEuler软件包中同时提供了轻量化容器引擎iSulad与docker engine两种容器引擎。 + +同时根据不同使用场景,提供多种容器形态,包括: + +- 适合大部分通用场景的普通容器 +- 适合强隔离与多租户场景的安全容器 +- 适合使用systemd管理容器内业务场景的系统容器 + +本文档提供容器引擎的安装和使用方法以及各个容器形态的部署使用方法。 + +## 读者对象 + +本文档主要适用于使用openEuler并需要安装容器的用户。用户需要具备以下经验和技能: + +- 熟悉Linux基本操作 - 对容器有一定了解 \ No newline at end of file diff --git a/docs/zh/docs/Container/figures/isula-build_arch.png b/docs/zh/docs/Container/figures/isula-build_arch.png new file mode 100644 index 0000000000000000000000000000000000000000..911a9ae6f46988586ab49f15de282948f5470c37 Binary files /dev/null and b/docs/zh/docs/Container/figures/isula-build_arch.png differ diff --git a/docs/zh/docs/Container/figures/kata-arch.png b/docs/zh/docs/Container/figures/kata-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..db0f0112328013505ec11ace1ad5c0077cf7ea40 Binary files /dev/null and b/docs/zh/docs/Container/figures/kata-arch.png differ diff --git "a/content/zh/docs/Container/figures/\345\256\211\345\205\250\345\256\271\345\231\250\344\270\216\345\221\250\350\276\271\347\273\204\344\273\266\347\232\204\345\205\263\347\263\273.png" b/docs/zh/docs/Container/figures/sec-container.png similarity index 100% rename from "content/zh/docs/Container/figures/\345\256\211\345\205\250\345\256\271\345\231\250\344\270\216\345\221\250\350\276\271\347\273\204\344\273\266\347\232\204\345\205\263\347\263\273.png" rename to docs/zh/docs/Container/figures/sec-container.png diff --git a/content/zh/docs/Container/figures/zh-cn_image_0183048952.png b/docs/zh/docs/Container/figures/zh-cn_image_0183048952.png similarity index 100% rename from content/zh/docs/Container/figures/zh-cn_image_0183048952.png rename to docs/zh/docs/Container/figures/zh-cn_image_0183048952.png diff --git a/content/zh/docs/Container/figures/zh-cn_image_0221924926.png b/docs/zh/docs/Container/figures/zh-cn_image_0221924926.png similarity index 100% rename from content/zh/docs/Container/figures/zh-cn_image_0221924926.png rename to docs/zh/docs/Container/figures/zh-cn_image_0221924926.png diff --git a/content/zh/docs/Container/figures/zh-cn_image_0221924927.png b/docs/zh/docs/Container/figures/zh-cn_image_0221924927.png similarity index 100% rename from content/zh/docs/Container/figures/zh-cn_image_0221924927.png rename to docs/zh/docs/Container/figures/zh-cn_image_0221924927.png diff --git "a/content/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216.md" "b/docs/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216.md" similarity index 91% rename from "content/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216.md" rename to "docs/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216.md" index 51486cb5ee2f391e11455f67c81d9a47aede5d60..3386c47f47f6dfa6374eea93d6e38dd19360eb4b 100644 --- "a/content/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216.md" +++ "b/docs/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216.md" @@ -1,11 +1,11 @@ -# iSula容器引擎 - -iSula通用容器引擎相比Docker,是一种新的容器解决方案,提供统一的架构设计来满足CT和IT领域的不同需求。相比Golang编写的Docker,轻量级容器使用C/C++实现,具有轻、灵、巧、快的特点,不受硬件规格和架构的限制,底噪开销更小,可应用领域更为广泛。 - -容器统一架构如[图1](#zh-cn_topic_0182207099_fig10763114141217)所示。 - -**图 1** 容器统一架构 - - -![](figures/zh-cn_image_0183048952.png) - +# iSula容器引擎 + +iSula通用容器引擎相比Docker,是一种新的容器解决方案,提供统一的架构设计来满足CT和IT领域的不同需求。相比Golang编写的Docker,轻量级容器使用C/C++实现,具有轻、灵、巧、快的特点,不受硬件规格和架构的限制,底噪开销更小,可应用领域更为广泛。 + +容器统一架构如[图1](#zh-cn_topic_0182207099_fig10763114141217)所示。 + +**图 1** 容器统一架构 + + +![](./figures/zh-cn_image_0183048952.png) + diff --git "a/docs/zh/docs/Container/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" "b/docs/zh/docs/Container/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" new file mode 100644 index 0000000000000000000000000000000000000000..049bed94e4a1beeb1c29511e6374510483f2274f --- /dev/null +++ "b/docs/zh/docs/Container/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" @@ -0,0 +1,1081 @@ +# 容器镜像构建 + +* [概述](#概述) +* [安装](#安装) + * [环境准备](#环境准备) + * [安装isula-build](#安装isula-build) +* [配置与管理服务](#配置与管理服务) + * [配置服务](#配置服务) + * [管理服务](#管理服务) + * [通过 systemd 管理(推荐方式)](#通过-systemd-管理推荐方式) + * [直接运行 isula-build 服务端](#直接运行-isula-build-服务端) +* [使用指南](#使用指南) + * [前提条件](#前提条件) + * [总体说明](#总体说明) + * [ctr-img: 容器镜像管理](#ctr-img-容器镜像管理) + * [build: 容器镜像构建](#build-容器镜像构建) + * [image: 查看本地持久化构建镜像](#image-查看本地持久化构建镜像) + * [import: 导入容器基础镜像](#import-导入容器基础镜像) + * [load: 导入层叠镜像](#load-导入层叠镜像) + * [rm: 删除本地持久化镜像](#rm-删除本地持久化镜像) + * [save: 导出层叠镜像](#save-导出层叠镜像) + * [tag: 给本地持久化镜像打标签](#tag-给本地持久化镜像打标签) + * [pull: 拉取镜像到本地](#pull-拉取镜像到本地) + * [push: 将本地镜像推送到远程仓库](#push-将本地镜像推送到远程仓库) + * [info: 查看运行环境与系统信息](#info-查看运行环境与系统信息) + * [login: 登录远端镜像仓库](#login-登录远端镜像仓库) + * [logout: 退出远端镜像仓库](#logout-退出远端镜像仓库) + * [version: 版本查询](#version-版本查询) + * [manifest: manifest列表管理(实验特性)](#manifest-manifest列表管理) + * [create: manifest列表创建](#create-manifest列表创建) + * [annotate: manifest列表更新](#annotate-manifest列表更新) + * [inspect: manifest列表查询](#inspect-manifest列表查询) + * [push: 将manifest列表推送到远程仓库](#push-将manifest列表推送到远程仓库) +* [直接集成容器引擎](#直接集成容器引擎) + * [与iSulad集成](#与isulad集成) + * [与Docker集成](#与docker集成) +* [使用注意事项](#使用注意事项) + * [约束和限制](#约束和限制) + * [与“docker build”差异](#与docker-build差异) +* [附录](#附录) + * [命令行参数说明](#命令行参数说明) + * [通信矩阵](#通信矩阵) + * [文件与权限](#文件与权限) + +## 概述 + +isula-build是iSula容器团队推出的容器镜像构建工具,支持通过Dockerfile文件快速构建容器镜像。 + +isula-build采用服务端/客户端模式,其中,isula-build为客户端,提供了一组命令行工具,用于镜像构建及管理等;isula-builder为服务端,用于处理客户端管理请求,作为守护进程常驻后台。 + +![isula-build architecure](./figures/isula-build_arch.png) + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> - isula-build当前支持OCI镜像格式([OCI Image Format Specification](https://github.com/opencontainers/image-spec/blob/master/spec.md))以及Docker镜像格式([Image Manifest Version 2, Schema 2](https://docs.docker.com/registry/spec/manifest-v2-2/))。通过命令`export ISULABUILD_CLI_EXPERIMENTAL=enabled开启实验特性以支持OCI镜像格式。不开启实验特性时,isula-build默认采用Docker镜像格式;当开启实验特性后,将默认采用OCI镜像格式。 + +## 安装 + +### 环境准备 + +为了确保isula-build成功安装,需满足以下软件硬件要求。 + +- 支持的机器架构:x86_64 和 AArch64 +- 支持的操作系统:openEuler +- 用户具有root权限。 + +#### 安装isula-build + +使用isula-build构建容器镜像,需要先安装以下软件包。 + +**(推荐)方法一:使用yum安装** + +1. 配置openEuler yum源。 + +2. 使用root权限,登录目标服务器,安装isula-build。 + + ``` + sudo yum install -y isula-build + ``` + +**方法二:使用rpm包安装** + +1. 从openEuler yum源中获取isula-build对应安装包isula-build-*.rpm。例如isula-build-0.9.5-6.oe1.x86_64.rpm。 + +2. 将获取的rpm软件包上传至目标服务器的任一目录,例如 /home/。 + +3. 使用root权限,登录目标服务器,参考如下命令安装isula-build。 + + ``` + sudo rpm -ivh /home/isula-build-*.rpm + ``` + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> - 安装完成后,需要手工启动isula-build服务。启动请参见"管理服务"。 + +## 配置与管理服务 + +### 配置服务 + +在安装完 isula-build 软件包之后,systemd 管理服务会以 isula-build 软件包自带的 isula-build 服务端默认配置启动 isula-build 服务。如果 isula-build 服务端的默认配置文件不能满足用户的需求,可以参考如下介绍进行定制化配置。需要注意的是,修改完默认配置之后,需要重启 isula-build 服务端使新配置生效,具体操作可参考下一章节。 + +目前 isula-build 服务端包含如下配置文件: + +- /etc/isula-build/configuration.toml:isula-builder 总体配置文件,用于设置 isula-builder 日志级别、持久化目录和运行时目录、OCI runtime等。其中各参数含义如下: + +| 配置项 | 是否可选 | 配置项含义 | 配置项取值 | +| --------- | -------- | --------------------------------- | ----------------------------------------------- | +| debug | 可选 | 设置是否打开debug日志 | true:打开debug日志
false:关闭debug日志 | +| loglevel | 可选 | 设置日志级别 | debug
info
warn
error | +| run_root | 必选 | 设置运行时数据根目录 | 运行时数据根目录路径,例如/var/run/isula-build/ | +| data_root | 必选 | 设置本地持久化目录 | 本地持久化目录路径,例如/var/lib/isula-build/ | +| runtime | 可选 | 设置runtime种类,目前仅支持runc | runc | +| group | 可选 | 设置本地套接字isula_build.sock文件属组使得加入该组的非特权用户可以操作isula-build | isula | +| experimental | 可选 | 设置是否开启实验特性 | true:开启实验特性;false:关闭实验特性 | + + +- /etc/isula-build/storage.toml: 本地持久化存储的配置文件,包含所使用的存储驱动的配置。 + +| 配置项 | 是否可选 | 配置项含义 | +| ------ | -------- | ------------------------------ | +| driver | 可选 | 存储驱动类型,目前支持overlay2 | + + 更多设置可参考 [containers-storage.conf.5.md](https://github.com/containers/storage/blob/master/docs/containers-storage.conf.5.md)。 + + +- /etc/isula-build/registries.toml : 针对各个镜像仓库的配置文件。 + +| 配置项 | 是否可选 | 配置项含义 | +| ------------------- | -------- | ------------------------------------------------------------ | +| registries.search | 可选 | 镜像仓库搜索域,在此list的镜像仓库可以被感知,不在此列的不被感知。 | +| registries.insecure | 可选 | 可访问的不安全镜像仓库地址,在此列表中的镜像仓库将不会通过鉴权,不推荐使用。 | + + 更多设置可参考 [containers-registries.conf.5.md](https://github.com/containers/image/blob/master/docs/containers-registries.conf.5.md)。 + +- /etc/isula-build/policy.json:镜像pull/push策略文件。注:当前不支持对其进行配置 + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> - isula-build 支持最大 1MiB 的上述配置文件。 +> - isula-build 不支持将持久化工作目录 dataroot 配置在内存盘上,比如 tmpfs。 +> - isula-build 目前仅支持使用overlay2为底层 graphdriver。 +> - 在设置--group参数前,需保证本地OS已经创建了对应的用户组,且非特权用户已经加入该组。重启isula-builder之后即可使该非特权用户使用isula-build功能。同时,为了保持权限一致性,isula-build的配置文件目录/etc/isula-build的属组也会被设置为--group指定的组。 + +### 管理服务 + +目前 openEuler 采用 systemd 管理软件服务,isula-build 软件包已经自带了 systemd 的服务文件,用户安装完 isula-build 软件包之后可以直接通过 systemd 工具对它进行服务启停等操作。用户同样可以手动启动 isula-build 服务端软件。需要注意的是,同一个节点上不可以同时启动多个 isula-build 服务端软件。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> - 同一个节点上不可以同时启动多个 isula-build 服务端软件。 + +#### 通过 systemd 管理(推荐方式) + +用户可以通过如下 systemd 的标准指令控制 isula-build 服务的启动、停止、重启等动作: + +- 启动 isula-build 服务: + + ```sh + sudo systemctl start isula-build.service + ``` + +- 停止 isula-build 服务: + + ```sh + sudo systemctl stop isula-build.service + ``` + +- 重启 isula-builder 服务: + + ```sh + sudo systemctl restart isula-build.service + ``` + +isula-build 软件包安装的 systemd 服务文件保存在 `/usr/lib/systemd/system/isula-build.service`。如果用户需要修改 isula-build 服务的 systemd 配置,可以修改该文件,执行如下命令使配置生效,之后再根据上面提到的 systemd 管理指令重启 isula-build 服务 + +```sh +sudo systemctl daemon-reload +``` + +#### 直接运行 isula-build 服务端 + +您也可以通过执行 isula-build 服务端命令( isula-builder)的方式启动服务。其中,服务端启动配置,可通过isula-builder命令支持的 flags 设置。isula-build 服务端目前支持的 flags 如下: + +- -D, --debug: 是否开启调测模式。 +- --log-level: 日志级别,支持 “debug”, “info”, “warn” or “error”,默认为 “info”。 +- --dataroot: 本地持久化路径,默认为”/var/lib/isula-build/“。 +- --runroot: 运行时路径,默认为”/var/run/isula-build/“。 +- --storage-driver:底层存储驱动类型。 +- --storage-opt: 底层存储驱动配置。 +- --group: 设置本地套接字isula_build.sock文件属组使得加入该组的非特权用户可以操作isula-build,默认为“isula”。 +- --experimental: 是否开启实验特性,默认为false。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> - 当命令行启动参数中传递了与配置文件相同的配置选项时,优先使用命令行参数启动。 + +启动 isula-build 服务。例如指定本地持久化路径/var/lib/isula-build,且不开启调试的参考命令如下: + +```sh +sudo isula-builder --dataroot "/var/lib/isula-build" --debug=false +``` + +## 使用指南 + +### 前提条件 + +isula-build 构建 Dockerfile 内的 RUN 指令时依赖可执行文件 runc ,需要 isula-build 的运行环境上预装好 runc。安装方式视用户使用场景而定,如果用户不需要使用完整的 docker-engine 工具链,则可以仅安装 docker-runc rpm包: + +```sh +sudo yum install -y docker-runc +``` + +如果用户需要使用完整的 docker-engine 工具链,则可以安装 docker-engine rpm包,默认包含可执行文件 runc : + +```sh +sudo yum install -y docker-engine +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> - 用户需保证OCI runtime(runc)可执行文件的安全性,避免被恶意替换。 + +### 总体说明 + +isula-build 客户端提供了一系列命令用于构建和管理容器镜像,当前 isula-build 包含的命令行指令如下: + +- ctr-img,容器镜像管理。ctr-img又包含如下子命令: + - build,根据给定dockerfile构建出容器镜像。 + - images,列出本地容器镜像。 + - import,导入容器基础镜像。 + - load,导入层叠镜像。 + - rm,删除本地容器镜像。 + - save,导出层叠镜像至本地磁盘。 + - tag,给本地容器镜像打tag。 + - pull,拉取镜像到本地。 + - push,推送本地镜像到远程仓库。 +- info,查看isula-build的运行环境和系统信息。 +- login,登录远端容器镜像仓库。 +- logout,退出远端容器镜像仓库。 +- version,查看isula-build和isula-builder的版本号。 +- manifest(实验特性),管理manifest列表。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> - isula-build completion 和 isula-builder completion 命令用于生成bash命令补全脚本。该命令为命令行框架隐式提供,不会显示在help信息中。 +> - isula-build客户端不包含配置文件,当用户需要使用isula-build实验特性时,需要在客户端通过命令`export ISULABUILD_CLI_EXPERIMENTAL=enabled`配置环境变量ISULABUILD_CLI_EXPERIMENTAL来开启实验特性。 + +以下按照上述维度依次详细介绍这些命令行指令的使用。 + + +### ctr-img: 容器镜像管理 + +isula-build 将所有容器镜像管理相关命令划分在子命令 `ctr-img` 下,命令原型为: + +``` +isula-build ctr-img [command] +``` + +#### build: 容器镜像构建 + +ctr-img 的子命令 build 用于构建容器镜像,命令原型为: + +``` +isula-build ctr-img build [flags] +``` + +其中 build 包含如下 flags: + +- --build-arg:string列表,构建过程中需要用到的变量。 +- --build-static:KeyValue值,构建二进制一致性。目前包含如下Key值: + - build-time:string,使用固定时间戳来构建容器镜像;时间戳格式为“YYYY-MM-DD HH-MM-SS”。 +- -f, --filename:string,Dockerfile的路径,不指定则是使用当前路径的Dockerfile文件。 +- --format: string, 设置构建镜像的镜像格式:oci | docker(需开启实验特性选项)。 +- --iidfile:string,输出 image ID 到本地文件。 +- -o, --output:string,镜像导出的方式和路径。 +- --proxy:布尔值,继承主机侧环境的proxy环境变量(默认为true)。 +- --tag:string,设置构建成功的镜像的tag值。 +- --cap-add:string列表,构建过程中RUN指令所需要的权限。 + +**以下为各个 flags 的详解。** + +**\--build-arg** + +从命令行接受参数作为Dockerfile中的参数,用法: + +```sh +$ echo "This is bar file" > bar.txt +$ cat Dockerfile_arg +FROM busybox +ARG foo +ADD ${foo}.txt . +RUN cat ${foo}.txt +$ sudo isula-build ctr-img build --build-arg foo=bar -f Dockerfile_arg +STEP 1: FROM busybox +Getting image source signatures +Copying blob sha256:8f52abd3da461b2c0c11fda7a1b53413f1a92320eb96525ddf92c0b5cde781ad +Copying config sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b +Writing manifest to image destination +Storing signatures +STEP 2: ARG foo +STEP 3: ADD ${foo}.txt . +STEP 4: RUN cat ${foo}.txt +This is bar file +Getting image source signatures +Copying blob sha256:6194458b07fcf01f1483d96cd6c34302ffff7f382bb151a6d023c4e80ba3050a +Copying blob sha256:6bb56e4a46f563b20542171b998cb4556af4745efc9516820eabee7a08b7b869 +Copying config sha256:39b62a3342eed40b41a1bcd9cd455d77466550dfa0f0109af7a708c3e895f9a2 +Writing manifest to image destination +Storing signatures +Build success with image id: 39b62a3342eed40b41a1bcd9cd455d77466550dfa0f0109af7a708c3e895f9a2 +``` + +**\--build-static** + +指定为静态构建,即使用isula-build构建容器镜像时消除所有时间戳和其他构建因素(例如容器ID、hostname等)的差异。最终构建出满足静态要求的容器镜像。 + +在使用isula-build进行容器镜像构建时,假如给 build 子命令一个固定的时间戳,并在限定如下条件的时候: + +- 构建环境前后保持一致。 +- 构建Dockerfile前后保持一致。 +- 构建产生的中间数据前后保持一致。 +- 构建命令相同。 +- 第三方库版本一致。 + +对于容器镜像构建,isula-build支持相同的Dockerfile。如果构建环境相同,则多次构建生成的镜像内容和镜像ID相同。 + +--build-static接受k=v形式的键值对选项,当前支持的选项有: + +- build-time:字符串类型。构建静态镜像的固定时间戳,格式为“YYYY-MM-DD HH-MM-SS”。时间戳影响diff层创建修改时间的文件属性。 + + 使用示例如下: + + ```sh + $ sudo isula-build ctr-img build -f Dockerfile --build-static='build-time=2020-05-23 10:55:33' . + ``` + + 以此方式,同一环境多次构建出来的容器镜像和镜像ID均会保持一致。 + +**\--format** +开始实验特性后该选项可用,默认为OCI镜像格式。可以手动指定镜像格式进行构建,例如,下面分别为构建OCI镜像格式以及Docker镜像格式镜像的命令。 + ```sh + $ export ISULABUILD_CLI_EXPERIMENTAL=enabled; sudo isula-build ctr-img build -f Dockerfile --format oci . + ``` + + ```sh + $ export ISULABUILD_CLI_EXPERIMENTAL=enabled; sudo isula-build ctr-img build -f Dockerfile --format docker . + ``` + +**\--iidfile** + +将构建的镜像ID输出到文件,用法: + +``` +isula-build ctr-img build --iidfile filename +``` + +例如,将容器镜像ID输出到testfile的参考命令如下: + + ```sh +$ sudo isula-build ctr-img build -f Dockerfile_arg --iidfile testfile + ``` + + 查看testfile中的容器镜像ID: + + ```sh +$ cat testfile +76cbeed38a8e716e22b68988a76410eaf83327963c3b29ff648296d5cd15ce7b + ``` + +**\-o, --output** + +目前 -o, --output 支持如下形式: + +- `isulad:image:tag`:将构建成功的镜像直接推送到 iSulad。比如:`-o isulad:busybox:latest`。同时需要注意如下约束: + + - isula-build 和 iSulad 必须在同一个节点上 + - tag必须配置 + - isula-build client端需要将构建成功的镜像暂存成 `/var/tmp/isula-build-tmp-%v.tar` 再导入至 iSulad,用户需要保证 `/var/tmp/` 目录有足够磁盘空间 + +- `docker-daemon:image:tag`:将构建成功的镜像直接推送到 Docker daemon。比如:`-o docker-daemon:busybox:latest`。同时需要注意如下约束: + - isula-build 和 docker 必须在同一个节点上 + - tag必须配置 + +- `docker://registry.example.com/repository:tag`:将构建成功的镜像以Docker镜像格式直接推送到远端镜像仓库。比如:`-o docker://localhost:5000/library/busybox:latest`。 + +- `docker-archive:/:image:tag`:将构建成功的镜像以Docker镜像格式保存至本地。比如:`-o docker-archive:/root/image.tar:busybox:latest`。 + +打开实验特性之后,可以启用相应OCI镜像的构建: +- `oci://registry.example.com/repository:tag`:将构建成功的镜像以OCI镜像格式直接推送到远端镜像仓库(远程镜像仓库须支持OCI镜像格式)。比如:`-o oci://localhost:5000/library/busybox:latest`。 + +- `oci-archive:/:image:tag`:将构建成功的镜像以OCI镜像的格式保存至本地。比如:`-o oci-archive:/root/image.tar:busybox:latest`。 + +除去各个flags之外,build子命令的命令行最后还会接收一个argument,该argument类型是string,意义为context,即该Dockerfile构建环境的上下文。该参数默认值为isula-build被执行的当前路径。该路径会影响 .dockerignore 和 Dockerfile的ADD/COPY指令 所检索的路径。 + +**\--proxy** + +选择构建时RUN指令启动的容器是否从环境上继承proxy相关环境变量”http_proxy”,“https_proxy”,“ftp_proxy”,“no_proxy”,“HTTP_PROXY”,“HTTPS_PROXY”,“FTP_PROXY”,“NO_PROXY”,默认为true。 + +当用户在Dockerfile配置proxy相关ARG或ENV,将覆盖所继承的环境变量。 + +注意:若client与daemon不在同一个终端运行,所能继承的环境变量为daemon所在终端的环境变量。 + +**\--tag** + +设置镜像构建成功之后,该镜像在本地磁盘存储时的tag。 + +**\--cap-add** + +添加构建过程中RUN指令所需权限,用法: + +``` +isula-build ctr-img build --cap-add ${CAP} +``` + +使用举例: + +```sh +$ sudo isula-build ctr-img build --cap-add CAP_SYS_ADMIN --cap-add CAP_SYS_PTRACE -f Dockerfile +``` + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> - isula-build最大支持并发构建100个容器镜像。 +> - isula-build支持Dockerfile最大为1MiB。 +> - isula-build支持 .dockerignore 最大为 1MiB。 +> - 用户需保证Dockerfile文件的权限为仅当前用户可读写,避免别的用户进行篡改。 +> - 构建时,RUN指令会启动容器在容器内进行构建,目前 isula-build 仅支持使用主机网络。 +> - isula-build 导出的镜像压缩格式,目前仅支持tar格式。 +> - isula-build 在每一个镜像构建stage完成后做一次提交,而不是每执行 Dockerfile的一行就提交一次。 +> - isula-build 暂不支持构建缓存。 +> - isula-build 仅在构建RUN指令时会启动构建容器。 +> - 目前不支持docker镜像格式的history功能。 +> - isula-build 的stage name支持以数字开头。 +> - isula-build 的stage name最长可为64个字符。 +> - isula-build 暂不支持对单次Dockerfile的构建进行资源限制。如有资源限制需求,可通过对 isula-builder 服务端配置资源限额的方式进行限制。 +> - isula-build 目前不支持Dockerfile里的ADD指令提供的数据来源是远端url。 +> - isula-build 使用docker-archive以及oci-archive类型导出的本地tar包未经压缩。如有需求,用户可以手动进行压缩。 + +#### image: 查看本地持久化构建镜像 + +可通过images命令查看当前本地持久化存储的镜像: + +```sh +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- ------------------------ ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- ------------------------ ------------ +localhost:5000/library/alpine latest a24bb4013296 2022-01-17 10:02:19 5.85 MB + 39b62a3342ee 2022-01-17 10:01:12 1.45 MB +--------------------------------------- ----------- ----------------- ------------------------ ------------ +``` + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> - 通过`isula-build ctr-img images`查看的镜像大小与`docker images`的显示上有一定差异。这是因为统计镜像大小时,isula-build是直接计算每层tar包大小之和,而docker是通过解压tar遍历diff目录计算文件大小之和,因此存在统计上的差异。 + +#### import: 导入容器基础镜像 + +可以通过`ctr-img import`指令将rootfs形式的tar文件导入到isula-build中。 + +命令原型如下: + +``` +isula-build ctr-img import [flags] +``` + +使用举例: + +```sh +$ sudo isula-build ctr-img import busybox.tar mybusybox:latest +Getting image source signatures +Copying blob sha256:7b8667757578df68ec57bfc9fb7754801ec87df7de389a24a26a7bf2ebc04d8d +Copying config sha256:173b3cf612f8e1dc34e78772fcf190559533a3b04743287a32d549e3c7d1c1d1 +Writing manifest to image destination +Storing signatures +Import success with image id: "173b3cf612f8e1dc34e78772fcf190559533a3b04743287a32d549e3c7d1c1d1" +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- ------------------------ ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- ------------------------ ------------ +mybusybox latest 173b3cf612f8 2022-01-12 16:02:31 1.47 MB +--------------------------------------- ----------- ----------------- ------------------------ ------------ +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> - isula-build 支持导入最大1GiB的容器基础镜像。 + +#### load: 导入层叠镜像 + +层叠镜像指的是通过 docker save 或 isula-build ctr-img save 等指令,将一个构建完成的镜像保存至本地之后,镜像压缩包内是一层一层 layer.tar 的镜像包。可以通过 ctr-img load 指令将它导入至 isula-build。 + +命令原型如下: + +``` +isula-build ctr-img load [flags] +``` + +目前支持的 flags 为: + +- -i, --input:本地tar包的路径 + +使用举例如下: + +```sh +$ sudo isula-build ctr-img load -i ubuntu.tar +Getting image source signatures +Copying blob sha256:cf612f747e0fbcc1674f88712b7bc1cd8b91cf0be8f9e9771235169f139d507c +Copying blob sha256:f934e33a54a60630267df295a5c232ceb15b2938ebb0476364192b1537449093 +Copying blob sha256:943edb549a8300092a714190dfe633341c0ffb483784c4fdfe884b9019f6a0b4 +Copying blob sha256:e7ebc6e16708285bee3917ae12bf8d172ee0d7684a7830751ab9a1c070e7a125 +Copying blob sha256:bf6751561805be7d07d66f6acb2a33e99cf0cc0a20f5fd5d94a3c7f8ae55c2a1 +Copying blob sha256:c1bd37d01c89de343d68867518b1155cb297d8e03942066ecb44ae8f46b608a3 +Copying blob sha256:a84e57b779297b72428fc7308e63d13b4df99140f78565be92fc9dbe03fc6e69 +Copying blob sha256:14dd68f4c7e23d6a2363c2320747ab88986dfd43ba0489d139eeac3ac75323b2 +Copying blob sha256:a2092d776649ea2301f60265f378a02405539a2a68093b2612792cc65d00d161 +Copying blob sha256:879119e879f682c04d0784c9ae7bc6f421e206b95d20b32ce1cb8a49bfdef202 +Copying blob sha256:e615448af51b848ecec00caeaffd1e30e8bf5cffd464747d159f80e346b7a150 +Copying blob sha256:f610bd1e9ac6aa9326d61713d552eeefef47d2bd49fc16140aa9bf3db38c30a4 +Copying blob sha256:bfe0a1336d031bf5ff3ce381e354be7b2bf310574cc0cd1949ad94dda020cd27 +Copying blob sha256:f0f15db85788c1260c6aa8ad225823f45c89700781c4c793361ac5fa58d204c7 +Copying config sha256:c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e +Writing manifest to image destination +Storing signatures +Loaded image as c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> - isula-build 支持导入最大50G的容器层叠镜像。 +> - isula-build 会自动识别容器层叠镜像的格式并进行导入。 + +#### rm: 删除本地持久化镜像 + +可通过rm命令删除当前本地持久化存储的镜像。命令原型为: + +``` +isula-build ctr-img rm IMAGE [IMAGE...] [FLAGS] +``` + +目前支持的 flags 为: + +- -a, --all:删除所有本地持久化存储的镜像。 +- -p, --prune:删除所有没有tag的本地持久化存储的镜像。 + +使用示例如下: + +```sh +$ sudo isula-build ctr-img rm -p +Deleted: sha256:78731c1dde25361f539555edaf8f0b24132085b7cab6ecb90de63d72fa00c01d +Deleted: sha256:eeba1bfe9fca569a894d525ed291bdaef389d28a88c288914c1a9db7261ad12c +``` + +#### save: 导出层叠镜像 + +可通过save命令导出层叠镜像到本地磁盘。命令原型如下: + +``` +isula-build ctr-img save [REPOSITORY:TAG]|imageID -o xx.tar +``` + +目前支持的 flags 为: + +- -f, --format:导出层叠镜像的镜像格式:oci | docker(需开启实验特性选项) +- -o, --output:本地tar包路径 + +以下示例通过 `image/tag` 的形式将镜像进行导出: + +```sh +$ sudo isula-build ctr-img save busybox:latest -o busybox.tar +Getting image source signatures +Copying blob sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a +Copying blob sha256:824082a6864774d5527bda0d3c7ebd5ddc349daadf2aa8f5f305b7a2e439806f +Copying blob sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef +Copying config sha256:21c3e96ac411242a0e876af269c0cbe9d071626bdfb7cc79bfa2ddb9f7a82db6 +Writing manifest to image destination +Storing signatures +Save success with image: busybox:latest +``` + +以下示例通过 `ImageID` 的形式将镜像进行导出: + +```sh +$ sudo isula-build ctr-img save 21c3e96ac411 -o busybox.tar +Getting image source signatures +Copying blob sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a +Copying blob sha256:824082a6864774d5527bda0d3c7ebd5ddc349daadf2aa8f5f305b7a2e439806f +Copying blob sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef +Copying config sha256:21c3e96ac411242a0e876af269c0cbe9d071626bdfb7cc79bfa2ddb9f7a82db6 +Writing manifest to image destination +Storing signatures +Save success with image: 21c3e96ac411 +``` + +以下示例导出多个镜像到同一个tar包: +```sh +$ sudo isula-build ctr-img save busybox:latest nginx:latest -o all.tar +Getting image source signatures +Copying blob sha256:eb78099fbf7fdc70c65f286f4edc6659fcda510b3d1cfe1caa6452cc671427bf +Copying blob sha256:29f11c413898c5aad8ed89ad5446e89e439e8cfa217cbb404ef2dbd6e1e8d6a5 +Copying blob sha256:af5bd3938f60ece203cd76358d8bde91968e56491daf3030f6415f103de26820 +Copying config sha256:b8efb18f159bd948486f18bd8940b56fd2298b438229f5bd2bcf4cedcf037448 +Writing manifest to image destination +Storing signatures +Getting image source signatures +Copying blob sha256:e2d6930974a28887b15367769d9666116027c411b7e6c4025f7c850df1e45038 +Copying config sha256:a33de3c85292c9e65681c2e19b8298d12087749b71a504a23c576090891eedd6 +Writing manifest to image destination +Storing signatures +Save success with image: [busybox:latest nginx:latest] +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> - save 导出的镜像默认格式为未压缩的tar格式,如有需求,用户可以再save之后手动压缩。 +> - 在使用镜像名导出镜像时,需要给出完整的镜像名格式:REPOSITORY:TAG。 + + +#### tag: 给本地持久化镜像打标签 + +可使用tag命令给本地持久化的容器镜像打tag。命令原型如下: + +``` +isula-build ctr-img tag / busybox:latest +``` + +使用举例: + +```sh +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- -------------------------- ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- -------------------------- ------------ +alpine latest a24bb4013296 2020-05-29 21:19:46 5.85 MB +--------------------------------------- ----------- ----------------- -------------------------- ------------ +$ sudo isula-build ctr-img tag a24bb4013296 alpine:v1 +$ sudo isula-build ctr-img images +--------------------------------------- ----------- ----------------- ------------------------ ------------ +REPOSITORY TAG IMAGE ID CREATED SIZE +--------------------------------------- ----------- ----------------- ------------------------ ------------ +alpine latest a24bb4013296 2020-05-29 21:19:46 5.85 MB +alpine v1 a24bb4013296 2020-05-29 21:19:46 5.85 MB +--------------------------------------- ----------- ----------------- ------------------------ ------------ +``` + +#### pull: 拉取镜像到本地 + +可通过pull命令拉取远程镜像仓库中的镜像到本地。命令原型如下: + +``` +isula-build ctr-img pull REPOSITORY[:TAG] +``` + +使用示例: + +```sh +$ sudo isula-build ctr-img pull example-registry/library/alpine:latest +Getting image source signatures +Copying blob sha256:8f52abd3da461b2c0c11fda7a1b53413f1a92320eb96525ddf92c0b5cde781ad +Copying config sha256:e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b +Writing manifest to image destination +Storing signatures +Pull success with image: example-registry/library/alpine:latest +``` + +#### push: 将本地镜像推送到远程仓库 + +可通过push命令将本地镜像推送到远程仓库。命令原型如下: + +``` +isula-build ctr-img push REPOSITORY[:TAG] +``` + +目前支持的 flags 为: + +- -f, --format:推送的镜像格式:oci|docker(需开启实验特性选项) + +使用示例: + +```sh +$ sudo isula-build ctr-img push example-registry/library/mybusybox:latest +Getting image source signatures +Copying blob sha256:d2421964bad195c959ba147ad21626ccddc73a4f2638664ad1c07bd9df48a675 +Copying config sha256:f0b02e9d092d905d0d87a8455a1ae3e9bb47b4aa3dc125125ca5cd10d6441c9f +Writing manifest to image destination +Storing signatures +Push success with image: example-registry/library/mybusybox:latest +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +> - 推送镜像时,需要先登录对应的镜像仓库。 + + +### info: 查看运行环境与系统信息 + +可以通过“isula-build info”指令查看 isula-build 目前的运行环境与系统信息。命令原型如下: + +``` + isula-build info [flags] +``` + +支持如下Flags: + +- -H, --human-readable 布尔值,以常用内存表示格式打印内存信息,使用1000次幂 +- -V, --verbose 布尔值,显示运行时内存占用信息 + +使用示例: + +```sh +$ sudo isula-build info -HV + General: + MemTotal: 7.63 GB + MemFree: 757 MB + SwapTotal: 8.3 GB + SwapFree: 8.25 GB + OCI Runtime: runc + DataRoot: /var/lib/isula-build/ + RunRoot: /var/run/isula-build/ + Builders: 0 + Goroutines: 12 + Store: + Storage Driver: overlay + Backing Filesystem: extfs + Registry: + Search Registries: + oepkgs.net + Insecure Registries: + localhost:5000 + oepkgs.net + Runtime: + MemSys: 68.4 MB + HeapSys: 63.3 MB + HeapAlloc: 7.41 MB + MemHeapInUse: 8.98 MB + MemHeapIdle: 54.4 MB + MemHeapReleased: 52.1 MB +``` + +### login: 登录远端镜像仓库 + +用户可以运行 login 命令来登录远程镜像仓库。命令原型如下: + +``` + isula-build login SERVER [FLAGS] +``` + +目前支持的flag有: + +``` + Flags: + -p, --password-stdin Read password from stdin + -u, --username string Username to access registry +``` + +通过stdin输入密码。以下示例通过通过管道将creds.txt里的密码传给isula-build的stdin进行输入: + +```sh + $ cat creds.txt | sudo isula-build login -u cooper -p mydockerhub.io + Login Succeeded +``` + +通过交互式输入密码: + +```sh + $ sudo isula-build login mydockerhub.io -u cooper + Password: + Login Succeeded +``` + +### logout: 退出远端镜像仓库 + +用户可以运行 logout 命令来登出远程镜像仓库。命令原型如下: + +``` + isula-build logout [SERVER] [FLAGS] +``` + +目前支持的flag有: + +``` + Flags: + -a, --all Logout all registries +``` + +使用示例如下: + +```sh + $ sudo isula-build logout -a + Removed authentications +``` + +### version: 版本查询 + +可通过version命令查看当前版本信息: + +```sh + $ sudo isula-build version + Client: + Version: 0.9.5 + Go Version: go1.15.7 + Git Commit: b82408f + Built: Tue Mar 30 11:08:00 2021 + OS/Arch: linux/amd64 + + Server: + Version: 0.9.5 + Go Version: go1.15.5 + Git Commit: 64dbad50 + Built: Mon Apr 12 20:30:31 2021 + OS/Arch: linux/amd64 +``` + +### manifest: manifest列表管理 + +manifest列表包含不同系统架构对应的镜像信息,通过使用manifest列表,用户可以在不同的架构中使用相同的manifest(例如openeuler:latest)获取对应架构的镜像,manifest包含create、annotate、inspect和push子命令。 +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> - manifest为实验特性,使用时需开启客户端和服务端的实验选项,方式详见客户端总体说明和配置服务章节。 + + +#### create: manifest列表创建 + +manifest的子命令create用于创建manifest列表,命令原型为: + +``` +isula-build manifest create MANIFEST_LIST MANIFEST [MANIFEST...] +``` + +用户可以指定manifest列表的名称以及需要加入到列表中的远程镜像,若不指定任何远程镜像,则会创建一个空的manifest列表。 + +使用示例如下: + +```sh +$ sudo isula-build manifest create openeuler localhost:5000/openeuler_x86:latest localhost:5000/openeuler_aarch64:latest +``` + +#### annotate: manifest列表更新 + +manifest的子命令annotate用于更新manifest列表,命令原型为: + +``` +isula-build manifest annotate MANIFEST_LIST MANIFEST [flags] +``` + +用户可以指定需要更新的manifest列表以及其中的镜像,通过flags指定需要更新的选项,此命令也可用于添加新的镜像到列表中。 + +其中annotate包含如下flags: + +- --arch: string,重写镜像适用架构 +- --os: string,重写镜像适用系统 +- --os-features: string列表,指定镜像需要的OS特性,很少使用 +- --variant: string,指定列表中记录镜像的变量 + +使用示例如下: + +```sh +$ sudo isula-build manifest annotate --os linux --arch arm64 openeuler:latest localhost:5000/openeuler_aarch64:latest +``` + +#### inspect: manifest列表查询 + +manifest子命令inspect用于查询manifest列表信息,命令原型为: + +``` +isula-build manifest inspect MANIFEST_LIST +``` + +使用示例如下: + +```sh +$ sudo isula-build manifest inspect openeuler:latest +{ + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "size": 527, + "digest": "sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff", + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "size": 527, + "digest": "sha256:f814888b4bb6149bd39ba8375a1932fb15071b4dbffc7f76c7b602b06abbb820", + "platform": { + "architecture": "arm64", + "os": "linux" + } + } + ] +} +``` + +#### push: 将manifest列表推送到远程仓库 + +manifest子命令push用于将manifest列表推送到远程仓库,命令原型为: + +``` +isula-build manifest push MANIFEST_LIST DESTINATION +``` + +使用示例如下: + +```sh +$ sudo isula-build manifest push openeuler:latest localhost:5000/openeuler:latest +``` + +## 直接集成容器引擎 + +isula-build可以与iSulad和docker集成,将构建好的容器镜像导入到容器引擎的本地存储中。 + +### 与iSulad集成 + +支持将构建成功的镜像直接导出到iSulad。 + +命令行举例: + +```sh +$ sudo isula-build ctr-img build -f Dockerfile -o isulad:busybox:2.0 +``` + +通过在-o参数中指定iSulad,将构建好的容器镜像导出到iSulad,可以通过isula images查询: + +```sh +$ sudo isula images +isula images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox 2.0 2d414a5cad6d 2020-08-01 06:41:36 5.577 MB +``` + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> - 要求isula-build和iSulad在同一节点。 +> - 直接导出镜像到iSulad时,isula-build client端需要将构建成功的镜像暂存成 `/var/lib/isula-build/tmp/[buildid]/isula-build-tmp-%v.tar` 再导入至 iSulad,用户需要保证 /var/lib/isula-build/tmp/ 目录有足够磁盘空间;同时如果在导出过程中 isula-build client进程被KILL或Ctrl+C终止,需要依赖用户手动清理 `/var/lib/isula-build/tmp/[buildid]/isula-build-tmp-%v.tar` 文件。 + +### 与Docker集成 + +支持将构建成功的镜像直接导出到Docker daemon。 + +命令行举例: + +```sh +$ sudo isula-build ctr-img build -f Dockerfile -o docker-daemon:busybox:2.0 +``` + +通过在-o参数中指定docker-daemon,将构建好的容器镜像导出到docker, 可以通过docker images查询。 + +```sh +$ sudo docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox 2.0 2d414a5cad6d 2 months ago 5.22MB +``` + +> ![](./public_sys-resources/icon-note.gif) **说明:** +> +> - 要求isula-build和Docker在同一节点。 + +## 使用注意事项 +本章节主要介绍在使用isula-build构建镜像时相关的约束和限制,以及与docker build的差异。 + +### 约束和限制 +1. 当导出镜像到[`iSulad`](https://gitee.com/openeuler/iSulad/blob/master/README.md)时,镜像必须指明tag。 +2. 因为isula-builder运行`RUN`指令时,需要调用系统中的oci 运行时(如`runc`),用户需要保证该运行时的安全性,不受篡改。 +3. `DataRoot`不能设置在内存盘上(tmpfs)。 +4. `Overlay2`是目前isula-builder唯一支持的存储驱动。 +5. `Docker`镜像是目前唯一支持的镜像格式,未来即将支持`oci`格式镜像。 +6. `Dockerfile`文件权限强烈建议设置为**0600**以防止恶意篡改。 +7. `RUN`命令中目前只支持主机侧网络(host network)。 +8. 当导出镜像到本地tar包时,目前只支持保存为`tar`格式。 +9. 当使用`import`功能导入基础镜像时,最大支持**1G**。 + +### 与“docker build”差异 +`isula-build`兼容[Docker镜像格式规范](https://docs.docker.com/engine/reference/builder),但仍然和`docker build`存在一些差异: +1. 支持镜像压缩,即对每个`stage`进行提交而非每一行。 +2. 目前不支持构建缓存。 +3. 只有`RUN`指令会运行容器进行构建。 +4. 目前不支持查询镜像构建历史。 +5. `Stage`名称可以用数字开头。 +6. `Stage`名称最大长度为64。 +7. `ADD`命令不支持远端URL格式。 +8. 暂不支持对单次构建进行资源限额,可采取对isula-builder配置资源限额的方式进行限制。 +9. 统计镜像大小时,isula-build是直接计算每层tar包大小之和,而docker是通过解压tar遍历diff目录计算文件大小之和,因此通过`isula-build ctr-img images`查看的镜像大小与`docker images`的显示上有一定差异。 +10. 操作时的镜像名称需要明确,格式为IMAGE_NAME:IMAGE_TAG。例如 busybox:latest, 其中latest不可省略。 + +## 附录 + +### 命令行参数说明 + +**表1** ctr-img build 命令参数列表 + +| **命令** | **参数** | **说明** | +| ------------- | -------------- | ------------------------------------------------------------ | +| ctr-img build | --build-arg | string列表,构建过程中需要用到的变量 | +| | --build-static | KV值,构建二进制一致性。目前包含如下K值:- build-time:string,使用固定时间戳来构建容器镜像;时间戳格式为“YYYY-MM-DD HH-MM-SS” | +| | -f, --filename | string,Dockerfile的路径,不指定则是使用当前路径的Dockerfile文件 | +| | --format | string,设置构建镜像的镜像格式:oci|docker(需开启实验特性选项)| +| | --iidfile | string,输出 image ID 到本地文件 | +| | -o, --output | string,镜像导出的方式和路径 | +| | --proxy | 布尔值,继承主机侧环境的proxy环境变量(默认为true) | +| | --tag | string,给构建的镜像添加tag | +| | --cap-add | string列表,构建过程中RUN指令所需要的权限 | + +**表2** ctr-img load 命令参数列表 + +| **命令** | **参数** | **说明** | +| ------------ | ----------- | --------------------------------- | +| ctr-img load | -i, --input | string,需要导入的本地tar包的路径 | + +**表3** ctr-img push 命令参数列表 + +| **命令** | **参数** | **说明** | +| ------------ | ----------- | --------------------------------- | +| ctr-img push | -f, --format | string,推送的镜像格式:oci|docker(需开启实验特性选项)| + +**表4** ctr-img rm 命令参数列表 + +| **命令** | **参数** | **说明** | +| ---------- | ----------- | --------------------------------------------- | +| ctr-img rm | -a, --all | 布尔值,删除所有本地持久化存储的镜像 | +| | -p, --prune | 布尔值,删除所有没有tag的本地持久化存储的镜像 | + +**表5** ctr-img save 命令参数列表 + +| **命令** | **参数** | **说明** | +| ------------ | ------------ | ---------------------------------- | +| ctr-img save | -o, --output | string,镜像导出后在本地的存储路径 | +| | -f, --format | string,导出层叠镜像的镜像格式:oci|docker(需开启实验特性选项)| + +**表6** login 命令参数列表 + +| **命令** | **参数** | **说明** | +| -------- | -------------------- | ------------------------------------------------------- | +| login | -p, --password-stdin | 布尔值,是否通过stdin读入密码;或采用交互式界面输入密码 | +| | -u, --username | string,登陆镜像仓库所使用的用户名 | + +**表7** logout 命令参数列表 + +| **命令** | **参数** | **说明** | +| -------- | --------- | ------------------------------------ | +| logout | -a, --all | 布尔值,是否登出所有已登陆的镜像仓库 | + +**表8** manifest annotate命令参数列表 + +| **命令** | **说明** | **参数** | +| ----------------- | ------------- | ------------------------------------------ | +| manifest annotate | --arch | string,重写镜像适用架构 | +| | --os | string,重写镜像适用系统 | +| | --os-features | string列表,指定镜像需要的OS特性,很少使用 | +| | --variant | string,指定列表中记录镜像的变量 | + +### 通信矩阵 + +isula-build两个组件进程之间通过unix socket套接字文件进行通信,无端口通信。 + +### 文件与权限 + +- isula-build 所有的操作均需要使用 root 权限。如需使用非特权用户操作,则需要配置--group参数 + +- isula-build 运行涉及文件权限如下表所示: + +| **文件路径** | **文件/文件夹权限** | **说明** | +| ------------------------------------------- | ------------------- | ------------------------------------------------------------ | +| /usr/bin/isula-build | 550 | 命令行工具二进制文件。 | +| /usr/bin/isula-builder | 550 | 服务端isula-builder进程二进制文件。 | +| /usr/lib/systemd/system/isula-build.service | 640 | systemd配置文件,用于管理isula-build服务。 | +| /etc/isula-build | 650 | isula-builder 配置文件根目录 | +| /etc/isula-build/configuration.toml | 600 | isula-builder 总配置文件,包含设置 isula-builder 日志级别、持久化目录和运行时目录、OCI runtime等。 | +| /etc/isula-build/policy.json | 600 | 签名验证策略文件的语法文件。 | +| /etc/isula-build/registries.toml | 600 | 针对各个镜像仓库的配置文件,含可用的镜像仓库列表、镜像仓库黑名单。 | +| /etc/isula-build/storage.toml | 600 | 本地持久化存储的配置文件,包含所使用的存储驱动的配置。 | +| /etc/isula-build/isula-build.pub | 400 | 非对称加密公钥文件 | +| /var/run/isula_build.sock | 660 | 服务端isula-builder的本地套接字。 | +| /var/lib/isula-build | 700 | 本地持久化目录。 | +| /var/run/isula-build | 700 | 本地运行时目录。 | +| /var/lib/isula-build/tmp/[buildid]/isula-build-tmp-*.tar | 644 | 镜像导出至iSulad时的本地暂存目录。 | diff --git "a/docs/zh/docs/Container/isula-transform\350\277\201\347\247\273\345\267\245\345\205\267.md" "b/docs/zh/docs/Container/isula-transform\350\277\201\347\247\273\345\267\245\345\205\267.md" new file mode 100644 index 0000000000000000000000000000000000000000..0157797a2a17f9c387eb4769cccadc251d60aafa --- /dev/null +++ "b/docs/zh/docs/Container/isula-transform\350\277\201\347\247\273\345\267\245\345\205\267.md" @@ -0,0 +1,163 @@ +# isula-transform 容器迁移工具 + +isula-transform 容器迁移工具配合 iSulad 2.0 推出。用于将 Docker 容器引擎拉起的容器转换迁移到 iSulad 引擎管理。迁移完成后,可以通过 iSulad 完成容器生命周期管理等功能。 + + + +* [快速引导](#快速引导) + * [安装部署](#安装部署) + * [使用示例](#使用示例) +* [使用指南](#使用指南) + * [用法介绍](#用法介绍) + * [参数说明](#参数说明) + * [注意事项](#注意事项) +* [附录](#附录) + * [通信矩阵及权限说明](#通信矩阵及权限说明) + * [通信矩阵](#通信矩阵) + * [文件与权限](#文件与权限) + + + +## 快速引导 + +### 安装部署 + +安装 isula-transform 可参考如下方法: + +- yum 安装(推荐) + + ``` shell + sudo yum install -y isula-transform + ``` + +* rpm 安装 + + ``` shell + sudo rpm -ivh isula-transform-0.9.1-1.oe1.x86_64.rpm + ``` + + 说明:isula-transform 运行依赖于 isulad 和 docker-engine,采用 rpm 安装时请确保环境中已安装 isulad 和 docker-engine。 + + +### 使用示例 + +这里给出将 Docker 容器引擎拉起的容器迁移到 iSulad 引擎管理的示例。 + +1. 以 host 网络启动一个 Docker 容器,并挂载数据卷。 + + ``` shell + $ mkdir /tmp/test && echo "hello isula 2.0" > /tmp/test/hello.txt + $ sudo docker run -tid --network host -v /tmp/test:/test rnd-dockerhub.huawei.com/official/ubuntu bash + b7ebc79a83297d781069308311cd1456539ab663fc284c80386a941af1a78685 + $ sudo docker exec b7ebc7 cat /test/hello.txt + hello isula 2.0 + $ sudo docker exec b7ebc7 bash -c "echo 'hello isula-transform' > /root/world.txt" + $ sudo docker exec b7ebc7 cat /root/world.txt + hello isula-transform + ``` + +2. 使用 isula-transform 工具迁移该容器(指定容器 id 前几位或全 id)。 + + ``` shell + $ sudo isula-transform b7ebc7 + transform b7ebc7: success + ``` + +3. 重启 isulad,可查看到该容器。 + + ``` shell + $ systemctl restart isulad && sudo isula ps -a + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + b7ebc79a8329 rnd-dockerhub.huawei.com/official/ubuntu "bash" 8 minutes ago Exited (0) 2 minutes ago inspiring_dirac + ``` + +4. 启动容器并检查数据。容器启动成功且数据完整,说明容器迁移成功。 + + ``` shell + $ sudo isula start b7ebc7 + $ sudo isula exec b7ebc7 cat /test/hello.txt + hello isula 2.0 + $ sudo isula exec b7ebc7 cat /root/world.txt + hello isula-transform + ``` + +5. 删除容器。 + + ``` shell + $ sudo isula rm -f b7ebc7 + b7ebc79a83297d781069308311cd1456539ab663fc284c80386a941af1a78685 + $ sudo isula ps -a + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + ``` + +## 使用指南 + +### 用法介绍 + +isula-transform 支持两种用法: + +1. 迁移指定容器 + + 通过指定容器 id 的形式,isula-transform 可以迁移指定的 Docker 容器,用法如下: + + ``` shell + isula-transform [OPTIONS] container_id [container_id...] + ``` + + 可同时指定多个容器 id,支持短 id 格式,但需要保证短 id 唯一性。 + +2. 迁移所有容器 + + 通过配置 --all 参数,isula-transform 将会迁移所有 running 和 pause 状态的 Docker 容器,用法如下: + + ``` shell + isula-transform [OPTIONS] --all + ``` + + 若指定 --all 参数后同时指定了容器 id,isula-transform 会忽略传入的容器 id。 + +其他可配置参数请参见 [参数说明](#参数说明)。 + +### 参数说明 + +用法介绍中的OPTIONS 为 isula-transform 的可选参数,具体含义请参见下表。 + +| 参数 | 说明 | +| -------------- | :----------------------------------------------------------- | +| --log | 指定日志文件的路径, 未配置取默认值 /var/log/isula-kits/transform.log | +| --log-level | 指定输出日志的最低级别,可配置项目包括:debug info warn error,默认为 info 级别 | +| --docker-graph | docker graph 路径,未配置取默认值 /var/lib/docker | +| --docker-state | docker state 路径,未配置取默认值 /var/run/docker | + + +### 注意事项 + +- isula-transform 适用非集群场景,Kubernetes 等集群场景下,建议配置 iSulad 引擎之后拉起新容器。 +- isula-transform 目前支持对 Docker 18.09 版本创建的容器进行迁移,容器需要处于 running 或者 pause 状态。 +- isula-transform 完成迁移后原 Docker 容器会处于 pause 状态,由用户决定原 Docker 容器的生命周期。 +- isula-transform 要求被迁移的 Docker 容器以 --network=host 启动, 或者复用以 host 网络启动的容器的网络栈。后者场景中,两个容器均需要被迁移,且迁移后需要首先启动父容器。 +- 涉及到共享 namespace (pid,ipc)时,父子容器均需要被迁移,且迁移后需要首先启动父容器。 +- 涉及到指定 --cgroup-parent 时, Docker 引擎为原容器创建的 cgroup 没有被销毁,iSulad 引擎无法为新容器创建 cgroup,需要原 Docker 容器被停止或删除后,新容器才能启动。 +- iSula 容器相对于 Docker 容器不支持的配置参数,isula-transform 迁移后会丢弃。 + +## 附录 + +### 通信矩阵及权限说明 + +#### 通信矩阵 + +isula-transform 运行时会作为客户端访问服务端 dockerd,isula-transform 和 dockerd 之间通过 unix socket 套接字文件进行通信,路径如下: + +|服务端|socket 路径| +|---|:---| +|dockerd|/var/run/docker.sock| + +#### 文件与权限 + +- isula-transform 运行需要 root 权限。 +- isula-transform 运行涉及文件权限如下表所示: + + |文件路径|权限|说明| + |:---|---|:---| + |/usr/bin/isula-transform|0550|可执行二进制文件| + |/var/log/isula-kits/transform.log|0600|isula-transform 默认日志文件| diff --git "a/content/zh/docs/Container/namespace\345\214\226\345\206\205\346\240\270\345\217\202\346\225\260\345\217\257\345\206\231.md" "b/docs/zh/docs/Container/namespace\345\214\226\345\206\205\346\240\270\345\217\202\346\225\260\345\217\257\345\206\231.md" similarity index 99% rename from "content/zh/docs/Container/namespace\345\214\226\345\206\205\346\240\270\345\217\202\346\225\260\345\217\257\345\206\231.md" rename to "docs/zh/docs/Container/namespace\345\214\226\345\206\205\346\240\270\345\217\202\346\225\260\345\217\257\345\206\231.md" index ab34a713fb0b997cc055fbade3220571e13ffcca..74e4f950a65614579fc534ab9ce57d77fcbce2d9 100644 --- "a/content/zh/docs/Container/namespace\345\214\226\345\206\205\346\240\270\345\217\202\346\225\260\345\217\257\345\206\231.md" +++ "b/docs/zh/docs/Container/namespace\345\214\226\345\206\205\346\240\270\345\217\202\346\225\260\345\217\257\345\206\231.md" @@ -1,20 +1,20 @@ -# namespace化内核参数可写 - -## 功能描述 - -对于运行在容器内的业务,如数据库,大数据,包括普通应用,有对部分内核参数进行设置和调整的需求,以满足最佳的业务运行性能和可靠性。内核参数要么不允许修改,要么全部允许修改(特权容器): - -在不允许用户在容器内修改时,只提供了--sysctl外部接口,而且容器内不能灵活修改参数值。 - -在允许用户在容器内修改时,部分内核参数是全局有效的,某个容器修改后,会影响主机上所有的程序,安全性降低。 - -   - -系统容器提供--ns-change-opt参数,可以指定namespace化的内核参数在容器内动态设置,当前仅支持net、ipc。 - -## 参数说明 - - +# namespace化内核参数可写 + +## 功能描述 + +对于运行在容器内的业务,如数据库,大数据,包括普通应用,有对部分内核参数进行设置和调整的需求,以满足最佳的业务运行性能和可靠性。内核参数要么不允许修改,要么全部允许修改(特权容器): + +在不允许用户在容器内修改时,只提供了--sysctl外部接口,而且容器内不能灵活修改参数值。 + +在允许用户在容器内修改时,部分内核参数是全局有效的,某个容器修改后,会影响主机上所有的程序,安全性降低。 + +   + +系统容器提供--ns-change-opt参数,可以指定namespace化的内核参数在容器内动态设置,当前仅支持net、ipc。 + +## 参数说明 + + -

命令

参数

@@ -46,45 +46,45 @@
- -## 约束限制 - -- 如果容器启动同时指定了--privileged(特权容器)和--ns-change-opt,则--ns-change-opt不生效。 - -## 使用示例 - -启动容器, 指定--ns-change-opt=net: - -``` -[root@localhost ~]# isula run -tid --ns-change-opt net --system-container --external-rootfs /root/myrootfs none init -4bf44a42b4a14fdaf127616c90defa64b4b532b18efd15b62a71cbf99ebc12d2 -[root@localhost ~]# isula exec -it 4b mount | grep /proc/sys -proc on /proc/sys type proc (ro,nosuid,nodev,noexec,relatime) -proc on /proc/sysrq-trigger type proc (ro,nosuid,nodev,noexec,relatime) -proc on /proc/sys/net type proc (rw,nosuid,nodev,noexec,relatime) -``` - -可以看到容器内/proc/sys/net挂载点为rw,说明net相关的namespace化的内核参数具有读写权限。 - -再启动一个容器,指定--ns-change-opt=ipc: - -``` -[root@localhost ~]# isula run -tid --ns-change-opt ipc --system-container --external-rootfs /root/myrootfs none init -c62e5e5686d390500dab2fa76b6c44f5f8da383a4cbbeac12cfada1b07d6c47f -[root@localhost ~]# isula exec -it c6 mount | grep /proc/sys -proc on /proc/sys type proc (ro,nosuid,nodev,noexec,relatime) -proc on /proc/sysrq-trigger type proc (ro,nosuid,nodev,noexec,relatime) -proc on /proc/sys/kernel/shmmax type proc (rw,nosuid,nodev,noexec,relatime) -proc on /proc/sys/kernel/shmmni type proc (rw,nosuid,nodev,noexec,relatime) -proc on /proc/sys/kernel/shmall type proc (rw,nosuid,nodev,noexec,relatime) -proc on /proc/sys/kernel/shm_rmid_forced type proc (rw,nosuid,nodev,noexec,relatime) -proc on /proc/sys/kernel/msgmax type proc (rw,nosuid,nodev,noexec,relatime) -proc on /proc/sys/kernel/msgmni type proc (rw,nosuid,nodev,noexec,relatime) -proc on /proc/sys/kernel/msgmnb type proc (rw,nosuid,nodev,noexec,relatime) -proc on /proc/sys/kernel/sem type proc (rw,nosuid,nodev,noexec,relatime) -proc on /proc/sys/fs/mqueue type proc (rw,nosuid,nodev,noexec,relatime) -``` - -可以看到容器内ipc相关的内核参数挂载点为rw,说明ipc相关的namespace化的内核参数具有读写权限。 - + + +## 约束限制 + +- 如果容器启动同时指定了--privileged(特权容器)和--ns-change-opt,则--ns-change-opt不生效。 + +## 使用示例 + +启动容器, 指定--ns-change-opt=net: + +``` +[root@localhost ~]# isula run -tid --ns-change-opt net --system-container --external-rootfs /root/myrootfs none init +4bf44a42b4a14fdaf127616c90defa64b4b532b18efd15b62a71cbf99ebc12d2 +[root@localhost ~]# isula exec -it 4b mount | grep /proc/sys +proc on /proc/sys type proc (ro,nosuid,nodev,noexec,relatime) +proc on /proc/sysrq-trigger type proc (ro,nosuid,nodev,noexec,relatime) +proc on /proc/sys/net type proc (rw,nosuid,nodev,noexec,relatime) +``` + +可以看到容器内/proc/sys/net挂载点为rw,说明net相关的namespace化的内核参数具有读写权限。 + +再启动一个容器,指定--ns-change-opt=ipc: + +``` +[root@localhost ~]# isula run -tid --ns-change-opt ipc --system-container --external-rootfs /root/myrootfs none init +c62e5e5686d390500dab2fa76b6c44f5f8da383a4cbbeac12cfada1b07d6c47f +[root@localhost ~]# isula exec -it c6 mount | grep /proc/sys +proc on /proc/sys type proc (ro,nosuid,nodev,noexec,relatime) +proc on /proc/sysrq-trigger type proc (ro,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/shmmax type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/shmmni type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/shmall type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/shm_rmid_forced type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/msgmax type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/msgmni type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/msgmnb type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/kernel/sem type proc (rw,nosuid,nodev,noexec,relatime) +proc on /proc/sys/fs/mqueue type proc (rw,nosuid,nodev,noexec,relatime) +``` + +可以看到容器内ipc相关的内核参数挂载点为rw,说明ipc相关的namespace化的内核参数具有读写权限。 + diff --git a/content/zh/docs/Quickstart/public_sys-resources/icon-caution.gif b/docs/zh/docs/Container/public_sys-resources/icon-caution.gif similarity index 100% rename from content/zh/docs/Quickstart/public_sys-resources/icon-caution.gif rename to docs/zh/docs/Container/public_sys-resources/icon-caution.gif diff --git a/content/zh/docs/Quickstart/public_sys-resources/icon-danger.gif b/docs/zh/docs/Container/public_sys-resources/icon-danger.gif similarity index 100% rename from content/zh/docs/Quickstart/public_sys-resources/icon-danger.gif rename to docs/zh/docs/Container/public_sys-resources/icon-danger.gif diff --git a/content/zh/docs/Releasenotes/public_sys-resources/icon-note.gif b/docs/zh/docs/Container/public_sys-resources/icon-note.gif similarity index 100% rename from content/zh/docs/Releasenotes/public_sys-resources/icon-note.gif rename to docs/zh/docs/Container/public_sys-resources/icon-note.gif diff --git a/content/zh/docs/Releasenotes/public_sys-resources/icon-notice.gif b/docs/zh/docs/Container/public_sys-resources/icon-notice.gif similarity index 100% rename from content/zh/docs/Releasenotes/public_sys-resources/icon-notice.gif rename to docs/zh/docs/Container/public_sys-resources/icon-notice.gif diff --git a/content/zh/docs/Quickstart/public_sys-resources/icon-tip.gif b/docs/zh/docs/Container/public_sys-resources/icon-tip.gif similarity index 100% rename from content/zh/docs/Quickstart/public_sys-resources/icon-tip.gif rename to docs/zh/docs/Container/public_sys-resources/icon-tip.gif diff --git a/content/zh/docs/Quickstart/public_sys-resources/icon-warning.gif b/docs/zh/docs/Container/public_sys-resources/icon-warning.gif similarity index 100% rename from content/zh/docs/Quickstart/public_sys-resources/icon-warning.gif rename to docs/zh/docs/Container/public_sys-resources/icon-warning.gif diff --git "a/content/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\347\275\221\347\273\234.md" "b/docs/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\347\275\221\347\273\234.md" similarity index 96% rename from "content/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\347\275\221\347\273\234.md" rename to "docs/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\347\275\221\347\273\234.md" index e6b1cc316d0cb8ee4a113f020bc45630a3bf9c65..4e744a60c5f1b6a1a0cf15e22adee35e52e97697 100644 --- "a/content/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\347\275\221\347\273\234.md" +++ "b/docs/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\347\275\221\347\273\234.md" @@ -46,7 +46,7 @@

必选

-

设置网卡的主机端名字。支持字母、数字、下划线“_”、“-” 以及“.”字符,必须以字母开头,且长度不超过15。需要确保同一个宿主机上device不能重复。

+

设置网卡的主机端名字。支持字母、数字、下划线“\_”、“-” 以及“.”字符,必须以字母开头,且长度不超过15。需要确保同一个宿主机上device不能重复。

name

@@ -114,7 +114,7 @@ null ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >当网卡添加成功时,如果为其指定了IP地址,则kata会为新添加的网卡添加一条destination为同网段地址的默认路由,如上例中添加网卡之后容器内有如下路由被添加: >``` >[root@6ec7a98 /]# ip route @@ -194,7 +194,7 @@ - gateway:设置路由的下一跳网关。设置"dest":"default"时,gateway必选;其他情况可选。 - device:必选。设置路由对应的网卡名称,最长支持15字符。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >如果为容器内的回环设备lo添加路由时,路由配置文件中的"device"字段对应的设备名称为"lo"。 4. **删除指定路由** @@ -225,7 +225,7 @@ null ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >- 输入字段中dest为必选,device/gateway均为可选。kata根据不同字段进行模糊匹配,删除对应的路由规则。例如指定了dest为某个IP,则所有该IP的规则都会被删除。 >- 如果删除的是容器内回环设备lo的路由时,路由配置文件中的"device"字段对应的设备名称为"lo"。 @@ -235,7 +235,7 @@ $ cat ./test-iface.json | kata-runtime kata-network del-iface 6ec7a98 - ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >删除网卡时,仅根据网卡容器内名称(name字段)来删除。即便填写其他字段,kata也不会使用。 kata-runtime kata-network del-iface删除网卡命令执行返回结果说明: @@ -314,7 +314,7 @@ kata-runtime kata-ipvs ipvsadm --restore - < <规则文件路径> ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >单条添加时默认使用NAT模式,批量导入时添加真实服务器需手动添加-m参数使用NAT模式。 >规则文件内容示例: >-A -t 10.10.11.12:100 -s rr -p 3000 @@ -334,7 +334,7 @@ kata-runtime kata-ipvs ipvsadm --parameters "--set 100 100 200" ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >1. 每个容器支持iptables规则数量最大为20000条(5k service,3个server/service),add-service和add-server都算作规则。 >2. 批量导入前需清空已有规则。 >3. 不存在并发测试场景。 diff --git "a/content/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\350\265\204\346\272\220.md" "b/docs/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\350\265\204\346\272\220.md" similarity index 97% rename from "content/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\350\265\204\346\272\220.md" rename to "docs/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\350\265\204\346\272\220.md" index 55aa35dfaaefe14d7d0afc5507bf98745601f98e..836111e2eaa5967a940609835cf70e41d806a187 100644 --- "a/content/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\350\265\204\346\272\220.md" +++ "b/docs/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\350\265\204\346\272\220.md" @@ -11,7 +11,7 @@ 安全容器运行于虚拟化隔离的轻量级虚拟机内,因此资源的配置应分为两部分:对轻量级虚拟机的资源配置,即Host资源配置;对虚拟机内容器的配置,即Guest容器资源配置。以下资源配置均分为这两部分。 -## 资源共享-27 +## 资源共享 由于安全容器运行于虚拟化隔离的轻量虚拟机内,故无法访问Host上某些namespace下的资源,因此启动时不支持--net host,--ipc host,--pid host,--uts host。 @@ -45,7 +45,7 @@ Socket(s): 4 ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >CPU个数可以设置的最大值为当前OS上可供运行的CPU值(除去隔离核),最小值为0.5个CPU。 2. 配置容器CPU运行资源 @@ -98,7 +98,7 @@ 3. 配置CPU热插拔功能 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >安全容器CPU热插拔功能需要虚拟化组件qemu支持CPU热插拔。 kata-runtime配置文件config.toml中**enable\_cpu\_memory\_hotplug**选项负责开启和禁用CPU和内存热插拔。默认取值为false,表示禁用CPU和内存热插拔功能;取值为true,表示开启CPU和内存热插拔功能。 @@ -157,7 +157,7 @@    - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >由于pause容器只是一个占位容器没有工作负载,所以轻量级虚机启动时默认分配的1个CPU可以被其它容器共享,因此上面例子中启动的新容器只需要再热插3个CPU到轻量级虚机中即可。 - 当停止热插了CPU的容器后,启动容器时热插进去的CPU也会被拔出。 @@ -187,7 +187,7 @@ Swap: 0 0 0 ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >- 如果没有通过--annotation com.github.containers.virtcontainers.sandbox\_mem显示地设置轻量级虚机的内存大小,则轻量级虚机默认使用的内存大小为1GB。 >- 安全容器一个Pod的最小内存规格是1GB,支持的最大内存规格是256GB。如果用户分配的内存规格超过256GB,可能会出现未定义的错误,安全容器暂不支持超过256GB的大内存场景。 @@ -216,7 +216,7 @@ 同配置CPU热插拔功能一样,MEM的热插功能也是由kata-runtime配置文件config.toml中**enable\_cpu\_memory\_hotplug**选项配置,用法参见[3](#限制CPU资源.md#zh-cn_topic_0183903699_li2167326144011)。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >内存资源当前只支持热插,不支持内存热拔。 kata-runtime中复用了**-m**选项实现了MEM热插的功能,通过统计Pod中所有容器的**-m**选项的和,然后确定需要热插多少内存到轻量级虚机中,例如, @@ -255,7 +255,7 @@ Swap: 0 0 0 ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >由于pause容器只是一个占位容器没有工作负载,所以轻量级虚机启动时分配的内存可以被其它容器共享使用,因此上面例子中启动的新容器只需要再热插3GB的内存到轻量级虚机中即可。 @@ -334,7 +334,7 @@ docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --files-limit bash ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >- 如果**--files-limit**选项的取值小于安全容器默认设置的最小值1024且不为0时,安全容器qemu进程最多可以打开的文件描述符数量会被设置为最小值1024。 >- 如果**--files-limit**选项的取值为0时,安全容器qemu进程最多可以打开的文件描述符数量为系统可以打开文件描述符的最大值/proc/sys/fs/file-max除以400后得到的默认值。 >- 如果启动安全容器时没有显示指定**--files-limit**可以打开的文件描述符的上限,安全容器qemu进程可以打开的文件描述符数量的上限和系统默认值保持一致。 diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227-1.md" "b/docs/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227-1.md" similarity index 93% rename from "content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227-1.md" rename to "docs/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227-1.md" index 2efb60fa790ddcf4c7b4d56646680ff91db30cd6..36943fc57b1829a1629916b8d7f691d4a76f6b66 100644 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227-1.md" +++ "b/docs/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227-1.md" @@ -16,5 +16,5 @@ isula create/run [OPTIONS] [COMMAND] [ARG...] - COMMAND:系统容器启动后执行的命令。 - ARG:系统容器启动后执行命令对应的参数。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >系统容器的使用需要root权限。 diff --git "a/docs/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" "b/docs/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..8a9147aa3754ec51b829cc39be0d568921c3c9bb --- /dev/null +++ "b/docs/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" @@ -0,0 +1,5 @@ +# 使用指南 + +本章介绍iSula容器引擎的使用方法。 +>![](./public_sys-resources/icon-note.gif) **说明:** +>iSulad的所有使用操作均需要使用root权限。 diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225-1.md" "b/docs/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225-1.md" similarity index 63% rename from "content/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225-1.md" rename to "docs/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225-1.md" index 3df844abdc6d73e07372440ee141020c273a2c03..d72a36cfbb143542b48c4ae537063aa86b74aad7 100644 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225-1.md" +++ "b/docs/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225-1.md" @@ -1,6 +1,6 @@ # 使用方法 本章介绍安全容器的使用方法。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >安全容器的使用需要root权限。 diff --git "a/content/zh/docs/Container/\345\205\261\344\272\253\345\206\205\345\255\230\351\200\232\351\201\223.md" "b/docs/zh/docs/Container/\345\205\261\344\272\253\345\206\205\345\255\230\351\200\232\351\201\223.md" similarity index 98% rename from "content/zh/docs/Container/\345\205\261\344\272\253\345\206\205\345\255\230\351\200\232\351\201\223.md" rename to "docs/zh/docs/Container/\345\205\261\344\272\253\345\206\205\345\255\230\351\200\232\351\201\223.md" index 159542efcb7f7bec800d96159ec79e41909892fc..ec3b77a3bb5c4264a83d3321ab7d58555bff8718 100644 --- "a/content/zh/docs/Container/\345\205\261\344\272\253\345\206\205\345\255\230\351\200\232\351\201\223.md" +++ "b/docs/zh/docs/Container/\345\205\261\344\272\253\345\206\205\345\255\230\351\200\232\351\201\223.md" @@ -1,12 +1,12 @@ -# 共享内存通道 - -## 功能描述 - -系统容器提供容器与主机进程通过共享内存进行通信的功能,通过在容器创建时配置\--host-channel参数,可以在容器与主机之间共享同一tmpfs,从而达到主机与容器间通信的功能。 - -## 参数说明 - - +# 共享内存通道 + +## 功能描述 + +系统容器提供容器与主机进程通过共享内存进行通信的功能,通过在容器创建时配置\--host-channel参数,可以在容器与主机之间共享同一tmpfs,从而达到主机与容器间通信的功能。 + +## 参数说明 + + -

命令

参数

@@ -28,29 +28,29 @@
- -## 约束限制 - -- 宿主机上挂载的tmpfs的生命周期为从容器启动到容器删除,容器删除并解除对空间的占用后会移除这片空间。 -- 容器删除时会将宿主机上挂载tmpfs的路径删除,所以不允许使用宿主机上已存在的目录。 -- 为了宿主机上非root用户运行的进程能够与容器内进行通信,宿主机上tmpfs挂载的权限为1777。 - -## 使用示例 - -创建容器时指定\--host-channel参数: - -``` -[root@localhost ~]# isula run --rm -it --host-channel /testdir:/testdir:rw:32M --system-container --external-rootfs /root/myrootfs none init -root@3b947668eb54:/# dd if=/dev/zero of=/testdir/test.file bs=1024 count=64K -dd: error writing '/testdir/test.file': No space left on device -32769+0 records in -32768+0 records out -33554432 bytes (34 MB, 32 MiB) copied, 0.0766899 s, 438 MB/s -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->- 使用--host-channel大小限制时,若在容器内创建共享文件,则会受到容器内的内存配额限制(在容器内存使用达到极限时可能会产生oom)。 ->- 若用户在主机端创建共享文件,则不受容器内的内存配额限制。 ->- 若用户需要在容器内创建共享文件,且业务为内存密集型,可以通过设置容器内存配额为在原本基础上加上--host-channel配置的大小来消除影响。 - + + +## 约束限制 + +- 宿主机上挂载的tmpfs的生命周期为从容器启动到容器删除,容器删除并解除对空间的占用后会移除这片空间。 +- 容器删除时会将宿主机上挂载tmpfs的路径删除,所以不允许使用宿主机上已存在的目录。 +- 为了宿主机上非root用户运行的进程能够与容器内进行通信,宿主机上tmpfs挂载的权限为1777。 + +## 使用示例 + +创建容器时指定\--host-channel参数: + +``` +[root@localhost ~]# isula run --rm -it --host-channel /testdir:/testdir:rw:32M --system-container --external-rootfs /root/myrootfs none init +root@3b947668eb54:/# dd if=/dev/zero of=/testdir/test.file bs=1024 count=64K +dd: error writing '/testdir/test.file': No space left on device +32769+0 records in +32768+0 records out +33554432 bytes (34 MB, 32 MiB) copied, 0.0766899 s, 438 MB/s +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>- 使用--host-channel大小限制时,若在容器内创建共享文件,则会受到容器内的内存配额限制(在容器内存使用达到极限时可能会产生oom)。 +>- 若用户在主机端创建共享文件,则不受容器内的内存配额限制。 +>- 若用户需要在容器内创建共享文件,且业务为内存密集型,可以通过设置容器内存配额为在原本基础上加上--host-channel配置的大小来消除影响。 + diff --git "a/content/zh/docs/Container/\345\212\250\346\200\201\345\212\240\350\275\275\345\206\205\346\240\270\346\250\241\345\235\227.md" "b/docs/zh/docs/Container/\345\212\250\346\200\201\345\212\240\350\275\275\345\206\205\346\240\270\346\250\241\345\235\227.md" similarity index 97% rename from "content/zh/docs/Container/\345\212\250\346\200\201\345\212\240\350\275\275\345\206\205\346\240\270\346\250\241\345\235\227.md" rename to "docs/zh/docs/Container/\345\212\250\346\200\201\345\212\240\350\275\275\345\206\205\346\240\270\346\250\241\345\235\227.md" index d5c65f9e4ea5c4b5047863f2acaba8ff08772c0e..0c6b898f04273d31bb1cac263b68a138095cc69d 100644 --- "a/content/zh/docs/Container/\345\212\250\346\200\201\345\212\240\350\275\275\345\206\205\346\240\270\346\250\241\345\235\227.md" +++ "b/docs/zh/docs/Container/\345\212\250\346\200\201\345\212\240\350\275\275\345\206\205\346\240\270\346\250\241\345\235\227.md" @@ -1,12 +1,12 @@ -# 动态加载内核模块 - -## 功能描述 - -容器内业务可能依赖某些内核模块,可通过设置环境变量的方式,在系统容器启动前动态加载容器中业务需要的内核模块到宿主机,此特性需要配合syscontainer-hooks一起使用,具体使用可参看"容器资源动态管理(syscontainer-tools)"章节。 - -## 参数说明 - - +# 动态加载内核模块 + +## 功能描述 + +容器内业务可能依赖某些内核模块,可通过设置环境变量的方式,在系统容器启动前动态加载容器中业务需要的内核模块到宿主机,此特性需要配合syscontainer-hooks一起使用,具体使用可参看"容器资源动态管理(syscontainer-tools)"章节。 + +## 参数说明 + + -

命令

参数

@@ -23,31 +23,31 @@
- -## 约束限制 - -- 如果加载的内核模块是未经过验证的,或者跟宿主机已有模块冲突的场景,会导致宿主机出现不可预知问题,在做加载内核模块时需要谨慎操作。 -- 动态加载内核模块通过将需要加载的内核模块传递给容器,此功能是依靠syscontainer-tools捕获到容器启动的环境变量实现,依赖syscontainer-tools的正确安装部署。 -- 加载的内核模块需要手动进行删除。 - -## 使用示例 - -启动系统容器时,指定-e KERNEL\_MODULES参数,待系统容器启动后,可以看到ip\_vs模块被成功加载到内核中。 - -``` -[root@localhost ~]# lsmod | grep ip_vs -[root@localhost ~]# isula run -tid -e KERNEL_MODULES=ip_vs,ip_vs_wrr --hook-spec /etc/syscontainer-tools/hookspec.json --system-container --external-rootfs /root/myrootfs none init -ae18c4281d5755a1e153a7bff6b3b4881f36c8e528b9baba8a3278416a5d0980 -[root@localhost ~]# lsmod | grep ip_vs -ip_vs_wrr 16384 0 -ip_vs 176128 2 ip_vs_wrr -nf_conntrack 172032 7 xt_conntrack,nf_nat,nf_nat_ipv6,ipt_MASQUERADE,nf_nat_ipv4,nf_conntrack_netlink,ip_vs -nf_defrag_ipv6 20480 2 nf_conntrack,ip_vs -libcrc32c 16384 3 nf_conntrack,nf_nat,ip_vs -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->- 宿主机需要安装syscontainer-tools。 ->- 需要指定--hooks-spec为syscontainer hooks。 - + + +## 约束限制 + +- 如果加载的内核模块是未经过验证的,或者跟宿主机已有模块冲突的场景,会导致宿主机出现不可预知问题,在做加载内核模块时需要谨慎操作。 +- 动态加载内核模块通过将需要加载的内核模块传递给容器,此功能是依靠syscontainer-tools捕获到容器启动的环境变量实现,依赖syscontainer-tools的正确安装部署。 +- 加载的内核模块需要手动进行删除。 + +## 使用示例 + +启动系统容器时,指定-e KERNEL\_MODULES参数,待系统容器启动后,可以看到ip\_vs模块被成功加载到内核中。 + +``` +[root@localhost ~]# lsmod | grep ip_vs +[root@localhost ~]# isula run -tid -e KERNEL_MODULES=ip_vs,ip_vs_wrr --hook-spec /etc/syscontainer-tools/hookspec.json --system-container --external-rootfs /root/myrootfs none init +ae18c4281d5755a1e153a7bff6b3b4881f36c8e528b9baba8a3278416a5d0980 +[root@localhost ~]# lsmod | grep ip_vs +ip_vs_wrr 16384 0 +ip_vs 176128 2 ip_vs_wrr +nf_conntrack 172032 7 xt_conntrack,nf_nat,nf_nat_ipv6,ipt_MASQUERADE,nf_nat_ipv4,nf_conntrack_netlink,ip_vs +nf_defrag_ipv6 20480 2 nf_conntrack,ip_vs +libcrc32c 16384 3 nf_conntrack,nf_nat,ip_vs +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>- 宿主机需要安装syscontainer-tools。 +>- 需要指定--hooks-spec为syscontainer hooks。 + diff --git "a/content/zh/docs/Container/\345\215\207\347\272\247.md" "b/docs/zh/docs/Container/\345\215\207\347\272\247.md" similarity index 83% rename from "content/zh/docs/Container/\345\215\207\347\272\247.md" rename to "docs/zh/docs/Container/\345\215\207\347\272\247.md" index b9ffd7f394b64640a1b98cd2461ad41a4fdb2fa1..28d7a5dcce60956289e2625d3c7b4368b7c56319 100644 --- "a/content/zh/docs/Container/\345\215\207\347\272\247.md" +++ "b/docs/zh/docs/Container/\345\215\207\347\272\247.md" @@ -8,8 +8,8 @@ - 若为不同大版本之间的升级,例如从1.x.x版本升级到2.x.x版本,请先保存当前的配置文件/etc/isulad/daemon.json,并卸载已安装的iSulad软件包,然后安装待升级的iSulad软件包,随后恢复配置文件。 ->![](public_sys-resources/icon-note.gif) **说明:** ->- 可通过** sudo rpm -qa |grep iSulad** 或 **isula version** 命令确认当前iSulad的版本号。 +>![](./public_sys-resources/icon-note.gif) **说明:** +>- 可通过**sudo rpm -qa |grep iSulad** 或 **isula version** 命令确认当前iSulad的版本号。 >- 相同大版本之间,如果希望手动升级,请下载iSulad及其所有依赖库的RPM包进行升级,参考命令如下: > ``` > # sudo rpm -Uhv iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm diff --git "a/content/zh/docs/Container/\345\215\270\350\275\275.md" "b/docs/zh/docs/Container/\345\215\270\350\275\275.md" similarity index 100% rename from "content/zh/docs/Container/\345\215\270\350\275\275.md" rename to "docs/zh/docs/Container/\345\215\270\350\275\275.md" diff --git "a/content/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\350\200\203.md" "b/docs/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\350\200\203.md" similarity index 100% rename from "content/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\350\200\203.md" rename to "docs/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\350\200\203.md" diff --git "a/content/zh/docs/Container/\345\256\211\345\205\250\345\256\271\345\231\250.md" "b/docs/zh/docs/Container/\345\256\211\345\205\250\345\256\271\345\231\250.md" similarity index 89% rename from "content/zh/docs/Container/\345\256\211\345\205\250\345\256\271\345\231\250.md" rename to "docs/zh/docs/Container/\345\256\211\345\205\250\345\256\271\345\231\250.md" index 59dfe5bf88d08372051bf6863ebc7a19312655fd..9c07b50a15d1b43b47734be29ec99af8bd6b3f46 100644 --- "a/content/zh/docs/Container/\345\256\211\345\205\250\345\256\271\345\231\250.md" +++ "b/docs/zh/docs/Container/\345\256\211\345\205\250\345\256\271\345\231\250.md" @@ -7,7 +7,7 @@ 安全容器是使用虚拟化层进行容器间的隔离,同一个主机上不同的容器间运行互相不受影响。 **图 1** 安全容器架构 -![](figures/kata-arch.png) +![](./figures/kata-arch.png) 安全容器与Kubernetes中的Pod概念紧密联系,Kubernetes为容器调度管理平台的开源生态标准,它定义了一组容器操作相关接口(Container Runtime Interface 简称CRI)。 @@ -20,8 +20,8 @@ 安全容器与周边组件的关系如[图2](#fig17734185518269)所示。 **图 2** 安全容器与周边组件的关系 -![](figures/安全容器与周边组件的关系.png "安全容器与周边组件的关系") +![](./figures/sec-container.png) ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >安全容器的安装和使用需要使用root权限。 diff --git "a/content/zh/docs/Container/\345\256\211\345\205\250\346\200\247\345\222\214\351\232\224\347\246\273\346\200\247.md" "b/docs/zh/docs/Container/\345\256\211\345\205\250\346\200\247\345\222\214\351\232\224\347\246\273\346\200\247.md" similarity index 99% rename from "content/zh/docs/Container/\345\256\211\345\205\250\346\200\247\345\222\214\351\232\224\347\246\273\346\200\247.md" rename to "docs/zh/docs/Container/\345\256\211\345\205\250\346\200\247\345\222\214\351\232\224\347\246\273\346\200\247.md" index 200736c81e65491a747287f965ca92f53ea6ff4d..a7e3676cf7e1eade5c0366b1bc6a0f7778ef724e 100644 --- "a/content/zh/docs/Container/\345\256\211\345\205\250\346\200\247\345\222\214\351\232\224\347\246\273\346\200\247.md" +++ "b/docs/zh/docs/Container/\345\256\211\345\205\250\346\200\247\345\222\214\351\232\224\347\246\273\346\200\247.md" @@ -46,7 +46,7 @@ user namespace是将容器的root映射到主机的普通用户,使得容器 ### 使用指导 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >指定--user-remap参数前,请先将rootfs下所有目录和文件的uid和gid做整体偏移,偏移量为--user-remap指定uid和gid的偏移量。 >例如将dev目录的uid和gid整体uid和gid偏移100000的参考命令为: >chown 100000:100000 dev @@ -184,7 +184,7 @@ exit - Alice可以执行任何container操作:\{"name":"policy\_5","users":\["alice"\],"actions":\["container"\]\}。 - Alice可以执行任何container操作,但请求的种类只能是get:\{"name":"policy\_5","users":\["alice"\],"actions":\["container"\], "readonly":true \}。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >- 配置中匹配action支持正则表达式。 >- users不支持正则表达式。 >- users不能有重复用户,即同一用户不能被多条规则匹配。 diff --git "a/content/zh/docs/Container/\345\256\211\345\205\250\347\211\271\346\200\247.md" "b/docs/zh/docs/Container/\345\256\211\345\205\250\347\211\271\346\200\247.md" similarity index 98% rename from "content/zh/docs/Container/\345\256\211\345\205\250\347\211\271\346\200\247.md" rename to "docs/zh/docs/Container/\345\256\211\345\205\250\347\211\271\346\200\247.md" index 2b42fa30891ad70be07fdea0620f7c9fe89f0d09..9c7701ba978e0d052be1fa1f5482e50324560c31 100644 --- "a/content/zh/docs/Container/\345\256\211\345\205\250\347\211\271\346\200\247.md" +++ "b/docs/zh/docs/Container/\345\256\211\345\205\250\347\211\271\346\200\247.md" @@ -31,7 +31,7 @@ seccomp(**secure computing** **mode**)是linux kernel从2.6.23版本开始 isula run -itd --security-opt seccomp=/path/to/seccomp/profile.json rnd-dockerhub.huawei.com/official/busybox ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >1. 创建容器时通过--security-opt将配置文件传给容器时,采用默认配置文件(/etc/isulad/seccomp\_default.json)。 >2. 创建容器时--security-opt设置为unconfined时,对容器不过滤系统调用。 >3. “/path/to/seccomp/profile.json”需要是绝对路径。 @@ -117,7 +117,7 @@ isula run --rm -it --security-opt seccomp:/path/to/seccomp/profile.json rnd-dock } ``` ->![](public_sys-resources/icon-notice.gif) **须知:** +>![](./public_sys-resources/icon-notice.gif) **须知:** >- defaultAction、syscalls:对应的action的类型是一样的,但其值是不能一样的,目的就是让所有的syscal都有一个默认的action,并且如果syscalls数组中有明确的定义,就以syscalls中的为准,由于defaultAction、action的值不一样,就能保证action不会有冲突。当前支持的action有: > "SCMP\_ACT\_ERRNO":禁止,并打印错误信息。 > "SCMP\_ACT\_ALLOW":允许。 @@ -196,7 +196,7 @@ SELinux\(Security-Enhanced Linux\)是一个Linux内核的安全模块,提供 - 引入SELinux会影响性能,设置SELinux之前需要对场景进行评估,确定必要时打开daemon端SELinux开关并设置容器SELinux配置 - 对挂载卷进行标签配置时,源目录不允许为/、/usr、/etc、/tmp、/home、/run、/var、/root以及/usr的子目录。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >- 目前iSulad不支持对容器的文件系统打标签,确保容器文件系统及配置目录打上容器可访问标签,需使用chcon命令对其打上标签。 >- 若iSulad启用SELinux访问控制,建议daemon启动前对/var/lib/isulad目录打上标签,容器容器创建时目录下生产的文件及文件夹将默认继承其标签,例如: > ``` diff --git "a/content/zh/docs/Container/\345\256\211\350\243\205-\345\215\207\347\272\247\344\270\216\345\215\270\350\275\275.md" "b/docs/zh/docs/Container/\345\256\211\350\243\205-\345\215\207\347\272\247\344\270\216\345\215\270\350\275\275.md" similarity index 100% rename from "content/zh/docs/Container/\345\256\211\350\243\205-\345\215\207\347\272\247\344\270\216\345\215\270\350\275\275.md" rename to "docs/zh/docs/Container/\345\256\211\350\243\205-\345\215\207\347\272\247\344\270\216\345\215\270\350\275\275.md" diff --git "a/content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256-2.md" "b/docs/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256-2.md" similarity index 96% rename from "content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256-2.md" rename to "docs/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256-2.md" index b0ec578131a3ec43447fffbfcc252a2b7cf381c2..9fd05d1000b8c7b1ab176ef925215ee87cda836a 100644 --- "a/content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256-2.md" +++ "b/docs/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256-2.md" @@ -119,7 +119,7 @@ rpm -ivh kata-containers-.rpm - enable\_debug :kata-agent进程debug开关。 4. runtime - - enable\_cpu\_memory\_hotplug:CPU和内存热插拔开关。 - - enable\_debug:kata-runtime进程debug开关。 + - enable\_cpu\_memory\_hotplug :CPU和内存热插拔开关。 + - enable\_debug :kata-runtime进程debug开关。 diff --git "a/content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" "b/docs/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" similarity index 97% rename from "content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" rename to "docs/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" index ba1a4f3a5434cc5ca2b683eae10c1f446cf03b3a..122f968b2247b2519972e74b3217edb6bc03c881 100644 --- "a/content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" +++ "b/docs/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" @@ -1,6 +1,6 @@ # 安装与配置 本章介绍iSulad的安装、安装后配置,以及升级和卸载的方法。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >iSulad的安装、升级、卸载均需要使用root权限。 @@ -43,7 +43,7 @@ iSulad 安装完成后,可以根据需要进行相关配置。 轻量级容器引擎(iSulad)服务端daemon为isulad,isulad可以通过配置文件进行配置,也可以通过命令行的方式进行配置,例如:isulad --xxx,优先级从高到低是:命令行方式\>配置文件\>代码中默认配置。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >如果采用systemd管理iSulad进程,修改/etc/sysconfig/iSulad文件中的OPTIONS字段,等同于命令行方式进行配置。 - **命令行方式** @@ -70,7 +70,6 @@ iSulad 安装完成后,可以根据需要进行相关配置。 --hook-spec Default hook spec file applied to all containers -H, --host The socket name used to create gRPC server --image-layer-check Check layer intergrity when needed - --image-opt-timeout Max timeout(default 5m) for image operation --insecure-registry Disable TLS verification for the given registry --insecure-skip-verify-enforce Force to skip the insecure verify(default false) --log-driver Set daemon log driver, such as: file @@ -264,15 +263,6 @@ iSulad 安装完成后,可以根据需要进行相关配置。 overlay2.basesize=${size} #等价于overlay2.size -

--image-opt-timeout

- -

"image-opt-timeout": "5m"

- -

镜像操作超时时间,默认为5m

- -

值为-1表示不限制超时。

- -

--registry-mirrors

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

@@ -478,7 +468,6 @@ iSulad 安装完成后,可以根据需要进行相关配置。 "rnd-dockerhub.huawei.com" ], "pod-sandbox-image": "", - "image-opt-timeout": "5m", "native.umask": "secure", "network-plugin": "", "cni-bin-dir": "", @@ -489,12 +478,11 @@ iSulad 安装完成后,可以根据需要进行相关配置。 } ``` - >![](public_sys-resources/icon-notice.gif) **须知:** + >![](./public_sys-resources/icon-notice.gif) **须知:** >默认配置文件/etc/isulad/daemon.json仅供参考,请根据实际需要进行配置 ### 存储说明 - @@ -504,14 +492,14 @@ iSulad 安装完成后,可以根据需要进行相关配置。 - - @@ -532,35 +520,35 @@ iSulad 安装完成后,可以根据需要进行相关配置。 - - - - - @@ -592,7 +580,7 @@ iSulad 安装完成后,可以根据需要进行相关配置。 - 日志文件管理: - >![](public_sys-resources/icon-notice.gif) **须知:** + >![](./public_sys-resources/icon-notice.gif) **须知:** >日志功能对接: iSulad由systemd管理,日志也由systemd管理,然后传输给rsyslogd。rsyslog默认会对写日志速度有限制,可以通过修改/etc/rsyslog.conf文件,增加"$imjournalRatelimitInterval 0"配置项,然后重启rsyslogd的服务即可。 - 命令行参数解析限制 @@ -786,7 +774,7 @@ iSulad采用C/S模式进行设计,在默认情况,iSulad守护进程isulad 如果需要采用单向认证方式进行通讯,则服务端采用模式2,客户端采用模式2。 ->![](public_sys-resources/icon-notice.gif) **须知:** +>![](./public_sys-resources/icon-notice.gif) **须知:** >- 采用RPM安装方式时,服务端配置可通过/etc/isulad/daemon.json以及/etc/sysconfig/iSulad配置修改 >- 相比非认证或者单向认证方式,双向认证具备更高的安全性,推荐使用双向认证的方式进行通讯 >- GRPC开源组件日志不由iSulad进行接管,如果需要查看GRPC相关日志,请按需设置GRPC\_VERBOSITY和GRPC\_TRACE环境变量 diff --git "a/content/zh/docs/Container/\345\256\211\350\243\205\346\214\207\345\257\274.md" "b/docs/zh/docs/Container/\345\256\211\350\243\205\346\214\207\345\257\274.md" similarity index 84% rename from "content/zh/docs/Container/\345\256\211\350\243\205\346\214\207\345\257\274.md" rename to "docs/zh/docs/Container/\345\256\211\350\243\205\346\214\207\345\257\274.md" index fbcd663a6015c6b18d9b3b7e887ac5b045549b08..fcf2db30db8519b5fad347b79784a77788e783b0 100644 --- "a/content/zh/docs/Container/\345\256\211\350\243\205\346\214\207\345\257\274.md" +++ "b/docs/zh/docs/Container/\345\256\211\350\243\205\346\214\207\345\257\274.md" @@ -1,31 +1,31 @@ -# 安装指导 - ->![](public_sys-resources/icon-note.gif) **说明:** ->系统容器的安装需要使用root权限。 - -1. 首先需要安装iSulad容器引擎。 - - ``` - # yum install iSulad - ``` - -2. 安装系统容器依赖包。 - - ``` - # yum install syscontainer-tools authz lxcfs-tools lxcfs - ``` - -3. 查看iSulad是否已经启动。 - - ``` - # systemctl status isulad - ``` - -4. 开启lxcfs和authz服务。 - - ``` - # systemctl start lxcfs - # systemctl start authz - ``` - - +# 安装指导 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>系统容器的安装需要使用root权限。 + +1. 首先需要安装iSulad容器引擎。 + + ``` + # yum install iSulad + ``` + +2. 安装系统容器依赖包。 + + ``` + # yum install syscontainer-tools authz lxcfs-tools lxcfs + ``` + +3. 查看iSulad是否已经启动。 + + ``` + # systemctl status isulad + ``` + +4. 开启lxcfs和authz服务。 + + ``` + # systemctl start lxcfs + # systemctl start authz + ``` + + diff --git "a/content/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" "b/docs/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" similarity index 96% rename from "content/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" rename to "docs/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" index 12d586d56f7a819ae6437f0321f5d018d24970a3..fd0baacd10fdd2e048c13a8fe9d37f91acffb07d 100644 --- "a/content/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" +++ "b/docs/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" @@ -31,7 +31,7 @@ ## 注意事项 - Docker容器的安装需要使用root权限。 -- docker-engine rpm包与containerd rpm包、runc rpm包、podman rpm包不能同时安装。因为docker-engine rpm包中已经包含Docker运行所需的所有组件,其中包括containerd、runc、docker二进制,且containerd、runc和podman rpm包也分别提供了对应的二进制,所以重复安装时会出现软件包冲突。 +- docker-engine rpm包与containerd rpm包、runc rpm包、docker-proxy rpm包、podman rpm包不能同时安装。因为docker-engine rpm包中已经包含Docker运行所需的所有组件,其中包括containerd、runc、docker-proxy、docker二进制,且containerd、runc、docker-proxy和podman rpm包也分别提供了对应的二进制,所以重复安装时会出现软件包冲突。 ## 基本安装配置 @@ -52,12 +52,12 @@ cat /etc/docker/daemon.json 用户需要明白重新指定各种运行目录和文件(包括--graph、--exec-root等),可能会存在目录冲突,或文件属性变换,对应用的正常使用造成影响。 ->![](public_sys-resources/icon-notice.gif) **须知:** +>![](./public_sys-resources/icon-notice.gif) **须知:** >用户指定的目录或文件应为docker专用,避免冲突导致的文件属性变化带来安全问题。 - 以--graph为例,当我们使用/new/path/作为daemon新的Root Dir时,如果/new/path/下已经存在文件,且目录或文件名与docker需要使用的目录或文件名冲突(例如: containers、hooks、tmp等目录)时,docker可能会更新原有目录或文件的属性,包括属主、权限等为自己的属主和权限。 ->![](public_sys-resources/icon-notice.gif) **须知:** +>![](./public_sys-resources/icon-notice.gif) **须知:** >从docker-17.05开始,--graph参数被标记为Deprecated,用新的参数--data-root替代。 ### daemon自带网络配置 @@ -66,13 +66,13 @@ cat /etc/docker/daemon.json - Docker network create 并发创建网络的时候,可以创建具有相同名字的两个网络。原因是docker network是通过id来区分的,name只是个便于识别的别名而已,不保证唯一性。 - Docker在桥接bridge网络模式下,Docker容器是通过宿主机上的NAT模式,建立与宿主机之外世界的通信。Docker Daemon在启动一个容器时,每在宿主机上映射一个端口都会启动一个docker-proxy进程来实现访问代理。建议用户在使用这种userland-proxy时,只映射必须的端口,减少docker-proxy进行端口映射所消耗的资源。 -### daemon-umask配置.md">daemon umask配置 +### daemon-umask配置 容器主进程和exec进程的默认umask为0022,为了满足安全性需求,避免容器受到攻击,修改runc的实现,将默认umask修改为0027。修改后others群组将无法访问新建文件或目录。 docker启动容器时的默认umask值为0027,可以在dockerd启动时,使用--exec-opt native.umask=normal参数将容器启动时的umask修改为0022。 ->![](public_sys-resources/icon-notice.gif) **须知:** +>![](./public_sys-resources/icon-notice.gif) **须知:** >如果docker create/run也配置了native.umask参数,则以docker create/run中的配置为准。 详细的配置见[docker create](#create.md#ZH-CN_TOPIC_0184808242)和[docker run](#run.md#ZH-CN_TOPIC_0184808254)章节的参数说明。 @@ -145,7 +145,7 @@ docker支持配置audit,但不是强制的。例如: [root@localhost signal]# auditctl -l | grep docker -w /var/lib/docker/ -p rwxa -k docker ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >-p \[r|w|x|a\] 和-w一起使用,观察用户对这个目录的读、写、执行或者属性变化(如时间戳变化)。这样的话,在/var/lib/docker目录下的任何文件、目录操作,都会打印日志到audit.log中,从而会有太多的日志往audit.log中记录,会严重地影响auditd, 比如内存、cpu占用等,进而影响os的运行。例如:每次执行"ls /var/lib/docker/containers"都会有类似如下日志记录到/var/log/audit/audit.log中。 ``` @@ -162,7 +162,7 @@ type=SYSCALL msg=audit(1517656451.457:8097): arch=c000003e syscall=257 success=y docker run -itd --security-opt seccomp=unconfined busybox:latest ``` -### 禁止修改docker-daemon的私有目录.md">禁止修改docker daemon的私有目录 +### 禁止修改docker-daemon的私有目录 不允许对Docker用的根目录(默认/var/lib/docker)和运行时目录(默认/run/docker)以及其文件作任何修改,包括在该目录下删除文件,添加文件,对目录或者文件做软/硬链接,修改文件的属性/权限,修改文件的内容等,如果确实需要做修改,后果自负。 @@ -441,7 +441,7 @@ Error response from daemon: oci runtime error: container with id exists: xxxxxx - 构建缓存,构建缓存信息会在重启后删除。 - containerd保存的元数据,由于启动容器会重建containerd元数据,重启节点会清理containerd中保存的元数据。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >用户若选择采用手动清理恢复环境的方式,可通过配置环境变量“DISABLE\_CRASH\_FILES\_DELETE=true”屏蔽daemon掉电重启时db文件清理功能。 diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\345\201\245\345\272\267\347\212\266\346\200\201\346\243\200\346\237\245.md" "b/docs/zh/docs/Container/\345\256\271\345\231\250\345\201\245\345\272\267\347\212\266\346\200\201\346\243\200\346\237\245.md" similarity index 100% rename from "content/zh/docs/Container/\345\256\271\345\231\250\345\201\245\345\272\267\347\212\266\346\200\201\346\243\200\346\237\245.md" rename to "docs/zh/docs/Container/\345\256\271\345\231\250\345\201\245\345\272\267\347\212\266\346\200\201\346\243\200\346\237\245.md" diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\345\206\205reboot-shutdown.md" "b/docs/zh/docs/Container/\345\256\271\345\231\250\345\206\205reboot-shutdown.md" similarity index 98% rename from "content/zh/docs/Container/\345\256\271\345\231\250\345\206\205reboot-shutdown.md" rename to "docs/zh/docs/Container/\345\256\271\345\231\250\345\206\205reboot-shutdown.md" index 14508d324269ffafe4592db409c74aee17837129..fed94bfad7f1cb583826e4c20847dd8aaf351105 100644 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\345\206\205reboot-shutdown.md" +++ "b/docs/zh/docs/Container/\345\256\271\345\231\250\345\206\205reboot-shutdown.md" @@ -1,12 +1,12 @@ -# 容器内reboot/shutdown - -## 功能描述 - -系统容器支持在容器内执行reboot和shutdown命令。执行reboot命令效果同重启容器一致;执行shutdown命令效果同停止容器一致。 - -## 参数说明 - - +# 容器内reboot/shutdown + +## 功能描述 + +系统容器支持在容器内执行reboot和shutdown命令。执行reboot命令效果同重启容器一致;执行shutdown命令效果同停止容器一致。 + +## 参数说明 + +

文件名

*

+

\*

/etc/default/isulad/

存放isulad的OCI配置文件和钩子模板文件,文件夹下的配置文件权限设置为0640,sysmonitor检查脚本权限为0550

*

+

\*

/etc/isulad/

存放isulad的PID,同时也是一个文件锁防止启动多个isulad实例

*

+

\*

/run/lxc/

文件锁文件,isula运行过程创建的文件

*

+

\*

/var/run/isulad/

实时通讯缓存文件,isulad运行过程创建的文件

*

+

\*

/var/run/isula/

实时通讯缓存文件,isula运行过程创建的文件

*

+

\*

/var/lib/lcr/

LCR 组件临时目录

*

+

\*

/var/lib/isulad/

-

命令

参数

@@ -25,55 +25,55 @@
- -## 约束限制 - -- shutdown功能,依赖于不同的OS,以实际容器运行环境对应OS为准。 -- 执行“shutdown -h now”命令关闭系统时,不能多次占用console。例如“isula run -ti”命令打开一个console,在另一个host bash中isula attach该容器,会打开另一个console,此时执行shutdown会失败。 - -## 使用示例 - -- 容器启动时指定\--restart on-reboot参数,示例如下: - - ``` - [root@localhost ~]# isula run -tid --restart on-reboot --system-container --external-rootfs /root/myrootfs none init - 106faae22a926e22c828a0f2b63cf5c46e5d5986ea8a5b26de81390d0ed9714f - ``` - - -- 进入容器执行reboot命令: - - ``` - [root@localhost ~]# isula exec -it 10 bash - [root@localhost /]# reboot - ``` - - 查看容器是否重启: - - ``` - [root@localhost ~]# isula exec -it 10 ps aux - USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND - root 1 0.1 0.0 21588 9504 ? Ss 12:11 0:00 init - root 14 0.1 0.0 27024 9376 ? Ss 12:11 0:00 /usr/lib/system - root 17 0.0 0.0 18700 5876 ? Ss 12:11 0:00 /usr/lib/system - dbus 22 0.0 0.0 9048 3624 ? Ss 12:11 0:00 /usr/bin/dbus-d - root 26 0.0 0.0 8092 3012 ? Rs+ 12:13 0:00 ps aux - ``` - -- 进入容器执行shutdown命令: - - ``` - [root@localhost ~]# isula exec -it 10 bash - [root@localhost /]# shutdown -h now - [root@localhost /]# [root@localhost ~]# - ``` - - 检查容器是否停止: - - ``` - [root@localhost ~]# isula exec -it 10 bash - Error response from daemon: Exec container error;Container is not running:106faae22a926e22c828a0f2b63cf5c46e5d5986ea8a5b26de81390d0ed9714f - ``` - - + + +## 约束限制 + +- shutdown功能,依赖于不同的OS,以实际容器运行环境对应OS为准。 +- 执行“shutdown -h now”命令关闭系统时,不能多次占用console。例如“isula run -ti”命令打开一个console,在另一个host bash中isula attach该容器,会打开另一个console,此时执行shutdown会失败。 + +## 使用示例 + +- 容器启动时指定\--restart on-reboot参数,示例如下: + + ``` + [root@localhost ~]# isula run -tid --restart on-reboot --system-container --external-rootfs /root/myrootfs none init + 106faae22a926e22c828a0f2b63cf5c46e5d5986ea8a5b26de81390d0ed9714f + ``` + + +- 进入容器执行reboot命令: + + ``` + [root@localhost ~]# isula exec -it 10 bash + [root@localhost /]# reboot + ``` + + 查看容器是否重启: + + ``` + [root@localhost ~]# isula exec -it 10 ps aux + USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND + root 1 0.1 0.0 21588 9504 ? Ss 12:11 0:00 init + root 14 0.1 0.0 27024 9376 ? Ss 12:11 0:00 /usr/lib/system + root 17 0.0 0.0 18700 5876 ? Ss 12:11 0:00 /usr/lib/system + dbus 22 0.0 0.0 9048 3624 ? Ss 12:11 0:00 /usr/bin/dbus-d + root 26 0.0 0.0 8092 3012 ? Rs+ 12:13 0:00 ps aux + ``` + +- 进入容器执行shutdown命令: + + ``` + [root@localhost ~]# isula exec -it 10 bash + [root@localhost /]# shutdown -h now + [root@localhost /]# [root@localhost ~]# + ``` + + 检查容器是否停止: + + ``` + [root@localhost ~]# isula exec -it 10 bash + Error response from daemon: Exec container error;Container is not running:106faae22a926e22c828a0f2b63cf5c46e5d5986ea8a5b26de81390d0ed9714f + ``` + + diff --git "a/docs/zh/docs/Container/\345\256\271\345\231\250\345\267\245\345\205\267.md" "b/docs/zh/docs/Container/\345\256\271\345\231\250\345\267\245\345\205\267.md" new file mode 100644 index 0000000000000000000000000000000000000000..92ab3407cc04652c0896b9aba4ffc3c0b8d829ec --- /dev/null +++ "b/docs/zh/docs/Container/\345\256\271\345\231\250\345\267\245\345\205\267.md" @@ -0,0 +1,3 @@ +# 容器工具 + +为了更好地管理和使用容器,iSula 推出了一些容器相关工具,包括容器镜像构建工具 iSula-build、容器迁移工具 iSula-transform等。本章介绍容器相关工具的安装和使用方法,以指导用户更好地使用对应工具。 \ No newline at end of file diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" "b/docs/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" similarity index 99% rename from "content/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" rename to "docs/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" index a230e281993e13fb393c217bbce61dde05a1d314..1741c561a9434ae2a973e997ddcd8d7d59eb26c9 100644 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" +++ "b/docs/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" @@ -125,11 +125,7 @@ docker命令支持多个参数选项,对于参数选项有以下约定:

设置运行时执行选项。

例如支持native.umask选项:

-
# 启动的容器umask值为0022 
---exec-opt native.umask=normal 
-
-# 启动的容器umask值为0027(默认值)
---exec-opt  native.umask=secure    
+
# 启动的容器umask值为0022 --exec-opt native.umask=normal # 启动的容器umask值为0027(默认值)--exec-opt  native.umask=secure

注意如果docker create/run也配置了native.umask参数则以docker create/run中的配置为准。

diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" "b/docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" similarity index 99% rename from "content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" rename to "docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" index 65e7d9a39a25be5d622e281a186159cafdb619ed..02e00cf5715d2c0768d035ccda20e25f368414f3 100644 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" +++ "b/docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" @@ -575,7 +575,7 @@ CONTAINER ID IMAGE COMMAND CREATED } ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >- 容器内健康检查的状态信息最多保存5条。会保存最后得到的5条记录。 >- 容器内健康检查相关配置同时最多只能有一条生效。Dockerfile中配置的靠后的条目会覆盖靠前的;容器创建时的配置会覆盖镜像中的。 >- 在Dockerfile中可以通过 HEALTHCHECK NONE来取消引用的镜像中的健康检查配置。在容器运行时可以通过配置--no-healthcheck来取消镜像中的健康检查配置。不允许在启动时同时配置健康检查相关选项与--no-healthcheck选项。 diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" "b/docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" similarity index 99% rename from "content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" rename to "docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" index 9f9f5c15d95632319573d095b2a74399259b31e9..23b7f49276f5739e2525259eb331e28fdd3856d4 100644 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" +++ "b/docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" @@ -1079,7 +1079,7 @@ b15976967abb busybox:latest "bash" 34 seconds ago $ sudo docker restart busybox ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >容器在restart过程中,如果容器内存在D状态或Z状态的进程,可能会导致容器重启失败,这需要进一步分析导致容器内进程D状态或Z状态的原因,待容器内进程D状态或Z状态解除后,再进行容器restart操作。 ## rm diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206.md" "b/docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206.md" similarity index 98% rename from "content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206.md" rename to "docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206.md" index 6d25ee645462cd89a5720dd2113c98053f4f29b0..177203ff440a594c80b365f1d5b2157d991c1845 100644 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206.md" +++ "b/docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206.md" @@ -49,7 +49,7 @@ create命令支持参数参考下表。

说明

-

create

+

create

  

--annotation

@@ -232,7 +232,7 @@ create命令支持参数参考下表。

--mount

-

挂载主机目录到容器中

+

挂载主机目录/卷/文件系统到容器中

--no-healthcheck

@@ -301,6 +301,11 @@ create命令支持参数参考下表。

挂载一个卷

+

--volumes-from=[]

+ +

使用指定的容器的挂载配置

+ + @@ -364,14 +369,15 @@ start命令支持参数参考下表。

指定要连接的iSulad socket文件路径

-

-R, --runtime

+

-a, --attach

-

容器运行时,参数支持"lcr",忽略大小写,因此"LCR"和"lcr"是等价的

+

启动容器时连接到容器的STDOUT和STDERR

+ ### 示例 启动一个新容器 @@ -561,11 +567,6 @@ run命令支持参数参考下表。

即使没有连接到容器的标准输入,也要保持容器的标准输入打开

-

--log-driver

- -

设置日志驱动,支持syslog和json-file。

- -

--log-opt=[]

日志驱动程序选项,默认禁用记录容器串口日志功能,可以通过"--log-opt disable-log=false"来开启。

@@ -681,7 +682,7 @@ run命令支持参数参考下表。 备注:轻量级容器的参数中type支持bind或squashfs,当type=squashfs时,src是镜像的路径;原生docker的参数type支持bind、volume、tmpfs。 - restart重启策略不支持unless-stopped。 -- 以下三种情况与docker 返回值不一致,docker返回127,轻量级容器返回125 +- 以下三种情况与docker 返回值不一致,docker返回127,轻量级容器返回125 --device参数指定主机设备为不存在的设备 @@ -743,12 +744,12 @@ run命令支持参数参考下表。 - >![](public_sys-resources/icon-notice.gif) **须知:** + >![](./public_sys-resources/icon-notice.gif) **须知:** >第一种情况,先挂载/home/test1,然后挂载/home/test2,这种情况会导致/home/test1的内容覆盖掉原来/mnt下面的内容,这样可能导致/mnt下面不存在abc目录,这样会导致挂载/home/test2到/mnt/abc失败。 >第二种情况,先挂载/home/test2,然后挂载/home/test1。这种情况,第二次的挂载会把/mnt的内容替换为/home/test1的内容,这样第一次挂载的/home/test2到/mnt/abc的内容就看不到了。 - >因此,不支持第一种使用方式;第二种使用用户需要了解这种数据无法访问的风险 + >因此,不支持第一种使用方式;第二种使用用户需要了解这种数据无法访问的风险 。 - >![](public_sys-resources/icon-notice.gif) **须知:** + >![](./public_sys-resources/icon-notice.gif) **须知:** >- 高并发场景(并发启动200容器)下,glibc的内存管理机制会导致内存空洞以及虚拟内存较大(例如10GB)的问题。该问题是高并发场景下glibc内存管理机制的限制,而不是内存泄露,不会导致内存消耗无限增大。可以通过设置MALLOC\_ARENA\_MAX环境变量来减少虚拟内存的问题,而且可以增大减少物理内存的概率。但是这个环境变量会导致iSulad的并发性能下降,需要用户根据实际情况做配置。 > ``` > 参考实践情况,平衡性能和内存,可以设置MALLOC_ARENA_MAX为4。(在arm64服务器上面对iSulad的性能影响在10%以内) @@ -928,14 +929,11 @@ rm命令支持参数参考下表。

指定要连接的iSulad socket文件路径

-

-v, --volume

- -

移除挂载在容器上的卷(备注:目前iSulad尚不使用此功能)

- + ### 约束限制 - 在IO正常情况,空环境(只有1个容器)删除一个running容器的时间为T1,200个容器的环境(容器无大量IO操作,host IO正常)删除一个running容器所需时间为T2。T2的规格为:T2 = max \{ T1 \* 3, 5 \} 秒钟。 @@ -1141,7 +1139,7 @@ exec命令支持参数参考下表。 isula exec后台执行的方式如下: - 使用**isula exec 脚本 & **的方式后台执行exec,如:isula exec container\_name script & ,isula exec 后台执行,执行的脚本中不断cat某一文件,正常时在当前终端有输出,如果在当前终端执行回车操作,客户端会因读IO失败而退出读stdout的动作,使终端不再输出,服务端由于进程仍然在cat文件,会继续往fifo的buffer里写入数据,当缓存写满时,容器内进程会卡死在write动作上。 + 使用**isula exec 脚本 &**的方式后台执行exec,如:isula exec container\_name script & ,isula exec 后台执行,执行的脚本中不断cat某一文件,正常时在当前终端有输出,如果在当前终端执行回车操作,客户端会因读IO失败而退出读stdout的动作,使终端不再输出,服务端由于进程仍然在cat文件,会继续往fifo的buffer里写入数据,当缓存写满时,容器内进程会卡死在write动作上。 - 轻量级容器使用exec执行带有管道操作的命令时,建议使用/bin/bash -c 方式执行该命令。 @@ -1244,7 +1242,7 @@ inspect命令支持参数参考下表。 ### 约束限制 -- 轻量级容器不支持format为“\{\{.State\}\}”的格式化输出,支持“\{\{json .State\}\}”的json格式化输出。当inspect镜像时,不支持-f参数。 +- 轻量级容器不支持format为“\{ \{.State\} \}”的格式化输出,支持“\{ \{json .State\} \}”的json格式化输出。当inspect镜像时,不支持-f参数。 ### 示例 diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\345\212\250\346\200\201\347\256\241\347\220\206.md" "b/docs/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\345\212\250\346\200\201\347\256\241\347\220\206.md" similarity index 99% rename from "content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\345\212\250\346\200\201\347\256\241\347\220\206.md" rename to "docs/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\345\212\250\346\200\201\347\256\241\347\220\206.md" index c09fa4af20f3643963297e7a371796c88cf78262..2f5bbe43992fcac19b00c8d7d54cda33cfe73de3 100644 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\345\212\250\346\200\201\347\256\241\347\220\206.md" +++ "b/docs/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\345\212\250\346\200\201\347\256\241\347\220\206.md" @@ -1,5 +1,11 @@ # 容器资源动态管理 +- [容器资源动态管理](#容器资源动态管理.md) + - [设备管理](#设备管理) + - [网卡管理](#网卡管理) + - [路由管理](#路由管理) + - [挂卷管理](#挂卷管理) + 普通容器无法支持对容器内的资源进行管理,例如添加一个块设备到容器、插入一块物理/虚拟网卡到容器。系统容器场景下,通过syscontainer-tools工具可以实现动态为容器挂载/卸载块设备,网络设备,路由和卷等资源。 要使用此功能,需要安装syscontainer-tools工具: @@ -8,11 +14,7 @@ [root@localhost ~]# yum install syscontainer-tools ``` -- [容器资源动态管理](#容器资源动态管理.md) - - [设备管理](#设备管理) - - [网卡管理](#网卡管理) - - [路由管理](#路由管理) - - [挂卷管理](#挂卷管理) + ## 设备管理 @@ -253,7 +255,7 @@ container\_id:容器id。 Add network interface to container 2aaca5c1af7c (eth3,eth1) done ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >添加虚拟网卡或物理网卡时,请确保网卡处于空闲状态,添加正在使用的网卡会导致系统网络断开。 diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" "b/docs/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" similarity index 99% rename from "content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" rename to "docs/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" index 20223d146e428ef50ec37117298c54a0f9aefedc..7e5c4ddb366c17997e4cf6fc7d31595b001ab152 100644 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" +++ "b/docs/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" @@ -166,7 +166,7 @@ create/run时可以指定下列参数。 isula run -tid --cpuset-cpus 0,2-3 busybox sh ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >是否设置成功,请参见“查询单个容器信息”章节。 ## 限制运行时的内存 @@ -457,7 +457,7 @@ overlay 10.0M 10.0M 0 100% / 使用限额功能的isulad切换数据盘时,需要保证被切换的数据盘使用\`prjquota\`选项挂载,且/var/lib/isulad/storage/overlay2目录的挂载方式与/var/lib/isulad相同。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >切换数据盘时需要保证/var/lib/isulad/storage/overlay2的挂载点被卸载。 @@ -529,7 +529,7 @@ isula run -ti --files-limit 1024 busybox bash 根因是lxc和runc启动过程的原理不一样,lxc创建cgroup子组后先设置files.limit值,再将容器进程的PID写入该子组的cgroup.procs文件,此时该进程已经打开超过1个句柄,因而写入报错导致启动失败。runc创建cgroup子组后先将容器进程的PID写入该子组的cgroup.procs文件,再设置files.limit值,此时由于该子组内的进程已经打开超过1个句柄,因而写入files.limit不会生效,内核也不会报错,容器启动成功。 -## 限制容器内可以创建的进程-线程数.md">限制容器内可以创建的进程/线程数 +## 限制容器内可以创建的进程-线程数 ### 描述 diff --git "a/content/zh/docs/Container/\346\214\207\345\256\232rootfs\345\210\233\345\273\272\345\256\271\345\231\250.md" "b/docs/zh/docs/Container/\346\214\207\345\256\232rootfs\345\210\233\345\273\272\345\256\271\345\231\250.md" similarity index 95% rename from "content/zh/docs/Container/\346\214\207\345\256\232rootfs\345\210\233\345\273\272\345\256\271\345\231\250.md" rename to "docs/zh/docs/Container/\346\214\207\345\256\232rootfs\345\210\233\345\273\272\345\256\271\345\231\250.md" index 7a5ab73002b37ece92515761b5b5742557ae6443..d5e3f4f9f1b424b6224b13735ea5d25326b502d2 100644 --- "a/content/zh/docs/Container/\346\214\207\345\256\232rootfs\345\210\233\345\273\272\345\256\271\345\231\250.md" +++ "b/docs/zh/docs/Container/\346\214\207\345\256\232rootfs\345\210\233\345\273\272\345\256\271\345\231\250.md" @@ -1,12 +1,12 @@ -# 指定rootfs创建容器 - -## 功能描述 - -系统容器不同于普通容器,普通容器需要指定一个容器镜像来启动,而系统容器通过参数 \--external-rootfs 指定一个本地的根文件系统rootfs(Root File System)来启动,rootfs包含了容器运行时依赖的操作系统环境。 - -## 参数说明 - - +# 指定rootfs创建容器 + +## 功能描述 + +系统容器不同于普通容器,普通容器需要指定一个容器镜像来启动,而系统容器通过参数 \--external-rootfs 指定一个本地的根文件系统rootfs(Root File System)来启动,rootfs包含了容器运行时依赖的操作系统环境。 + +## 参数说明 + + -

命令

参数

@@ -23,24 +23,24 @@
- -## 约束限制 - -- 参数--external-rootfs指定的rootfs目录必须为绝对路径,不能为相对路径。 -- 参数--external-rootfs指定的rootfs目录必须为一个完整运行的操作系统环境,否则容器会启动失败。 -- 容器删除时,不会删除--external-rootfs指定的rootfs目录。 -- 不支持在x86环境上运行基于arm rootfs的容器,也不支持在arm环境上运行基于x86 rootfs的容器。 -- 同一份rootfs,不建议启动多个容器实例,即同一份rootfs只供一个生命周期内的容器实例使用。 - -## 使用示例 - -假设本地rootfs的路径为/root/myrootfs,那么启动一个系统容器的命令如下: - -``` -# isula run -tid --system-container --external-rootfs /root/myrootfs none init -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->rootfs为自定义的文件系统,请用户自行准备。例如容器镜像的tar包解压后,即为一个rootfs。 - + + +## 约束限制 + +- 参数--external-rootfs指定的rootfs目录必须为绝对路径,不能为相对路径。 +- 参数--external-rootfs指定的rootfs目录必须为一个完整运行的操作系统环境(包含systemd软件包),否则容器会启动失败。 +- 容器删除时,不会删除--external-rootfs指定的rootfs目录。 +- 不支持在x86环境上运行基于arm rootfs的容器,也不支持在arm环境上运行基于x86 rootfs的容器。 +- 同一份rootfs,不建议启动多个容器实例,即同一份rootfs只供一个生命周期内的容器实例使用。 + +## 使用示例 + +假设本地rootfs的路径为/root/myrootfs,那么启动一个系统容器的命令如下: + +``` +# isula run -tid --system-container --external-rootfs /root/myrootfs none init +``` + +>![](./public_sys-resources/icon-note.gif) **说明:** +>rootfs为自定义的文件系统,请用户自行准备。例如容器镜像的tar包解压后,即为一个rootfs。 + diff --git "a/content/zh/docs/Container/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" "b/docs/zh/docs/Container/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" similarity index 96% rename from "content/zh/docs/Container/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" rename to "docs/zh/docs/Container/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" index a5444e4e8ed3b52005b1ef851998c10d045731c5..cb48737268e36d2c83e8af8cfa56e644d99d6acc 100644 --- "a/content/zh/docs/Container/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" +++ "b/docs/zh/docs/Container/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" @@ -14,12 +14,6 @@ 实现CRI接口对接CNI网络的能力,包括CNI网络配置文件的解析、CNI网络的加入和退出。Pod需要支持网络时,例如通过canal等容器网络插件提供网络能力,那么需要CRI接口能够和canal实现对接,并且调用canal的接口,为Pod提供网络能力。 -CNI配置文件相关行为描述: - -- 对--cni-conf-dir目录下的合法配置文件名进行字典排序,取第一个合法配置作为default网络平面的配置; -- 每隔5s对配置目录进行扫描,重新加载更新CNI配置; -- CRI Status接口不更新CNI的网络配置; - ## 接口 CNI对用户可见的接口,主要涉及CNI网络配置和Pod配置中CNI网络相关的项。 @@ -123,7 +117,7 @@ Pod配置中和网络相关的还有port\_mappings项,用于设置Pod的端口 StopPodSandbox的时候,会调用退出CNI网络的接口,清理网络相关的资源。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >1. 在调用RemovePodSandbox接口之前,至少要调用一次StopPodSandbox接口 >2. StopPodSandbox调用CNI接口失败,可能导致的网络资源残留。 diff --git "a/content/zh/docs/Container/\346\224\257\346\214\201OCI-hooks.md" "b/docs/zh/docs/Container/\346\224\257\346\214\201OCI-hooks.md" similarity index 100% rename from "content/zh/docs/Container/\346\224\257\346\214\201OCI-hooks.md" rename to "docs/zh/docs/Container/\346\224\257\346\214\201OCI-hooks.md" diff --git "a/content/zh/docs/Container/\346\234\200\345\244\247\345\217\245\346\237\204\346\225\260\351\231\220\345\210\266.md" "b/docs/zh/docs/Container/\346\234\200\345\244\247\345\217\245\346\237\204\346\225\260\351\231\220\345\210\266.md" similarity index 98% rename from "content/zh/docs/Container/\346\234\200\345\244\247\345\217\245\346\237\204\346\225\260\351\231\220\345\210\266.md" rename to "docs/zh/docs/Container/\346\234\200\345\244\247\345\217\245\346\237\204\346\225\260\351\231\220\345\210\266.md" index d17c211009369ef71b3d8c4482bcc054f065428a..4de230203107c3f2b4a9c11c9b8a2349a400c2bb 100644 --- "a/content/zh/docs/Container/\346\234\200\345\244\247\345\217\245\346\237\204\346\225\260\351\231\220\345\210\266.md" +++ "b/docs/zh/docs/Container/\346\234\200\345\244\247\345\217\245\346\237\204\346\225\260\351\231\220\345\210\266.md" @@ -1,12 +1,12 @@ -# 最大句柄数限制 - -## 功能描述 - -系统容器支持对容器内使用文件句柄数进行限制,文件句柄包括普通文件句柄和网络套接字,启动容器时,可以通过指定--files-limit参数限制容器内打开的最大句柄数。 - -## 参数说明 - - +# 最大句柄数限制 + +## 功能描述 + +系统容器支持对容器内使用文件句柄数进行限制,文件句柄包括普通文件句柄和网络套接字,启动容器时,可以通过指定--files-limit参数限制容器内打开的最大句柄数。 + +## 参数说明 + + -

命令

参数

@@ -24,33 +24,33 @@
- -## 约束限制 - -- 如果\--files-limit指定的值太小,可能会导致系统容器无法通过exec执行命令,报"open too many files"错误,所以files limit的值应该设置大一些。 -- 文件句柄包括普通文件句柄和网络套接字。 - -## 使用示例 - -使用\--files-limit限制容器内打开文件句柄数需要内核支持files cgroup,可以执行以下命令查看: - -``` -[root@localhost ~]# cat /proc/1/cgroup | grep files -10:files:/ -``` - -结果显示files,说明内核支持files cgroup。 - -容器启动指定--files-limit参数,并检查files.limit参数是否成功写入: - -``` -[root@localhost ~]# isula run -tid --files-limit 1024 --system-container --external-rootfs /tmp/root-fs empty init 01e82fcf97d4937aa1d96eb8067f9f23e4707b92de152328c3fc0ecb5f64e91d -[root@localhost ~]# isula exec -it 01e82fcf97d4 bash -[root@localhost ~]# cat /sys/fs/cgroup/files/files.limit -1024 - -``` - -可以看出,容器内文件句柄数被成功限制。 - + + +## 约束限制 + +- 如果\--files-limit指定的值太小,可能会导致系统容器无法通过exec执行命令,报"open too many files"错误,所以files limit的值应该设置大一些。 +- 文件句柄包括普通文件句柄和网络套接字。 + +## 使用示例 + +使用\--files-limit限制容器内打开文件句柄数需要内核支持files cgroup,可以执行以下命令查看: + +``` +[root@localhost ~]# cat /proc/1/cgroup | grep files +10:files:/ +``` + +结果显示files,说明内核支持files cgroup。 + +容器启动指定--files-limit参数,并检查files.limit参数是否成功写入: + +``` +[root@localhost ~]# isula run -tid --files-limit 1024 --system-container --external-rootfs /tmp/root-fs empty init 01e82fcf97d4937aa1d96eb8067f9f23e4707b92de152328c3fc0ecb5f64e91d +[root@localhost ~]# isula exec -it 01e82fcf97d4 bash +[root@localhost ~]# cat /sys/fs/cgroup/files/files.limit +1024 + +``` + +可以看出,容器内文件句柄数被成功限制。 + diff --git "a/docs/zh/docs/Container/\346\234\254\345\234\260\345\215\267\347\256\241\347\220\206.md" "b/docs/zh/docs/Container/\346\234\254\345\234\260\345\215\267\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..ddc063c6816585cb65822ff18568af2f998040a5 --- /dev/null +++ "b/docs/zh/docs/Container/\346\234\254\345\234\260\345\215\267\347\256\241\347\220\206.md" @@ -0,0 +1,199 @@ +# 本地卷管理 + +- [本地卷管理](#本地卷管理) + - [概述](#概述) + - [注意事项](#注意事项) + - [使用方法](#使用方法) + - [使用-v参数挂载数据](#使用-v参数挂载数据) + - [**命令格式**](#命令格式) + - [**功能描述**](#功能描述) + - [**参数说明**](#参数说明) + - [**示例**](#示例) + - [使用--mount参数挂载数据](#使用--mount参数挂载数据) + - [**命令格式**](#命令格式-1) + - [**功能描述**](#功能描述-1) + - [**参数说明**](#参数说明-1) + - [**示例**](#示例-1) + - [复用其他容器中的挂载配置](#复用其他容器中的挂载配置) + - [**命令格式**](#命令格式-2) + - [**功能描述**](#功能描述-2) + - [**参数说明**](#参数说明-2) + - [**示例**](#示例-2) + - [使用镜像中的匿名卷](#使用镜像中的匿名卷) + - [卷的查询](#卷的查询) + - [**命令格式**](#命令格式-3) + - [**功能描述**](#功能描述-3) + - [**参数说明**](#参数说明-3) + - [**示例**](#示例-3) + - [卷的删除](#卷的删除) + - [**命令格式**](#命令格式-4) + - [**功能描述**](#功能描述-4) + - [**参数说明**](#参数说明-4) + - [**示例**](#示例-4) + - [注意事项](#注意事项-1) + - [冲突合并规则](#冲突合并规则) + - [iSula和Docker的差异](#isula和docker的差异) + +## 概述 + +iSula 管理的容器销毁后,容器内自身所有的数据都会被销毁。如果用户希望容器销毁后依然保留数据,则需要有一种持久化数据的机制。iSula 允许将主机上的文件、目录或卷在容器运行时挂载到容器内。用户可以将需要持久化的数据写入容器内的挂载点。则容器销毁后,主机上的文件、目录、卷依然保留。如果用户需要销毁主机上的文件、目录、卷,可以手动删除文件、目录或者执行 iSula 的相关命令删除卷。对于卷的管理目前 iSula 只支持本地卷,本地卷又分为有名卷和匿名卷。由用户指定名称生产的卷叫有名卷,用户没有指定卷名称,由 iSula 自动生成卷名(一个64位的随机数)的卷为匿名卷。 + +本章介绍通过 iSula 管理本地卷的使用方法。 + +## 注意事项 +- 卷名称长度2-64个字符,符合正则表达式:^[a-zA-Z0-9][a-zA-Z0-9_.-]{1,63}$,即卷名称首字符必须为字母或者数字,从第二个字符开始可以为字母、数字或者"_"、"."、"-"这几个字符。 +- 创建容器时,如果卷对应的容器内的挂载点存在数据,则默认会拷贝到卷里。如果拷贝过程中出现了 iSula 崩溃重启或者系统掉电之类的异常,则卷内的数据可能是不完整的,这时需要手动删除卷或者卷内数据,确保数据的正确完整。 + +## 使用方法 + +### 使用-v参数挂载数据 + +#### **命令格式** +```shell +isula run -v [SRC:]DST[:MODE,MODE...] IMAGE +``` + +#### **功能描述** +使用 create / run 创建并运行容器时,使用 -v/--volume 参数将主机上的文件、目录或者卷挂载到容器内用于数据持久化。 + +#### **参数说明** +- SRC: 用于挂载的文件、目录或者卷在主机上的路径,当值为绝对路径时,表示挂载主机上的文件或者文件夹。当值为卷名时,表示挂载卷。当省略该项时,表示挂载匿名卷。当文件夹或者卷不存在时,iSula会先创建一个新的文件夹/卷,再进行挂载操作。 +- DST: 容器内的挂载路径,必须为绝对路径。 +- MODE: 当挂载的源是目录或者文件时,合法的参数是ro/rw/z/Z/private/rprivate/slave/rslave/shared/rshared。同类型的参数只能配置一个。当挂载的源是卷时,合法的参数是ro/rw/z/Z/nocopy,同类型的参数只能配置一个。多个属性之间使用","连接。参数含义如下: + +| 参数 | 参数含义 | +| -------- | -----------------------------------------------| +| ro | 容器内挂载点挂载为只读属性 | +| rw | 容器内挂载点挂载为读写属性 | +| z | 如果开启了SELinux,则挂载时添加SELinux共享标签 | +| Z | 如果开启了SELinux,则挂载时添加SELinux私有标签 | +| private | 容器内挂载点挂载为私有传播属性 | +| rprivate | 容器内挂载点递归挂载为私有传播属性 | +| slave | 容器内挂载点挂载为从属传播属性 | +| rslave | 容器内挂载点递归挂载为从属传播属性 | +| shared | 容器内挂载点挂载为共享传播属性 | +| rshared | 容器内挂载点递归挂载为共享传播属性 | +| nocopy | 不拷贝挂载点内的数据,该参数不进行配置时默认会拷贝数据。另外,如果卷里已经有数据了,也不会进行拷贝 | + + +#### **示例** +基于 busybox 运行容器并创建/挂载名称为 vol 的卷到容器的 /vol 目录,同时配置挂载点为只读,并且如果容器中对应挂载点有数据也不进行拷贝。 +```shell +isula run -v vol:/vol:ro,nocopy busybox +``` + +### 使用--mount参数挂载数据 + +#### **命令格式** +```shell +isula run --mount [type=TYPE,][src=SRC,]dst=DST[,KEY=VALUE] busybox +``` + +#### **功能描述** +使用 create / run 创建并运行容器时,使用 --mount 参数将主机上的文件、目录、卷或者文件系统挂载到容器内用于数据持久化。 + +#### **参数说明** +- type: 挂载到容器中的数据的类型,类型可以是 bind、volume、squashfs, 省略该项时默认为volume类型。 +- src: 用于挂载的文件、目录或者卷在主机上的路径。当值为绝对路径时,表示挂载主机上的文件或者目录。当值为卷名时,表示挂载卷。当省略该项时,表示匿名卷。当文件夹或者卷不存在时,iSula会先创建一个新的文件/卷,再进行挂载操作。该项的关键字 src 也可以写成 source。 +- dst: 容器内的挂载路径,必须为绝对路径。该项的关键字 dst 也可以写成 destination 或者 target。 +- KEY=VALUE: 表示 --mount 的参数,可以取如下值: + +| KEY 值 | VALUE | +| ------------------------------ | --------------------------------------------------------------------------- | +| selinux-opts/bind-selinux-opts | z或者Z。z表示如果开启了SElinux,则挂载时添加SElinux共享标签;Z表示如果开启了SElinux,则挂载时添加SElinux私有标签 | +| ro/readonly | 0/false 表示挂载成读写属性,1/true 表示挂载成只读属性。该项的值可以省略表示挂载成只读。该项只在 type=bind 时支持配置该参数 | +| volume-nocopy | 不拷贝挂载点内的数据,该参数不进行配置时默认会拷贝数据。另外,如果卷里已经有数据了,也不会进行拷贝。只在 type=volume 时支持该参数 | + +#### **示例** +基于 busybox 运行容器并创建/挂载名称为 vol 的卷到容器的 /vol 目录,同时配置挂载点为只读,并且如果容器中对应挂载点有数据也不进行拷贝。 +```shell +isula run --mount type=volume,src=vol,dst=/vol,ro=true,volume-nocopy=true busybox +``` + +### 复用其他容器中的挂载配置 + +#### **命令格式** +```shell +isula run --volumes-from CON1[:MODE] busybox +``` + +#### **功能描述** +使用 create / run 创建并运行容器时,使用 --volumes-from 参数表示挂载点配置包括CON1容器的挂载点配置。可以配置多个 --volumes-from 参数。 + +#### **参数说明** +- CON1: 被复用挂载点的容器的名称或者ID。 +- MODE: 值为ro表示复用的挂载点挂载为只读属性,值为rw表示复用的挂载点挂载为读写属性。 + +#### **示例** +假设已经有名称为 container1 的容器配置了卷 vol1 到容器目录 /vol1,名称为 container2 的容器配置了卷 vol2 到容器目录 /vol2。现在运行一个新的容器复用 container1 和 container2 的挂载配置,即卷 vol1 挂载到容器的 /vol1 目录,vol2 挂载到容器的 /vol2 目录。 +```shell +isula run --volumes-from container1 --volumes-from container2 busbyox +``` + +### 使用镜像中的匿名卷 + +使用镜像中的匿名卷不需要用户做任何配置。如果镜像中配置了匿名卷,则在运行容器时 iSula 会自动创建一个匿名卷并挂载到镜像中指定的路径供用户使用。用户可以往容器中的匿名卷挂载点写入数据进行数据持久化。 + +### 卷的查询 + +#### **命令格式** +```shell +isula volume ls [OPTIONS] +``` + +#### **功能描述** +查询 iSula 管理的所有卷。 + +#### **参数说明** +OPTIONS 可选参数: +- -q,--quit: 如果不加这个参数,默认只会查询到卷的驱动信息和卷的名称,添加该参数表示只查询卷的名称。 + +#### **示例** +查询 iSula 管理的所有卷,只返回卷名称。 +```shell +isula volume ls -q +``` + +### 卷的删除 + +#### **命令格式** +``` +isula volume rm [OPTIONS] VOLUME [VOLUME...] +isula volume prune [OPTIONS] +``` + +#### **功能描述** +- rm 命令:删除指定的卷,如果卷被容器使用了,则会删除失败。 +- prune 命令:删除所有未被容器使用的卷。 + +#### **参数说明** +prune 命令的 OPTIONS 可选参数: +- -f,--force: 表示不弹出“确认是否要删除”的提示,默认会有风险提示,需要输入 y 才能继续执行。 + +#### **示例** +删除卷 vol1 和卷 vol2 +```shell +isula volume rm vol1 vol2 +``` +删除所有未被使用的卷,不弹出风险提示,格式如下: +```shell +isula volume prune -f +``` + +### 注意事项 + +#### 冲突合并规则 +如果卷的挂载点有冲突,则按照如下规则处理: +- -v 和 --mount 的配置冲突,则返回失败。 +- --volumes-from 里获取的配置,如果和 -v/--mount 配置有冲突,则丢弃。 +- 镜像中的匿名卷配置,如果和 -v/--mount/--volumes-from 配置有冲突,则丢弃。 + +#### iSula和Docker的差异 +| iSula行为 | Docker行为 | +| ------------------------------------------- | ------------------------------------------- | +| 卷名称最长64个字符 | 卷名称长度没有限制 | +| --mount 参数,如果挂载的源不存在,则会创建 | --mount 参数,如果挂载的源不存在,则会报错 | +| --mount 参数,支持 bind-selinux-opts 和 selinux-opts 参数配置 z/Z | --mount 参数,不支持 bind-selinux-opts 和 selinux-opts 参数 | +| 挂载点冲突合并规则,不做特殊处理 | 挂载点冲突合并规则,将 -v 指定的匿名卷当成镜像中的匿名卷一样处理 | +| volume prune 命令,提示回收了多少空间 | volume prune 命令,不会提示回收了多少空间 | +| -v/--mount/--volumes-from 配置在 hostconfig 中,匿名卷配置在 config 中 | -v 配置的匿名卷放在 config 配置中,其他配置在 hostconfig 中 | diff --git "a/content/zh/docs/Container/\346\237\245\350\257\242\344\277\241\346\201\257.md" "b/docs/zh/docs/Container/\346\237\245\350\257\242\344\277\241\346\201\257.md" similarity index 100% rename from "content/zh/docs/Container/\346\237\245\350\257\242\344\277\241\346\201\257.md" rename to "docs/zh/docs/Container/\346\237\245\350\257\242\344\277\241\346\201\257.md" diff --git "a/content/zh/docs/Container/\347\211\271\346\235\203\345\256\271\345\231\250.md" "b/docs/zh/docs/Container/\347\211\271\346\235\203\345\256\271\345\231\250.md" similarity index 100% rename from "content/zh/docs/Container/\347\211\271\346\235\203\345\256\271\345\231\250.md" rename to "docs/zh/docs/Container/\347\211\271\346\235\203\345\256\271\345\231\250.md" diff --git "a/content/zh/docs/Container/\347\216\257\345\242\203\345\217\230\351\207\217\346\214\201\344\271\205\345\214\226.md" "b/docs/zh/docs/Container/\347\216\257\345\242\203\345\217\230\351\207\217\346\214\201\344\271\205\345\214\226.md" similarity index 98% rename from "content/zh/docs/Container/\347\216\257\345\242\203\345\217\230\351\207\217\346\214\201\344\271\205\345\214\226.md" rename to "docs/zh/docs/Container/\347\216\257\345\242\203\345\217\230\351\207\217\346\214\201\344\271\205\345\214\226.md" index 22d36c8ab32d16d7812596ba14d792c34379f0c0..1127d322cf4670ae291e7b20812efe0f573c5c18 100644 --- "a/content/zh/docs/Container/\347\216\257\345\242\203\345\217\230\351\207\217\346\214\201\344\271\205\345\214\226.md" +++ "b/docs/zh/docs/Container/\347\216\257\345\242\203\345\217\230\351\207\217\346\214\201\344\271\205\345\214\226.md" @@ -1,12 +1,12 @@ -# 环境变量持久化 - -## 功能描述 - -系统容器支持通过指定--env-target-file接口参数将env变量持久化到容器rootfs目录下的配置文件中。 - -## 参数说明 - - +# 环境变量持久化 + +## 功能描述 + +系统容器支持通过指定--env-target-file接口参数将env变量持久化到容器rootfs目录下的配置文件中。 + +## 参数说明 + + -

命令

参数

@@ -23,26 +23,26 @@
- -## 约束限制 - -- --env-target-file指定的目标文件如果存在的话,大小不能超过10MB。 -- --env-target-file指定的参数为rootfs目录下的绝对路径。 -- 如果--env和目标文件里面的env出现冲突,以--env指定值的参数为准。 - -## 使用示例 - -启动系统容器,指定env环境变量和--env-target-file参数: - -``` -[root@localhost ~]# isula run -tid -e abc=123 --env-target-file /etc/environment --system-container --external-rootfs /root/myrootfs none init -b75df997a64da74518deb9a01d345e8df13eca6bcc36d6fe40c3e90ea1ee088e -[root@localhost ~]# isula exec b7 cat /etc/environment -PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -TERM=xterm -abc=123 -``` - -可以看到容器的env变量(abc=123)已经持久化到/etc/environment配置文件中。 - + + +## 约束限制 + +- --env-target-file指定的目标文件如果存在的话,大小不能超过10MB。 +- --env-target-file指定的参数为rootfs目录下的绝对路径。 +- 如果--env和目标文件里面的env出现冲突,以--env指定值的参数为准。 + +## 使用示例 + +启动系统容器,指定env环境变量和--env-target-file参数: + +``` +[root@localhost ~]# isula run -tid -e abc=123 --env-target-file /etc/environment --system-container --external-rootfs /root/myrootfs none init +b75df997a64da74518deb9a01d345e8df13eca6bcc36d6fe40c3e90ea1ee088e +[root@localhost ~]# isula exec b7 cat /etc/environment +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +TERM=xterm +abc=123 +``` + +可以看到容器的env变量(abc=123)已经持久化到/etc/environment配置文件中。 + diff --git "a/content/zh/docs/Container/\347\233\221\346\216\247\345\256\211\345\205\250\345\256\271\345\231\250.md" "b/docs/zh/docs/Container/\347\233\221\346\216\247\345\256\211\345\205\250\345\256\271\345\231\250.md" similarity index 96% rename from "content/zh/docs/Container/\347\233\221\346\216\247\345\256\211\345\205\250\345\256\271\345\231\250.md" rename to "docs/zh/docs/Container/\347\233\221\346\216\247\345\256\211\345\205\250\345\256\271\345\231\250.md" index 35acb6ad27a8156a9c537f7dd2bb6453cd0084f7..7e7785a55e798b064c4186b983228e9fbaec12ea 100644 --- "a/content/zh/docs/Container/\347\233\221\346\216\247\345\256\211\345\205\250\345\256\271\345\231\250.md" +++ "b/docs/zh/docs/Container/\347\233\221\346\216\247\345\256\211\345\205\250\345\256\271\345\231\250.md" @@ -1,144 +1,144 @@ -# 监控安全容器 - -## 描述 - -kata events命令用于显示指定容器状态。包括但不限于容器内存、CPU、Pid、 Blkio、大页内存、网络等信息。 - -## 用法 - -``` -kata-runtime events [command options] -``` - -## 参数 - -- \-- interval value:设置查询周期。如果不使用该参数,默认查询周期为5秒。 -- \--stats: 显示容器信息并退出查询。 - -## 前置条件 - -要查询的容器状态必须为running,否则报错:Container ID \(\) does not exist。 - -该命令只支持查询监控一个容器的状态 - -## 示例 - -- 每隔三秒显示容器状态。 - - ``` - $ kata-runtime events --interval 3s 5779b2366f47 - { - "data": { - "blkio": {}, - "cpu": { - "throttling": {}, - "usage": { - "kernel": 130000000, - "percpu": [ - 214098440 - ], - "total": 214098440, - "user": 10000000 - } - }, - "hugetlb": {}, - "intel_rdt": {}, - "interfaces": [ - { - "name": "lo", - "rx_bytes": 0, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 0, - "tx_bytes": 0, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 0 - } - ], - "memory": { - "cache": 827392, - "kernel": { - "failcnt": 0, - "limit": 9223372036854771712, - "max": 421888, - "usage": 221184 - }, - "kernelTCP": { - "failcnt": 0, - "limit": 0 - }, - "raw": { - "active_anon": 49152, - "active_file": 40960, - "cache": 827392, - "dirty": 0, - "hierarchical_memory_limit": 9223372036854771712, - "hierarchical_memsw_limit": 9223372036854771712, - "inactive_anon": 0, - "inactive_file": 839680, - "mapped_file": 540672, - "pgfault": 6765, - "pgmajfault": 0, - "pgpgin": 12012, - "pgpgout": 11803, - "rss": 4096, - "rss_huge": 0, - "shmem": 32768, - "swap": 0, - "total_active_anon": 49152, - "total_active_file": 40960, - "total_cache": 827392, - "total_dirty": 0, - "total_inactive_anon": 0, - "total_inactive_file": 839680, - "total_mapped_file": 540672, - "total_pgfault": 6765, - "total_pgmajfault": 0, - "total_pgpgin": 12012, - "total_pgpgout": 11803, - "total_rss": 4096, - "total_rss_huge": 0, - "total_shmem": 32768, - "total_swap": 0, - "total_unevictable": 0, - "total_writeback": 0, - "unevictable": 0, - "writeback": 0 - }, - "swap": { - "failcnt": 0, - "limit": 9223372036854771712, - "max": 34201600, - "usage": 1204224 - }, - "usage": { - "failcnt": 0, - "limit": 9223372036854771712, - "max": 34201600, - "usage": 1204224 - } - }, - "pids": { - "current": 1 - }, - "tcp": {}, - "tcp6": {}, - "udp": {}, - "udp6": {} - }, - "id": "5779b2366f47cd1468ebb1ba7c52cbdde3c7d3a5f2af3eefadc8356700fc860b", - "type": "stats" - } - ``` - - -- 显示容器状态并立即返回 - - ``` - kata-runtime events --stats - ``` - - 该命令返回内容的格式与上一条相同,区别为只显示一次信息后便退出。 - - +# 监控安全容器 + +## 描述 + +kata events命令用于显示指定容器状态。包括但不限于容器内存、CPU、Pid、 Blkio、大页内存、网络等信息。 + +## 用法 + +``` +kata-runtime events [command options] +``` + +## 参数 + +- \-- interval value:设置查询周期。如果不使用该参数,默认查询周期为5秒。 +- \--stats: 显示容器信息并退出查询。 + +## 前置条件 + +要查询的容器状态必须为running,否则报错:Container ID \(\) does not exist。 + +该命令只支持查询监控一个容器的状态 + +## 示例 + +- 每隔三秒显示容器状态。 + + ``` + $ kata-runtime events --interval 3s 5779b2366f47 + { + "data": { + "blkio": {}, + "cpu": { + "throttling": {}, + "usage": { + "kernel": 130000000, + "percpu": [ + 214098440 + ], + "total": 214098440, + "user": 10000000 + } + }, + "hugetlb": {}, + "intel_rdt": {}, + "interfaces": [ + { + "name": "lo", + "rx_bytes": 0, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 0, + "tx_bytes": 0, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 0 + } + ], + "memory": { + "cache": 827392, + "kernel": { + "failcnt": 0, + "limit": 9223372036854771712, + "max": 421888, + "usage": 221184 + }, + "kernelTCP": { + "failcnt": 0, + "limit": 0 + }, + "raw": { + "active_anon": 49152, + "active_file": 40960, + "cache": 827392, + "dirty": 0, + "hierarchical_memory_limit": 9223372036854771712, + "hierarchical_memsw_limit": 9223372036854771712, + "inactive_anon": 0, + "inactive_file": 839680, + "mapped_file": 540672, + "pgfault": 6765, + "pgmajfault": 0, + "pgpgin": 12012, + "pgpgout": 11803, + "rss": 4096, + "rss_huge": 0, + "shmem": 32768, + "swap": 0, + "total_active_anon": 49152, + "total_active_file": 40960, + "total_cache": 827392, + "total_dirty": 0, + "total_inactive_anon": 0, + "total_inactive_file": 839680, + "total_mapped_file": 540672, + "total_pgfault": 6765, + "total_pgmajfault": 0, + "total_pgpgin": 12012, + "total_pgpgout": 11803, + "total_rss": 4096, + "total_rss_huge": 0, + "total_shmem": 32768, + "total_swap": 0, + "total_unevictable": 0, + "total_writeback": 0, + "unevictable": 0, + "writeback": 0 + }, + "swap": { + "failcnt": 0, + "limit": 9223372036854771712, + "max": 34201600, + "usage": 1204224 + }, + "usage": { + "failcnt": 0, + "limit": 9223372036854771712, + "max": 34201600, + "usage": 1204224 + } + }, + "pids": { + "current": 1 + }, + "tcp": {}, + "tcp6": {}, + "udp": {}, + "udp6": {} + }, + "id": "5779b2366f47cd1468ebb1ba7c52cbdde3c7d3a5f2af3eefadc8356700fc860b", + "type": "stats" + } + ``` + + +- 显示容器状态并立即返回 + + ``` + kata-runtime events --stats + ``` + + 该命令返回内容的格式与上一条相同,区别为只显示一次信息后便退出。 + + diff --git "a/content/zh/docs/Container/\347\256\241\347\220\206\345\256\211\345\205\250\345\256\271\345\231\250\347\232\204\347\224\237\345\221\275\345\221\250\346\234\237.md" "b/docs/zh/docs/Container/\347\256\241\347\220\206\345\256\211\345\205\250\345\256\271\345\231\250\347\232\204\347\224\237\345\221\275\345\221\250\346\234\237.md" similarity index 93% rename from "content/zh/docs/Container/\347\256\241\347\220\206\345\256\211\345\205\250\345\256\271\345\231\250\347\232\204\347\224\237\345\221\275\345\221\250\346\234\237.md" rename to "docs/zh/docs/Container/\347\256\241\347\220\206\345\256\211\345\205\250\345\256\271\345\231\250\347\232\204\347\224\237\345\221\275\345\221\250\346\234\237.md" index 17648bbfddb7319853dd551af9a320e892548515..78dd04f674767a9bcd27802b013a7bfb0b2c7b65 100644 --- "a/content/zh/docs/Container/\347\256\241\347\220\206\345\256\211\345\205\250\345\256\271\345\231\250\347\232\204\347\224\237\345\221\275\345\221\250\346\234\237.md" +++ "b/docs/zh/docs/Container/\347\256\241\347\220\206\345\256\211\345\205\250\345\256\271\345\231\250\347\232\204\347\224\237\345\221\275\345\221\250\346\234\237.md" @@ -34,11 +34,11 @@ isula run -tid --runtime kata-runtime --network none busybox ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >安全容器网络使用仅支持CNI网络,不支持CNM网络,不支持使用-p和--expose暴露容器端口,使用安全容器时需指定参数--net=none。 4. 启动一个Pod - 1. 启动pause容器并根据回显获取pod的sandbox-id。使用docker-engine和iSula容器引擎启动的命令分别如下: + 1. 启动pause容器并根据回显获取Pod的sandbox-id。使用docker-engine和iSula容器引擎启动的命令分别如下: ``` docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox @@ -50,7 +50,7 @@    - 1. 创建业务容器并加入到这个pod中。使用docker-engine和iSula容器引擎创建的命令分别如下: + 1. 创建业务容器并加入到这个Pod中。使用docker-engine和iSula容器引擎创建的命令分别如下: ``` docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=container --annotation io.kubernetes.sandbox.id= busybox @@ -99,7 +99,7 @@ docker rm -f docker exec -ti ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >1. 如遇到docker exec -ti进入容器的同时,另一终端执行docker restart或者docker stop命令造成exec界面卡住的情况,可使用Ctrl+P+Q退出docker exec操作界面。 >2. 如果使用-d参数则命令在后台执行,不会打印错误信息,其退出码也不能作为命令执行是否正确的判断依据。 diff --git "a/content/zh/docs/Container/\347\263\273\347\273\237\345\256\271\345\231\250.md" "b/docs/zh/docs/Container/\347\263\273\347\273\237\345\256\271\345\231\250.md" similarity index 99% rename from "content/zh/docs/Container/\347\263\273\347\273\237\345\256\271\345\231\250.md" rename to "docs/zh/docs/Container/\347\263\273\347\273\237\345\256\271\345\231\250.md" index f9432195d79c18e57e4f49fe5094a2be80aea1c4..9990642dc705743d0b96b5dd53930e30b3984431 100644 --- "a/content/zh/docs/Container/\347\263\273\347\273\237\345\256\271\345\231\250.md" +++ "b/docs/zh/docs/Container/\347\263\273\347\273\237\345\256\271\345\231\250.md" @@ -1,2 +1,2 @@ -# 系统容器 +# 系统容器 系统容器主要应对在重计算、高性能、大并发的场景下,重型应用和业务云化的问题。相比较虚拟机技术,系统容器可直接继承物理机特性,同时具备性能更优良,较少overhead的优点。从系统资源分配来看,系统容器在有限资源上相比虚拟机可分配更多计算单元,降低成本,通过系统容器可以构建产品的差异化竞争力,提供计算密度更高,价格更便宜,性能更优良的的计算单元实例。 \ No newline at end of file diff --git "a/content/zh/docs/Container/\347\273\237\350\256\241\344\277\241\346\201\257-4.md" "b/docs/zh/docs/Container/\347\273\237\350\256\241\344\277\241\346\201\257-4.md" similarity index 100% rename from "content/zh/docs/Container/\347\273\237\350\256\241\344\277\241\346\201\257-4.md" rename to "docs/zh/docs/Container/\347\273\237\350\256\241\344\277\241\346\201\257-4.md" diff --git "a/content/zh/docs/Container/\351\200\232\350\277\207systemd\345\220\257\345\212\250\345\256\271\345\231\250.md" "b/docs/zh/docs/Container/\351\200\232\350\277\207systemd\345\220\257\345\212\250\345\256\271\345\231\250.md" similarity index 98% rename from "content/zh/docs/Container/\351\200\232\350\277\207systemd\345\220\257\345\212\250\345\256\271\345\231\250.md" rename to "docs/zh/docs/Container/\351\200\232\350\277\207systemd\345\220\257\345\212\250\345\256\271\345\231\250.md" index 401fe4720d49081620d8808d069728b6c042be46..a70e8dc59002233c3ddddb0a67c315f919c28b0d 100644 --- "a/content/zh/docs/Container/\351\200\232\350\277\207systemd\345\220\257\345\212\250\345\256\271\345\231\250.md" +++ "b/docs/zh/docs/Container/\351\200\232\350\277\207systemd\345\220\257\345\212\250\345\256\271\345\231\250.md" @@ -1,12 +1,12 @@ -# 通过systemd启动容器 - -## 功能描述 - -系统容器与普通容器最大的差异就在于容器启动的init进程,普通容器无法通过systemd启动系统服务,而系统容器具备这个能力,通过在启动容器时指定\--system-contianer参数可以使能systemd服务。 - -## 参数说明 - - +# 通过systemd启动容器 + +## 功能描述 + +系统容器与普通容器最大的差异就在于容器启动的init进程,普通容器无法通过systemd启动系统服务,而系统容器具备这个能力,通过在启动容器时指定\--system-contianer参数可以使能systemd服务。 + +## 参数说明 + + -

命令

参数

@@ -23,66 +23,66 @@
- -## 约束限制 - -- systemd服务需要调用一些特殊系统调用,包括mount、umount2、unshare、reboot以及name\_to\_handle\_at,所以在不开启特权容器标签的情况下,系统容器打开了调用上述接口的权限。 -- 系统容器都是init启动,init进程不响应表示正常退出的SIGTERM信号,stop默认在10s之后才会强制杀死容器。如果需要快速结束,可以手动指定stop的超时时间。 -- \--system-container必须配合\--external-rootfs参数一起使用。 -- 系统容器内支持运行各类服务,服务的启停通过systemctl来管理,服务之间可能会出现相互依赖关系导致异常情况下某些服务进程出现D/Z状态,使得容器无法正常退出。 -- 系统容器内的某些服务进程可能会影响其它操作结果,例如容器内若运行了NetworkManager服务,可能会影响向容器添加网卡的行为(网卡添加成功然后被NetworkManger停掉),导致不可预期的结果。 -- 系统容器和主机暂时无法实现udev事件隔离,所以fstab配置也暂不支持。 -- systemd服务可能和libcgroup提供的cgconfig服务在功能上出现冲突,建议在容器内去掉libcgroup相关的包或者配置cgconfig服务的Delegate值为no。 - -## 使用示例 - -- 指定\--system-container和\--external-rootfs参数启动系统容器。 - - ``` - [root@localhost ~]# isula run -tid -n systest01 --system-container --external-rootfs /root/myrootfs none init - ``` - -- 执行以上命令后容器成功运行,通过exec进容器查看进程信息,可看到systemd服务已启动。 - - ``` - [root@localhost ~]# isula exec -it systest01 bash - [root@localhost /]# ps -ef - UID PID PPID C STIME TTY TIME CMD - root 1 0 2 06:49 ? 00:00:00 init - root 14 1 2 06:49 ? 00:00:00 /usr/lib/systemd/systemd-journal - root 16 1 0 06:49 ? 00:00:00 /usr/lib/systemd/systemd-network - dbus 23 1 0 06:49 ? 00:00:00 /usr/bin/dbus-daemon --system -- - root 25 0 0 06:49 ? 00:00:00 bash - root 59 25 0 06:49 ? 00:00:00 ps –ef - ``` - - -- 容器内执行systemctl命令查看服务状态,可看到服务被systemd管理。 - - ``` - [root@localhost /]# systemctl status dbus - ● dbus.service - D-Bus System Message Bus - Loaded: loaded (/usr/lib/systemd/system/dbus.service; static; vendor preset: - disabled) - Active: active (running) since Mon 2019-07-22 06:49:38 UTC; 2min 5 - 8s ago - Docs: man:dbus-daemon(1) - Main PID: 23 (dbus-daemon) - CGroup: /system.slice/dbus.service - └─23 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidf - ile --systemd-activation --syslog-only - - Jul 22 06:49:38 localhost systemd[1]: Started D-Bus System Message Bus. - ``` - -- 容器内通过systemctl stop/start服务,可看到服务被systemd管理。 - - ``` - [root@localhost /]# systemctl stop dbus - Warning: Stopping dbus.service, but it can still be activated by: - dbus.socket - [root@localhost /]# systemctl start dbus - ``` - - + + +## 约束限制 + +- systemd服务需要调用一些特殊系统调用,包括mount、umount2、unshare、reboot以及name\_to\_handle\_at,所以在不开启特权容器标签的情况下,系统容器打开了调用上述接口的权限。 +- 系统容器都是init启动,init进程不响应表示正常退出的SIGTERM信号,stop默认在10s之后才会强制杀死容器。如果需要快速结束,可以手动指定stop的超时时间。 +- \--system-container必须配合\--external-rootfs参数一起使用。 +- 系统容器内支持运行各类服务,服务的启停通过systemctl来管理,服务之间可能会出现相互依赖关系导致异常情况下某些服务进程出现D/Z状态,使得容器无法正常退出。 +- 系统容器内的某些服务进程可能会影响其它操作结果,例如容器内若运行了NetworkManager服务,可能会影响向容器添加网卡的行为(网卡添加成功然后被NetworkManger停掉),导致不可预期的结果。 +- 系统容器和主机暂时无法实现udev事件隔离,所以fstab配置也暂不支持。 +- systemd服务可能和libcgroup提供的cgconfig服务在功能上出现冲突,建议在容器内去掉libcgroup相关的包或者配置cgconfig服务的Delegate值为no。 + +## 使用示例 + +- 指定\--system-container和\--external-rootfs参数启动系统容器。 + + ``` + [root@localhost ~]# isula run -tid -n systest01 --system-container --external-rootfs /root/myrootfs none init + ``` + +- 执行以上命令后容器成功运行,通过exec进容器查看进程信息,可看到systemd服务已启动。 + + ``` + [root@localhost ~]# isula exec -it systest01 bash + [root@localhost /]# ps -ef + UID PID PPID C STIME TTY TIME CMD + root 1 0 2 06:49 ? 00:00:00 init + root 14 1 2 06:49 ? 00:00:00 /usr/lib/systemd/systemd-journal + root 16 1 0 06:49 ? 00:00:00 /usr/lib/systemd/systemd-network + dbus 23 1 0 06:49 ? 00:00:00 /usr/bin/dbus-daemon --system -- + root 25 0 0 06:49 ? 00:00:00 bash + root 59 25 0 06:49 ? 00:00:00 ps –ef + ``` + + +- 容器内执行systemctl命令查看服务状态,可看到服务被systemd管理。 + + ``` + [root@localhost /]# systemctl status dbus + ● dbus.service - D-Bus System Message Bus + Loaded: loaded (/usr/lib/systemd/system/dbus.service; static; vendor preset: + disabled) + Active: active (running) since Mon 2019-07-22 06:49:38 UTC; 2min 5 + 8s ago + Docs: man:dbus-daemon(1) + Main PID: 23 (dbus-daemon) + CGroup: /system.slice/dbus.service + └─23 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidf + ile --systemd-activation --syslog-only + + Jul 22 06:49:38 localhost systemd[1]: Started D-Bus System Message Bus. + ``` + +- 容器内通过systemctl stop/start服务,可看到服务被systemd管理。 + + ``` + [root@localhost /]# systemctl stop dbus + Warning: Stopping dbus.service, but it can still be activated by: + dbus.socket + [root@localhost /]# systemctl start dbus + ``` + + diff --git "a/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-3.md" "b/docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-3.md" similarity index 100% rename from "content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-3.md" rename to "docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-3.md" diff --git "a/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" "b/docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" similarity index 99% rename from "content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" rename to "docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" index 0e218beb988c6dd63baa599cf66e38e849f69c1d..32723d984be0ba560a2a2ea9e8756d30de35fea1 100644 --- "a/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" +++ "b/docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" @@ -111,7 +111,7 @@ docker commit container\_id **注释** -使用\#注释 +使用"\#"注释    diff --git "a/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206.md" "b/docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206.md" similarity index 87% rename from "content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206.md" rename to "docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206.md" index f89089da77ba00f09e2892adc50a9e7a179289b9..9bf404f8b67f0bcaf902f2aec8cf39bb47ab6dd4 100644 --- "a/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206.md" +++ "b/docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206.md" @@ -1,420 +1,376 @@ -# 镜像管理 - - - -- [镜像管理](#镜像管理) - - [docker镜像管理](#docker镜像管理) - - [登录到镜像仓库](#登录到镜像仓库) - - [从镜像仓库退出登录](#从镜像仓库退出登录) - - [从镜像仓库拉取镜像](#从镜像仓库拉取镜像) - - [删除镜像](#删除镜像) - - [加载镜像](#加载镜像) - - [列出镜像](#列出镜像) - - [检视镜像](#检视镜像) - - [双向认证](#双向认证) - - [embedded镜像管理](#embedded镜像管理) - - [加载镜像](#加载镜像-1) - - [列出镜像](#列出镜像-1) - - [检视镜像](#检视镜像-1) - - [删除镜像](#删除镜像-1) - - - - -## docker镜像管理 - -### 登录到镜像仓库 - -#### 描述 - -isula login命令用于登录到镜像仓库。登录成功后可以使用isula pull命令从该镜像仓库拉取镜像。如果镜像仓库不需要密码,则拉取镜像前不需要执行该命令。 - -#### 用法 - -``` -isula login [OPTIONS] SERVER -``` - -#### 参数 - -login命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表1 表1-20 login命令参数列表" 。 - -#### 示例 - -``` -$ isula login -u abc my.csp-edge.com:5000 - -Login Succeeded -``` - -### 从镜像仓库退出登录 - -#### 描述 - -isula logout命令用于从镜像仓库退出登录。退出登录成功后再执行isula pull命令从该镜像仓库拉取镜像会因为未认证而拉取失败。 - -#### 用法 - -``` -isula logout SERVER -``` - -#### 参数 - -logout命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表2 logout命令参数列表"。 - -#### 示例 - -``` -$ isula logout my.csp-edge.com:5000 -Logout Succeeded -``` - -### 从镜像仓库拉取镜像 - -#### 描述 - -从镜像仓库拉取镜像到本地。 - -#### 用法 - -``` -isula pull [OPTIONS] NAME[:TAG|@DIGEST] -``` - -#### 参数 - -login命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表3 pull命令参数列表"。 - -#### 示例 - -``` -$ isula pull localhost:5000/official/busybox -Image "localhost:5000/official/busybox" pulling -Image "localhost:5000/official/busybox@sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff" pulled -``` - -### 删除镜像 - -#### 描述 - -删除一个或多个镜像。 - -#### 用法 - -``` -isula rmi [OPTIONS] IMAGE [IMAGE...] -``` - -#### 参数 - -rmi命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表4 rmi命令参数列表"。 - -#### 示例 - -``` -$ isula rmi rnd-dockerhub.huawei.com/official/busybox -Image "rnd-dockerhub.huawei.com/official/busybox" removed -``` - -### 加载镜像 - -#### 描述 - -从一个tar包加载镜像。该tar包必须是使用docker save命令导出的tar包或格式一致的tar包。 - -#### 用法 - -``` -isula load [OPTIONS] -``` - -#### 参数 - -load命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表5 load命令参数列表"。 - -#### 示例 - -``` -$ isula load -i busybox.tar -Load image from "/root/busybox.tar" success -``` - -### 列出镜像 - -#### 描述 - -列出当前环境中所有镜像。 - -#### 用法 - -``` -isula images -``` - -#### 参数 - -images命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表6 images命令参数列表"。 - -#### 示例 - -``` -$ isula images -REF IMAGE ID CREATED SIZE -rnd-dockerhub.huawei.com/official/busybox:latest e4db68de4ff2 2019-06-15 08:19:54 1.376 MB -``` - -### 检视镜像 - -#### 描述 - -返回该镜像的配置信息。可以使用-f参数过滤出需要的信息。 - -#### 用法 - -``` -isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...] -``` - -#### 参数 - -inspect命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表7 inspect命令参数列表"。 - -#### 示例 - -``` -$ isula inspect -f "{{json .image.id}}" rnd-dockerhub.huawei.com/official/busybox -"e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b" -``` - -### 双向认证 - -#### 描述 - -开启该功能后isulad和镜像仓库之间的通信采用https通信,isulad和镜像仓库都会验证对方的合法性。 - -#### 用法 - -要支持该功能,需要镜像仓库支持该功能,同时isulad也需要做相应的配置: - -1. 修改isulad的配置\(默认路径/etc/isulad/daemon.json\),将配置里的use-decrypted-key项配置为false。 -2. 需要将相关的证书放置到/etc/isulad/certs.d目录下对应的镜像仓库命名的文件夹下,证书具体的生成方法见docker的官方链接: - - [https://docs.docker.com/engine/security/certificates/](https://docs.docker.com/engine/security/certificates/) - - [https://docs.docker.com/engine/security/https/](https://docs.docker.com/engine/security/https/) - - -1. 执行systemctl restart isulad重启isulad。 - -#### 参数 - -可以在/etc/isulad/daemon.json中配置参数,也可以在启动isulad时携带参数: - -``` -isulad --use-decrypted-key=false -``` - -#### 示例 - -配置use-decrypted-key参数为false - -``` -$ cat /etc/isulad/daemon.json -{ - "group": "isulad", - "graph": "/var/lib/isulad", - "state": "/var/run/isulad", - "engine": "lcr", - "log-level": "ERROR", - "pidfile": "/var/run/isulad.pid", - "log-opts": { - "log-file-mode": "0600", - "log-path": "/var/lib/isulad", - "max-file": "1", - "max-size": "30KB" - }, - "log-driver": "stdout", - "hook-spec": "/etc/default/isulad/hooks/default.json", - "start-timeout": "2m", - "storage-driver": "overlay2", - "storage-opts": [ - "overlay2.override_kernel_check=true" - ], - "registry-mirrors": [ - "docker.io" - ], - "insecure-registries": [ - "rnd-dockerhub.huawei.com" - ], - "pod-sandbox-image": "", - "image-opt-timeout": "5m", - "native.umask": "secure", - "network-plugin": "", - "cni-bin-dir": "", - "cni-conf-dir": "", - "image-layer-check": false, - "use-decrypted-key": false, - "insecure-skip-verify-enforce": false -} -``` - -将证书放到对应的目录下 - -``` -$ pwd -/etc/isulad/certs.d/my.csp-edge.com:5000 -$ ls -ca.crt tls.cert tls.key -``` - -重启isulad - -``` -$ systemctl restart isulad -``` - -执行pull命令从仓库下载镜像 - -``` -$ isula pull my.csp-edge.com:5000/busybox -Image "my.csp-edge.com:5000/busybox" pulling -Image "my.csp-edge.com:5000/busybox@sha256:f1bdc62115dbfe8f54e52e19795ee34b4473babdeb9bc4f83045d85c7b2ad5c0" pulled -``` - -## embedded镜像管理 - -### 加载镜像 - -#### 描述 - -根据embedded镜像的manifest加载镜像。注意--type的值必须填写embedded。 - -#### 用法 - -``` -isula load [OPTIONS] --input=FILE --type=TYPE -``` - -#### 参数 - -load命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表5 load命令参数列表"。 - -#### 示例 - -``` -$ isula load -i test.manifest --type embedded -Load image from "/root/work/bugfix/tmp/ci_testcase_data/embedded/img/test.manifest" success -``` - -### 列出镜像 - -#### 描述 - -列出当前环境中所有镜像。 - -#### 用法 - -``` -isula images [OPTIONS] -``` - -#### 参数 - -images命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表6 images命令参数列表"。 - -#### 示例 - -``` -$ isula images -REF IMAGE ID CREATED SIZE -test:v1 9319da1f5233 2018-03-01 10:55:44 1.273 MB -``` - -### 检视镜像 - -#### 描述 - -返回该镜像的配置信息。可以使用-f参数过滤出需要的信息。 - -#### 用法 - -``` -isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...] -``` - -#### 参数 - -inspect命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表7 inspect命令参数列表"。 - -#### 示例 - -``` -$ isula inspect -f "{{json .created}}" test:v1 -"2018-03-01T15:55:44.322987811Z" -``` - -### 删除镜像 - -#### 描述 - -删除一个或多个镜像。 - -#### 用法 - -``` -isula rmi [OPTIONS] IMAGE [IMAGE...] -``` - -#### 参数 - -rmi命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表4 rmi命令参数列表"。 - -#### 示例 - -``` -$ isula rmi test:v1 -Image "test:v1" removed -``` - -### 添加名称 - -#### 描述 - -给镜像添加一个名称。 - -#### 用法 - -``` -isula tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] -``` - -#### 参数 - -tag命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表8 tag命令参数列表"。 - -#### 示例 - -``` -$ isula tag test:v1 test:v2 -``` - -### 导入镜像 - -#### 描述 - -将tar格式的rootfs导入生成一个新的镜像,该tar包必须是通过export命令导出的tar包。 - -#### 用法 - -``` -isula export [command options] [ID|NAME] -``` - -#### 参数 - -export命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表9 export命令参数列表"。 - -#### 示例 - -``` -$ isula export -o test.tar containername -``` +# 镜像管理 + + + +- [镜像管理](#镜像管理) + - [docker镜像管理](#docker镜像管理) + - [登录到镜像仓库](#登录到镜像仓库) + - [从镜像仓库退出登录](#从镜像仓库退出登录) + - [从镜像仓库拉取镜像](#从镜像仓库拉取镜像) + - [删除镜像](#删除镜像) + - [加载镜像](#加载镜像) + - [列出镜像](#列出镜像) + - [检视镜像](#检视镜像) + - [双向认证](#双向认证) + - [embedded镜像管理](#embedded镜像管理) + - [加载镜像](#加载镜像-1) + - [列出镜像](#列出镜像-1) + - [检视镜像](#检视镜像-1) + - [删除镜像](#删除镜像-1) + + + + +## docker镜像管理 + +### 登录到镜像仓库 + +#### 描述 + +isula login命令用于登录到镜像仓库。登录成功后可以使用isula pull命令从该镜像仓库拉取镜像。如果镜像仓库不需要密码,则拉取镜像前不需要执行该命令。 + +#### 用法 + +``` +isula login [OPTIONS] SERVER +``` + +#### 参数 + +login命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表1 表1-20 login命令参数列表" 。 + +#### 示例 + +``` +$ isula login -u abc my.csp-edge.com:5000 + +Login Succeeded +``` + +### 从镜像仓库退出登录 + +#### 描述 + +isula logout命令用于从镜像仓库退出登录。退出登录成功后再执行isula pull命令从该镜像仓库拉取镜像会因为未认证而拉取失败。 + +#### 用法 + +``` +isula logout SERVER +``` + +#### 参数 + +logout命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表2 logout命令参数列表"。 + +#### 示例 + +``` +$ isula logout my.csp-edge.com:5000 +Logout Succeeded +``` + +### 从镜像仓库拉取镜像 + +#### 描述 + +从镜像仓库拉取镜像到本地。 + +#### 用法 + +``` +isula pull [OPTIONS] NAME[:TAG|@DIGEST] +``` + +#### 参数 + +login命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表3 pull命令参数列表"。 + +#### 示例 + +``` +$ isula pull localhost:5000/official/busybox +Image "localhost:5000/official/busybox" pulling +Image "localhost:5000/official/busybox@sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff" pulled +``` + +### 删除镜像 + +#### 描述 + +删除一个或多个镜像。 + +#### 用法 + +``` +isula rmi [OPTIONS] IMAGE [IMAGE...] +``` + +#### 参数 + +rmi命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表4 rmi命令参数列表"。 + +#### 示例 + +``` +$ isula rmi rnd-dockerhub.huawei.com/official/busybox +Image "rnd-dockerhub.huawei.com/official/busybox" removed +``` + +### 加载镜像 + +#### 描述 + +从一个tar包加载镜像。该tar包必须是使用docker save命令导出的tar包或格式一致的tar包。 + +#### 用法 + +``` +isula load [OPTIONS] +``` + +#### 参数 + +load命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表5 load命令参数列表"。 + +#### 示例 + +``` +$ isula load -i busybox.tar +Load image from "/root/busybox.tar" success +``` + +### 列出镜像 + +#### 描述 + +列出当前环境中所有镜像。 + +#### 用法 + +``` +isula images +``` + +#### 参数 + +images命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表6 images命令参数列表"。 + +#### 示例 + +``` +$ isula images +REF IMAGE ID CREATED SIZE +rnd-dockerhub.huawei.com/official/busybox:latest e4db68de4ff2 2019-06-15 08:19:54 1.376 MB +``` + +### 检视镜像 + +#### 描述 + +返回该镜像的配置信息。可以使用-f参数过滤出需要的信息。 + +#### 用法 + +``` +isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...] +``` + +#### 参数 + +inspect命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表7 inspect命令参数列表"。 + +#### 示例 + +``` +$ isula inspect -f "{{json .image.id}}" rnd-dockerhub.huawei.com/official/busybox +"e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b" +``` + +### 双向认证 + +#### 描述 + +开启该功能后isulad和镜像仓库之间的通信采用https通信,isulad和镜像仓库都会验证对方的合法性。 + +#### 用法 + +要支持该功能,需要镜像仓库支持该功能,同时isulad也需要做相应的配置: + +1. 修改isulad的配置\(默认路径/etc/isulad/daemon.json\),将配置里的use-decrypted-key项配置为false。 +2. 需要将相关的证书放置到/etc/isulad/certs.d目录下对应的镜像仓库命名的文件夹下,证书具体的生成方法见docker的官方链接: + - [https://docs.docker.com/engine/security/certificates/](https://docs.docker.com/engine/security/certificates/) + - [https://docs.docker.com/engine/security/https/](https://docs.docker.com/engine/security/https/) + + +1. 执行systemctl restart isulad重启isulad。 + +#### 参数 + +可以在/etc/isulad/daemon.json中配置参数,也可以在启动isulad时携带参数: + +``` +isulad --use-decrypted-key=false +``` + +#### 示例 + +配置use-decrypted-key参数为false + +``` +$ cat /etc/isulad/daemon.json +{ + "group": "isulad", + "graph": "/var/lib/isulad", + "state": "/var/run/isulad", + "engine": "lcr", + "log-level": "ERROR", + "pidfile": "/var/run/isulad.pid", + "log-opts": { + "log-file-mode": "0600", + "log-path": "/var/lib/isulad", + "max-file": "1", + "max-size": "30KB" + }, + "log-driver": "stdout", + "hook-spec": "/etc/default/isulad/hooks/default.json", + "start-timeout": "2m", + "storage-driver": "overlay2", + "storage-opts": [ + "overlay2.override_kernel_check=true" + ], + "registry-mirrors": [ + "docker.io" + ], + "insecure-registries": [ + "rnd-dockerhub.huawei.com" + ], + "pod-sandbox-image": "", + "native.umask": "secure", + "network-plugin": "", + "cni-bin-dir": "", + "cni-conf-dir": "", + "image-layer-check": false, + "use-decrypted-key": false, + "insecure-skip-verify-enforce": false +} +``` + +将证书放到对应的目录下 + +``` +$ pwd +/etc/isulad/certs.d/my.csp-edge.com:5000 +$ ls +ca.crt tls.cert tls.key +``` + +重启isulad + +``` +$ systemctl restart isulad +``` + +执行pull命令从仓库下载镜像 + +``` +$ isula pull my.csp-edge.com:5000/busybox +Image "my.csp-edge.com:5000/busybox" pulling +Image "my.csp-edge.com:5000/busybox@sha256:f1bdc62115dbfe8f54e52e19795ee34b4473babdeb9bc4f83045d85c7b2ad5c0" pulled +``` + +## embedded镜像管理 + +### 加载镜像 + +#### 描述 + +根据embedded镜像的manifest加载镜像。注意--type的值必须填写embedded。 + +#### 用法 + +``` +isula load [OPTIONS] --input=FILE --type=TYPE +``` + +#### 参数 + +load命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表5 load命令参数列表"。 + +#### 示例 + +``` +$ isula load -i test.manifest --type embedded +Load image from "/root/work/bugfix/tmp/ci_testcase_data/embedded/img/test.manifest" success +``` + +### 列出镜像 + +#### 描述 + +列出当前环境中所有镜像。 + +#### 用法 + +``` +isula images [OPTIONS] +``` + +#### 参数 + +images命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表6 images命令参数列表"。 + +#### 示例 + +``` +$ isula images +REF IMAGE ID CREATED SIZE +test:v1 9319da1f5233 2018-03-01 10:55:44 1.273 MB +``` + +### 检视镜像 + +#### 描述 + +返回该镜像的配置信息。可以使用-f参数过滤出需要的信息。 + +#### 用法 + +``` +isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...] +``` + +#### 参数 + +inspect命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表7 inspect命令参数列表"。 + +#### 示例 + +``` +$ isula inspect -f "{{json .created}}" test:v1 +"2018-03-01T15:55:44.322987811Z" +``` + +### 删除镜像 + +#### 描述 + +删除一个或多个镜像。 + +#### 用法 + +``` +isula rmi [OPTIONS] IMAGE [IMAGE...] +``` + +#### 参数 + +rmi命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表4 rmi命令参数列表"。 + +#### 示例 + +``` +$ isula rmi test:v1 +Image "test:v1" removed +``` + diff --git "a/content/zh/docs/Container/\351\231\204\345\275\225-2.md" "b/docs/zh/docs/Container/\351\231\204\345\275\225-2.md" similarity index 100% rename from "content/zh/docs/Container/\351\231\204\345\275\225-2.md" rename to "docs/zh/docs/Container/\351\231\204\345\275\225-2.md" diff --git "a/content/zh/docs/Container/\351\231\204\345\275\225-3.md" "b/docs/zh/docs/Container/\351\231\204\345\275\225-3.md" similarity index 99% rename from "content/zh/docs/Container/\351\231\204\345\275\225-3.md" rename to "docs/zh/docs/Container/\351\231\204\345\275\225-3.md" index 0e73dca0d1fbe538ba4ae637e6c434d9676cd229..ae47613246784147f91d844289ac99e09eed616a 100644 --- "a/content/zh/docs/Container/\351\231\204\345\275\225-3.md" +++ "b/docs/zh/docs/Container/\351\231\204\345\275\225-3.md" @@ -5,7 +5,7 @@ ## configuration-toml配置说明 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >configuration.toml配置文件中各个字段的取值以kata-containers-.rpm包中的configuration.toml文件为准,不支持用户对配置文件中的字段任意取值。 ``` @@ -133,7 +133,7 @@ experimental :开启实验特性,不支持用户自定义配置

设置网卡的容器内名称

-

必选。支持字母、数字、下划线“_”、“-” 以及“.”字符,必须以字母开头,且长度不超过15。需要确保同一个Sandbox内name不能重复。

+

必选。支持字母、数字、下划线“\_”、“-” 以及“.”字符,必须以字母开头,且长度不超过15。需要确保同一个Sandbox内name不能重复。

IPAddresses

diff --git "a/content/zh/docs/Container/\351\231\204\345\275\225.md" "b/docs/zh/docs/Container/\351\231\204\345\275\225.md" similarity index 94% rename from "content/zh/docs/Container/\351\231\204\345\275\225.md" rename to "docs/zh/docs/Container/\351\231\204\345\275\225.md" index 0757c9f93bbaac874755bff8e0293fdc40c608c8..858096ce5f302f179f7831fae4b0cfc04fe604a4 100644 --- "a/content/zh/docs/Container/\351\231\204\345\275\225.md" +++ "b/docs/zh/docs/Container/\351\231\204\345\275\225.md" @@ -214,51 +214,6 @@ -**表 8** tag命令参数列表 - - - - - - - - - - - -

命令

-

参数

-

说明

-

tag

-

-H, --host

-

指定要连接的iSulad socket文件路径

-
- -
- -**表 9** import命令参数列表 - - - - - - - - - - - -

命令

-

参数

-

说明

-

import

-

-H, --host

-

指定要连接的iSulad socket文件路径

-
- -
- - ## CNI配置参数 **表 1** CNI单网络配置参数 diff --git "a/docs/zh/docs/HA/HA\347\232\204\344\275\277\347\224\250\345\256\236\344\276\213.md" "b/docs/zh/docs/HA/HA\347\232\204\344\275\277\347\224\250\345\256\236\344\276\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..a955c095b2d6072e591300caa6fe801c68bf58ea --- /dev/null +++ "b/docs/zh/docs/HA/HA\347\232\204\344\275\277\347\224\250\345\256\236\344\276\213.md" @@ -0,0 +1,227 @@ +# HA使用实例 + +本章介绍如何快速使用HA高可用集群,以及添加一个实例。若不了解怎么安装,请参考[HA的安装与部署文档](./HA的安装与部署.md\)。 + + + - [HA使用实例](#HA使用与实例) + - [快速使用指南](#快速使用指南) + - [登陆页面](#登陆页面) + - [主页面](#主页面) + - [导航栏](#导航栏) + - [顶部操作区](#顶部操作区) + - [资源节点列表区](#资源节点列表区) + - [节点操作浮动区](#节点操作浮动区) + - [首选项配置](#首选项配置) + - [添加资源](#添加资源) + - [添加普通资源](#添加普通资源) + - [添加组资源](#添加组资源) + - [添加克隆资源](#添加克隆资源) + - [编辑资源](#编辑资源) + - [设置资源关系](#设置资源关系) + - [高可用mysql实例配置](#高可用mysql实例配置) + - [配置虚拟IP](#配置虚拟IP) + - [配置NFS存储](#配置NFS存储) + - [配置mysql](#配置mysql) + - [添加上述资源为组资源](#添加上述资源为组资源) + - [FAQ](#FAQ) + + +## 快速使用指南 + +- 以下操作均以社区新开发的管理平台为例。 + +### 登陆页面 +用户名为`hacluster`,密码为该用户在主机上设置的密码。 + +![](./figures/HA-api.png) + +### 主页面 +登录系统后显示主页面,主页面由四部分组成:侧边导航栏、顶部操作区、资源节点列表区以及节点操作浮动区。 + +以下将详细介绍这四部分的特点与使用方法。 + +![](./figures/HA-home-page.png) + +#### 导航栏 +侧边导航栏由两部分组成:高可用集群软件名称和 logo 以及系统导航。系统导航由三项组成:【系统】、【集群配置】和【工具】。【系统】是默认选项,也是主页面的对应项,主要展示系统中所有资源的相关信息以及操作入口;【集群配置】下设【首选项配置】和【心跳配置】两项;【工具】下设【日志下载】和【集群快捷操作】两项,点击后以弹出框的形式出现。 + +#### 顶部操作区 +登录用户是静态显示,鼠标滑过用户图标,出现操作菜单项,包括【刷新设置】和【退出登录】两项,点击【刷新设置】,弹出【刷新设置】对话框,包含【刷新设置】选项,可以设置系统的自动刷新模式,包括【不自动刷新】、【每 5 秒刷新】和【每 10 秒刷新】三种选择,默认选择【不自动刷新】、【退出登录】即可注销本次登录,系统将自动跳到登录页面,此时,如果希望继续访问系统,则需要重新进行登录。 + +![](./figures/HA-refresh.png) + +#### 资源节点列表区 +资源节点列表集中展现系统中所有资源的【资源名】、【状态】、【资源类型】、【服务】、【运行节点】等资源信息,以及系统中所有的节点和节点的运行情况等节点信息。同时提供资源的【添加】、【编辑】、【启动】、【停止】、【清理】、【迁移】、【回迁】、【删除】和【关系】操作。 + +#### 节点操作浮动区 +节点操作浮动区域默认是收起的状态,每当点击资源节点列表表头中的节点时,右侧会弹出节点操作扩展区域,如图所示,该区域由收起按钮、节点名称、停止和备用四个部分组成,提供节点的【停止】和【备用】操作。点击区域左上角的箭头,该区域收起。 + +### 首选项配置 +以下操作均可用命令行配置,现只做简单示例,若想使用更多命令可以使用``pcs --help``进行查询。 + +``` +# pcs property set stonith-enabled=false +# pcs property set no-quorum-policy=ignore +``` +``pcs property``查看全部设置 + +![](./figures/HA-firstchoice-cmd.png) + +- 点击侧边导航栏中的【首选项配置】按钮,弹出【首选项配置】对话框。将No Quorum Policy和Stonith Enabled由默认状态改为如下对应状态;修改完成后,点击【确定】按钮完成配置。 + +![](./figures/HA-firstchoice.png) + +#### 添加资源 +##### 添加普通资源 +鼠标点击【添加普通资源】,弹出【创建资源】对话框,其中资源的所有必填配置项均在【基本】页面内,选择【基本】页面内的【资源类型】后会进一步给出该类资源的其他必填配置项以及选填配置项。填写资源配置信息时,对话框右侧会出现灰色文字区域,对当前的配置项进行解释说明。全部必填项配置完毕后,点击【确定】按钮即可创建普通资源,点击【取消】按钮,取消本次添加动作。【实例属性】、【元属性】或者【操作属性】页面中的选填配置项为选填项,不配置不会影响资源的创建过程,可以根据场景需要可选择修改,否则将按照系统默认值处理。 + +下面以apache为例,添加apache资源 +``` +# pcs resource create httpd ocf:heartbeat:apache +``` +查看资源运行状态 +``` +# pcs status +``` + +![](./figures/HA-pcs-status.png) + +- 添加apache资源 + +![](./figures/HA-add-resource.png) +- 若回显为如下,则资源添加成功 + +![](./figures/HA-apache-suc.png) +- 资源创建成功并启动,运行于其中一个节点上,例如ha1;成功访问apache界面。 + +![](./figures/HA-apache-show.png) + +##### 添加组资源 +添加组资源时,集群中需要至少存在一个普通资源。鼠标点击【添加组资源】,弹出【创建资源】对话框。【基本】页面内均为必填项,填写完毕后,点击【确定】按钮,即可完成资源的添加,点击【取消】按钮,取消本次添加动作。 + +- **注:组资源的启动是按照子资源的顺序启动的,所以选择子资源时需要注意按照顺序选择。** + +![](./figures/HA-group.png) + +若回显为如下,则资源添加成功 + +![](./figures/HA-group-suc.png) + +##### 添加克隆资源 +鼠标点击【添加克隆资源】,弹出【创建资源】对话框。【基本】页面内填写克隆对象,资源名称会自动生成,填写完毕后,点击【确定】按钮,即可完成资源的添加,点击【取消】按钮,取消本次添加动作。 + +![](./figures/HA-clone.png) + +若回显为如下,则资源添加成功 + +![](./figures/HA-clone-suc.png) +#### 编辑资源 +- 启动资源:资源节点列表中选中一个目标资源,要求:该资源处于非运行状态。对该资源执行启动动作。 +- 停止资源:资源节点列表中选中一个目标资源,要求:该资源处于运行状态。对该资源执行停止操作。 +- 清理资源:资源节点列表中选中一个目标资源,对该资源执行清理操作。 +- 迁移资源:资源节点列表中选中一个目标资源,要求:该资源为处于运行状态的普通资源或者组资源,执行迁移操作可以将资源迁移到指定节点上运行。 +- 回迁资源:资源节点列表中选中一个目标资源,要求:该资源已经完成迁移动作,执行回迁操作,可以清除该资源的迁移设置,资源重新迁回到原来的节点上运行。 +点击按钮后,列表中该资源项的变化状态与启动资源时一致。 +- 删除资源:资源节点列表中选中一个目标资源,对该资源执行删除操作。 + +#### 设置资源关系 +资源关系即为目标资源设定限制条件,资源的限制条件分为三种:资源位置、资源协同和资源顺序。 +- 资源位置:设置集群中的节点对于该资源的运行级别,由此确定启动或者切换时资源在哪个节点上运行,运行级别按照从高到低的顺序依次为:Master Node、Slave 1。 +- 资源协同:设置目标资源与集群中的其他资源是否运行在同一节点上,同节点资源表示该资源与目标资源必须运行在相同节点上,互斥节点资源表示该资源与目标资源不能运行在相同的节点上。 +- 资源顺序:设置目标资源与集群中的其他资源启动时的先后顺序,前置资源是指目标资源运行之前,该资源必须已经运行;后置资源是指目标资源运行之后,该资源才能运行。 + +## 高可用mysql实例配置 +- 先单独配置三个普通资源,待成功后添加为组资源。 +### 配置虚拟IP +在首页中点击添加-->添加普通资源,并按如下进行配置。 + +![](./figures/HA-vip.png) + +- 资源创建成功并启动,运行于其中一个节点上,例如ha1;可以ping通并连接,登录后可正常执行各种操作;资源切换到ha2运行;能够正常访问。 +- 若回显为如下,则资源添加成功 + +![](./figures/HA-vip-suc.png) + +设置资源位置(每个资源都需要设置),以vip资源为例。 + +![](./figures/HA-resource-location.png) + +### 配置NFS存储 +- 另外找一台机器作为nfs服务端进行配置 + +安装软件包 + +``` +# yum install -y nfs-utils rpcbind +``` +关闭防火墙 +``` +# systemctl stop firewalld && systemctl disable firewalld +``` +修改/etc/selinux/config文件中SELINUX状态为disabled +``` +# SELINUX=disabled +``` +启动服务 +``` +# systemctl start rpcbind && systemctl enable rpcbind +# systemctl start nfs-server && systemctl enable nfs-server +``` +服务端创建一个共享目录 +``` +# mkdir -p /test +``` +修改NFS配置文件 +``` +# vim /etc/exports +# /test *(rw,no_root_squash) +``` +重新加载服务 +``` +# systemctl reload nfs +``` + +客户端安装软件包,先把mysql安装上,为了把下面nfs挂载到mysql数据路径 +``` +# yum install -y nfs-utils mariadb-server +``` +在首页中点击添加-->添加普通资源,并按如下进行配置NFS资源。 + +![](./figures/HA-nfs.png) + +- 资源创建成功并启动,运行于其中一个节点上,例如ha1;nfs成功挂载到/var/lib/mysql路径下。资源切换到ha2运行;nfs从ha1节点取消挂载,并自动在ha2节点上挂载成功。 +- 若回显为如下,则资源添加成功 + +![](./figures/HA-nfs-suc.png) + +### 配置mysql +在首页中点击添加-->添加普通资源,并按如下进行配置mysql资源。 + +![](./figures/HA-mariadb.png) + +配置操作属性 + +![](./figures/HA-operational-attributes.png) + +- 若回显为如下,则资源添加成功 + +![](./figures/HA-mariadb-suc.png) + +### 添加上述资源为组资源 +- 按资源启动顺序添加三个资源,需要先停止vip、nfs、mariadb资源 + +在首页中点击添加-->添加组资源,并按如下进行配置组资源。 + +![](./figures/HA-group-new.png) + +- 组资源创建成功并启动,若回显与上述三个普通资源成功现象一致,则资源添加成功 + +![](./figures/HA-group-new-suc.png) + +- 将ha1节点备用,成功迁移到ha2节点,运行正常 + +![](./figures/HA-group-new-suc2.png) + +## FAQ +1. fence_virtd服务停止失败。 + - fence_virtd服务依赖于libvirtd服务启动,在使用fence_virtd服务前请手动确认并拉起libvirtd即可正常使用。 diff --git "a/docs/zh/docs/HA/HA\347\232\204\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" "b/docs/zh/docs/HA/HA\347\232\204\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" new file mode 100644 index 0000000000000000000000000000000000000000..1bf3672fcbc29bf367e397cae4f25936e7fd1f02 --- /dev/null +++ "b/docs/zh/docs/HA/HA\347\232\204\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" @@ -0,0 +1,185 @@ +# HA的安装与部署 + +本章介绍如何安装和部署HA高可用集群。 + + +- [HA的安装与部署](#ha的安装与部署) + - [安装与部署](#安装与部署) + - [修改主机名称及/etc/hosts文件](#修改主机名称及etchosts文件) + - [配置yum源](#配置yum源) + - [安装HA软件包组件](#安装ha软件包组件) + - [设置hacluster用户密码](#设置hacluster用户密码) + - [修改`/etc/corosync/corosync.conf`文件](#修改etccorosynccorosyncconf文件) + - [管理服务](#管理服务) + - [关闭防火墙](#关闭防火墙) + - [管理pcs服务](#管理pcs服务) + - [管理pacemaker服务](#管理pacemaker服务) + - [管理corosync服务](#管理corosync服务) + - [节点鉴权](#节点鉴权) + - [访问前端管理平台](#访问前端管理平台) + + +## 安装与部署 +- 环境准备:需要至少两台安装了openEuler 20.03 LTS SP3的物理机/虚拟机(现以两台为例),安装方法参考《openEuler 20.03 LTS SP3 安装指南》。 + +### 修改主机名称及/etc/hosts文件 +- **注:两台主机均需要进行以下操作,现以其中一台为例。** + +在使用HA软件之前,需要确认修改主机名并将所有主机名写入/etc/hosts文件中。 +- 修改主机名 +``` +# hostnamectl set-hostname ha1 +``` + +- 编辑`/etc/hosts`文件并写入以下字段 +``` +172.30.30.65 ha1 +172.30.30.66 ha2 +``` + +### 配置yum源 +成功安装系统后,会默认配置好yum源,文件位置存放在`/etc/yum.repos.d/openEuler.repo`文件中,HA软件包会用到以下源: +``` +[OS] +name=OS +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/$basearch/RPM-GPG-KEY-openEuler + +[everything] +name=everything +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/everything/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/everything/$basearch/RPM-GPG-KEY-openEuler + +[EPOL] +name=EPOL +baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/EPOL/main/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/$basearch/RPM-GPG-KEY-openEuler +``` + +### 安装HA软件包组件 +``` +# yum install -y corosync pacemaker pcs fence-agents fence-virt corosync-qdevice sbd drbd +``` + +### 设置hacluster用户密码 +``` +# passwd hacluster +``` + +### 修改`/etc/corosync/corosync.conf`文件 +``` +totem { + version: 2 + cluster_name: hacluster + crypto_cipher: none + crypto_hash: none +} +logging { + fileline: off + to_stderr: yes + to_logfile: yes + logfile: /var/log/cluster/corosync.log + to_syslog: yes + debug: on + logger_subsys { + subsys: QUORUM + debug: on + } +} +quorum { + provider: corosync_votequorum + expected_votes: 2 + two_node: 1 + } +nodelist { + node { + name: ha1 + nodeid: 1 + ring0_addr: 172.30.30.65 + } + node { + name: ha2 + nodeid: 2 + ring0_addr: 172.30.30.66 + } + } +``` +### 管理服务 +#### 关闭防火墙 +``` +# systemctl stop firewalld +``` +修改/etc/selinux/config文件中SELINUX状态为disabled +``` +# SELINUX=disabled +``` + +#### 管理pcs服务 +- 启动pcs服务: +``` +# systemctl start pcsd +``` + +- 查询pcs服务状态: +``` +# systemctl status pcsd +``` + +若回显为如下,则服务启动成功。 + +![](./figures/HA-pcs.png) + +#### 管理pacemaker服务 +- 启动pacemaker服务: +``` +# systemctl start pacemaker +``` + +- 查询pacemaker服务状态: +``` +# systemctl status pacemaker +``` + +若回显为如下,则服务启动成功。 + +![](./figures/HA-pacemaker.png) + +#### 管理corosync服务 +- 启动corosync服务: +``` +# systemctl start corosync +``` + +- 查询corosync服务状态: +``` +# systemctl status corosync +``` + +若回显为如下,则服务启动成功。 + +![](./figures/HA-corosync.png) + +### 节点鉴权 +- **注:一个节点上执行即可** +``` +# pcs host auth ha1 ha2 +``` + +### 访问前端管理平台 +上述服务启动成功后,打开浏览器(建议使用:Chrome,Firfox),在浏览器导航栏中输入`https://localhost:2224`即可。 +- 此界面为原生管理平台 + +![](./figures/HA-login.png) + +若安装社区新开发的管理平台请参考此文档`https://gitee.com/openeuler/ha-api/blob/master/docs/build.md` +- 下面为社区新开发的管理平台 + +![](./figures/HA-api.png) + +- 下一章将介绍如何快速使用HA高可用集群,以及添加一个实例。请参考[HA的使用实例文档](./HA的使用实例.md\)。 \ No newline at end of file diff --git a/docs/zh/docs/HA/figures/HA-add-resource.png b/docs/zh/docs/HA/figures/HA-add-resource.png new file mode 100644 index 0000000000000000000000000000000000000000..ac24895a1247828d248132f6c789ad8ef51a57e4 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-add-resource.png differ diff --git a/docs/zh/docs/HA/figures/HA-apache-show.png b/docs/zh/docs/HA/figures/HA-apache-show.png new file mode 100644 index 0000000000000000000000000000000000000000..c216500910f75f2de1108f6b618c5c08f4df8bae Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-apache-show.png differ diff --git a/docs/zh/docs/HA/figures/HA-apache-suc.png b/docs/zh/docs/HA/figures/HA-apache-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..23a7aaa702e3e68190ff7e01a5a673aee2c92409 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-apache-suc.png differ diff --git a/docs/zh/docs/HA/figures/HA-api.png b/docs/zh/docs/HA/figures/HA-api.png new file mode 100644 index 0000000000000000000000000000000000000000..f825fe005705d30809d12df97958cff0e5a80135 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-api.png differ diff --git a/docs/zh/docs/HA/figures/HA-clone-suc.png b/docs/zh/docs/HA/figures/HA-clone-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6099ccc88d4f6f907a0c4563e729ab2a4dece1 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-clone-suc.png differ diff --git a/docs/zh/docs/HA/figures/HA-clone.png b/docs/zh/docs/HA/figures/HA-clone.png new file mode 100644 index 0000000000000000000000000000000000000000..1b09ab73849494f4ffd759fa612ae3c241bd9c1d Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-clone.png differ diff --git a/docs/zh/docs/HA/figures/HA-corosync.png b/docs/zh/docs/HA/figures/HA-corosync.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d93242e65c503b6e1b6a457e2517f647984a66 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-corosync.png differ diff --git a/docs/zh/docs/HA/figures/HA-firstchoice-cmd.png b/docs/zh/docs/HA/figures/HA-firstchoice-cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..a265bab07f1d8e46d9d965975be180a8de6c9eb2 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-firstchoice-cmd.png differ diff --git a/docs/zh/docs/HA/figures/HA-firstchoice.png b/docs/zh/docs/HA/figures/HA-firstchoice.png new file mode 100644 index 0000000000000000000000000000000000000000..bd982ddcea55c629c0257fca86051a9ffa77e7b4 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-firstchoice.png differ diff --git a/docs/zh/docs/HA/figures/HA-group-new-suc.png b/docs/zh/docs/HA/figures/HA-group-new-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..437fd01ee83a9a1f65c12838fe56eea8435f6759 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-group-new-suc.png differ diff --git a/docs/zh/docs/HA/figures/HA-group-new-suc2.png b/docs/zh/docs/HA/figures/HA-group-new-suc2.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb933bd761f9808de95a324a50226ff041ebd4f Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-group-new-suc2.png differ diff --git a/docs/zh/docs/HA/figures/HA-group-new.png b/docs/zh/docs/HA/figures/HA-group-new.png new file mode 100644 index 0000000000000000000000000000000000000000..9c914d0cc2e14f3220fc4346175961f129efb37b Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-group-new.png differ diff --git a/docs/zh/docs/HA/figures/HA-group-suc.png b/docs/zh/docs/HA/figures/HA-group-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..2338580343833ebab08627be3a2efbcdb48aef9e Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-group-suc.png differ diff --git a/docs/zh/docs/HA/figures/HA-group.png b/docs/zh/docs/HA/figures/HA-group.png new file mode 100644 index 0000000000000000000000000000000000000000..6897817665dee90c0f8c47c6a3cb4bb09db52d78 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-group.png differ diff --git a/docs/zh/docs/HA/figures/HA-home-page.png b/docs/zh/docs/HA/figures/HA-home-page.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a7a82dc412250d4c0984b3876c6f93c6aca789 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-home-page.png differ diff --git a/docs/zh/docs/HA/figures/HA-login.png b/docs/zh/docs/HA/figures/HA-login.png new file mode 100644 index 0000000000000000000000000000000000000000..65d0ae11ec810da7574ec72bebf6e1b020c94a0d Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-login.png differ diff --git a/docs/zh/docs/HA/figures/HA-mariadb-suc.png b/docs/zh/docs/HA/figures/HA-mariadb-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..6f6756c945121715edc623bd9a848bc48ffeb4ca Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-mariadb-suc.png differ diff --git a/docs/zh/docs/HA/figures/HA-mariadb.png b/docs/zh/docs/HA/figures/HA-mariadb.png new file mode 100644 index 0000000000000000000000000000000000000000..d29587c8609b9d6aefeb07170901361b5ef8402d Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-mariadb.png differ diff --git a/docs/zh/docs/HA/figures/HA-nfs-suc.png b/docs/zh/docs/HA/figures/HA-nfs-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..c0ea6af79e91649f1ad7d97ab6c2a0069a4f4fb8 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-nfs-suc.png differ diff --git a/docs/zh/docs/HA/figures/HA-nfs.png b/docs/zh/docs/HA/figures/HA-nfs.png new file mode 100644 index 0000000000000000000000000000000000000000..f6917938eec2e0431a9891c067475dd0b21c1bd9 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-nfs.png differ diff --git a/docs/zh/docs/HA/figures/HA-operational-attributes.png b/docs/zh/docs/HA/figures/HA-operational-attributes.png new file mode 100644 index 0000000000000000000000000000000000000000..0938f11d3f2e170966e11b3594b9d1b64cbcd1dd Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-operational-attributes.png differ diff --git a/docs/zh/docs/HA/figures/HA-pacemaker.png b/docs/zh/docs/HA/figures/HA-pacemaker.png new file mode 100644 index 0000000000000000000000000000000000000000..7681f963f67d2b803fef6fb2c3247384136201f8 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-pacemaker.png differ diff --git a/docs/zh/docs/HA/figures/HA-pcs-status.png b/docs/zh/docs/HA/figures/HA-pcs-status.png new file mode 100644 index 0000000000000000000000000000000000000000..fb150fba9f6258658702b35caacf98076d1fd109 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-pcs-status.png differ diff --git a/docs/zh/docs/HA/figures/HA-pcs.png b/docs/zh/docs/HA/figures/HA-pcs.png new file mode 100644 index 0000000000000000000000000000000000000000..283670d7c3d0961ee1cb41345c2b2a013d7143b0 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-pcs.png differ diff --git a/docs/zh/docs/HA/figures/HA-refresh.png b/docs/zh/docs/HA/figures/HA-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..c2678c0c2945acbabfbeae0d5de8924a216bbf31 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-refresh.png differ diff --git a/docs/zh/docs/HA/figures/HA-resource-location.png b/docs/zh/docs/HA/figures/HA-resource-location.png new file mode 100644 index 0000000000000000000000000000000000000000..7faed091efda7956dc23c958062f679ac7f9d422 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-resource-location.png differ diff --git a/docs/zh/docs/HA/figures/HA-vip-suc.png b/docs/zh/docs/HA/figures/HA-vip-suc.png new file mode 100644 index 0000000000000000000000000000000000000000..313ce56e14f931c78dad4349ed57ab3fd7907f50 Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-vip-suc.png differ diff --git a/docs/zh/docs/HA/figures/HA-vip.png b/docs/zh/docs/HA/figures/HA-vip.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b417df2e64527d3b29d0289756dfbb01bf66ec Binary files /dev/null and b/docs/zh/docs/HA/figures/HA-vip.png differ diff --git a/docs/zh/docs/HA/ha.md b/docs/zh/docs/HA/ha.md new file mode 100644 index 0000000000000000000000000000000000000000..f03d1cf42d7fdeeecd41c312ce27e452d596e424 --- /dev/null +++ b/docs/zh/docs/HA/ha.md @@ -0,0 +1,3 @@ +# HA 用户指南 + +本节主要描述HA的安装和使用。 \ No newline at end of file diff --git a/docs/zh/docs/Installation/FAQ-1.md b/docs/zh/docs/Installation/FAQ-1.md new file mode 100644 index 0000000000000000000000000000000000000000..359d8c23fe65b0a24fbad4b89396fee9e7b20511 --- /dev/null +++ b/docs/zh/docs/Installation/FAQ-1.md @@ -0,0 +1,54 @@ +# FAQ + + +- [FAQ](#faq) + - [树莓派启动失败](#树莓派启动失败) + - [nmcli 命令连接 WIFI 失败](#nmcli-命令连接-wifi-失败) + + + +## 树莓派启动失败 + +### 问题现象 + +将 openEuler 发布的树莓派镜像刷写入 SD 卡后,树莓派启动失败。 + +### 原因分析 + +刷写 openEuler 发布的树莓派镜像后,树莓派启动失败,大致有以下几种情况: + +1. 下载的镜像文件不完整,请确保该镜像通过完整性校验。 +2. 镜像写入 SD 卡过程中出现问题,多出现在 Windows 环境下使用应用软件刷写镜像到 SD 卡的情况。 + +### 解决方法 + +将完整的镜像重新刷写入 SD 卡。 + +## nmcli 命令连接 WIFI 失败 + +### 问题现象 + +执行 `nmcli dev wifi connect SSID password PWD` 命令连接 WIFI 失败。例如提示 `Error: Connection activation failed: (7) Secrets were required, but not provided.` 等错误。 + +### 原因分析 + +执行的命令缺少密码。注意,如果密码中包含特殊字符,需要使用单引号将密码括起来。如果使用 nmcli 命令行连接 WIFI 失败,建议使用 nmtui 字符界面进行连接。 + +### 解决方法 + +执行 `nmtui` 命令进入到 nmtui 字符界面,按照以下步骤连接 WIFI。 + +1. 选择 `Edit a connection`,按 `Enter` 进入编辑网络连接窗口。 +2. 按下键盘右方向键选择 `Add`,按 `Enter` 进入新建网络连接窗口。 +3. 连接类型选择 `Wi-Fi` ,然后按下键盘右方向键选择 `Create`,按 `Enter` 进入 WIFI 编辑连接信息的界面。 +4. WIFI 连接信息界面主要需要编辑以下内容,其他信息根据实际情况而定。编辑结束后选择 `OK`,按 `Enter` 完成编辑并回退到编辑网络连接窗口。 + 1. `Profile name` 栏输入该 WIFI 连接的名称,这里可以使用默认名称,如 `Wi-Fi connection 1`; + 2. `Device` 栏输入要使用的无线网卡接口,这里输入 `wlan0`; + 3. `SSID` 栏输入要连接的 WIFI 的 SSID; + 4. `Security` 栏选择 WIFI 密码加密方式,这里根据实际情况选择,例如选择 `WPA & WPA2 Personal`; + 5. `Password` 栏输入 WIFI 密码。 + +5. 选择 `Back` 回退到最初的 nmtui 字符界面。 +6. 选择 `Activate a connection`,按 `Enter` 进入激活网络连接窗口。 +7. 查看添加的 WIFI 连接是否已激活(已激活的连接名称前有 `*` 标记)。如果未激活,选择该 WIFI 连接,然后按下键盘右方向键选择 `Activate`,按 `Enter` 激活该连接。待激活完成后,选择 `Back`,按 `Enter` 退出该激活界面,回退到最初的 nmtui 字符界面。 +8. 选择 `Quit`,然后按下键盘右方向键选择 `OK`,按 `Enter` 退出 nmtui 字符界面。 \ No newline at end of file diff --git a/content/zh/docs/Installation/FAQ.md b/docs/zh/docs/Installation/FAQ.md similarity index 79% rename from content/zh/docs/Installation/FAQ.md rename to docs/zh/docs/Installation/FAQ.md index 07a428057c41869e9b8ead8489e8b4d764cb543f..2cd1ce3ca4684803c09645c51b1faf881ad6fbb1 100644 --- a/content/zh/docs/Installation/FAQ.md +++ b/docs/zh/docs/Installation/FAQ.md @@ -1,16 +1,18 @@ # FAQ + + - [FAQ](#faq) - - [安装openEuler时选择第二盘位为安装目标,操作系统无法启动](#安装openeuler时选择第二盘位为安装目标操作系统无法启动) - - [网络配置约束限制](#网络配置约束限制) - - [openEuler开机后进入emergency模式](#openeuler开机后进入emergency模式) - - [系统中存在无法激活的逻辑卷组时,重装系统失败](#系统中存在无法激活的逻辑卷组时重装系统失败) + - [安装openEuler时选择第二盘位为安装目标,操作系统无法启动](#安装openEuler时选择第二盘位为安装目标,操作系统无法启动) + - [openEuler开机后进入emergency模式](#openEuler开机后进入emergency模式) + - [系统中存在无法激活的逻辑卷组时,重装系统失败](#系统中存在无法激活的逻辑卷组时,重装系统失败) - [选择安装源出现异常](#选择安装源出现异常) - [如何手动开启kdump服务](#如何手动开启kdump服务) - - [多块磁盘组成逻辑卷安装系统后,再次安装不能只选其中一块磁盘](#多块磁盘组成逻辑卷安装系统后再次安装不能只选其中一块磁盘) - - [x86物理机UEFI模式由于security boot安全选项问题无法安装](#x86物理机uefi模式由于security-boot安全选项问题无法安装) - + - [多块磁盘组成逻辑卷安装系统后,再次安装不能只选其中一块磁盘](#多块磁盘组成逻辑卷安装系统后,再次安装不能只选其中一块磁盘) + - [x86物理机UEFI模式由于security boot安全选项问题无法安装](#x86物理机UEFI模式由于security_boot安全选项问题无法安装) + - [安装openEuler时,软件选择页面选择“服务器-性能工具”,安装后messages日志有pmie_check报错信息](#安装openEuler时,软件选择页面选择“服务器-性能工具”,安装后messages日志有pmie_check报错信息) + - [在两块已经安装了系统的磁盘上进行重复选择,并自定义分区时,安装失败](#在两块已经安装了系统的磁盘上进行重复选择,并自定义分区时,安装失败) ## 安装openEuler时选择第二盘位为安装目标,操作系统无法启动 @@ -35,30 +37,6 @@ - 当系统处于安装过程中,在选择磁盘(选择第一块或者两块都选择)后,指定引导程序安装到第一块盘sda中。 - 当系统已经安装完成,若BIOS支持选择从哪个磁盘启动,则可以通过修改BIOS中磁盘启动顺序,尝试重新启动系统。 -## 网络配置约束限制 - -NetworkManager、network两个服务均是网络服务管理包,两个服务之间存在部分功能重叠。 - -- 如果使用NetworkManager管理服务,则必须使用nmcli命令或修改配置文件来配置网络(如IP、路由等),而不能使用ip/ifconfig/route命令来配置。 - - >![](public_sys-resources/icon-note.gif) **说明:** - >在开启NetworkManager服务的场景下,使用ip/ifconfig/route等命令配置网络,则一段时间后配置会被NetworkManager覆盖,导致 ip/ifconfig/route配置不生效。 - - 查看NetworkManager 服务是否开启: - - ``` - systemctl status NetworkManager - ``` - - >![](public_sys-resources/icon-note.gif) **说明:** - >nmcli命令使用参考“nmcli \--help”或者“man nmcli”。 - -- 如果要使用ip/ifconfig/route等命令来管理网络,请先关闭NetworkManager服务,使用如下命令: - - ``` - systemctl stop NetworkManager - ``` - ## openEuler开机后进入emergency模式 @@ -66,7 +44,7 @@ NetworkManager、network两个服务均是网络服务管理包,两个服务 openEuler系统开机后进入emergency模式,如下图所示: -![](figures/zh-cn_image_0229291264.jpg) +![](./figures/zh-cn_image_0229291264.jpg) ### 原因分析 @@ -79,7 +57,7 @@ openEuler系统开机后进入emergency模式,如下图所示: 1. 用户直接输入root账号的密码,登录系统。 2. 使用fsck工具,检测并修复文件系统,然后重启。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >fsck(file system check)用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查。 用户可以通过“fsck.ext3 -h”、“fsck.ext4 -h”命令查看fsck的使用方法。 @@ -167,7 +145,7 @@ UUID=afcc811f-4b20-42fc-9d31-7307a8cfe0df /boot ext4 defaults,x-systemd.device-t 执行systemctl status kdump命令,显示状态信息如下,提示无预留内存。 -![](figures/zh-cn_image_0229291280.png) +![](./figures/zh-cn_image_0229291280.png) ### 原因分析 @@ -187,7 +165,7 @@ kdump服务需要系统预留一段内存用于运行kdump内核,而当前系 若回显如下,即kdump的状态为active,说明kdump已使能,操作结束。 - ![](figures/zh-cn_image_0229291272.png) + ![](./figures/zh-cn_image_0229291272.png) ### 参数说明 @@ -254,7 +232,7 @@ kdump内核预留内存参数说明如下: 在安装系统时,如果之前的系统选择多块磁盘组成逻辑卷进行安装,再次安装时,如果只选择了其中的一块或几块磁盘,没有全部选择,在保存配置时提示配置错误,如[图1](#fig115949762617)所示。 **图 1** 配置错误提示 -![](figures/配置错误提示.png "配置错误提示") +![](./figures/Configuration_error_prompt.png) ### 原因分析 @@ -270,7 +248,7 @@ kdump内核预留内存参数说明如下: vgs ``` - ![](figures/zh-cn_image_0231657950.png) + ![](./figures/zh-cn_image_0231657950.png) 2. 执行如下命令,删除卷组。 @@ -284,7 +262,7 @@ kdump内核预留内存参数说明如下: systemctl restart anaconda ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >图形模式下也可以按“Ctrl+Alt+F6”回到图形界面,点击[图1](#fig115949762617)右下角的“Refresh”刷新存储配置生效。 @@ -295,7 +273,7 @@ kdump内核预留内存参数说明如下: x86物理机安装系统时,由于设置了BIOS选项security boot 为enable(默认是disable),导致系统一直停留在“No bootable device”提示界面,无法继续安装,如[图2](#fig115949762617)所示。 **图 2** “No bootable device”提示界面 -![](figures/No-bootable-device-提示界面.png "No-bootable-device-提示界面") +![](./figures/No-bootable-device.png) ### 原因分析 @@ -307,16 +285,56 @@ x86物理机安装系统时,由于设置了BIOS选项security boot 为enable 1. 系统启动时,按“F11”,输入密码“Admin@9000”进入BIOS。 - ![](figures/BIOS.png) + ![](./figures/BIOS.png) 2. 选择进入Administer Secure Boot。 - ![](figures/security.png) + ![](./figures/security.png) 3. 设置Enforce Secure Boot为Disabled。 - ![](figures/选择.png) + ![](./figures/select.png) - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >设置security boot为disable之后,保存退出,重新安装即可。 +## 安装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 + ``` + /usr/libexec/pcp/bin/selinux-setup /var/lib/pcp/selinux install "pcpupstream" + ``` + +2. 重新安装pcp-selinux + ``` + sudo dnf reinstall pcp-selinux + ``` + +## 在两块已经安装了系统的磁盘上进行重复选择,并自定义分区时,安装失败 + +### 问题现象 +用户在安装操作系统过程中,存在两块都已经安装过的磁盘,此时如果先选择一块盘,进行自定义分区,然后点击取消按钮,再选择第二块盘,并进行自定义分区时,会出现安装失败。 + +![](./figures/cancle_disk.png) +![](./figures/custom_paratition.png) + +### 原因分析 +用户存在两次选择磁盘的操作,当前点击取消后,再选择第二块磁盘,磁盘信息不正确,导致安装失败。 + +### 解决方法 +直接选择目标磁盘进行自定义分区,请勿频繁取消操作,如果一定要进行取消重选建议重新安装。 + +### issue访问链接 +https://gitee.com/src-openeuler/anaconda/issues/I29P84?from=project-issue \ No newline at end of file diff --git a/docs/zh/docs/Installation/figures/Advanced_User_Configuration.png b/docs/zh/docs/Installation/figures/Advanced_User_Configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..55eac545cd29e018a2236daed071f5b973c8746d Binary files /dev/null and b/docs/zh/docs/Installation/figures/Advanced_User_Configuration.png differ diff --git "a/content/zh/docs/Installation/figures/\350\207\252\345\212\250\345\214\226\345\256\211\350\243\205\345\256\214\346\210\220.png" b/docs/zh/docs/Installation/figures/Automatic_installation_complete.png similarity index 100% rename from "content/zh/docs/Installation/figures/\350\207\252\345\212\250\345\214\226\345\256\211\350\243\205\345\256\214\346\210\220.png" rename to docs/zh/docs/Installation/figures/Automatic_installation_complete.png diff --git a/content/zh/docs/Installation/figures/BIOS.png b/docs/zh/docs/Installation/figures/BIOS.png similarity index 100% rename from content/zh/docs/Installation/figures/BIOS.png rename to docs/zh/docs/Installation/figures/BIOS.png diff --git "a/content/zh/docs/Installation/figures/\345\205\211\351\251\261\345\233\276\346\240\207.png" b/docs/zh/docs/Installation/figures/CD-ROM_drive_icon.png similarity index 100% rename from "content/zh/docs/Installation/figures/\345\205\211\351\251\261\345\233\276\346\240\207.png" rename to docs/zh/docs/Installation/figures/CD-ROM_drive_icon.png diff --git a/docs/zh/docs/Installation/figures/Configuration_error_prompt.png b/docs/zh/docs/Installation/figures/Configuration_error_prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..c5802a2b7a750eed8429ec06c7e4919a3d161a9e Binary files /dev/null and b/docs/zh/docs/Installation/figures/Configuration_error_prompt.png differ diff --git "a/content/zh/docs/Installation/figures/\351\225\234\345\203\217\345\257\271\350\257\235\346\241\206.png" b/docs/zh/docs/Installation/figures/Image_dialog_box.png similarity index 100% rename from "content/zh/docs/Installation/figures/\351\225\234\345\203\217\345\257\271\350\257\235\346\241\206.png" rename to docs/zh/docs/Installation/figures/Image_dialog_box.png diff --git a/docs/zh/docs/Installation/figures/Installation_Overview.png b/docs/zh/docs/Installation/figures/Installation_Overview.png new file mode 100644 index 0000000000000000000000000000000000000000..168ff2b75588a0626bd42a7ec602471293b53c77 Binary files /dev/null and b/docs/zh/docs/Installation/figures/Installation_Overview.png differ diff --git a/docs/zh/docs/Installation/figures/Installation_Procedure.png b/docs/zh/docs/Installation/figures/Installation_Procedure.png new file mode 100644 index 0000000000000000000000000000000000000000..1a6d0310589847cc9aea9b2b6cdcc173b288aeb7 Binary files /dev/null and b/docs/zh/docs/Installation/figures/Installation_Procedure.png differ diff --git a/docs/zh/docs/Installation/figures/Installation_source.png b/docs/zh/docs/Installation/figures/Installation_source.png new file mode 100644 index 0000000000000000000000000000000000000000..31e0917a48d73ec79156e0b201dbac03d4483a71 Binary files /dev/null and b/docs/zh/docs/Installation/figures/Installation_source.png differ diff --git a/docs/zh/docs/Installation/figures/Installation_wizard.png b/docs/zh/docs/Installation/figures/Installation_wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..c02414caf3f378b7b1774562c46fbfea543a4697 Binary files /dev/null and b/docs/zh/docs/Installation/figures/Installation_wizard.png differ diff --git a/docs/zh/docs/Installation/figures/Keyboard_layout.png b/docs/zh/docs/Installation/figures/Keyboard_layout.png new file mode 100644 index 0000000000000000000000000000000000000000..e98daa33a4dbe92f10ac61aab28b559497c0f3a7 Binary files /dev/null and b/docs/zh/docs/Installation/figures/Keyboard_layout.png differ diff --git a/docs/zh/docs/Installation/figures/NetworkandHostName.png b/docs/zh/docs/Installation/figures/NetworkandHostName.png new file mode 100644 index 0000000000000000000000000000000000000000..ef6f898b841eabaf5cb4fa9920a33ba2254de8c3 Binary files /dev/null and b/docs/zh/docs/Installation/figures/NetworkandHostName.png differ diff --git "a/content/zh/docs/Installation/figures/No-bootable-device-\346\217\220\347\244\272\347\225\214\351\235\242.png" b/docs/zh/docs/Installation/figures/No-bootable-device.png similarity index 100% rename from "content/zh/docs/Installation/figures/No-bootable-device-\346\217\220\347\244\272\347\225\214\351\235\242.png" rename to docs/zh/docs/Installation/figures/No-bootable-device.png diff --git "a/content/zh/docs/Installation/figures/\345\210\206\345\214\272\346\211\251\345\256\271.png" b/docs/zh/docs/Installation/figures/Partition_expansion.png similarity index 100% rename from "content/zh/docs/Installation/figures/\345\210\206\345\214\272\346\211\251\345\256\271.png" rename to docs/zh/docs/Installation/figures/Partition_expansion.png diff --git a/docs/zh/docs/Installation/figures/Target_installation_position.png b/docs/zh/docs/Installation/figures/Target_installation_position.png new file mode 100644 index 0000000000000000000000000000000000000000..c499b315e380757e718dd73b399eac2836fc79d6 Binary files /dev/null and b/docs/zh/docs/Installation/figures/Target_installation_position.png differ diff --git a/docs/zh/docs/Installation/figures/cancle_disk.png b/docs/zh/docs/Installation/figures/cancle_disk.png new file mode 100644 index 0000000000000000000000000000000000000000..35360ed3b2c43f4d8e94a86acc9dbb109a2df99a Binary files /dev/null and b/docs/zh/docs/Installation/figures/cancle_disk.png differ diff --git a/docs/zh/docs/Installation/figures/choosesoftware.png b/docs/zh/docs/Installation/figures/choosesoftware.png new file mode 100644 index 0000000000000000000000000000000000000000..06240e96112779ce064d097cabb17afe66c987ed Binary files /dev/null and b/docs/zh/docs/Installation/figures/choosesoftware.png differ diff --git a/docs/zh/docs/Installation/figures/confignetwork1.png b/docs/zh/docs/Installation/figures/confignetwork1.png new file mode 100644 index 0000000000000000000000000000000000000000..5f5b583a17a4aaea785425a0d7271fea0e7f82ef Binary files /dev/null and b/docs/zh/docs/Installation/figures/confignetwork1.png differ diff --git a/docs/zh/docs/Installation/figures/createuser.png b/docs/zh/docs/Installation/figures/createuser.png new file mode 100644 index 0000000000000000000000000000000000000000..c993287ec59ae383db6a11d3084f2d7be45962a6 Binary files /dev/null and b/docs/zh/docs/Installation/figures/createuser.png differ diff --git a/docs/zh/docs/Installation/figures/custom_paratition.png b/docs/zh/docs/Installation/figures/custom_paratition.png new file mode 100644 index 0000000000000000000000000000000000000000..06407fc67da8646b1c2cebfd34b8eda8993f11ef Binary files /dev/null and b/docs/zh/docs/Installation/figures/custom_paratition.png differ diff --git a/docs/zh/docs/Installation/figures/dateandtime.png b/docs/zh/docs/Installation/figures/dateandtime.png new file mode 100644 index 0000000000000000000000000000000000000000..ff3b65c65de292335d8c847f4558f7c863f87fca Binary files /dev/null and b/docs/zh/docs/Installation/figures/dateandtime.png differ diff --git a/docs/zh/docs/Installation/figures/filesystem_setting.png b/docs/zh/docs/Installation/figures/filesystem_setting.png new file mode 100644 index 0000000000000000000000000000000000000000..c34710221d91bd693b501473cd2b3bcb8951cc10 Binary files /dev/null and b/docs/zh/docs/Installation/figures/filesystem_setting.png differ diff --git a/docs/zh/docs/Installation/figures/installsource.png b/docs/zh/docs/Installation/figures/installsource.png new file mode 100644 index 0000000000000000000000000000000000000000..aafc5c16802df5294c8db17ca051bed645911ce7 Binary files /dev/null and b/docs/zh/docs/Installation/figures/installsource.png differ diff --git a/docs/zh/docs/Installation/figures/languagesupport.png b/docs/zh/docs/Installation/figures/languagesupport.png new file mode 100644 index 0000000000000000000000000000000000000000..df234c5307936f60eeea4dc2fea87617cd9fcd1c Binary files /dev/null and b/docs/zh/docs/Installation/figures/languagesupport.png differ diff --git "a/content/zh/docs/Installation/figures/\351\207\215\345\220\257\345\233\276\346\240\207.png" b/docs/zh/docs/Installation/figures/restarticon.png similarity index 100% rename from "content/zh/docs/Installation/figures/\351\207\215\345\220\257\345\233\276\346\240\207.png" rename to docs/zh/docs/Installation/figures/restarticon.png diff --git a/docs/zh/docs/Installation/figures/root_password.png b/docs/zh/docs/Installation/figures/root_password.png new file mode 100644 index 0000000000000000000000000000000000000000..14b48a15c74ee3d74a8f7463852798afba35edaa Binary files /dev/null and b/docs/zh/docs/Installation/figures/root_password.png differ diff --git a/content/zh/docs/Installation/figures/security.png b/docs/zh/docs/Installation/figures/security.png similarity index 100% rename from content/zh/docs/Installation/figures/security.png rename to docs/zh/docs/Installation/figures/security.png diff --git "a/content/zh/docs/Installation/figures/\351\200\211\346\213\251.png" b/docs/zh/docs/Installation/figures/select.png similarity index 100% rename from "content/zh/docs/Installation/figures/\351\200\211\346\213\251.png" rename to docs/zh/docs/Installation/figures/select.png diff --git a/docs/zh/docs/Installation/figures/selectlanguage.png b/docs/zh/docs/Installation/figures/selectlanguage.png new file mode 100644 index 0000000000000000000000000000000000000000..e28e943b1d1543f75579985b263a474867c3b9e2 Binary files /dev/null and b/docs/zh/docs/Installation/figures/selectlanguage.png differ diff --git a/docs/zh/docs/Installation/figures/sourceftp.png b/docs/zh/docs/Installation/figures/sourceftp.png new file mode 100644 index 0000000000000000000000000000000000000000..430cc49fb1f5ffc2c8e37bc17de1225a91111ba3 Binary files /dev/null and b/docs/zh/docs/Installation/figures/sourceftp.png differ diff --git a/docs/zh/docs/Installation/figures/sourcenfs.png b/docs/zh/docs/Installation/figures/sourcenfs.png new file mode 100644 index 0000000000000000000000000000000000000000..d2aec56f51874bef2b3b6aaf9b1159b09ebb7012 Binary files /dev/null and b/docs/zh/docs/Installation/figures/sourcenfs.png differ diff --git a/docs/zh/docs/Installation/figures/startparam.png b/docs/zh/docs/Installation/figures/startparam.png new file mode 100644 index 0000000000000000000000000000000000000000..b4bc3c8cdbb7e08b2c24a432c47286ffc8bd8b03 Binary files /dev/null and b/docs/zh/docs/Installation/figures/startparam.png differ diff --git a/content/zh/docs/Installation/figures/zh-cn_image_0229291229.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291229.png similarity index 100% rename from content/zh/docs/Installation/figures/zh-cn_image_0229291229.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291229.png diff --git a/content/zh/docs/Installation/figures/zh-cn_image_0229291236.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291236.png similarity index 100% rename from content/zh/docs/Installation/figures/zh-cn_image_0229291236.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291236.png diff --git a/content/zh/docs/Installation/figures/zh-cn_image_0229291243.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291243.png similarity index 100% rename from content/zh/docs/Installation/figures/zh-cn_image_0229291243.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291243.png diff --git a/content/zh/docs/Installation/figures/zh-cn_image_0229291247.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291247.png similarity index 100% rename from content/zh/docs/Installation/figures/zh-cn_image_0229291247.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291247.png diff --git a/content/zh/docs/Installation/figures/zh-cn_image_0229291264.jpg b/docs/zh/docs/Installation/figures/zh-cn_image_0229291264.jpg similarity index 100% rename from content/zh/docs/Installation/figures/zh-cn_image_0229291264.jpg rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291264.jpg diff --git a/content/zh/docs/Installation/figures/zh-cn_image_0229291270.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291270.png similarity index 100% rename from content/zh/docs/Installation/figures/zh-cn_image_0229291270.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291270.png diff --git a/content/zh/docs/Installation/figures/zh-cn_image_0229291272.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291272.png similarity index 100% rename from content/zh/docs/Installation/figures/zh-cn_image_0229291272.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291272.png diff --git a/content/zh/docs/Installation/figures/zh-cn_image_0229291280.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291280.png similarity index 100% rename from content/zh/docs/Installation/figures/zh-cn_image_0229291280.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291280.png diff --git a/content/zh/docs/Installation/figures/zh-cn_image_0229291286.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291286.png similarity index 100% rename from content/zh/docs/Installation/figures/zh-cn_image_0229291286.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291286.png diff --git a/content/zh/docs/Installation/figures/zh-cn_image_0229420473.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229420473.png similarity index 100% rename from content/zh/docs/Installation/figures/zh-cn_image_0229420473.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229420473.png diff --git a/content/zh/docs/Installation/figures/zh-cn_image_0231657950.png b/docs/zh/docs/Installation/figures/zh-cn_image_0231657950.png similarity index 100% rename from content/zh/docs/Installation/figures/zh-cn_image_0231657950.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0231657950.png diff --git a/content/zh/docs/Installation/installation.md b/docs/zh/docs/Installation/installation.md similarity index 100% rename from content/zh/docs/Installation/installation.md rename to docs/zh/docs/Installation/installation.md diff --git a/content/zh/docs/Releasenotes/public_sys-resources/icon-caution.gif b/docs/zh/docs/Installation/public_sys-resources/icon-caution.gif similarity index 100% rename from content/zh/docs/Releasenotes/public_sys-resources/icon-caution.gif rename to docs/zh/docs/Installation/public_sys-resources/icon-caution.gif diff --git a/content/zh/docs/Releasenotes/public_sys-resources/icon-danger.gif b/docs/zh/docs/Installation/public_sys-resources/icon-danger.gif similarity index 100% rename from content/zh/docs/Releasenotes/public_sys-resources/icon-danger.gif rename to docs/zh/docs/Installation/public_sys-resources/icon-danger.gif diff --git a/content/zh/docs/Virtualization/public_sys-resources/icon-note.gif b/docs/zh/docs/Installation/public_sys-resources/icon-note.gif similarity index 100% rename from content/zh/docs/Virtualization/public_sys-resources/icon-note.gif rename to docs/zh/docs/Installation/public_sys-resources/icon-note.gif diff --git a/content/zh/docs/Virtualization/public_sys-resources/icon-notice.gif b/docs/zh/docs/Installation/public_sys-resources/icon-notice.gif similarity index 100% rename from content/zh/docs/Virtualization/public_sys-resources/icon-notice.gif rename to docs/zh/docs/Installation/public_sys-resources/icon-notice.gif diff --git a/content/zh/docs/Releasenotes/public_sys-resources/icon-tip.gif b/docs/zh/docs/Installation/public_sys-resources/icon-tip.gif similarity index 100% rename from content/zh/docs/Releasenotes/public_sys-resources/icon-tip.gif rename to docs/zh/docs/Installation/public_sys-resources/icon-tip.gif diff --git a/content/zh/docs/Releasenotes/public_sys-resources/icon-warning.gif b/docs/zh/docs/Installation/public_sys-resources/icon-warning.gif similarity index 100% rename from content/zh/docs/Releasenotes/public_sys-resources/icon-warning.gif rename to docs/zh/docs/Installation/public_sys-resources/icon-warning.gif diff --git "a/content/zh/docs/Installation/\344\275\277\347\224\250kickstart\350\207\252\345\212\250\345\214\226\345\256\211\350\243\205.md" "b/docs/zh/docs/Installation/\344\275\277\347\224\250kickstart\350\207\252\345\212\250\345\214\226\345\256\211\350\243\205.md" similarity index 88% rename from "content/zh/docs/Installation/\344\275\277\347\224\250kickstart\350\207\252\345\212\250\345\214\226\345\256\211\350\243\205.md" rename to "docs/zh/docs/Installation/\344\275\277\347\224\250kickstart\350\207\252\345\212\250\345\214\226\345\256\211\350\243\205.md" index ccf0fcdc377b462e1f9c5428b37e703e588b3176..66eb6ad2f2c192aacc47ba6a05de0468472d2ac5 100644 --- "a/content/zh/docs/Installation/\344\275\277\347\224\250kickstart\350\207\252\345\212\250\345\214\226\345\256\211\350\243\205.md" +++ "b/docs/zh/docs/Installation/\344\275\277\347\224\250kickstart\350\207\252\345\212\250\345\214\226\345\256\211\350\243\205.md" @@ -80,7 +80,7 @@ TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议 - 物理机/虚拟机(虚拟机创建可参考对应厂商的资料)。包括使用kickstart工具进行自动化安装的计算机和被安装的计算机。 - httpd:存放kickstart文件。 -- ISO: openEuler-20.09-beta-aarch64-dvd.iso +- ISO: openEuler-20.03-LTS-SP3-aarch64-dvd.iso ### 操作步骤 @@ -88,11 +88,11 @@ TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议 **环境准备** ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >安装之前,请确保http服务器的防火墙处于关闭状态。关闭防火墙可参照如下命令: >``` >iptables -F ->``` +>``` 1. httpd的安装与服务启动。 @@ -156,17 +156,19 @@ TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议 ===================================== ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >密码密文生成方式: - >\# python3 - >Python 3.7.0 \(default, Apr 1 2019, 00:00:00\) - >\[GCC 7.3.0\] on linux + >``` + ># python3 + >Python 3.7.0 (default, Apr 1 2019, 00:00:00) + >[GCC 7.3.0] on linux >Type "help", "copyright", "credits" or "license" for more information. - >\>\>\> import crypt - >\>\>\> passwd = crypt.crypt\("myPasswd"\) - >\>\>\> print\(passwd\) + >>>> import crypt + >>>> passwd = crypt.crypt("myPasswd") + >>>> print (passwd) >$6$63c4tDmQGn5SDayV$mZoZC4pa9Jdt6/ALgaaDq6mIExiOO2EjzomB.Rf6V1BkEMJDcMddZeGdp17cMyc9l9ML9ldthytBEPVcnboR/0 - + >``` + 3. 将ISO镜像文件挂载到需要安装openEuler计算机的光驱上。 另外,也可以选择NFS等网络安装,kickstart文件中需要指定安装源位置(默认是cdrom)。 @@ -175,18 +177,18 @@ TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议 **安装系统** 1. 启动系统进入安装选择界面。 - 1. 在“[启动安装](安装指导.html#启动安装)”中的“安装引导界面”中选择“Install openEuler 20.09-beta”,并按下“e”键。 + 1. 在“[启动安装](./安装指导.html#启动安装)”中的“安装引导界面”中选择“Install openEuler 20.03 LTS SP3”,并按下“e”键。 2. 启动参数中追加“inst.ks=http://server ip/ks/openEuler-ks.cfg”。 - ![](figures/半自动-new.png) + ![](./figures/startparam.png) 3. 按“Ctrl+x”,开始系统的自动安装。 2. 确认系统安装完毕。 - 系统安装完毕以后会自动重启,然后再次进入到安装界面,此时关闭计算机,调整启动顺序(优先从硬盘启动)。 + 系统安装完毕以后会自动重启,如果优先从光驱启动,会再次进入到安装界面,此时关闭计算机,调整启动顺序(优先从硬盘启动)。 - ![](figures/自动化安装完成.png) + ![](./figures/Automatic_installation_complete.png) ## 全自动化安装指导 @@ -199,7 +201,7 @@ TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议 - httpd:存放kickstart文件。 - tftp:提供vmlinuz和initrd文件。 - dhcpd/pxe:提供DHCP服务。 -- ISO:openEuler-20.09-beta-aarch64-dvd.iso。 +- ISO:openEuler-20.03-LTS-SP3-aarch64-dvd.iso。 ### 操作步骤 @@ -207,11 +209,11 @@ TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议 **环境准备** ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >安装之前,请确保http服务器的防火墙处于关闭状态。关闭防火墙可参照如下命令: >``` >iptables -F ->``` +>``` 1. httpd的安装与服务启动。 @@ -249,7 +251,7 @@ TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议 3. 安装源的制作。 ``` - # mount openEuler-20.09-beta-aarch64-dvd.iso /mnt + # mount openEuler-20.03-LTS-SP3-aarch64-dvd.iso /mnt # cp -r /mnt/* /var/www/html/openEuler/ ``` @@ -271,7 +273,7 @@ TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议 # System language lang zh_CN.UTF-8 #Use http installation source - url --url=http://192.168.122.1/openEuler/ + url --url=http://192.168.122.1/openEuler/ %post #enable kdump sed -i "s/ ro / ro crashkernel=1024M,high /" /boot/efi/EFI/openEuler/grub.cfg @@ -279,7 +281,7 @@ TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议 ... ``` -5. 修改pxe配置文件grub.cfg, 可参考如下内容。 +5. 修改pxe配置文件grub.cfg, 可参考如下内容(注意:openEuler当前不支持bls格式的cfg文件)。 ``` # cp -r /mnt/images/pxeboot/* /var/lib/tftpboot/ @@ -314,8 +316,8 @@ TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议 ### BEGIN /etc/grub.d/10_linux ### - menuentry 'Install openEuler 20.09-beta' --class red --class gnu-linux --class gnu --class os { - set root=(tftp,192.168.122.1) + menuentry 'Install openEuler 20.03 LTS SP3' --class red --class gnu-linux --class gnu --class os { + set root=(tftp,192.168.1.1) linux /vmlinuz ro inst.geoloc=0 console=ttyAMA0 console=tty0 rd.iscsi.waitnet=0 inst.ks=http://192.168.122.1/ks/openEuler-ks.cfg initrd /initrd.img } @@ -351,14 +353,14 @@ TFTP(Trivial File Transfer Protocol,简单文件传输协议),该协议 1. 在“Start boot option”界面按下“F2”选择从网络pxe启动,开始自动化安装。 - ![](figures/zh-cn_image_0229291270.png) + ![](./figures/zh-cn_image_0229291270.png) - ![](figures/zh-cn_image_0229291286.png) + ![](./figures/zh-cn_image_0229291286.png) - ![](figures/zh-cn_image_0229291247.png) + ![](./figures/zh-cn_image_0229291247.png) 2. 进入系统全自动化安装界面。 3. 确认系统安装完毕。 - ![](figures/自动化安装完成.png) + ![](./figures/Automatic_installation_complete.png) diff --git "a/content/zh/docs/Installation/\345\256\211\350\243\205\345\207\206\345\244\207-1.md" "b/docs/zh/docs/Installation/\345\256\211\350\243\205\345\207\206\345\244\207-1.md" similarity index 87% rename from "content/zh/docs/Installation/\345\256\211\350\243\205\345\207\206\345\244\207-1.md" rename to "docs/zh/docs/Installation/\345\256\211\350\243\205\345\207\206\345\244\207-1.md" index 41f27886ddf0917cd3a694d068872ef1f493dac7..fb57c27050cc2dc75850ad585a4367b49c605707 100644 --- "a/content/zh/docs/Installation/\345\256\211\350\243\205\345\207\206\345\244\207-1.md" +++ "b/docs/zh/docs/Installation/\345\256\211\350\243\205\345\207\206\345\244\207-1.md" @@ -19,16 +19,13 @@ 在安装开始前,您需要获取 openEuler 发布的树莓派镜像及其校验文件。 -1. 登录[openEuler社区](https://openeuler.org)网站。 -2. 单击“下载”。 -3. 单击“获取ISO:”后面的“Link”,显示版本列表。 -4. 单击“openEuler-20.09”,进入 openEuler 20.09 版本下载列表。 -5. 单击“RaspberryPi”,进入树莓派镜像的下载列表。 +1. 登录[openEuler社区](https://openeuler.org/zh/download/)网站。 +2. 单击卡片 openEuler 20.03 LTS SP3 上的“下载”按钮。 +3. 单击“raspi_img”,进入树莓派镜像的下载列表。 - aarch64:AArch64 架构的镜像。 - -6. 单击“aarch64”,进入树莓派 AArch64 架构镜像的下载列表。 -7. 单击“openEuler-20.09-RaspberryPi.aarch64.img.xz”,将 openEuler 发布的树莓派镜像下载到本地。 -8. 单击“openEuler-20.09-RaspberryPi.aarch64.img.xz.sha256sum”,将 openEuler 发布的树莓派镜像的校验文件下载到本地。 +4. 单击“aarch64”,进入树莓派 AArch64 架构镜像的下载列表。 +5. 单击“openEuler-20.03-LTS-SP3-raspi-aarch64.img.xz”,将 openEuler 发布的树莓派镜像下载到本地。 +6. 单击“openEuler-20.03-LTS-SP3-raspi-aarch64.img.xz.sha256sum”,将 openEuler 发布的树莓派镜像的校验文件下载到本地。 ## 镜像完整性校验 @@ -42,9 +39,9 @@ 在校验镜像文件的完整性之前,需要准备如下文件: -镜像文件:openEuler-20.09-RaspberryPi.aarch64.img.xz +镜像文件:openEuler-20.03-LTS-SP3-raspi-aarch64.img.xz -校验文件:openEuler-20.09-RaspberryPi.aarch64.img.xz.sha256sum +校验文件:openEuler-20.03-LTS-SP3-raspi-aarch64.img.xz.sha256sum ### 操作指导 @@ -53,13 +50,13 @@ 1. 获取校验文件中的校验值。执行命令如下: ``` - $ cat openEuler-20.09-RaspberryPi.aarch64.img.xz.sha256sum + $ cat openEuler-20.03-LTS-SP3-raspi-aarch64.img.xz.sha256sum ``` 2. 计算文件的 sha256 校验值。执行命令如下: ``` - $ sha256sum openEuler-20.09-RaspberryPi.aarch64.img.xz + $ sha256sum openEuler-20.03-LTS-SP3-raspi-aarch64.img.xz ``` 命令执行完成后,输出校验值。 diff --git "a/docs/zh/docs/Installation/\345\256\211\350\243\205\345\207\206\345\244\207.md" "b/docs/zh/docs/Installation/\345\256\211\350\243\205\345\207\206\345\244\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..92de16ddb4f4dc3fe33165d3acdde32f931a3bdc --- /dev/null +++ "b/docs/zh/docs/Installation/\345\256\211\350\243\205\345\207\206\345\244\207.md" @@ -0,0 +1,144 @@ +# 安装准备 + +介绍安装前需要考虑软硬件兼容性状况,以及相关的配置和准备工作。 + + + +- [安装准备](#安装准备) + - [获取安装源](#获取安装源) + - [发布包完整性校验](#发布包完整性校验) + - [简介](#简介) + - [前提条件](#前提条件) + - [操作指导](#操作指导) + - [物理机的安装要求](#物理机的安装要求) + - [硬件兼容支持](#硬件兼容支持) + - [最小硬件要求](#最小硬件要求) + - [虚拟机的安装要求](#虚拟机的安装要求) + - [虚拟化平台兼容性](#虚拟化平台兼容性) + - [最小虚拟化空间要求](#最小虚拟化空间要求) + + + +## 获取安装源 + +在安装开始前,您需要获取openEuler的发布包和校验文件。 + +请按以下步骤获取openEuler的发布包和校验文件: + +1. 登录[openEuler社区](https://openeuler.org/zh/)网站。 +2. 单击“下载”进入页签,进入版本下载页面。 +3. 单击卡片 openEuler 20.03 LTS SP3 上的“获取ISO”,显示ISO下载列表。 + - aarch64:AArch64架构的ISO。 + - x86\_64:x86\_64架构的ISO。 + - source:openEuler源码ISO。 +4. 根据实际待安装环境的架构选择需要下载的 openEuler 的发布包和校验文件。 + - 若为AArch64架构。 + 1. 单击“aarch64”。 + 2. 若选择本地安装,分别将发布包 “openEuler-20.03-LTS-SP3-aarch64-dvd.iso”和校验文件“openEuler-20.03-LTS-SP3-aarch64-dvd.iso.sha256sum”下载到本地。 + 3. 若选择网络安装,分别将发布包 “openEuler-20.03-LTS-SP3-netinst-aarch64-dvd.iso”和校验文件“openEuler-20.03-LTS-SP3-netinst-aarch64-dvd.iso.sha256sum”下载到本地。 + + - 若为x86\_64架构。 + 1. 单击“x86\_64”。 + 2. 若选择本地安装,分别将发布包 “openEuler-20.03-LTS-SP3-x86\_64-dvd.iso”和校验文件“openEuler-20.03-LTS-SP3-x86\_64-dvd.iso.sha256sum”下载到本地。 + 3. 若选择网络安装,分别将发布包 “openEuler-20.03-LTS-SP3-netinst-x86\_64-dvd.iso ”和校验文件“openEuler-20.03-LTS-SP3-netinst-x86\_64-dvd.iso.sha256sum”下载到本地。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> - 网络安装方式的 ISO 发布包较小,在有网络的安装环境可以选择网络安装方式。 +> - AArch64架构的发布包支持UEFI模式,x86\_64架构的发布包支持UEFI模式和Legacy模式。 + +## 发布包完整性校验 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>本章节以AArch64架构的发布包完整性校验为例,x86\_64架构的发布包完整性校验的操作方法相同。 + +### 简介 + +为了防止软件包在传输过程中由于网络原因或者存储设备原因出现下载不完整的问题,在获取到软件包后,需要对软件包的完整性进行校验,通过了校验的软件包才能部署。 + +这里通过对比校验文件中记录的校验值和手动方式计算的iso文件校验值,判断软件包是否完成。若两个值相同,说明iso文件完整,否则,iso完整性被破坏,请重新获取iso发布包。 + +### 前提条件 + +在校验发布包完整性之前,需要准备如下文件: + +iso文件:openEuler-20.03-LTS-SP3-aarch64-dvd.iso + +校验文件:openEuler-20.03-LTS-SP3-aarch64-dvd.iso.sha256sum + +### 操作指导 + +文件完整性校验操作步骤如下: + +1. 获取校验文件中的校验值。执行命令如下: + + ``` + $ cat openEuler-20.03-LTS-SP3-aarch64-dvd.iso.sha256sum + ``` + +2. 计算文件的sha256校验值。执行命令如下: + + ``` + $ sha256sum openEuler-20.03-LTS-SP3-aarch64-dvd.iso + ``` + + 命令执行完成后,输出校验值。 + +3. 对比步骤1和步骤2计算的校验值是否一致。 + + 如果校验值一致说明iso文件完整性没有破坏,如果校验值不一致则可以确认文件完整性已被破坏,需要重新获取。 + +## 物理机的安装要求 + +若需要在物理机环境上安装openEuler操作系统,则物理机需要满足如下的硬件兼容性和最小硬件要求。 + +### 硬件兼容支持 + +openEuler安装时,应注意硬件兼容性方面的问题,当前已支持的服务器类型如[表1](#table14948632047)所示。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- TaiShan 200服务器基于华为鲲鹏920处理器。 +>- 当前仅支持华为TaiShan服务器和FusionServer Pro 机架服务器,后续将逐步增加对其他厂商服务器的支持。 + +**表 1** 支持的服务器类型 +| 服务器形态 | 服务器名称 | 服务器型号 | +| :---- | :---- | :---- | +| 机架服务器 | TaiShan 200 | 2280均衡型 | +| 机架服务器 | FusionServer Pro 机架服务器 | FusionServer Pro 2288H V5
说明:
服务器要求配置Avago 3508 RAID控制卡和启用LOM-X722网卡| + +### 最小硬件要求 + +openEuler所需的最小硬件要求如[表2](#tff48b99c9bf24b84bb602c53229e2541)所示。 + +**表 2** 最小硬件要求 + +| 部件名称 | 最小硬件要求 | +| :---- | :---- | +| 架构 | AArch64或x86_64 | +| CPU | 2个CPU | +| 内存 | 不小于4GB(为了获得更好的应用体验,建议不小于8GB) | +| 硬盘 | 不小于32GB(为了获得更好的应用体验,建议不小于120GB) | + +## 虚拟机的安装要求 + +若需要在虚拟机环境上安装openEuler操作系统,则虚拟机需要满足如下的虚拟化平台兼容性和最小虚拟化要求。 + +### 虚拟化平台兼容性 + +openEuler安装时,应注意虚拟化平台兼容性的问题,当前已支持的虚拟化平台为: + +- openEuler自有的虚拟化组件(HostOS为openEuler,虚拟化组件为发布包中的qemu、KVM)创建的虚拟化平台。 +- 华为公有云的x86虚拟化平台。 + +### 最小虚拟化空间要求 + +openEuler所需的最小虚拟化空间要求如[表3](#tff48b99c9bf24b84bb602c53229e2541)所示。 + +**表 3** 最小虚拟化空间要求 + +| 部件名称 | 最小虚拟化空间要求 | +| :---- | :---- | +| 架构 | AArch64或x86_64 | +| CPU | 2个CPU | +| 内存 | 不小于4GB(为了获得更好的应用体验,建议不小于8GB) | +| 硬盘 | 不小于32GB(为了获得更好的应用体验,建议不小于120GB) | diff --git "a/docs/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\234\215\345\212\241\345\231\250.md" "b/docs/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\234\215\345\212\241\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..256a1f0899d9030ac421b6cc4dbc00d88f7821d3 --- /dev/null +++ "b/docs/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\234\215\345\212\241\345\231\250.md" @@ -0,0 +1,3 @@ +# 安装在服务器 + +本文是介绍 openEuler 操作系统安装在服务器的方法,使用本手册的用户需要具备基础的 Linux 系统管理知识。 \ No newline at end of file diff --git "a/docs/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\240\221\350\216\223\346\264\276.md" "b/docs/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\240\221\350\216\223\346\264\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..72f5e0c176383b7ccedbf937240d6263b082355e --- /dev/null +++ "b/docs/zh/docs/Installation/\345\256\211\350\243\205\345\234\250\346\240\221\350\216\223\346\264\276.md" @@ -0,0 +1,3 @@ +# 安装在树莓派 + +本文是介绍 openEuler 操作系统安装在树莓派的方法,使用本手册的用户需要具备基础的 Linux 系统管理知识。 \ No newline at end of file diff --git "a/content/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274-1.md" "b/docs/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274-1.md" similarity index 89% rename from "content/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274-1.md" rename to "docs/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274-1.md" index 73ea046de2099e3662fcb3f365b7df861e9f2929..8755c52a55b9aa03950adfd608a0d0938ccb2116 100644 --- "a/content/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274-1.md" +++ "b/docs/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274-1.md" @@ -1,6 +1,6 @@ # 安装指导 -本章介绍将“[树莓派镜像刷写入 SD 卡](安装方式介绍-1.html)”后,启用树莓派的主要过程。 +本章介绍将“[树莓派镜像刷写入 SD 卡](./安装方式介绍-1.html)”后,启用树莓派的主要过程。 - [安装指导](#安装指导) @@ -24,15 +24,11 @@ 1. 本地登录 - 树莓派连接显示器(树莓派视频输出接口为 Micro HDMI)、键盘、鼠标后,启动树莓派,可以看到树莓派启动日志输出到显示器上。待树莓派启动成功,输入用户名(root)和密码(openEuler12#$)登录。 + 树莓派连接显示器(树莓派视频输出接口为 Micro HDMI)、键盘、鼠标后,启动树莓派,可以看到树莓派启动日志输出到显示器上。待树莓派启动成功,输入用户名(root)和密码(openeuler)登录。 2. ssh 远程登录 - 树莓派默认采用 DHCP 的方式自动获取 IP。如果树莓派连接已知路由器,可登录路由器查看,新增的 IP 即为树莓派 IP。 - - **图 1** 获取 IP - ![](figures/获取IP.png "获取 IP") - - 从上图看到,树莓派对应 IP 为:192.168.31.109,使用命令 `ssh root@192.168.1.109` 后输入密码 `openEuler12#$`,即可远程登录树莓派。 + + 树莓派默认采用 DHCP 的方式自动获取 IP。如果树莓派连接已知路由器,可登录路由器查看,新增的 IP 即为树莓派 IP。例如,树莓派对应 IP 为:192.168.31.109,使用命令 `ssh root@192.168.31.109` 后输入密码 `openeuler`,即可远程登录树莓派。 ## 配置系统 @@ -67,7 +63,7 @@ 这里我们需要将根目录分区 `/dev/mmcblk0p3` 进行扩容。 -2. 在 root 权限下执行 `fdisk /dev/mmcblk0` 命令进入到交互式命令行界面,按照以下步骤扩展分区,如[图3](#zh-cn_topic_0151920806_f6ff7658b349942ea87f4521c0256c315)所示。 +2. 在 root 权限下执行 `fdisk /dev/mmcblk0` 命令进入到交互式命令行界面,按照以下步骤扩展分区,如[图 1](#zh-cn_topic_0151920806_f6ff7658b349942ea87f4521c0256c315)所示。 1. 输入 `p`,查看分区信息。 @@ -80,15 +76,15 @@ 6. 输入 `3` 或直接按 `Enter`,创建序号为 `3` 的分区,即 `/dev/mmcblk0p3` 分区。 7. 输入新分区的起始扇区号,即第 `1` 步中记录的起始扇区号,示例中为 `1593344`。 - >![](public_sys-resources/icon-notice.gif) **须知:** + >![](./public_sys-resources/icon-notice.gif) **须知:** >请勿直接按“Enter”或使用默认参数。 8. 按 `Enter`,使用默认的最后一个扇区号作为新分区的终止扇区号。 9. 输入 `N`,不修改扇区标记。 10. 输入 `w`,保存分区设置并退出交互式命令行界面。 - **图 3** 分区扩容 - ![](figures/分区扩容.png "分区扩容") + **图 1** 分区扩容 + ![](./figures/Partition_expansion.png) 3. 在 root 权限下执行 `fdisk -l` 命令查看磁盘分区信息,以确保磁盘分区正确。命令和回显如下: @@ -110,7 +106,7 @@ 4. 在 root 权限下执行 `resize2fs /dev/mmcblk0p3`,增大未加载的文件系统大小。 5. 执行 `df -lh` 命令查看磁盘空间信息,以确保根目录分区已扩展。 - >![](public_sys-resources/icon-notice.gif) **须知:** + >![](./public_sys-resources/icon-notice.gif) **须知:** >如果根目录分区未扩展,可执行 `reboot` 命令重启树莓派之后再在 root 权限下执行 `resize2fs /dev/mmcblk0p3`。 ### 连接 WIFI diff --git "a/content/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274.md" "b/docs/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274.md" similarity index 65% rename from "content/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274.md" rename to "docs/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274.md" index e120f9e6650022b6922f41cadd53cae795781790..b1f97be4ad0fdfbfb3ac0c5f3d6401dba0cdc92b 100644 --- "a/content/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274.md" +++ "b/docs/zh/docs/Installation/\345\256\211\350\243\205\346\214\207\345\257\274.md" @@ -1,324 +1,337 @@ -# 安装指导 - -本章以光盘安装为例介绍安装openEuler,其他安装方式除在启动安装时的引导方式不同外,待启动安装后则安装流程相同,在此不再说明。 - - -- [安装指导](#安装指导) - - [启动安装](#启动安装) - - [使用光盘引导安装](#使用光盘引导安装) - - [安装引导界面](#安装引导界面) - - [图形化模式安装](#图形化模式安装) - - [设置安装程序语言](#设置安装程序语言) - - [进入安装界面](#进入安装界面) - - [设置键盘](#设置键盘) - - [设置系统语言](#设置系统语言) - - [设置时间和日期](#设置时间和日期) - - [设置安装源](#设置安装源) - - [选择安装软件](#选择安装软件) - - [设置安装目的地](#设置安装目的地) - - [存储配置](#存储配置) - - [设置网络和主机名](#设置网络和主机名) - - [设置根密码](#设置根密码) - - [密码复杂度](#密码复杂度) - - [创建用户](#创建用户) - - [开始安装](#开始安装) - - [安装过程](#安装过程) - - [安装完成](#安装完成) - - - -## 启动安装 - -### 使用光盘引导安装 - -在服务器的光驱中加载openEuler安装镜像,重启服务器,具体步骤如下。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->在安装开始前,需要保证服务器启动选项为光驱优先。安装步骤以BMC挂载虚拟光驱进行光盘安装的操作举例。通过物理光驱安装的操作简单,启动安装后的流程相同,在此不再说明。 - -1. 在虚拟界面工具栏中,单击虚拟光驱工具如下图所示。 - - **图 1** 光驱图标 - ![](figures/光驱图标.png "光驱图标") - - 弹出镜像对话框,如下图所示。 - - **图 2** 镜像对话框 - ![](figures/镜像对话框.png "镜像对话框") - -2. 在镜像对话框中,选择“镜像文件”, 并单击“浏览”。弹出“打开”对话框。 -3. 选择镜像文件,单击“打开”。然后在镜像对话框中,单击“连接”。当“连接”显示为“断开”后,表示虚拟光驱已连接到服务器。 -4. 在工具栏中,单击重启工具重启设备,如下图所示。 - - **图 3** 重启图标 - ![](figures/重启图标.png "重启图标") - - -### 安装引导界面 - -系统使用引导介质完成引导后会显示引导菜单。该引导菜单除启动安装程序外还提供一些选项。安装系统时,默认采用“Test this media & install openEuler 20.09-beta”方式进行安装。如果要选择默认选项之外的选项,请使用键盘中的“↑”和“↓”方向键进行选择,并在选项为高亮状态时按“Enter”。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->- 如果60秒内未按任何键,系统将从默认选项“Test this media & install openEuler 20.09-beta”自动进入安装界面。 ->- 安装物理机时,如果使用键盘上下键无法选择启动选项,按“Enter”键无响应,可以单击BMC界面上的鼠标控制图标“![](figures/zh-cn_image_0229420473.png)”,设置“键鼠复位”。 - -**图 4** 安装引导界面 -![](figures/安装引导界面.png "安装引导界面") - -安装引导选项说明如下: - -- Install openEuler 20.09-beta —— 在您的服务器上使用图形用户界面模式安装。 - -- Test this media & install openEuler 20.09-beta —— 默认选项,在您的服务器上使用图形用户界面模式安装,但在启动安装程序前会进行安装介质的完整性检查。 - -- Troubleshooting —— 问题定位模式,系统无法正常安装时使用。进入问题定位模式后,有如下两个选项。 - - Install openEuler 20.09-beta in basic graphics mode —— 简单图形安装模式,该模式下在系统启动并运行之前不启动视频驱动程序。 - - Rescue the openEuler system —— 救援模式,用于修复系统。该模式下输出定向到VNC或BMC(Baseboard Management Controller)端,串口不可用。 - -在安装引导界面,按“e”进入已选选项的参数编辑界面,按“c”进入命令行模式。 - -### 图形化模式安装 - -在“安装引导界面”中选择“Test this media & install openEuler 20.09-beta”进入图形化模式安装。 - -可以通过键盘操作图形化安装程序。 - -- “Tab”、“shift Tab”:界面控件(按钮、区域框、复选框等)间的移动。 -- “↑”、“↓”方向键:列表里的移动。 -- “←”、“→”方向键:水平工具条和表条间移动。 -- “空格”、“Enter”:选择或删除高亮显示的选项、展开或折叠下拉菜单。 -- “Alt”+“快捷键”:选择快捷键所在的控件,其中快捷键可通过按住Alt高亮(加下划线)显示。 - -## 设置安装程序语言 - -启动安装后,在进入安装程序主界面之前,系统会提示用户设置安装过程中使用的语言。当前默认为英语,用户可根据实际情况进行调整,如[图5](#zh-cn_topic_0186390093_zh-cn_topic_0122145864_fig144630179151)所示,选择“中文”。 - -**图 5** 选择语言 -![](figures/选择语言.png "选择语言") - -完成设置后,单击“继续”,进入安装设置主界面。 - -如果您想退出安装,可以单击“退出”并在弹出的“您确定要退出安装程序吗?”对话框中单击“是”重新进入“安装引导界面”。 - -## 进入安装界面 - -系统安装程序正常启动后,会进入[图6](#zh-cn_topic_0186390094_zh-cn_topic_0122145883_fig5969171592212)所示的安装设置主界面。用户可以进行时间、语言、安装源、网络、安装位置等相关设置。 - -部分配置项会有告警符号,用户完成该选项配置后,告警符号消失。当界面上不存在告警符号时,用户才能单击“开始安装”进行系统安装。 - -如果您想退出安装,可以单击“退出”并在弹出的“您确定要退出安装程序吗?”对话框中单击“是”重新进入“安装引导界面”。 - -**图 6** 安装概览 -![](figures/安装概览.png "安装概览") - -## 设置键盘 - -在“安装概览”页面中选择“键盘”,用户可以在系统中添加或者删除多个键盘布局。 - -- 要查看键盘布局,请在左侧选框中单击选中该键盘布局,然后单击下面的“键盘”按钮。 -- 要测试键盘布局,请在左侧选框中添加键盘布局,然后在右上角键盘图标处进行点击切换为目标键盘,单击右侧文本框内部,输入文本以确认所选键盘布局可正常工作。 - -**图 7** 键盘布局 -![](figures/键盘布局.png "键盘布局") - -设置完成后,请单击左上角“完成”返回“安装概览”页面。 - -## 设置系统语言 - -在“安装概览”页面中选择“语言支持”,设置系统的语言。如[图8](#zh-cn_topic_0186390098_zh-cn_topic_0122145772_fig187301927172619)所示,用户也可根据实际情况进行调整,选择“中文”。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->若选择“中文”,系统安装完成后,使用VNC登录不支持中文显示,使用串口登录支持中文显示,使用SSH登录时是否支持中文显示与使用的SSH客户端有关。若选择“English”,则无影响。 - -**图 8** 语言支持 -![](figures/语言支持.png "语言支持") - -设置完成后,请单击左上角“完成”返回“安装概览”页面。 - -## 设置时间和日期 - -在“安装概览”页面中选择“时间和日期”,设置系统的时区、日期、时间等。 - -设置时区时,用户可通过鼠标在地图上单击指定的城市,也可以通过页面顶部的“地区”和“城市”下拉菜单中进行选择,如[图9](#zh-cn_topic_0186390096_zh-cn_topic_0122145900_fig1260162652312)所示。 - -如果您所在城市没有出现在地图或下拉菜单中,请选择同一时区中离您最近的城市。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->- 手动设置时区时,请先关闭右上角“网络时间”同步开关。 ->- 如需使用网络时间,请保证网络能连通远程NTP服务器,设置网络具体请参见“[设置网络和主机名](#设置网络和主机名)”。 - -**图 9** 日期和时间 -![](figures/日期和时间.png "日期和时间") - -设置完成后,请单击左上角“完成”返回“安装概览”页面。 - -## 设置安装源 - -在“安装概览”页面中选择“安装源”,指定安装源的位置。 - -当使用完整光盘安装,安装程序会自动探测并显示安装源信息,用户直接使用默认配置即可,不需要进行设置,如[图10](#zh-cn_topic_0186390100_zh-cn_topic_0144427079_fig93633295132)所示。 - -**图 10** 安装源 -![](figures/安装源.png "安装源") - -当使用网络https源进行安装的时候,如果https服务器使用的是私有证书,则需要在安装引导界面按“e”进入已选选项的参数编辑界面,在参数中增加inst.noverifyssl参数,如[图11](#fig113517811415)所示。 - -**图 11** 增加inst.noverifyssl参数 -![](figures/增加inst-noverifyssl参数.png "增加inst-noverifyssl参数") - -设置完成后,请单击左上角“完成”返回“安装概览”页面。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->安装过程中,如果“设置安装源”有疑问,可参考“[选择安装源出现异常](FAQ.html#选择安装源出现异常)”。 - -## 选择安装软件 - -在“安装概览”页面中选择“软件选择”,指定需要安装的软件包。 - -用户需要根据实际的业务需求,在左侧选择一个“最小安装”,在右侧选择安装环境的附加选项,如[图12](#zh-cn_topic_0186390261_zh-cn_topic_0122145865_fig03031519101414)所示。 - -**图 12** 软件选择 -![](figures/软件选择.png "软件选择") - ->![](public_sys-resources/icon-note.gif) **说明:** ->- 在最小安装的环境下,并非安装源中所有的包都会安装。如果用户需要使用的包未安装,可将安装源挂载到本地制作repo源,通过DNF工具单独安装。 ->- 选择“虚拟化主机”时会默认安装虚拟化组件qemu、libvirt、edk2,且可在附件选项处选择是否安装ovs等组件。 - -设置完成后,请单击左上角“完成”返回“安装概览”页面。 - -## 设置安装目的地 - -在“安装概览”页面中选择“安装目的地”,设置操作系统的安装磁盘及分区。 - -在[图13](#fig1195417125015)所示的页面中您可以看到计算机中的本地可用存储设备。 - ->![](public_sys-resources/icon-notice.gif) **须知:** ->在选择您需要安装的设备时,建议不要选择NVMe SSD存储介质作为操作系统的安装磁盘。 - -**图 13** 安装目标位置 -![](figures/安装目标位置.png "安装目标位置") - -### 存储配置 - -在“安装目标位置”界面,您需要进行存储配置以便对系统分区。您可以手动配置分区,也可以选择让安装程序自动分区。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->- 在进行分区时,出于系统性能和安全的考虑,建议您划分如下单独分区:/boot、/var、/var/log 、/var/log/audit、/home、/tmp。 ->- 系统如果配置了swap分区,当系统的物理内存不够用时,会使用swap分区。虽然 swap分区可以增大物理内存大小的限制,但是如果由于内存不足使用到swap分区,会增加系统的响应时间,性能变差。因此在物理内存充足或者性能敏感的系统中,不建议配置swap分区。 ->- 如果需要拆分逻辑卷组则需要选择“自定义”进行手动分区,并在“手动分区”界面单击“卷组”区域中的“修改”按钮重新配置卷组。 - -**自动** - -如果是在未使用过的存储设备中执行全新安装,或者不需要保留该存储设备中任何数据,建议选择“自动”进行自动分区。 - -若您需要对数据进行加密,您可以在“安装目标位置”界面选择“加密我的数据”,并单击左上角“完成”,出现如[图14](#fig_setcode)所示的“磁盘加密口令”对话框。请分别在“口令”和“确认”中输入相同的加密口令,且口令需要符合密码复杂度,具体请参考[密码复杂度](#密码复杂度)。设置完成后,请单击“保存口令”返回“安装概览”页面。 - ->![](figures/zh-cn_image_0229291229.png) ->若口令丢失,将无法找回,且无法访问所有加密的分区以及其中的数据。请妥善保管口令。 - -**图 14** 磁盘加密口令 -![](figures/磁盘加密口令.png "磁盘加密口令") - -**自定义** - -若用户需进行手动分区,选择“自定义”按钮,并单击左上角“完成”,出现手动分区界面。 - -在“手动分区”界面可以通过如下两种方式进行分区,分区完成后如[图15](#fig1277151815248)所示。 - -- 自动创建:在界面单击“点击这里自动创建它们”,系统会根据可用的存储空间,自动分出4个挂载点:/boot 、/、/boot/efi、swap。 - -- 手动创建:单击“![](figures/zh-cn_image_0229291243.png)”添加新挂载点,建议每个挂载点的期望容量不超过可用空间。 - - >![](public_sys-resources/icon-note.gif) **说明:** - >若设置的挂载点期望容量超过了可用空间,系统将剩余的可用空间全部分配给该挂载点。 - -**图 15** 手动分区 -![](figures/手动分区.png "手动分区") - -若您需要对数据进行加密,您可以在需要加密的挂载点的“设备类型”区域中选择“加密”,并单击左上角“完成”,出现如[图14](#fig_setcode)所示的“磁盘加密口令”对话框。请分别在“口令”和“确认”中输入相同的加密口令,且口令需要符合密码复杂度,具体请参考[密码复杂度](#密码复杂度)。设置完成后,请单击“保存口令”返回“手动分区”界面。 - ->![](figures/zh-cn_image_0229291229.png) ->若口令丢失,将无法找回,且无法访问所有加密的分区以及其中的数据。请妥善保管口令。 - -设置完成后,请单击左上角“完成”返回“安装概览”页面。 - -## 设置网络和主机名 - -在“安装概览”页面中选择“网络和主机名”,设置系统的网络功能。 - -安装程序会自动探测可本地访问的接口。探测到的接口列在左侧方框中,右侧显示相应的接口详情,如[图16](#zh-cn_topic_0186390264_zh-cn_topic_0122145831_fig123700157297)所示。用户可以通过页面右上角的开关,来开启或者关闭网络接口。用户还可以单击“配置”以配置选中的接口。 - -用户可在页面下方“主机名”字段输入主机名。主机名可以是完全限定域名(FQDN),其格式为hostname.domainname;也可以是简要主机名,其格式为hostname。 - -**图 16** 网络和主机名 -![](figures/网络和主机名.png "网络和主机名") - -设置完成后,请单击左上角“完成”返回“安装概览”页面。 - -## 设置根密码 - -在“安装概览”页面中选择“根密码”,弹出设置“ROOT密码”界面,如[图17](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1323165793018)所示,根据[密码复杂度](#密码复杂度)输入密码并再次输入密码进行确认。 - ->![](public_sys-resources/icon-note.gif) **说明:** -> ->- root帐户是用来执行关键系统管理任务,不建议您在日常工作及系统访问时使用root帐户。 -> ->- 在“ROOT密码”界面若选择“锁定root帐户”则root帐户将禁用。 - -**图 17** root密码 -![](figures/root密码.png "root密码") - -### 密码复杂度 - -用户设置的root用户密码或新创建用户的密码均需要满足密码复杂度要求,否则会导致密码设置或用户创建失败。设置密码的复杂度的要求如下: - -1. 口令长度至少8个字符。 -2. 口令至少包含大写字母、小写字母、数字和特殊字符中的任意3种。 -3. 口令不能和账号一样。 -4. 口令不能使用字典词汇。 - - >![](public_sys-resources/icon-note.gif) **说明:** - > 在已装好的openEuler环境中,可以通过`cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt`命令导出字典库文件dictionary.txt,用户可以查询密码是否在该字典中。 - -完成设置后,单击左上角的“完成”返回“安装概览”页面。 - -## 创建用户 - -在“安装概览”页面中选择“创建用户”,弹出“创建用户”的界面如[图18](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1237715313319)所示。输入用户名,并设置密码。另外您还可以通过“高级”选项设置用户主目录、用户组等,如[图19](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig128716531312)所示。 - -**图 18** 创建用户 -![](figures/创建用户.png "创建用户") - -**图 19** 高级用户配置 -![](figures/高级用户配置.png "高级用户配置") - -完成设置后,单击左上角的“完成”返回“安装概览”页面。 - - -## 开始安装 - -在安装界面上完成所有必填选项的配置后,界面上的警告会消失。此时,用户可以单击“开始安装”进行系统安装。 - -**图 20** 开始安装 -![](figures/开始安装.png "开始安装") - -## 安装过程 - -开始安装后会出现进度页面,显示安装进度及所选软件包写入系统的进度,如[图21](zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1590863119306)所示。 - ->![](figures/zh-cn_image_0229291229.png) ->若系统安装过程中,单击“退出”,或复位、下电服务器,则安装过程被中断,系统将不可用,需要重新进行安装。 - -**图 21** 安装过程 -![](figures/安装过程.png "安装过程") - - -## 安装完成 - -此刻,openEuler已完成安装,如[图22](#zh-cn_topic_0186390267_zh-cn_topic_0122145917_fig1429512116338)所示。单击“重启系统”后,系统将重新启动。 - -**图 22** 完成安装 -![](figures/完成安装.png "完成安装") - -- 如果当前使用物理光盘安装操作系统,且在重启过程中安装光盘没有自动弹出,请手动取出光盘,则可以直接进入openEuler命令行登录界面。 -- 如果当前使用虚拟光驱安装操作系统,则需要修改服务器的启动项为“硬盘”,然后重启服务器,则可以直接进入openEuler命令行登录界面。 +# 安装指导 + +本章以光盘安装为例介绍安装openEuler,其他安装方式除在启动安装时的引导方式不同外,待启动安装后则安装流程相同,在此不再说明。 + + + +- [安装指导](#安装指导) + - [启动安装](#启动安装) + - [使用光盘引导安装](#使用光盘引导安装) + - [安装引导界面](#安装引导界面) + - [图形化模式安装](#图形化模式安装) + - [设置安装程序语言](#设置安装程序语言) + - [进入安装界面](#进入安装界面) + - [设置键盘](#设置键盘) + - [设置系统语言](#设置系统语言) + - [设置时间和日期](#设置时间和日期) + - [设置安装源](#设置安装源) + - [选择安装软件](#选择安装软件) + - [设置安装目的地](#设置安装目的地) + - [存储配置](#存储配置) + - [设置网络和主机名](#设置网络和主机名) + - [设置根密码](#设置根密码) + - [创建用户](#创建用户) + - [开始安装](#开始安装) + - [安装过程](#安装过程) + - [安装完成](#安装完成) + + + +## 启动安装 + +### 使用光盘引导安装 + +在服务器的光驱中加载openEuler安装镜像,重启服务器,具体步骤如下。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>在安装开始前,需要保证服务器启动选项为光驱优先。安装步骤以BMC挂载虚拟光驱进行光盘安装的操作举例。通过物理光驱安装的操作简单,启动安装后的流程相同,在此不再说明。 + +1. 在虚拟界面工具栏中,单击虚拟光驱工具如下图所示。 + + **图 1** 光驱图标 + ![](./figures/CD-ROM_drive_icon.png) + + 弹出镜像对话框,如下图所示。 + + **图 2** 镜像对话框 + ![](./figures/Image_dialog_box.png) + +2. 在镜像对话框中,选择“镜像文件”, 并单击“浏览”。弹出“打开”对话框。 +3. 选择镜像文件,单击“打开”。然后在镜像对话框中,单击“连接”。当“连接”显示为“断开”后,表示虚拟光驱已连接到服务器。 +4. 在工具栏中,单击重启工具重启设备,如下图所示。 + + **图 3** 重启图标 + ![](./figures/restarticon.png) + + +### 安装引导界面 + +系统使用引导介质完成引导后会显示引导菜单。该引导菜单除启动安装程序外还提供一些选项。安装系统时,默认采用“Test this media & install openEuler 20.03-LTS-SP3”方式进行安装。如果要选择默认选项之外的选项,请使用键盘中的“↑”和“↓”方向键进行选择,并在选项为高亮状态时按“Enter”。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>- 如果60秒内未按任何键,系统将从默认选项“Test this media & install openEuler 20.03-LTS-SP3”自动进入安装界面。 +>- 安装物理机时,如果使用键盘上下键无法选择启动选项,按“Enter”键无响应,可以单击BMC界面上的鼠标控制图标“![](./figures/zh-cn_image_0229420473.png)”,设置“键鼠复位”。 + +**图 4** 安装引导界面 +![](./figures/Installation_wizard.png) + +安装引导选项说明如下: + +- Install openEuler 20.03-LTS-SP3 —— 在您的服务器上使用图形用户界面模式安装。 + +- Test this media & install openEuler 20.03-LTS-SP3 —— 默认选项,在您的服务器上使用图形用户界面模式安装,但在启动安装程序前会进行安装介质的完整性检查。 + +- Troubleshooting —— 问题定位模式,系统无法正常安装时使用。进入问题定位模式后,有如下两个选项。 + - Install openEuler 20.03-LTS-SP3 in basic graphics mode —— 简单图形安装模式,该模式下在系统启动并运行之前不启动视频驱动程序。 + - Rescue the openEuler system —— 救援模式,用于修复系统。该模式下输出定向到VNC或BMC(Baseboard Management Controller)端,串口不可用。 + +在安装引导界面,按“e”进入已选选项的参数编辑界面,按“c”进入命令行模式。 + +### 图形化模式安装 + +在“安装引导界面”中选择“Test this media & install openEuler 20.03-LTS-SP3”进入图形化模式安装。 + +可以通过键盘操作图形化安装程序。 + +- “Tab”、“shift Tab”:界面控件(按钮、区域框、复选框等)间的移动。 +- “↑”、“↓”方向键:列表里的移动。 +- “←”、“→”方向键:水平工具条和表条间移动。 +- “空格”、“Enter”:选择或删除高亮显示的选项、展开或折叠下拉菜单。 +- “Alt”+“快捷键”:选择快捷键所在的控件,其中快捷键可通过按住Alt高亮(加下划线)显示。 + +## 设置安装程序语言 + +启动安装后,在进入安装程序主界面之前,系统会提示用户设置安装过程中使用的语言。当前默认为英语,用户可根据实际情况进行调整,如[图5](#zh-cn_topic_0186390093_zh-cn_topic_0122145864_fig144630179151)所示,选择“中文”。 + +**图 5** 选择语言 +![](./figures/selectlanguage.png) + +完成设置后,单击“继续”,进入安装设置主界面。 + +如果您想退出安装,可以单击“退出”并在弹出的“您确定要退出安装程序吗?”对话框中单击“是”重新进入“安装引导界面”。 + +## 进入安装界面 + +系统安装程序正常启动后,会进入[图6](#zh-cn_topic_0186390094_zh-cn_topic_0122145883_fig5969171592212)所示的安装设置主界面。用户可以进行时间、语言、安装源、网络、安装位置等相关设置。 + +部分配置项会有告警符号,用户完成该选项配置后,告警符号消失。当界面上不存在告警符号时,用户才能单击“开始安装”进行系统安装。 + +如果您想退出安装,可以单击“退出”并在弹出的“您确定要退出安装程序吗?”对话框中单击“是”重新进入“安装引导界面”。 + +**图 6** 安装概览 +![](./figures/Installation_Overview.png) + +## 设置键盘 + +在“安装概览”页面中选择“键盘”,用户可以在系统中添加或者删除多个键盘布局。 + +- 要查看键盘布局,请在左侧选框中单击选中该键盘布局,然后单击下面的“键盘”按钮。 +- 要测试键盘布局,请在左侧选框中添加键盘布局,然后在右上角键盘图标处进行点击切换为目标键盘,单击右侧文本框内部,输入文本以确认所选键盘布局可正常工作。 + +**图 7** 键盘布局 +![](./figures/Keyboard_layout.png) + +设置完成后,请单击左上角“完成”返回“安装概览”页面。 + +## 设置系统语言 + +在“安装概览”页面中选择“语言支持”,设置系统的语言。如[图8](#zh-cn_topic_0186390098_zh-cn_topic_0122145772_fig187301927172619)所示,用户也可根据实际情况进行调整,选择“中文”。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>若选择“中文”,系统安装完成后,使用VNC登录不支持中文显示,使用串口登录支持中文显示,使用SSH登录时是否支持中文显示与使用的SSH客户端有关。若选择“English”,则无影响。 + + +**图 8** 语言支持 +![](./figures/languagesupport.png) + +设置完成后,请单击左上角“完成”返回“安装概览”页面。 + +## 设置时间和日期 + +在“安装概览”页面中选择“时间和日期”,设置系统的时区、日期、时间等。 + +设置时区时,用户可通过鼠标在地图上单击指定的城市,也可以通过页面顶部的“地区”和“城市”下拉菜单中进行选择,如[图9](#zh-cn_topic_0186390096_zh-cn_topic_0122145900_fig1260162652312)所示。 + +如果您所在城市没有出现在地图或下拉菜单中,请选择同一时区中离您最近的城市。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>- 手动设置时区时,请先关闭右上角“网络时间”同步开关。 +>- 如需使用网络时间,请保证网络能连通远程NTP服务器,设置网络具体请参见“[设置网络和主机名](#设置网络和主机名)”。 + +**图 9** 日期和时间 +![](./figures/dateandtime.png) + +设置完成后,请单击左上角“完成”返回“安装概览”页面。 + +## 设置安装源 + +在“安装概览”页面中选择“安装源”,指定安装源的位置。 + +* 当使用完整光盘安装,安装程序会自动探测并显示安装源信息,用户直接使用默认配置即可,不需要进行设置,如[图10](#zh-cn_topic_0186390100_zh-cn_topic_0144427079_fig93633295132)所示。 + + **图 10** 安装源 + ![](./figures/Installation_source.png) + +* 当使用网络源进行安装的时候,需设置网络源的 URL。 + + - http 或 https 方式 + + http 或 https 方式的安装源如下图所示。 + + ![](./figures/installsource.png) + + 如果https服务器使用的是私有证书,则需要在安装引导界面按“e”进入已选选项的参数编辑界面,在参数中增加 inst.noverifyssl 参数。 + + 输入框内容以实际版本发布的安装源地址为准,如https://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/x86_64/ ,其中openEuler-20.03-LTS-SP3 为版本号,x86_64 为CPU 架构,可根据实际情况输入。 + + - ftp 方式 + + ftp 方式的安装源如下图所示,输入框内容根据的 ftp 地址输入。 + + ![](./figures/sourceftp.png) + + ftp服务器需要用户自己搭建,将openEuler-20.03-LTS-SP3-x86_64-dvd.iso镜像进行挂载,挂载出的文件拷贝到ftp的共享目录中。其中x86_64为CPU 架构,可根据实际情况使用镜像。 + + - nfs 方式 + + nfs 方式的安装源如下图所示,输入框内容根据的 nfs 地址输入。 + + ![](./figures/sourcenfs.png) + + nfs服务器需要用户自己搭建,将openEuler-20.03-LTS-SP3-x86_64-dvd.iso镜像进行挂载,挂载出的文件拷贝到nfs的共享目录中。其中x86_64为CPU 架构,可根据实际情况使用镜像。 + + +安装过程中,如果“设置安装源”有疑问,可参考“[选择安装源出现异常](./FAQ.html#选择安装源出现异常)”。 + +设置完成后,请单击左上角“完成”返回“安装概览”页面。 + +## 选择安装软件 + +在“安装概览”页面中选择“软件选择”,指定需要安装的软件包。 + +用户需要根据实际的业务需求,在左侧选择一个“最小安装”,在右侧选择安装环境的附加选项,如[图12](#zh-cn_topic_0186390261_zh-cn_topic_0122145865_fig03031519101414)所示。 + +**图 12** 软件选择 +![](./figures/choosesoftware.png) + +>![](./public_sys-resources/icon-note.gif) **说明:** +>- 在最小安装的环境下,并非安装源中所有的包都会安装。如果用户需要使用的包未安装,可将安装源挂载到本地制作repo源,通过DNF工具单独安装。 +>- 选择“虚拟化主机”时会默认安装虚拟化组件qemu、libvirt、edk2,且可在附件选项处选择是否安装ovs等组件。 + +设置完成后,请单击左上角“完成”返回“安装概览”页面。 + +## 设置安装目的地 + +在“安装概览”页面中选择“安装目的地”,设置操作系统的安装磁盘及分区。 + +在[图13](#fig1195417125015)所示的页面中您可以看到计算机中的本地可用存储设备。 + + +**图 13** 安装目标位置 +![](./figures/Target_installation_position.png) + +### 存储配置 + +在“安装目标位置”界面,您需要进行存储配置以便对系统分区。您可以手动配置分区,也可以选择让安装程序自动分区。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>- 在进行分区时,出于系统性能和安全的考虑,建议您划分如下单独分区:/boot、/var、/var/log 、/var/log/audit、/home、/tmp。 +>- 系统如果配置了swap分区,当系统的物理内存不够用时,会使用swap分区。虽然 swap分区可以增大物理内存大小的限制,但是如果由于内存不足使用到swap分区,会增加系统的响应时间,性能变差。因此在物理内存充足或者性能敏感的系统中,不建议配置swap分区。 +>- 如果需要拆分逻辑卷组则需要选择“自定义”进行手动分区,并在“手动分区”界面单击“卷组”区域中的“修改”按钮重新配置卷组。 + +**自动** + +如果是在未使用过的存储设备中执行全新安装,或者不需要保留该存储设备中任何数据,建议选择“自动”进行自动分区。设置完成后,请单击“完成”返回“安装概览”页面。 + +**自定义** + +若用户需进行手动分区,选择“自定义”按钮,并单击左上角“完成”,出现手动分区界面。 + +在“手动分区”界面可以通过如下两种方式进行分区,分区完成后如[图14](#fig1277151815248)所示。 + +- 自动创建:在界面单击“点击这里自动创建它们”,系统会根据可用的存储空间,自动分出4个挂载点:/boot 、/、/boot/efi、swap。 + +- 手动创建:单击“![](./figures/zh-cn_image_0229291243.png)”添加新挂载点,建议每个挂载点的期望容量不超过可用空间。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >若设置的挂载点期望容量超过了可用空间,系统将剩余的可用空间全部分配给该挂载点。 + +**图 14** 手动分区 +![](./figures/filesystem_setting.png) + +>![](./public_sys-resources/icon-note.gif) **说明:** +> 如果选择非 UEFI 引导,则不需要 /boot/efi 分区。若选择 UEFI 引导,则必须有 /boot/efi 分区。 + +设置完成后,请单击左上角”完成“按钮,弹出“更改摘要”对话框,提示更改产生的变更信息。 + +点击“接受更改”,返回“安装概览”页面。 + +## 设置网络和主机名 + +在“安装概览”页面中选择“网络和主机名”,设置系统的网络功能。 + +安装程序会自动探测可本地访问的接口。探测到的接口列在左侧方框中,右侧显示相应的接口详情,如[图15](#zh-cn_topic_0186390264_zh-cn_topic_0122145831_fig123700157297)所示。用户可以通过页面右上角的开关,来开启或者关闭网络接口。开关默认是关闭状态,若设置安装源选择的是在网络上安装,需要开启开关。用户还可以单击“配置”以配置选中的接口。勾选“自动以优先级连接”选项,即可将该网卡设置为开机自启动,如[图16](#zh-cn_topic_0186390264_zh-cn_topic_0122145831_fig6)所示。 + +用户可在页面下方“主机名”字段输入主机名。主机名可以是完全限定域名(FQDN),其格式为hostname.domainname;也可以是简要主机名,其格式为hostname。 + +**图 15** 网络和主机名 +![](./figures/NetworkandHostName.png) + +**图 16** 配置网络 +![](./figures/confignetwork1.png) + +设置完成后,请单击左上角“完成”返回“安装概览”页面。 + +## 设置根密码 + +在“安装概览”页面中选择“根密码”,弹出设置“ROOT密码”界面,如[图17](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1323165793018)所示,根据[密码复杂度](#密码复杂度)输入密码并再次输入密码进行确认。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- root帐户是用来执行关键系统管理任务,不建议您在日常工作及系统访问时使用root帐户。 +> +>- 在“ROOT密码”界面若选择“锁定root帐户”则root帐户将禁用。 + +**图 17** root密码 +![](./figures/root_password.png) + +### 密码复杂度 + +用户设置的root用户密码或新创建用户的密码均需要满足密码复杂度要求,否则会导致密码设置或用户创建失败。设置密码的复杂度的要求如下: + +1. 口令长度至少8个字符。 +2. 口令至少包含大写字母、小写字母、数字和特殊字符中的任意3种。 +3. 口令不能和账号一样。 +4. 口令不能使用字典词汇。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + >在已装好的openEuler环境中,可以通过`cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt`命令导出字典库文件dictionary.txt,用户可以查询密码是否在该字典中。 + +完成设置后,单击左上角的“完成”返回“安装概览”页面。 + +## 创建用户 + +在“安装概览”页面中选择“创建用户”,弹出“创建用户”的界面如[图18](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1237715313319)所示。输入用户名,并设置密码。另外您还可以通过“高级”选项设置用户主目录、用户组等,如[图19](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig128716531312)所示。 + +**图 18** 创建用户 +![](./figures/createuser.png) + +**图 19** 高级用户配置 +![](./figures/Advanced_User_Configuration.png) + +完成设置后,单击左上角的“完成”返回“安装概览”页面。 + + +## 开始安装 + +在安装界面上完成所有必填选项的配置后,界面上的警告会消失。此时,用户可以单击“开始安装”进行系统安装。 + +## 安装过程 + +开始安装后会出现进度页面,显示安装进度及所选软件包写入系统的进度,如[图20](./zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1590863119306)所示。 + +>![](./figures/zh-cn_image_0229291229.png) +>若系统安装过程中,单击“退出”,或复位、下电服务器,则安装过程被中断,系统将不可用,需要重新进行安装。 + +**图 20** 安装过程 +![](./figures/Installation_Procedure.png) + + +## 安装完成 + +安装过程执行完成后,openEuler完成安装,单击“重启”后,系统将重新启动。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +> - 如果当前使用物理光盘安装操作系统,且在重启过程中安装光盘没有自动弹出,请手动取出光盘,则可以直接进入openEuler命令行登录界面。 +> - 如果当前使用虚拟光驱安装操作系统,则需要修改服务器的启动项为“硬盘”,然后重启服务器,则可以直接进入openEuler命令行登录界面。 + diff --git "a/content/zh/docs/Installation/\345\256\211\350\243\205\346\226\271\345\274\217\344\273\213\347\273\215-1.md" "b/docs/zh/docs/Installation/\345\256\211\350\243\205\346\226\271\345\274\217\344\273\213\347\273\215-1.md" similarity index 71% rename from "content/zh/docs/Installation/\345\256\211\350\243\205\346\226\271\345\274\217\344\273\213\347\273\215-1.md" rename to "docs/zh/docs/Installation/\345\256\211\350\243\205\346\226\271\345\274\217\344\273\213\347\273\215-1.md" index 65fffe05b708b975c7396619ec86397ca8964f73..fa4a7cc272d9bf036a10f2225e2849f164d077c3 100644 --- "a/content/zh/docs/Installation/\345\256\211\350\243\205\346\226\271\345\274\217\344\273\213\347\273\215-1.md" +++ "b/docs/zh/docs/Installation/\345\256\211\350\243\205\346\226\271\345\274\217\344\273\213\347\273\215-1.md" @@ -1,9 +1,9 @@ # 安装方式介绍 ->![](public_sys-resources/icon-notice.gif) **须知:** +>![](./public_sys-resources/icon-notice.gif) **须知:** >- 硬件仅支持树莓派 3B/3B+/4B。 >- 采用刷写镜像到 SD 卡方式安装。本章节提供 Windows/Linux/Mac 上刷写镜像的操作方法。 ->- 本章节使用的镜像是参考“[安装准备](安装准备-1.html)”获取 openEuler 的树莓派版本镜像。 +>- 本章节使用的镜像是参考“[安装准备](./安装准备-1.html)”获取 openEuler 的树莓派版本镜像。 @@ -35,10 +35,7 @@ 若 SD 卡之前未安装过镜像,盘符只有一个。在 “Select card” 中选择需要格式化的 SD 卡对应盘符。 - 若 SD 卡之前安装过镜像,盘符会有一个或多个。如下图所示,该 SD 卡对应三个盘符:E、G、H。在 “Select card” 中选择需要格式化的 SD 卡对应 boot 分区盘符 E。 - - **图 1** 盘符 - ![](figures/盘符.png "盘符") + 若 SD 卡之前安装过镜像,盘符会有一个或多个。例如,SD 卡对应三个盘符:E、G、H。在 “Select card” 中选择需要格式化的 SD 卡对应 boot 分区盘符 E。 3. 在 “Formatting options” 中选择格式化方式。默认为 “Qick format”。 4. 单击“Format”开始格式化。界面通过进度条显示格式化进度。 @@ -46,10 +43,10 @@ ### 写入 SD 卡 ->![](public_sys-resources/icon-notice.gif) **须知:** ->如果获取的是压缩后的镜像文件“openEuler-20.09-RaspberryPi.aarch64.img.xz”,需要先将压缩文件解压得到 “openEuler-20.09-RaspberryPi.aarch64.img”镜像文件。 +>![](./public_sys-resources/icon-notice.gif) **须知:** +>如果获取的是压缩后的镜像文件“openEuler-20.03-LTS-SP3-raspi-aarch64.img.xz”,需要先将压缩文件解压得到 “openEuler-20.03-LTS-SP3-raspi-aarch64.img”镜像文件。 -请按照以下步骤将“openEuler-20.09-RaspberryPi.aarch64.img”镜像文件写入 SD 卡: +请按照以下步骤将“openEuler-20.03-LTS-SP3-raspi-aarch64.img”镜像文件写入 SD 卡: 1. 下载并安装刷写镜像的工具,以下操作以 Win32 Disk Imager 工具为例。 2. 右键选择“以管理员身份运行”,打开 Win32 Disk Imager。 @@ -77,12 +74,12 @@ ### 写入 SD 卡 -1. 如果获取的是压缩后的镜像,需要先执行 `xz -d openEuler-20.09-RaspberryPi.aarch64.img.xz` 命令将压缩文件解压得到“openEuler-20.09-RaspberryPi.aarch64.img”镜像文件;否则,跳过该步骤。 -2. 将镜像 `openEuler-20.09-RaspberryPi.aarch64.img` 刷写入 SD 卡,在 root 权限下执行以下命令: +1. 如果获取的是压缩后的镜像,需要先执行 `xz -d openEuler-20.03-LTS-SP3-raspi-aarch64.img.xz` 命令将压缩文件解压得到“openEuler-20.03-LTS-SP3-raspi-aarch64.img”镜像文件;否则,跳过该步骤。 +2. 将镜像 `openEuler-20.03-LTS-SP3-raspi-aarch64.img` 刷写入 SD 卡,在 root 权限下执行以下命令: - `dd bs=4M if=openEuler-20.09-RaspberryPi.aarch64.img of=/dev/sdb` + `dd bs=4M if=openEuler-20.03-LTS-SP3-raspi-aarch64.img of=/dev/sdb` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >一般情况下,将块大小设置为 4M。如果写入失败或者写入的镜像无法使用,可以尝试将块大小设置为 1M 重新写入,但是设置为 1M 比较耗时。 ## Mac 下刷写镜像 @@ -104,10 +101,10 @@ ### 写入 SD 卡 -1. 如果获取的是压缩后的镜像,需要先执行 `xz -d openEuler-20.09-RaspberryPi.aarch64.img.xz` 命令将压缩文件解压得到“openEuler-20.09-RaspberryPi.aarch64.img”镜像文件;否则,跳过该步骤。 -2. 将镜像 `openEuler-20.09-RaspberryPi.aarch64.img` 刷入 SD 卡,在 root 权限下执行以下命令: +1. 如果获取的是压缩后的镜像,需要先执行 `xz -d openEuler-20.03-LTS-SP3-raspi-aarch64.img.xz` 命令将压缩文件解压得到“openEuler-20.03-LTS-SP3-raspi-aarch64.img”镜像文件;否则,跳过该步骤。 +2. 将镜像 `openEuler-20.03-LTS-SP3-raspi-aarch64.img` 刷入 SD 卡,在 root 权限下执行以下命令: - `dd bs=4m if=openEuler-20.09-RaspberryPi.aarch64.img of=/dev/sdb` + `dd bs=4m if=openEuler-20.03-LTS-SP3-raspi-aarch64.img of=/dev/sdb` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >一般情况下,将块大小设置为 4m。如果写入失败或者写入的镜像无法使用,可以尝试将块大小设置为 1m 重新写入,但是设置为 1m 比较耗时。 diff --git "a/content/zh/docs/Installation/\345\256\211\350\243\205\346\226\271\345\274\217\344\273\213\347\273\215.md" "b/docs/zh/docs/Installation/\345\256\211\350\243\205\346\226\271\345\274\217\344\273\213\347\273\215.md" similarity index 83% rename from "content/zh/docs/Installation/\345\256\211\350\243\205\346\226\271\345\274\217\344\273\213\347\273\215.md" rename to "docs/zh/docs/Installation/\345\256\211\350\243\205\346\226\271\345\274\217\344\273\213\347\273\215.md" index d8d0dfc4ac471a4c83255ba38e7eacc1d417cbdc..4e8770d3482afaa397bdeceedea682ecf674d344 100644 --- "a/content/zh/docs/Installation/\345\256\211\350\243\205\346\226\271\345\274\217\344\273\213\347\273\215.md" +++ "b/docs/zh/docs/Installation/\345\256\211\350\243\205\346\226\271\345\274\217\344\273\213\347\273\215.md" @@ -1,209 +1,213 @@ -# 安装方式介绍 - ->![](public_sys-resources/icon-notice.gif) **须知:** ->- 硬件服务器仅支持Taishan 200服务器和FusionServer Pro 机架服务器,具体支持的服务器型号可参考“[硬件兼容支持](安装准备.html#硬件兼容支持)”;虚拟化平台仅支持openEuler自有的虚拟化组件(HostOS为openEuler,虚拟化组件为发布包中的qemu、KVM)创建的虚拟化平台和华为公有云的x86虚拟化平台。 ->- 安装方式当前仅支持光盘、USB盘安装、网络安装、qcow2镜像安装和私有镜像安装。其中仅华为公有云的x86虚拟化平台支持私有镜像安装。 - - -- [安装方式介绍](#安装方式介绍) - - [通过光盘安装](#通过光盘安装) - - [准备安装源](#准备安装源) - - [启动安装](#启动安装) - - [通过USB盘安装](#通过usb盘安装) - - [准备安装源](#准备安装源-1) - - [启动安装](#启动安装-1) - - [使用PXE通过网络安装](#使用pxe通过网络安装) - - [通过qcow2镜像安装](#通过qcow2镜像安装) - - [制作qcow2镜像](#制作qcow2镜像) - - [启动安装](#启动安装-2) - - [通过私有镜像安装](#通过私有镜像安装) - - [制作私有镜像](#制作私有镜像) - - [启动安装](#启动安装-3) - - - -## 通过光盘安装 - -本节介绍如何使用或者制作光盘安装源,并介绍相应的操作步骤,指导用户进行安装。 - -### 准备安装源 - -如果您获取的是系统安装光盘,那么可以直接使用光盘安装系统。如果您获取的是系统ISO镜像,可以通过刻录软件将系统的ISO镜像刻录到DVD中,使用刻录完成的DVD安装系统。 - -### 启动安装 - -根据以下步骤启动安装程序: - ->![](public_sys-resources/icon-note.gif) **说明:** ->您需要先设置您的系统优先从光盘进行启动引导。以BIOS为例,您需要将“Boot Type Order”中的“CD/DVD-ROM Drive”选项调整到首位。 - -1. 断开所有安装不需要的驱动器,比如USB。 -2. 启动您的计算机系统。 -3. 在计算机中插入安装光盘。 -4. 重启计算机系统。 - -在短暂的延迟后会出现图形化引导界面,该界面包含不同引导选项。如果您在一分钟内未进行任何操作,安装程序将自动以默认选项开始运行。 - -## 通过USB盘安装 - -本节介绍如何制作USB盘安装源,并介绍基本的操作步骤,指导用户进行安装。 - -### 准备安装源 - -您需要注意USB盘容量的大小,它必须有足够的的空间放下整个镜像,建议USB盘空间大于16G。 - -1. 将USB盘连接到该系统中,并执行 dmesg 命令查看相关的日志信息。在该日志的最后可以看到刚刚连接的USB盘所生成的一组信息,应类似如下: - - ``` - [ 170.171135] sd 5:0:0:0: [sdb] Attached SCSI removable disk - ``` - - >![](public_sys-resources/icon-note.gif) **说明:** - >连接的USB盘名称以sdb进行举例。 - -2. 切换为root用户。使用su命令,需要输入相应的密码。 - - ``` - $ su - root - ``` - -3. 确保USB盘没有被挂载。使用如下命令进行查询: - - ``` - # findmnt /dev/sdb - ``` - - - 如果执行此命令后无输出,表明未挂载,可以继续执行下一步。 - - - 如果输出以下信息,表明USB盘已经自动挂载。 - - ``` - # findmnt /dev/sdb - TARGET SOURCE FSTYPE OPTIONS - /mnt/iso /dev/sdb iso9660 ro,relatime - ``` - - 此时,您需要使用umount命令卸载该设备。 - - ``` - # umount /mnt/iso - ``` - -4. 使用dd命令将ISO安装镜像直接写入USB盘: - - ``` - # dd if=/path/to/image.iso of=/dev/device bs=blocksize - ``` - - 使用您下载的ISO镜像文件的完整路径替换 /path/to/image.iso,使用之前由 dmesg 命令给出的设备名称替换device,同时设置合理的块大小(例如:512k)替换 blocksize,这样可以加快写入进度。 - - 例如:如果该ISO镜像文件位于 /home/testuser/Downloads/openEuler-20.09-beta-aarch64-dvd.iso,同时探测到的设备名称为sdb,则该命令如下: - - ``` - # dd if=/home/testuser/Downloads/openEuler-20.09-beta-aarch64-dvd.iso of=/dev/sdb bs=512k - ``` - -5. 等待镜像写入完成,拔掉USB盘。 - - 镜像写入过程中不会有进度显示,当\#号再次出现时,表明写入完成。退出root账户,拔掉USB盘。此时,您可以使用该USB盘作为系统的安装源。 - - -### 启动安装 - -请根据以下步骤启动安装程序: - ->![](public_sys-resources/icon-note.gif) **说明:** ->您需要先设置您的系统优先从USB进行启动引导。以BIOS为例,您需要将“Boot Type Order”中的USB选项调整到首位。 - -1. 断开所有安装不需要的驱动器。 -2. 打开您的计算机系统。 -3. 在计算机中插入USB盘。 -4. 重启计算机系统。 - -在短暂的延迟后会出现图形化引导页面,该页面包含不同引导选项。如果您在一分钟内未进行任何操作,安装程序将自动开始安装。 - -## 使用PXE通过网络安装 - -要使用 PXE 引导,您需要正确配置服务器以及您的计算机需支持 PXE 的网络接口。 - -如果目标硬件安装有支持PXE的网络接口卡,我们可以配置它从其他网络系统的文件而不是本地介质(如光盘)来引导计算机并执行Anaconda安装程序。 - -对于PXE网络安装,客户机通过支持PXE的网卡,向网络发送请求DHCP信息的广播,请求IP地址等信息。DHCP服务器给客户机提供一个IP地址和其他网络信息如域名服务器、ftp服务器(它提供启动安装程序所必须的文件)的IP地址或主机名,以及服务器上文件的位置。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->此处不详细讨论tftp、DHCP、http等服务器配置,相关详细配置请参考“[全自动化安装指导](使用kickstart自动化安装.html#全自动化安装指导)”。 - -## 通过qcow2镜像安装 - -本节介绍如何使用或者制作qcow2镜像,并介绍相应的操作步骤,指导用户进行安装。 - -### 制作qcow2镜像 - -1. 安装qemu-img软件包。 - - ``` - # dnf install -y qemu-img - ``` - -2. 使用qemu-img工具的create命令,创建镜像文件,命令格式为: - - ``` - $ qemu-img create -f -o - ``` - - 其中,各参数含义如下: - - - _imgFormat_ :镜像格式,取值为raw, qcow2等。 - - _fileOption_ :文件选项,用于设置镜像文件的特性,如指定后端镜像文件,压缩,加密等特性。 - - _fileName_ :文件名称。 - - _diskSize_ :磁盘大小,用于指定块磁盘设备的大小,支持的单位有K、M、G、T,分别代表KiB、MiB、GiB、TiB。 - - 例如,创建一个磁盘设备大小为32GB、格式为qcow2的镜像文件openEuler-imge.qcow2,命令和回显如下: - - ``` - $ qemu-img create -f qcow2 openEuler-image.qcow2 32G - Formatting 'openEuler-image.qcow2', fmt=qcow2 size=34359738368 cluster_size=65536 lazy_refcounts=off refcount_bits=16 - ``` - - -### 启动安装 - -根据以下步骤启动安装程序: - -1. 准备qcow2镜像文件。 -2. 准备虚拟机网络。 -3. 准备UEFI引导工具集EDK II。 -4. 准备虚拟机XML配置文件。 -5. 创建虚拟机。 -6. 启动虚拟机。 - -各步骤详细的操作请参考《[openEuler 20.09 beta 虚拟化用户指南](../Virtualization/virtualization.html)》。 - -## 通过私有镜像安装 - -本节介绍如何使用或者制作私有镜像,并介绍相应的操作步骤,指导用户进行安装。 - -### 制作私有镜像 - -制作私有镜像的方法请参见[《镜像服务用户指南》](https://support.huaweicloud.com/usermanual-ims/zh-cn_topic_0013901628.html)。 - -### 启动安装 - -华为公有云的x86虚拟化平台的启动请参见[ 弹性云服务器 ECS的用户指南](https://support.huaweicloud.com/wtsnew-ecs/index.html)。 - - - - - - - - - - - - - - - - - +# 安装方式介绍 + +>![](./public_sys-resources/icon-notice.gif) **须知:** +>- 硬件服务器仅支持Taishan 200服务器和FusionServer Pro 机架服务器,具体支持的服务器型号可参考“[硬件兼容支持](./安装准备.html#硬件兼容支持)”;虚拟化平台仅支持openEuler自有的虚拟化组件(HostOS为openEuler,虚拟化组件为发布包中的qemu、KVM)创建的虚拟化平台和华为公有云的x86虚拟化平台。 +>- 安装方式当前仅支持光盘、USB盘安装、网络安装、qcow2镜像安装和私有镜像安装。其中仅华为公有云的x86虚拟化平台支持私有镜像安装。 + + +- [安装方式介绍](#安装方式介绍) + - [通过光盘安装](#通过光盘安装) + - [准备安装源](#准备安装源) + - [启动安装](#启动安装) + - [通过USB盘安装](#通过usb盘安装) + - [准备安装源](#准备安装源-1) + - [启动安装](#启动安装-1) + - [使用PXE通过网络安装](#使用pxe通过网络安装) + - [通过qcow2镜像安装](#通过qcow2镜像安装) + - [制作qcow2镜像](#制作qcow2镜像) + - [启动安装](#启动安装-2) + - [通过私有镜像安装](#通过私有镜像安装) + - [制作私有镜像](#制作私有镜像) + - [启动安装](#启动安装-3) + + + +## 通过光盘安装 + +本节介绍如何使用或者制作光盘安装源,并介绍相应的操作步骤,指导用户进行安装。 + +### 准备安装源 + +如果您获取的是系统安装光盘,那么可以直接使用光盘安装系统。如果您获取的是系统ISO镜像,可以通过刻录软件将系统的ISO镜像刻录到DVD中,使用刻录完成的DVD安装系统。 + +### 启动安装 + +根据以下步骤启动安装程序: + +>![](./public_sys-resources/icon-note.gif) **说明:** +>您需要先设置您的系统优先从光盘进行启动引导。以BIOS为例,您需要将“Boot Type Order”中的“CD/DVD-ROM Drive”选项调整到首位。 + +1. 断开所有安装不需要的驱动器,比如USB。 +2. 启动您的计算机系统。 +3. 在计算机中插入安装光盘。 +4. 重启计算机系统。 + +在短暂的延迟后会出现图形化引导界面,该界面包含不同引导选项。如果您在一分钟内未进行任何操作,安装程序将自动以默认选项开始运行。 + +## 通过USB盘安装 + +本节介绍如何制作USB盘安装源,并介绍基本的操作步骤,指导用户进行安装。 + +### 准备安装源 + +您需要注意USB盘容量的大小,它必须有足够的的空间放下整个镜像,建议USB盘空间大于16G。 + +1. 将USB盘连接到该系统中,并执行 dmesg 命令查看相关的日志信息。在该日志的最后可以看到刚刚连接的USB盘所生成的一组信息,应类似如下: + + ``` + [ 170.171135] sd 5:0:0:0: [sdb] Attached SCSI removable disk + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >连接的USB盘名称以sdb进行举例。 + +2. 切换为root用户。使用su命令,需要输入相应的密码。 + + ``` + $ su - root + ``` + +3. 确保USB盘没有被挂载。使用如下命令进行查询: + + ``` + # findmnt /dev/sdb + ``` + + - 如果执行此命令后无输出,表明未挂载,可以继续执行下一步。 + + - 如果输出以下信息,表明USB盘已经自动挂载。 + + ``` + # findmnt /dev/sdb + TARGET SOURCE FSTYPE OPTIONS + /mnt/iso /dev/sdb iso9660 ro,relatime + ``` + + 此时,您需要使用umount命令卸载该设备。 + + ``` + # umount /mnt/iso + ``` + +4. 使用dd命令将ISO安装镜像直接写入USB盘: + + ``` + # dd if=/path/to/image.iso of=/dev/device bs=blocksize + ``` + + 使用您下载的ISO镜像文件的完整路径替换 /path/to/image.iso,使用之前由 dmesg 命令给出的设备名称替换device,同时设置合理的块大小(例如:512k)替换 blocksize,这样可以加快写入进度。 + + 例如:如果该ISO镜像文件位于 /home/testuser/Downloads/openEuler-20.03-LTS-SP3-aarch64-dvd.iso,同时探测到的设备名称为sdb,则该命令如下: + + ``` + # dd if=/home/testuser/Downloads/openEuler-20.03-LTS-SP3-aarch64-dvd.iso of=/dev/sdb bs=512k + ``` + +5. 等待镜像写入完成,拔掉USB盘。 + + 镜像写入过程中不会有进度显示,当\#号再次出现时,执行如下命令将数据同步写入磁盘。退出root账户,拔掉USB盘。此时,您可以使用该USB盘作为系统的安装源。 + + ```bash + # sync + ``` + + +### 启动安装 + +请根据以下步骤启动安装程序: + +>![](./public_sys-resources/icon-note.gif) **说明:** +>您需要先设置您的系统优先从USB进行启动引导。以BIOS为例,您需要将“Boot Type Order”中的USB选项调整到首位。 + +1. 断开所有安装不需要的驱动器。 +2. 打开您的计算机系统。 +3. 在计算机中插入USB盘。 +4. 重启计算机系统。 + +在短暂的延迟后会出现图形化引导页面,该页面包含不同引导选项。如果您在一分钟内未进行任何操作,安装程序将自动开始安装。 + +## 使用PXE通过网络安装 + +要使用 PXE 引导,您需要正确配置服务器以及您的计算机需支持 PXE 的网络接口。 + +如果目标硬件安装有支持PXE的网络接口卡,我们可以配置它从其他网络系统的文件而不是本地介质(如光盘)来引导计算机并执行Anaconda安装程序。 + +对于PXE网络安装,客户机通过支持PXE的网卡,向网络发送请求DHCP信息的广播,请求IP地址等信息。DHCP服务器给客户机提供一个IP地址和其他网络信息如域名服务器、ftp服务器(它提供启动安装程序所必须的文件)的IP地址或主机名,以及服务器上文件的位置。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>此处不详细讨论tftp、DHCP、http等服务器配置,相关详细配置请参考“[全自动化安装指导](./使用kickstart自动化安装.html#全自动化安装指导)”。 + +## 通过qcow2镜像安装 + +本节介绍如何使用或者制作qcow2镜像,并介绍相应的操作步骤,指导用户进行安装。 + +### 制作qcow2镜像 + +1. 安装qemu-img软件包。 + + ``` + # dnf install -y qemu-img + ``` + +2. 使用qemu-img工具的create命令,创建镜像文件,命令格式为: + + ``` + $ qemu-img create -f -o + ``` + + 其中,各参数含义如下: + + - _imgFormat_ :镜像格式,取值为raw, qcow2等。 + - _fileOption_ :文件选项,用于设置镜像文件的特性,如指定后端镜像文件,压缩,加密等特性。 + - _fileName_ :文件名称。 + - _diskSize_ :磁盘大小,用于指定块磁盘设备的大小,支持的单位有K、M、G、T,分别代表KiB、MiB、GiB、TiB。 + + 例如,创建一个磁盘设备大小为32GB、格式为qcow2的镜像文件openEuler-imge.qcow2,命令和回显如下: + + ``` + $ qemu-img create -f qcow2 openEuler-image.qcow2 32G + Formatting 'openEuler-image.qcow2', fmt=qcow2 size=34359738368 cluster_size=65536 lazy_refcounts=off refcount_bits=16 + ``` + + +### 启动安装 + +根据以下步骤启动安装程序: + +1. 准备qcow2镜像文件。 +2. 准备虚拟机网络。 +3. 准备UEFI引导工具集EDK II。 +4. 准备虚拟机XML配置文件。 +5. 创建虚拟机。 +6. 启动虚拟机。 + +各步骤详细的操作请参考《[openEuler 20.03 LTS SP3 虚拟化用户指南](./../Virtualization/virtualization.html)》。 + +## 通过私有镜像安装 + +本节介绍如何使用或者制作私有镜像,并介绍相应的操作步骤,指导用户进行安装。 + +### 制作私有镜像 + +制作私有镜像的方法请参见[《镜像服务用户指南》](https://support.huaweicloud.com/usermanual-ims/zh-cn_topic_0013901628.html)。 + +### 启动安装 + +华为公有云的x86虚拟化平台的启动请参见[ 弹性云服务器 ECS的用户指南](https://support.huaweicloud.com/wtsnew-ecs/index.html)。 + + + + + + + + + + + + + + + + + diff --git "a/content/zh/docs/Installation/\346\233\264\345\244\232\350\265\204\346\272\220.md" "b/docs/zh/docs/Installation/\346\233\264\345\244\232\350\265\204\346\272\220.md" similarity index 56% rename from "content/zh/docs/Installation/\346\233\264\345\244\232\350\265\204\346\272\220.md" rename to "docs/zh/docs/Installation/\346\233\264\345\244\232\350\265\204\346\272\220.md" index 8782e7d2468b4bbb59dbef0bfc93384de20cdce9..7c0594e3370932f67811b364e240e1560d074060 100644 --- "a/content/zh/docs/Installation/\346\233\264\345\244\232\350\265\204\346\272\220.md" +++ "b/docs/zh/docs/Installation/\346\233\264\345\244\232\350\265\204\346\272\220.md" @@ -1,4 +1,4 @@ # 参考资料 -- [如何构建树莓派镜像文件](https://gitee.com/openeuler/raspberrypi/blob/master/documents/openEuler镜像的构建.md) -- [如何使用树莓派](https://gitee.com/openeuler/raspberrypi/blob/master/documents/树莓派使用.md) \ No newline at end of file +- [如何构建树莓派镜像文件](https://gitee.com/openeuler/raspberrypi/blob/master/documents/openEuler镜像的构建.md\) +- [如何使用树莓派](https://gitee.com/openeuler/raspberrypi/blob/master/documents/树莓派使用.md\) \ No newline at end of file diff --git "a/docs/zh/docs/KubeOS/figures/\345\256\271\345\231\250OS\346\226\207\344\273\266\345\270\203\345\261\200.png" "b/docs/zh/docs/KubeOS/figures/\345\256\271\345\231\250OS\346\226\207\344\273\266\345\270\203\345\261\200.png" new file mode 100644 index 0000000000000000000000000000000000000000..7dfdcb3aaef79462ecc196159659b22cb21b9a9d Binary files /dev/null and "b/docs/zh/docs/KubeOS/figures/\345\256\271\345\231\250OS\346\226\207\344\273\266\345\270\203\345\261\200.png" differ diff --git "a/docs/zh/docs/KubeOS/figures/\345\256\271\345\231\250OS\346\236\266\346\236\204.png" "b/docs/zh/docs/KubeOS/figures/\345\256\271\345\231\250OS\346\236\266\346\236\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..626071e62735bab2e33ec2a6f1a5839409d33319 Binary files /dev/null and "b/docs/zh/docs/KubeOS/figures/\345\256\271\345\231\250OS\346\236\266\346\236\204.png" differ diff --git a/docs/zh/docs/KubeOS/overview.md b/docs/zh/docs/KubeOS/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..beb6b093378dc4c24fd7d81e1f37081c1ebf6a91 --- /dev/null +++ b/docs/zh/docs/KubeOS/overview.md @@ -0,0 +1,9 @@ +# 容器OS升级指南 + +本文档介绍基于openEuler系统的容器OS升级特性的安装部署和使用方法,容器OS升级是使OS可以通过标准扩展方式接入调度系统,通过调度系统管理集群内节点的OS的升级。 + +本文档适用于使用openEuler系统并希望了解和使用容器OS的社区开发者、开源爱好者以及相关合作伙伴。使用人员需要具备以下经验和技能: + +* 熟悉Linux基本操作。 +* 对kubernetes和docker有一定了解 + diff --git a/docs/zh/docs/KubeOS/public_sys-resources/icon-note.gif b/docs/zh/docs/KubeOS/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/docs/KubeOS/public_sys-resources/icon-note.gif differ diff --git "a/docs/zh/docs/KubeOS/\344\275\277\347\224\250\346\226\271\346\263\225.md" "b/docs/zh/docs/KubeOS/\344\275\277\347\224\250\346\226\271\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..945cb69e85f1003d25ed5136db71ba56b1debff3 --- /dev/null +++ "b/docs/zh/docs/KubeOS/\344\275\277\347\224\250\346\226\271\346\263\225.md" @@ -0,0 +1,117 @@ +# 使用方法 + + + + + +- [使用方法](#使用方法) + + - [注意事项](#注意事项) + + - [升级指导](#升级指导) + + - [回退指导](#回退指导) + + - [使用场景](#使用场景) + + - [手动回退](#手动回退) + + - [工具回退](#工具回退) + + + + + +## 注意事项 + +1. 容器 OS 升级为所有软件包原子升级,默认不在容器 OS 内提供单包升级能力。 +2. 容器 OS 升级为双区升级的方式,不支持更多分区数量。 +3. 单节点的升级过程的日志可在节点的/var/log/messages文件查看。 +4. 请严格按照提供的升级和回退流程进行操作,异常调用顺序可能会导致系统无法升级或回退。 + +## 升级指导 + +编写YAML文件,在集群中部署 OS 的cr实例,用于部署cr实例的YAML示例如下: + +``` +apiVersion: upgrade.openeuler.org/v1alpha1 +kind: OS +metadata: + name: os-sample +spec: + osversion: KubeOS 1.0.0 + imageurl: edit.image.url + maxunavailable: 1 + checksum: image checksum + flagsafe: imageurl is safe or not +``` + +参数说明如下: + +| 参数 | 参数含义 | 是否必选 | +| -------------- | ----------------------------------- | -------- | +| osversion | 用于升级的镜像的 OS 版本 | 是 | +| imageurl | 用于升级的镜像的地址 | 是 | +| maxunavailable | 同时进行升级的节点数 | 是 | +| checksum | 用于升级的镜像的checksum(SHA-256)值 | 是 | +| flagsafe: | imageurl是否为安全的地址 | 是 | + +imageurl指定的地址里包含协议,只支持http或https协议。imageurl为https协议时为安全传输,imageurl为http地址时,需指定flagsafe为true,即用户明确该地址为安全时,才会下载镜像。如imageurl为http地址且没有指定flagsafe为true,默认该地址不安全,不会下载镜像并且在升级节点的日志中提示用户该地址不安全 + +对于imageurl,推荐使用https协议,使用https协议请确保升级的虚拟机已安装相应证书。如果镜像服务器由用户自己维护,需要用户自己进行签名,并保证升级节点已安装对应证书。用户将证书放在容器OS /etc/pki/ca-trust/source/anchors目录下,然后使用update-ca-trust extract 命令安装证书。地址由管理员传入,管理员应该保证网址的安全性,推荐采用内网地址。 + +假定将上面的YAML保存到upgrade_v1alpha1_os.yaml + +查看未升级的节点的 OS 版本 + +``` +kubectl get nodes -o custom-columns='NAME:.metadata.name,OS:.status.nodeInfo.osImage' +``` + +执行命令,在集群中部署cr实例后,节点会根据配置的参数信息进行升级。 + +``` +kubectl apply -f upgrade_v1alpha1_os.yaml +``` + +再次查看节点的 OS 版本来确认节点是否升级完成 + +``` +kubectl get nodes -o custom-columns='NAME:.metadata.name,OS:.status.nodeInfo.osImage' +``` + +> ![](./public_sys-resources/icon-note.gif)**说明**: +> +> 如果后续需要再次升级,与上面相同对 upgrade_v1alpha1_os.yaml 的 imageurl ,osversion,checksum,maxunavailable 或 flagsafe 字段进行相应修改。 + +## 回退指导 + +### 使用场景 + +- 虚拟机无法正常启动时,需要退回到上一可以启动的版本时进行回退操作,仅支持手动回退容器 OS 。 +- 虚拟机能够正常启动并且进入系统,需要将当前版本退回到老版本时进行回退操作,支持工具回退(类似升级方式)和手动回退,建议使用工具回退。 + +### 手动回退 + +手动重启虚拟机,选择第二启动项进行回退,手动回退仅支持回退到本次升级之前的版本。 + +### 工具回退 + +1. 修改 OS 的cr实例的YAML 配置文件(例如 upgrade_v1alpha1_os.yaml),将 imageurl 、osversion、checksum 和flagsafe 字段设置为期望回退的老版本镜像信息。 + +2. 在集群中更新cr。 + + ``` + kubectl apply -f upgrade_v1alpha1_os.yaml + ``` + + 更新完成后,节点会根据配置信息回退容器 OS。 + +3. 查看节点容器 OS 版本,确认回退是否成功。 + + ``` + kubectl get nodes -o custom-columns='NAME:.metadata.name,OS:.status.nodeInfo.osImage' + ``` + + + diff --git "a/docs/zh/docs/KubeOS/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" "b/docs/zh/docs/KubeOS/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" new file mode 100644 index 0000000000000000000000000000000000000000..9b9256b6f396417e4c4eda69261d402875377d8d --- /dev/null +++ "b/docs/zh/docs/KubeOS/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" @@ -0,0 +1,234 @@ +# 安装与部署 + +本章介绍如何安装和部署容器 OS 升级工具。 + + + + + +- [安装与部署](#安装与部署) + + - [软硬件要求](#软硬件要求) + + - [硬件要求](#硬件要求) + - [软件要求](#软件要求) + - [环境准备](#环境准备) + + - [安装容器OS升级工具](#安装容器os升级工具) + + - [部署容器OS升级工具](#部署容器os升级工具) + + - [制作os-operator和os-proxy镜像](#制作os-operator和os-proxy镜像) + - [制作容器OS镜像](#制作容器os镜像) + - [部署CRD,operator和proxy](#部署crd,operator和proxy) + + + + + +## 软硬件要求 + +### 硬件要求 + +* 当前支持 x86 与 arm 架构 + +### 软件要求 + +* 操作系统:openEuler 20.03 LTS SP3 + +### 环境准备 + +* 安装 openEuler 系统,安装方法参考《openEuler 20.03 LTS SP3 安装指南》 +* 安装 qemu-img,bc,parted,tar,yum,docker + +## 安装容器OS升级工具 + +安装容器 OS 升级工具的操作步骤如下: + +1. 配置 yum 源:openEuler 20.03 LTS SP3 和 openEuler 20.03 LTS SP3 EPOL + + ``` + [openEuler20.03] # openEuler 20.03 LTS SP3 官方发布源 + name=openEuler20.03 + baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/everything/$basearch/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/everything/$basearch/RPM-GPG-KEY-openEuler + ``` + + ``` + [Epol] # openEuler 20.03 LTS SP3:Epol 官方发布源 + name=Epol + baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/EPOL/main/$basearch/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/$basearch/RPM-GPG-KEY-openEuler + ``` + +2. 使用 root 账户安装容器 OS 升级工具: + + ```shell + # yum install KubeOS KubeOS-scripts -y + ``` + + +> ![](./public_sys-resources/icon-note.gif)**说明**: +> +> 容器 OS 升级工具会安装在 /opt/kubeOS 目录下,包括os-operator,os-proxy,os-agent二进制,制作容器 OS 工具及相应配置文件 。 + +## 部署容器OS升级工具 + +容器OS升级工具安装完成后,需要对此进行配置部署,本章介绍如何配置和部署容器OS升级工具。 + +### 制作os-operator和os-proxy镜像 + +#### 环境准备 + +使用 Docker 制作容器镜像,请先确保 Docker 已经安装和配置完成。 + +#### 操作步骤 + +1. 进入工作目录。 + + ```shell + cd /opt/kubeOS + ``` + +2. 指定 proxy 的镜像仓库、镜像名及版本。 + + ```shell + export IMG_PROXY=your_imageRepository/os-proxy_imageName:version + ``` + +3. 指定 operator 的镜像仓库、镜像名及版本。 + + ```shell + export IMG_OPERATOR=your_imageRepository/os-operator_imageName:version + ``` + +4. 请用户自行编写Dockerfile来构建镜像 ,Dockfile编写请注意以下几项 + + * os-operator和os-proxy镜像需要基于baseimage进行构建,请用户保证baseimage的安全性 + * 需将os-operator和os-proxy二进制文件分别拷贝到对应的镜像中 + * 请确保os-proxy镜像中os-proxy二进制文件件属主和属组为root,文件权限为500 + * 请确保os-operator镜像中os-operator二进制文件属主和属组为容器内运行os-operator进程的用户,文件权限为500 + * os-operator和os-proxy的二进制文件在镜像内的位置和容器启动时运行的命令需与部署的yaml中指定的字段相对应。 + + Dockerfile示例如下 + + ``` + FROM your_baseimage + COPY ./bin/proxy /proxy + ENTRYPOINT ["/proxy"] + ``` + + ``` + FROM your_baseimage + COPY --chown=6552:6552 ./bin/operator /operator + ENTRYPOINT ["/operator"] + ``` + + Dockerfile也可以使用多阶段构建。 + +5. 构建容器镜像(os-operator 和 os-proxy 镜像)。 + + ```shell + # 指定proxy的Dockerfile地址 + export DOCKERFILE_PROXY=your_dockerfile_proxy + # 指定operator的Dockerfile路径 + export DOCKERFILE_OPERATOR=your_dockerfile_operator + # 镜像构建 + docker build -t ${IMG_OPERATOR} -f ${DOCKERFILE_OPERATOR} . + docker build -t ${IMG_PROXY} -f ${DOCKERFILE_PROXY} . + ``` + +6. 将容器镜像 push 到镜像仓库。 + + ```shell + docker push ${IMG_OPERATOR} + docker push ${IMG_PROXY} + ``` + + +### 制作容器OS镜像 + +#### 注意事项 + +* 制作容器 OS 镜像需要使用 root 权限 +* 容器 OS 镜像制作工具的 rpm 包源为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。制作镜像时提供的 repo 文件中,yum 源建议同时配置 openEuler 具体版本的 everything 仓库和 EPOL 仓库 +* 使用默认 rpmlist 制作的容器OS镜像,默认和制作工具保存在相同路径,该分区至少有 25GiB 的剩余磁盘空间 +* 制作容器 OS 镜像时,不支持用户自定义配置挂载文件 + +#### 操作步骤 + +制作容器OS的命令格式为: + +**generate.sh** *REPO_PATH VERSION AGENT_PATH ENCRYPTED_PASSWD* + +其中各参数含义为: + +- REPO_PATH :repo 文件 路径 +- AGENT_PATH:os-agent 二进制路径 + +* VERSION :制作的容器 OS 镜像的版本 + +* ENCRYPTED_PASSWD:容器 OS 镜像的 root 用户密码,加密后的带盐值的密码,可以用 openssl、kiwi 等命令生成 + + +制作容器OS的步骤如下: + +1. 进入执行目录: + + ```shell + cd /opt/kubeOS/scripts + ``` + +2. 执行 generate.sh 制作容器 OS,参考命令如下: + + ```shell + bash generate.sh xx.repo v1 ../bin/os-agent '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' + ``` + 其中 xx.repo 为制作镜像所需要的 yum 源,yum 源建议配置为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。 + + 容器 OS 镜像制作完成后,会在 /opt/kubeOS/scripts 目录下生成: + + - qcow2 格式的系统镜像 system.qcow2。system.qcow2 大小默认为 20GiB,支持的根文件系统分区大小 < 2020 MiB,持久化分区 < 16GiB 。 + - 可用于升级的根文件系统分区镜像 update.img 。 + + 制作出来的容器 OS 镜像目前可用于 CPU 架构为 x86 和 arm 的虚拟机场景。 + + +### 部署CRD,operator和proxy + +#### 注意事项 + +* 请先部署 Kubernetes 集群,部署方法参考《openEuler 20.03 LTS SP3 Kubernetes 集群部署指南》 + +- 集群中准备进行升级的 Worker 节点的 OS 需要为使用上一节方式制作出来的容器 OS,如不是,请用 system.qcow2重新部署虚拟机,虚拟机部署请见《openEuler 20.03 LTS SP3 虚拟化用户指南》,Master节点目前不支持容器 OS 升级,请用openEuler 20.03 LTS SP3部署Master节点 +- 部署 OS 的 CRD(CustomResourceDefinition),os-operator,os-proxy 以及 RBAC (Role-based access control) 机制的 YAML 需要用户自行编写。 +- operator 和 proxy 部署在 kubernetes 集群中,operator 应部署为 deployment,proxy 应部署为damonset +- 尽量部署好 kubernetes 的安全措施,如 rbac 机制,pod 的 service account 和 security policy 配置等 + +#### 操作步骤 + +1. 准备 YAML 文件,包括用于部署 OS 的CRD、RBAC 机制、os- operator 和os- proxy 的 YAML 文件,可参考[yaml-example](https://gitee.com/openeuler/KubeOS/tree/master/docs/example/config)。假设分别为 crd.yaml、rbac.yaml、manager.yaml 。 + +2. 部署 CRD、RBAC、os-operator 和 os-proxy。假设 crd.yaml、rbac.yaml、manager.yaml 文件分别存放在当前目录的 config/crd、config/rbac、config/manager 目录下 ,参考命令如下: + + ```shell + kubectl apply -f confg/crd + kubectl apply -f config/rbac + kubectl apply -f config/manager + ``` + +3. 部署完成后,执行以下命令,确认各个组件是否正常启动。如果所有组件的 STATUS 为 Running,说明组件已经正常启动。 + + ```shell + kubectl get pods -A + ``` + + + + + + diff --git "a/docs/zh/docs/KubeOS/\350\256\244\350\257\206\345\256\271\345\231\250OS\345\215\207\347\272\247.md" "b/docs/zh/docs/KubeOS/\350\256\244\350\257\206\345\256\271\345\231\250OS\345\215\207\347\272\247.md" new file mode 100644 index 0000000000000000000000000000000000000000..c12842050ee3aaf0df34477d27ed5c7e0d2e7200 --- /dev/null +++ "b/docs/zh/docs/KubeOS/\350\256\244\350\257\206\345\256\271\345\231\250OS\345\215\207\347\272\247.md" @@ -0,0 +1,42 @@ +# 认识容器 OS 升级 + +## 概述 + +在云场景中,容器和 kubernetes 的应用越来越广泛。然而,当前对容器和 OS 进行独立管理的方式,往往面临功能冗余、两套调度系统协同困难的问题。另外,OS 的版本管理比较困难,相同版本的 OS 在使用过程中会各自安装、更新、删除软件包,一段时间后 OS 版本变得不一致,导致版本分裂,并且 OS 可能和业务紧耦合,造成大版本升级等比较困难。为了应对上述问题,openEuler 推出了基于openEuler的容器 OS 升级工具。 + +容器 OS 针对业务以容器的形式运行的场景,专门设计的一种轻量级操作系统。基于openEuler的容器 OS 升级工具将容器 OS 作为组件接入 kubernetes,使容器 OS 和业务处于同等地位,通过 kubernetes 集群统一管理容器和容器 OS,实现一套系统管理容器和OS。 + +openEuler 容器 OS 升级工具通过 kubernetes operator 扩展机制控制容器 OS 的升级流程,对容器 OS 进行整体升级,从而实现 OS 管理器和业务协同,该升级方式会在容器 OS 升级前,将业务迁移到其他非升级节点,减少 OS 升级、配置过程中对业务的影响。该升级方式是对容器 OS 进行原子升级,使 OS 一直向预想的状态同步,保证集群里的 OS 版本一致,避免版本分裂问题。 + +## 架构介绍 + +### 容器 OS 升级架构 + +**图1** 容器 OS 升级架构 + +![](./figures/容器OS架构.png) + +如图所示,容器 OS 主要包含三个组件 os-operator,os-proxy 和 os-agent 。os-operator 和 os-proxy 运行在容器中,部署在 kubernetes 集群内;os-agent 不属于集群,直接作为进程运行在 Worker Node 中。 + +- os-operator:全局的容器 OS 管理器,持续查看所有节点的容器 OS 版本信息,并根据用户配置的信息控制同时进行升级的节点个数,并标记准备升级的节点。 + +- os-proxy:单节点的 OS 管理器,持续查看当前节点的容器 OS 版本信息。如果当前节点被 os-operator 标记为准备升级的节点后,锁定节点并驱逐 pod,转发升级信息到 os-agent 。 + +- os-agent:接收来自 proxy 的信息,从 OSImage Server 下载用于更新的容器 OS 镜像,然后进行升级并重启节点。 + + +### 容器 OS 文件系统 + +**图 2** 容器 OS 文件系统布局 + +![](./figures/容器OS文件布局.png) + + + +如图所示,容器 OS 包含四个分区: + +- boot 分区:grub2文件分区 +- Persist 分区:用于存放持久性用户数据,容器 OS 升级时,该分区的数据也会保留 +- 两个 root 分区:容器 OS 采用双分区模式,将 root 分区划分为 rootA 和 rootB。假定初始化时,系统运行在 rootA 分区上,当进行系统更新时,会下载新系统到 rootB 分区,grub会有两个启动项分别为A,B,将 grub 默认启动项设置为B,最后会重启虚拟机。虚拟机启动后容器 OS 将运行在刚更新过的 rootB 分区上。 + +容器OS的root文件系统为只读,用户的持久化数据存放在Persist持久化数据分区 。 \ No newline at end of file diff --git a/docs/zh/docs/Kubernetes/Kubernetes.md b/docs/zh/docs/Kubernetes/Kubernetes.md new file mode 100644 index 0000000000000000000000000000000000000000..3e3622270b18aeebb314b666cbac1d9d5870bf7f --- /dev/null +++ b/docs/zh/docs/Kubernetes/Kubernetes.md @@ -0,0 +1,14 @@ +# Kubernetes 集群部署指南 + +**声明:kubernetes软件包目前收入在openEuler的EPOL仓,本文档仅适用于实验和学习环境,不适用于商用环境** + +本文档介绍在 openEuler 操作系统上,通过二进制部署 K8S 集群的一个参考方法。 + +说明:本文所有操作均使用 `root`权限执行。 + +## 集群状态 + +本文所使用的集群状态如下: + +- 集群结构:6 个 `openEuler 20.03 LTS SP3`系统的虚拟机,3 个 master 和 3 个 node 节点 +- 物理机:`openEuler 20.03 LTS SP3`的 `x86/ARM`服务器 diff --git "a/docs/zh/docs/Kubernetes/\345\207\206\345\244\207\350\231\232\346\213\237\346\234\272.md" "b/docs/zh/docs/Kubernetes/\345\207\206\345\244\207\350\231\232\346\213\237\346\234\272.md" new file mode 100644 index 0000000000000000000000000000000000000000..6b796c76b3ee40c833212a336b59431f5e3893e0 --- /dev/null +++ "b/docs/zh/docs/Kubernetes/\345\207\206\345\244\207\350\231\232\346\213\237\346\234\272.md" @@ -0,0 +1,152 @@ +# 准备虚拟机 + + +本章介绍使用 virt manager 安装虚拟机的方法,如果您已经准备好虚拟机,可以跳过本章节。 + +## 安装依赖工具 + +安装虚拟机,会依赖相关工具,安装依赖并使能 libvirtd 服务的参考命令如下(如果需要代理,请先配置代理): + +```bash +$ dnf install virt-install virt-manager libvirt-daemon-qemu edk2-aarch64.noarch virt-viewer +$ systemctl start libvirtd +$ systemctl enable libvirtd +``` + +## 准备虚拟机磁盘文件 + +```bash +$ dnf install -y qemu-img +$ virsh pool-define-as vmPool --type dir --target /mnt/vm/images/ +$ virsh pool-build vmPool +$ virsh pool-start vmPool +$ virsh pool-autostart vmPool +$ virsh vol-create-as --pool vmPool --name master0.img --capacity 200G --allocation 1G --format qcow2 +$ virsh vol-create-as --pool vmPool --name master1.img --capacity 200G --allocation 1G --format qcow2 +$ virsh vol-create-as --pool vmPool --name master2.img --capacity 200G --allocation 1G --format qcow2 +$ virsh vol-create-as --pool vmPool --name node1.img --capacity 300G --allocation 1G --format qcow2 +$ virsh vol-create-as --pool vmPool --name node2.img --capacity 300G --allocation 1G --format qcow2 +$ virsh vol-create-as --pool vmPool --name node3.img --capacity 300G --allocation 1G --format qcow2 +``` + +## 打开 VNC 防火墙端口 + +**方法一** + +1. 查询端口 + + ```shell + $ netstat -lntup | grep qemu-kvm + ``` + +2. 打开 VNC 的防火墙端口。假设端口从 5900 开始,参考命令如下: + + ```shell + $ firewall-cmd --zone=public --add-port=5900-6000/tcp + ``` + + + +**方法二** + +直接关闭防火墙 + +```shell +$ systemctl stop firewalld +``` + + + +## 准备虚拟机配置文件 + +创建虚拟机需要虚拟机配置文件。假设配置文件为 master.xml ,以虚拟机 hostname 为 k8smaster0 的节点为例,参考配置如下: + +```bash + cat master.xml + + + k8smaster0 + 8 + 8 + + hvm + /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw + /var/lib/libvirt/qemu/nvram/k8smaster0.fd + + + + + + + + + 1 + + destroy + restart + restart + + /usr/libexec/qemu-kvm + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +由于虚拟机相关配置必须唯一,新增虚拟机需要适配修改如下内容,保证虚拟机的唯一性: + +- name:虚拟机 hostname,建议尽量小写。例中为 `k8smaster0` +- nvram:nvram的句柄文件路径,需要全局唯一。例中为 `/var/lib/libvirt/qemu/nvram/k8smaster0.fd` +- disk 的 source file:虚拟机磁盘文件路径。例中为 `/mnt/vm/images/master0.img` +- interface 的 mac address:interface 的 mac 地址。例中为 `52:54:00:00:00:80` + + + +## 安装虚拟机 + +1. 创建并启动虚拟机 + + ```shell + $ virsh define master.xml + $ virsh start k8smaster0 + ``` + +2. 获取虚拟机的 VNC 端口号 + + ```shell + $ virsh vncdisplay k8smaster0 + ``` + +3. 使用虚拟机链接工具,例如 VNC Viewer 远程链接虚拟机,并根据提示依次选择配置,完成系统安装 + +4. 设置虚拟机 hostname,例如设置为 k8smaster0 + + ```shell + $ hostnamectl set-hostname k8smaster0 + ``` diff --git "a/docs/zh/docs/Kubernetes/\345\207\206\345\244\207\350\257\201\344\271\246.md" "b/docs/zh/docs/Kubernetes/\345\207\206\345\244\207\350\257\201\344\271\246.md" new file mode 100644 index 0000000000000000000000000000000000000000..9ac080a5e893eb1a69eeddd6529835d344ab1e3c --- /dev/null +++ "b/docs/zh/docs/Kubernetes/\345\207\206\345\244\207\350\257\201\344\271\246.md" @@ -0,0 +1,388 @@ + +# 准备证书 + + +**声明:本文使用的证书为自签名,不能用于商用环境** + +部署集群前,需要生成集群各组件之间通信所需的证书。本文使用开源 CFSSL 作为验证部署工具,以便用户了解证书的配置和集群组件之间证书的关联关系。用户可以根据实际情况选择合适的工具,例如 OpenSSL 。 + +## 编译安装 CFSSL + +编译安装 CFSSL 的参考命令如下(需要互联网下载权限,需要配置代理的请先完成配置), + +```bash +$ wget --no-check-certificate https://github.com/cloudflare/cfssl/archive/v1.5.0.tar.gz +$ tar -zxf v1.5.0.tar.gz +$ cd cfssl-1.5.0/ +$ make -j6 +$ cp bin/* /usr/local/bin/ +``` + +## 生成根证书 + +编写 CA 配置文件,例如 ca-config.json: + +```bash +$ cat ca-config.json | jq +{ + "signing": { + "default": { + "expiry": "8760h" + }, + "profiles": { + "kubernetes": { + "usages": [ + "signing", + "key encipherment", + "server auth", + "client auth" + ], + "expiry": "8760h" + } + } + } +} +``` + +编写 CA CSR 文件,例如 ca-csr.json: + +```bash +$ cat ca-csr.json | jq +{ + "CN": "Kubernetes", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "openEuler", + "OU": "WWW", + "ST": "BinJiang" + } + ] +} +``` + +生成 CA 证书和密钥: +```bash +$ cfssl gencert -initca ca-csr.json | cfssljson -bare ca +``` + +得到如下证书: + +```bash +ca.csr ca-key.pem ca.pem +``` + +## 生成 admin 账户证书 + +admin 是 K8S 用于系统管理的一个账户,编写 admin 账户的 CSR 配置,例如 admin-csr.json: +```bash +cat admin-csr.json | jq +{ + "CN": "admin", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "system:masters", + "OU": "Containerum", + "ST": "BinJiang" + } + ] +} +``` + +生成证书: +```bash +$ cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin +``` + +结果如下: +```bash +admin.csr admin-key.pem admin.pem +``` + +## 生成 service-account 账户证书 + +编写 service-account 账户的 CSR 配置文件,例如 service-account-csr.json: +```bash +cat service-account-csr.json | jq +{ + "CN": "service-accounts", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "Kubernetes", + "OU": "openEuler k8s install", + "ST": "BinJiang" + } + ] +} +``` + +生成证书: +```bash +$ cfssl gencert -ca=../ca/ca.pem -ca-key=../ca/ca-key.pem -config=../ca/ca-config.json -profile=kubernetes service-account-csr.json | cfssljson -bare service-account +``` + +结果如下: +```bash +service-account.csr service-account-key.pem service-account.pem +``` + +## 生成 kube-controller-manager 组件证书 + +编写 kube-controller-manager 的 CSR 配置: +```bash +{ + "CN": "system:kube-controller-manager", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "system:kube-controller-manager", + "OU": "openEuler k8s kcm", + "ST": "BinJiang" + } + ] +} +``` + +生成证书: +```bash +$ cfssl gencert -ca=../ca/ca.pem -ca-key=../ca/ca-key.pem -config=../ca/ca-config.json-profile=kubernetes kube-controller-manager-csr.json | cfssljson -bare kube-controller-manager +``` + +结果如下: +```bash +kube-controller-manager.csr kube-controller-manager-key.pem kube-controller-manager.pem +``` + +## 生成 kube-proxy 证书 + +编写 kube-proxy 的 CSR 配置: +```bash +{ + "CN": "system:kube-proxy", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "system:node-proxier", + "OU": "openEuler k8s kube proxy", + "ST": "BinJiang" + } + ] +} +``` + +生成证书: +```bash +$ cfssl gencert -ca=../ca/ca.pem -ca-key=../ca/ca-key.pem -config=../ca/ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy +``` + +结果如下: +```bash +kube-proxy.csr kube-proxy-key.pem kube-proxy.pem +``` + +## 生成 kube-scheduler 证书 + +编写 kube-scheduler 的 CSR 配置: +```bash +{ + "CN": "system:kube-scheduler", + "key": { + "algo": "rsa", + "size": 2048 + }, + "names": [ + { + "C": "CN", + "L": "HangZhou", + "O": "system:kube-scheduler", + "OU": "openEuler k8s kube scheduler", + "ST": "BinJiang" + } + ] +} +``` + +生成证书: +```bash +$ cfssl gencert -ca=../ca/ca.pem -ca-key=../ca/ca-key.pem -config=../ca/ca-config.json -profile=kubernetes kube-scheduler-csr.json | cfssljson -bare kube-scheduler +``` + +结果如下: +```bash +kube-scheduler.csr kube-scheduler-key.pem kube-scheduler.pem +``` + +## 生成 kubelet 证书 + +由于证书涉及到 kubelet 所在机器的 hostname 和 IP 地址信息,因此每个 node 节点配置不尽相同,所以编写脚本完成,生成脚本如下: +```bash +$ cat node_csr_gen.bash + +#!/bin/bash + +nodes=(k8snode1 k8snode2 k8snode3) +IPs=("192.168.122.157" "192.168.122.158" "192.168.122.159") + +for i in "${!nodes[@]}"; do + +cat > "${nodes[$i]}-csr.json" <24 | +| k8smaster1 | 52:54:00:00:00:81 | 192.168.122.155/24 | +| k8smaster2 | 52:54:00:00:00:82 | 192.168.122.156/24 | +| k8snode1 | 52:54:00:00:00:83 | 192.168.122.157/24 | +| k8snode2 | 52:54:00:00:00:84 | 192.168.122.158/24 | +| k8snode3 | 52:54:00:00:00:85 | 192.168.122.159/24 | + + diff --git "a/docs/zh/docs/Kubernetes/\351\203\250\347\275\262Node\350\212\202\347\202\271\347\273\204\344\273\266.md" "b/docs/zh/docs/Kubernetes/\351\203\250\347\275\262Node\350\212\202\347\202\271\347\273\204\344\273\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..d6f4fa10ec981f5e5ea091b76721b7a5eff85c10 --- /dev/null +++ "b/docs/zh/docs/Kubernetes/\351\203\250\347\275\262Node\350\212\202\347\202\271\347\273\204\344\273\266.md" @@ -0,0 +1,384 @@ +# 部署 Node 节点组件 + + + +本章节仅以`k8snode1`节点为例。 + +## 环境准备 + +```bash +# 内网需要配置代理 +$ dnf install -y docker iSulad conntrack-tools socat containernetworking-plugins +$ swapoff -a +$ mkdir -p /etc/kubernetes/pki/ +$ mkdir -p /etc/cni/net.d +$ mkdir -p /opt/cni +# 删除默认kubeconfig +$ rm /etc/kubernetes/kubelet.kubeconfig + +## 使用isulad作为运行时 ######## +# 配置iSulad +cat /etc/isulad/daemon.json +{ + "registry-mirrors": [ + "docker.io" + ], + "insecure-registries": [ + "k8s.gcr.io", + "quay.io" + ], + "pod-sandbox-image": "k8s.gcr.io/pause:3.2",# pause类型 + "network-plugin": "cni", # 置空表示禁用cni网络插件则下面两个路径失效, 安装插件后重启isulad即可 + "cni-bin-dir": "/usr/libexec/cni/", + "cni-conf-dir": "/etc/cni/net.d", +} + +# 在iSulad环境变量中添加代理,下载镜像 +cat /usr/lib/systemd/system/isulad.service +[Service] +Type=notify +Environment="HTTP_PROXY=http://name:password@proxy:8080" +Environment="HTTPS_PROXY=http://name:password@proxy:8080" + +# 重启iSulad并设置为开机自启 +systemctl daemon-reload +systemctl restart isulad + + + + +## 如果使用docker作为运行时 ######## +$ dnf install -y docker +# 如果需要代理的环境,可以给docker配置代理,新增配置文件http-proxy.conf,并编写如下内容,替换name,password和proxy-addr为实际的配置。 +$ cat /etc/systemd/system/docker.service.d/http-proxy.conf +[Service] +Environment="HTTP_PROXY=http://name:password@proxy-addr:8080" +$ systemctl daemon-reload +$ systemctl restart docker +``` + +## 创建 kubeconfig 配置文件 + +对各节点依次如下操作创建配置文件: + +```bash +$ kubectl config set-cluster openeuler-k8s \ + --certificate-authority=/etc/kubernetes/pki/ca.pem \ + --embed-certs=true \ + --server=https://192.168.122.154:6443 \ + --kubeconfig=k8snode1.kubeconfig + +$ kubectl config set-credentials system:node:k8snode1 \ + --client-certificate=/etc/kubernetes/pki/k8snode1.pem \ + --client-key=/etc/kubernetes/pki/k8snode1-key.pem \ + --embed-certs=true \ + --kubeconfig=k8snode1.kubeconfig + +$ kubectl config set-context default \ + --cluster=openeuler-k8s \ + --user=system:node:k8snode1 \ + --kubeconfig=k8snode1.kubeconfig + +$ kubectl config use-context default --kubeconfig=k8snode1.kubeconfig +``` + +**注:修改k8snode1为对应节点名** + +## 拷贝证书 + +和控制面一样,所有证书、密钥和相关配置都放到`/etc/kubernetes/pki/`目录。 + +```bash +$ ls /etc/kubernetes/pki/ +ca.pem k8snode1.kubeconfig kubelet_config.yaml kube-proxy-key.pem kube-proxy.pem +k8snode1-key.pem k8snode1.pem kube_proxy_config.yaml kube-proxy.kubeconfig +``` + +## CNI 网络配置 + +先通过 containernetworking-plugins 作为 kubelet 使用的 cni 插件,后续可以引入 calico,flannel 等插件,增强集群的网络能力。 + +```bash +# 桥网络配置 +$ cat /etc/cni/net.d/10-bridge.conf +{ + "cniVersion": "0.3.1", + "name": "bridge", + "type": "bridge", + "bridge": "cnio0", + "isGateway": true, + "ipMasq": true, + "ipam": { + "type": "host-local", + "subnet": "10.244.0.0/16", + "gateway": "10.244.0.1" + }, + "dns": { + "nameservers": [ + "10.244.0.1" + ] + } +} + +# 回环网络配置 +$ cat /etc/cni/net.d/99-loopback.conf +{ + "cniVersion": "0.3.1", + "name": "lo", + "type": "loopback" +} +``` + +## 部署 kubelet 服务 + +### kubelet 依赖的配置文件 + +```bash +$ cat /etc/kubernetes/pki/kubelet_config.yaml +kind: KubeletConfiguration +apiVersion: kubelet.config.k8s.io/v1beta1 +authentication: + anonymous: + enabled: false + webhook: + enabled: true + x509: + clientCAFile: /etc/kubernetes/pki/ca.pem +authorization: + mode: Webhook +clusterDNS: +- 10.32.0.10 +clusterDomain: cluster.local +runtimeRequestTimeout: "15m" +tlsCertFile: "/etc/kubernetes/pki/k8snode1.pem" +tlsPrivateKeyFile: "/etc/kubernetes/pki/k8snode1-key.pem" +``` + +**注意:clusterDNS 的地址为:10.32.0.10,必须和之前设置的 service-cluster-ip-range 一致** + +### 编写 systemd 配置文件 + +```bash +$ cat /usr/lib/systemd/system/kubelet.service +[Unit] +Description=kubelet: The Kubernetes Node Agent +Documentation=https://kubernetes.io/docs/ +Wants=network-online.target +After=network-online.target + +[Service] +ExecStartPre=swapoff -a +ExecStart=/usr/bin/kubelet \ + --config=/etc/kubernetes/pki/kubelet_config.yaml \ + --network-plugin=cni \ + --pod-infra-container-image=k8s.gcr.io/pause:3.2 \ + --kubeconfig=/etc/kubernetes/pki/k8snode1.kubeconfig \ + --register-node=true \ + --hostname-override=k8snode1 \ + --cni-bin-dir="/usr/libexec/cni,/opt/cni/bin" \ + --v=2 + +Restart=always +StartLimitInterval=0 +RestartSec=10 + +[Install] +WantedBy=multi-user.target +``` + +**注意:如果使用isulad作为runtime,需要增加如下配置** + +```bash +--container-runtime=remote \ +--container-runtime-endpoint=unix:///var/run/isulad.sock \ +``` + +## 部署 kube-proxy + +### kube-proxy 依赖的配置文件 + +```bash +cat /etc/kubernetes/pki/kube_proxy_config.yaml +kind: KubeProxyConfiguration +apiVersion: kubeproxy.config.k8s.io/v1alpha1 +clientConnection: + kubeconfig: /etc/kubernetes/pki/kube-proxy.kubeconfig +clusterCIDR: 10.244.0.0/16 +mode: "iptables" +``` + +### 编写 systemd 配置文件 + +```bash +$ cat /usr/lib/systemd/system/kube-proxy.service +[Unit] +Description=Kubernetes Kube-Proxy Server +Documentation=https://kubernetes.io/docs/reference/generated/kube-proxy/ +After=network.target + +[Service] +EnvironmentFile=-/etc/kubernetes/config +EnvironmentFile=-/etc/kubernetes/proxy +ExecStart=/usr/bin/kube-proxy \ + $KUBE_LOGTOSTDERR \ + $KUBE_LOG_LEVEL \ + --config=/etc/kubernetes/pki/kube_proxy_config.yaml \ + --hostname-override=k8snode1 \ + $KUBE_PROXY_ARGS +Restart=on-failure +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target +``` + +## 启动组件服务 + +```bash +$ systemctl enable kubelet kube-proxy +$ systemctl start kubelet kube-proxy +``` + +其他节点依次部署即可。 + +## 验证集群状态 + +等待几分钟,使用如下命令查看node状态: + +```bash +$ kubectl get nodes --kubeconfig /etc/kubernetes/pki/admin.kubeconfig +NAME STATUS ROLES AGE VERSION +k8snode1 Ready 17h v1.20.2 +k8snode2 Ready 19m v1.20.2 +k8snode3 Ready 12m v1.20.2 +``` + +## 部署 coredns + +coredns可以部署到node节点或者master节点,本文这里部署到节点`k8snode1`。 + +### 编写 coredns 配置文件 + +```bash +$ cat /etc/kubernetes/pki/dns/Corefile +.:53 { + errors + health { + lameduck 5s + } + ready + kubernetes cluster.local in-addr.arpa ip6.arpa { + pods insecure + endpoint https://192.168.122.154:6443 + tls /etc/kubernetes/pki/ca.pem /etc/kubernetes/pki/admin-key.pem /etc/kubernetes/pki/admin.pem + kubeconfig /etc/kubernetes/pki/admin.kubeconfig default + fallthrough in-addr.arpa ip6.arpa + } + prometheus :9153 + forward . /etc/resolv.conf { + max_concurrent 1000 + } + cache 30 + loop + reload + loadbalance +} +``` + +说明: + +- 监听53端口; +- 设置kubernetes插件配置:证书、kube api的URL; + +### 准备 systemd 的 service 文件 + +```bash +cat /usr/lib/systemd/system/coredns.service +[Unit] +Description=Kubernetes Core DNS server +Documentation=https://github.com/coredns/coredns +After=network.target + +[Service] +ExecStart=bash -c "KUBE_DNS_SERVICE_HOST=10.32.0.10 coredns -conf /etc/kubernetes/pki/dns/Corefile" + +Restart=on-failure +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target +``` + +### 启动服务 + +```bash +$ systemctl enable coredns +$ systemctl start coredns +``` + +### 创建 coredns 的 Service 对象 + +```bash +$ cat coredns_server.yaml +apiVersion: v1 +kind: Service +metadata: + name: kube-dns + namespace: kube-system + annotations: + prometheus.io/port: "9153" + prometheus.io/scrape: "true" + labels: + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" + kubernetes.io/name: "CoreDNS" +spec: + clusterIP: 10.32.0.10 + ports: + - name: dns + port: 53 + protocol: UDP + - name: dns-tcp + port: 53 + protocol: TCP + - name: metrics + port: 9153 + protocol: TCP +``` + +### 创建 coredns 的 endpoint 对象 + +```bash +$ cat coredns_ep.yaml +apiVersion: v1 +kind: Endpoints +metadata: + name: kube-dns + namespace: kube-system +subsets: + - addresses: + - ip: 192.168.122.157 + ports: + - name: dns-tcp + port: 53 + protocol: TCP + - name: dns + port: 53 + protocol: UDP + - name: metrics + port: 9153 + protocol: TCP +``` + +### 确认 coredns 服务 + +```bash +# 查看service对象 +$ kubectl get service -n kube-system kube-dns +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +kube-dns ClusterIP 10.32.0.10 53/UDP,53/TCP,9153/TCP 51m +# 查看endpoint对象 +$ kubectl get endpoints -n kube-system kube-dns +NAME ENDPOINTS AGE +kube-dns 192.168.122.157:53,192.168.122.157:53,192.168.122.157:9153 52m +``` \ No newline at end of file diff --git "a/docs/zh/docs/Kubernetes/\351\203\250\347\275\262\346\216\247\345\210\266\351\235\242\347\273\204\344\273\266.md" "b/docs/zh/docs/Kubernetes/\351\203\250\347\275\262\346\216\247\345\210\266\351\235\242\347\273\204\344\273\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..6d5884c5a1ef23adbdbcaafb26446a2a81597b1e --- /dev/null +++ "b/docs/zh/docs/Kubernetes/\351\203\250\347\275\262\346\216\247\345\210\266\351\235\242\347\273\204\344\273\266.md" @@ -0,0 +1,364 @@ +# 部署控制面组件 + +## 打开依赖端口 + +``` +$ firewall-cmd --zone=public --add-port=6443/tcp +$ firewall-cmd --zone=public --add-port=10251-10252/tcp +``` + + +## 准备所有组件的 kubeconfig + +### kube-proxy + +```bash +$ kubectl config set-cluster openeuler-k8s --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=https://192.168.122.154:6443 --kubeconfig=kube-proxy.kubeconfig +$ kubectl config set-credentials system:kube-proxy --client-certificate=/etc/kubernetes/pki/kube-proxy.pem --client-key=/etc/kubernetes/pki/kube-proxy-key.pem --embed-certs=true --kubeconfig=kube-proxy.kubeconfig +$ kubectl config set-context default --cluster=openeuler-k8s --user=system:kube-proxy --kubeconfig=kube-proxy.kubeconfig +$ kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig +``` + +### kube-controller-manager + +```bash +$ kubectl config set-cluster openeuler-k8s --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=https://127.0.0.1:6443 --kubeconfig=kube-controller-manager.kubeconfig +$ kubectl config set-credentials system:kube-controller-manager --client-certificate=/etc/kubernetes/pki/kube-controller-manager.pem --client-key=/etc/kubernetes/pki/kube-controller-manager-key.pem --embed-certs=true --kubeconfig=kube-controller-manager.kubeconfig +$ kubectl config set-context default --cluster=openeuler-k8s --user=system:kube-controller-manager --kubeconfig=kube-controller-manager.kubeconfig +$ kubectl config use-context default --kubeconfig=kube-controller-manager.kubeconfig +``` + +### kube-scheduler + +```bash +$ kubectl config set-cluster openeuler-k8s --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=https://127.0.0.1:6443 --kubeconfig=kube-scheduler.kubeconfig +$ kubectl config set-credentials system:kube-scheduler --client-certificate=/etc/kubernetes/pki/kube-scheduler.pem --client-key=/etc/kubernetes/pki/kube-scheduler-key.pem --embed-certs=true --kubeconfig=kube-scheduler.kubeconfig +$ kubectl config set-context default --cluster=openeuler-k8s --user=system:kube-scheduler --kubeconfig=kube-scheduler.kubeconfig +$ kubectl config use-context default --kubeconfig=kube-scheduler.kubeconfig +``` + +### admin + +```bash +$ kubectl config set-cluster openeuler-k8s --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=https://127.0.0.1:6443 --kubeconfig=admin.kubeconfig +$ kubectl config set-credentials admin --client-certificate=/etc/kubernetes/pki/admin.pem --client-key=/etc/kubernetes/pki/admin-key.pem --embed-certs=true --kubeconfig=admin.kubeconfig +$ kubectl config set-context default --cluster=openeuler-k8s --user=admin --kubeconfig=admin.kubeconfig +$ kubectl config use-context default --kubeconfig=admin.kubeconfig +``` + +### 获得相关 kubeconfig 配置文件 + +```bash +admin.kubeconfig kube-proxy.kubeconfig kube-controller-manager.kubeconfig kube-scheduler.kubeconfig +``` + +## 生成密钥提供者的配置 + +api-server 启动时需要提供一个密钥对`--encryption-provider-config=/etc/kubernetes/pki/encryption-config.yaml`,本文通过 urandom 生成一个: + +```bash +$ cat generate.bash +#!/bin/bash + +ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64) + +cat > encryption-config.yaml < - [快速入门](#快速入门) @@ -87,7 +87,7 @@

硬盘

-

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

+

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

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

@@ -100,13 +100,10 @@ 请按以下步骤获取openEuler的发布包和校验文件: -> ![](public_sys-resources/icon-note.gif) **说明:** -> AArch64架构的发布包支持UEFI模式,x86\_64架构的发布包支持UEFI模式和Legacy模式。 - 1. 登录[openEuler社区](https://openeuler.org)网站。 2. 单击“下载”。 3. 单击“获取ISO:”后面的“Link”,显示版本列表。 -4. 单击“openEuler-20.09-beta”,进入openEuler 20.09 beta版本下载列表。 +4. 单击“openEuler-20.03-LTS-SP3”,进入openEuler 20.03-LTS-SP3版本下载列表。 5. 单击“ISO”,进入ISO下载列表。 - aarch64:AArch64架构的ISO。 - x86\_64:x86\_64架构的ISO。 @@ -115,13 +112,13 @@ 6. 根据实际待安装环境的架构选择需要下载的openEuler的发布包和校验文件。 - 若为AArch64架构。 1. 单击“aarch64”。 - 2. 单击“openEuler-20.09-beta-aarch64-dvd.iso”,将openEuler发布包下载到本地。 - 3. 单击“openEuler-20.09-beta-aarch64-dvd.iso.sha256sum”,将openEuler校验文件下载到本地。 + 2. 单击“openEuler-20.03-LTS-SP3-aarch64-dvd.iso”,将openEuler发布包下载到本地。 + 3. 单击“openEuler-20.03-LTS-SP3-aarch64-dvd.iso.sha256sum”,将openEuler校验文件下载到本地。 - 若为x86\_64架构。 1. 单击“x86\_64”。 - 2. 单击“openEuler-20.09-beta-x86\_64-dvd.iso”,将openEuler发布包下载到本地。 - 3. 单击“openEuler-20.09-beta-x86\_64-dvd.iso.sha256sum”,将openEuler校验文件下载到本地。 + 2. 单击“openEuler-20.03-LTS-SP3-x86\_64-dvd.iso”,将openEuler发布包下载到本地。 + 3. 单击“openEuler-20.03-LTS-SP3-x86\_64-dvd.iso.sha256sum”,将openEuler校验文件下载到本地。 @@ -132,13 +129,13 @@ 1. 获取校验文件中的校验值。执行命令如下: ``` - $ cat openEuler-20.09-beta-aarch64-dvd.iso.sha256sum + $ cat openEuler-20.03-LTS-SP3-aarch64-dvd.iso.sha256sum ``` 2. 计算文件的sha256校验值。执行命令如下: ``` - $ sha256sum openEuler-20.09-beta-aarch64-dvd.iso + $ sha256sum openEuler-20.03-LTS-SP3-aarch64-dvd.iso ``` 命令执行完成后,输出校验值。 @@ -156,7 +153,7 @@ 将“引导介质有效期”和“引导介质”分别设置为“单次有效”和“光驱”,并单击“保存”以保存配置。如[图1](#fig1011938131018)所示。 **图 1** 设置系统启动项 - ![](figures/设置系统启动项.png "设置系统启动项") + ![](./figures/Setting_the_System_Boot_Option.png) 3. 在上方标题栏中,选择“远程控制”,在左侧导航树中选择“远程控制”,显示“远程控制”界面。 @@ -165,30 +162,30 @@ 4. 在虚拟界面工具栏中,单击虚拟光驱工具如下图所示。 **图 2** 光驱图标 - ![](figures/光驱图标.png "光驱图标") + ![](./figures/CD-ROM_drive_icon.png) 弹出镜像对话框,如下图所示。 **图 3** 镜像对话框 - ![](figures/镜像对话框.png "镜像对话框") + ![](./figures/Image_dialog_box.png) 5. 在镜像对话框中,选择“镜像文件”, 并单击“浏览”。弹出“打开”对话框。 6. 选择镜像文件,单击“打开”。然后在镜像对话框中,单击“连接”。当“连接”显示为“断开”后,表示虚拟光驱已连接到服务器。 7. 在工具栏中,单击重启工具重启设备,如下图所示。 **图 4** 重启图标 - ![](figures/重启图标.png "重启图标") + ![](./figures/restarticon.png) 8. 设备重启后进入到openEuler操作系统安装引导界面,如[图5](#fig1648754873314)所示。 - >![](public_sys-resources/icon-note.gif) **说明:** - >- 如果60秒内未按任何键,系统将从默认选项“Test this media & install openEuler 20.09-beta”自动进入安装界面。 - >- 安装物理机时,如果使用键盘上下键无法选择启动选项,按“Enter”键无响应,可以单击BMC界面上的鼠标控制图标“![](figures/zh-cn_image_0229420473.png)”,设置“键鼠复位”。 + >![](./public_sys-resources/icon-note.gif) **说明:** + >- 如果60秒内未按任何键,系统将从默认选项“Test this media & install openEuler 20.03-LTS-SP3”自动进入安装界面。 + >- 安装物理机时,如果使用键盘上下键无法选择启动选项,按“Enter”键无响应,可以单击BMC界面上的鼠标控制图标“![](./figures/zh-cn_image_0229420473.png)”,设置“键鼠复位”。 **图 5** 安装引导界面 - + ![](./figures/Installation_wizard.png) -9. 在安装引导界面,按“Enter”,进入默认选项“Test this media & install openEuler 20.09-beta”的图形化安装界面。 +9. 在安装引导界面,按“Enter”,进入默认选项“Test this media & install openEuler 20.03-LTS-SP3”的图形化安装界面。 ## 安装 @@ -197,25 +194,25 @@ 1. 设置安装语言,默认为英语,用户可根据实际情况进行调整,如[图6](#fig874344811484)所示,选择“中文”。 **图 6** 选择语言 - + ![](./figures/selectlanguage.png) -2. 在安装概览界面,根据实际情况设置各配置项。 +2. 在安装概览界面,根据实际情况设置各配置项。 - 配置项有告警符号的,表示用户必须完成该选项配置后,告警符号消失,才能进行下一步操作。 - 配置项无告警符号的,表示该配置项已有默认配置。 - 所有配置项均无告警符号时用户才能单击“开始安装”进行系统安装。 **图 7** 安装概览 - + ![](./figures/Installation_Overview.png) 1. 选择“软件选择”,设置“软件选择”配置项。 用户需要根据实际的业务需求,在左侧选择一个“最小安装”,在右侧选择安装环境的附加选项,如[图8](#fig1133717611109)所示。 **图 8** 软件选择 - + ![](./figures/choosesoftware.png) - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >- 在最小安装的环境下,并非安装源中所有的包都会安装。如果用户需要使用的包未安装,可将安装源挂载到本地制作repo源,通过DNF工具单独安装。 >- 选择“虚拟化主机”时会默认安装虚拟化组件qemu、libvirt、edk2,且可在附件选项处选择是否安装ovs等组件。 @@ -225,28 +222,26 @@ 在安装位置页面中,您可以选择计算机中的本地可用存储设备。 - >![](public_sys-resources/icon-notice.gif) **须知:** + >![](./public_sys-resources/icon-notice.gif) **须知:** >在选择您需要安装的设备时,建议不要选择NVMe SSD存储介质作为操作系统的安装磁盘。 您还需要进行存储配置以便对系统分区。您可以手动配置分区,也可以选择让安装程序自动分区。如果是在未使用过的存储设备中执行全新安装,或者不需要保留该存储设备中任何数据,建议选择“自动”进行自动分区。如[图9](#fig153381468101)所示。 - - 若您需要对数据进行加密,若您选择“自动”进行自动分区时,则可以在“安装目标位置”界面选择“加密我的数据”;若您选择“自定义”进行手动分区时,则可以在“手动分区”界面中单击需要加密的挂载点并在“设备类型”区域中选择“加密”。然后单击左上角“完成”,设置磁盘加密口令。磁盘加密口令需要符合密码复杂度,具体请参考[密码复杂度](#密码复杂度)。 **图 9** 安装目标位置 - + ![](./figures/Target_installation_position.png) - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >- 在进行分区时,出于系统性能和安全的考虑,建议您划分如下单独分区:/boot、/var、/var/log 、/var/log/audit、/home、/tmp。 >- 系统如果配置了swap分区,当系统的物理内存不够用时,会使用swap分区。虽然 swap分区可以增大物理内存大小的限制,但是如果由于内存不足使用到swap分区,会增加系统的响应时间,性能变差。因此在物理内存充足或者性能敏感的系统中,不建议配置swap分区。 >- 如果需要拆分逻辑卷组则需要选择“自定义”进行手动分区,并在“手动分区”界面单击“卷组”区域中的“修改”按钮重新配置卷组。 设置完成后,请单击左上角“完成”返回“安装概览”页面。 - + 3. 选择“根密码”,设置“根密码”配置项。 在“ROOT密码”页面中,如[图10](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1323165793018)所示,根据[密码复杂度](#密码复杂度)输入密码并再次输入密码进行确认。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** > >- root帐户是用来执行关键系统管理任务,不建议您在日常工作及系统访问时使用root帐户。 > @@ -264,11 +259,11 @@ 4. 口令不能使用字典词汇。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** > 在已装好的openEuler环境中,可以通过`cracklib-unpacker /usr/share/cracklib/pw_dict > dictionary.txt`命令导出字典库文件dictionary.txt,用户可以查询密码是否在该字典中。 **图 10** root密码 - ![](figures/root密码.png "root密码") + ![](./figures/root_password.png) 设置完成后,单击左上角的“完成”返回“安装概览”页面。 @@ -277,10 +272,10 @@ 在创建用户的界面如[图11](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig1237715313319)所示。输入用户名,并设置密码,其中密码复杂度要求与root密码复杂度要求一致。另外您还可以通过“高级”选项设置用户主目录、用户组等,如[图12](#zh-cn_topic_0186390266_zh-cn_topic_0122145909_fig128716531312)所示。 **图 11** 创建用户 - + ![](./figures/createuser.png) **图 12** 高级用户配置 - ![](figures/高级用户配置.png "高级用户配置") + ![](./figures/Advanced_User_Configuration.png "高级用户配置") 完成设置后,单击左上角的“完成”返回“安装概览”页面。 @@ -289,20 +284,17 @@ 3. 单击“开始安装”进行系统安装,如[图13](#fig1717019357392)所示。 **图 13** 开始安装 - + ![](./figures/Installation_Procedure.png) +4. 安装完成后重启系统。 -6. 安装完成后重启系统。 + openEuler完成安装后,单击“重启”按钮,系统将重新启动。 - openEuler完成安装,如[图14](#zh-cn_topic_0186390267_zh-cn_topic_0122145917_fig1429512116338)所示。单击“重启”后,系统将重新启动。 - - **图 14** 完成安装 - + ## 查看系统信息 -系统安装完成并重启后直接进入系统命令行登录界面,输入安装过程中设置的用户和密码,进入openEuler操作系统,查看如下系统信息。若需要进行系统管理和配置操作,请参考《[openEuler 20.09 beta 管理员指南](../Administration/administration.html)》。 - +系统安装完成并重启后直接进入系统命令行登录界面,输入安装过程中设置的用户和密码,进入openEuler操作系统,查看如下系统信息。若需要进行系统管理和配置操作,请参考《[openEuler 20.03-LTS-SP3 管理员指南](https://openeuler.org/zh/docs/20.03_LTS_SP3/docs/Administration/administration.html)》。 - 查看系统信息,命令如下: ``` @@ -312,12 +304,12 @@ 例如,命令和输出如下: ``` - $ cat /etc/os-release + # cat /etc/os-release NAME="openEuler" - VERSION="20.09" + VERSION="20.03 (LTS-SP3)" ID="openEuler" - VERSION_ID="20.09" - PRETTY_NAME="openEuler 20.09" + VERSION_ID="20.03" + PRETTY_NAME="openEuler 20.03 (LTS-SP3)" ANSI_COLOR="0;31" ``` diff --git "a/docs/zh/docs/Releasenotes/CVE\346\274\217\346\264\236.md" "b/docs/zh/docs/Releasenotes/CVE\346\274\217\346\264\236.md" new file mode 100644 index 0000000000000000000000000000000000000000..45fda4e817fa0655079e760e78a17e43fba63b21 --- /dev/null +++ "b/docs/zh/docs/Releasenotes/CVE\346\274\217\346\264\236.md" @@ -0,0 +1,361 @@ +# CVE漏洞 + +| CVE | 包名 | 描述 | openeuler评分 | 修复情况 | +|------------------|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|------| +|CVE-2020-35452    | httpd | Apache HTTP Server versions 2.4.0 to 2.4.46 A specially crafted Digest nonce can cause a stack overflow in mod_auth_digest. There is no report of this overflow being exploitable, nor the Apache HTTP Server team could create one, though some particular compiler and/or compilation option might make it possible, with limited consequences anyway due to the size (a single byte) and the value (zero byte) of the overflow                                                                                 | 7.3         | 已修复  | +| CVE-2020-13950    | httpd | Apache HTTP Server versions 2.4.41 to 2.4.46 mod_proxy_http can be made to crash (NULL pointer dereference) with specially crafted requests using both Content-Length and Transfer-Encoding headers, leading to a Denial of Service                                                                                                                                                                                      | 7.5         | 已修复  | +| CVE-2021-33560    | libgcrypt | Libgcrypt before 1.8.8 and 1.9.x before 1.9.3 mishandles ElGamal encryption because it lacks exponent blinding to address a side-channel attack against mpi_powm, and the window size is not chosen appropriately. (There is also an interoperability problem because the selection of the k integer value does not properly consider the differences between basic ElGamal encryption and generalized ElGamal encryption.) This, for example, affects use of ElGamal in OpenPGP.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-3549    | binutils | An out of bounds flaw was found in GNU binutils objdump utility version 2.36. An attacker could use this flaw and pass a large section to avr_elf32_load_records_from_section() probably resulting in a crash or in some cases memory corruption. The highest threat from this vulnerability is to integrity as well as system availability.                                                                                                                 | 7.1         | 已修复  | +| CVE-2021-3560    | polkit | A flaw was found in polkit. When a requesting process disconnects from dbus-daemon just before the call to polkit_system_bus_name_get_creds_sync starts, the process cannot get a unique uid and pid of the process and it cannot verify the privileges of the requesting process. The highest threat from this vulnerability is to data confidentiality and integrity as well as system availability.                                                                                                                 | 7.8         | 已修复  | +| CVE-2020-27748    | xdg-utils | A flaw was found in the xdg-email component of xdg-utils-1.1.0-rc1 and newer. When handling mailto: URIs, xdg-email allows attachments to be discreetly added via the URI when being passed to Thunderbird. An attacker could potentially send a victim a URI that automatically attaches a sensitive file to a new email. If a victim user does not notice that an attachment was added and sends the email, this could result in sensitive information disclosure. It has been confirmed that the code behind this issue is in xdg-email and not in Thunderbird.                                                                                                                 | 6.5         | 已修复  | +| CVE-2021-26691    | httpd | In Apache HTTP Server versions 2.4.0 to 2.4.46 a specially crafted SessionHeader sent by an origin server could cause a heap overflow                                                                                                                 | 5.9         | 已修复  | +| CVE-2021-23017    | nginx | A security issue in nginx resolver was identified, which might allow an attacker who is able to forge UDP packets from the DNS server to cause 1-byte memory overwrite, resulting in worker process crash or potential other impact.                                                                                                                 | 9.8         | 已修复  | +| CVE-2021-31535    | libX11 | LookupCol.c in X.Org X through X11R7.7 and libX11 before 1.7.1 might allow remote attackers to execute arbitrary code. The libX11 XLookupColor request (intended for server-side color lookup) contains a flaw allowing a client to send color-name requests with a name longer than the maximum size allowed by the protocol (and also longer than the maximum packet size for normal-sized packets). The user-controlled data exceeding the maximum size is then interpreted by the server as additional X protocol requests and executed, e.g., to disable X server authorization completely. For example, if the victim encounters malicious terminal control sequences for color codes, then the attacker may be able to take full control of the running graphical session.                                                                                                                 | 9.8         | 已修复  | +| CVE-2021-3468    | avahi | A flaw was found in avahi in versions 0.6 up to 0.8. The event used to signal the termination of the client connection on the avahi Unix socket is not correctly handled in the client_work function, allowing a local attacker to trigger an infinite loop. The highest threat from this vulnerability is to the availability of the avahi service, which becomes unresponsive after this flaw is triggered.                                                                                                                 | 5.5         | 已修复  | +| CVE-2020-6950    | mojarra | Directory traversal in Eclipse Mojarra before 2.3.14 allows attackers to read arbitrary files via the loc parameter or con parameter.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-33620    | squid | Squid before 4.15 and 5.x before 5.0.6 allows remote servers to cause a denial of service (affecting availability to all clients) via an HTTP response. The issue trigger is a header that can be expected to exist in HTTP traffic without any malicious intent by the server.                                                                                                                 | 6.5         | 已修复  | +| CVE-2020-10688    | resteasy | A cross-site scripting (XSS) flaw was found in RESTEasy in versions before 3.11.1.Final and before 4.5.3.Final, where it did not properly handle URL encoding when the RESTEASY003870 exception occurs. An attacker could use this flaw to launch a reflected XSS attack.                                                                                                                 | 6.1         | 已修复  | +| CVE-2020-26945    | mybatis | MyBatis before 3.5.6 mishandles deserialization of object streams.                                                                                                                 | 8.1         | 已修复  | +| CVE-2021-25217    | dhcp | In ISC DHCP 4.1-ESV-R1 -> 4.1-ESV-R16, ISC DHCP 4.4.0 -> 4.4.2 (Other branches of ISC DHCP (i.e., releases in the 4.0.x series or lower and releases in the 4.3.x series) are beyond their End-of-Life (EOL) and no longer supported by ISC. From inspection it is clear that the defect is also present in releases from those series, but they have not been officially tested for the vulnerability), The outcome of encountering the defect while reading a lease that will trigger it varies, according to: the component being affected (i.e., dhclient or dhcpd) whether the package was built as a 32-bit or 64-bit binary whether the compiler flag -fstack-protection-strong was used when compiling In dhclient, ISC has not successfully reproduced the error on a 64-bit system. However, on a 32-bit system it is possible to cause dhclient to crash when reading an improper lease, which could cause network connectivity problems for an affected system due to the absence of a running DHCP client process. In dhcpd, when run in DHCPv4 or DHCPv6 mode: if the dhcpd server binary was built for a 32-bit architecture AND the -fstack-protection-strong flag was specified to the compiler, dhcpd may exit while parsing a lease file containing an objectionable lease, resulting in lack of service to clients. Additionally, the offending lease and the lease immediately following it in the lease database may be improperly deleted. if the dhcpd server binary was built for a 64-bit architecture OR if the -fstack-protection-strong compiler flag was NOT specified, the crash will not occur, but it is possible for the offending lease and the lease which immediately followed it to be improperly deleted.                                                                                                                 | 7.4         | 已修复  | +| CVE-2021-29478    | redis | Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. An integer overflow bug in Redis 6.2 before 6.2.3 could be exploited to corrupt the heap and potentially result with remote code execution. Redis 6.0 and earlier are not directly affected by this issue. The problem is fixed in version 6.2.3. An additional workaround to mitigate the problem without patching the `redis-server` executable is to prevent users from modifying the `set-max-intset-entries` configuration parameter. This can be done using ACL to restrict unprivileged users from using the `CONFIG SET` command.                                                                                                                 | 8.8         | 已修复  | +| CVE-2016-3982    | optipng | Off-by-one error in the bmp_rle4_fread function in pngxrbmp.c in OptiPNG before 0.7.6 allows remote attackers to cause a denial of service (out-of-bounds read or write access and crash) or possibly execute arbitrary code via a crafted image file, which triggers a heap-based buffer overflow.                                                                                                                 | 8.8         | 已修复  | +| CVE-2016-3981    | optipng | Heap-based buffer overflow in the bmp_read_rows function in pngxrbmp.c in OptiPNG before 0.7.6 allows remote attackers to cause a denial of service (out-of-bounds read or write access and crash) or possibly execute arbitrary code via a crafted image file.                                                                                                                 | 7.8         | 已修复  | +| CVE-2016-9296    | p7zip | A null pointer dereference bug affects the 16.02 and many old versions of p7zip. A lack of null pointer check for the variable folders.PackPositions in function CInArchive::ReadAndDecodePackedStreams in CPP/7zip/Archive/7z/7zIn.cpp, as used in the 7z.so library and in 7z applications, will cause a crash and a denial of service when decoding malformed 7z files.                                                                                                                 | 7.5         | 已修复  | +| CVE-2018-10115    | p7zip | Incorrect initialization logic of RAR decoder objects in 7-Zip 18.03 and before can lead to usage of uninitialized memory, allowing remote attackers to cause a denial of service (segmentation fault) or execute arbitrary code via a crafted RAR archive.                                                                                                                 | 7.8         | 已修复  | +| CVE-2018-5996    | p7zip | Insufficient exception handling in the method NCompress::NRar3::CDecoder::Code of 7-Zip before 18.00 and p7zip can lead to multiple memory corruptions within the PPMd code, allows remote attackers to cause a denial of service (segmentation fault) or execute arbitrary code via a crafted RAR archive.                                                                                                                 | 7.8         | 已修复  | +| CVE-2017-17969    | p7zip | Heap-based buffer overflow in the NCompress::NShrink::CDecoder::CodeReal method in 7-Zip before 18.00 and p7zip allows remote attackers to cause a denial of service (out-of-bounds write) or potentially execute arbitrary code via a crafted ZIP archive.                                                                                                                 | 7.8         | 已修复  | +| CVE-2021-22898    | curl | curl 7.7 through 7.76.1 suffers from an information disclosure when the `-t` command line option, known as `CURLOPT_TELNETOPTIONS` in libcurl, is used to send variable=content pairs to TELNET servers. Due to a flaw in the option parser for sending NEW_ENV variables, libcurl could be made to pass on uninitialized data from a stack based buffer to the server, resulting in potentially revealing sensitive internal information to the server using a clear-text network protocol.                                                                                                                 | 5.9         | 已修复  | +| CVE-2021-22897    | curl | curl 7.61.0 through 7.76.1 suffers from exposure of data element to wrong session due to a mistake in the code for CURLOPT_SSL_CIPHER_LIST when libcurl is built to use the Schannel TLS library. The selected cipher set was stored in a single "static" variable in the library, which has the surprising side-effect that if an application sets up multiple concurrent transfers, the last one that sets the ciphers will accidentally control the set used by all transfers. In a worst-case scenario, this weakens transport security significantly.                                                                                                                 | 3.7         | 已修复  | +| CVE-2021-25317    | cups | A Incorrect Default Permissions vulnerability in the packaging of cups of SUSE Linux Enterprise Server 11-SP4-LTSS, SUSE Manager Server 4.0, SUSE OpenStack Cloud Crowbar 9; openSUSE Leap 15.2, Factory allows local attackers with control of the lp users to create files as root with 0644 permissions without the ability to set the content. This issue affects: SUSE Linux Enterprise Server 11-SP4-LTSS cups versions prior to 1.3.9. SUSE Manager Server 4.0 cups versions prior to 2.2.7. SUSE OpenStack Cloud Crowbar 9 cups versions prior to 1.7.5. openSUSE Leap 15.2 cups versions prior to 2.2.7. openSUSE Factory cups version 2.3.3op2-2.1 and prior versions.                                                                                                                 | 3.3         | 已修复  | +| CVE-2020-8112    | openjpeg2 | opj_t1_clbl_decode_processor in openjp2/t1.c in OpenJPEG 2.3.1 through 2020-01-28 has a heap-based buffer overflow in the qmfbid==1 case, a different issue than CVE-2020-6851.                                                                                                                 | 8.8         | 已修复  | +| CVE-2020-6851    | openjpeg2 | AOpenJPEG through 2.3.1 has a heap-based buffer overflow in opj_t1_clbl_decode_processor in openjp2/t1.c because of lack of opj_j2k_update_image_dimensions validation.                                                                                                                 | 7.5         | 已修复  | +| CVE-2020-27824    | openjpeg2 | A flaw was found in OpenJPEG’s encoder in the opj_dwt_calc_explicit_stepsizes() function. This flaw allows an attacker who can supply crafted input to decomposition levels to cause a buffer overflow. The highest threat from this vulnerability is to system availability.                                                                                                                 | 5.5         | 已修复  | +| CVE-2020-27823    | openjpeg2 | A flaw was found in OpenJPEG’s encoder. This flaw allows an attacker to pass specially crafted x,y offset input to OpenJPEG to use during encoding. The highest threat from this vulnerability is to confidentiality, integrity, as well as system availability.                                                                                                                 | 7.8         | 已修复  | +| CVE-2021-3472    | xorg-x11-server | A flaw was found in xorg-x11-server in versions before 1.20.11. An integer underflow can occur in xserver which can lead to a local privilege escalation. The highest threat from this vulnerability is to data confidentiality and integrity as well as system availability.                                                                                                                 | 7.8         | 已修复  | +| CVE-2020-27756    | ImageMagick | In ParseMetaGeometry() of MagickCore/geometry.c, image height and width calculations can lead to divide-by-zero conditions which also lead to undefined behavior. This flaw can be triggered by a crafted input file processed by ImageMagick and could impact application availability. The patch uses multiplication in addition to the function `PerceptibleReciprocal()` in order to prevent such divide-by-zero conditions. This flaw affects ImageMagick versions prior to 7.0.9-0.                                                                                                                 | 5.5         | 已修复  | +| CVE-2020-25667    | ImageMagick | TIFFGetProfiles() in /coders/tiff.c calls strstr() which causes a large out-of-bounds read when it searches for ` dc:format= image/dng ` within `profile` due to improper string handling, when a crafted input file is provided to ImageMagick. The patch uses a StringInfo type instead of a raw C string to remedy this. This could cause an impact to availability of the application. This flaw affects ImageMagick versions prior to 7.0.9-0.                                                                                                                 | 5.5         | 已修复  | +| CVE-2020-27753    | ImageMagick | There are several memory leaks in the MIFF coder in /coders/miff.c due to improper image depth values, which can be triggered by a specially crafted input file. These leaks could potentially lead to an impact to application availability or cause a denial of service. It was originally reported that the issues were in `AcquireMagickMemory()` because that is where LeakSanitizer detected the leaks, but the patch resolves issues in the MIFF coder, which incorrectly handles data being passed to `AcquireMagickMemory()`. This flaw affects ImageMagick versions prior to 7.0.9-0.                                                                                                                 | 5.5         | 已修复  | +| CVE-2021-20201    | spice | A flaw was found in spice in versions before 0.14.92. A DoS tool might make it easier for remote attackers to cause a denial of service (CPU consumption) by performing many renegotiations within a single connection.                                                                                                                 | 5.3         | 已修复  | +| CVE-2021-3445    | libdnf | A flaw was found in libdnf s signature verification functionality in versions before 0.60.1. This flaw allows an attacker to achieve code execution if they can alter the header information of an RPM package and then trick a user or system into installing it. The highest risk of this vulnerability is to confidentiality, integrity, as well as system availability.                                                                                                                 | 8.8         | 已修复  | +| CVE-2020-25710    | openldap | A flaw was found in OpenLDAP in versions before 2.4.56. This flaw allows an attacker who sends a malicious packet processed by OpenLDAP to force a failed assertion in csnNormalize23(). The highest threat from this vulnerability is to system availability.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-33574    | glibc | The mq_notify function in the GNU C Library (aka glibc) versions 2.32 and 2.33 has a use-after-free. It may use the notification thread attributes object (passed through its struct sigevent parameter) after it has been freed by the caller, leading to a denial of service (application crash) or possibly unspecified other impact.                                                                                                                 | 9.8         | 已修复  | +| CVE-2021-3541    | libxml2 | This library allows to manipulate XML files. It includes supportto read, modify and write XML and HTML files. There is DTDs supportthis includes parsing and validation even with complex DtDs, eitherat parse time or later once the document has been modified. The outputcan be a simple SAX stream or an                                                                                                                 | 6.5         | 已修复  | +| CVE-2021-21702    | php | In PHP versions 7.3.x below 7.3.27, 7.4.x below 7.4.15 and 8.0.x below 8.0.2, when using SOAP extension to connect to a SOAP server, a malicious SOAP server could return malformed XML data as a response that would cause PHP to access a null pointer and thus cause a crash.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-29509    | rubygem-puma | Puma is a concurrent HTTP 1.1 server for Ruby/Rack applications. The fix for CVE-2019-16770 was incomplete. The original fix only protected existing connections that had already been accepted from having their requests starved by greedy persistent-connections saturating all threads in the same process. However, new connections may still be starved by greedy persistent-connections saturating all threads in all processes in the cluster. A `puma` server which received more concurrent `keep-alive` connections than the server had threads in its threadpool would service only a subset of connections, denying service to the unserved connections. This problem has been fixed in `puma` 4.3.8 and 5.3.1. Setting `queue_requests False` also fixes the issue. This is not advised when using `puma` without a reverse proxy, such as `nginx` or `apache`, because you will open yourself to slow client attacks (e.g. slowloris). The fix is very small and a git patch is available for those using unsupported versions of Puma.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-3517    | libxml2 | There is a flaw in the xml entity encoding functionality of libxml2 in versions before 2.9.11. An attacker who is able to supply a crafted file to be processed by an application linked with the affected functionality of libxml2 could trigger an out-of-bounds read. The most likely impact of this flaw is to application availability, with some potential impact to confidentiality and integrity if an attacker is able to use memory information to further exploit the application.                                                                                                                 | 8.6         | 已修复  | +| CVE-2021-3518    | libxml2 | There s a flaw in libxml2 in versions before 2.9.11. An attacker who is able to submit a crafted file to be processed by an application linked with libxml2 could trigger a use-after-free. The greatest impact from this flaw is to confidentiality, integrity, and availability.                                                                                                                 | 8.8         | 已修复  | +| CVE-2021-32617    | exiv2 | Exiv2 is a command-line utility and C++ library for reading, writing, deleting, and modifying the metadata of image files. An inefficient algorithm (quadratic complexity) was found in Exiv2 versions v0.27.3 and earlier. The inefficient algorithm is triggered when Exiv2 is used to write metadata into a crafted image file. An attacker could potentially exploit the vulnerability to cause a denial of service, if they can trick the victim into running Exiv2 on a crafted image file. The bug is fixed in version v0.27.4. Note that this bug is only triggered when _writing_ the metadata, which is a less frequently used Exiv2 operation than _reading_ the metadata. For example, to trigger the bug in the Exiv2 command-line application, you need to add an extra command-line argument such as `rm`.                                                                                                                 | 5.5         | 已修复  | +| CVE-2021-3200    | libsolv | Buffer overflow vulnerability in libsolv 2020-12-13 via the Solver * testcase_read(Pool *pool, FILE *fp, const char *testcase, Queue *job, char **resultp, int *resultflagsp function at src/testcase.c: line 2334, which could cause a denial of service                                                                                                                 | 6.5         | 已修复  | +| CVE-2020-25709    | openldap | A flaw was found in OpenLDAP. This flaw allows an attacker who can send a malicious packet to be processed by OpenLDAP’s slapd server, to trigger an assertion failure. The highest threat from this vulnerability is to system availability.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-29623    | exiv2 | Exiv2 is a C++ library and a command-line utility to read, write, delete and modify Exif, IPTC, XMP and ICC image metadata. A read of uninitialized memory was found in Exiv2 versions v0.27.3 and earlier. Exiv2 is a command-line utility and C++ library for reading, writing, deleting, and modifying the metadata of image files. The read of uninitialized memory is triggered when Exiv2 is used to read the metadata of a crafted image file. An attacker could potentially exploit the vulnerability to leak a few bytes of stack memory, if they can trick the victim into running Exiv2 on a crafted image file. The bug is fixed in version v0.27.4.                                                                                                                 | 3.3         | 已修复  | +| CVE-2020-27840    | samba | A flaw was found in samba. Spaces used in a string around a domain name (DN), while supposed to be ignored, can cause invalid DN strings with spaces to instead write a zero-byte into out-of-bounds memory, resulting in a crash. The highest threat from this vulnerability is to system availability.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-3537    | libxml2 | A vulnerability found in libxml2 in versions before 2.9.11 shows that it did not propagate errors while parsing XML mixed content, causing a NULL dereference. If an untrusted XML document was parsed in recovery mode and post-validated, the flaw could be used to crash the application. The highest threat from this vulnerability is to system availability.                                                                                                                 | 5.9         | 已修复  | +| CVE-2020-27769    | ImageMagick | In ImageMagick versions before 7.0.9-0, there are outside the range of representable values of type float at MagickCore/quantize.c.                                                                                                                 | 3.3         | 已修复  | +| CVE-2021-32563    | Thunar | An issue was discovered in Thunar before 4.16.7 and 4.17.x before 4.17.2. When called with a regular file as a command-line argument, it delegates to a different program (based on the file type) without user confirmation. This could be used to achieve code execution.                                                                                                                 | 9.8         | 已修复  | +| CVE-2020-15078    | openvpn | OpenVPN 2.5.1 and earlier versions allows a remote attackers to bypass authentication and access control channel data on servers configured with deferred authentication, which can be used to potentially trigger further information leaks.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-3504    | hivex | A flaw was found in the hivex library in versions before 1.3.20. It is caused due to a lack of bounds check within the hivex_open function. An attacker could input a specially crafted Windows Registry (hive) file which would cause hivex to read memory beyond its normal bounds or cause the program to crash. The highest threat from this vulnerability is to system availability.                                                                                                                 | 8.1         | 已修复  | +| CVE-2021-20277    | samba | A flaw was found in Samba s libldb. Multiple, consecutive leading spaces in an LDAP attribute can lead to an out-of-bounds memory write, leading to a crash of the LDAP server process handling the request. The highest threat from this vulnerability is to system availability.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-23383    | nodejs-handlebars | The package handlebars before 4.7.7 are vulnerable to Prototype Pollution when selecting certain compiling options to compile templates coming from an untrusted source.                                                                                                                 | 9.8         | 已修复  | +| CVE-2021-20309    | ImageMagick | A flaw was found in ImageMagick in versions before 7.0.11 and before 6.9.12, where a division by zero in WaveImage() of MagickCore/visual-effects.c may trigger undefined behavior via a crafted image file submitted to an application using ImageMagick. The highest threat from this vulnerability is to system availability.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-20312    | ImageMagick | A flaw was found in ImageMagick in versions 7.0.11, where an integer overflow in WriteTHUMBNAILImage of coders/thumbnail.c may trigger undefined behavior via a crafted image file that is submitted by an attacker and processed by an application using ImageMagick. The highest threat from this vulnerability is to system availability.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-20311    | ImageMagick | A flaw was found in ImageMagick in versions before 7.0.11, where a division by zero in sRGBTransformImage() in the MagickCore/colorspace.c may trigger undefined behavior via a crafted image file that is submitted by an attacker processed by an application using ImageMagick. The highest threat from this vulnerability is to system availability.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-20313    | ImageMagick | A flaw was found in ImageMagick in versions before 7.0.11. A potential cipher leak when the calculate signatures in TransformSignature is possible. The highest threat from this vulnerability is to data confidentiality.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-29505    | xstream | The processed stream at unmarshalling time contains type information to recreate the formerly written objects. XStream creates therefore new instances based on these type information. An attacker can manipulate the processed input stream and replace or inject objects, that result in execution of a local command on the server.                                                                                                                 | 8.8         | 已修复  | +| CVE-2021-20254    | samba | A flaw was found in samba. The Samba smbd file server must map Windows group identities (SIDs) into unix group ids (gids). The code that performs this had a flaw that could allow it to read data beyond the end of the array in the case where a negative cache entry had been added to the mapping cache. This could cause the calling code to return those values into the process token that stores the group membership for a user. The highest threat from this vulnerability is to data confidentiality and integrity.                                                                                                                 | 8.1         | 已修复  | +| CVE-2021-29468    | git | Cygwin Git is a patch set for the git command line tool for the cygwin environment. A specially crafted repository that contains symbolic links as well as files with backslash characters in the file name may cause just-checked out code to be executed while checking out a repository using Git on Cygwin. The problem will be patched in the Cygwin Git v2.31.1-2 release. At time of writing, the vulnerability is present in the upstream Git source code; any Cygwin user who compiles Git for themselves from upstream sources should manually apply a patch to mitigate the vulnerability. As mitigation users should not clone or pull from repositories from untrusted sources. CVE-2019-1354 was an equivalent vulnerability in Git for Visual Studio.                                                                                                                 | 8.8         | 已修复  | +| CVE-2020-9492    | hadoop | In Apache Hadoop 3.2.0 to 3.2.1, 3.0.0-alpha1 to 3.1.3, and 2.0.0-alpha to 2.10.0, WebHDFS client might send SPNEGO authorization header to remote URL without proper verification.                                                                                                                 | 8.8         | 已修复  | +| CVE-2021-31879    | wget | GNU Wget through 1.21.1 does not omit the Authorization header upon a redirect to a different origin, a related issue to CVE-2018-1000007.                                                                                                                 | 6.1         | 已修复  | +| CVE-2021-20095    | babel | Relative Path Traversal in Babel 2.9.0 allows an attacker to load arbitrary locale files on disk and execute arbitrary code.                                                                                                                 | 7.8         | 已修复  | +| CVE-2021-28168    | jersey | Eclipse Jersey 2.28 to 2.33 and Eclipse Jersey 3.0.0 to 3.0.1 contains a local information disclosure vulnerability. This is due to the use of the File.createTempFile which creates a file inside of the system temporary directory with the permissions: -rw-r--r--. Thus the contents of this file are viewable by all other users locally on the system. As such, if the contents written is security sensitive, it can be disclosed to other local users.                                                                                                                 | 5.5         | 已修复  | +| CVE-2020-27752    | ImageMagick | A flaw was found in ImageMagick in MagickCore/quantum-private.h. An attacker who submits a crafted file that is processed by ImageMagick could trigger a heap buffer overflow. This would most likely lead to an impact to application availability, but could potentially lead to an impact to data integrity as well. This flaw affects ImageMagick versions prior to 7.0.9-0.                                                                                                                 | 7.1         | 已修复  | +| CVE-2020-36323    | rust | In the standard library in Rust before 1.52.0, there is an optimization for joining strings that can cause uninitialized bytes to be exposed (or the program to crash) if the borrowed string changes after its length is checked.                                                                                                                 | 8.2         | 已修复  | +| CVE-2021-2164    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-2208    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Partition). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-2217    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Stored Procedure). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-2203    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-2226    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Information Schema). Supported versions that are affected are 5.7.33 and prior and 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized access to critical data or complete access to all MySQL Server accessible data. CVSS 3.1 Base Score 4.9 (Confidentiality impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-2232    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Group Replication Plugin). Supported versions that are affected are 8.0.23 and prior. Difficult to exploit vulnerability allows high privileged attacker with logon to the infrastructure where MySQL Server executes to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a partial denial of service (partial DOS) of MySQL Server. CVSS 3.1 Base Score 1.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:L).                                                                                                                 | 1.9         | 已修复  | +| CVE-2021-2301    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Information Schema). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized read access to a subset of MySQL Server accessible data. CVSS 3.1 Base Score 2.7 (Confidentiality impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:N).                                                                                                                 | 2.7         | 已修复  | +| CVE-2021-2298    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 6.5 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 6.5         | 已修复  | +| CVE-2021-2230    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-2300    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DML). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-2304    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Stored Procedure). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server as well as unauthorized update, insert or delete access to some of MySQL Server accessible data. CVSS 3.1 Base Score 5.5 (Integrity and Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:L/A:H).                                                                                                                 | 5.5         | 已修复  | +| CVE-2021-2308    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Information Schema). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized read access to a subset of MySQL Server accessible data. CVSS 3.1 Base Score 2.7 (Confidentiality impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:N).                                                                                                                 | 2.7         | 已修复  | +| CVE-2021-2172    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DML). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 6.5 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 6.5         | 已修复  | +| CVE-2021-2194    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 5.7.33 and prior and 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-2170    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-2196    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DML). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-2201    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Partition). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-2180    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 5.7.33 and prior and 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2020-36318    | rust | In the standard library in Rust before 1.49.0, VecDeque::make_contiguous has a bug that pops the same element more than once under certain condition. This bug could result in a use-after-free or double free.                                                                                                                 | 9.8         | 已修复  | +| CVE-2021-2307    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Packaging). Supported versions that are affected are 5.7.33 and prior and 8.0.23 and prior. Easily exploitable vulnerability allows unauthenticated attacker with logon to the infrastructure where MySQL Server executes to compromise MySQL Server. Successful attacks require human interaction from a person other than the attacker. Successful attacks of this vulnerability can result in unauthorized access to critical data or complete access to all MySQL Server accessible data as well as unauthorized update, insert or delete access to some of MySQL Server accessible data. CVSS 3.1 Base Score 6.1 (Confidentiality and Integrity impacts). CVSS Vector: (CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:N).                                                                                                                 | 6.1         | 已修复  | +| CVE-2021-2169    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 5.7.33 and prior and 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-2171    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Replication). Supported versions that are affected are 5.7.33 and prior and 8.0.23 and prior. Difficult to exploit vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.4 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.4         | 已修复  | +| CVE-2021-2305    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DML). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-2179    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Group Replication Plugin). Supported versions that are affected are 5.7.33 and prior and 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-2174    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 5.7.33 and prior and 8.0.23 and prior. Difficult to exploit vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.4 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.4         | 已修复  | +| CVE-2021-2193    | mysql | Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.23 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).                                                                                                                 | 4.9         | 已修复  | +| CVE-2021-28879    | rust | In the standard library in Rust before 1.52.0, the Zip implementation can report an incorrect size due to an integer overflow. This bug can lead to a buffer overflow when a consumed Zip iterator is used again.                                                                                                                 | 9.8         | 已修复  | +| CVE-2021-28876    | rust | In the standard library in Rust before 1.52.0, the Zip implementation has a panic safety issue. It calls __iterator_get_unchecked() more than once for the same index when the underlying iterator panics (in certain conditions). This bug could lead to a memory safety violation due to an unmet safety requirement for the TrustedRandomAccess trait.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-29428    | gradle | In Gradle before version 7.0, on Unix-like systems, the system temporary directory can be created with open permissions that allow multiple users to create and delete files within it. Gradle builds could be vulnerable to a local privilege escalation from an attacker quickly deleting and recreating files in the system temporary directory. This vulnerability impacted builds using precompiled script plugins written in Kotlin DSL and tests for Gradle plugins written using ProjectBuilder or TestKit. If you are on Windows or modern versions of macOS, you are not vulnerable. If you are on a Unix-like operating system with the sticky bit set on your system temporary directory, you are not vulnerable. The problem has been patched and released with Gradle 7.0. As a workaround, on Unix-like operating systems, ensure that the sticky bit is set. This only allows the original user (or root) to delete a file. If you are unable to change the permissions of the system temporary directory, you can move the Java temporary directory by setting the System Property `java.io.tmpdir`. The new path needs to limit permissions to the build user only. For additional details refer to the referenced GitHub Security Advisory.                                                                                                                 | 7.8         | 已修复  | +| CVE-2021-28877    | rust | In the standard library in Rust before 1.51.0, the Zip implementation calls __iterator_get_unchecked() for the same index more than once when nested. This bug can lead to a memory safety violation due to an unmet safety requirement for the TrustedRandomAccess trait.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-28878    | rust | In the standard library in Rust before 1.52.0, the Zip implementation calls __iterator_get_unchecked() more than once for the same index (under certain conditions) when next_back() and next() are used together. This bug could lead to a memory safety violation due to an unmet safety requirement for the TrustedRandomAccess trait.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-28875    | rust | In the standard library in Rust before 1.50.0, read_to_end() does not validate the return value from Read in an unsafe context. This bug could lead to a buffer overflow.                                                                                                                 | 7.5         | 已修复  | +| CVE-2020-36317    | rust | In the standard library in Rust before 1.49.0, String::retain() function has a panic safety problem. It allows creation of a non-UTF-8 Rust string when the provided closure panics. This bug could result in a memory safety violation when other string APIs assume that UTF-8 encoding is used on the same string.                                                                                                                 | 7.5         | 已修复  | +| CVE-2021-29425    | apache-commons-io | In Apache Commons IO before 2.7, When invoking the method FileNameUtils.normalize with an improper input string, like //../foo , or .. foo , the result would be the same value, thus possibly providing access to files in the parent directory, but not further above (thus limited path traversal), if the calling code would use the result to construct a path value.                                                                                                                 | 5.3         | 已修复  | +|CVE-2021-45046|log4j|It was found that the fix to address CVE-2021-44228 in Apache Log4j 2.15.0 was incomplete in certain non-default configurations. This could allows attackers with control over Thread Context Map (MDC) input data when the logging configuration uses a non-default Pattern Layout with either a Context Lookup (for example, $${ctx:loginId}) or a Thread Context Map pattern (%X, %mdc, or %MDC) to craft malicious input data using a JNDI Lookup pattern resulting in a denial of service (DOS) attack. Log4j 2.15.0 makes a best-effort attempt to restrict JNDI LDAP lookups to localhost by default. Log4j 2.16.0 fixes this issue by removing support for message lookup patterns and disabling JNDI functionality by default.|3.7|已修复| +|CVE-2021-28041|openssh|ssh-agent in OpenSSH before 8.5 has a double free that may be relevant in a few less-common scenarios, such as unconstrained agent-socket access on a legacy operating system, or the forwarding of an agent to an attacker-controlled host.|7.1|已修复| +|CVE-2021-42717|mod_security|ModSecurity 3.x through 3.0.5 mishandles excessively nested JSON objects. Crafted JSON objects with nesting tens-of-thousands deep could result in the web server being unable to service legitimate requests. Even a moderately large (e.g., 300KB) HTTP request can occupy one of the limited NGINX worker processes for minutes and consume almost all of the available CPU on the machine. Modsecurity 2 is similarly vulnerable: the affected versions include 2.8.0 through 2.9.4.|7.5|已修复| +|CVE-2021-44228|log4j|The details of a high-risk vulnerability in Apache Log4j2 have been disclosed. Attackers can use the vulnerability to execute code remotely. Some reports carry suspected POC; Apache Log4j2 is a Java-based logging tool. This tool rewrites the Log4j framework and introduces a large number of rich features. The log framework is widely used in business system development to record log information. In most cases, developers may write error messages caused by user input into the log. The trigger condition of this vulnerability is that as long as the data input by external users will be recorded in the log, it can cause remote code execution.|9.8|已修复| +|CVE-2021-4069|vim|vim is vulnerable to Use After Free.|7.8|已修复| +|CVE-2021-33098|kernel|Improper input validation in the Intel(R) Ethernet ixgbe driver for Linux before version 3.17.3 may allow an authenticated user to potentially enable denial of service via local access.|5.5|已修复| +|CVE-2021-4019|vim|vim is vulnerable to Heap-based Buffer Overflow.|7.8|已修复| +|CVE-2021-3984|vim|vim is vulnerable to Heap-based Buffer Overflow.|7.8|已修复| +|CVE-2021-44227|mailman|In GNU Mailman before 2.1.38, a list member or moderator can get a CSRF token and craft an admin request (using that token) to set a new admin password or make other changes.|8.8|已修复| +|CVE-2021-21707|php|In PHP versions 7.3.x below 7.3.33, 7.4.x below 7.4.26 and 8.0.x below 8.0.13, certain XML parsing functions, like simplexml_load_file(), URL-decode the filename passed to them. If that filename contains URL-encoded NUL character, this may cause the function to interpret this as the end of the filename, thus interpreting the filename differently from what the user intended, which may lead it to reading a different file than intended.|5.3|已修复| +|CVE-2020-25721|samba|The AD Kerberos acceptance service in Samba cannot perform authorization by accessing the user's unique and long-term stable identifier.|7.6|已修复| +|CVE-2020-25719|samba|A flaw was discovered in the way that Samba, as an AD domain controller, implements Kerberos name-based authentication. If Samba AD DC does not strictly require Kerberos PAC and always uses the SID found in it, it may not be able to distinguish the user represented by the credential.|7.2|已修复| +|CVE-2020-25718|samba|A flaw was found in the way that samba as an AD domain controller can support RODC (read-only domain controller). This will allow RODC to print administrator credentials.|7.5|已修复| +|CVE-2021-3738|samba|A flaw was found in the way that samba as an AD domain controller can support RODC (read-only domain controller). This will allow RODC to print administrator credentials.|7.6|已修复| +|CVE-2020-25722|samba|Several flaws were found in the way that samba AD DC implements storage data access and consistency checking. Attackers can use this flaw to cause damage to the entire domain.|8.8|已修复| +|CVE-2016-2124|samba|A flaw was discovered in the way samba implements SMB1 authentication. Even if Kerberos authentication is required, an attacker can use this flaw to retrieve the clear text password sent over the wire.|6.8|已修复| +|CVE-2021-41099|redis5|Redis is an open source, in-memory database that persists on disk. An integer overflow bug in the underlying string library can be used to corrupt the heap and potentially result with denial of service or remote code execution. The vulnerability involves changing the default proto-max-bulk-len configuration parameter to a very large value and constructing specially crafted network payloads or commands. The problem is fixed in Redis versions 6.2.6, 6.0.16 and 5.0.14. An additional workaround to mitigate the problem without patching the redis-server executable is to prevent users from modifying the proto-max-bulk-len configuration parameter. This can be done using ACL to restrict unprivileged users from using the CONFIG SET command.|7.5|已修复| +|CVE-2021-32762|redis5|Redis is an open source, in-memory database that persists on disk. The redis-cli command line tool and redis-sentinel service may be vulnerable to integer overflow when parsing specially crafted large multi-bulk network replies. This is a result of a vulnerability in the underlying hiredis library which does not perform an overflow check before calling the calloc() heap allocation function. This issue only impacts systems with heap allocators that do not perform their own overflow checks. Most modern systems do and are therefore not likely to be affected. Furthermore, by default redis-sentinel uses the jemalloc allocator which is also not vulnerable. The problem is fixed in Redis versions 6.2.6, 6.0.16 and 5.0.14.|8.8|已修复| +|CVE-2021-32675|redis5|Redis is an open source, in-memory database that persists on disk. When parsing an incoming Redis Standard Protocol (RESP) request, Redis allocates memory according to user-specified values which determine the number of elements (in the multi-bulk header) and size of each element (in the bulk header). An attacker delivering specially crafted requests over multiple connections can cause the server to allocate significant amount of memory. Because the same parsing mechanism is used to handle authentication requests, this vulnerability can also be exploited by unauthenticated users. The problem is fixed in Redis versions 6.2.6, 6.0.16 and 5.0.14. An additional workaround to mitigate this problem without patching the redis-server executable is to block access to prevent unauthenticated users from connecting to Redis. This can be done in different ways: Using network access control tools like firewalls, iptables, security groups, etc. or Enabling TLS and requiring users to authenticate using client side certificates.|7.5|已修复| +|CVE-2021-32687|redis5|Redis is an open source, in-memory database that persists on disk. An integer overflow bug affecting all versions of Redis can be exploited to corrupt the heap and potentially be used to leak arbitrary contents of the heap or trigger remote code execution. The vulnerability involves changing the default set-max-intset-entries configuration parameter to a very large value and constructing specially crafted commands to manipulate sets. The problem is fixed in Redis versions 6.2.6, 6.0.16 and 5.0.14. An additional workaround to mitigate the problem without patching the redis-server executable is to prevent users from modifying the set-max-intset-entries configuration parameter. This can be done using ACL to restrict unprivileged users from using the CONFIG SET command.|7.5|已修复| +|CVE-2021-32628|redis5|Redis is an open source, in-memory database that persists on disk. An integer overflow bug in the ziplist data structure used by all versions of Redis can be exploited to corrupt the heap and potentially result with remote code execution. The vulnerability involves modifying the default ziplist configuration parameters (hash-max-ziplist-entries, hash-max-ziplist-value, zset-max-ziplist-entries or zset-max-ziplist-value) to a very large value, and then constructing specially crafted commands to create very large ziplists. The problem is fixed in Redis versions 6.2.6, 6.0.16, 5.0.14. An additional workaround to mitigate the problem without patching the redis-server executable is to prevent users from modifying the above configuration parameters. This can be done using ACL to restrict unprivileged users from using the CONFIG SET command.|7.5|已修复| +|CVE-2021-32627|redis5|Redis is an open source, in-memory database that persists on disk. In affected versions an integer overflow bug in Redis can be exploited to corrupt the heap and potentially result with remote code execution. The vulnerability involves changing the default proto-max-bulk-len and client-query-buffer-limit configuration parameters to very large values and constructing specially crafted very large stream elements. The problem is fixed in Redis 6.2.6, 6.0.16 and 5.0.14. For users unable to upgrade an additional workaround to mitigate the problem without patching the redis-server executable is to prevent users from modifying the proto-max-bulk-len configuration parameter. This can be done using ACL to restrict unprivileged users from using the CONFIG SET command.|7.5|已修复| +|CVE-2021-32626|redis5|Redis is an open source, in-memory database that persists on disk. In affected versions specially crafted Lua scripts executing in Redis can cause the heap-based Lua stack to be overflowed, due to incomplete checks for this condition. This can result with heap corruption and potentially remote code execution. This problem exists in all versions of Redis with Lua scripting support, starting from 2.6. The problem is fixed in versions 6.2.6, 6.0.16 and 5.0.14. For users unable to update an additional workaround to mitigate the problem without patching the redis-server executable is to prevent users from executing Lua scripts. This can be done using ACL to restrict EVAL and EVALSHA commands.|8.8|已修复| +|CVE-2021-32627|redis6|Redis is an open source, in-memory database that persists on disk. In affected versions an integer overflow bug in Redis can be exploited to corrupt the heap and potentially result with remote code execution. The vulnerability involves changing the default proto-max-bulk-len and client-query-buffer-limit configuration parameters to very large values and constructing specially crafted very large stream elements. The problem is fixed in Redis 6.2.6, 6.0.16 and 5.0.14. For users unable to upgrade an additional workaround to mitigate the problem without patching the redis-server executable is to prevent users from modifying the proto-max-bulk-len configuration parameter. This can be done using ACL to restrict unprivileged users from using the CONFIG SET command.|7.5|已修复| +|CVE-2021-32762|redis6|Redis is an open source, in-memory database that persists on disk. The redis-cli command line tool and redis-sentinel service may be vulnerable to integer overflow when parsing specially crafted large multi-bulk network replies. This is a result of a vulnerability in the underlying hiredis library which does not perform an overflow check before calling the calloc() heap allocation function. This issue only impacts systems with heap allocators that do not perform their own overflow checks. Most modern systems do and are therefore not likely to be affected. Furthermore, by default redis-sentinel uses the jemalloc allocator which is also not vulnerable. The problem is fixed in Redis versions 6.2.6, 6.0.16 and 5.0.14.|8.8|已修复| +|CVE-2021-32675|redis6|Redis is an open source, in-memory database that persists on disk. When parsing an incoming Redis Standard Protocol (RESP) request, Redis allocates memory according to user-specified values which determine the number of elements (in the multi-bulk header) and size of each element (in the bulk header). An attacker delivering specially crafted requests over multiple connections can cause the server to allocate significant amount of memory. Because the same parsing mechanism is used to handle authentication requests, this vulnerability can also be exploited by unauthenticated users. The problem is fixed in Redis versions 6.2.6, 6.0.16 and 5.0.14. An additional workaround to mitigate this problem without patching the redis-server executable is to block access to prevent unauthenticated users from connecting to Redis. This can be done in different ways: Using network access control tools like firewalls, iptables, security groups, etc. or Enabling TLS and requiring users to authenticate using client side certificates.|7.5|已修复| +|CVE-2021-41099|redis6|Redis is an open source, in-memory database that persists on disk. An integer overflow bug in the underlying string library can be used to corrupt the heap and potentially result with denial of service or remote code execution. The vulnerability involves changing the default proto-max-bulk-len configuration parameter to a very large value and constructing specially crafted network payloads or commands. The problem is fixed in Redis versions 6.2.6, 6.0.16 and 5.0.14. An additional workaround to mitigate the problem without patching the redis-server executable is to prevent users from modifying the proto-max-bulk-len configuration parameter. This can be done using ACL to restrict unprivileged users from using the CONFIG SET command.|7.5|已修复| +|CVE-2021-32628|redis6|Redis is an open source, in-memory database that persists on disk. An integer overflow bug in the ziplist data structure used by all versions of Redis can be exploited to corrupt the heap and potentially result with remote code execution. The vulnerability involves modifying the default ziplist configuration parameters (hash-max-ziplist-entries, hash-max-ziplist-value, zset-max-ziplist-entries or zset-max-ziplist-value) to a very large value, and then constructing specially crafted commands to create very large ziplists. The problem is fixed in Redis versions 6.2.6, 6.0.16, 5.0.14. An additional workaround to mitigate the problem without patching the redis-server executable is to prevent users from modifying the above configuration parameters. This can be done using ACL to restrict unprivileged users from using the CONFIG SET command.|7.5|已修复| +|CVE-2021-32687|redis6|Redis is an open source, in-memory database that persists on disk. An integer overflow bug affecting all versions of Redis can be exploited to corrupt the heap and potentially be used to leak arbitrary contents of the heap or trigger remote code execution. The vulnerability involves changing the default set-max-intset-entries configuration parameter to a very large value and constructing specially crafted commands to manipulate sets. The problem is fixed in Redis versions 6.2.6, 6.0.16 and 5.0.14. An additional workaround to mitigate the problem without patching the redis-server executable is to prevent users from modifying the set-max-intset-entries configuration parameter. This can be done using ACL to restrict unprivileged users from using the CONFIG SET command.|7.5|已修复| +|CVE-2021-3753|kernel|A race problem was seen in the vt_k_ioctl in drivers/tty/vt/vt_ioctl.c in the Linux kernel, which may cause an out of bounds read in vt as the write access to vc_mode is not protected by lock-in vt_ioctl (KDSETMDE). The highest threat from this vulnerability is to data confidentiality.|4.7|已修复| +|CVE-2021-3759|kernel|A memory overflow vulnerability was found in the Linux kernel’s ipc functionality of the memcg subsystem, in the way a user calls the semget function multiple times, creating semaphores. This flaw allows a local user to starve the resources, causing a denial of service. The highest threat from this vulnerability is to system availability.|5.5|已修复| +|CVE-2020-25717|samba|Samba may map domain users to local users in an undesired way.|8.1|已修复| +|CVE-2021-3973|vim|vim is vulnerable to Heap-based Buffer Overflow.|7.8|已修复| +|CVE-2021-3974|vim|vim is vulnerable to Use After Free.|7.8|已修复| +|CVE-2021-43975|kernel|In the Linux kernel through 5.15.2, hw_atl_utils_fw_rpc_wait in drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c allows an attacker (who can introduce a crafted device) to trigger an out-of-bounds write via a crafted length value.|7.8|已修复| +|CVE-2021-43618|gmp|GNU Multiple Precision Arithmetic Library (GMP) through 6.2.1 has an mpz/inp_raw.c integer overflow and resultant buffer overflow via crafted input, leading to a segmentation fault on 32-bit platforms.|7.5|已修复| +|CVE-2021-42386|busybox|A use-after-free in Busybox s awk applet leads to denial of service and possibly code execution when processing a crafted awk pattern in the nvalloc function|7.2|已修复| +|CVE-2021-42384|busybox|A use-after-free in Busybox s awk applet leads to denial of service and possibly code execution when processing a crafted awk pattern in the handle_special function|7.2|已修复| +|CVE-2021-42383|busybox|A use-after-free in Busybox s awk applet leads to denial of service and possibly code execution when processing a crafted awk pattern in the evaluate function|7.2|已修复| +|CVE-2021-42379|busybox|A use-after-free in Busybox s awk applet leads to denial of service and possibly code execution when processing a crafted awk pattern in the next_input_file function|7.2|已修复| +|CVE-2021-42378|busybox|A use-after-free in Busybox s awk applet leads to denial of service and possibly code execution when processing a crafted awk pattern in the getvar_i function|7.2|已修复| +|CVE-2021-42385|busybox|A use-after-free in Busybox s awk applet leads to denial of service and possibly code execution when processing a crafted awk pattern in the evaluate function|7.2|已修复| +|CVE-2021-42374|busybox|An out-of-bounds heap read in Busybox s unlzma applet leads to information leak and denial of service when crafted LZMA-compressed input is decompressed. This can be triggered by any applet/format that|9.1|已修复| +|CVE-2021-42380|busybox|A use-after-free in Busybox s awk applet leads to denial of service and possibly code execution when processing a crafted awk pattern in the clrvar function|7.2|已修复| +|CVE-2021-42381|busybox|A use-after-free in Busybox s awk applet leads to denial of service and possibly code execution when processing a crafted awk pattern in the hash_init function|7.2|已修复| +|CVE-2021-42382|busybox|A use-after-free in Busybox s awk applet leads to denial of service and possibly code execution when processing a crafted awk pattern in the getvar_s function|7.2|已修复| +|CVE-2021-42376|busybox|A NULL pointer dereference in Busybox s hush applet leads to denial of service when processing a crafted shell command, due to missing validation after a x03 delimiter character. This may be used for DoS under very rare conditions of filtered command input.|5.5|已修复| +|CVE-2021-42377|busybox|An attacker-controlled pointer free in Busybox s hush applet leads to denial of service and possible code execution when processing a crafted shell command, due to the shell mishandling the &&& string. This may be used for remote code execution under rare conditions of filtered command input.|9.8|已修复| +|CVE-2021-43331|mailman|In GNU Mailman before 2.1.36, a crafted URL to the Cgi/options.py user options page can execute arbitrary JavaScript for XSS.|6.1|已修复| +|CVE-2021-43332|mailman|In GNU Mailman before 2.1.36, the CSRF token for the Cgi/admindb.py admindb page contains an encrypted version of the list admin password. This could potentially be cracked by a moderator via an offline brute-force attack.|6.5|已修复| +|CVE-2021-0938|kernel|In memzero_explicit of compiler-clang.h, there is a possible bypass of defense in depth due to uninitialized data. This could lead to local information disclosure with no additional execution privileges needed. User interaction is not needed for exploitation.Product: AndroidVersions: Android kernelAndroid ID: A-171418586References: Upstream kernel|5.5|已修复| +|CVE-2021-41771|golang|ImportedSymbols in debug/macho (for Open or OpenFat) in Go before 1.16.10 and 1.17.x before 1.17.3 Accesses a Memory Location After the End of a Buffer, aka an out-of-bounds slice situation.|5.5|已修复| +|CVE-2019-18389|virglrenderer|A heap-based buffer overflow in the vrend_renderer_transfer_write_iov function in vrend_renderer.c in virglrenderer through 0.8.0 allows guest OS users to cause a denial of service, or QEMU guest-to-host escape and code execution, via VIRGL_CCMD_RESOURCE_INLINE_WRITE commands.|7.8|已修复| +|CVE-2021-43389|kernel|An issue was discovered in the Linux kernel before 5.14.15. There is an array-index-out-of-bounds flaw in the detach_capi_ctr function in drivers/isdn/capi/kcapi.c.|5.5|已修复| +|CVE-2021-3927|vim|vim is vulnerable to Heap-based Buffer Overflow|7.8|已修复| +|CVE-2021-40153|squashfs-tools|squashfs_opendir in unsquash-1.c in Squashfs-Tools 4.5 stores the filename in the directory entry; this is then used by unsquashfs to create the new file during the unsquash. The filename is not validated for traversal outside of the destination directory, and thus allows writing to locations outside of the destination.|8.1|已修复| +|CVE-2021-43396|glibc|In iconvdata/iso-2022-jp-3.c in the GNU C Library (aka glibc) 2.34, remote attackers can force iconv() to emit a spurious 0 character via crafted ISO-2022-JP-3 data that is accompanied by an internal state reset. This may affect data integrity in certain iconv() use cases.|7.5|已修复| +|CVE-2021-20320|kernel|A flaw was found in s390 eBPF JIT in bpf_jit_insn in arch/s390/net/bpf_jit_comp.c in the Linux kernel. In this flaw, a local attacker with special user privilege can circumvent the verifier and may lead to a confidentiality problem.|5.5|已修复| +|CVE-2021-20322|kernel|A flaw in the processing of received ICMP errors (ICMP fragment needed and ICMP redirect) in the Linux kernel functionality was found to allow the ability to quickly scan open UDP ports. This flaw allows an off-path remote user to effectively bypass the source port UDP randomization. The highest threat from this vulnerability is to confidentiality and possibly integrity, because software that relies on UDP source port randomization are indirectly affected as well.|7.4|已修复| +|CVE-2021-0929|kernel|UAF in Android ION memory allocator.|7.3|已修复| +|CVE-2020-3702|kernel|u Specifically timed and handcrafted traffic can cause internal errors in a WLAN device that lead to improper layer 2 Wi-Fi encryption with a consequent possibility of information disclosure over the air for a discrete set of traffic in Snapdragon Auto, Snapdragon Compute, Snapdragon Connectivity, Snapdragon Consumer IOT, Snapdragon Industrial IOT, Snapdragon Mobile, Snapdragon Voice & Music, Snapdragon Wearables, Snapdragon Wired Infrastructure and Networking in APQ8053, IPQ4019, IPQ8064, MSM8909W, MSM8996AU, QCA9531, QCN5502, QCS405, SDX20, SM6150, SM7150|6.5|已修复| +|CVE-2021-34981|kernel|A flaw was found in the Linux kernel s CAPI over Bluetooth connection code. An attacker with a local account can escalate privileges when CAPI (ISDN) hardware connection fails.|7.5|已修复| +|CVE-2021-3928|vim|vim is vulnerable to Stack-based Buffer Overflow|7.8|已修复| +|CVE-2021-43082|trafficserver|Buffer Copy without Checking Size of Input ( Classic Buffer Overflow ) vulnerability in the stats-over-http plugin of Apache Traffic Server allows an attacker to overwrite memory. This issue affects Apache Traffic Server 9.1.0.|9.8|已修复| +|CVE-2021-41585|trafficserver|Improper Input Validation vulnerability in accepting socket connections in Apache Traffic Server allows an attacker to make the server stop accepting new connections. This issue affects Apache Traffic Server 5.0.0 to 9.1.0.|7.5|已修复| +|CVE-2021-37149|trafficserver|Improper Input Validation vulnerability in header parsing of Apache Traffic Server allows an attacker to smuggle requests. This issue affects Apache Traffic Server 8.0.0 to 8.1.2 and 9.0.0 to 9.1.0.|7.5|已修复| +|CVE-2021-37147|trafficserver|Improper input validation vulnerability in header parsing of Apache Traffic Server allows an attacker to smuggle requests. This issue affects Apache Traffic Server 8.0.0 to 8.1.2 and 9.0.0 to 9.1.0.|7.5|已修复| +|CVE-2021-32626|redis6|Redis is an open source, in-memory database that persists on disk. In affected versions specially crafted Lua scripts executing in Redis can cause the heap-based Lua stack to be overflowed, due to incomplete checks for this condition. This can result with heap corruption and potentially remote code execution. This problem exists in all versions of Redis with Lua scripting support, starting from 2.6. The problem is fixed in versions 6.2.6, 6.0.16 and 5.0.14. For users unable to update an additional workaround to mitigate the problem without patching the redis-server executable is to prevent users from executing Lua scripts. This can be done using ACL to restrict EVAL and EVALSHA commands.|8.8|已修复| +|CVE-2019-7575|SDL|SDL (Simple DirectMedia Layer) through 1.2.15 and 2.x through 2.0.9 has a heap-based buffer overflow in MS_ADPCM_decode in audio/SDL_wave.c.|8.8|已修复| +|CVE-2019-7574|SDL|SDL (Simple DirectMedia Layer) through 1.2.15 and 2.x through 2.0.9 has a heap-based buffer over-read in IMA_ADPCM_decode in audio/SDL_wave.c.|8.8|已修复| +|CVE-2019-7572|SDL|SDL (Simple DirectMedia Layer) through 1.2.15 and 2.x through 2.0.9 has a buffer over-read in IMA_ADPCM_nibble in audio/SDL_wave.c.|8.8|已修复| +|CVE-2021-41973|apache-mina|In Apache MINA, a specifically crafted, malformed HTTP request may cause the HTTP Header decoder to loop indefinitely. The decoder assumed that the HTTP Header begins at the beginning of the buffer and loops if there is more data than expected. Please update MINA to 2.1.5 or greater.|6.5|已修复| +|CVE-2021-41103|containerd|containerd is an open source container runtime with an emphasis on simplicity, robustness and portability. A bug was found in containerd where container root directories and some plugins had insufficiently restricted permissions, allowing otherwise unprivileged Linux users to traverse directory contents and execute programs. When containers included executable programs with extended permission bits (such as setuid), unprivileged Linux users could discover and execute those programs. When the UID of an unprivileged Linux user on the host collided with the file owner or group inside a container, the unprivileged Linux user on the host could discover, read, and modify those files. This vulnerability has been fixed in containerd 1.4.11 and containerd 1.5.7. Users should update to these version when they are released and may restart containers or update directory permissions to mitigate the vulnerability. Users unable to update should limit access to the host to trusted users. Update directory permission on container bundles directories.|7.8|已修复| +|CVE-2021-41072|squashfs-tools|squashfs_opendir in unsquash-2.c in Squashfs-Tools 4.5 allows Directory Traversal, a different vulnerability than CVE-2021-40153. A squashfs filesystem that has been crafted to include a symbolic link and then contents under the same filename in a filesystem can cause unsquashfs to first create the symbolic link pointing outside the expected directory, and then the subsequent write operation will cause the unsquashfs process to write through the symbolic link elsewhere in the filesystem.|8.1|已修复| +|CVE-2021-3760|kernel|A flaw was found in the Linux kernel. A use-after-free vulnerability in the NFC stack can lead to a threat to confidentiality, integrity, and system availability.|7.0|已修复| +|CVE-2021-3896|kernel|** REJECT ** DO NOT USE THIS CANDIDATE NUMBER. ConsultIDs: CVE-2021-43389. Reason: This candidate is a reservation duplicate of CVE-2021-43389. Notes: All CVE users should reference CVE-2021-43389 instead of this candidate. All references and descriptions in this candidate have been removed to prevent accidental usage.|4.7|已修复| +|CVE-2021-25219|bind|In BIND 9.3.0 -> 9.11.35, 9.12.0 -> 9.16.21, and versions 9.9.3-S1 -> 9.11.35-S1 and 9.16.8-S1 -> 9.16.21-S1 of BIND Supported Preview Edition, as well as release versions 9.17.0 -> 9.17.18 of the BIND 9.17 development branch, exploitation of broken authoritative servers using a flaw in response processing can cause degradation in BIND resolver performance. The way the lame cache is currently designed makes it possible for its internal data structures to grow almost infinitely, which may cause significant delays in client query processing.|5.3|已修复| +|CVE-2021-3903|vim|vim is vulnerable to Heap-based Buffer Overflow.|7.3|已修复| +|CVE-2019-16779|rubygem-excon|In RubyGem excon before 0.71.0, there was a race condition around persistent connections, where a connection which is interrupted (such as by a timeout) would leave data on the socket. Subsequent requests would then read this data, returning content from the previous response. The race condition window appears to be short, and it would be difficult to purposefully exploit this.|5.9|已修复| +|CVE-2021-38294|storm|A Command Injection vulnerability exists in the getTopologyHistory service of the Apache Storm 2.x prior to 2.2.1 and Apache Storm 1.x prior to 1.2.4. A specially crafted thrift request to the Nimbus server allows Remote Code Execution (RCE) prior to authentication.|9.8|已修复| +|CVE-2021-40865|storm|An Unsafe Deserialization vulnerability exists in the worker services of the Apache Storm supervisor server allowing pre-auth Remote Code Execution (RCE). Apache Storm 2.2.x users should upgrade to version 2.2.1 or 2.3.0. Apache Storm 2.1.x users should upgrade to version 2.1.1. Apache Storm 1.x users should upgrade to version 1.2.4|9.8|已修复| +|CVE-2021-21703|php|In PHP versions 7.3.x up to and including 7.3.31, 7.4.x below 7.4.25 and 8.0.x below 8.0.12, when running PHP FPM SAPI with main FPM daemon process running as root and child worker processes running as lower-privileged users, it is possible for the child processes to access memory shared with the main process and write to it, modifying it in a way that would cause the root process to conduct invalid memory reads and writes, which can be used to escalate privileges from local unprivileged user to the root user.|7.8|已修复| +|CVE-2021-41159|freerdp|FreeRDP is a free implementation of the Remote Desktop Protocol (RDP), released under the Apache license. All FreeRDP clients prior to version 2.4.1 using gateway connections (`/gt:rpc`) fail to validate input data. A malicious gateway might allow client memory to be written out of bounds. This issue has been resolved in version 2.4.1. If you are unable to update then use `/gt:http` rather than /gt:rdp connections if possible or use a direct connection without a gateway.|9.1|已修复| +|CVE-2021-41160|freerdp|FreeRDP is a free implementation of the Remote Desktop Protocol (RDP), released under the Apache license. In affected versions a malicious server might trigger out of bound writes in a connected client. Connections using GDI or SurfaceCommands to send graphics updates to the client might send `0` width/height or out of bound rectangles to trigger out of bound writes. With `0` width or heigth the memory allocation will be `0` but the missing bounds checks allow writing to the pointer at this (not allocated) region. This issue has been patched in FreeRDP 2.4.1.|6.0|已修复| +|CVE-2021-35597|mysql|Vulnerability in the MySQL Client product of Oracle MySQL (component: C API). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Client. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Client. CVSS 3.1 Base Score 6.5 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H).|6.5|已修复| +|CVE-2021-35612|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server as well as unauthorized update, insert or delete access to some of MySQL Server accessible data. CVSS 3.1 Base Score 5.5 (Integrity and Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:L/A:H).|5.5|已修复| +|CVE-2021-35546|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Replication). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35610|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server as well as unauthorized update, insert or delete access to some of MySQL Server accessible data. CVSS 3.1 Base Score 7.1 (Integrity and Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H).|7.1|已修复| +|CVE-2021-35627|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35608|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Group Replication Plugin). Supported versions that are affected are 8.0.26 and prior. Difficult to exploit vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 5.3 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H).|5.3|已修复| +|CVE-2021-2478|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DML). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2479|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DML). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35626|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35624|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Security: Privileges). Supported versions that are affected are 5.7.35 and prior and 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized creation, deletion or modification access to critical data or all MySQL Server accessible data. CVSS 3.1 Base Score 4.9 (Integrity impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:H/A:N).|4.9|已修复| +|CVE-2021-35607|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DML). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 6.5 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H).|6.5|已修复| +|CVE-2021-35604|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 5.7.35 and prior and 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server as well as unauthorized update, insert or delete access to some of MySQL Server accessible data. CVSS 3.1 Base Score 5.5 (Integrity and Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:L/A:H).|5.5|已修复| +|CVE-2021-35625|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Security: Privileges). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized read access to a subset of MySQL Server accessible data. CVSS 3.1 Base Score 2.7 (Confidentiality impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:N).|2.7|已修复| +|CVE-2021-35591|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DML). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2471|mysql|Vulnerability in the MySQL Connectors product of Oracle MySQL (component: Connector/J). Supported versions that are affected are 8.0.26 and prior. Difficult to exploit vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Connectors. Successful attacks of this vulnerability can result in unauthorized access to critical data or complete access to all MySQL Connectors accessible data and unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Connectors. CVSS 3.1 Base Score 5.9 (Confidentiality and Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:N/A:H).|5.9|已修复| +|CVE-2021-35602|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Options). Supported versions that are affected are 8.0.26 and prior. Difficult to exploit vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server as well as unauthorized update, insert or delete access to some of MySQL Server accessible data. CVSS 3.1 Base Score 5.0 (Integrity and Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:L/A:H).|5.0|已修复| +|CVE-2021-2481|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows low privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 6.5 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H).|6.5|已修复| +|CVE-2021-35596|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Error Handling). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35623|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Security: Roles). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized read access to a subset of MySQL Server accessible data. CVSS 3.1 Base Score 2.7 (Confidentiality impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:N).|2.7|已修复| +|CVE-2021-42739|kernel|The firewire subsystem in the Linux kernel through 5.14.13 has a buffer overflow related to drivers/media/firewire/firedtv-avc.c and drivers/media/firewire/firedtv-ci.c, because avc_ca_pmt mishandles bounds checking.|7.8|已修复| +|CVE-2021-42097|mailman|GNU Mailman before 2.1.35 may allow remote Privilege Escalation. A csrf_token value is not specific to a single user account. An attacker can obtain a value within the context of an unprivileged user account, and then use that value in a CSRF attack against an admin (e.g., for account takeover).|8.8|已修复| +|CVE-2021-42096|mailman|GNU Mailman before 2.1.35 may allow remote Privilege Escalation. A certain csrf_token value is derived from the admin password, and may be useful in conducting a brute-force attack against that password.|6.5|已修复| +|CVE-2021-35618|mysql|Vulnerability in the MySQL Cluster product of Oracle MySQL (component: Cluster: General). Supported versions that are affected are 8.0.26 and prior. Difficult to exploit vulnerability allows high privileged attacker with access to the physical communication segment attached to the hardware where the MySQL Cluster executes to compromise MySQL Cluster. Successful attacks require human interaction from a person other than the attacker. Successful attacks of this vulnerability can result in unauthorized ability to cause a partial denial of service (partial DOS) of MySQL Cluster. CVSS 3.1 Base Score 1.8 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:A/AC:H/PR:H/UI:R/S:U/C:N/I:N/A:L).|1.8|已修复| +|CVE-2021-35631|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: GIS). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35630|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Options). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized creation, deletion or modification access to critical data or all MySQL Server accessible data. CVSS 3.1 Base Score 4.9 (Integrity impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:H/A:N).|4.9|已修复| +|CVE-2021-35638|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35633|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Logging). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a partial denial of service (partial DOS) of MySQL Server. CVSS 3.1 Base Score 2.7 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:L).|2.7|已修复| +|CVE-2021-35635|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35634|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35628|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35639|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Stored Procedure). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35632|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Data Dictionary). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with logon to the infrastructure where MySQL Server executes to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.4 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.4|已修复| +|CVE-2021-35636|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35637|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: PS). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35621|mysql|Vulnerability in the MySQL Cluster product of Oracle MySQL (component: Cluster: General). Supported versions that are affected are 7.4.33 and prior, 7.5.23 and prior, 7.6.19 and prior and 8.0.26 and prior. Difficult to exploit vulnerability allows high privileged attacker with access to the physical communication segment attached to the hardware where the MySQL Cluster executes to compromise MySQL Cluster. Successful attacks require human interaction from a person other than the attacker. Successful attacks of this vulnerability can result in takeover of MySQL Cluster. CVSS 3.1 Base Score 6.3 (Confidentiality, Integrity and Availability impacts). CVSS Vector: (CVSS:3.1/AV:A/AC:H/PR:H/UI:R/S:U/C:H/I:H/A:H).|6.3|已修复| +|CVE-2021-35577|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via MySQL Protcol to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35622|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Security: Encryption). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35575|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35648|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: FTS). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35642|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35646|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35641|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35647|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35644|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35640|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DDL). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized update, insert or delete access to some of MySQL Server accessible data. CVSS 3.1 Base Score 2.7 (Integrity impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:L/A:N).|2.7|已修复| +|CVE-2021-35643|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-35645|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.26 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2020-15011|mailman|GNU Mailman before 2.1.33 allows arbitrary content injection via the Cgi/private.py private archive login page.|4.3|已修复| +|CVE-2021-37136|netty|The Bzip2 decompression decoder function doesn t allow setting size restrictions on the decompressed output data (which affects the allocation size used during decompression). All users of Bzip2Decoder are affected. The malicious input can trigger an OOME and so a DoS attack|7.5|已修复| +|CVE-2021-37137|netty|The Snappy frame decoder function doesn t restrict the chunk length which may lead to excessive memory usage. Beside this it also may buffer reserved skippable chunks until the whole chunk was received which may lead to excessive memory usage as well. This vulnerability can be triggered by supplying malicious input that decompresses to a very big size (via a network stream or a file) or by sending a huge skippable chunk.|7.5|已修复| +|CVE-2021-41991|strongswan|The in-memory certificate cache in strongSwan before 5.9.4 has a remote integer overflow upon receiving many requests with different certificates to fill the cache and later trigger the replacement of cache entries. The code attempts to select a less-often-used cache entry by means of a random number generator, but this is not done correctly. Remote code execution might be a slight possibility.|7.5|已修复| +|CVE-2021-41990|strongswan|The gmp plugin in strongSwan before 5.9.4 has a remote integer overflow via a crafted certificate with an RSASSA-PSS signature. For example, this can be triggered by an unrelated self-signed CA certificate sent by an initiator. Remote code execution cannot occur.|7.5|已修复| +|CVE-2021-38297|golang|Go before 1.16.9 and 1.17.x before 1.17.2 has a Buffer Overflow via large arguments in a function invocation from a WASM module, when GOARCH=wasm GOOS=js is used.|9.8|已修复| +|CVE-2021-3872|vim|vim is vulnerable to Heap-based Buffer Overflow.|7.8|已修复| +|CVE-2020-21913|icu|International Components for Unicode (ICU-20850) v66.1 was discovered to contain a use after free bug in the pkg_createWithAssemblyCode function in the file tools/pkgdata/pkgdata.cpp.|5.5|已修复| +|CVE-2021-3875|vim|vim is vulnerable to Heap-based Buffer Overflow.|5.5|已修复| +|CVE-2021-42340|tomcat|The fix for bug 63362 present in Apache Tomcat 10.1.0-M1 to 10.1.0-M5, 10.0.0-M1 to 10.0.11, 9.0.40 to 9.0.53 and 8.5.60 to 8.5.71 introduced a memory leak. The object introduced to collect metrics for HTTP upgrade connections was not released for WebSocket connections once the connection was closed. This created a memory leak that, over time, could lead to a denial of service via an OutOfMemoryError.|7.5|已修复| +|CVE-2021-3671|samba|A null pointer de-reference was found in the way samba kerberos server handled missing sname in TGS-REQ (Ticket Granting Server - Request). An authenticated user could use this flaw to crash the samba server.|6.5|已修复| +|CVE-2021-32028|postgresql|A flaw was found in postgresql. Using an INSERT ... ON CONFLICT ... DO UPDATE command on a purpose-crafted table, an authenticated database user could read arbitrary bytes of server memory. The highest threat from this vulnerability is to data confidentiality.|6.5|已修复| +|CVE-2021-42252|kernel|An issue was discovered in aspeed_lpc_ctrl_mmap in drivers/soc/aspeed/aspeed-lpc-ctrl.c in the Linux kernel before 5.14.6. Local attackers able to access the Aspeed LPC control interface could overwrite memory in the kernel and potentially execute privileges, aka CID-b49a0e69a7b1. This occurs because a certain comparison uses values that are not memory sizes.|7.8|已修复| +|CVE-2020-26145|kernel|An issue was discovered on Samsung Galaxy S3 i9305 4.4.4 devices. The WEP, WPA, WPA2, and WPA3 implementations accept second (or subsequent) broadcast fragments even when sent in plaintext and process them as full unfragmented frames. An adversary can abuse this to inject arbitrary network packets independent of the network configuration.|6.5|已修复| +|CVE-2020-26141|kernel|An issue was discovered in the ALFA Windows 10 driver 6.1316.1209 for AWUS036H. The Wi-Fi implementation does not verify the Message Integrity Check (authenticity) of fragmented TKIP frames. An adversary can abuse this to inject and possibly decrypt packets in WPA or WPA2 networks that support the TKIP data-confidentiality protocol.|6.5|已修复| +|CVE-2021-22930|nodejs|Node.js before 16.6.0, 14.17.4, and 12.22.4 is vulnerable to a use after free attack where an attacker might be able to exploit the memory corruption, to change process behavior.|7.5|已修复| +|CVE-2021-41133|flatpak|Flatpak is a system for building, distributing, and running sandboxed desktop applications on Linux. In versions prior to 1.10.4 and 1.12.0, Flatpak apps with direct access to AF_UNIX sockets such as those used by Wayland, Pipewire or pipewire-pulse can trick portals and other host-OS services into treating the Flatpak app as though it was an ordinary, non-sandboxed host-OS process. They can do this by manipulating the VFS using recent mount-related syscalls that are not blocked by Flatpak s denylist seccomp filter, in order to substitute a crafted `/.flatpak-info` or make that file disappear entirely. Flatpak apps that act as clients for AF_UNIX sockets such as those used by Wayland, Pipewire or pipewire-pulse can escalate the privileges that the corresponding services will believe the Flatpak app has. Note that protocols that operate entirely over the D-Bus session bus (user bus), system bus or accessibility bus are not affected by this. This is due to the use of a proxy process `xdg-dbus-proxy`, whose VFS cannot be manipulated by the Flatpak app, when interacting with these buses. Patches exist for versions 1.10.4 and 1.12.0, and as of time of publication, a patch for version 1.8.2 is being planned. There are no workarounds aside from upgrading to a patched version.|7.8|已修复| +|CVE-2020-10719|undertow|A flaw was found in Undertow in versions before 2.1.1.Final, regarding the processing of invalid HTTP requests with large chunk sizes. This flaw allows an attacker to take advantage of HTTP request smuggling.|6.5|已修复| +|CVE-2020-10705|undertow|A flaw was discovered in Undertow in versions before Undertow 2.1.1.Final where certain requests to the Expect: 100-continue header may cause an out of memory error. This flaw may potentially lead to a denial of service.|7.5|已修复| +|CVE-2019-3888|undertow|A vulnerability was found in Undertow web server before 2.0.21. An information exposure of plain text credentials through log files because Connectors.executeRootHandler:402 logs the HttpServerExchange object at ERROR level using UndertowLogger.REQUEST_LOGGER.undertowRequestFailed(t, exchange)|5.3|已修复| +|CVE-2016-5007|springframework|Both Spring Security 3.2.x, 4.0.x, 4.1.0 and the Spring Framework 3.2.x, 4.0.x, 4.1.x, 4.2.x rely on URL pattern mappings for authorization and for mapping requests to controllers respectively. Differences in the strictness of the pattern matching mechanisms, for example with regards to space trimming in path segments, can lead Spring Security to not recognize certain paths as not protected that are in fact mapped to Spring MVC controllers that should be protected. The problem is compounded by the fact that the Spring Framework provides richer features with regards to pattern matching as well as by the fact that pattern matching in each Spring Security and the Spring Framework can easily be customized creating additional differences.|7.5|已修复| +|CVE-2021-36221|golang|Go before 1.15.15 and 1.16.x before 1.16.7 has a race condition that can lead to a net/http/httputil ReverseProxy panic upon an ErrAbortHandler abort.|5.9|已修复| +|CVE-2021-29923|golang|Go before 1.17 does not properly consider extraneous zero characters at the beginning of an IP address octet, which (in some situations) allows attackers to bypass access control that is based on IP addresses, because of unexpected octal interpretation. This affects net.ParseIP and net.ParseCIDR.|7.5|已修复| +|CVE-2021-33197|golang|In Go before 1.15.13 and 1.16.x before 1.16.5, some configurations of ReverseProxy (from net/http/httputil) result in a situation where an attacker is able to drop arbitrary headers.|5.3|已修复| +|CVE-2021-33195|golang|Go before 1.15.13 and 1.16.x before 1.16.5 has functions for DNS lookups that do not validate replies from DNS servers, and thus a return value may contain an unsafe injection (e.g., XSS) that does not conform to the RFC1035 format.|7.3|已修复| +|CVE-2021-33196|golang|In archive/zip in Go before 1.15.13 and 1.16.x before 1.16.5, a crafted file count (in an archive s header) can cause a NewReader or OpenReader panic.|7.5|已修复| +|CVE-2021-33198|golang|In Go before 1.15.13 and 1.16.x before 1.16.5, there can be a panic for a large exponent to the math/big.Rat SetString or UnmarshalText method.|7.5|已修复| +|CVE-2019-10156|ansible|A flaw was discovered in the way Ansible templating was implemented in versions before 2.6.18, 2.7.12 and 2.8.2, causing the possibility of information disclosure through unexpected variable substitution. By taking advantage of unintended variable substitution the content of any variable may be disclosed.|5.4|已修复| +|CVE-2021-34558|golang|The crypto/tls package of Go through 1.16.5 does not properly assert that the type of public key in an X.509 certificate matches the expected type when doing a RSA based key exchange, allowing a malicious TLS server to cause a TLS client to panic.|6.5|已修复| +|CVE-2021-36976|libarchive|libarchive 3.4.1 through 3.5.1 has a use-after-free in copy_string (called from do_uncompress_block and process_block).|6.5|已修复| +|CVE-2020-7598|nodejs-minimist|minimist before 1.2.2 could be tricked into adding or modifying properties of Object.prototype using a constructor or __proto__ payload.|5.6|已修复| +|CVE-2021-42008|kernel|The decode_data function in drivers/net/hamradio/6pack.c in the Linux kernel before 5.13.13 has a slab out-of-bounds write. Input from a process that has the CAP_NET_ADMIN capability can lead to root access.|5.9|已修复| +|CVE-2021-21704|php|In PHP versions 7.3.x below 7.3.29, 7.4.x below 7.4.21 and 8.0.x below 8.0.8, when using Firebird PDO driver extension, a malicious database server could cause crashes in various database functions, such as getAttribute(), execute(), fetch() and others by returning invalid response data that is not parsed correctly by the driver. This can result in crashes, denial of service or potentially memory corruption.|5.9|已修复| +|CVE-2021-41098|rubygem-nokogiri|Nokogiri is a Rubygem providing HTML, XML, SAX, and Reader parsers with XPath and CSS selector support. In Nokogiri v1.12.4 and earlier, on JRuby only, the SAX parser resolves external entities by default. Users of Nokogiri on JRuby who parse untrusted documents using any of these classes are affected: Nokogiri::XML::SAX::Parse, Nokogiri::HTML4::SAX::Parser or its alias Nokogiri::HTML::SAX::Parser, Nokogiri::XML::SAX::PushParser, and Nokogiri::HTML4::SAX::PushParser or its alias Nokogiri::HTML::SAX::PushParser. JRuby users should upgrade to Nokogiri v1.12.5 or later to receive a patch for this issue. There are no workarounds available for v1.12.4 or earlier. CRuby users are not affected.|7.5|已修复| +|CVE-2021-32672|redis|Redis is an open source, in-memory database that persists on disk. When using the Redis Lua Debugger, users can send malformed requests that cause the debugger’s protocol parser to read data beyond the actual buffer. This issue affects all versions of Redis with Lua debugging support (3.2 or newer). The problem is fixed in versions 6.2.6, 6.0.16 and 5.0.14.|4.3|已修复| +|CVE-2021-39226|grafana|Grafana is an open source data visualization platform. In affected versions unauthenticated and authenticated users are able to view the snapshot with the lowest database key by accessing the literal paths: /dashboard/snapshot/:key, or /api/snapshots/:key. If the snapshot public_mode configuration setting is set to True (vs default of False), unauthenticated users are able to delete the snapshot with the lowest database key by accessing the literal path: /api/snapshots-delete/:deleteKey. Regardless of the snapshot public_mode setting, authenticated users are able to delete the snapshot with the lowest database key by accessing the literal paths: /api/snapshots/:key, or /api/snapshots-delete/:deleteKey. The combination of deletion and viewing enables a complete walk through all snapshot data while resulting in complete snapshot data loss. This issue has been resolved in versions 8.1.6 and 7.5.11. If for some reason you cannot upgrade you can use a reverse proxy or similar to block access to the literal paths: /api/snapshots/:key, /api/snapshots-delete/:deleteKey, /dashboard/snapshot/:key, and /api/snapshots/:key. They have no normal function and can be disabled without side effects.|7.3|已修复| +|CVE-2021-41864|kernel|prealloc_elems_and_freelist in kernel/bpf/stackmap.c in the Linux kernel through 5.14.9 allows unprivileged users to trigger an eBPF multiplication integer overflow with a resultant out-of-bounds write.|7.8|已修复| +|CVE-2021-3521|rpm|The OpenPGP subkey is associated with the master key through a "binding signature", RPM will not check their binding signature before importing the subkey; if the attacker can add it or the other party in social engineering adds the malicious subkey to With a legitimate public key, RPM may mistakenly trust malicious signatures.|3.0|已修复| +|CVE-2020-8151|rubygem-activeresource|There is a possible information disclosure issue in Active Resource = 7.20.0 and <= 7.78.0 to require a successful upgrade to TLS when speaking to an IMAP, POP3 or FTP server (`--ssl-reqd` on the command line or`CURLOPT_USE_SSL` set to `CURLUSESSL_CONTROL` or `CURLUSESSL_ALL` withlibcurl). This requirement could be bypassed if the server would return a properly crafted but perfectly legitimate response.This flaw would then make curl silently continue its operations **withoutTLS** contrary to the instructions and expectations, exposing possibly sensitive data in clear text over the network.|6.1|已修复| +|CVE-2021-22947|curl|When curl >= 7.20.0 and <= 7.78.0 connects to an IMAP or POP3 server to retrieve data using STARTTLS to upgrade to TLS security, the server can respond and send back multiple responses at once that curl caches. curl would then upgrade to TLS but not flush the in-queue of cached responses but instead continue using and trustingthe responses it got *before* the TLS handshake as if they were authenticated.Using this flaw, it allows a Man-In-The-Middle attacker to first inject the fake responses, then pass-through the TLS traffic from the legitimate server and trick curl into sending data back to the user thinking the attacker s injected data comes from the TLS-protected server.|6.1|已修复| +|CVE-2020-11864|libEMF|libEMF (aka ECMA-234 Metafile Library) through 1.0.11 allows denial of service (issue 2 of 2).|5.5|已修复| +|CVE-2019-14822|ibus|A flaw was discovered in ibus that allows any unprivileged user to monitor and send method calls to the ibus bus of another user due to a misconfiguration in the DBus server setup. A local attacker may use this flaw to intercept all keystrokes of a victim user who is using the graphical interface, change the input method engine, or modify other input related configurations of the victim user.|7.1|已修复| +|CVE-2020-12137|mailman|GNU Mailman 2.x before 2.1.30 uses the .obj extension for scrubbed application/octet-stream MIME parts. This behavior may contribute to XSS attacks against list-archive visitors, because an HTTP reply from an archive web server may lack a MIME type, and a web browser may perform MIME sniffing, conclude that the MIME type should have been text/html, and execute JavaScript code.|6.1|已修复| +|CVE-2020-11866|libEMF|libEMF (aka ECMA-234 Metafile Library) through 1.0.11 allows a use-after-free.|7.8|已修复| +|CVE-2020-11865|libEMF|libEMF (aka ECMA-234 Metafile Library) through 1.0.11 allows out-of-bounds memory access.|7.8|已修复| +|CVE-2019-18391|virglrenderer|A heap-based buffer overflow in the vrend_renderer_transfer_write_iov function in vrend_renderer.c in virglrenderer through 0.8.0 allows guest OS users to cause a denial of service via VIRGL_CCMD_RESOURCE_INLINE_WRITE commands.|5.5|已修复| +|CVE-2019-3820|gnome-shell|It was discovered that the gnome-shell lock screen since version 3.15.91 did not properly restrict all contextual actions. An attacker with physical access to a locked workstation could invoke certain keyboard shortcuts, and potentially other actions.|4.3|已修复| +|CVE-2020-16121|PackageKit|PackageKit provided detailed error messages to unprivileged callers that exposed information about file presence and mimetype of files that the user would be unable to determine on its own.|3.3|已修复| +|CVE-2019-18388|virglrenderer|A NULL pointer dereference in vrend_renderer.c in virglrenderer through 0.8.0 allows guest OS users to cause a denial of service via malformed commands.|5.5|已修复| +|CVE-2019-18390|virglrenderer|An out-of-bounds read in the vrend_blit_need_swizzle function in vrend_renderer.c in virglrenderer through 0.8.0 allows guest OS users to cause a denial of service via VIRGL_CCMD_BLIT commands.|7.1|已修复| +|CVE-2020-13112|libexif|An issue was discovered in libexif before 0.6.22. Several buffer over-reads in EXIF MakerNote handling could lead to information disclosure and crashes. This is different from CVE-2020-0093.|9.1|已修复| +|CVE-2020-11863|libEMF|libEMF (aka ECMA-234 Metafile Library) through 1.0.11 allows denial of service (issue 1 of 2).|5.5|已修复| +|CVE-2019-3881|rubygem-bundler|Bundler prior to 2.1.0 uses a predictable path in /tmp/, created with insecure permissions as a storage location for gems, if locations under the user s home directory are not available. If Bundler is used in a scenario where the user does not have a writable home directory, an attacker could place malicious code in this directory that would be later loaded and executed.|7.0|已修复| +|CVE-2020-13999|libEMF|ScaleViewPortExtEx in libemf.cpp in libEMF (aka ECMA-234 Metafile Library) 1.0.12 allows an integer overflow and denial of service via a crafted EMF file.|5.5|已修复| +|CVE-2019-12293|poppler|In Poppler through 0.76.1, there is a heap-based buffer over-read in JPXStream::init in JPEG2000Stream.cc via data with inconsistent heights or widths.|8.8|已修复| +|CVE-2019-20433|aspell|libaspell.a in GNU Aspell before 0.60.8 has a buffer over-read for a string ending with a single 0 byte, if the encoding is set to ucs-2 or ucs-4 outside of the application, as demonstrated by the ASPELL_CONF environment variable.|5.8|已修复| +|CVE-2020-14154|mutt|Mutt before 1.14.3 proceeds with a connection even if, in response to a GnuTLS certificate prompt, the user rejects an expired intermediate certificate.|4.8|已修复| +|CVE-2019-13504|exiv2|There is an out-of-bounds read in Exiv2::MrwImage::readMetadata in mrwimage.cpp in Exiv2 through 0.27.2.|6.5|已修复| +|CVE-2020-12863|sane-backends|An out-of-bounds read in SANE Backends before 1.0.30 may allow a malicious device connected to the same local network as the victim to read important information, such as the ASLR offsets of the program, aka GHSL-2020-083.|4.3|已修复| +|CVE-2020-12108|mailman|/options/mailman in GNU Mailman before 2.1.31 allows Arbitrary Content Injection.|6.5|已修复| +|CVE-2019-18874|python-psutil|psutil (aka python-psutil) through 5.6.5 can have a double free. This occurs because of refcount mishandling within a while or for loop that converts system data into a Python object.|7.5|已修复| +|CVE-2019-13108|exiv2|An integer overflow in Exiv2 through 0.27.1 allows an attacker to cause a denial of service (SIGSEGV) via a crafted PNG image file, because PngImage::readMetadata mishandles a zero value for iccOffset.|6.5|已修复| +|CVE-2019-10063|flatpak|Flatpak before 1.0.8, 1.1.x and 1.2.x before 1.2.4, and 1.3.x before 1.3.1 allows a sandbox bypass. Flatpak versions since 0.8.1 address CVE-2017-5226 by using a seccomp filter to prevent sandboxed apps from using the TIOCSTI ioctl, which could otherwise be used to inject commands into the controlling terminal so that they would be executed outside the sandbox after the sandboxed app exits. This fix was incomplete: on 64-bit platforms, the seccomp filter could be bypassed by an ioctl request number that has TIOCSTI in its 32 least significant bits and an arbitrary nonzero value in its 32 most significant bits, which the Linux kernel would treat as equivalent to TIOCSTI.|8.8|已修复| +|CVE-2020-27778|poppler|A flaw was found in Poppler in the way certain PDF files were converted into HTML. A remote attacker could exploit this flaw by providing a malicious PDF file that, when processed by the pdftohtml program, would crash the application causing a denial of service.|7.5|已修复| +|CVE-2021-3796|vim|vim is vulnerable to Use After Free.|8.2|已修复| +|CVE-2021-3778|vim|vim is vulnerable to Heap-based Buffer Overflow.|7.8|已修复| +|CVE-2020-10001|cups|An input validation issue was addressed with improved memory handling. This issue is fixed in macOS Big Sur 11.1, Security Update 2020-001 Catalina, Security Update 2020-007 Mojave. A malicious application may be able to read restricted memory.|5.5|已修复| +|CVE-2021-29338|openjpeg2|There is a flaw in the opj2_compress program in openjpeg2. An attacker who is able to submit a large number of image files to be processed in a directory by opj2_compress, could trigger a heap out-of-bounds write due to an integer overflow, which is caused by the large number of image files. The greatest threat posed by this flaw is to confidentiality, integrity, and availability.|5.5|已修复| +|CVE-2021-3631|libvirt|A flaw was found in libvirt while it generates SELinux MCS category pairs for VMs dynamic labels. This flaw allows one exploited guest to access files labeled for another guest, resulting in the breaking out of sVirt confinement. The highest threat from this vulnerability is to confidentiality and integrity.|3.0|已修复| +|CVE-2021-3565|tpm2-tools|A flaw was found in tpm2-tools in versions before 5.1.1 and before 4.3.2. tpm2_import used a fixed AES key for the inner wrapper, potentially allowing a MITM attacker to unwrap the inner portion and reveal the key being imported. The highest threat from this vulnerability is to data confidentiality.|5.9|已修复| +|CVE-2021-3592|qemu|An invalid pointer initialization issue was found in the SLiRP networking implementation of QEMU. The flaw exists in the bootp_input() function and could occur while processing a udp packet that is smaller than the size of the bootp_t structure. A malicious guest could use this flaw to leak 10 bytes of uninitialized heap memory from the host. The highest threat from this vulnerability is to data confidentiality.|3.8|已修复| +|CVE-2021-3595|qemu|An invalid pointer initialization issue was found in the SLiRP networking implementation of QEMU. The flaw exists in the tftp_input() function and could occur while processing a udp packet that is smaller than the size of the tftp_t structure. This issue may lead to out-of-bounds read access or indirect host memory disclosure to the guest. The highest threat from this vulnerability is to data confidentiality.|3.8|已修复| +|CVE-2021-3593|qemu|An invalid pointer initialization issue was found in the SLiRP networking implementation of QEMU. The flaw exists in the udp6_input() function and could occur while processing a udp packet that is smaller than the size of the udphdr structure. This issue may lead to out-of-bounds read access or indirect host memory disclosure to the guest. The highest threat from this vulnerability is to data confidentiality.|3.8|已修复| +|CVE-2021-21705|php|No description is available for this CVE.|5.3|已修复| +|CVE-2021-2441|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2427|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2426|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2389|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 5.7.34 and prior and 8.0.25 and prior. Difficult to exploit vulnerability allows unauthenticated attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 5.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H).|5.9|已修复| +|CVE-2021-2385|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Replication). Supported versions that are affected are 5.7.34 and prior and 8.0.25 and prior. Difficult to exploit vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server as well as unauthorized update, insert or delete access to some of MySQL Server accessible data. CVSS 3.1 Base Score 5.0 (Integrity and Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:L/A:H).|5.0|已修复| +|CVE-2021-2383|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-3660|cockpit|Cockpit (and its plugins) do not seem to protect itself against clickjacking. It is possible to render a page from a cockpit server via another website, inside an HTML entry. This may be used by a malicious website in clickjacking or similar attacks.|3.3|已修复| +|CVE-2019-25051|aspell|objstack in GNU Aspell 0.60.8 has a heap-based buffer overflow in acommon::ObjStack::dup_top (called from acommon::StringMap::add and acommon::Config::lookup_list).|7.8|已修复| +|CVE-2021-2410|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2370|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DML). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2390|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 5.7.34 and prior and 8.0.25 and prior. Difficult to exploit vulnerability allows unauthenticated attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 5.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H).|5.9|已修复| +|CVE-2021-2437|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2425|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2384|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2402|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Locking). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2418|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2387|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2417|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: GIS). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server as well as unauthorized update, insert or delete access to some of MySQL Server accessible data and unauthorized read access to a subset of MySQL Server accessible data. CVSS 3.1 Base Score 6.0 (Confidentiality, Integrity and Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:L/A:H).|6.0|已修复| +|CVE-2021-2399|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: DDL). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2372|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 5.7.34 and prior and 8.0.25 and prior. Difficult to exploit vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.4 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.4|已修复| +|CVE-2021-2374|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: InnoDB). Supported versions that are affected are 8.0.25 and prior. Difficult to exploit vulnerability allows high privileged attacker with logon to the infrastructure where MySQL Server executes to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized access to critical data or complete access to all MySQL Server accessible data. CVSS 3.1 Base Score 4.1 (Confidentiality impacts). CVSS Vector: (CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:U/C:H/I:N/A:N).|4.1|已修复| +|CVE-2021-2367|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-2342|mysql|Vulnerability in the MySQL Server product of Oracle MySQL (component: Server: Optimizer). Supported versions that are affected are 5.7.34 and prior and 8.0.25 and prior. Easily exploitable vulnerability allows high privileged attacker with network access via multiple protocols to compromise MySQL Server. Successful attacks of this vulnerability can result in unauthorized ability to cause a hang or frequently repeatable crash (complete DOS) of MySQL Server. CVSS 3.1 Base Score 4.9 (Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:H).|4.9|已修复| +|CVE-2021-3667|libvirt|An improper locking issue was found in the virStoragePoolLookupByTargetPath API of libvirt. It occurs in the storagePoolLookupByTargetPath function where a locked virStoragePoolObj object is not properly released on ACL permission failure. Clients connecting to the read-write socket with limited ACL permissions could use this flaw to acquire the lock and prevent other users from accessing storage pool/volume APIs, resulting in a denial of service condition. The highest threat from this vulnerability is to system availability.|6.5|已修复| +|CVE-2021-31292|exiv2|A flaw was found in exiv2. A integer wraparound in the CrwMap:encode0x1810 function leads to memcpy call with a very large size allowing an attacker, who can provide a malicious image, to crash an application which uses the exiv2 library. The highest threat from this vulnerability is to service availability.|7.5|已修复| +|CVE-2021-3658|bluez|bluetoothd from bluez incorrectly saves adapters Discoverable status when a device is powered down, and restores it when powered up. If a device is powered down while discoverable, it will be discoverable when powered on again. This could lead to inadvertent exposure of the bluetooth stack to physically nearby attackers.|4.6|已修复| +|CVE-2021-3622|hivex|A defect was found in the hivex library. This vulnerability allows an attacker to enter a specially crafted Windows registry (hive) file, which will cause hivex to recursively call the _get_children() function, resulting in a stack overflow. The biggest threat to this vulnerability is system availability.|4.3|已修复| +|CVE-2021-37619|exiv2|Exiv2 is a command-line utility and C++ library for reading, writing, deleting, and modifying the metadata of image files. An out-of-bounds read was found in Exiv2 versions v0.27.4 and earlier. The out-of-bounds read is triggered when Exiv2 is used to write metadata into a crafted image file. An attacker could potentially exploit the vulnerability to cause a denial of service by crashing Exiv2, if they can trick the victim into running Exiv2 on a crafted image file. Note that this bug is only triggered when writing the metadata, which is a less frequently used Exiv2 operation than reading the metadata. For example, to trigger the bug in the Exiv2 command-line application, you need to add an extra command-line argument such as insert. The bug is fixed in version v0.27.5.|5.5|已修复| +|CVE-2021-3700|usbredir|There is a vulnerability in usbredirparser_serialize() in usbredirparser/usbredirparser.c that continues to be used after the memory is released, slowing down or blocking the target caused by serializing a large amount of written data.|3.9|已修复| +|CVE-2021-3737|python3|A flaw was found in python. An improperly handled HTTP response in the HTTP client code of python may allow a remote attacker, who controls the HTTP server, to make the client script enter an infinite loop, consuming CPU time. The highest threat from this vulnerability is to system availability.|5.9|已修复| +|CVE-2021-3733|python3|There s a flaw in urllib s AbstractBasicAuthHandler class. An attacker who controls a malicious HTTP server that an HTTP client (such as web browser) connects to, could trigger a Regular Expression Denial of Service (ReDOS) during an authentication request with a specially crafted payload that is sent by the server to the client. The greatest threat that this flaw poses is to application availability.|6.5|已修复| +|CVE-2021-39358|gfbgraph|In GNOME libgfbgraph through 0.2.4, gfbgraph-photo.c does not enable TLS certificate verification on the SoupSessionSync objects it creates, leaving users vulnerable to network MITM attacks. NOTE: this is similar to CVE-2016-20011.|5.9|已修复| +|CVE-2021-3748|qemu|A use-after-free vulnerability was found in the virtio-net device of QEMU. It could occur when the descriptor s address belongs to the non direct access region, due to num_buffers being set after the virtqueue elem has been unmapped. A malicious guest could use this flaw to crash QEMU, resulting in a denial of service condition, or potentially execute code on the host with the privileges of the QEMU process. The highest threat from this vulnerability is to confidentiality, integrity, as well as system availability.|7.5|已修复| diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/OpenIPMI_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/OpenIPMI_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..7233dc2c8d70e444afdb9552cd09fef83805acae --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/OpenIPMI_all_result.md @@ -0,0 +1,212 @@ +# Functions changed info + +---------------diffs in OpenIPMI_libOpenIPMIutils.so.0.0.1_abidiff.out:---------------- + +---------------diffs in OpenIPMI_libOpenIPMIposix.so.0.0.1_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 2 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +2 Added functions: + + + + 'function int sel_select_intr_sigmask(selector_s*, sel_send_sig_cb, long int, void*, timeval*, sigset_t*)' {sel_select_intr_sigmask} + + 'function int sel_setup_forked_process(selector_s*)' {sel_setup_forked_process} + + + +---------------diffs in OpenIPMI_libOpenIPMIglib.so.0.0.1_abidiff.out:---------------- + +---------------diffs in OpenIPMI_libOpenIPMIui.so.1.0.1_abidiff.out:---------------- + +---------------diffs in OpenIPMI_libOpenIPMI.so.0.0.5_abidiff.out:---------------- + +---------------diffs in OpenIPMI_libOpenIPMIpthread.so.0.0.1_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 2 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +2 Added functions: + + + + 'function int sel_select_intr_sigmask(selector_s*, sel_send_sig_cb, long int, void*, timeval*, sigset_t*)' {sel_select_intr_sigmask} + + 'function int sel_setup_forked_process(selector_s*)' {sel_setup_forked_process} + + + +---------------diffs in OpenIPMI_libIPMIlanserv.so.0.0.1_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 4 Changed (20 filtered out), 3 Added functions + +Variables changes summary: 0 Removed, 0 Changed (4 filtered out), 0 Added variables + + + +3 Added functions: + + + + 'function void ipmbserv_handle_data(ipmbserv_data_t*, uint8_t*, unsigned int)' {ipmbserv_handle_data} + + 'function int ipmbserv_init(ipmbserv_data_t*)' {ipmbserv_init} + + 'function int ipmbserv_read_config(char**, sys_data_t*, const char**)' {ipmbserv_read_config} + + + +4 functions with some indirect sub-type change: + + + + [C]'function int chan_init(channel_t*)' at serv.c:212:1 has some indirect sub-type changes: + + parameter 1 of type 'channel_t*' has sub-type changes: + + in pointed to type 'typedef channel_t' at msg.h:61:1: + + underlying type 'struct channel_s' at serv.h:120:1 changed: + + type size changed from 1984 to 2048 (in bits) + + 1 data member insertion: + + 'int channel_s::prim_ipmb_in_cfg_file', at offset 1984 (in bits) at serv.h:224:1 + + no data member changes (19 filtered); + + + + [C]'function void debug_log_raw_msg(sys_data_t*, unsigned char*, unsigned int, const char*, ...)' at serv.c:240:1 has some indirect sub-type changes: + + parameter 1 of type 'sys_data_t*' has sub-type changes: + + in pointed to type 'typedef sys_data_t' at msg.h:124:1: + + underlying type 'struct sys_data_s' at serv.h:325:1 changed: + + type size changed from 18688 to 18752 (in bits) + + 1 data member insertion: + + 'int (void*, channel_t*)* sys_data_s::ipmb_channel_init', at offset 18688 (in bits) at serv.h:414:1 + + no data member changes (17 filtered); + + + + [C]'function void handle_asf(lanserv_data_t*, uint8_t*, int, void*, int)' at lanserv_asf.c:96:1 has some indirect sub-type changes: + + parameter 1 of type 'lanserv_data_t*' has sub-type changes: + + in pointed to type 'typedef lanserv_data_t' at lanserv.h:73:1: + + underlying type 'struct lanserv_data_s' at lanserv.h:219:1 changed: + + type size changed from 192960 to 193024 (in bits) + + 20 data member changes (1 filtered): + + + + 'user_t* lanserv_data_s::users' offset changed from 2304 to 2368 (in bits) (by +64 bits) + + 'pef_data_t* lanserv_data_s::pef' offset changed from 2368 to 2432 (in bits) (by +64 bits) + + 'unsigned int lanserv_data_s::default_session_timeout' offset changed from 2432 to 2496 (in bits) (by +64 bits) + + 'unsigned char* lanserv_data_s::bmc_key' offset changed from 2496 to 2560 (in bits) (by +64 bits) + + 'void* lanserv_data_s::user_info' offset changed from 2560 to 2624 (in bits) (by +64 bits) + + 'void (lanserv_data_t*, iovec*, int, void*, int)* lanserv_data_s::send_out' offset changed from 2624 to 2688 (in bits) (by +64 bits) + + 'int (lanserv_data_t*, void*, int)* lanserv_data_s::gen_rand' offset changed from 2688 to 2752 (in bits) (by +64 bits) + + 'session_t lanserv_data_s::sessions[64]' offset changed from 2752 to 2816 (in bits) (by +64 bits) + + 'uint32_t lanserv_data_s::sid_seq' offset changed from 191168 to 191232 (in bits) (by +64 bits) + + 'ipmi_authdata_t lanserv_data_s::challenge_auth' offset changed from 191232 to 191296 (in bits) (by +64 bits) + + 'unsigned int lanserv_data_s::next_challenge_seq' offset changed from 191296 to 191360 (in bits) (by +64 bits) + + 'lanparm_data_t lanserv_data_s::lanparm' offset changed from 191328 to 191392 (in bits) (by +64 bits) + + 'unsigned char lanserv_data_s::lanparm_changed[8]' offset changed from 191904 to 191968 (in bits) (by +64 bits) + + 'unsigned int lanserv_data_s::persist_changed' offset changed from 191968 to 192032 (in bits) (by +64 bits) + + 'lanparm_data_t lanserv_data_s::lanparm_rollback' offset changed from 192000 to 192064 (in bits) (by +64 bits) + + 'char* lanserv_data_s::config_prog' offset changed from 192576 to 192640 (in bits) (by +64 bits) + + 'lan_addr_t lanserv_data_s::lan_addr' offset changed from 192640 to 192704 (in bits) (by +64 bits) + + 'int lanserv_data_s::lan_addr_set' offset changed from 192896 to 192960 (in bits) (by +64 bits) + + 'uint16_t lanserv_data_s::port' offset changed from 192928 to 192992 (in bits) (by +64 bits) + + + + [C]'function int ra_setup(serserv_data_t*)' at serial_ipmi.c:310:1 has some indirect sub-type changes: + + parameter 1 of type 'serserv_data_t*' has sub-type changes: + + in pointed to type 'typedef serserv_data_t' at serserv.h:62:1: + + underlying type 'struct serserv_data_s' at serserv.h:80:1 changed: + + type size changed from 3072 to 3136 (in bits) + + 17 data member changes: + + + + 'os_handler_t* serserv_data_s::os_hnd' offset changed from 2240 to 2304 (in bits) (by +64 bits) + + 'sys_data_t* serserv_data_s::sysinfo' offset changed from 2304 to 2368 (in bits) (by +64 bits) + + 'void* serserv_data_s::user_info' offset changed from 2368 to 2432 (in bits) (by +64 bits) + + 'int serserv_data_s::bind_fd' offset changed from 2432 to 2496 (in bits) (by +64 bits) + + 'int serserv_data_s::con_fd' offset changed from 2464 to 2528 (in bits) (by +64 bits) + + 'int serserv_data_s::connected' offset changed from 2496 to 2560 (in bits) (by +64 bits) + + 'void (serserv_data_t*, unsigned char*, unsigned int)* serserv_data_s::send_out' offset changed from 2560 to 2624 (in bits) (by +64 bits) + + 'ser_codec_t* serserv_data_s::codec' offset changed from 2624 to 2688 (in bits) (by +64 bits) + + 'void* serserv_data_s::codec_info' offset changed from 2688 to 2752 (in bits) (by +64 bits) + + 'ser_oem_handler_t* serserv_data_s::oem' offset changed from 2752 to 2816 (in bits) (by +64 bits) + + 'void* serserv_data_s::oem_info' offset changed from 2816 to 2880 (in bits) (by +64 bits) + + 'int serserv_data_s::debug' offset changed from 2880 to 2944 (in bits) (by +64 bits) + + 'unsigned char serserv_data_s::my_ipmb' offset changed from 2920 to 2984 (in bits) (by +64 bits) + + 'unsigned char serserv_data_s::global_enables' offset changed from 2928 to 2992 (in bits) (by +64 bits) + + 'unsigned char serserv_data_s::attn_chars[8]' offset changed from 2936 to 3000 (in bits) (by +64 bits) + + 'unsigned int serserv_data_s::attn_chars_len' offset changed from 3008 to 3072 (in bits) (by +64 bits) + + + + + +---------------diffs in OpenIPMI_libOpenIPMIcmdlang.so.0.0.5_abidiff.out:---------------- + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/alsa-lib_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/alsa-lib_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..a29cbff85f3984a7e32c043d5bf7a18be253d54d --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/alsa-lib_all_result.md @@ -0,0 +1,464 @@ +# Functions changed info + +---------------diffs in alsa-lib_libasound.so.2.0.0_abidiff.out:---------------- + +Functions changes summary: 8 Removed, 8 Changed (652 filtered out), 10 Added functions + +Variables changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added variable + + + +8 Removed functions: + + + + 'function int snd_tplg_add_object(snd_tplg_t*, snd_tplg_obj_template_t*)' {snd_tplg_add_object@@ALSA_0.9} + + 'function int snd_tplg_build(snd_tplg_t*, const char*)' {snd_tplg_build@@ALSA_0.9} + + 'function int snd_tplg_build_file(snd_tplg_t*, const char*, const char*)' {snd_tplg_build_file@@ALSA_0.9} + + 'function void snd_tplg_free(snd_tplg_t*)' {snd_tplg_free@@ALSA_0.9} + + 'function snd_tplg_t* snd_tplg_new()' {snd_tplg_new@@ALSA_0.9} + + 'function int snd_tplg_set_manifest_data(snd_tplg_t*, void*, int)' {snd_tplg_set_manifest_data@@ALSA_0.9} + + 'function int snd_tplg_set_version(snd_tplg_t*, unsigned int)' {snd_tplg_set_version@@ALSA_0.9} + + 'function void snd_tplg_verbose(snd_tplg_t*, int)' {snd_tplg_verbose@@ALSA_0.9} + + + +10 Added functions: + + + + 'function int snd_config_add_after(snd_config_t*, snd_config_t*)' {snd_config_add_after@@ALSA_0.9} + + 'function int snd_config_add_before(snd_config_t*, snd_config_t*)' {snd_config_add_before@@ALSA_0.9} + + 'function int snd_config_is_array(const snd_config_t*)' {snd_config_is_array@@ALSA_0.9} + + 'function int snd_dlpath(char*, size_t, const char*)' {snd_dlpath@@ALSA_0.9} + + 'function int snd_mixer_selem_id_parse(snd_mixer_selem_id_t*, const char*)' {snd_mixer_selem_id_parse@@ALSA_0.9} + + 'function int snd_pcm_extplug_set_param_link(snd_pcm_extplug_t*, int, int)' {snd_pcm_extplug_set_param_link@@ALSA_0.9} + + 'function snd_pcm_uframes_t snd_pcm_ioplug_avail(const snd_pcm_ioplug_t* const, const snd_pcm_uframes_t, const snd_pcm_uframes_t)' {snd_pcm_ioplug_avail@@ALSA_0.9} + + 'function size_t snd_strlcpy(char*, const char*, size_t)' {snd_strlcpy@@ALSA_0.9} + + 'function int snd_use_case_parse_ctl_elem_id(snd_ctl_elem_id_t*, const char*, const char*)' {snd_use_case_parse_ctl_elem_id@@ALSA_0.9} + + 'function int snd_use_case_parse_selem_id(snd_mixer_selem_id_t*, const char*, const char*)' {snd_use_case_parse_selem_id@@ALSA_0.9} + + + +8 functions with some indirect sub-type change: + + + + [C]'function snd_pcm_access_t __old_snd_pcm_hw_params_set_access_first(snd_pcm_t*, snd_pcm_hw_params_t*)' at pcm.c:7936:1 has some indirect sub-type changes: + + Please note that the exported symbol of this function is snd_pcm_hw_params_set_access_first@ALSA_0.9 + + parameter 1 of type 'snd_pcm_t*' has sub-type changes: + + in pointed to type 'typedef snd_pcm_t' at pcm.h:394:1: + + underlying type 'struct _snd_pcm' at pcm_local.h:189:1 changed: + + type size hasn't changed + + 1 data member changes (2 filtered): + + type of 'const snd_pcm_fast_ops_t* _snd_pcm::fast_ops' changed: + + in pointed to type 'const snd_pcm_fast_ops_t': + + in unqualified underlying type 'typedef snd_pcm_fast_ops_t' at pcm_local.h:188:1: + + underlying type 'struct {int (snd_pcm_t*, snd_pcm_status_t*)* status; int (snd_pcm_t*)* prepare; int (snd_pcm_t*)* reset; int (snd_pcm_t*)* start; int (snd_pcm_t*)* drop; int (snd_pcm_t*)* drain; int (snd_pcm_t*, int)* pause; typedef snd_pcm_state_t (snd_pcm_t*)* state; int (snd_pcm_t*)* hwsync; int (snd_pcm_t*, snd_pcm_sframes_t*)* delay; int (snd_pcm_t*)* resume; int (snd_pcm_t*, snd_pcm_t*)* link; int (snd_pcm_t*, snd_pcm_t*)* link_slaves; int (snd_pcm_t*)* unlink; typedef snd_pcm_sframes_t (snd_pcm_t*)* rewindable; typedef snd_pcm_sframes_t (snd_pcm_t*, typedef snd_pcm_uframes_t)* rewind; typedef snd_pcm_sframes_t (snd_pcm_t*)* forwardable; typedef snd_pcm_sframes_t (snd_pcm_t*, typedef snd_pcm_uframes_t)* forward; typedef snd_pcm_sframes_t (snd_pcm_t*, void*, typedef snd_pcm_uframes_t)* writei; typedef snd_pcm_sframes_t (snd_pcm_t*, void**, typedef snd_pcm_uframes_t)* writen; typedef snd_pcm_sframes_t (snd_pcm_t*, void*, typedef snd_pcm_uframes_t)* readi; typedef snd_pcm_sframes_t (snd_pcm_t*, void**, typedef snd_pcm_uframes_t)* readn; typedef snd_pcm_sframes_t (snd_pcm_t*)* avail_update; typedef snd_pcm_sframes_t (snd_pcm_t*, typedef snd_pcm_uframes_t, typedef snd_pcm_uframes_t)* mmap_commit; int (snd_pcm_t*, snd_pcm_uframes_t*, snd_htimestamp_t*)* htimestamp; int (snd_pcm_t*)* poll_descriptors_count; int (snd_pcm_t*, pollfd*, unsigned int)* poll_descriptors; int (snd_pcm_t*, pollfd*, unsigned int, unsigned short int*)* poll_revents; int (snd_pcm_t*, typedef snd_pcm_uframes_t)* may_wait_for_avail_min;}' at pcm_local.h:157:1 changed: + + type size changed from 1856 to 1920 (in bits) + + 1 data member insertion: + + 'int (snd_pcm_t*, const snd_pcm_channel_area_t**, snd_pcm_uframes_t*, snd_pcm_uframes_t*)* mmap_begin', at offset 1856 (in bits) at pcm_local.h:187:1 + + 1 data member changes (18 filtered): + + type of 'int (snd_pcm_t*, snd_pcm_status_t*)* status' changed: + + in pointed to type 'function type int (snd_pcm_t*, snd_pcm_status_t*)': + + parameter 2 of type 'snd_pcm_status_t*' has sub-type changes: + + in pointed to type 'typedef snd_pcm_status_t' at pcm.h:69:1: + + underlying type 'struct snd_pcm_status' at asound.h:456:1 changed: + + type size hasn't changed + + 1 data member insertion: + + '__time_pad snd_pcm_status::pad1', at offset 32 (in bits) at asound.h:475:1 + + + + + + + + [C]'function int __snd_ctl_elem_info_get_dimension(const snd_ctl_elem_info_t*, unsigned int)' at control.c:2546:1 has some indirect sub-type changes: + + Please note that the exported symbol of this function is snd_ctl_elem_info_get_dimension@@ALSA_0.9.3 + + parameter 1 of type 'const snd_ctl_elem_info_t*' has sub-type changes: + + in pointed to type 'const snd_ctl_elem_info_t': + + in unqualified underlying type 'typedef snd_ctl_elem_info_t' at control.h:63:1: + + underlying type 'struct snd_ctl_elem_info' at asound.h:900:1 changed: + + type size hasn't changed + + 1 data member deletion: + + 'union {unsigned short int d[4]; unsigned short int* d_ptr;} snd_ctl_elem_info::dimen', at offset 1664 (in bits) at asound.h:929:1 + + + + 1 data member change: + + type of 'unsigned char snd_ctl_elem_info::reserved[56]' changed: + + type name changed from 'unsigned char[56]' to 'unsigned char[64]' + + array type size changed from 448 to 512 + + array type subrange 1 changed length from 56 to 64 + + and offset changed from 1728 to 1664 (in bits) (by -64 bits) + + + + [C]'function int _snd_ctl_hw_open(snd_ctl_t**, char*, snd_config_t*, snd_config_t*, int)' at control_hw.c:440:1 has some indirect sub-type changes: + + parameter 1 of type 'snd_ctl_t**' has sub-type changes: + + in pointed to type 'snd_ctl_t*': + + in pointed to type 'typedef snd_ctl_t' at control.h:214:1: + + underlying type 'struct _snd_ctl' at control_local.h:58:1 changed: + + type size hasn't changed + + 1 data member change: + + type of 'const snd_ctl_ops_t* _snd_ctl::ops' changed: + + in pointed to type 'const snd_ctl_ops_t': + + in unqualified underlying type 'typedef snd_ctl_ops_t' at control_local.h:56:1: + + underlying type 'struct _snd_ctl_ops' at control_local.h:24:1 changed: + + type size hasn't changed + + 1 data member changes (19 filtered): + + type of 'int (snd_ctl_t*, snd_ctl_elem_value_t*)* _snd_ctl_ops::element_read' changed: + + in pointed to type 'function type int (snd_ctl_t*, snd_ctl_elem_value_t*)': + + parameter 2 of type 'snd_ctl_elem_value_t*' has sub-type changes: + + in pointed to type 'typedef snd_ctl_elem_value_t' at control.h:66:1: + + underlying type 'struct snd_ctl_elem_value' at asound.h:933:1 changed: + + type size hasn't changed + + 1 data member deletion: + + 'timespec snd_ctl_elem_value::tstamp', at offset 8768 (in bits) at asound.h:955:1 + + + + 1 data member change: + + type of 'unsigned char snd_ctl_elem_value::reserved[112]' changed: + + type name changed from 'unsigned char[112]' to 'unsigned char[128]' + + array type size changed from 896 to 1024 + + array type subrange 1 changed length from 112 to 128 + + and offset changed from 8896 to 8768 (in bits) (by -128 bits) + + + + + + parameter 4 of type 'snd_config_t*' has sub-type changes: + + in pointed to type 'typedef snd_config_t' at conf.h:69:1: + + underlying type 'struct _snd_config' at conf.c:434:1 changed: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'union {long int integer; long long int integer64; char* string; double real; void* ptr; struct {list_head fields; int join;} compound;} _snd_config::u' changed: + + type size hasn't changed + + 1 data member change: + + type of 'struct {list_head fields; int join;} compound' changed: + + type size hasn't changed + + 1 data member change: + + type of 'int join' changed: + + type name changed from 'int' to 'bool' + + type size changed from 32 to 8 (in bits) + + + + + + + + + + [C]'function int _snd_rawmidi_hw_open(snd_rawmidi_t**, snd_rawmidi_t**, char*, snd_config_t*, snd_config_t*, int)' at rawmidi_hw.c:318:1 has some indirect sub-type changes: + + parameter 1 of type 'snd_rawmidi_t**' has sub-type changes: + + in pointed to type 'snd_rawmidi_t*': + + in pointed to type 'typedef snd_rawmidi_t' at rawmidi.h:68:1: + + underlying type 'struct _snd_rawmidi' at rawmidi_local.h:39:1 changed: + + type size hasn't changed + + 1 data member change: + + type of 'const snd_rawmidi_ops_t* _snd_rawmidi::ops' changed: + + in pointed to type 'const snd_rawmidi_ops_t': + + in unqualified underlying type 'typedef snd_rawmidi_ops_t' at rawmidi_local.h:37:1: + + underlying type 'struct {int (snd_rawmidi_t*)* close; int (snd_rawmidi_t*, int)* nonblock; int (snd_rawmidi_t*, snd_rawmidi_info_t*)* info; int (snd_rawmidi_t*, snd_rawmidi_params_t*)* params; int (snd_rawmidi_t*, snd_rawmidi_status_t*)* status; int (snd_rawmidi_t*)* drop; int (snd_rawmidi_t*)* drain; typedef ssize_t (snd_rawmidi_t*, void*, typedef size_t)* write; typedef ssize_t (snd_rawmidi_t*, void*, typedef size_t)* read;}' at rawmidi_local.h:27:1 changed: + + type size hasn't changed + + 1 data member changes (8 filtered): + + type of 'int (snd_rawmidi_t*, snd_rawmidi_status_t*)* status' changed: + + in pointed to type 'function type int (snd_rawmidi_t*, snd_rawmidi_status_t*)': + + parameter 2 of type 'snd_rawmidi_status_t*' has sub-type changes: + + in pointed to type 'typedef snd_rawmidi_status_t' at rawmidi.h:49:1: + + underlying type 'struct snd_rawmidi_status' at asound.h:648:1 changed: + + type size hasn't changed + + 1 data member insertion: + + '__time_pad snd_rawmidi_status::pad1', at offset 32 (in bits) at asound.h:741:1 + + + + + + no data member change (1 filtered); + + + + [C]'function long int snd_midi_event_decode(snd_midi_event_t*, unsigned char*, long int, const snd_seq_event_t*)' at seq_midi_event.c:557:1 has some indirect sub-type changes: + + parameter 1 of type 'snd_midi_event_t*' has sub-type changes: + + in pointed to type 'typedef snd_midi_event_t' at seq_midi_event.h:43:1: + + underlying type 'struct snd_midi_event' at seq_midi_event.c:37:1 changed: + + type size hasn't changed + + 1 data member change: + + type of 'size_t snd_midi_event::qlen' changed: + + typedef name changed from size_t to ssize_t at stdio.h:77:1 + + underlying type 'unsigned long int' changed: + + entity changed from 'unsigned long int' to compatible type 'typedef __ssize_t' at types.h:191:1 + + type name changed from 'unsigned long int' to 'long int' + + type size hasn't changed + + + + + + + + [C]'function int snd_pcm_direct_client_chk_xrun(snd_pcm_direct_t*, snd_pcm_t*)' at pcm_direct.c:632:1 has some indirect sub-type changes: + + parameter 1 of type 'snd_pcm_direct_t*' has sub-type changes: + + in pointed to type 'typedef snd_pcm_direct_t' at pcm_direct.h:130:1: + + underlying type 'struct snd_pcm_direct' at pcm_direct.h:120:1 changed: + + type size changed from 2816 to 2880 (in bits) + + 2 data member insertions: + + 'snd_pcm_direct_hw_ptr_alignment_t snd_pcm_direct::hw_ptr_alignment', at offset 2112 (in bits) at pcm_direct.h:175:1 + + 'int snd_pcm_direct::tstamp_type', at offset 2144 (in bits) at pcm_direct.h:176:1 + + 2 data member changes (1 filtered): + + type of 'union {struct {int shmid_sum; int* sum_buffer; mix_areas_16_t* mix_areas_16; mix_areas_32_t* mix_areas_32; mix_areas_24_t* mix_areas_24; mix_areas_u8_t* mix_areas_u8; mix_areas_16_t* remix_areas_16; mix_areas_32_t* remix_areas_32; mix_areas_24_t* remix_areas_24; mix_areas_u8_t* remix_areas_u8;} dmix; struct {} dsnoop; struct {long long unsigned int chn_mask;} dshare;} snd_pcm_direct::u' changed: + + type size hasn't changed + + 1 data member deletion: + + 'struct {} dsnoop' at pcm_direct.h:177:1 + + + + and offset changed from 2112 to 2176 (in bits) (by +64 bits) + + 'void (snd_pcm_direct_t*)* snd_pcm_direct::server_free' offset changed from 2752 to 2816 (in bits) (by +64 bits) + + + + [C]'function int snd_pcm_dmix_open(snd_pcm_t**, const char*, snd_pcm_direct_open_conf*, slave_params*, snd_config_t*, snd_config_t*, snd_pcm_stream_t, int)' at pcm_dmix.c:1010:1 has some indirect sub-type changes: + + parameter 3 of type 'snd_pcm_direct_open_conf*' has sub-type changes: + + in pointed to type 'struct snd_pcm_direct_open_conf' at pcm_direct.h:352:1: + + type size changed from 384 to 448 (in bits) + + 2 data member insertions: + + 'snd_pcm_direct_hw_ptr_alignment_t snd_pcm_direct_open_conf::hw_ptr_alignment', at offset 224 (in bits) at pcm_direct.h:360:1 + + 'int snd_pcm_direct_open_conf::tstamp_type', at offset 256 (in bits) at pcm_direct.h:361:1 + + 2 data member changes: + + 'snd_config_t* snd_pcm_direct_open_conf::slave' offset changed from 256 to 320 (in bits) (by +64 bits) + + 'snd_config_t* snd_pcm_direct_open_conf::bindings' offset changed from 320 to 384 (in bits) (by +64 bits) + + + + [C]'function int snd_use_case_get(snd_use_case_mgr_t*, const char*, const char**)' at main.c:1696:1 has some indirect sub-type changes: + + parameter 1 of type 'snd_use_case_mgr_t*' has sub-type changes: + + in pointed to type 'typedef snd_use_case_mgr_t' at use-case.h:194:1: + + underlying type 'struct snd_use_case_mgr' at ucm_local.h:191:1 changed: + + type size changed from 2752 to 1984 (in bits) + + 3 data member deletions: + + 'char snd_use_case_mgr::card_long_name[80]', at offset 64 (in bits) at ucm_local.h:193:1 + + + + 'snd_ctl_t* snd_use_case_mgr::ctl', at offset 2496 (in bits) at ucm_local.h:215:1 + + + + 'char* snd_use_case_mgr::ctl_dev', at offset 2560 (in bits) at ucm_local.h:216:1 + + + + 6 data member insertions: + + 'char* snd_use_case_mgr::conf_dir_name', at offset 128 (in bits) at ucm_local.h:218:1 + + 'int snd_use_case_mgr::conf_format', at offset 256 (in bits) at ucm_local.h:220:1 + + 'list_head snd_use_case_mgr::once_list', at offset 448 (in bits) at ucm_local.h:226:1 + + 'int snd_use_case_mgr::default_list_executed', at offset 704 (in bits) at ucm_local.h:230:1 + + 'list_head snd_use_case_mgr::variable_list', at offset 1600 (in bits) at ucm_local.h:244:1 + + 'list_head snd_use_case_mgr::ctl_list', at offset 1728 (in bits) at ucm_local.h:247:1 + + 11 data member changes: + + type of 'char snd_use_case_mgr::conf_file_name[80]' changed: + + entity changed from 'char[80]' to 'char*' + + type size changed from 640 to 64 (in bits) + + and offset changed from 704 to 64 (in bits) (by -640 bits) + + 'char* snd_use_case_mgr::comment' offset changed from 1344 to 192 (in bits) (by -1152 bits) + + 'list_head snd_use_case_mgr::verb_list' offset changed from 1408 to 320 (in bits) (by -1088 bits) + + 'list_head snd_use_case_mgr::default_list' offset changed from 1536 to 576 (in bits) (by -960 bits) + + 'list_head snd_use_case_mgr::value_list' offset changed from 1664 to 768 (in bits) (by -896 bits) + + type of 'use_case_verb* snd_use_case_mgr::active_verb' changed: + + in pointed to type 'struct use_case_verb' at ucm_local.h:181:1: + + type size changed from 1216 to 1472 (in bits) + + 2 data member insertions: + + 'list_head use_case_verb::rename_list', at offset 1216 (in bits) at ucm_local.h:208:1 + + 'list_head use_case_verb::remove_list', at offset 1344 (in bits) at ucm_local.h:209:1 + + and offset changed from 1792 to 896 (in bits) (by -896 bits) + + 'list_head snd_use_case_mgr::active_devices' offset changed from 1856 to 960 (in bits) (by -896 bits) + + 'list_head snd_use_case_mgr::active_modifiers' offset changed from 1984 to 1088 (in bits) (by -896 bits) + + 'pthread_mutex_t snd_use_case_mgr::mutex' offset changed from 2112 to 1216 (in bits) (by -896 bits) + + 'int snd_use_case_mgr::in_component_domain' offset changed from 2624 to 1856 (in bits) (by -768 bits) + + 'char* snd_use_case_mgr::cdev' offset changed from 2688 to 1920 (in bits) (by -768 bits) + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/atk_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/atk_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..15a5264a8e5fbe8a9e2bb6fa611b996162679f32 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/atk_all_result.md @@ -0,0 +1,100 @@ +# Functions changed info + +---------------diffs in atk_libatk-1.0.so.0.23609.1_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 2 Changed (63 filtered out), 5 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +5 Added functions: + + + + 'function const gchar* atk_object_get_accessible_id(AtkObject*)' {atk_object_get_accessible_id} + + 'function void atk_object_set_accessible_id(AtkObject*, const gchar*)' {atk_object_set_accessible_id} + + 'function void atk_plug_set_child(AtkPlug*, AtkObject*)' {atk_plug_set_child} + + 'function gboolean atk_text_scroll_substring_to(AtkText*, gint, gint, AtkScrollType)' {atk_text_scroll_substring_to} + + 'function gboolean atk_text_scroll_substring_to_point(AtkText*, gint, gint, AtkCoordType, gint, gint)' {atk_text_scroll_substring_to_point} + + + +2 functions with some indirect sub-type change: + + + + [C]'function guint atk_add_focus_tracker(AtkEventListener)' at atkutil.c:129:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef AtkEventListener' has sub-type changes: + + underlying type 'void (AtkObject*)*' changed: + + in pointed to type 'function type void (AtkObject*)': + + parameter 1 of type 'AtkObject*' has sub-type changes: + + in pointed to type 'typedef AtkObject' at atkobject.h:459:1: + + underlying type 'struct _AtkObject' at atkobject.h:501:1 changed: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'AtkRole _AtkObject::role' changed: + + underlying type 'enum __anonymous_enum__' at atkobject.h:230:1 changed: + + type size hasn't changed + + 4 enumerator insertions: + + '__anonymous_enum__::ATK_ROLE_CONTENT_DELETION' value '123' + + '__anonymous_enum__::ATK_ROLE_CONTENT_INSERTION' value '124' + + '__anonymous_enum__::ATK_ROLE_MARK' value '125' + + '__anonymous_enum__::ATK_ROLE_SUGGESTION' value '126' + + + + 1 enumerator change: + + '__anonymous_enum__::ATK_ROLE_LAST_DEFINED' from value '123' to '127' at atkobject.h:247:1 + + + + + + + + [C]'function AtkTextAttribute atk_text_attribute_for_name(const gchar*)' at atktext.c:1258:1 has some indirect sub-type changes: + + return type changed: + + underlying type 'enum __anonymous_enum__' at atktext.h:68:1 changed: + + type size hasn't changed + + 1 enumerator insertion: + + '__anonymous_enum__::ATK_TEXT_ATTR_TEXT_POSITION' value '28' + + + + 1 enumerator change: + + '__anonymous_enum__::ATK_TEXT_ATTR_LAST_DEFINED' from value '28' to '29' at atktext.h:70:1 + + + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/brltty_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/brltty_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..af4fa2becf45014ed3066e51e528c0db8672d729 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/brltty_all_result.md @@ -0,0 +1,344 @@ +# Functions changed info + +---------------diffs in brltty_libbrlttybmb.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybmd.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybal.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlapi.so.0.6.7_abidiff.out:---------------- + +---------------diffs in brltty_libbrlttybvr.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttyblt.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybnp.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttysfv.so_abidiff.out:---------------- + +---------------diffs in brltty_libbrlttyxsc.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybvd.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybpm.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybba.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybat.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybhm.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybmm.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttysbl.so_abidiff.out:---------------- + +---------------diffs in brltty_libbrlttybhw.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed (1 filtered out), 0 Added variables + + + +---------------diffs in brltty_libbrlttybic.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed (1 filtered out), 0 Added variables + + + +---------------diffs in brltty_libbrlttybbg.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybbd.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybbm.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed (1 filtered out), 0 Added variables + + + +---------------diffs in brltty_libbrlttybvo.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybhd.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybht.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed (1 filtered out), 0 Added variables + + + +---------------diffs in brltty_libbrlttysxs.so_abidiff.out:---------------- + +---------------diffs in brltty_libbrlttyscb.so_abidiff.out:---------------- + +---------------diffs in brltty_libbrlttybmt.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybeu.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed (3 filtered out), 0 Added variables + + + +---------------diffs in brltty_libbrlttybpg.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybec.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybtt.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttysgs.so_abidiff.out:---------------- + +---------------diffs in brltty_libbrlttybbl.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybbn.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybtn.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttysal.so_abidiff.out:---------------- + +---------------diffs in brltty_libbrlttybmn.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybfs.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed (1 filtered out), 0 Added variables + + + +---------------diffs in brltty_libbrlttyxlx.so_abidiff.out:---------------- + +Functions changes summary: 1 Removed, 0 Changed, 1 Added functions + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +1 Removed function: + + + + 'function void lxBrailleOfflineListener(const ReportListenerParameters*)' {lxBrailleOfflineListener} + + + +1 Added function: + + + + 'function void lxBrailleDeviceOfflineListener(const ReportListenerParameters*)' {lxBrailleDeviceOfflineListener} + + + +---------------diffs in brltty_libbrlttybvs.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybbc.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybcb.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybir.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybce.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybts.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + +---------------diffs in brltty_libbrlttybsk.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 1 Changed, 0 Added variable + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/c-ares_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/c-ares_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..e8b0284768f8318ad2835c3511213c4d04aa24ad --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/c-ares_all_result.md @@ -0,0 +1,20 @@ +# Functions changed info + +---------------diffs in c-ares_libcares.so.2.4.1_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 2 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +2 Added functions: + + + + 'function void ares_freeaddrinfo(ares_addrinfo*)' {ares_freeaddrinfo} + + 'function void ares_getaddrinfo(ares_channel, const char*, const char*, const ares_addrinfo_hints*, ares_addrinfo_callback, void*)' {ares_getaddrinfo} + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/e2fsprogs_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/e2fsprogs_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..9ab0cf624be3afefb0e17e19a40c7327904ce5a5 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/e2fsprogs_all_result.md @@ -0,0 +1,298 @@ +# Functions changed info + +---------------diffs in e2fsprogs_libe2p.so.2.3_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed (1 filtered out), 1 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +1 Added function: + + + + 'function void e2p_feature_to_string(int, unsigned int, char*, size_t)' {e2p_feature_to_string} + + + +1 function with some indirect sub-type change: + + + + [C]'function void list_super(ext2_super_block*)' at ls.c:473:1 has some indirect sub-type changes: + + parameter 1 of type 'ext2_super_block*' has sub-type changes: + + in pointed to type 'struct ext2_super_block' at ext2_fs.h:639:1: + + type size hasn't changed + + 2 data member changes: + + type of 'char ext2_super_block::s_volume_name[16]' changed: + + array element type 'char' changed: + + entity changed from 'char' to compatible type 'typedef __u8' at ext2_types.h:22:1 + + type name changed from 'char' to 'unsigned char' + + type size hasn't changed + + + + type name changed from 'char[16]' to '__u8[16]' + + type size hasn't changed + + + + type of 'char ext2_super_block::s_last_mounted[64]' changed: + + array element type 'char' changed: + + entity changed from 'char' to compatible type 'typedef __u8' at ext2_types.h:22:1 + + type name changed from 'char' to 'unsigned char' + + type size hasn't changed + + + + type name changed from 'char[64]' to '__u8[64]' + + type size hasn't changed + + + + + + + +---------------diffs in e2fsprogs_libext2fs.so.2.4_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 7 Changed (388 filtered out), 15 Added functions + +Variables changes summary: 0 Removed, 0 Changed (2 filtered out), 0 Added variables + + + +15 Added functions: + + + + 'function errcode_t ext2fs_dirent_swab_in(ext2_filsys, char*, int)' {ext2fs_dirent_swab_in} + + 'function errcode_t ext2fs_dirent_swab_in2(ext2_filsys, char*, size_t, int)' {ext2fs_dirent_swab_in2} + + 'function errcode_t ext2fs_dirent_swab_out(ext2_filsys, char*, int)' {ext2fs_dirent_swab_out} + + 'function errcode_t ext2fs_dirent_swab_out2(ext2_filsys, char*, size_t, int)' {ext2fs_dirent_swab_out2} + + 'function blk64_t ext2fs_get_stat_i_blocks(ext2_filsys, ext2_inode*)' {ext2fs_get_stat_i_blocks} + + 'function errcode_t ext2fs_resize_array(unsigned long int, unsigned long int, unsigned long int, void*)' {ext2fs_resize_array} + + 'function void ext2fs_swap_ext_attr(char*, char*, int, int)' {ext2fs_swap_ext_attr} + + 'function void ext2fs_swap_ext_attr_entry(ext2_ext_attr_entry*, ext2_ext_attr_entry*)' {ext2fs_swap_ext_attr_entry} + + 'function void ext2fs_swap_ext_attr_header(ext2_ext_attr_header*, ext2_ext_attr_header*)' {ext2fs_swap_ext_attr_header} + + 'function void ext2fs_swap_group_desc(ext2_group_desc*)' {ext2fs_swap_group_desc} + + 'function void ext2fs_swap_group_desc2(ext2_filsys, ext2_group_desc*)' {ext2fs_swap_group_desc2} + + 'function void ext2fs_swap_inode(ext2_filsys, ext2_inode*, ext2_inode*, int)' {ext2fs_swap_inode} + + 'function void ext2fs_swap_inode_full(ext2_filsys, ext2_inode_large*, ext2_inode_large*, int, int)' {ext2fs_swap_inode_full} + + 'function void ext2fs_swap_mmp(mmp_struct*)' {ext2fs_swap_mmp} + + 'function void ext2fs_swap_super(ext2_super_block*)' {ext2fs_swap_super} + + + +7 functions with some indirect sub-type change: + + + + [C]'function errcode_t ext2fs_add_journal_device(ext2_filsys, ext2_filsys)' at mkjournal.c:371:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef ext2_filsys' has sub-type changes: + + underlying type 'struct_ext2_filsys*' changed: + + in pointed to type 'struct struct_ext2_filsys' at ext2fs.h:226:1: + + type size hasn't changed + + 1 data member changes (13 filtered): + + type of 'ext2_super_block* struct_ext2_filsys::orig_super' changed: + + in pointed to type 'struct ext2_super_block' at ext2_fs.h:639:1: + + type size hasn't changed + + 2 data member changes: + + type of 'char ext2_super_block::s_volume_name[16]' changed: + + array element type 'char' changed: + + entity changed from 'char' to compatible type 'typedef __u8' at ext2_types.h:22:1 + + type name changed from 'char' to 'unsigned char' + + type size hasn't changed + + + + type name changed from 'char[16]' to '__u8[16]' + + type size hasn't changed + + + + type of 'char ext2_super_block::s_last_mounted[64]' changed: + + array element type 'char' changed: + + entity changed from 'char' to compatible type 'typedef __u8' at ext2_types.h:22:1 + + type name changed from 'char' to 'unsigned char' + + type size hasn't changed + + + + type name changed from 'char[64]' to '__u8[64]' + + type size hasn't changed + + + + + + + + [C]'function ext2_off_t ext2fs_file_get_size(ext2_file_t)' at fileio.c:557:1 has some indirect sub-type changes: + + return type changed: + + underlying type 'typedef __u32' at ext2_types.h:76:1 changed: + + typedef name changed from __u32 to __s32 at ext2_types.h:98:1 + + underlying type 'unsigned int' changed: + + type name changed from 'unsigned int' to 'int' + + type size hasn't changed + + + + + + [C]'function errcode_t ext2fs_file_lseek(ext2_file_t, ext2_off_t, int, ext2_off_t*)' at fileio.c:529:1 has some indirect sub-type changes: + + parameter 2 of type 'typedef ext2_off_t' changed: + + underlying type 'typedef __u32' at ext2_types.h:76:1 changed: + + typedef name changed from __u32 to __s32 at ext2_types.h:98:1 + + underlying type 'unsigned int' changed: + + type name changed from 'unsigned int' to 'int' + + type size hasn't changed + + + + parameter 4 of type 'ext2_off_t*' changed: + + pointed to type 'typedef ext2_off_t' changed at ext2fs.h:80:1, as reported earlier + + + + [C]'function errcode_t ext2fs_file_set_size(ext2_file_t, ext2_off_t)' at fileio.c:657:1 has some indirect sub-type changes: + + + + [C]'function errcode_t ext2fs_file_set_size2(ext2_file_t, ext2_off64_t)' at fileio.c:619:1 has some indirect sub-type changes: + + parameter 2 of type 'typedef ext2_off64_t' changed: + + underlying type 'typedef __u64' at ext2_types.h:120:1 changed: + + typedef name changed from __u64 to __s64 at ext2_types.h:142:1 + + underlying type 'long long unsigned int' changed: + + type name changed from 'long long unsigned int' to 'long long int' + + type size hasn't changed + + + + + + [C]'function errcode_t ext2fs_inode_size_set(ext2_filsys, ext2_inode*, ext2_off64_t)' at blknum.c:537:1 has some indirect sub-type changes: + + parameter 3 of type 'typedef ext2_off64_t' changed: + + underlying type 'typedef __u64' at ext2_types.h:120:1 changed: + + typedef name changed from __u64 to __s64 at ext2_types.h:142:1 + + underlying type 'long long unsigned int' changed: + + type name changed from 'long long unsigned int' to 'long long int' + + type size hasn't changed + + + + + + [C]'function errcode_t ext2fs_mmp_csum_set(ext2_filsys, mmp_struct*)' at csum.c:62:1 has some indirect sub-type changes: + + parameter 2 of type 'mmp_struct*' has sub-type changes: + + in pointed to type 'struct mmp_struct' at ext2_fs.h:1097:1: + + type size hasn't changed + + 2 data member changes: + + + + type of 'char mmp_struct::mmp_bdevname[32]' changed: + + array element type 'char' changed: + + entity changed from 'char' to compatible type 'typedef __u8' at ext2_types.h:22:1 + + type name changed from 'char' to 'unsigned char' + + type size hasn't changed + + + + type name changed from 'char[32]' to '__u8[32]' + + type size hasn't changed + + + + + + + +---------------diffs in e2fsprogs_libcom_err.so.2.1_abidiff.out:---------------- + +---------------diffs in e2fsprogs_libss.so.2.0_abidiff.out:---------------- + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/exiv2_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/exiv2_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..23e7cb3b6376ab4385ab5a2127b8b84030ead768 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/exiv2_all_result.md @@ -0,0 +1,34 @@ +# Functions changed info + +---------------diffs in exiv2_libexiv2.so.26.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + +Function symbols changes summary: 1 Removed, 3 Added function symbols not referenced by debug info + +Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info + + + +1 Removed function symbol not referenced by debug info: + + + + _ZN5Exiv29WebPImage12decodeChunksEm + + + +3 Added function symbols not referenced by debug info: + + + + _ZN5Exiv27BasicIo11readOrThrowEPhlNS_9ErrorCodeE + + _ZN5Exiv27BasicIo11readOrThrowElNS_9ErrorCodeE + + _ZN5Exiv29WebPImage12decodeChunksEj + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/fontconfig_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/fontconfig_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..dfa461ec1466bd36002e8f39d8df1230f2d94d91 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/fontconfig_all_result.md @@ -0,0 +1,112 @@ +# Functions changed info + +---------------diffs in fontconfig_libfontconfig.so.1.12.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 3 Changed (48 filtered out), 2 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +2 Added functions: + + + + 'function FcChar8* IA__FcConfigGetFilename(FcConfig*, const FcChar8*)' {FcConfigGetFilename} + + 'function FcChar8* IA__FcStrBuildFilename(const FcChar8*, ...)' {FcStrBuildFilename} + + + +3 functions with some indirect sub-type change: + + + + [C]'function FcBool FcConfigAddRule(FcConfig*, FcRule*, FcMatchKind)' at fccfg.c:920:1 has some indirect sub-type changes: + + parameter 1 of type 'FcConfig*' has sub-type changes: + + in pointed to type 'typedef FcConfig' at fontconfig.h:324:1: + + underlying type 'struct _FcConfig' at fcint.h:505:1 changed: + + type size hasn't changed + + 1 data member deletion: + + 'FcHashTable* _FcConfig::uuid_table', at offset 1280 (in bits) at fcint.h:568:1 + + + + 1 data member insertion: + + 'FcStrSet* _FcConfig::configMapDirs', at offset 64 (in bits) at fcint.h:512:1 + + 17 data member changes: + + 'FcStrSet* _FcConfig::fontDirs' offset changed from 64 to 128 (in bits) (by +64 bits) + + 'FcStrSet* _FcConfig::cacheDirs' offset changed from 128 to 192 (in bits) (by +64 bits) + + 'FcStrSet* _FcConfig::configFiles' offset changed from 192 to 256 (in bits) (by +64 bits) + + 'FcPtrList* _FcConfig::subst[3]' offset changed from 256 to 320 (in bits) (by +64 bits) + + 'int _FcConfig::maxObjects' offset changed from 448 to 512 (in bits) (by +64 bits) + + 'FcStrSet* _FcConfig::acceptGlobs' offset changed from 512 to 576 (in bits) (by +64 bits) + + 'FcStrSet* _FcConfig::rejectGlobs' offset changed from 576 to 640 (in bits) (by +64 bits) + + 'FcFontSet* _FcConfig::acceptPatterns' offset changed from 640 to 704 (in bits) (by +64 bits) + + 'FcFontSet* _FcConfig::rejectPatterns' offset changed from 704 to 768 (in bits) (by +64 bits) + + 'FcFontSet* _FcConfig::fonts[2]' offset changed from 768 to 832 (in bits) (by +64 bits) + + 'time_t _FcConfig::rescanTime' offset changed from 896 to 960 (in bits) (by +64 bits) + + 'int _FcConfig::rescanInterval' offset changed from 960 to 1024 (in bits) (by +64 bits) + + 'FcRef _FcConfig::ref' offset changed from 992 to 1056 (in bits) (by +64 bits) + + 'FcExprPage* _FcConfig::expr_pool' offset changed from 1024 to 1088 (in bits) (by +64 bits) + + 'FcChar8* _FcConfig::sysRoot' offset changed from 1088 to 1152 (in bits) (by +64 bits) + + 'FcStrSet* _FcConfig::availConfigFiles' offset changed from 1152 to 1216 (in bits) (by +64 bits) + + 'FcPtrList* _FcConfig::rulesetList' offset changed from 1216 to 1280 (in bits) (by +64 bits) + + + + [C]'function void IA__FcCacheCreateTagFile(const FcConfig*)' at fccache.c:2023:1 has some indirect sub-type changes: + + Please note that the exported symbol of this function is FcCacheCreateTagFile + + parameter 1 of type 'const FcConfig*' changed: + + in pointed to type 'const FcConfig' at fontconfig.h:324:1: + + entity changed from 'const FcConfig' to 'typedef FcConfig' at fontconfig.h:324:1 + + type size hasn't changed + + + + [C]'function FcStrList* IA__FcConfigGetCacheDirs(const FcConfig*)' at fccfg.c:763:1 has some indirect sub-type changes: + + Please note that the exported symbol of this function is FcConfigGetCacheDirs + + parameter 1 of type 'const FcConfig*' changed: + + in pointed to type 'const FcConfig' at fontconfig.h:324:1: + + entity changed from 'const FcConfig' to 'typedef FcConfig' at fontconfig.h:324:1 + + type size hasn't changed + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/glib2_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/glib2_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..0a0bea0a3e2dcbc3a11c3cfe61463b0fd8403cf8 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/glib2_all_result.md @@ -0,0 +1,58 @@ +# Functions changed info + +---------------diffs in glib2_libglib-2.0.so.0.6200.5_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +---------------diffs in glib2_libgio-2.0.so.0.6200.5_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +1 function with some indirect sub-type change: + + + + [C]'function gboolean g_file_monitor_source_handle_event(GFileMonitorSource*, GFileMonitorEvent, const gchar*, const gchar*, GFile*, gint64)' at glocalfilemonitor.c:343:1 has some indirect sub-type changes: + + parameter 1 of type 'GFileMonitorSource*' has sub-type changes: + + in pointed to type 'typedef GFileMonitorSource' at glocalfilemonitor.h:41:1: + + underlying type 'struct _GFileMonitorSource' at glocalfilemonitor.c:45:1 changed: + + type size hasn't changed + + 1 data member change: + + type of 'gpointer _GFileMonitorSource::instance' changed: + + typedef name changed from gpointer to GWeakRef at gobject.h:884:1 + + underlying type 'void*' changed: + + entity changed from 'void*' to 'struct {union {gpointer p;} priv;}' at gobject.h:881:1 + + type size hasn't changed + + and name of '_GFileMonitorSource::instance' changed to '_GFileMonitorSource::instance_ref' at glocalfilemonitor.c:49:1 + + + + + +---------------diffs in glib2_libgmodule-2.0.so.0.6200.5_abidiff.out:---------------- + +---------------diffs in glib2_libgthread-2.0.so.0.6200.5_abidiff.out:---------------- + +---------------diffs in glib2_libgobject-2.0.so.0.6200.5_abidiff.out:---------------- + +---------------diffs in glib2_libgiofam.so_abidiff.out:---------------- + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/gnutls_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/gnutls_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..96c40fef52ec74565213ae840066c66b1665cb37 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/gnutls_all_result.md @@ -0,0 +1,2048 @@ +# Functions changed info + +---------------diffs in gnutls_libgnutlsxx.so.28.1.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed (3 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +1 function with some indirect sub-type change: + + + + [C]'method void gnutls::certificate_credentials::set_retrieve_function(gnutls_certificate_retrieve_function*)' at gnutlsxx.cpp:735:1 has some indirect sub-type changes: + + parameter 1 of type 'gnutls_certificate_retrieve_function*' has sub-type changes: + + in pointed to type 'typedef gnutls_certificate_retrieve_function' at gnutls.h:2791:1: + + underlying type 'function type int (typedef gnutls_session_t, const gnutls_datum_t*, int, const gnutls_pk_algorithm_t*, int, gnutls_retr2_st*)' changed: + + parameter 4 of type 'const gnutls_pk_algorithm_t*' has sub-type changes: + + in pointed to type 'const gnutls_pk_algorithm_t': + + in unqualified underlying type 'typedef gnutls_pk_algorithm_t' at gnutls.h:881:1: + + underlying type 'enum __anonymous_enum__' at gnutls.h:833:1 changed: + + type size hasn't changed + + 2 enumerator insertions: + + '__anonymous_enum__::GNUTLS_PK_ECDH_X448' value '11' + + '__anonymous_enum__::GNUTLS_PK_EDDSA_ED448' value '12' + + + + 1 enumerator change: + + '__anonymous_enum__::GNUTLS_PK_MAX' from value '10' to '12' at gnutls.h:866:1 + + + + + + + +---------------diffs in gnutls_libgnutls.so.30.28.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 34 Changed (580 filtered out), 23 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +23 Added functions: + + + + 'function void _gnutls_buffer_clear(gnutls_buffer_st*)' {_gnutls_buffer_clear@@GNUTLS_PRIVATE_3_4} + + 'function void _gnutls_buffer_pop_datum(gnutls_buffer_st*, gnutls_datum_t*, size_t)' {_gnutls_buffer_pop_datum@@GNUTLS_PRIVATE_3_4} + + 'function int _gnutls_buffer_unescape(gnutls_buffer_st*)' {_gnutls_buffer_unescape@@GNUTLS_PRIVATE_3_4} + + 'function int _gnutls_iov_iter_init(iov_iter_st*, const giovec_t*, size_t, size_t)' {_gnutls_iov_iter_init@@GNUTLS_PRIVATE_3_4} + + 'function ssize_t _gnutls_iov_iter_next(iov_iter_st*, uint8_t**)' {_gnutls_iov_iter_next@@GNUTLS_PRIVATE_3_4} + + 'function int _gnutls_iov_iter_sync(iov_iter_st*, const uint8_t*, size_t)' {_gnutls_iov_iter_sync@@GNUTLS_PRIVATE_3_4} + + 'function int gnutls_aead_cipher_decryptv2(gnutls_aead_cipher_hd_t, void*, size_t, const giovec_t*, int, const giovec_t*, int, void*, size_t)' {gnutls_aead_cipher_decryptv2@@GNUTLS_3_6_10} + + 'function int gnutls_aead_cipher_encryptv2(gnutls_aead_cipher_hd_t, void*, size_t, const giovec_t*, int, const giovec_t*, int, void*, size_t*)' {gnutls_aead_cipher_encryptv2@@GNUTLS_3_6_10} + + 'function gnutls_certificate_verification_profiles_t gnutls_certificate_verification_profile_get_id(const char*)' {gnutls_certificate_verification_profile_get_id@@GNUTLS_3_6_12} + + 'function const char* gnutls_certificate_verification_profile_get_name(gnutls_certificate_verification_profiles_t)' {gnutls_certificate_verification_profile_get_name@@GNUTLS_3_6_12} + + 'function const char* gnutls_ext_get_name2(gnutls_session_t, unsigned int, gnutls_ext_parse_type_t)' {gnutls_ext_get_name2@@GNUTLS_3_6_14} + + 'function int gnutls_hkdf_expand(gnutls_mac_algorithm_t, const gnutls_datum_t*, const gnutls_datum_t*, void*, size_t)' {gnutls_hkdf_expand@@GNUTLS_3_6_13} + + 'function int gnutls_hkdf_extract(gnutls_mac_algorithm_t, const gnutls_datum_t*, const gnutls_datum_t*, void*)' {gnutls_hkdf_extract@@GNUTLS_3_6_13} + + 'function unsigned int gnutls_hmac_get_key_size(gnutls_mac_algorithm_t)' {gnutls_hmac_get_key_size@@GNUTLS_3_6_12} + + 'function int gnutls_pbkdf2(gnutls_mac_algorithm_t, const gnutls_datum_t*, const gnutls_datum_t*, unsigned int, void*, size_t)' {gnutls_pbkdf2@@GNUTLS_3_6_13} + + 'function int gnutls_pkcs7_print_signature_info(gnutls_pkcs7_signature_info_st*, gnutls_certificate_print_formats_t, gnutls_datum_t*)' {gnutls_pkcs7_print_signature_info@@GNUTLS_3_6_14} + + 'function gnutls_digest_algorithm_t gnutls_prf_hash_get(const gnutls_session_t)' {gnutls_prf_hash_get@@GNUTLS_3_6_13} + + 'function int gnutls_psk_server_get_username2(gnutls_session_t, gnutls_datum_t*)' {gnutls_psk_server_get_username2@@GNUTLS_3_6_13} + + 'function int gnutls_psk_set_client_credentials2(gnutls_psk_client_credentials_t, const gnutls_datum_t*, const gnutls_datum_t*, gnutls_psk_key_flags)' {gnutls_psk_set_client_credentials2@@GNUTLS_3_6_13} + + 'function void gnutls_psk_set_client_credentials_function2(gnutls_psk_client_credentials_t, gnutls_psk_client_credentials_function2*)' {gnutls_psk_set_client_credentials_function2@@GNUTLS_3_6_13} + + 'function void gnutls_psk_set_server_credentials_function2(gnutls_psk_server_credentials_t, gnutls_psk_server_credentials_function2*)' {gnutls_psk_set_server_credentials_function2@@GNUTLS_3_6_13} + + 'function gnutls_keylog_func gnutls_session_get_keylog_function(const gnutls_session_t)' {gnutls_session_get_keylog_function@@GNUTLS_3_6_13} + + 'function void gnutls_session_set_keylog_function(gnutls_session_t, gnutls_keylog_func)' {gnutls_session_set_keylog_function@@GNUTLS_3_6_13} + + + +34 functions with some indirect sub-type change: + + + + [C]'function int _gnutls13_psk_ext_iter_next_binder(psk_ext_iter_st*, gnutls_datum_t*)' at psk_ext_parser.c:94:1 has some indirect sub-type changes: + + parameter 1 of type 'psk_ext_iter_st*' has sub-type changes: + + in pointed to type 'typedef psk_ext_iter_st' at psk_ext_parser.h:35:1: + + underlying type 'struct psk_ext_parser_st' at psk_ext_parser.h:26:1 changed: + + type size hasn't changed + + 2 data member changes: + + + + type of 'ssize_t psk_ext_parser_st::binders_len' changed: + + typedef name changed from ssize_t to size_t at stddef.h:216:1 + + underlying type 'typedef __ssize_t' at types.h:191:1 changed: + + entity changed from 'typedef __ssize_t' to compatible type 'unsigned long int' + + type name changed from 'long int' to 'unsigned long int' + + type size hasn't changed + + + + + + + + [C]'function int _gnutls_cipher_get_iv(gnutls_cipher_hd_t, void*, size_t)' at crypto-api.c:192:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_cipher_hd_t' has sub-type changes: + + underlying type 'api_cipher_hd_st*' changed: + + in pointed to type 'struct api_cipher_hd_st' at crypto-api.c:36:1: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'cipher_hd_st api_cipher_hd_st::ctx_dec' changed: + + underlying type 'struct {void* handle; const cipher_entry_st* e; cipher_encrypt_func encrypt; cipher_decrypt_func decrypt; aead_cipher_encrypt_func aead_encrypt; aead_cipher_decrypt_func aead_decrypt; cipher_auth_func auth; cipher_tag_func tag; cipher_setiv_func setiv; cipher_getiv_func getiv; cipher_deinit_func deinit;}' at cipher_int.h:57:1 changed: + + type size hasn't changed + + 1 data member change: + + type of 'const cipher_entry_st* e' changed: + + in pointed to type 'const cipher_entry_st': + + in unqualified underlying type 'typedef cipher_entry_st' at gnutls_int.h:636:1: + + underlying type 'struct cipher_entry_st' at gnutls_int.h:648:1 changed: + + type size hasn't changed + + 2 data member deletions: + + 'bool cipher_entry_st::only_aead', at offset 232 (in bits) at gnutls_int.h:659:1 + + + + 'bool cipher_entry_st::no_rekey', at offset 240 (in bits) at gnutls_int.h:660:1 + + + + no data member change (1 filtered); + + 1 data member change: + + type of 'bool cipher_entry_st::xor_nonce' changed: + + type name changed from 'bool' to 'unsigned int' + + type size changed from 8 to 32 (in bits) + + and name of 'cipher_entry_st::xor_nonce' changed to 'cipher_entry_st::flags' at gnutls_int.h:635:1 + + + + + + + + [C]'function unsigned int _gnutls_ecc_curve_is_supported(gnutls_ecc_curve_t)' at ecc.c:295:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ecc_curve_t' has sub-type changes: + + underlying type 'enum __anonymous_enum__' at gnutls.h:988:1 changed: + + type size hasn't changed + + 7 enumerator insertions: + + '__anonymous_enum__::GNUTLS_ECC_CURVE_GOST512C' value '15' + + '__anonymous_enum__::GNUTLS_ECC_CURVE_GOST256A' value '16' + + '__anonymous_enum__::GNUTLS_ECC_CURVE_GOST256B' value '17' + + '__anonymous_enum__::GNUTLS_ECC_CURVE_GOST256C' value '18' + + '__anonymous_enum__::GNUTLS_ECC_CURVE_GOST256D' value '19' + + '__anonymous_enum__::GNUTLS_ECC_CURVE_X448' value '20' + + '__anonymous_enum__::GNUTLS_ECC_CURVE_ED448' value '21' + + + + 1 enumerator change: + + '__anonymous_enum__::GNUTLS_ECC_CURVE_MAX' from value '14' to '21' at gnutls.h:1032:1 + + + + + + [C]'function void _gnutls_hello_set_default_version(gnutls_session_t, unsigned char, unsigned char)' at state.c:937:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_session_t' has sub-type changes: + + underlying type 'gnutls_session_int*' changed: + + in pointed to type 'struct gnutls_session_int' at gnutls_int.h:1497:1: + + type size changed from 52416 to 59008 (in bits) + + 1 data member changes (3 filtered): + + type of 'internals_st gnutls_session_int::internals' changed: + + underlying type 'struct {mbuffer_head_st record_buffer; int handshake_hash_buffer_prev_len; unsigned int handshake_hash_buffer_client_hello_len; unsigned int handshake_hash_buffer_client_kx_len; unsigned int handshake_hash_buffer_server_finished_len; unsigned int handshake_hash_buffer_client_finished_len; gnutls_buffer_st handshake_hash_buffer; bool resumable; send_ticket_state_t ticket_state; bye_state_t bye_state; reauth_state_t reauth_state; handshake_state_t handshake_final_state; handshake_state_t handshake_state; bool invalid_connection; bool may_not_read; bool may_not_write; bool read_eof; int last_alert; int last_handshake_in; int last_handshake_out; gnutls_priority_st* priorities; bool allow_large_records; bool allow_small_records; bool no_etm; bool no_ext_master_secret; bool allow_key_usage_violation; bool allow_wrong_pms; bool dumbfw; uint16_t dh_prime_bits; bool resumed; bool resumption_requested; security_parameters_st resumed_security_parameters; gnutls_datum_t resumption_data; mbuffer_head_st handshake_send_buffer; mbuffer_head_st handshake_header_recv_buffer; handshake_buffer_st handshake_recv_buffer[6]; int handshake_recv_buffer_size; mbuffer_head_st record_recv_buffer; mbuffer_head_st record_send_buffer; size_t record_send_buffer_user_size; mbuffer_head_st early_data_recv_buffer; gnutls_buffer_st early_data_presend_buffer; record_send_state_t rsend_state; gnutls_buffer_st record_key_update_buffer; gnutls_buffer_st record_presend_buffer; gnutls_buffer_st reauth_buffer; time_t expire_time; const mod_auth_st_int* auth_struct; uint8_t adv_version_major; uint8_t adv_version_minor; gnutls_certificate_request_t send_cert_req; size_t max_handshake_data_buffer_size; gnutls_pull_timeout_func pull_timeout_func; gnutls_pull_func pull_func; gnutls_push_func push_func; gnutls_vec_push_func vec_push_func; gnutls_errno_func errno_func; gnutls_transport_ptr_t transport_recv_ptr; gnutls_transport_ptr_t transport_send_ptr; gnutls_db_store_func db_store_func; gnutls_db_retr_func db_retrieve_func; gnutls_db_remove_func db_remove_func; void* db_ptr; gnutls_handshake_simple_hook_func user_hello_func; gnutls_handshake_hook_func h_hook; unsigned int h_type; int16_t h_post; gnutls_pcert_st* selected_cert_list; uint16_t selected_cert_list_length; gnutls_privkey_st* selected_key; gnutls_ocsp_data_st* selected_ocsp; uint16_t selected_ocsp_length; gnutls_status_request_ocsp_func selected_ocsp_func; void* selected_ocsp_func_ptr; bool selected_need_free; uint8_t default_record_version[2]; uint8_t default_hello_version[2]; void* user_ptr; bool direction; bool ignore_rdn_sequence; uint8_t rsa_pms_version[2]; int errnum; bool initial_negotiation_completed; void* post_negotiation_lock; transport_t transport; dtls_st dtls; unsigned int handshake_suspicious_loops; bool handshake_in_progress; bool premaster_set; unsigned int cb_tls_unique_len; unsigned char cb_tls_unique[36]; timespec handshake_start_time; timespec handshake_abs_timeout; unsigned int ertt; unsigned int handshake_timeout_ms; unsigned int record_timeout_ms; gnutls_datum_t post_handshake_cr_context; gnutls_buffer_st post_handshake_hash_buffer; unsigned int hsk_flags; timespec last_key_update; unsigned int key_update_count; gnutls_buffer_st full_client_hello; int extensions_offset; gnutls_buffer_st hb_local_data; gnutls_buffer_st hb_remote_data; timespec hb_ping_start; timespec hb_ping_sent; unsigned int hb_actual_retrans_timeout_ms; unsigned int hb_retrans_timeout_ms; unsigned int hb_total_timeout_ms; bool ocsp_check_ok; heartbeat_state_t hb_state; recv_state_t recv_state; bool sc_random_set; uint64_t flags; gnutls_certificate_verify_function* verify_callback; gnutls_typed_vdata_st* vc_data; gnutls_typed_vdata_st vc_sdata; unsigned int vc_elements; unsigned int vc_status; unsigned int additional_verify_flags; uint8_t cert_hash[32]; bool cert_hash_set; char saved_username[129]; bool saved_username_set; tfo_st tfo; gnutls_supplemental_entry_st* rsup; unsigned int rsup_size; hello_ext_entry_st* rexts; unsigned int rexts_size; __anonymous_struct__ ext_data[32]; uint32_t used_exts; gnutls_ext_flags_t ext_msg; unsigned int max_recv_size; const gnutls_group_entry_st* cand_ec_group; const gnutls_group_entry_st* cand_dh_group; const gnutls_group_entry_st* cand_group; uint8_t hrr_cs[2]; int session_ticket_renew; tls13_ticket_st tls13_ticket; uint32_t early_data_received; gnutls_anti_replay_t anti_replay; void* epoch_lock;}' at gnutls_int.h:1094:1 changed: + + type size changed from 27776 to 34048 (in bits) + + 1 data member deletion: + + 'bool saved_username_set', at offset 16432 (in bits) at gnutls_int.h:1448:1 + + + + 2 data member insertions: + + 'gnutls_keylog_func keylog_func', at offset 10496 (in bits) at gnutls_int.h:1230:1 + + 'int saved_username_size', at offset 16512 (in bits) at gnutls_int.h:1431:1 + + 4 data member changes (82 filtered): + + type of 'const mod_auth_st_int* auth_struct' changed: + + in pointed to type 'const mod_auth_st_int': + + in unqualified underlying type 'struct mod_auth_st_int' at auth.h:28:1: + + type size hasn't changed + + 1 data member changes (11 filtered): + + type of 'int (typedef gnutls_session_t, gnutls_buffer_st*)* mod_auth_st_int::gnutls_generate_client_certificate' changed: + + in pointed to type 'function type int (typedef gnutls_session_t, gnutls_buffer_st*)': + + parameter 1 of type 'typedef gnutls_session_t' has sub-type changes: + + underlying type 'gnutls_session_int*' changed: + + in pointed to type 'struct gnutls_session_int' at gnutls_int.h:1497:1: + + type size changed from 52416 to 59008 (in bits) + + 3 data member changes (1 filtered): + + type of 'record_parameters_st* gnutls_session_int::record_parameters[4]' changed: + + array element type 'record_parameters_st*' changed: + + in pointed to type 'typedef record_parameters_st' at gnutls_int.h:618:1: + + underlying type 'struct record_parameters_st' at gnutls_int.h:887:1 changed: + + type size hasn't changed + + 2 data member changes (2 filtered): + + type of 'record_state_st record_parameters_st::read' changed: + + underlying type 'struct record_state_st' at gnutls_int.h:858:1 changed: + + type size hasn't changed + + 2 data member changes: + + type of 'union {auth_cipher_hd_st tls12; api_aead_cipher_hd_st aead;} record_state_st::ctx' changed: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'auth_cipher_hd_st tls12' changed: + + underlying type 'struct {cipher_hd_st cipher; union {digest_hd_st dig; mac_hd_st mac;} mac; unsigned int is_mac; unsigned int non_null; unsigned int etm; size_t tag_size;}' at cipher_int.h:204:1 changed: + + type size hasn't changed + + 1 data member insertion: + + 'unsigned int continuous_mac', at offset 30 (in bits) at cipher_int.h:215:1 + + 2 data member changes (2 filtered): + + 'unsigned int etm' offset changed from 29 to 28 (in bits) (by -1 bits) + + 'unsigned int non_null' offset changed from 30 to 29 (in bits) (by -1 bits) + + + + + + type of 'gnutls_uint64 record_state_st::sequence_number' changed: + + typedef name changed from gnutls_uint64 to uint64_t at stdint-uintn.h:27:1 + + underlying type 'struct {unsigned char i[8];}' at gnutls_int.h:103:1 changed: + + entity changed from 'struct {unsigned char i[8];}' to 'typedef __uint64_t' at types.h:44:1 + + type size hasn't changed + + + + + + + + type size hasn't changed + + + + type of 'internals_st gnutls_session_int::internals' changed: + + underlying type 'struct {mbuffer_head_st record_buffer; int handshake_hash_buffer_prev_len; unsigned int handshake_hash_buffer_client_hello_len; unsigned int handshake_hash_buffer_client_kx_len; unsigned int handshake_hash_buffer_server_finished_len; unsigned int handshake_hash_buffer_client_finished_len; gnutls_buffer_st handshake_hash_buffer; bool resumable; send_ticket_state_t ticket_state; bye_state_t bye_state; reauth_state_t reauth_state; handshake_state_t handshake_final_state; handshake_state_t handshake_state; bool invalid_connection; bool may_not_read; bool may_not_write; bool read_eof; int last_alert; int last_handshake_in; int last_handshake_out; gnutls_priority_st* priorities; bool allow_large_records; bool allow_small_records; bool no_etm; bool no_ext_master_secret; bool allow_key_usage_violation; bool allow_wrong_pms; bool dumbfw; uint16_t dh_prime_bits; bool resumed; bool resumption_requested; security_parameters_st resumed_security_parameters; gnutls_datum_t resumption_data; mbuffer_head_st handshake_send_buffer; mbuffer_head_st handshake_header_recv_buffer; handshake_buffer_st handshake_recv_buffer[6]; int handshake_recv_buffer_size; mbuffer_head_st record_recv_buffer; mbuffer_head_st record_send_buffer; size_t record_send_buffer_user_size; mbuffer_head_st early_data_recv_buffer; gnutls_buffer_st early_data_presend_buffer; record_send_state_t rsend_state; gnutls_buffer_st record_key_update_buffer; gnutls_buffer_st record_presend_buffer; gnutls_buffer_st reauth_buffer; time_t expire_time; const mod_auth_st_int* auth_struct; uint8_t adv_version_major; uint8_t adv_version_minor; gnutls_certificate_request_t send_cert_req; size_t max_handshake_data_buffer_size; gnutls_pull_timeout_func pull_timeout_func; gnutls_pull_func pull_func; gnutls_push_func push_func; gnutls_vec_push_func vec_push_func; gnutls_errno_func errno_func; gnutls_transport_ptr_t transport_recv_ptr; gnutls_transport_ptr_t transport_send_ptr; gnutls_db_store_func db_store_func; gnutls_db_retr_func db_retrieve_func; gnutls_db_remove_func db_remove_func; void* db_ptr; gnutls_handshake_simple_hook_func user_hello_func; gnutls_handshake_hook_func h_hook; unsigned int h_type; int16_t h_post; gnutls_pcert_st* selected_cert_list; uint16_t selected_cert_list_length; gnutls_privkey_st* selected_key; gnutls_ocsp_data_st* selected_ocsp; uint16_t selected_ocsp_length; gnutls_status_request_ocsp_func selected_ocsp_func; void* selected_ocsp_func_ptr; bool selected_need_free; uint8_t default_record_version[2]; uint8_t default_hello_version[2]; void* user_ptr; bool direction; bool ignore_rdn_sequence; uint8_t rsa_pms_version[2]; int errnum; bool initial_negotiation_completed; void* post_negotiation_lock; transport_t transport; dtls_st dtls; unsigned int handshake_suspicious_loops; bool handshake_in_progress; bool premaster_set; unsigned int cb_tls_unique_len; unsigned char cb_tls_unique[36]; timespec handshake_start_time; timespec handshake_abs_timeout; unsigned int ertt; unsigned int handshake_timeout_ms; unsigned int record_timeout_ms; gnutls_datum_t post_handshake_cr_context; gnutls_buffer_st post_handshake_hash_buffer; unsigned int hsk_flags; timespec last_key_update; unsigned int key_update_count; gnutls_buffer_st full_client_hello; int extensions_offset; gnutls_buffer_st hb_local_data; gnutls_buffer_st hb_remote_data; timespec hb_ping_start; timespec hb_ping_sent; unsigned int hb_actual_retrans_timeout_ms; unsigned int hb_retrans_timeout_ms; unsigned int hb_total_timeout_ms; bool ocsp_check_ok; heartbeat_state_t hb_state; recv_state_t recv_state; bool sc_random_set; uint64_t flags; gnutls_certificate_verify_function* verify_callback; gnutls_typed_vdata_st* vc_data; gnutls_typed_vdata_st vc_sdata; unsigned int vc_elements; unsigned int vc_status; unsigned int additional_verify_flags; uint8_t cert_hash[32]; bool cert_hash_set; char saved_username[129]; bool saved_username_set; tfo_st tfo; gnutls_supplemental_entry_st* rsup; unsigned int rsup_size; hello_ext_entry_st* rexts; unsigned int rexts_size; __anonymous_struct__ ext_data[32]; uint32_t used_exts; gnutls_ext_flags_t ext_msg; unsigned int max_recv_size; const gnutls_group_entry_st* cand_ec_group; const gnutls_group_entry_st* cand_dh_group; const gnutls_group_entry_st* cand_group; uint8_t hrr_cs[2]; int session_ticket_renew; tls13_ticket_st tls13_ticket; uint32_t early_data_received; gnutls_anti_replay_t anti_replay; void* epoch_lock;}' at gnutls_int.h:1094:1 changed: + + type size changed from 27776 to 34048 (in bits) + + 1 data member deletion: + + 'bool saved_username_set', at offset 16432 (in bits) at gnutls_int.h:1448:1 + + + + 2 data member insertions: + + 'gnutls_keylog_func keylog_func', at offset 10496 (in bits) at gnutls_int.h:1230:1 + + 'int saved_username_size', at offset 16512 (in bits) at gnutls_int.h:1431:1 + + 76 data member changes (10 filtered): + + type of 'gnutls_priority_st* priorities' changed: + + in pointed to type 'struct gnutls_priority_st' at gnutls_int.h:921:1: + + type size hasn't changed + + 1 data member changes (2 filtered): + + type of 'sign_algo_list_st gnutls_priority_st::sigalg' changed: + + underlying type 'struct sign_algo_list_st' at gnutls_int.h:935:1 changed: + + type size hasn't changed + + 1 data member change: + + type of 'const gnutls_sign_entry_st* sign_algo_list_st::entry[64]' changed: + + array element type 'const gnutls_sign_entry_st*' changed: + + in pointed to type 'const gnutls_sign_entry_st': + + in unqualified underlying type 'struct gnutls_sign_entry_st' at algorithms.h:344:1: + + type size hasn't changed + + 1 data member insertion: + + 'unsigned int gnutls_sign_entry_st::hash_output_size', at offset 416 (in bits) at algorithms.h:373:1 + + 1 data member changes (5 filtered): + + type of 'gnutls_sign_algorithm_t gnutls_sign_entry_st::id' changed: + + underlying type 'enum __anonymous_enum__' at gnutls.h:912:1 changed: + + type size hasn't changed + + 1 enumerator insertion: + + '__anonymous_enum__::GNUTLS_SIGN_EDDSA_ED448' value '46' + + + + 1 enumerator change: + + '__anonymous_enum__::GNUTLS_SIGN_MAX' from value '45' to '46' at gnutls.h:948:1 + + + + + + no data member change (1 filtered); + + type size hasn't changed + + + + + + + + type of 'security_parameters_st resumed_security_parameters' changed: + + underlying type 'struct {unsigned int entity; uint16_t epoch_read; uint16_t epoch_write; uint16_t epoch_next; uint16_t epoch_min; const gnutls_cipher_suite_entry_st* cs; const mac_entry_st* prf; uint8_t master_secret[48]; uint8_t client_random[32]; uint8_t server_random[32]; uint8_t session_id[32]; uint8_t session_id_size; time_t timestamp; uint8_t post_handshake_auth; uint16_t max_record_send_size; uint16_t max_record_recv_size; uint16_t max_user_record_send_size; uint16_t max_user_record_recv_size; uint32_t max_early_data_size; gnutls_certificate_type_t client_ctype; gnutls_certificate_type_t server_ctype; const gnutls_group_entry_st* grp; gnutls_sign_algorithm_t server_sign_algo; gnutls_sign_algorithm_t client_sign_algo; uint8_t ext_master_secret; uint8_t etm; uint8_t client_auth_type; uint8_t server_auth_type; int do_recv_supplemental; int do_send_supplemental; const version_entry_st* pversion;}' at gnutls_int.h:769:1 changed: + + type size hasn't changed + + 1 data member changes (5 filtered): + + type of 'const version_entry_st* pversion' changed: + + in pointed to type 'const version_entry_st': + + in unqualified underlying type 'typedef version_entry_st' at gnutls_int.h:713:1: + + underlying type 'struct {const char* name; gnutls_protocol_t id; unsigned int age; uint8_t major; uint8_t minor; transport_t transport; bool supported; bool explicit_iv; bool extensions; bool selectable_sighash; bool selectable_prf; bool obsolete; bool tls13_sem; bool false_start; bool only_extension; bool post_handshake_auth; bool key_shares; uint8_t tls_sig_sem;}' at gnutls_int.h:708:1 changed: + + type size hasn't changed + + 1 data member insertion: + + 'bool multi_ocsp', at offset 280 (in bits) at gnutls_int.h:706:1 + + 1 data member change: + + 'uint8_t tls_sig_sem' offset changed from 280 to 288 (in bits) (by +8 bits) + + + + + + type of 'mbuffer_head_st early_data_recv_buffer' changed: + + underlying type 'struct mbuffer_head_st' at gnutls_int.h:478:1 changed: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'mbuffer_st* mbuffer_head_st::head' changed: + + in pointed to type 'struct mbuffer_st' at gnutls_int.h:410:1: + + type size hasn't changed + + 1 data member changes (2 filtered): + + type of 'gnutls_uint64 mbuffer_st::record_sequence' changed: + + details were reported earlier + + + + + + + + type of 'gnutls_pcert_st* selected_cert_list' changed: + + in pointed to type 'typedef gnutls_pcert_st' at abstract.h:651:1: + + underlying type 'struct gnutls_pcert_st' at abstract.h:641:1 changed: + + type size hasn't changed + + 1 data member change: + + type of 'gnutls_pubkey_t gnutls_pcert_st::pubkey' changed: + + underlying type 'gnutls_pubkey_st*' changed: + + in pointed to type 'struct gnutls_pubkey_st' at abstract_int.h:54:1: + + type size changed from 4032 to 4096 (in bits) + + 3 data member changes: + + type of 'gnutls_pk_params_st gnutls_pubkey_st::params' changed: + + underlying type 'struct {bigint_t params[16]; unsigned int params_nr; unsigned int pkflags; unsigned int qbits; gnutls_ecc_curve_t curve; gnutls_group_t dh_group; gnutls_gost_paramset_t gost_params; gnutls_datum_t raw_pub; gnutls_datum_t raw_priv; unsigned int seed_size; uint8_t seed[256]; gnutls_digest_algorithm_t palgo; gnutls_x509_spki_st spki; gnutls_pk_algorithm_t algo;}' at crypto-backend.h:194:1 changed: + + type size changed from 3776 to 3840 (in bits) + + 2 data member changes (3 filtered): + + type of 'gnutls_x509_spki_st spki' changed: + + underlying type 'struct gnutls_x509_spki_st' at crypto-backend.h:175:1 changed: + + type size changed from 128 to 192 (in bits) + + 2 data member insertions: + + 'gnutls_digest_algorithm_t gnutls_x509_spki_st::dsa_dig', at offset 128 (in bits) at crypto-backend.h:208:1 + + 'unsigned int gnutls_x509_spki_st::flags', at offset 160 (in bits) at crypto-backend.h:212:1 + + no data member changes (2 filtered); + + + + 'gnutls_pk_algorithm_t algo' offset changed from 3712 to 3776 (in bits) (by +64 bits) + + + + 'unsigned int gnutls_pubkey_st::key_usage' offset changed from 3840 to 3904 (in bits) (by +64 bits) + + 'pin_info_st gnutls_pubkey_st::pin' offset changed from 3904 to 3968 (in bits) (by +64 bits) + + + + and offset changed from 10496 to 10560 (in bits) (by +64 bits) + + 'uint16_t selected_cert_list_length' offset changed from 10560 to 10624 (in bits) (by +64 bits) + + 'gnutls_privkey_st* selected_key' offset changed from 10624 to 10688 (in bits) (by +64 bits) + + 'gnutls_ocsp_data_st* selected_ocsp' offset changed from 10688 to 10752 (in bits) (by +64 bits) + + 'uint16_t selected_ocsp_length' offset changed from 10752 to 10816 (in bits) (by +64 bits) + + 'gnutls_status_request_ocsp_func selected_ocsp_func' offset changed from 10816 to 10880 (in bits) (by +64 bits) + + 'void* selected_ocsp_func_ptr' offset changed from 10880 to 10944 (in bits) (by +64 bits) + + 'bool selected_need_free' offset changed from 10944 to 11008 (in bits) (by +64 bits) + + 'uint8_t default_record_version[2]' offset changed from 10952 to 11016 (in bits) (by +64 bits) + + 'uint8_t default_hello_version[2]' offset changed from 10968 to 11032 (in bits) (by +64 bits) + + 'void* user_ptr' offset changed from 11008 to 11072 (in bits) (by +64 bits) + + 'bool direction' offset changed from 11072 to 11136 (in bits) (by +64 bits) + + 'bool ignore_rdn_sequence' offset changed from 11080 to 11144 (in bits) (by +64 bits) + + 'uint8_t rsa_pms_version[2]' offset changed from 11088 to 11152 (in bits) (by +64 bits) + + 'int errnum' offset changed from 11104 to 11168 (in bits) (by +64 bits) + + 'bool initial_negotiation_completed' offset changed from 11136 to 11200 (in bits) (by +64 bits) + + 'void* post_negotiation_lock' offset changed from 11200 to 11264 (in bits) (by +64 bits) + + 'transport_t transport' offset changed from 11264 to 11328 (in bits) (by +64 bits) + + 'dtls_st dtls' offset changed from 11328 to 11392 (in bits) (by +64 bits) + + 'unsigned int handshake_suspicious_loops' offset changed from 11904 to 11968 (in bits) (by +64 bits) + + 'bool handshake_in_progress' offset changed from 11936 to 12000 (in bits) (by +64 bits) + + 'bool premaster_set' offset changed from 11944 to 12008 (in bits) (by +64 bits) + + 'unsigned int cb_tls_unique_len' offset changed from 11968 to 12032 (in bits) (by +64 bits) + + 'unsigned char cb_tls_unique[36]' offset changed from 12000 to 12064 (in bits) (by +64 bits) + + 'timespec handshake_start_time' offset changed from 12288 to 12352 (in bits) (by +64 bits) + + 'timespec handshake_abs_timeout' offset changed from 12416 to 12480 (in bits) (by +64 bits) + + 'unsigned int ertt' offset changed from 12544 to 12608 (in bits) (by +64 bits) + + 'unsigned int handshake_timeout_ms' offset changed from 12576 to 12640 (in bits) (by +64 bits) + + 'unsigned int record_timeout_ms' offset changed from 12608 to 12672 (in bits) (by +64 bits) + + 'gnutls_datum_t post_handshake_cr_context' offset changed from 12672 to 12736 (in bits) (by +64 bits) + + 'gnutls_buffer_st post_handshake_hash_buffer' offset changed from 12800 to 12864 (in bits) (by +64 bits) + + 'unsigned int hsk_flags' offset changed from 13056 to 13120 (in bits) (by +64 bits) + + 'timespec last_key_update' offset changed from 13120 to 13184 (in bits) (by +64 bits) + + 'unsigned int key_update_count' offset changed from 13248 to 13312 (in bits) (by +64 bits) + + 'gnutls_buffer_st full_client_hello' offset changed from 13312 to 13376 (in bits) (by +64 bits) + + 'int extensions_offset' offset changed from 13568 to 13632 (in bits) (by +64 bits) + + 'gnutls_buffer_st hb_local_data' offset changed from 13632 to 13696 (in bits) (by +64 bits) + + 'gnutls_buffer_st hb_remote_data' offset changed from 13888 to 13952 (in bits) (by +64 bits) + + 'timespec hb_ping_start' offset changed from 14144 to 14208 (in bits) (by +64 bits) + + 'timespec hb_ping_sent' offset changed from 14272 to 14336 (in bits) (by +64 bits) + + 'unsigned int hb_actual_retrans_timeout_ms' offset changed from 14400 to 14464 (in bits) (by +64 bits) + + 'unsigned int hb_retrans_timeout_ms' offset changed from 14432 to 14496 (in bits) (by +64 bits) + + 'unsigned int hb_total_timeout_ms' offset changed from 14464 to 14528 (in bits) (by +64 bits) + + 'bool ocsp_check_ok' offset changed from 14496 to 14560 (in bits) (by +64 bits) + + 'heartbeat_state_t hb_state' offset changed from 14528 to 14592 (in bits) (by +64 bits) + + 'recv_state_t recv_state' offset changed from 14560 to 14624 (in bits) (by +64 bits) + + 'bool sc_random_set' offset changed from 14592 to 14656 (in bits) (by +64 bits) + + 'uint64_t flags' offset changed from 14656 to 14720 (in bits) (by +64 bits) + + 'gnutls_certificate_verify_function* verify_callback' offset changed from 14720 to 14784 (in bits) (by +64 bits) + + 'gnutls_typed_vdata_st* vc_data' offset changed from 14784 to 14848 (in bits) (by +64 bits) + + 'gnutls_typed_vdata_st vc_sdata' offset changed from 14848 to 14912 (in bits) (by +64 bits) + + 'unsigned int vc_elements' offset changed from 15040 to 15104 (in bits) (by +64 bits) + + 'unsigned int vc_status' offset changed from 15072 to 15136 (in bits) (by +64 bits) + + 'uint8_t cert_hash[32]' offset changed from 15136 to 15200 (in bits) (by +64 bits) + + 'bool cert_hash_set' offset changed from 15392 to 15456 (in bits) (by +64 bits) + + 'char saved_username[129]' offset changed from 15400 to 15464 (in bits) (by +64 bits) + + 'tfo_st tfo' offset changed from 16448 to 16576 (in bits) (by +128 bits) + + 'gnutls_supplemental_entry_st* rsup' offset changed from 17664 to 17792 (in bits) (by +128 bits) + + 'unsigned int rsup_size' offset changed from 17728 to 17856 (in bits) (by +128 bits) + + 'hello_ext_entry_st* rexts' offset changed from 17792 to 17920 (in bits) (by +128 bits) + + 'unsigned int rexts_size' offset changed from 17856 to 17984 (in bits) (by +128 bits) + + type of '__anonymous_struct__ ext_data[32]' changed: + + type name changed from '__anonymous_struct__[32]' to '__anonymous_struct__[64]' + + array type size changed from 6144 to 12288 + + array type subrange 1 changed length from 32 to 64 + + and offset changed from 17920 to 18048 (in bits) (by +128 bits) + + type of 'uint32_t used_exts' changed: + + typedef name changed from uint32_t to uint64_t at stdint-uintn.h:27:1 + + underlying type 'typedef __uint32_t' at types.h:41:1 changed: + + typedef name changed from __uint32_t to __uint64_t at types.h:44:1 + + underlying type 'unsigned int' changed: + + type name changed from 'unsigned int' to 'unsigned long int' + + type size changed from 32 to 64 (in bits) + + and offset changed from 24064 to 30336 (in bits) (by +6272 bits) + + 'gnutls_ext_flags_t ext_msg' offset changed from 24096 to 30400 (in bits) (by +6304 bits) + + 'unsigned int max_recv_size' offset changed from 24128 to 30432 (in bits) (by +6304 bits) + + 'const gnutls_group_entry_st* cand_ec_group' offset changed from 24192 to 30464 (in bits) (by +6272 bits) + + type of 'const gnutls_group_entry_st* cand_dh_group' changed: + + in pointed to type 'const gnutls_group_entry_st': + + in unqualified underlying type 'typedef gnutls_group_entry_st' at gnutls_int.h:666:1: + + underlying type 'struct gnutls_group_entry_st' at gnutls_int.h:681:1 changed: + + type size hasn't changed + + 1 data member changes (2 filtered): + + type of 'gnutls_pk_algorithm_t gnutls_group_entry_st::pk' changed: + + underlying type 'enum __anonymous_enum__' at gnutls.h:833:1 changed: + + type size hasn't changed + + 2 enumerator insertions: + + '__anonymous_enum__::GNUTLS_PK_ECDH_X448' value '11' + + '__anonymous_enum__::GNUTLS_PK_EDDSA_ED448' value '12' + + + + 1 enumerator change: + + '__anonymous_enum__::GNUTLS_PK_MAX' from value '10' to '12' at gnutls.h:866:1 + + + + + + and offset changed from 24256 to 30528 (in bits) (by +6272 bits) + + 'const gnutls_group_entry_st* cand_group' offset changed from 24320 to 30592 (in bits) (by +6272 bits) + + 'uint8_t hrr_cs[2]' offset changed from 24384 to 30656 (in bits) (by +6272 bits) + + 'int session_ticket_renew' offset changed from 24416 to 30688 (in bits) (by +6272 bits) + + 'tls13_ticket_st tls13_ticket' offset changed from 24448 to 30720 (in bits) (by +6272 bits) + + 'uint32_t early_data_received' offset changed from 27584 to 33856 (in bits) (by +6272 bits) + + 'void* epoch_lock' offset changed from 27712 to 33984 (in bits) (by +6272 bits) + + + + type of 'gnutls_key_st gnutls_session_int::key' changed: + + underlying type 'struct gnutls_key_st' at gnutls_int.h:535:1 changed: + + type size changed from 22336 to 22656 (in bits) + + 12 data member changes: + + type of 'struct {gnutls_pk_params_st ecdh_params; gnutls_pk_params_st ecdhx_params; gnutls_pk_params_st dh_params;} gnutls_key_st::kshare' changed: + + type size changed from 11328 to 11520 (in bits) + + 3 data member changes: + + + + 'gnutls_pk_params_st ecdhx_params' offset changed from 3776 to 3840 (in bits) (by +64 bits) + + 'gnutls_pk_params_st dh_params' offset changed from 7552 to 7680 (in bits) (by +128 bits) + + + + type of 'union {struct {uint8_t temp_secret[64]; unsigned int temp_secret_size; uint8_t e_ckey[64]; uint8_t hs_ckey[64]; uint8_t hs_skey[64]; uint8_t ap_ckey[64]; uint8_t ap_skey[64]; uint8_t ap_expkey[64]; uint8_t ap_rms[64];} tls13; struct {struct {gnutls_pk_params_st params; bigint_t x; bigint_t y; gnutls_datum_t raw;} ecdh; struct {gnutls_pk_params_st params; bigint_t client_Y;} dh; struct {bigint_t srp_key; bigint_t srp_g; bigint_t srp_p; bigint_t A; bigint_t B; bigint_t u; bigint_t b; bigint_t a; bigint_t x;} srp;} tls12;} gnutls_key_st::proto' changed: + + type size changed from 8448 to 8576 (in bits) + + 1 data member change: + + type of 'struct {struct {gnutls_pk_params_st params; bigint_t x; bigint_t y; gnutls_datum_t raw;} ecdh; struct {gnutls_pk_params_st params; bigint_t client_Y;} dh; struct {bigint_t srp_key; bigint_t srp_g; bigint_t srp_p; bigint_t A; bigint_t B; bigint_t u; bigint_t b; bigint_t a; bigint_t x;} srp;} tls12' changed: + + type size changed from 8448 to 8576 (in bits) + + 3 data member changes: + + type of 'struct {gnutls_pk_params_st params; bigint_t x; bigint_t y; gnutls_datum_t raw;} ecdh' changed: + + type size changed from 4032 to 4096 (in bits) + + 3 data member changes (1 filtered): + + 'bigint_t x' offset changed from 3776 to 3840 (in bits) (by +64 bits) + + 'bigint_t y' offset changed from 3840 to 3904 (in bits) (by +64 bits) + + 'gnutls_datum_t raw' offset changed from 3904 to 3968 (in bits) (by +64 bits) + + + + type of 'struct {gnutls_pk_params_st params; bigint_t client_Y;} dh' changed: + + type size changed from 3840 to 3904 (in bits) + + 2 data member changes: + + + + 'bigint_t client_Y' offset changed from 3776 to 3840 (in bits) (by +64 bits) + + and offset changed from 4032 to 4096 (in bits) (by +64 bits) + + 'struct {bigint_t srp_key; bigint_t srp_g; bigint_t srp_p; bigint_t A; bigint_t B; bigint_t u; bigint_t b; bigint_t a; bigint_t x;} srp' offset changed from 7872 to 8000 (in bits) (by +128 bits) + + + + and offset changed from 11328 to 11520 (in bits) (by +192 bits) + + 'binder_data_st gnutls_key_st::binders[2]' offset changed from 19776 to 20096 (in bits) (by +320 bits) + + 'gnutls_datum_t gnutls_key_st::key' offset changed from 20288 to 20608 (in bits) (by +320 bits) + + 'uint8_t gnutls_key_st::session_ticket_key[64]' offset changed from 20416 to 20736 (in bits) (by +320 bits) + + 'uint8_t gnutls_key_st::previous_ticket_key[64]' offset changed from 20928 to 21248 (in bits) (by +320 bits) + + 'uint8_t gnutls_key_st::initial_stek[64]' offset changed from 21440 to 21760 (in bits) (by +320 bits) + + 'void* gnutls_key_st::auth_info' offset changed from 21952 to 22272 (in bits) (by +320 bits) + + 'gnutls_credentials_type_t gnutls_key_st::auth_info_type' offset changed from 22016 to 22336 (in bits) (by +320 bits) + + 'int gnutls_key_st::auth_info_size' offset changed from 22048 to 22368 (in bits) (by +320 bits) + + 'auth_cred_st* gnutls_key_st::cred' offset changed from 22080 to 22400 (in bits) (by +320 bits) + + 'struct {uint64_t last_result; uint8_t was_rotated; gnutls_stek_rotation_callback_t cb;} gnutls_key_st::totp' offset changed from 22144 to 22464 (in bits) (by +320 bits) + + and offset changed from 30080 to 36352 (in bits) (by +6272 bits) + + + + + + type of 'gnutls_privkey_st* selected_key' changed: + + in pointed to type 'struct gnutls_privkey_st' at abstract_int.h:28:1: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'union {gnutls_x509_privkey_t x509; gnutls_pkcs11_privkey_t pkcs11; struct {gnutls_privkey_sign_func sign_func; gnutls_privkey_sign_data_func sign_data_func; gnutls_privkey_sign_hash_func sign_hash_func; gnutls_privkey_decrypt_func decrypt_func; gnutls_privkey_decrypt_func2 decrypt_func2; gnutls_privkey_deinit_func deinit_func; gnutls_privkey_info_func info_func; void* userdata; unsigned int bits;} ext;} gnutls_privkey_st::key' changed: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'gnutls_x509_privkey_t x509' changed: + + underlying type 'gnutls_x509_privkey_int*' changed: + + in pointed to type 'struct gnutls_x509_privkey_int' at x509_int.h:142:1: + + type size changed from 4032 to 4096 (in bits) + + 5 data member changes: + + + + 'unsigned int gnutls_x509_privkey_int::expanded' offset changed from 3776 to 3840 (in bits) (by +64 bits) + + 'unsigned int gnutls_x509_privkey_int::flags' offset changed from 3808 to 3872 (in bits) (by +64 bits) + + 'asn1_node gnutls_x509_privkey_int::key' offset changed from 3840 to 3904 (in bits) (by +64 bits) + + 'pin_info_st gnutls_x509_privkey_int::pin' offset changed from 3904 to 3968 (in bits) (by +64 bits) + + + + + + and offset changed from 10624 to 10688 (in bits) (by +64 bits) + + 'unsigned int additional_verify_flags' offset changed from 15104 to 15168 (in bits) (by +64 bits) + + 'gnutls_anti_replay_t anti_replay' offset changed from 27648 to 33920 (in bits) (by +6272 bits) + + + + + + [C]'function int gnutls_ocsp_req_export(gnutls_ocsp_req_t, gnutls_datum_t*)' at ocsp.c:369:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_req_t' changed: + + typedef name changed from gnutls_ocsp_req_t to gnutls_ocsp_req_const_t at ocsp.h:145:1 + + underlying type 'gnutls_ocsp_req_int*' changed: + + in pointed to type 'struct gnutls_ocsp_req_int': + + entity changed from 'struct gnutls_ocsp_req_int' to 'const gnutls_ocsp_req_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_req_get_extension(gnutls_ocsp_req_t, unsigned int, gnutls_datum_t*, unsigned int*, gnutls_datum_t*)' at ocsp.c:804:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_req_t' changed: + + typedef name changed from gnutls_ocsp_req_t to gnutls_ocsp_req_const_t at ocsp.h:145:1 + + underlying type 'gnutls_ocsp_req_int*' changed: + + in pointed to type 'struct gnutls_ocsp_req_int': + + entity changed from 'struct gnutls_ocsp_req_int' to 'const gnutls_ocsp_req_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_req_get_nonce(gnutls_ocsp_req_t, unsigned int*, gnutls_datum_t*)' at ocsp.c:909:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_req_t' changed: + + typedef name changed from gnutls_ocsp_req_t to gnutls_ocsp_req_const_t at ocsp.h:145:1 + + underlying type 'gnutls_ocsp_req_int*' changed: + + in pointed to type 'struct gnutls_ocsp_req_int': + + entity changed from 'struct gnutls_ocsp_req_int' to 'const gnutls_ocsp_req_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_req_get_version(gnutls_ocsp_req_t)' at ocsp.c:457:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_req_t' changed: + + typedef name changed from gnutls_ocsp_req_t to gnutls_ocsp_req_const_t at ocsp.h:145:1 + + underlying type 'gnutls_ocsp_req_int*' changed: + + in pointed to type 'struct gnutls_ocsp_req_int': + + entity changed from 'struct gnutls_ocsp_req_int' to 'const gnutls_ocsp_req_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_req_print(gnutls_ocsp_req_t, gnutls_ocsp_print_formats_t, gnutls_datum_t*)' at ocsp_output.c:172:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_req_t' changed: + + typedef name changed from gnutls_ocsp_req_t to gnutls_ocsp_req_const_t at ocsp.h:145:1 + + underlying type 'gnutls_ocsp_req_int*' changed: + + in pointed to type 'struct gnutls_ocsp_req_int': + + entity changed from 'struct gnutls_ocsp_req_int' to 'const gnutls_ocsp_req_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_resp_check_crt(gnutls_ocsp_resp_t, unsigned int, gnutls_x509_crt_t)' at ocsp.c:1357:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_resp_t' changed: + + typedef name changed from gnutls_ocsp_resp_t to gnutls_ocsp_resp_const_t at ocsp.h:197:1 + + underlying type 'gnutls_ocsp_resp_int*' changed: + + in pointed to type 'struct gnutls_ocsp_resp_int': + + entity changed from 'struct gnutls_ocsp_resp_int' to 'const gnutls_ocsp_resp_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_resp_export(gnutls_ocsp_resp_t, gnutls_datum_t*)' at ocsp.c:401:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_resp_t' changed: + + typedef name changed from gnutls_ocsp_resp_t to gnutls_ocsp_resp_const_t at ocsp.h:197:1 + + underlying type 'gnutls_ocsp_resp_int*' changed: + + in pointed to type 'struct gnutls_ocsp_resp_int': + + entity changed from 'struct gnutls_ocsp_resp_int' to 'const gnutls_ocsp_resp_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_resp_export2(gnutls_ocsp_resp_t, gnutls_datum_t*, gnutls_x509_crt_fmt_t)' at ocsp.c:419:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_resp_t' changed: + + typedef name changed from gnutls_ocsp_resp_t to gnutls_ocsp_resp_const_t at ocsp.h:197:1 + + underlying type 'gnutls_ocsp_resp_int*' changed: + + in pointed to type 'struct gnutls_ocsp_resp_int': + + entity changed from 'struct gnutls_ocsp_resp_int' to 'const gnutls_ocsp_resp_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_resp_get_certs(gnutls_ocsp_resp_t, gnutls_x509_crt_t**, size_t*)' at ocsp.c:1868:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_resp_t' changed: + + typedef name changed from gnutls_ocsp_resp_t to gnutls_ocsp_resp_const_t at ocsp.h:197:1 + + underlying type 'gnutls_ocsp_resp_int*' changed: + + in pointed to type 'struct gnutls_ocsp_resp_int': + + entity changed from 'struct gnutls_ocsp_resp_int' to 'const gnutls_ocsp_resp_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_resp_get_extension(gnutls_ocsp_resp_t, unsigned int, gnutls_datum_t*, unsigned int*, gnutls_datum_t*)' at ocsp.c:1678:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_resp_t' changed: + + typedef name changed from gnutls_ocsp_resp_t to gnutls_ocsp_resp_const_t at ocsp.h:197:1 + + underlying type 'gnutls_ocsp_resp_int*' changed: + + in pointed to type 'struct gnutls_ocsp_resp_int': + + entity changed from 'struct gnutls_ocsp_resp_int' to 'const gnutls_ocsp_resp_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_resp_get_nonce(gnutls_ocsp_resp_t, unsigned int*, gnutls_datum_t*)' at ocsp.c:1756:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_resp_t' changed: + + typedef name changed from gnutls_ocsp_resp_t to gnutls_ocsp_resp_const_t at ocsp.h:197:1 + + underlying type 'gnutls_ocsp_resp_int*' changed: + + in pointed to type 'struct gnutls_ocsp_resp_int': + + entity changed from 'struct gnutls_ocsp_resp_int' to 'const gnutls_ocsp_resp_int' + + type size hasn't changed + + + + [C]'function time_t gnutls_ocsp_resp_get_produced(gnutls_ocsp_resp_t)' at ocsp.c:1317:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_resp_t' changed: + + typedef name changed from gnutls_ocsp_resp_t to gnutls_ocsp_resp_const_t at ocsp.h:197:1 + + underlying type 'gnutls_ocsp_resp_int*' changed: + + in pointed to type 'struct gnutls_ocsp_resp_int': + + entity changed from 'struct gnutls_ocsp_resp_int' to 'const gnutls_ocsp_resp_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_resp_get_responder2(gnutls_ocsp_resp_t, gnutls_datum_t*, unsigned int)' at ocsp.c:1216:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_resp_t' changed: + + typedef name changed from gnutls_ocsp_resp_t to gnutls_ocsp_resp_const_t at ocsp.h:197:1 + + underlying type 'gnutls_ocsp_resp_int*' changed: + + in pointed to type 'struct gnutls_ocsp_resp_int': + + entity changed from 'struct gnutls_ocsp_resp_int' to 'const gnutls_ocsp_resp_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_resp_get_responder_raw_id(gnutls_ocsp_resp_t, unsigned int, gnutls_datum_t*)' at ocsp.c:1249:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_resp_t' changed: + + typedef name changed from gnutls_ocsp_resp_t to gnutls_ocsp_resp_const_t at ocsp.h:197:1 + + underlying type 'gnutls_ocsp_resp_int*' changed: + + in pointed to type 'struct gnutls_ocsp_resp_int': + + entity changed from 'struct gnutls_ocsp_resp_int' to 'const gnutls_ocsp_resp_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_resp_get_response(gnutls_ocsp_resp_t, gnutls_datum_t*, gnutls_datum_t*)' at ocsp.c:1095:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_resp_t' changed: + + typedef name changed from gnutls_ocsp_resp_t to gnutls_ocsp_resp_const_t at ocsp.h:197:1 + + underlying type 'gnutls_ocsp_resp_int*' changed: + + in pointed to type 'struct gnutls_ocsp_resp_int': + + entity changed from 'struct gnutls_ocsp_resp_int' to 'const gnutls_ocsp_resp_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_resp_get_signature_algorithm(gnutls_ocsp_resp_t)' at ocsp.c:1796:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_resp_t' changed: + + typedef name changed from gnutls_ocsp_resp_t to gnutls_ocsp_resp_const_t at ocsp.h:197:1 + + underlying type 'gnutls_ocsp_resp_int*' changed: + + in pointed to type 'struct gnutls_ocsp_resp_int': + + entity changed from 'struct gnutls_ocsp_resp_int' to 'const gnutls_ocsp_resp_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_resp_print(gnutls_ocsp_resp_t, gnutls_ocsp_print_formats_t, gnutls_datum_t*)' at ocsp_output.c:642:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_resp_t' changed: + + typedef name changed from gnutls_ocsp_resp_t to gnutls_ocsp_resp_const_t at ocsp.h:197:1 + + underlying type 'gnutls_ocsp_resp_int*' changed: + + in pointed to type 'struct gnutls_ocsp_resp_int': + + entity changed from 'struct gnutls_ocsp_resp_int' to 'const gnutls_ocsp_resp_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_resp_verify(gnutls_ocsp_resp_t, gnutls_x509_trust_list_t, unsigned int*, unsigned int)' at ocsp.c:2297:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_resp_t' changed: + + typedef name changed from gnutls_ocsp_resp_t to gnutls_ocsp_resp_const_t at ocsp.h:197:1 + + underlying type 'gnutls_ocsp_resp_int*' changed: + + in pointed to type 'struct gnutls_ocsp_resp_int': + + entity changed from 'struct gnutls_ocsp_resp_int' to 'const gnutls_ocsp_resp_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_resp_verify_direct(gnutls_ocsp_resp_t, gnutls_x509_crt_t, unsigned int*, unsigned int)' at ocsp.c:2212:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_ocsp_resp_t' changed: + + typedef name changed from gnutls_ocsp_resp_t to gnutls_ocsp_resp_const_t at ocsp.h:197:1 + + underlying type 'gnutls_ocsp_resp_int*' changed: + + in pointed to type 'struct gnutls_ocsp_resp_int': + + entity changed from 'struct gnutls_ocsp_resp_int' to 'const gnutls_ocsp_resp_int' + + type size hasn't changed + + + + [C]'function int gnutls_ocsp_status_request_is_checked(gnutls_session_t, unsigned int)' at ocsp-api.c:622:1 has some indirect sub-type changes: + + return type changed: + + type name changed from 'int' to 'unsigned int' + + type size hasn't changed + + + + + + [C]'function int gnutls_privkey_set_spki(gnutls_privkey_t, const gnutls_x509_spki_t, unsigned int)' at privkey.c:1910:1 has some indirect sub-type changes: + + parameter 2 of type 'const gnutls_x509_spki_t' has sub-type changes: + + in unqualified underlying type 'typedef gnutls_x509_spki_t' at x509.h:431:1: + + underlying type 'gnutls_x509_spki_st*' changed: + + pointed to type 'struct gnutls_x509_spki_st' changed at crypto-backend.h:175:1, as reported earlier + + + + [C]'function int gnutls_psk_allocate_client_credentials(gnutls_psk_client_credentials_t*)' at psk.c:63:1 has some indirect sub-type changes: + + parameter 1 of type 'gnutls_psk_client_credentials_t*' has sub-type changes: + + in pointed to type 'typedef gnutls_psk_client_credentials_t' at gnutls.h:2590:1: + + underlying type 'gnutls_psk_client_credentials_st*' changed: + + in pointed to type 'struct gnutls_psk_client_credentials_st' at psk.h:29:1: + + type size changed from 384 to 448 (in bits) + + 1 data member insertion: + + 'gnutls_psk_client_credentials_function* gnutls_psk_client_credentials_st::get_function_legacy', at offset 320 (in bits) at psk.h:33:1 + + 2 data member changes: + + type of 'gnutls_psk_client_credentials_function* gnutls_psk_client_credentials_st::get_function' changed: + + in pointed to type 'typedef gnutls_psk_client_credentials_function' at gnutls.h:2653:1: + + typedef name changed from gnutls_psk_client_credentials_function to gnutls_psk_client_credentials_function2 at gnutls.h:2653:1 + + underlying type 'function type int (typedef gnutls_session_t, char**, gnutls_datum_t*)' changed: + + parameter 2 of type 'char**' changed: + + in pointed to type 'char*' at gnutls.h:1220:1: + + entity changed from 'char*' to 'typedef gnutls_datum_t' at gnutls.h:1220:1 + + type size changed from 64 to 128 (in bits) + + + + 'const mac_entry_st* gnutls_psk_client_credentials_st::binder_algo' offset changed from 320 to 384 (in bits) (by +64 bits) + + + + [C]'function int gnutls_psk_allocate_server_credentials(gnutls_psk_server_credentials_t*)' at psk.c:211:1 has some indirect sub-type changes: + + parameter 1 of type 'gnutls_psk_server_credentials_t*' has sub-type changes: + + in pointed to type 'typedef gnutls_psk_server_credentials_t' at gnutls.h:2588:1: + + underlying type 'gnutls_psk_server_credentials_st*' changed: + + in pointed to type 'struct gnutls_psk_server_credentials_st' at psk.h:38:1: + + type size changed from 448 to 512 (in bits) + + 1 data member insertion: + + 'gnutls_psk_server_credentials_function* gnutls_psk_server_credentials_st::pwd_callback_legacy', at offset 128 (in bits) at psk.h:44:1 + + 7 data member changes: + + type of 'gnutls_psk_server_credentials_function* gnutls_psk_server_credentials_st::pwd_callback' changed: + + in pointed to type 'typedef gnutls_psk_server_credentials_function' at gnutls.h:2638:1: + + typedef name changed from gnutls_psk_server_credentials_function to gnutls_psk_server_credentials_function2 at gnutls.h:2638:1 + + underlying type 'function type int (typedef gnutls_session_t, const char*, gnutls_datum_t*)' changed: + + parameter 2 of type 'const char*' changed: + + in pointed to type 'const char': + + 'const char' changed to 'const gnutls_datum_t' + + + + 'gnutls_dh_params_t gnutls_psk_server_credentials_st::dh_params' offset changed from 128 to 192 (in bits) (by +64 bits) + + 'unsigned int gnutls_psk_server_credentials_st::deinit_dh_params' offset changed from 192 to 256 (in bits) (by +64 bits) + + 'gnutls_sec_param_t gnutls_psk_server_credentials_st::dh_sec_param' offset changed from 224 to 288 (in bits) (by +64 bits) + + 'gnutls_params_function* gnutls_psk_server_credentials_st::params_func' offset changed from 256 to 320 (in bits) (by +64 bits) + + 'char* gnutls_psk_server_credentials_st::hint' offset changed from 320 to 384 (in bits) (by +64 bits) + + 'const mac_entry_st* gnutls_psk_server_credentials_st::binder_algo' offset changed from 384 to 448 (in bits) (by +64 bits) + + + + [C]'function int gnutls_pubkey_get_spki(gnutls_pubkey_t, gnutls_x509_spki_t, unsigned int)' at pubkey.c:2579:1 has some indirect sub-type changes: + + parameter 2 of type 'typedef gnutls_x509_spki_t' has sub-type changes: + + underlying type 'gnutls_x509_spki_st*' changed: + + pointed to type 'struct gnutls_x509_spki_st' changed at crypto-backend.h:175:1, as reported earlier + + + + [C]'function int gnutls_x509_crq_get_spki(gnutls_x509_crq_t, gnutls_x509_spki_t, unsigned int)' at crq.c:1065:1 has some indirect sub-type changes: + + parameter 2 of type 'typedef gnutls_x509_spki_t' has sub-type changes: + + underlying type 'gnutls_x509_spki_st*' changed: + + pointed to type 'struct gnutls_x509_spki_st' changed at crypto-backend.h:175:1, as reported earlier + + + + [C]'function int gnutls_x509_crq_get_tlsfeatures(gnutls_x509_crq_t, gnutls_x509_tlsfeatures_t, unsigned int, unsigned int*)' at crq.c:2857:1 has some indirect sub-type changes: + + parameter 2 of type 'typedef gnutls_x509_tlsfeatures_t' has sub-type changes: + + underlying type 'gnutls_x509_tlsfeatures_st*' changed: + + in pointed to type 'struct gnutls_x509_tlsfeatures_st' at x509_int.h:544:1: + + type size changed from 544 to 1056 (in bits) + + 2 data member changes: + + type of 'uint16_t gnutls_x509_tlsfeatures_st::feature[32]' changed: + + type name changed from 'uint16_t[32]' to 'uint16_t[64]' + + array type size changed from 512 to 1024 + + array type subrange 1 changed length from 32 to 64 + + + + 'unsigned int gnutls_x509_tlsfeatures_st::size' offset changed from 512 to 1024 (in bits) (by +512 bits) + + + + [C]'function int gnutls_x509_crt_get_spki(gnutls_x509_crt_t, gnutls_x509_spki_t, unsigned int)' at x509.c:1632:1 has some indirect sub-type changes: + + parameter 2 of type 'typedef gnutls_x509_spki_t' has sub-type changes: + + underlying type 'gnutls_x509_spki_st*' changed: + + pointed to type 'struct gnutls_x509_spki_st' changed at crypto-backend.h:175:1, as reported earlier + + + + [C]'function int gnutls_x509_privkey_get_spki(gnutls_x509_privkey_t, gnutls_x509_spki_t, unsigned int)' at privkey.c:1363:1 has some indirect sub-type changes: + + parameter 2 of type 'typedef gnutls_x509_spki_t' has sub-type changes: + + underlying type 'gnutls_x509_spki_st*' changed: + + pointed to type 'struct gnutls_x509_spki_st' changed at crypto-backend.h:175:1, as reported earlier + + + + [C]'function void gnutls_x509_spki_deinit(gnutls_x509_spki_t)' at spki.c:71:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef gnutls_x509_spki_t' has sub-type changes: + + underlying type 'gnutls_x509_spki_st*' changed: + + pointed to type 'struct gnutls_x509_spki_st' changed at crypto-backend.h:175:1, as reported earlier + + + + [C]'function int gnutls_x509_spki_init(gnutls_x509_spki_t*)' at spki.c:44:1 has some indirect sub-type changes: + + parameter 1 of type 'gnutls_x509_spki_t*' has sub-type changes: + + pointed to type 'typedef gnutls_x509_spki_t' changed at x509.h:431:1, as reported earlier + + + + + +---------------diffs in gnutls_libgnutls-dane.so.0.4.1_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 2 Changed (7 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +2 functions with some indirect sub-type change: + + + + [C]'function int dane_query_data(dane_query_t, unsigned int, unsigned int*, unsigned int*, unsigned int*, gnutls_datum_t*)' at dane.c:116:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef dane_query_t' has sub-type changes: + + underlying type 'dane_query_st*' changed: + + in pointed to type 'struct dane_query_st' at dane.c:62:1: + + type size hasn't changed + + 1 data member change: + + type of 'ub_result* dane_query_st::result' changed: + + in pointed to type 'struct ub_result' at unbound.h:123:1: + + type size hasn't changed + + 1 data member insertion: + + 'int ub_result::was_ratelimited', at offset 704 (in bits) at unbound.h:211:1 + + 1 data member change: + + 'int ub_result::ttl' offset changed from 704 to 736 (in bits) (by +32 bits) + + + + + + [C]'function int dane_verify_session_crt(dane_state_t, gnutls_session_t, const char*, const char*, unsigned int, unsigned int, unsigned int, unsigned int*)' at dane.c:929:1 has some indirect sub-type changes: + + parameter 2 of type 'typedef gnutls_session_t' has sub-type changes: + + underlying type 'gnutls_session_int*' changed: + + in pointed to type 'struct gnutls_session_int' at gnutls_int.h:1497:1: + + type size changed from 52416 to 59008 (in bits) + + 3 data member changes (1 filtered): + + type of 'record_parameters_st* gnutls_session_int::record_parameters[4]' changed: + + array element type 'record_parameters_st*' changed: + + in pointed to type 'typedef record_parameters_st' at gnutls_int.h:618:1: + + underlying type 'struct record_parameters_st' at gnutls_int.h:887:1 changed: + + type size hasn't changed + + 3 data member changes (1 filtered): + + type of 'const cipher_entry_st* record_parameters_st::cipher' changed: + + in pointed to type 'const cipher_entry_st': + + in unqualified underlying type 'typedef cipher_entry_st' at gnutls_int.h:636:1: + + underlying type 'struct cipher_entry_st' at gnutls_int.h:648:1 changed: + + type size hasn't changed + + 2 data member deletions: + + 'bool cipher_entry_st::only_aead', at offset 232 (in bits) at gnutls_int.h:659:1 + + + + 'bool cipher_entry_st::no_rekey', at offset 240 (in bits) at gnutls_int.h:660:1 + + + + no data member change (1 filtered); + + 1 data member change: + + type of 'bool cipher_entry_st::xor_nonce' changed: + + type name changed from 'bool' to 'unsigned int' + + type size changed from 8 to 32 (in bits) + + and name of 'cipher_entry_st::xor_nonce' changed to 'cipher_entry_st::flags' at gnutls_int.h:635:1 + + + + type of 'record_state_st record_parameters_st::read' changed: + + underlying type 'struct record_state_st' at gnutls_int.h:858:1 changed: + + type size hasn't changed + + 2 data member changes: + + type of 'union {auth_cipher_hd_st tls12; api_aead_cipher_hd_st aead;} record_state_st::ctx' changed: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'auth_cipher_hd_st tls12' changed: + + underlying type 'struct {cipher_hd_st cipher; union {digest_hd_st dig; mac_hd_st mac;} mac; unsigned int is_mac; unsigned int non_null; unsigned int etm; size_t tag_size;}' at cipher_int.h:204:1 changed: + + type size hasn't changed + + 1 data member insertion: + + 'unsigned int continuous_mac', at offset 30 (in bits) at cipher_int.h:215:1 + + 2 data member changes (2 filtered): + + 'unsigned int etm' offset changed from 29 to 28 (in bits) (by -1 bits) + + 'unsigned int non_null' offset changed from 30 to 29 (in bits) (by -1 bits) + + + + + + type of 'gnutls_uint64 record_state_st::sequence_number' changed: + + typedef name changed from gnutls_uint64 to uint64_t at stdint-uintn.h:27:1 + + underlying type 'struct {unsigned char i[8];}' at gnutls_int.h:103:1 changed: + + entity changed from 'struct {unsigned char i[8];}' to 'typedef __uint64_t' at types.h:44:1 + + type size hasn't changed + + + + + + + + type size hasn't changed + + + + type of 'internals_st gnutls_session_int::internals' changed: + + underlying type 'struct {mbuffer_head_st record_buffer; int handshake_hash_buffer_prev_len; unsigned int handshake_hash_buffer_client_hello_len; unsigned int handshake_hash_buffer_client_kx_len; unsigned int handshake_hash_buffer_server_finished_len; unsigned int handshake_hash_buffer_client_finished_len; gnutls_buffer_st handshake_hash_buffer; bool resumable; send_ticket_state_t ticket_state; bye_state_t bye_state; reauth_state_t reauth_state; handshake_state_t handshake_final_state; handshake_state_t handshake_state; bool invalid_connection; bool may_not_read; bool may_not_write; bool read_eof; int last_alert; int last_handshake_in; int last_handshake_out; gnutls_priority_st* priorities; bool allow_large_records; bool allow_small_records; bool no_etm; bool no_ext_master_secret; bool allow_key_usage_violation; bool allow_wrong_pms; bool dumbfw; uint16_t dh_prime_bits; bool resumed; bool resumption_requested; security_parameters_st resumed_security_parameters; gnutls_datum_t resumption_data; mbuffer_head_st handshake_send_buffer; mbuffer_head_st handshake_header_recv_buffer; handshake_buffer_st handshake_recv_buffer[6]; int handshake_recv_buffer_size; mbuffer_head_st record_recv_buffer; mbuffer_head_st record_send_buffer; size_t record_send_buffer_user_size; mbuffer_head_st early_data_recv_buffer; gnutls_buffer_st early_data_presend_buffer; record_send_state_t rsend_state; gnutls_buffer_st record_key_update_buffer; gnutls_buffer_st record_presend_buffer; gnutls_buffer_st reauth_buffer; time_t expire_time; const mod_auth_st_int* auth_struct; uint8_t adv_version_major; uint8_t adv_version_minor; gnutls_certificate_request_t send_cert_req; size_t max_handshake_data_buffer_size; gnutls_pull_timeout_func pull_timeout_func; gnutls_pull_func pull_func; gnutls_push_func push_func; gnutls_vec_push_func vec_push_func; gnutls_errno_func errno_func; gnutls_transport_ptr_t transport_recv_ptr; gnutls_transport_ptr_t transport_send_ptr; gnutls_db_store_func db_store_func; gnutls_db_retr_func db_retrieve_func; gnutls_db_remove_func db_remove_func; void* db_ptr; gnutls_handshake_simple_hook_func user_hello_func; gnutls_handshake_hook_func h_hook; unsigned int h_type; int16_t h_post; gnutls_pcert_st* selected_cert_list; uint16_t selected_cert_list_length; gnutls_privkey_st* selected_key; gnutls_ocsp_data_st* selected_ocsp; uint16_t selected_ocsp_length; gnutls_status_request_ocsp_func selected_ocsp_func; void* selected_ocsp_func_ptr; bool selected_need_free; uint8_t default_record_version[2]; uint8_t default_hello_version[2]; void* user_ptr; bool direction; bool ignore_rdn_sequence; uint8_t rsa_pms_version[2]; int errnum; bool initial_negotiation_completed; void* post_negotiation_lock; transport_t transport; dtls_st dtls; unsigned int handshake_suspicious_loops; bool handshake_in_progress; bool premaster_set; unsigned int cb_tls_unique_len; unsigned char cb_tls_unique[36]; timespec handshake_start_time; timespec handshake_abs_timeout; unsigned int ertt; unsigned int handshake_timeout_ms; unsigned int record_timeout_ms; gnutls_datum_t post_handshake_cr_context; gnutls_buffer_st post_handshake_hash_buffer; unsigned int hsk_flags; timespec last_key_update; unsigned int key_update_count; gnutls_buffer_st full_client_hello; int extensions_offset; gnutls_buffer_st hb_local_data; gnutls_buffer_st hb_remote_data; timespec hb_ping_start; timespec hb_ping_sent; unsigned int hb_actual_retrans_timeout_ms; unsigned int hb_retrans_timeout_ms; unsigned int hb_total_timeout_ms; bool ocsp_check_ok; heartbeat_state_t hb_state; recv_state_t recv_state; bool sc_random_set; uint64_t flags; gnutls_certificate_verify_function* verify_callback; gnutls_typed_vdata_st* vc_data; gnutls_typed_vdata_st vc_sdata; unsigned int vc_elements; unsigned int vc_status; unsigned int additional_verify_flags; uint8_t cert_hash[32]; bool cert_hash_set; char saved_username[129]; bool saved_username_set; tfo_st tfo; gnutls_supplemental_entry_st* rsup; unsigned int rsup_size; hello_ext_entry_st* rexts; unsigned int rexts_size; __anonymous_struct__ ext_data[32]; uint32_t used_exts; gnutls_ext_flags_t ext_msg; unsigned int max_recv_size; const gnutls_group_entry_st* cand_ec_group; const gnutls_group_entry_st* cand_dh_group; const gnutls_group_entry_st* cand_group; uint8_t hrr_cs[2]; int session_ticket_renew; tls13_ticket_st tls13_ticket; uint32_t early_data_received; gnutls_anti_replay_t anti_replay; void* epoch_lock;}' at gnutls_int.h:1094:1 changed: + + type size changed from 27776 to 34048 (in bits) + + 1 data member deletion: + + 'bool saved_username_set', at offset 16432 (in bits) at gnutls_int.h:1448:1 + + + + 2 data member insertions: + + 'gnutls_keylog_func keylog_func', at offset 10496 (in bits) at gnutls_int.h:1230:1 + + 'int saved_username_size', at offset 16512 (in bits) at gnutls_int.h:1431:1 + + 78 data member changes (8 filtered): + + type of 'gnutls_priority_st* priorities' changed: + + in pointed to type 'struct gnutls_priority_st' at gnutls_int.h:921:1: + + type size hasn't changed + + 1 data member changes (2 filtered): + + type of 'sign_algo_list_st gnutls_priority_st::sigalg' changed: + + underlying type 'struct sign_algo_list_st' at gnutls_int.h:935:1 changed: + + type size hasn't changed + + 1 data member change: + + type of 'const gnutls_sign_entry_st* sign_algo_list_st::entry[64]' changed: + + array element type 'const gnutls_sign_entry_st*' changed: + + in pointed to type 'const gnutls_sign_entry_st': + + in unqualified underlying type 'struct gnutls_sign_entry_st' at algorithms.h:344:1: + + type size hasn't changed + + 1 data member insertion: + + 'unsigned int gnutls_sign_entry_st::hash_output_size', at offset 416 (in bits) at algorithms.h:373:1 + + 1 data member changes (5 filtered): + + type of 'gnutls_sign_algorithm_t gnutls_sign_entry_st::id' changed: + + underlying type 'enum __anonymous_enum__' at gnutls.h:912:1 changed: + + type size hasn't changed + + 1 enumerator insertion: + + '__anonymous_enum__::GNUTLS_SIGN_EDDSA_ED448' value '46' + + + + 1 enumerator change: + + '__anonymous_enum__::GNUTLS_SIGN_MAX' from value '45' to '46' at gnutls.h:948:1 + + + + + + no data member change (1 filtered); + + type size hasn't changed + + + + + + + + type of 'security_parameters_st resumed_security_parameters' changed: + + underlying type 'struct {unsigned int entity; uint16_t epoch_read; uint16_t epoch_write; uint16_t epoch_next; uint16_t epoch_min; const gnutls_cipher_suite_entry_st* cs; const mac_entry_st* prf; uint8_t master_secret[48]; uint8_t client_random[32]; uint8_t server_random[32]; uint8_t session_id[32]; uint8_t session_id_size; time_t timestamp; uint8_t post_handshake_auth; uint16_t max_record_send_size; uint16_t max_record_recv_size; uint16_t max_user_record_send_size; uint16_t max_user_record_recv_size; uint32_t max_early_data_size; gnutls_certificate_type_t client_ctype; gnutls_certificate_type_t server_ctype; const gnutls_group_entry_st* grp; gnutls_sign_algorithm_t server_sign_algo; gnutls_sign_algorithm_t client_sign_algo; uint8_t ext_master_secret; uint8_t etm; uint8_t client_auth_type; uint8_t server_auth_type; int do_recv_supplemental; int do_send_supplemental; const version_entry_st* pversion;}' at gnutls_int.h:769:1 changed: + + type size hasn't changed + + 1 data member changes (5 filtered): + + type of 'const version_entry_st* pversion' changed: + + in pointed to type 'const version_entry_st': + + in unqualified underlying type 'typedef version_entry_st' at gnutls_int.h:713:1: + + underlying type 'struct {const char* name; gnutls_protocol_t id; unsigned int age; uint8_t major; uint8_t minor; transport_t transport; bool supported; bool explicit_iv; bool extensions; bool selectable_sighash; bool selectable_prf; bool obsolete; bool tls13_sem; bool false_start; bool only_extension; bool post_handshake_auth; bool key_shares; uint8_t tls_sig_sem;}' at gnutls_int.h:708:1 changed: + + type size hasn't changed + + 1 data member insertion: + + 'bool multi_ocsp', at offset 280 (in bits) at gnutls_int.h:706:1 + + 1 data member change: + + 'uint8_t tls_sig_sem' offset changed from 280 to 288 (in bits) (by +8 bits) + + + + + + type of 'mbuffer_head_st early_data_recv_buffer' changed: + + underlying type 'struct mbuffer_head_st' at gnutls_int.h:478:1 changed: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'mbuffer_st* mbuffer_head_st::head' changed: + + in pointed to type 'struct mbuffer_st' at gnutls_int.h:410:1: + + type size hasn't changed + + 1 data member changes (2 filtered): + + type of 'gnutls_uint64 mbuffer_st::record_sequence' changed: + + details were reported earlier + + + + + + + + 'gnutls_pcert_st* selected_cert_list' offset changed from 10496 to 10560 (in bits) (by +64 bits) + + 'uint16_t selected_cert_list_length' offset changed from 10560 to 10624 (in bits) (by +64 bits) + + 'gnutls_privkey_st* selected_key' offset changed from 10624 to 10688 (in bits) (by +64 bits) + + 'gnutls_ocsp_data_st* selected_ocsp' offset changed from 10688 to 10752 (in bits) (by +64 bits) + + 'uint16_t selected_ocsp_length' offset changed from 10752 to 10816 (in bits) (by +64 bits) + + 'gnutls_status_request_ocsp_func selected_ocsp_func' offset changed from 10816 to 10880 (in bits) (by +64 bits) + + 'void* selected_ocsp_func_ptr' offset changed from 10880 to 10944 (in bits) (by +64 bits) + + 'bool selected_need_free' offset changed from 10944 to 11008 (in bits) (by +64 bits) + + 'uint8_t default_record_version[2]' offset changed from 10952 to 11016 (in bits) (by +64 bits) + + 'uint8_t default_hello_version[2]' offset changed from 10968 to 11032 (in bits) (by +64 bits) + + 'void* user_ptr' offset changed from 11008 to 11072 (in bits) (by +64 bits) + + 'bool direction' offset changed from 11072 to 11136 (in bits) (by +64 bits) + + 'bool ignore_rdn_sequence' offset changed from 11080 to 11144 (in bits) (by +64 bits) + + 'uint8_t rsa_pms_version[2]' offset changed from 11088 to 11152 (in bits) (by +64 bits) + + 'int errnum' offset changed from 11104 to 11168 (in bits) (by +64 bits) + + 'bool initial_negotiation_completed' offset changed from 11136 to 11200 (in bits) (by +64 bits) + + 'void* post_negotiation_lock' offset changed from 11200 to 11264 (in bits) (by +64 bits) + + 'transport_t transport' offset changed from 11264 to 11328 (in bits) (by +64 bits) + + 'dtls_st dtls' offset changed from 11328 to 11392 (in bits) (by +64 bits) + + 'unsigned int handshake_suspicious_loops' offset changed from 11904 to 11968 (in bits) (by +64 bits) + + 'bool handshake_in_progress' offset changed from 11936 to 12000 (in bits) (by +64 bits) + + 'bool premaster_set' offset changed from 11944 to 12008 (in bits) (by +64 bits) + + 'unsigned int cb_tls_unique_len' offset changed from 11968 to 12032 (in bits) (by +64 bits) + + 'unsigned char cb_tls_unique[36]' offset changed from 12000 to 12064 (in bits) (by +64 bits) + + 'timespec handshake_start_time' offset changed from 12288 to 12352 (in bits) (by +64 bits) + + 'timespec handshake_abs_timeout' offset changed from 12416 to 12480 (in bits) (by +64 bits) + + 'unsigned int ertt' offset changed from 12544 to 12608 (in bits) (by +64 bits) + + 'unsigned int handshake_timeout_ms' offset changed from 12576 to 12640 (in bits) (by +64 bits) + + 'unsigned int record_timeout_ms' offset changed from 12608 to 12672 (in bits) (by +64 bits) + + 'gnutls_datum_t post_handshake_cr_context' offset changed from 12672 to 12736 (in bits) (by +64 bits) + + 'gnutls_buffer_st post_handshake_hash_buffer' offset changed from 12800 to 12864 (in bits) (by +64 bits) + + 'unsigned int hsk_flags' offset changed from 13056 to 13120 (in bits) (by +64 bits) + + 'timespec last_key_update' offset changed from 13120 to 13184 (in bits) (by +64 bits) + + 'unsigned int key_update_count' offset changed from 13248 to 13312 (in bits) (by +64 bits) + + 'gnutls_buffer_st full_client_hello' offset changed from 13312 to 13376 (in bits) (by +64 bits) + + 'int extensions_offset' offset changed from 13568 to 13632 (in bits) (by +64 bits) + + 'gnutls_buffer_st hb_local_data' offset changed from 13632 to 13696 (in bits) (by +64 bits) + + 'gnutls_buffer_st hb_remote_data' offset changed from 13888 to 13952 (in bits) (by +64 bits) + + 'timespec hb_ping_start' offset changed from 14144 to 14208 (in bits) (by +64 bits) + + 'timespec hb_ping_sent' offset changed from 14272 to 14336 (in bits) (by +64 bits) + + 'unsigned int hb_actual_retrans_timeout_ms' offset changed from 14400 to 14464 (in bits) (by +64 bits) + + 'unsigned int hb_retrans_timeout_ms' offset changed from 14432 to 14496 (in bits) (by +64 bits) + + 'unsigned int hb_total_timeout_ms' offset changed from 14464 to 14528 (in bits) (by +64 bits) + + 'bool ocsp_check_ok' offset changed from 14496 to 14560 (in bits) (by +64 bits) + + 'heartbeat_state_t hb_state' offset changed from 14528 to 14592 (in bits) (by +64 bits) + + 'recv_state_t recv_state' offset changed from 14560 to 14624 (in bits) (by +64 bits) + + 'bool sc_random_set' offset changed from 14592 to 14656 (in bits) (by +64 bits) + + 'uint64_t flags' offset changed from 14656 to 14720 (in bits) (by +64 bits) + + 'gnutls_certificate_verify_function* verify_callback' offset changed from 14720 to 14784 (in bits) (by +64 bits) + + 'gnutls_typed_vdata_st* vc_data' offset changed from 14784 to 14848 (in bits) (by +64 bits) + + 'gnutls_typed_vdata_st vc_sdata' offset changed from 14848 to 14912 (in bits) (by +64 bits) + + 'unsigned int vc_elements' offset changed from 15040 to 15104 (in bits) (by +64 bits) + + 'unsigned int vc_status' offset changed from 15072 to 15136 (in bits) (by +64 bits) + + 'unsigned int additional_verify_flags' offset changed from 15104 to 15168 (in bits) (by +64 bits) + + 'uint8_t cert_hash[32]' offset changed from 15136 to 15200 (in bits) (by +64 bits) + + 'bool cert_hash_set' offset changed from 15392 to 15456 (in bits) (by +64 bits) + + 'char saved_username[129]' offset changed from 15400 to 15464 (in bits) (by +64 bits) + + 'tfo_st tfo' offset changed from 16448 to 16576 (in bits) (by +128 bits) + + 'gnutls_supplemental_entry_st* rsup' offset changed from 17664 to 17792 (in bits) (by +128 bits) + + 'unsigned int rsup_size' offset changed from 17728 to 17856 (in bits) (by +128 bits) + + 'hello_ext_entry_st* rexts' offset changed from 17792 to 17920 (in bits) (by +128 bits) + + 'unsigned int rexts_size' offset changed from 17856 to 17984 (in bits) (by +128 bits) + + type of '__anonymous_struct__ ext_data[32]' changed: + + type name changed from '__anonymous_struct__[32]' to '__anonymous_struct__[64]' + + array type size changed from 6144 to 12288 + + array type subrange 1 changed length from 32 to 64 + + and offset changed from 17920 to 18048 (in bits) (by +128 bits) + + type of 'uint32_t used_exts' changed: + + typedef name changed from uint32_t to uint64_t at stdint-uintn.h:27:1 + + underlying type 'typedef __uint32_t' at types.h:41:1 changed: + + typedef name changed from __uint32_t to __uint64_t at types.h:44:1 + + underlying type 'unsigned int' changed: + + type name changed from 'unsigned int' to 'unsigned long int' + + type size changed from 32 to 64 (in bits) + + and offset changed from 24064 to 30336 (in bits) (by +6272 bits) + + 'gnutls_ext_flags_t ext_msg' offset changed from 24096 to 30400 (in bits) (by +6304 bits) + + 'unsigned int max_recv_size' offset changed from 24128 to 30432 (in bits) (by +6304 bits) + + 'const gnutls_group_entry_st* cand_ec_group' offset changed from 24192 to 30464 (in bits) (by +6272 bits) + + type of 'const gnutls_group_entry_st* cand_dh_group' changed: + + in pointed to type 'const gnutls_group_entry_st': + + in unqualified underlying type 'typedef gnutls_group_entry_st' at gnutls_int.h:666:1: + + underlying type 'struct gnutls_group_entry_st' at gnutls_int.h:681:1 changed: + + type size hasn't changed + + 2 data member changes (1 filtered): + + type of 'gnutls_ecc_curve_t gnutls_group_entry_st::curve' changed: + + underlying type 'enum __anonymous_enum__' at gnutls.h:988:1 changed: + + type size hasn't changed + + 7 enumerator insertions: + + '__anonymous_enum__::GNUTLS_ECC_CURVE_GOST512C' value '15' + + '__anonymous_enum__::GNUTLS_ECC_CURVE_GOST256A' value '16' + + '__anonymous_enum__::GNUTLS_ECC_CURVE_GOST256B' value '17' + + '__anonymous_enum__::GNUTLS_ECC_CURVE_GOST256C' value '18' + + '__anonymous_enum__::GNUTLS_ECC_CURVE_GOST256D' value '19' + + '__anonymous_enum__::GNUTLS_ECC_CURVE_X448' value '20' + + '__anonymous_enum__::GNUTLS_ECC_CURVE_ED448' value '21' + + + + 1 enumerator change: + + '__anonymous_enum__::GNUTLS_ECC_CURVE_MAX' from value '14' to '21' at gnutls.h:1032:1 + + + + + + type of 'gnutls_pk_algorithm_t gnutls_group_entry_st::pk' changed: + + underlying type 'enum __anonymous_enum__' at gnutls.h:833:1 changed: + + type size hasn't changed + + 2 enumerator insertions: + + '__anonymous_enum__::GNUTLS_PK_ECDH_X448' value '11' + + '__anonymous_enum__::GNUTLS_PK_EDDSA_ED448' value '12' + + + + 1 enumerator change: + + '__anonymous_enum__::GNUTLS_PK_MAX' from value '10' to '12' at gnutls.h:866:1 + + + + + + and offset changed from 24256 to 30528 (in bits) (by +6272 bits) + + 'const gnutls_group_entry_st* cand_group' offset changed from 24320 to 30592 (in bits) (by +6272 bits) + + 'uint8_t hrr_cs[2]' offset changed from 24384 to 30656 (in bits) (by +6272 bits) + + 'int session_ticket_renew' offset changed from 24416 to 30688 (in bits) (by +6272 bits) + + 'tls13_ticket_st tls13_ticket' offset changed from 24448 to 30720 (in bits) (by +6272 bits) + + 'uint32_t early_data_received' offset changed from 27584 to 33856 (in bits) (by +6272 bits) + + 'gnutls_anti_replay_t anti_replay' offset changed from 27648 to 33920 (in bits) (by +6272 bits) + + 'void* epoch_lock' offset changed from 27712 to 33984 (in bits) (by +6272 bits) + + + + type of 'gnutls_key_st gnutls_session_int::key' changed: + + underlying type 'struct gnutls_key_st' at gnutls_int.h:535:1 changed: + + type size changed from 22336 to 22656 (in bits) + + 12 data member changes: + + type of 'struct {gnutls_pk_params_st ecdh_params; gnutls_pk_params_st ecdhx_params; gnutls_pk_params_st dh_params;} gnutls_key_st::kshare' changed: + + type size changed from 11328 to 11520 (in bits) + + 3 data member changes: + + + + 'gnutls_pk_params_st ecdhx_params' offset changed from 3776 to 3840 (in bits) (by +64 bits) + + type of 'gnutls_pk_params_st dh_params' changed: + + underlying type 'struct {bigint_t params[16]; unsigned int params_nr; unsigned int pkflags; unsigned int qbits; gnutls_ecc_curve_t curve; gnutls_group_t dh_group; gnutls_gost_paramset_t gost_params; gnutls_datum_t raw_pub; gnutls_datum_t raw_priv; unsigned int seed_size; uint8_t seed[256]; gnutls_digest_algorithm_t palgo; gnutls_x509_spki_st spki; gnutls_pk_algorithm_t algo;}' at crypto-backend.h:194:1 changed: + + type size changed from 3776 to 3840 (in bits) + + 2 data member changes (3 filtered): + + type of 'gnutls_x509_spki_st spki' changed: + + underlying type 'struct gnutls_x509_spki_st' at crypto-backend.h:175:1 changed: + + type size changed from 128 to 192 (in bits) + + 2 data member insertions: + + 'gnutls_digest_algorithm_t gnutls_x509_spki_st::dsa_dig', at offset 128 (in bits) at crypto-backend.h:208:1 + + 'unsigned int gnutls_x509_spki_st::flags', at offset 160 (in bits) at crypto-backend.h:212:1 + + no data member changes (2 filtered); + + + + 'gnutls_pk_algorithm_t algo' offset changed from 3712 to 3776 (in bits) (by +64 bits) + + and offset changed from 7552 to 7680 (in bits) (by +128 bits) + + + + type of 'union {struct {uint8_t temp_secret[64]; unsigned int temp_secret_size; uint8_t e_ckey[64]; uint8_t hs_ckey[64]; uint8_t hs_skey[64]; uint8_t ap_ckey[64]; uint8_t ap_skey[64]; uint8_t ap_expkey[64]; uint8_t ap_rms[64];} tls13; struct {struct {gnutls_pk_params_st params; bigint_t x; bigint_t y; gnutls_datum_t raw;} ecdh; struct {gnutls_pk_params_st params; bigint_t client_Y;} dh; struct {bigint_t srp_key; bigint_t srp_g; bigint_t srp_p; bigint_t A; bigint_t B; bigint_t u; bigint_t b; bigint_t a; bigint_t x;} srp;} tls12;} gnutls_key_st::proto' changed: + + type size changed from 8448 to 8576 (in bits) + + 1 data member change: + + type of 'struct {struct {gnutls_pk_params_st params; bigint_t x; bigint_t y; gnutls_datum_t raw;} ecdh; struct {gnutls_pk_params_st params; bigint_t client_Y;} dh; struct {bigint_t srp_key; bigint_t srp_g; bigint_t srp_p; bigint_t A; bigint_t B; bigint_t u; bigint_t b; bigint_t a; bigint_t x;} srp;} tls12' changed: + + type size changed from 8448 to 8576 (in bits) + + 3 data member changes: + + type of 'struct {gnutls_pk_params_st params; bigint_t x; bigint_t y; gnutls_datum_t raw;} ecdh' changed: + + type size changed from 4032 to 4096 (in bits) + + 3 data member changes (1 filtered): + + 'bigint_t x' offset changed from 3776 to 3840 (in bits) (by +64 bits) + + 'bigint_t y' offset changed from 3840 to 3904 (in bits) (by +64 bits) + + 'gnutls_datum_t raw' offset changed from 3904 to 3968 (in bits) (by +64 bits) + + + + type of 'struct {gnutls_pk_params_st params; bigint_t client_Y;} dh' changed: + + type size changed from 3840 to 3904 (in bits) + + 2 data member changes: + + + + 'bigint_t client_Y' offset changed from 3776 to 3840 (in bits) (by +64 bits) + + and offset changed from 4032 to 4096 (in bits) (by +64 bits) + + 'struct {bigint_t srp_key; bigint_t srp_g; bigint_t srp_p; bigint_t A; bigint_t B; bigint_t u; bigint_t b; bigint_t a; bigint_t x;} srp' offset changed from 7872 to 8000 (in bits) (by +128 bits) + + + + and offset changed from 11328 to 11520 (in bits) (by +192 bits) + + 'binder_data_st gnutls_key_st::binders[2]' offset changed from 19776 to 20096 (in bits) (by +320 bits) + + 'gnutls_datum_t gnutls_key_st::key' offset changed from 20288 to 20608 (in bits) (by +320 bits) + + 'uint8_t gnutls_key_st::session_ticket_key[64]' offset changed from 20416 to 20736 (in bits) (by +320 bits) + + 'uint8_t gnutls_key_st::previous_ticket_key[64]' offset changed from 20928 to 21248 (in bits) (by +320 bits) + + 'uint8_t gnutls_key_st::initial_stek[64]' offset changed from 21440 to 21760 (in bits) (by +320 bits) + + 'void* gnutls_key_st::auth_info' offset changed from 21952 to 22272 (in bits) (by +320 bits) + + 'gnutls_credentials_type_t gnutls_key_st::auth_info_type' offset changed from 22016 to 22336 (in bits) (by +320 bits) + + 'int gnutls_key_st::auth_info_size' offset changed from 22048 to 22368 (in bits) (by +320 bits) + + 'auth_cred_st* gnutls_key_st::cred' offset changed from 22080 to 22400 (in bits) (by +320 bits) + + 'struct {uint64_t last_result; uint8_t was_rotated; gnutls_stek_rotation_callback_t cb;} gnutls_key_st::totp' offset changed from 22144 to 22464 (in bits) (by +320 bits) + + and offset changed from 30080 to 36352 (in bits) (by +6272 bits) + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/grpc_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/grpc_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..cfab13cd53e3b6b1b666b381f6c162d2a357a11c --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/grpc_all_result.md @@ -0,0 +1,16252 @@ +# Functions changed info + +---------------diffs in grpc_libgrpc_unsecure.so.11.0.0_abidiff.out:---------------- + +ELF SONAME changed + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + +Function symbols changes summary: 522 Removed, 951 Added function symbols not referenced by debug info + +Variable symbols changes summary: 28 Removed, 670 Added variable symbols not referenced by debug info + + + +SONAME changed from 'libgrpc_unsecure.so.7' to 'libgrpc_unsecure.so.11' + + + +522 Removed function symbols not referenced by debug info: + + + + [D] _Z10gpr_getenvPKc + + [D] _Z10gpr_setenvPKcS0_ + + [D] _Z10int64_ttoalPc + + [D] _Z11gpr_leftpadPKccm + + [D] _Z11gpr_memrchrPKvim + + [D] _Z11gpr_stricmpPKcS0_ + + [D] _Z11gpr_strjoinPPKcmPm + + [D] _Z12gpr_unsetenvPKc + + [D] _Z13gpr_mpscq_popP9gpr_mpscq + + [D] _Z14gpr_mpscq_initP9gpr_mpscq + + [D] _Z14gpr_mpscq_pushP9gpr_mpscqP14gpr_mpscq_node + + [D] _Z14gpr_strvec_addP10gpr_strvecPc + + [D] _Z14grpc_op_stringPK7grpc_op + + [D] _Z15gpr_default_logP17gpr_log_func_args + + [D] _Z15gpr_strjoin_sepPPKcmS0_Pm + + [D] _Z15gpr_strvec_initP10gpr_strvec + + [D] _Z16gpr_murmur_hash3PKvmj + + [D] _Z16gpr_string_splitPKcS0_PPPcPm + + [D] _Z16grpc_json_create14grpc_json_type + + [D] _Z17gpr_mpscq_destroyP9gpr_mpscq + + [D] _Z17gpr_reverse_bytesPci + + [D] _Z17grpc_combiner_refP13grpc_combiner + + [D] _Z17grpc_error_do_refP10grpc_error + + [D] _Z17grpc_event_stringP10grpc_event + + [D] _Z17grpc_json_destroyP9grpc_json + + [D] _Z18gpr_join_host_portPPcPKci + + [D] _Z18gpr_strvec_destroyP10gpr_strvec + + [D] _Z18gpr_strvec_flattenP10gpr_strvecPm + + [D] _Z18grpc_closure_schedP12grpc_closureP10grpc_error + + [D] _Z18grpc_connector_refP14grpc_connector + + [D] _Z18http_proxy_enabledPK17grpc_channel_args + + [D] _Z18pollset_set_createv + + [D] _Z19gpr_dump_return_lenPKcmjPm + + [D] _Z19gpr_format_timespec12gpr_timespec + + [D] _Z19gpr_split_host_portPKcPPcS2_ + + [D] _Z19grpc_call_log_batchPKci16gpr_log_severityP9grpc_callPK7grpc_opmPv + + [D] _Z19grpc_combiner_unrefP13grpc_combiner + + [D] _Z19grpc_error_do_unrefP10grpc_error + + [D] _Z19pollset_set_destroyP16grpc_pollset_set + + [D] _Z20gpr_locked_mpscq_popP16gpr_locked_mpscq + + [D] _Z20gpr_parse_bool_valuePKcPb + + [D] _Z20grpc_connector_unrefP14grpc_connector + + [D] _Z20grpc_cq_internal_refP21grpc_completion_queue + + [D] _Z20grpc_json_link_childP9grpc_jsonS0_S0_ + + [D] _Z20grpc_json_reader_runP16grpc_json_reader + + [D] _Z20grpc_mdelem_do_unref11grpc_mdelem + + [D] _Z20grpc_sockaddr_to_uriPK21grpc_resolved_address + + [D] _Z20grpc_stream_ref_initP20grpc_stream_refcountiPFvPvP10grpc_errorES1_ + + [D] _Z21gpr_locked_mpscq_initP16gpr_locked_mpscq + + [D] _Z21gpr_locked_mpscq_pushP16gpr_locked_mpscqP14gpr_mpscq_node + + [D] _Z21gpr_precise_clock_nowP12gpr_timespec + + [D] _Z21gpr_timer_set_enabledi + + [D] _Z21grpc_json_reader_initP16grpc_json_readerP23grpc_json_reader_vtablePv + + [D] _Z21grpc_json_writer_initP16grpc_json_writeriP23grpc_json_writer_vtablePv + + [D] _Z21grpc_tcp_server_startP15grpc_tcp_serverPP12grpc_pollsetmPFvPvP13grpc_endpointS2_P24grpc_tcp_server_acceptorES4_ + + [D] _Z21grpc_udp_server_startP15grpc_udp_serverPP12grpc_pollsetmPv + + [D] _Z22gpr_precise_clock_initv + + [D] _Z22gpr_timers_global_initv + + [D] _Z22grpc_call_internal_refP9grpc_call + + [D] _Z22grpc_chttp2_hptbl_initP17grpc_chttp2_hptbl + + [D] _Z22grpc_chttp2_stream_refP18grpc_chttp2_stream + + [D] _Z22grpc_connector_connectP14grpc_connectorPK20grpc_connect_in_argsP21grpc_connect_out_argsP12grpc_closure + + [D] _Z22grpc_cq_internal_unrefP21grpc_completion_queue + + [D] _Z22grpc_json_create_childP9grpc_jsonS0_PKcS2_14grpc_json_typeb + + [D] _Z22grpc_json_parse_stringPc + + [D] _Z22grpc_proxy_mapper_initPK24grpc_proxy_mapper_vtableP17grpc_proxy_mapper + + [D] _Z23done_published_shutdownPvP18grpc_cq_completion + + [D] _Z23grpc_combiner_schedulerP13grpc_combiner + + [D] _Z23grpc_connector_shutdownP14grpc_connectorP10grpc_error + + [D] _Z23grpc_lb_policy_xds_initv + + [D] _Z23grpc_sockaddr_to_stringPPcPK21grpc_resolved_addressi + + [D] _Z23grpc_stats_data_as_jsonPK15grpc_stats_data + + [D] _Z23pollset_set_add_pollsetP16grpc_pollset_setP12grpc_pollset + + [D] _Z23pollset_set_del_pollsetP16grpc_pollset_setP12grpc_pollset + + [D] _Z24gpr_locked_mpscq_destroyP16gpr_locked_mpscq + + [D] _Z24gpr_locked_mpscq_try_popP16gpr_locked_mpscq + + [D] _Z24grpc_call_internal_unrefP9grpc_call + + [D] _Z24grpc_channel_args_stringPK17grpc_channel_args + + [D] _Z24grpc_chttp2_hptbl_lookupPK17grpc_chttp2_hptblj + + [D] _Z24grpc_chttp2_stream_unrefP18grpc_chttp2_stream + + [D] _Z24grpc_json_dump_to_stringP9grpc_jsoni + + [D] _Z24grpc_server_add_listenerP11grpc_serverPvPFvS0_S1_PP12grpc_pollsetmEPFvS0_S1_P12grpc_closureEl + + [D] _Z24grpc_server_get_pollsetsP11grpc_serverPPP12grpc_pollsetPm + + [D] _Z24grpc_transport_op_stringP17grpc_transport_op + + [D] _Z24xds_grpclb_server_equalsPK18_grpc_lb_v1_ServerS1_ + + [D] _Z25gpr_parse_bytes_to_uint32PKcmPj + + [D] _Z25gpr_parse_nonnegative_intPKc + + [D] _Z25gpr_timers_global_destroyv + + [D] _Z25grpc_grpclb_server_equalsPK18_grpc_lb_v1_ServerS1_ + + [D] _Z25grpc_proxy_mapper_destroyP17grpc_proxy_mapper + + [D] _Z25xds_grpclb_request_createPKc + + [D] _Z25xds_grpclb_request_encodePK30_grpc_lb_v1_LoadBalanceRequest + + [D] _Z26custom_tcp_endpoint_createP18grpc_custom_socketP19grpc_resource_quotaPc + + [D] _Z26grpc_grpclb_request_createPKc + + [D] _Z26grpc_grpclb_request_encodePK30_grpc_lb_v1_LoadBalanceRequest + + [D] _Z26grpc_json_writer_value_rawP16grpc_json_writerPKc + + [D] _Z26grpc_mdelem_on_final_unref24grpc_mdelem_data_storagePvj + + [D] _Z26grpc_proxy_mapper_map_nameP17grpc_proxy_mapperPKcPK17grpc_channel_argsPPcPPS3_ + + [D] _Z26grpc_proxy_mapper_registerbP17grpc_proxy_mapper + + [D] _Z26grpc_tcp_client_prepare_fdPK17grpc_channel_argsPK21grpc_resolved_addressPS2_PP7grpc_fd + + [D] _Z26xds_grpclb_request_destroyP30_grpc_lb_v1_LoadBalanceRequest + + [D] _Z26xds_grpclb_serverlist_copyPK21xds_grpclb_serverlist + + [D] _Z27gpr_mpscq_pop_and_check_endP9gpr_mpscqPb + + [D] _Z27gpr_timers_set_log_filenamePKc + + [D] _Z27grpc_chttp2_server_add_portP11grpc_serverPKcP17grpc_channel_argsPi + + [D] _Z27grpc_connectivity_state_setP31grpc_connectivity_state_tracker23grpc_connectivity_statePKc + + [D] _Z27grpc_grpclb_request_destroyP30_grpc_lb_v1_LoadBalanceRequest + + [D] _Z27grpc_grpclb_serverlist_copyPK22grpc_grpclb_serverlist + + [D] _Z27grpc_json_writer_object_keyP16grpc_json_writerPKc + + [D] _Z27grpc_lb_policy_xds_shutdownv + + [D] _Z27grpc_proxy_mappers_map_namePKcPK17grpc_channel_argsPPcPPS1_ + + [D] _Z27grpc_server_setup_transportP11grpc_serverP14grpc_transportP12grpc_pollsetPK17grpc_channel_argsN9grpc_core13RefCountedPtrINS8_8channelz10SocketNodeEEEP18grpc_resource_user + + [D] _Z27pollset_set_add_pollset_setP16grpc_pollset_setS0_ + + [D] _Z27pollset_set_del_pollset_setP16grpc_pollset_setS0_ + + [D] _Z27xds_grpclb_duration_comparePK25_google_protobuf_DurationS1_ + + [D] _Z28grpc_chttp2_connector_createv + + [D] _Z28grpc_connectivity_state_initP31grpc_connectivity_state_tracker23grpc_connectivity_statePKc + + [D] _Z28grpc_connectivity_state_name23grpc_connectivity_state + + [D] _Z28grpc_grpclb_duration_comparePK25_google_protobuf_DurationS1_ + + [D] _Z28grpc_json_reader_is_completeP16grpc_json_reader + + [D] _Z28grpc_slice_from_moved_bufferSt10unique_ptrIcN9grpc_core13DefaultDeleteIcEEEm + + [D] _Z28grpc_slice_from_moved_stringSt10unique_ptrIcN9grpc_core13DefaultDeleteIcEEE + + [D] _Z28xds_grpclb_serverlist_equalsPK21xds_grpclb_serverlistS1_ + + [D] _Z29grpc_connectivity_state_checkP31grpc_connectivity_state_tracker + + [D] _Z29grpc_grpclb_serverlist_equalsPK22grpc_grpclb_serverlistS1_ + + [D] _Z29grpc_json_writer_value_stringP16grpc_json_writerPKc + + [D] _Z29grpc_proxy_mapper_map_addressP17grpc_proxy_mapperPK21grpc_resolved_addressPK17grpc_channel_argsPPS1_PPS4_ + + [D] _Z29xds_grpclb_destroy_serverlistP21xds_grpclb_serverlist + + [D] _Z29xds_grpclb_duration_to_millisP25_google_protobuf_Duration + + [D] _Z30grpc_grpclb_destroy_serverlistP22grpc_grpclb_serverlist + + [D] _Z30grpc_grpclb_duration_to_millisP25_google_protobuf_Duration + + [D] _Z30grpc_proxy_mappers_map_addressPK21grpc_resolved_addressPK17grpc_channel_argsPPS_PPS2_ + + [D] _Z31grpc_chttp2_add_incoming_goawayP21grpc_chttp2_transportjRK10grpc_slice + + [D] _Z31grpc_combiner_finally_schedulerP13grpc_combiner + + [D] _Z31grpc_connectivity_state_destroyP31grpc_connectivity_state_tracker + + [D] _Z31grpc_json_parse_string_with_lenPcm + + [D] _Z31grpc_json_writer_container_endsP16grpc_json_writer14grpc_json_type + + [D] _Z31grpc_proxy_mapper_registry_initv + + [D] _Z31grpc_register_http_proxy_mapperv + + [D] _Z33grpc_ares_ev_driver_create_lockedPP19grpc_ares_ev_driverP16grpc_pollset_setiP13grpc_combinerP17grpc_ares_request + + [D] _Z33grpc_base64_estimate_encoded_sizemii + + [D] _Z33grpc_chttp2_parsing_lookup_streamP21grpc_chttp2_transportj + + [D] _Z33grpc_json_add_number_string_childP9grpc_jsonS0_PKcl + + [D] _Z33grpc_json_writer_container_beginsP16grpc_json_writer14grpc_json_type + + [D] _Z33xds_grpclb_initial_response_parseRK10grpc_slice + + [D] _Z34grpc_grpclb_initial_response_parseRK10grpc_slice + + [D] _Z35grpc_json_writer_value_raw_with_lenP16grpc_json_writerPKcm + + [D] _Z35grpc_proxy_mapper_registry_shutdownv + + [D] _Z35grpc_server_populate_listen_socketsP11grpc_serverPN9grpc_core13InlinedVectorIlLm10EEE + + [D] _Z35grpc_server_populate_server_socketsP11grpc_serverPN9grpc_core13InlinedVectorIPNS1_8channelz10SocketNodeELm10EEEl + + [D] _Z35xds_grpclb_initial_response_destroyP38_grpc_lb_v1_InitialLoadBalanceResponse + + [D] _Z36gpr_global_config_get_grpc_verbosityv + + [D] _Z36gpr_global_config_set_grpc_verbosityPKc + + [D] _Z36grpc_connectivity_state_has_watchersP31grpc_connectivity_state_tracker + + [D] _Z36grpc_grpclb_initial_response_destroyP38_grpc_lb_v1_InitialLoadBalanceResponse + + [D] _Z36xds_grpclb_response_parse_serverlistRK10grpc_slice + + [D] _Z37grpc_grpclb_response_parse_serverlistRK10grpc_slice + + [D] _Z37grpc_sockaddr_to_uri_unix_if_possiblePK21grpc_resolved_address + + [D] _Z37grpc_transport_stream_op_batch_stringP30grpc_transport_stream_op_batch + + [D] _Z38grpc_grpclb_load_report_request_createPN9grpc_core17GrpcLbClientStatsE + + [D] _Z39grpc_cares_wrapper_address_sorting_sortPN9grpc_core13InlinedVectorINS_13ServerAddressELm1EEE + + [D] _Z39grpc_tcp_client_create_from_prepared_fdP16grpc_pollset_setP12grpc_closureP7grpc_fdPK17grpc_channel_argsPK21grpc_resolved_addresslPP13grpc_endpoint + + [D] _Z40grpc_deframe_unprocessed_incoming_framesP23grpc_chttp2_data_parserP18grpc_chttp2_streamP17grpc_slice_bufferP10grpc_slicePSt10unique_ptrIN9grpc_core10ByteStreamENS8_16OrphanableDeleteIS9_EEE + + [D] _Z41grpc_lb_policy_xds_modify_lb_channel_argsP17grpc_channel_args + + [D] _Z43grpc_channel_args_get_compression_algorithmPK17grpc_channel_args + + [D] _Z43grpc_channel_args_set_compression_algorithmP17grpc_channel_args26grpc_compression_algorithm + + [D] _Z44grpc_channel_get_reffed_status_elem_slowpathP12grpc_channeli + + [D] _Z44grpc_lb_policy_grpclb_modify_lb_channel_argsRKN9grpc_core13InlinedVectorINS_13ServerAddressELm1EEEP17grpc_channel_args + + [D] _Z44xds_grpclb_load_report_request_create_lockedPN9grpc_core16XdsLbClientStatsE + + [D] _Z46gpr_global_config_get_grpc_enable_fork_supportv + + [D] _Z46gpr_global_config_set_grpc_enable_fork_supportb + + [D] _Z46grpc_connectivity_state_notify_on_state_changeP31grpc_connectivity_state_trackerP23grpc_connectivity_stateP12grpc_closure + + [D] _Z74grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_lockedP17grpc_ares_requestPKcS2_S2_P16grpc_pollset_setbiP13grpc_combiner + + [D] _Z8gpr_dumpPKcmj + + [D] _Z8gpr_ltoalPc + + [D] _Z8tcp_sendiPK6msghdr + + [D] _ZN15GrpcUdpListener14StartListeningEPP12grpc_pollsetmP21GrpcUdpHandlerFactory + + [D] _ZN9grpc_core10HandshakerD0Ev + + [D] _ZN9grpc_core10HandshakerD1Ev + + [D] _ZN9grpc_core10HandshakerD2Ev, aliases _ZN9grpc_core10HandshakerD1Ev + + [D] _ZN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcher15OnHealthChangedEPvP10grpc_error + + [D] _ZN9grpc_core10Subchannel16HealthWatcherMap16AddWatcherLockedEPS0_23grpc_connectivity_stateSt10unique_ptrIcNS_13DefaultDeleteIcEEES4_INS_19SubchannelInterface24ConnectivityStateWatcherENS5_IS9_EEE + + [D] _ZN9grpc_core10Subchannel16HealthWatcherMap19RemoveWatcherLockedEPKcPNS_19SubchannelInterface24ConnectivityStateWatcherE + + [D] _ZN9grpc_core10Subchannel18GetChildSocketUuidEv + + [D] _ZN9grpc_core10Subchannel22WatchConnectivityStateE23grpc_connectivity_stateSt10unique_ptrIcNS_13DefaultDeleteIcEEES2_INS_19SubchannelInterface24ConnectivityStateWatcherENS3_IS7_EEE + + [D] _ZN9grpc_core10Subchannel28CancelConnectivityStateWatchEPKcPNS_19SubchannelInterface24ConnectivityStateWatcherE + + [D] _ZN9grpc_core10Subchannel28ConnectivityStateWatcherList16AddWatcherLockedESt10unique_ptrINS_19SubchannelInterface24ConnectivityStateWatcherENS_13DefaultDeleteIS4_EEE + + [D] _ZN9grpc_core10Subchannel28ConnectivityStateWatcherList19RemoveWatcherLockedEPNS_19SubchannelInterface24ConnectivityStateWatcherE + + [D] _ZN9grpc_core10Subchannel31ConnectedSubchannelStateWatcher21OnConnectivityChangedEPvP10grpc_error + + [D] _ZN9grpc_core10Subchannel3RefEv + + [D] _ZN9grpc_core10Subchannel5UnrefEv + + [D] _ZN9grpc_core10Subchannel6CreateEP14grpc_connectorPK17grpc_channel_args + + [D] _ZN9grpc_core10Subchannel7WeakRefEv + + [D] _ZN9grpc_core10Subchannel9RefMutateEli + + [D] _ZN9grpc_core10Subchannel9WeakUnrefEv + + [D] _ZN9grpc_core10SubchannelC1EPNS_13SubchannelKeyEP14grpc_connectorPK17grpc_channel_args, aliases _ZN9grpc_core10SubchannelC2EPNS_13SubchannelKeyEP14grpc_connectorPK17grpc_channel_args + + [D] _ZN9grpc_core10SubchannelC2EPNS_13SubchannelKeyEP14grpc_connectorPK17grpc_channel_args + + [D] _ZN9grpc_core12CallCombiner4StopEPKc + + [D] _ZN9grpc_core12CallCombiner5StartEP12grpc_closureP10grpc_errorPKc + + [D] _ZN9grpc_core12FakeResolver24ReturnReresolutionResultEPvP10grpc_error + + [D] _ZN9grpc_core12GrpcPolledFdD0Ev + + [D] _ZN9grpc_core12GrpcPolledFdD1Ev + + [D] _ZN9grpc_core12GrpcPolledFdD2Ev, aliases _ZN9grpc_core12GrpcPolledFdD1Ev + + [D] _ZN9grpc_core13ServiceConfig12ParsedConfigD0Ev + + [D] _ZN9grpc_core13ServiceConfig12ParsedConfigD1Ev + + [D] _ZN9grpc_core13ServiceConfig12ParsedConfigD2Ev, aliases _ZN9grpc_core13ServiceConfig12ParsedConfigD1Ev + + [D] _ZN9grpc_core13ServiceConfig14RegisterParserESt10unique_ptrINS0_6ParserENS_13DefaultDeleteIS2_EEE + + [D] _ZN9grpc_core13ServiceConfig17ParseGlobalParamsEPK9grpc_json + + [D] _ZN9grpc_core13ServiceConfig19ParseJsonMethodNameEP9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core13ServiceConfig20ParsePerMethodParamsEPK9grpc_json + + [D] _ZN9grpc_core13ServiceConfig24CountNamesInMethodConfigEP9grpc_json + + [D] _ZN9grpc_core13ServiceConfig27GetMethodParsedConfigVectorERK10grpc_slice + + [D] _ZN9grpc_core13ServiceConfig47ParseJsonMethodConfigToServiceConfigVectorTableEPK9grpc_jsonPNS_14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS0_12ParsedConfigENS_13DefaultDeleteIS7_EEELm4EEEE5EntryEPm + + [D] _ZN9grpc_core13ServiceConfig4InitEv + + [D] _ZN9grpc_core13ServiceConfig6CreateEPKcPP10grpc_error + + [D] _ZN9grpc_core13ServiceConfig6Parser17ParseGlobalParamsEPK9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core13ServiceConfig6Parser20ParsePerMethodParamsEPK9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core13ServiceConfig6ParserD0Ev + + [D] _ZN9grpc_core13ServiceConfig6ParserD1Ev, aliases _ZN9grpc_core13ServiceConfig6ParserD2Ev + + [D] _ZN9grpc_core13ServiceConfig6ParserD2Ev + + [D] _ZN9grpc_core13ServiceConfig8ShutdownEv + + [D] _ZN9grpc_core13ServiceConfigC1ESt10unique_ptrIcNS_13DefaultDeleteIcEEES4_P9grpc_jsonPP10grpc_error, aliases _ZN9grpc_core13ServiceConfigC2ESt10unique_ptrIcNS_13DefaultDeleteIcEEES4_P9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core13ServiceConfigC2ESt10unique_ptrIcNS_13DefaultDeleteIcEEES4_P9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEEC1EmPNSB_5EntryEPFiRKSA_SF_E + + [D] _ZN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEEC2EmPNSB_5EntryEPFiRKSA_SF_E, aliases _ZN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEEC1EmPNSB_5EntryEPFiRKSA_SF_E + + [D] _ZN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEED0Ev + + [D] _ZN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEED1Ev + + [D] _ZN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEED2Ev, aliases _ZN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEED1Ev + + [D] _ZN9grpc_core15ByteStreamCacheC1ESt10unique_ptrINS_10ByteStreamENS_16OrphanableDeleteIS2_EEE + + [D] _ZN9grpc_core15ByteStreamCacheC2ESt10unique_ptrINS_10ByteStreamENS_16OrphanableDeleteIS2_EEE, aliases _ZN9grpc_core15ByteStreamCacheC1ESt10unique_ptrINS_10ByteStreamENS_16OrphanableDeleteIS2_EEE + + [D] _ZN9grpc_core15GlobalConfigEnv5UnsetEv + + [D] _ZN9grpc_core15GlobalConfigEnv7GetNameEv + + [D] _ZN9grpc_core15GlobalConfigEnv8GetValueEv + + [D] _ZN9grpc_core15GlobalConfigEnv8SetValueEPKc + + [D] _ZN9grpc_core15ResolverFactoryD0Ev + + [D] _ZN9grpc_core15ResolverFactoryD1Ev, aliases _ZN9grpc_core15ResolverFactoryD2Ev + + [D] _ZN9grpc_core15ResolverFactoryD2Ev + + [D] _ZN9grpc_core16ResolverRegistry14CreateResolverEPKcPK17grpc_channel_argsP16grpc_pollset_setP13grpc_combinerSt10unique_ptrINS_8Resolver13ResultHandlerENS_13DefaultDeleteISC_EEE + + [D] _ZN9grpc_core16ResolverRegistry7Builder23RegisterResolverFactoryESt10unique_ptrINS_15ResolverFactoryENS_13DefaultDeleteIS3_EEE + + [D] _ZN9grpc_core16XdsLbClientStats14AddCallStartedEv + + [D] _ZN9grpc_core16XdsLbClientStats15AddCallFinishedEbb + + [D] _ZN9grpc_core16XdsLbClientStats20AddCallDroppedLockedEPc + + [D] _ZN9grpc_core16XdsLbClientStats9GetLockedEPlS1_S1_S1_PSt10unique_ptrINS_13InlinedVectorINS0_14DropTokenCountELm10EEENS_13DefaultDeleteIS5_EEE + + [D] _ZN9grpc_core16XdsLbClientStatsD0Ev + + [D] _ZN9grpc_core16XdsLbClientStatsD1Ev + + [D] _ZN9grpc_core16XdsLbClientStatsD2Ev, aliases _ZN9grpc_core16XdsLbClientStatsD1Ev + + [D] _ZN9grpc_core17GrpcLbClientStats3GetEPlS1_S1_S1_PSt10unique_ptrINS_13InlinedVectorINS0_14DropTokenCountELm10EEENS_13DefaultDeleteIS5_EEE + + [D] _ZN9grpc_core17GrpcLbClientStats7DestroyEPv + + [D] _ZN9grpc_core17HandshakerFactoryD0Ev + + [D] _ZN9grpc_core17HandshakerFactoryD1Ev, aliases _ZN9grpc_core17HandshakerFactoryD2Ev + + [D] _ZN9grpc_core17HandshakerFactoryD2Ev + + [D] _ZN9grpc_core17HealthCheckClient15SetHealthStatusE23grpc_connectivity_stateP10grpc_error + + [D] _ZN9grpc_core17HealthCheckClient15StartRetryTimerEv + + [D] _ZN9grpc_core17HealthCheckClient20NotifyOnHealthChangeEP23grpc_connectivity_stateP12grpc_closure + + [D] _ZN9grpc_core17HealthCheckClient21SetHealthStatusLockedE23grpc_connectivity_stateP10grpc_error + + [D] _ZN9grpc_core17HealthCheckClient9CallState14CallEndedRetryEPvP10grpc_error + + [D] _ZN9grpc_core17HealthCheckClient9CallState9CallEndedEb + + [D] _ZN9grpc_core17HealthCheckClientC1EPKcNS_13RefCountedPtrINS_19ConnectedSubchannelEEEP16grpc_pollset_setNS3_INS_8channelz14SubchannelNodeEEE + + [D] _ZN9grpc_core17HealthCheckClientC2EPKcNS_13RefCountedPtrINS_19ConnectedSubchannelEEEP16grpc_pollset_setNS3_INS_8channelz14SubchannelNodeEEE, aliases _ZN9grpc_core17HealthCheckClientC1EPKcNS_13RefCountedPtrINS_19ConnectedSubchannelEEEP16grpc_pollset_setNS3_INS_8channelz14SubchannelNodeEEE + + [D] _ZN9grpc_core17MessageSizeParser20ParsePerMethodParamsEPK9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core18HandshakerRegistry25RegisterHandshakerFactoryEbNS_14HandshakerTypeESt10unique_ptrINS_17HandshakerFactoryENS_13DefaultDeleteIS3_EEE + + [D] _ZN9grpc_core19ConnectedSubchannel10CreateCallERKNS0_8CallArgsEPP10grpc_error + + [D] _ZN9grpc_core19ConnectedSubchannel19NotifyOnStateChangeEP16grpc_pollset_setP23grpc_connectivity_stateP12grpc_closure + + [D] _ZN9grpc_core19ConnectedSubchannelC1EP18grpc_channel_stackPK17grpc_channel_argsNS_13RefCountedPtrINS_8channelz14SubchannelNodeEEEl + + [D] _ZN9grpc_core19ConnectedSubchannelC2EP18grpc_channel_stackPK17grpc_channel_argsNS_13RefCountedPtrINS_8channelz14SubchannelNodeEEEl, aliases _ZN9grpc_core19ConnectedSubchannelC1EP18grpc_channel_stackPK17grpc_channel_argsNS_13RefCountedPtrINS_8channelz14SubchannelNodeEEEl + + [D] _ZN9grpc_core19GlobalConfigEnvBool3GetEv + + [D] _ZN9grpc_core19GlobalConfigEnvBool3SetEb + + [D] _ZN9grpc_core19GrpcPolledFdFactoryD0Ev + + [D] _ZN9grpc_core19GrpcPolledFdFactoryD1Ev, aliases _ZN9grpc_core19GrpcPolledFdFactoryD2Ev + + [D] _ZN9grpc_core19GrpcPolledFdFactoryD2Ev + + [D] _ZN9grpc_core19LoadBalancingPolicy11QueuePicker12CallExitIdleEPvP10grpc_error + + [D] _ZN9grpc_core19LoadBalancingPolicy12UpdateLockedENS0_10UpdateArgsE + + [D] _ZN9grpc_core19LoadBalancingPolicy14ShutdownLockedEv + + [D] _ZN9grpc_core19LoadBalancingPolicy18ResetBackoffLockedEv + + [D] _ZN9grpc_core19LoadBalancingPolicy20ChannelControlHelper13AddTraceEventENS1_13TraceSeverityEPKc + + [D] _ZN9grpc_core19LoadBalancingPolicy20ChannelControlHelperD0Ev + + [D] _ZN9grpc_core19LoadBalancingPolicy20ChannelControlHelperD1Ev + + [D] _ZN9grpc_core19LoadBalancingPolicy20ChannelControlHelperD2Ev, aliases _ZN9grpc_core19LoadBalancingPolicy20ChannelControlHelperD1Ev + + [D] _ZN9grpc_core19LoadBalancingPolicy22ShutdownAndUnrefLockedEPvP10grpc_error + + [D] _ZN9grpc_core19LoadBalancingPolicy6ConfigD0Ev + + [D] _ZN9grpc_core19LoadBalancingPolicy6ConfigD1Ev, aliases _ZN9grpc_core19LoadBalancingPolicy6ConfigD2Ev + + [D] _ZN9grpc_core19LoadBalancingPolicy6ConfigD2Ev + + [D] _ZN9grpc_core19SubchannelInterface24ConnectivityStateWatcherD0Ev + + [D] _ZN9grpc_core19SubchannelInterface24ConnectivityStateWatcherD1Ev, aliases _ZN9grpc_core19SubchannelInterface24ConnectivityStateWatcherD2Ev + + [D] _ZN9grpc_core19SubchannelInterface24ConnectivityStateWatcherD2Ev + + [D] _ZN9grpc_core19SubchannelInterfaceD0Ev + + [D] _ZN9grpc_core19SubchannelInterfaceD1Ev, aliases _ZN9grpc_core19SubchannelInterfaceD2Ev + + [D] _ZN9grpc_core19SubchannelInterfaceD2Ev + + [D] _ZN9grpc_core20GlobalConfigEnvInt323GetEv + + [D] _ZN9grpc_core20GlobalConfigEnvInt323SetEi + + [D] _ZN9grpc_core21GlobalConfigEnvString3GetEv + + [D] _ZN9grpc_core21GlobalConfigEnvString3SetEPKc + + [D] _ZN9grpc_core22NewGrpcPolledFdFactoryEP13grpc_combiner + + [D] _ZN9grpc_core23SubchannelPoolInterfaceD0Ev + + [D] _ZN9grpc_core23SubchannelPoolInterfaceD1Ev + + [D] _ZN9grpc_core23SubchannelPoolInterfaceD2Ev, aliases _ZN9grpc_core23SubchannelPoolInterfaceD1Ev + + [D] _ZN9grpc_core24GrpcPolledFdFactoryPosix21NewGrpcPolledFdLockedEiP16grpc_pollset_setP13grpc_combiner + + [D] _ZN9grpc_core26LoadBalancingPolicyFactoryD0Ev + + [D] _ZN9grpc_core26LoadBalancingPolicyFactoryD1Ev, aliases _ZN9grpc_core26LoadBalancingPolicyFactoryD2Ev + + [D] _ZN9grpc_core26LoadBalancingPolicyFactoryD2Ev + + [D] _ZN9grpc_core27LoadBalancingPolicyRegistry24ParseLoadBalancingConfigEPK9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core27LoadBalancingPolicyRegistry7Builder34RegisterLoadBalancingPolicyFactoryESt10unique_ptrINS_26LoadBalancingPolicyFactoryENS_13DefaultDeleteIS3_EEE + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicy20CreateLbPolicyLockedEPKcRK17grpc_channel_argsPNS_13InlinedVectorIPcLm3EEE + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicy20StartResolvingLockedEv + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicy22ResolvingControlHelper11UpdateStateE23grpc_connectivity_stateSt10unique_ptrINS_19LoadBalancingPolicy16SubchannelPickerENS_13DefaultDeleteIS5_EEE + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicy22ResolvingControlHelper13CreateChannelEPKcRK17grpc_channel_args + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicy28CreateOrUpdateLbPolicyLockedEPKcNS_13RefCountedPtrINS_19LoadBalancingPolicy6ConfigEEENS_8Resolver6ResultEPNS_13InlinedVectorIPcLm3EEE + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicy44MaybeAddTraceMessagesForAddressChangesLockedEbPNS_13InlinedVectorIPcLm3EEE + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicy4InitERK17grpc_channel_args + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicyC1ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_13DefaultDeleteIcEEEPFbPvRKNS_8Resolver6ResultEPPKcPNS_13RefCountedPtrINS1_6ConfigEEEPP10grpc_errorES9_SN_ + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicyC1ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_13DefaultDeleteIcEEES8_NS_13RefCountedPtrINS1_6ConfigEEEPP10grpc_error, aliases _ZN9grpc_core28ResolvingLoadBalancingPolicyC2ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_13DefaultDeleteIcEEES8_NS_13RefCountedPtrINS1_6ConfigEEEPP10grpc_error + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicyC2ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_13DefaultDeleteIcEEEPFbPvRKNS_8Resolver6ResultEPPKcPNS_13RefCountedPtrINS1_6ConfigEEEPP10grpc_errorES9_SN_, aliases _ZN9grpc_core28ResolvingLoadBalancingPolicyC1ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_13DefaultDeleteIcEEEPFbPvRKNS_8Resolver6ResultEPPKcPNS_13RefCountedPtrINS1_6ConfigEEEPP10grpc_errorES9_SN_ + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicyC2ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_13DefaultDeleteIcEEES8_NS_13RefCountedPtrINS1_6ConfigEEEPP10grpc_error + + [D] _ZN9grpc_core29FakeResolverResponseGenerator16SetFailureLockedEPvP10grpc_error + + [D] _ZN9grpc_core29FakeResolverResponseGenerator17SetResponseLockedEPvP10grpc_error + + [D] _ZN9grpc_core29FakeResolverResponseGenerator29SetReresolutionResponseLockedEPvP10grpc_error + + [D] _ZN9grpc_core31SetGlobalConfigEnvErrorFunctionEPFvPKcE + + [D] _ZN9grpc_core34Chttp2InsecureClientChannelFactory13CreateChannelEPKcPK17grpc_channel_args + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE10RotateLeftEPNSB_5EntryE + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE11RotateRightEPNSB_5EntryE + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE15InsertRecursiveEPNSB_5EntryEOSt4pairIS2_S9_E + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE15RemoveRecursiveEPNSB_5EntryERKS2_ + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE26RebalanceTreeAfterDeletionEPNSB_5EntryE + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE27RebalanceTreeAfterInsertionEPNSB_5EntryERKS2_ + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE4findERKS2_ + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE5eraseENSB_8iteratorE + + [D] _ZN9grpc_core3MapIPNS_10SubchannelEiSt4lessIS2_EE10RotateLeftEPNS5_5EntryE + + [D] _ZN9grpc_core3MapIPNS_10SubchannelEiSt4lessIS2_EE11RotateRightEPNS5_5EntryE + + [D] _ZN9grpc_core3MapIPNS_10SubchannelEiSt4lessIS2_EE15InsertRecursiveEPNS5_5EntryEOSt4pairIS2_iE + + [D] _ZN9grpc_core3MapIPNS_10SubchannelEiSt4lessIS2_EE15RemoveRecursiveEPNS5_5EntryERKS2_ + + [D] _ZN9grpc_core3MapIPNS_10SubchannelEiSt4lessIS2_EE26RebalanceTreeAfterDeletionEPNS5_5EntryE + + [D] _ZN9grpc_core3MapIPNS_10SubchannelEiSt4lessIS2_EE27RebalanceTreeAfterInsertionEPNS5_5EntryERKS2_ + + [D] _ZN9grpc_core3MapIPNS_10SubchannelEiSt4lessIS2_EE5eraseENS5_8iteratorE + + [D] _ZN9grpc_core3MapIPNS_19SubchannelInterface24ConnectivityStateWatcherESt10unique_ptrIS2_NS_13DefaultDeleteIS2_EEESt4lessIS3_EE10RotateLeftEPNSA_5EntryE + + [D] _ZN9grpc_core3MapIPNS_19SubchannelInterface24ConnectivityStateWatcherESt10unique_ptrIS2_NS_13DefaultDeleteIS2_EEESt4lessIS3_EE11RotateRightEPNSA_5EntryE + + [D] _ZN9grpc_core3MapIPNS_19SubchannelInterface24ConnectivityStateWatcherESt10unique_ptrIS2_NS_13DefaultDeleteIS2_EEESt4lessIS3_EE15InsertRecursiveEPNSA_5EntryEOSt4pairIS3_S7_E + + [D] _ZN9grpc_core3MapIPNS_19SubchannelInterface24ConnectivityStateWatcherESt10unique_ptrIS2_NS_13DefaultDeleteIS2_EEESt4lessIS3_EE15RemoveRecursiveEPNSA_5EntryERKS3_ + + [D] _ZN9grpc_core3MapIPNS_19SubchannelInterface24ConnectivityStateWatcherESt10unique_ptrIS2_NS_13DefaultDeleteIS2_EEESt4lessIS3_EE26RebalanceTreeAfterDeletionEPNSA_5EntryE + + [D] _ZN9grpc_core3MapIPNS_19SubchannelInterface24ConnectivityStateWatcherESt10unique_ptrIS2_NS_13DefaultDeleteIS2_EEESt4lessIS3_EE27RebalanceTreeAfterInsertionEPNSA_5EntryERKS3_ + + [D] _ZN9grpc_core3MapIPNS_19SubchannelInterface24ConnectivityStateWatcherESt10unique_ptrIS2_NS_13DefaultDeleteIS2_EEESt4lessIS3_EE5eraseENSA_8iteratorE + + [D] _ZN9grpc_core3MapIlPNS_8channelz8BaseNodeESt4lessIlEE10RotateLeftEPNS6_5EntryE + + [D] _ZN9grpc_core3MapIlPNS_8channelz8BaseNodeESt4lessIlEE11RotateRightEPNS6_5EntryE + + [D] _ZN9grpc_core3MapIlPNS_8channelz8BaseNodeESt4lessIlEE15InsertRecursiveEPNS6_5EntryEOSt4pairIlS3_E + + [D] _ZN9grpc_core3MapIlPNS_8channelz8BaseNodeESt4lessIlEE15RemoveRecursiveEPNS6_5EntryERKl + + [D] _ZN9grpc_core3MapIlPNS_8channelz8BaseNodeESt4lessIlEE26RebalanceTreeAfterDeletionEPNS6_5EntryE + + [D] _ZN9grpc_core3MapIlPNS_8channelz8BaseNodeESt4lessIlEE27RebalanceTreeAfterInsertionEPNS6_5EntryERKl + + [D] _ZN9grpc_core3MapIlPNS_8channelz8BaseNodeESt4lessIlEE5eraseENS6_8iteratorE + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE10RotateLeftEPNS3_5EntryE + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE11RotateRightEPNS3_5EntryE + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE15InsertRecursiveEPNS3_5EntryEOSt4pairIlbE + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE15RemoveRecursiveEPNS3_5EntryERKl + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE26RebalanceTreeAfterDeletionEPNS3_5EntryE + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE27RebalanceTreeAfterInsertionEPNS3_5EntryERKl + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE5eraseENS3_8iteratorE + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE5eraseERKl + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE7emplaceIJSt4pairIlbEEEES5_INS3_8iteratorEbEDpOT_ + + [D] _ZN9grpc_core4Fork10GlobalInitEv + + [D] _ZN9grpc_core4Fork12AllowExecCtxEv + + [D] _ZN9grpc_core4Fork12AwaitThreadsEv + + [D] _ZN9grpc_core4Fork12BlockExecCtxEv + + [D] _ZN9grpc_core4Fork14DecThreadCountEv + + [D] _ZN9grpc_core4Fork14GlobalShutdownEv + + [D] _ZN9grpc_core4Fork14IncThreadCountEv + + [D] _ZN9grpc_core4Fork15DecExecCtxCountEv + + [D] _ZN9grpc_core4Fork15IncExecCtxCountEv + + [D] _ZN9grpc_core4Fork30GetResetChildPollingEngineFuncEv + + [D] _ZN9grpc_core4Fork30SetResetChildPollingEngineFuncEPFvvE + + [D] _ZN9grpc_core4Fork6EnableEb + + [D] _ZN9grpc_core4Fork7EnabledEv + + [D] _ZN9grpc_core5Arena15CreateWithAllocEmm + + [D] _ZN9grpc_core5Arena6CreateEm + + [D] _ZN9grpc_core5Arena7DestroyEv + + [D] _ZN9grpc_core5Arena9AllocZoneEm + + [D] _ZN9grpc_core5ArenaD1Ev + + [D] _ZN9grpc_core5ArenaD2Ev, aliases _ZN9grpc_core5ArenaD1Ev + + [D] _ZN9grpc_core6ThreadC1EPKcPFvPvES3_PbRKNS0_7OptionsE, aliases _ZN9grpc_core6ThreadC2EPKcPFvPvES3_PbRKNS0_7OptionsE + + [D] _ZN9grpc_core6ThreadC2EPKcPFvPvES3_PbRKNS0_7OptionsE + + [D] _ZN9grpc_core8Executor9SchedulerENS_12ExecutorTypeENS_15ExecutorJobTypeE + + [D] _ZN9grpc_core8Executor9SchedulerENS_15ExecutorJobTypeE + + [D] _ZN9grpc_core8Resolver11StartLockedEv + + [D] _ZN9grpc_core8Resolver13ResultHandlerD0Ev + + [D] _ZN9grpc_core8Resolver13ResultHandlerD1Ev + + [D] _ZN9grpc_core8Resolver13ResultHandlerD2Ev, aliases _ZN9grpc_core8Resolver13ResultHandlerD1Ev + + [D] _ZN9grpc_core8Resolver14ShutdownLockedEv + + [D] _ZN9grpc_core8Resolver22ShutdownAndUnrefLockedEPvP10grpc_error + + [D] _ZN9grpc_core8ResolverC1EP13grpc_combinerSt10unique_ptrINS0_13ResultHandlerENS_13DefaultDeleteIS4_EEE + + [D] _ZN9grpc_core8ResolverC2EP13grpc_combinerSt10unique_ptrINS0_13ResultHandlerENS_13DefaultDeleteIS4_EEE, aliases _ZN9grpc_core8ResolverC1EP13grpc_combinerSt10unique_ptrINS0_13ResultHandlerENS_13DefaultDeleteIS4_EEE + + [D] _ZN9grpc_core8channelz10ServerNode19RenderServerSocketsEll + + [D] _ZN9grpc_core8channelz10SocketNodeC1ESt10unique_ptrIcNS_13DefaultDeleteIcEEES5_ + + [D] _ZN9grpc_core8channelz10SocketNodeC2ESt10unique_ptrIcNS_13DefaultDeleteIcEEES5_, aliases _ZN9grpc_core8channelz10SocketNodeC1ESt10unique_ptrIcNS_13DefaultDeleteIcEEES5_ + + [D] _ZN9grpc_core8channelz11ChannelNode17PopulateChildRefsEP9grpc_json + + [D] _ZN9grpc_core8channelz11ChannelNodeC1ESt10unique_ptrIcNS_13DefaultDeleteIcEEEml, aliases _ZN9grpc_core8channelz11ChannelNodeC2ESt10unique_ptrIcNS_13DefaultDeleteIcEEEml + + [D] _ZN9grpc_core8channelz11ChannelNodeC2ESt10unique_ptrIcNS_13DefaultDeleteIcEEEml + + [D] _ZN9grpc_core8channelz14SubchannelNode25PopulateConnectivityStateEP9grpc_json + + [D] _ZN9grpc_core8channelz14SubchannelNodeC1EPNS_10SubchannelEm + + [D] _ZN9grpc_core8channelz14SubchannelNodeC2EPNS_10SubchannelEm, aliases _ZN9grpc_core8channelz14SubchannelNodeC1EPNS_10SubchannelEm + + [D] _ZN9grpc_core8channelz16ChannelzRegistry18InternalGetServersEl + + [D] _ZN9grpc_core8channelz16ChannelzRegistry22InternalGetTopChannelsEl + + [D] _ZN9grpc_core8channelz16ListenSocketNodeC1ESt10unique_ptrIcNS_13DefaultDeleteIcEEE + + [D] _ZN9grpc_core8channelz16ListenSocketNodeC2ESt10unique_ptrIcNS_13DefaultDeleteIcEEE, aliases _ZN9grpc_core8channelz16ListenSocketNodeC1ESt10unique_ptrIcNS_13DefaultDeleteIcEEE + + [D] _ZN9grpc_core8channelz18CallCountingHelper18PopulateCallCountsEP9grpc_json + + [D] _ZN9grpc_core8channelz18CallCountingHelperD1Ev + + [D] _ZN9grpc_core8channelz18CallCountingHelperD2Ev, aliases _ZN9grpc_core8channelz18CallCountingHelperD1Ev + + [D] _ZN9grpc_core8channelz8BaseNode10RenderJsonEv + + [D] _ZN9grpc_core8channelz8BaseNode16RenderJsonStringEv + + [D] _ZN9grpc_core8channelz8BaseNodeC1ENS1_10EntityTypeE + + [D] _ZN9grpc_core8channelz8BaseNodeC2ENS1_10EntityTypeE, aliases _ZN9grpc_core8channelz8BaseNodeC1ENS1_10EntityTypeE + + [D] _ZN9grpc_core8internal24ThreadInternalsInterfaceD0Ev + + [D] _ZN9grpc_core8internal24ThreadInternalsInterfaceD1Ev, aliases _ZN9grpc_core8internal24ThreadInternalsInterfaceD2Ev + + [D] _ZN9grpc_core8internal24ThreadInternalsInterfaceD2Ev + + [D] _ZN9grpc_core8internal32ClientChannelServiceConfigParser17ParseGlobalParamsEPK9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core8internal32ClientChannelServiceConfigParser20ParsePerMethodParamsEPK9grpc_jsonPP10grpc_error + + [D] _ZNK9grpc_core13ServerAddress10IsBalancerEv + + [D] _ZNK9grpc_core13ServerAddresseqERKS0_ + + [D] _ZNK9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEE3GetERK10grpc_slice + + [D] _ZNK9grpc_core19ConnectedSubchannel4argsEv + + [D] _ZNK9grpc_core19LoadBalancingPolicy4nameEv + + [D] _ZNK9grpc_core28ResolvingLoadBalancingPolicy35ConcatenateAndAddChannelTraceLockedEPNS_13InlinedVectorIPcLm3EEE + + [D] _ZNK9grpc_core8channelz12ChannelTrace10TraceEvent16RenderTraceEventEP9grpc_json + + [D] _ZNSt3_V28__rotateIPSt10unique_ptrIN9grpc_core17HandshakerFactoryENS2_13DefaultDeleteIS3_EEEEET_S8_S8_S8_St26random_access_iterator_tag + + [D] address_sorting_abstract_get_family + + [D] address_sorting_create_source_addr_factory_for_current_platform + + [D] address_sorting_get_source_addr_for_testing + + [D] address_sorting_init + + [D] address_sorting_override_source_addr_factory_for_testing + + [D] address_sorting_rfc_6724_sort + + [D] address_sorting_shutdown + + [D] gpr_asprintf + + [D] gpr_atm_no_barrier_clamped_add + + [D] gpr_convert_clock_type + + [D] gpr_cpu_current_cpu + + [D] gpr_cpu_num_cores + + [D] gpr_cv_broadcast + + [D] gpr_cv_destroy + + [D] gpr_cv_init + + [D] gpr_cv_signal + + [D] gpr_cv_wait + + [D] gpr_event_get + + [D] gpr_event_init + + [D] gpr_event_set + + [D] gpr_event_wait + + [D] gpr_free + + [D] gpr_free_aligned + + [D] gpr_get_allocation_functions + + [D] gpr_inf_future + + [D] gpr_inf_past + + [D] gpr_log + + [D] gpr_log_message + + [D] gpr_log_severity_string + + [D] gpr_log_verbosity_init + + [D] gpr_malloc + + [D] gpr_malloc_aligned + + [D] gpr_mu_destroy + + [D] gpr_mu_init + + [D] gpr_mu_lock + + [D] gpr_mu_trylock + + [D] gpr_mu_unlock + + [D] gpr_now + + [D] gpr_once_init + + [D] gpr_realloc + + [D] gpr_ref + + [D] gpr_ref_init + + [D] gpr_ref_is_unique + + [D] gpr_ref_non_zero + + [D] gpr_refn + + [D] gpr_set_allocation_functions + + [D] gpr_set_log_function + + [D] gpr_set_log_verbosity + + [D] gpr_should_log + + [D] gpr_sleep_until + + [D] gpr_stats_inc + + [D] gpr_stats_init + + [D] gpr_stats_read + + [D] gpr_strdup + + [D] gpr_thd_currentid + + [D] gpr_time_0 + + [D] gpr_time_add + + [D] gpr_time_cmp + + [D] gpr_time_from_hours + + [D] gpr_time_from_micros + + [D] gpr_time_from_millis + + [D] gpr_time_from_minutes + + [D] gpr_time_from_nanos + + [D] gpr_time_from_seconds + + [D] gpr_time_init + + [D] gpr_time_max + + [D] gpr_time_min + + [D] gpr_time_similar + + [D] gpr_time_sub + + [D] gpr_time_to_millis + + [D] gpr_timespec_to_micros + + [D] gpr_unref + + [D] gpr_zalloc + + [D] pb_close_string_substream + + [D] pb_decode + + [D] pb_decode_delimited + + [D] pb_decode_fixed32 + + [D] pb_decode_fixed64 + + [D] pb_decode_noinit + + [D] pb_decode_svarint + + [D] pb_decode_tag + + [D] pb_decode_varint + + [D] pb_encode + + [D] pb_encode_delimited + + [D] pb_encode_fixed32 + + [D] pb_encode_fixed64 + + [D] pb_encode_string + + [D] pb_encode_submessage + + [D] pb_encode_svarint + + [D] pb_encode_tag + + [D] pb_encode_tag_for_field + + [D] pb_encode_varint + + [D] pb_field_iter_begin + + [D] pb_field_iter_find + + [D] pb_field_iter_next + + [D] pb_get_encoded_size + + [D] pb_istream_from_buffer + + [D] pb_make_string_substream + + [D] pb_ostream_from_buffer + + [D] pb_read + + [D] pb_skip_field + + [D] pb_write + + + +951 Added function symbols not referenced by debug info: + + + + [A] _Z12grpc_cq_initv + + [A] _Z15grpc_mdelem_ref11grpc_mdelemPKci + + [A] _Z15grpc_stream_refP20grpc_stream_refcountPKc + + [A] _Z16functor_callbackPvP10grpc_error + + [A] _Z16grpc_cq_shutdownv + + [A] _Z17grpc_combiner_refPN9grpc_core8CombinerEPKciS3_ + + [A] _Z17grpc_error_do_refP10grpc_errorPKci + + [A] _Z17grpc_event_stringB5cxx11P10grpc_event + + [A] _Z17grpc_stream_unrefP20grpc_stream_refcountPKc + + [A] _Z18grpc_mdelem_createRKN9grpc_core19StaticMetadataSliceERK10grpc_sliceP16grpc_mdelem_data + + [A] _Z19grpc_call_log_batchPKci16gpr_log_severityPK7grpc_opm + + [A] _Z19grpc_combiner_unrefPN9grpc_core8CombinerEPKciS3_ + + [A] _Z19grpc_error_do_unrefP10grpc_errorPKci + + [A] _Z20grpc_cq_internal_refP21grpc_completion_queuePKcS2_i + + [A] _Z20grpc_mdelem_do_unref11grpc_mdelemPKci + + [A] _Z20grpc_sockaddr_to_uriB5cxx11PK21grpc_resolved_address + + [A] _Z20grpc_stream_ref_initP20grpc_stream_refcountiPFvPvP10grpc_errorES1_PKc + + [A] _Z21grpc_mdelem_trace_refPvRK10grpc_sliceS2_lPKci + + [A] _Z21grpc_slice_sub_no_refRKN9grpc_core20UnmanagedMemorySliceEmm + + [A] _Z21grpc_tcp_server_startP15grpc_tcp_serverPKSt6vectorIP12grpc_pollsetSaIS3_EEPFvPvP13grpc_endpointS3_P24grpc_tcp_server_acceptorES8_ + + [A] _Z21grpc_udp_server_startP15grpc_udp_serverPKSt6vectorIP12grpc_pollsetSaIS3_EEPv + + [A] _Z22grpc_call_internal_refP9grpc_callPKc + + [A] _Z22grpc_chttp2_stream_refP18grpc_chttp2_streamPKc + + [A] _Z22grpc_cq_internal_unrefP21grpc_completion_queuePKcS2_i + + [A] _Z22grpc_iomgr_non_pollingv + + [A] _Z22grpc_resolver_xds_initv + + [A] _Z23grpc_lb_policy_cds_initv + + [A] _Z23grpc_lb_policy_eds_initv + + [A] _Z23grpc_lb_policy_lrs_initv + + [A] _Z23grpc_mdelem_from_slicesRKN9grpc_core18ManagedMemorySliceES2_ + + [A] _Z23grpc_mdelem_from_slicesRKN9grpc_core19StaticMetadataSliceERK10grpc_slice + + [A] _Z23grpc_mdelem_from_slicesRKN9grpc_core19StaticMetadataSliceERKNS_18ManagedMemorySliceE + + [A] _Z23grpc_mdelem_from_slicesRKN9grpc_core19StaticMetadataSliceES2_ + + [A] _Z23grpc_mdelem_trace_unrefPvRK10grpc_sliceS2_lPKci + + [A] _Z23grpc_sockaddr_to_stringB5cxx11PK21grpc_resolved_addressb + + [A] _Z23grpc_stats_data_as_jsonB5cxx11PK15grpc_stats_data + + [A] _Z24grpc_call_internal_unrefP9grpc_callPKc + + [A] _Z24grpc_channel_args_stringB5cxx11PK17grpc_channel_args + + [A] _Z24grpc_chttp2_stream_unrefP18grpc_chttp2_streamPKc + + [A] _Z24grpc_server_add_listenerP11grpc_serverSt10unique_ptrIN9grpc_core23ServerListenerInterfaceENS2_16OrphanableDeleteEE + + [A] _Z24grpc_server_get_pollsetsP11grpc_server + + [A] _Z24grpc_set_socket_zerocopyi + + [A] _Z24grpc_transport_op_stringB5cxx11P17grpc_transport_op + + [A] _Z25grpc_set_socket_dualstacki + + [A] _Z26custom_tcp_endpoint_createP18grpc_custom_socketP19grpc_resource_quotaPKc + + [A] _Z26grpc_mdelem_on_final_unref24grpc_mdelem_data_storagePvjPKci + + [A] _Z26grpc_metadata_batch_removeP19grpc_metadata_batch34grpc_metadata_batch_callouts_index + + [A] _Z26grpc_resolver_xds_shutdownv + + [A] _Z26grpc_slice_from_cpp_stringNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _Z26grpc_tcp_client_prepare_fdPK17grpc_channel_argsPK21grpc_resolved_addressPS2_Pi + + [A] _Z27grpc_channel_args_find_boolPK17grpc_channel_argsPKcb + + [A] _Z27grpc_lb_policy_cds_shutdownv + + [A] _Z27grpc_lb_policy_eds_shutdownv + + [A] _Z27grpc_lb_policy_lrs_shutdownv + + [A] _Z27grpc_server_setup_transportP11grpc_serverP14grpc_transportP12grpc_pollsetPK17grpc_channel_argsRKN9grpc_core13RefCountedPtrINS8_8channelz10SocketNodeEEEP18grpc_resource_user + + [A] _Z28grpc_chttp2_reset_ping_clockP21grpc_chttp2_transport + + [A] _Z28grpc_client_idle_filter_initv + + [A] _Z28grpc_lb_policy_priority_initv + + [A] _Z28grpc_metadata_batch_add_tailP19grpc_metadata_batchP18grpc_linked_mdelem11grpc_mdelem34grpc_metadata_batch_callouts_index + + [A] _Z28grpc_slice_from_moved_bufferSt10unique_ptrIcN9grpc_core17DefaultDeleteCharEEm + + [A] _Z28grpc_slice_from_moved_stringSt10unique_ptrIcN9grpc_core17DefaultDeleteCharEE + + [A] _Z29grpc_channel_args_find_stringPK17grpc_channel_argsPKc + + [A] _Z29grpc_channel_destroy_internalP12grpc_channel + + [A] _Z29grpc_init_static_metadata_ctxv + + [A] _Z29grpc_metadata_batch_assert_okP19grpc_metadata_batch + + [A] _Z29grpc_metadata_batch_link_headP19grpc_metadata_batchP18grpc_linked_mdelem34grpc_metadata_batch_callouts_index + + [A] _Z29grpc_metadata_batch_link_tailP19grpc_metadata_batchP18grpc_linked_mdelem34grpc_metadata_batch_callouts_index + + [A] _Z30grpc_channel_args_find_integerPK17grpc_channel_argsPKc20grpc_integer_options + + [A] _Z31grpc_chttp2_add_incoming_goawayP21grpc_chttp2_transportjjRK10grpc_slice + + [A] _Z31grpc_chttp2_retry_initiate_pingPvP10grpc_error + + [A] _Z31grpc_lb_policy_xds_routing_initv + + [A] _Z32grpc_client_idle_filter_shutdownv + + [A] _Z32grpc_destroy_static_metadata_ctxv + + [A] _Z32grpc_lb_policy_priority_shutdownv + + [A] _Z33grpc_apply_socket_mutator_in_argsiPK17grpc_channel_args + + [A] _Z33grpc_ares_ev_driver_create_lockedPP19grpc_ares_ev_driverP16grpc_pollset_setiSt10shared_ptrIN9grpc_core14WorkSerializerEEP17grpc_ares_request + + [A] _Z33grpc_base64_estimate_encoded_sizemi + + [A] _Z35grpc_lb_policy_weighted_target_initv + + [A] _Z35grpc_lb_policy_xds_routing_shutdownv + + [A] _Z36grpc_get_reffed_status_elem_slowpathi + + [A] _Z36grpc_iomgr_mark_non_polling_internalv + + [A] _Z37grpc_cycle_counter_to_millis_round_upd + + [A] _Z37grpc_sockaddr_to_uri_unix_if_possibleB5cxx11PK21grpc_resolved_address + + [A] _Z37grpc_transport_stream_op_batch_stringB5cxx11P30grpc_transport_stream_op_batch + + [A] _Z38grpc_chttp2_hptbl_lookup_dynamic_indexPK17grpc_chttp2_hptblj + + [A] _Z39grpc_cares_wrapper_address_sorting_sortPK17grpc_ares_requestPN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core13ServerAddressELm1ESaIS6_EEE + + [A] _Z39grpc_cycle_counter_to_millis_round_downd + + [A] _Z39grpc_lb_policy_weighted_target_shutdownv + + [A] _Z39grpc_tcp_client_create_from_prepared_fdP16grpc_pollset_setP12grpc_closureiPK17grpc_channel_argsPK21grpc_resolved_addresslPP13grpc_endpoint + + [A] _Z39grpc_timer_manager_get_wakeups_testonlyv + + [A] _Z40grpc_chttp2_add_rst_stream_to_next_writeP21grpc_chttp2_transportjjP28grpc_transport_one_way_stats + + [A] _Z40grpc_deframe_unprocessed_incoming_framesP23grpc_chttp2_data_parserP18grpc_chttp2_streamP17grpc_slice_bufferP10grpc_slicePSt10unique_ptrIN9grpc_core10ByteStreamENS8_16OrphanableDeleteEE + + [A] _Z42grpc_chttp2_hptbl_lookup_ref_dynamic_indexPK17grpc_chttp2_hptblj + + [A] _Z43grpc_client_channel_stop_connectivity_watchP20grpc_channel_elementPN9grpc_core38AsyncConnectivityStateWatcherInterfaceE + + [A] _Z43grpc_service_config_channel_arg_filter_initv + + [A] _Z44grpc_client_channel_start_connectivity_watchP20grpc_channel_element23grpc_connectivity_stateSt10unique_ptrIN9grpc_core38AsyncConnectivityStateWatcherInterfaceENS3_16OrphanableDeleteEE + + [A] _Z47grpc_service_config_channel_arg_filter_shutdownv + + [A] _Z53grpc_channel_args_get_client_channel_creation_mutatorv + + [A] _Z53grpc_channel_args_set_client_channel_creation_mutatorPFP17grpc_channel_argsPKcS0_23grpc_channel_stack_typeE + + [A] _Z59grpc_channel_args_get_channel_default_compression_algorithmPK17grpc_channel_args + + [A] _Z59grpc_channel_args_set_channel_default_compression_algorithmP17grpc_channel_args26grpc_compression_algorithm + + [A] _Z74grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_lockedP17grpc_ares_requestPKcS2_S2_P16grpc_pollset_setiSt10shared_ptrIN9grpc_core14WorkSerializerEE + + [A] _Z8tcp_sendiPK6msghdri + + [A] _ZN15GrpcUdpListener14StartListeningEPKSt6vectorIP12grpc_pollsetSaIS2_EEP21GrpcUdpHandlerFactory + + [A] _ZN19grpc_slice_refcount5UnrefEv + + [A] _ZN4absl14lts_2020_02_2511make_uniqueIN3re23RE2EJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEENS0_15memory_internal16MakeUniqueResultIT_E6scalarEDpOT0_ + + [A] _ZN4absl14lts_2020_02_2511make_uniqueIN9grpc_core12XdsBootstrap4NodeEJEEENS0_15memory_internal16MakeUniqueResultIT_E6scalarEDpOT0_ + + [A] _ZN4absl14lts_2020_02_2511make_uniqueIN9grpc_core19LoadBalancingPolicy11QueuePickerEJNS2_13RefCountedPtrIS3_EEEEENS0_15memory_internal16MakeUniqueResultIT_E6scalarEDpOT0_ + + [A] _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core12XdsBootstrap12ChannelCredsELm1ESaIS4_EEC1EOS6_, aliases _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core12XdsBootstrap12ChannelCredsELm1ESaIS4_EEC2EOS6_ + + [A] _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core12XdsBootstrap12ChannelCredsELm1ESaIS4_EEC2EOS6_ + + [A] _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core13ServerAddressELm1ESaIS3_EEC1EOS5_ + + [A] _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core13ServerAddressELm1ESaIS3_EEC2EOS5_, aliases _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core13ServerAddressELm1ESaIS3_EEC1EOS5_ + + [A] _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS5_EEC1EOS7_, aliases _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS5_EEC2EOS7_ + + [A] _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS5_EEC2EOS7_ + + [A] _ZN4absl14lts_2020_02_2516strings_internal13JoinAlgorithmIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorISA_SaISA_EEEEvEESA_T_SH_NS0_11string_viewENS1_11NoFormatterE + + [A] _ZN4absl14lts_2020_02_2516strings_internal13JoinAlgorithmISt23_Rb_tree_const_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEvEES9_T_SB_NS0_11string_viewENS1_11NoFormatterE + + [A] _ZN4absl14lts_2020_02_2516strings_internal9JoinRangeINS0_13InlinedVectorINS0_11string_viewELm1ESaIS4_EEEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_S4_ + + [A] _ZN4absl14lts_2020_02_2517optional_internal13optional_dataIN9grpc_core6XdsApi9RdsUpdateELb0EEC1EOS6_, aliases _ZN4absl14lts_2020_02_2517optional_internal13optional_dataIN9grpc_core6XdsApi9RdsUpdateELb0EEC2EOS6_ + + [A] _ZN4absl14lts_2020_02_2517optional_internal13optional_dataIN9grpc_core6XdsApi9RdsUpdateELb0EEC2EOS6_ + + [A] _ZN4absl14lts_2020_02_2517optional_internal13optional_dataINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EEC1EOS9_ + + [A] _ZN4absl14lts_2020_02_2517optional_internal13optional_dataINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EEC2EOS9_, aliases _ZN4absl14lts_2020_02_2517optional_internal13optional_dataINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EEC1EOS9_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI15GrpcUdpListenerLm16ESaIS3_EE11EmplaceBackIJRP15grpc_udp_serverRiRPK21grpc_resolved_addressEEERS3_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm1ESaIS3_EE11EmplaceBackIJS3_EEERS3_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm2ESaIS3_EE11EmplaceBackIJS3_EEERS3_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm2ESaIS3_EED1Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm2ESaIS3_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm2ESaIS3_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm3ESaIS3_EE11EmplaceBackIJRS3_EEES7_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm3ESaIS3_EE11EmplaceBackIJS3_EEERS3_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm3ESaIS3_EED1Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm3ESaIS3_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm3ESaIS3_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core12XdsBootstrap12ChannelCredsELm1ESaIS5_EE11EmplaceBackIJS5_EEERS5_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core12XdsBootstrap9XdsServerELm1ESaIS5_EE11EmplaceBackIJEEERS5_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13RefCountedPtrINS3_10HandshakerEEELm2ESaIS6_EE11EmplaceBackIJS6_EEERS6_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13RefCountedPtrINS3_19SubchannelInterfaceEEELm10ESaIS6_EE11EmplaceBackIJS6_EEERS6_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13RefCountedPtrINS3_8channelz8BaseNodeEEELm10ESaIS7_EE11EmplaceBackIJRPS6_EEERS7_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13RefCountedPtrINS3_8channelz8BaseNodeEEELm10ESaIS7_EED1Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13RefCountedPtrINS3_8channelz8BaseNodeEEELm10ESaIS7_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13RefCountedPtrINS3_8channelz8BaseNodeEEELm10ESaIS7_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EE10InitializeINS1_20IteratorValueAdapterIS5_PKS4_EEEEvT_m + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EE11EmplaceBackIJPA128_cRjDnEEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EE11EmplaceBackIJR21grpc_resolved_addressDnEEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EE11EmplaceBackIJRK21grpc_resolved_addressRP17grpc_channel_argsEEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EE11EmplaceBackIJRS4_EEES8_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EE6AssignINS1_20IteratorValueAdapterIS5_PKS4_EEEEvT_m + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EE6AssignINS1_20IteratorValueAdapterIS5_St13move_iteratorIPS4_EEEEEvT_m + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EED1Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EED2Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EED1Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core17GrpcLbClientStats14DropTokenCountELm10ESaIS5_EE11EmplaceBackIJSt10unique_ptrIcNS3_17DefaultDeleteCharEEiEEERS5_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core23CallCombinerClosureList19CallCombinerClosureELm6ESaIS5_EE11EmplaceBackIJRP12grpc_closureRP10grpc_errorRPKcEEERS5_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core23CallCombinerClosureList19CallCombinerClosureELm6ESaIS5_EED1Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core23CallCombinerClosureList19CallCombinerClosureELm6ESaIS5_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core23CallCombinerClosureList19CallCombinerClosureELm6ESaIS5_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core6XdsApi10DropConfig12DropCategoryELm2ESaIS6_EE11EmplaceBackIJS6_EEERS6_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS6_EE6AssignINS1_20IteratorValueAdapterIS7_St13move_iteratorIPS6_EEEEEvT_m + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS6_EE6ResizeINS1_19DefaultValueAdapterIS7_EEEEvT_m + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS6_EED1Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS6_EED2Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS6_EED1Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core8channelz18CallCountingHelper17AtomicCounterDataELm1ESaIS6_EE11EmplaceBackIJEEERS6_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core8channelz18CallCountingHelper17AtomicCounterDataELm1ESaIS6_EED1Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core8channelz18CallCountingHelper17AtomicCounterDataELm1ESaIS6_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core8channelz18CallCountingHelper17AtomicCounterDataELm1ESaIS6_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageINS0_11string_viewELm1ESaIS3_EE11EmplaceBackIJRKS3_EEERS3_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIP10grpc_errorLm4ESaIS4_EE11EmplaceBackIJS4_EEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIPKcLm1ESaIS4_EE11EmplaceBackIJS4_EEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIPKcLm3ESaIS4_EE11EmplaceBackIJS4_EEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIPN9grpc_core15ByteStreamCacheELm3ESaIS5_EE11EmplaceBackIJRKS5_EEERS5_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core15ResolverFactoryESt14default_deleteIS5_EELm10ESaIS8_EE11EmplaceBackIJS8_EEERS8_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core17HandshakerFactoryESt14default_deleteIS5_EELm2ESaIS8_EE11EmplaceBackIJS8_EEERS8_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS6_EELm4ESaIS9_EE11EmplaceBackIJS9_EEERS9_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS6_EELm4ESaIS9_EE6AssignINS1_20IteratorValueAdapterISA_St13move_iteratorIPS9_EEEEEvT_m + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS6_EELm4ESaIS9_EED1Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS6_EELm4ESaIS9_EED2Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS6_EELm4ESaIS9_EED1Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core19ServiceConfigParser6ParserESt14default_deleteIS6_EELm4ESaIS9_EE11EmplaceBackIJS9_EEERS9_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core26LoadBalancingPolicyFactoryESt14default_deleteIS5_EELm10ESaIS8_EE11EmplaceBackIJS8_EEERS8_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrINS0_13InlinedVectorIS3_IN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS7_EELm4ESaISA_EEES8_ISC_EELm32ESaISE_EE11EmplaceBackIJSE_EEERSE_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIiLm1ESaIiEE11EmplaceBackIJRKiEEERiDpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIiLm1ESaIiEED1Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIiLm1ESaIiEED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIiLm1ESaIiEED2Ev + + [A] _ZN4absl14lts_2020_02_25eqIN9grpc_core6XdsApi9RdsUpdateES4_EEDTcl19convertible_to_booleqdefp_defp0_EERKNS0_8optionalIT_EERKNS6_IT0_EE + + [A] _ZN4grpc12experimental17LibuvEventManager10ShouldStopEv + + [A] _ZN4grpc12experimental17LibuvEventManager11ShutdownRefEv + + [A] _ZN4grpc12experimental17LibuvEventManager13RunWorkerLoopEv + + [A] _ZN4grpc12experimental17LibuvEventManager13ShutdownUnrefEv + + [A] _ZN4grpc12experimental17LibuvEventManager7OptionsC1Ei + + [A] _ZN4grpc12experimental17LibuvEventManager7OptionsC1Ev + + [A] _ZN4grpc12experimental17LibuvEventManager7OptionsC2Ei, aliases _ZN4grpc12experimental17LibuvEventManager7OptionsC1Ei + + [A] _ZN4grpc12experimental17LibuvEventManager7OptionsC2Ev, aliases _ZN4grpc12experimental17LibuvEventManager7OptionsC1Ev + + [A] _ZN4grpc12experimental17LibuvEventManager8ShutdownEv + + [A] _ZN4grpc12experimental17LibuvEventManagerC1ERKNS1_7OptionsE + + [A] _ZN4grpc12experimental17LibuvEventManagerC2ERKNS1_7OptionsE, aliases _ZN4grpc12experimental17LibuvEventManagerC1ERKNS1_7OptionsE + + [A] _ZN4grpc12experimental17LibuvEventManagerD0Ev + + [A] _ZN4grpc12experimental17LibuvEventManagerD1Ev + + [A] _ZN4grpc12experimental17LibuvEventManagerD2Ev, aliases _ZN4grpc12experimental17LibuvEventManagerD1Ev + + [A] _ZN9__gnu_cxx12__to_xstringINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcEET_PFiPT0_mPKS8_St9__va_listEmSB_z + + [A] _ZN9grpc_core10RefCountedINS_10HandshakerENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_10Subchannel33ConnectivityStateWatcherInterfaceENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_13ServiceConfigENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_14ConfigSelectorENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_15XdsLocalityNameENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_16HandshakeManagerENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_17GrpcLbClientStatsENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_19ConnectedSubchannelENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_19LoadBalancingPolicy6ConfigENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_19SubchannelInterfaceENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_19XdsClusterDropStatsENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_23SubchannelPoolInterfaceENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_23XdsClusterLocalityStatsENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_29FakeResolverResponseGeneratorENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_6XdsApi10DropConfigENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_8channelz8BaseNodeENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_8internal23ServerRetryThrottleDataENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcher25OnConnectivityStateChangeE23grpc_connectivity_state + + [A] _ZN9grpc_core10Subchannel16HealthWatcherMap16AddWatcherLockedEPS0_23grpc_connectivity_stateSt10unique_ptrIcNS_17DefaultDeleteCharEENS_13RefCountedPtrINS0_33ConnectivityStateWatcherInterfaceEEE + + [A] _ZN9grpc_core10Subchannel16HealthWatcherMap19RemoveWatcherLockedEPKcPNS0_33ConnectivityStateWatcherInterfaceE + + [A] _ZN9grpc_core10Subchannel22WatchConnectivityStateE23grpc_connectivity_stateSt10unique_ptrIcNS_17DefaultDeleteCharEENS_13RefCountedPtrINS0_33ConnectivityStateWatcherInterfaceEEE + + [A] _ZN9grpc_core10Subchannel28CancelConnectivityStateWatchEPKcPNS0_33ConnectivityStateWatcherInterfaceE + + [A] _ZN9grpc_core10Subchannel28ConnectivityStateWatcherList16AddWatcherLockedENS_13RefCountedPtrINS0_33ConnectivityStateWatcherInterfaceEEE + + [A] _ZN9grpc_core10Subchannel28ConnectivityStateWatcherList19RemoveWatcherLockedEPNS0_33ConnectivityStateWatcherInterfaceE + + [A] _ZN9grpc_core10Subchannel28ConnectivityStateWatcherListD1Ev + + [A] _ZN9grpc_core10Subchannel28ConnectivityStateWatcherListD2Ev, aliases _ZN9grpc_core10Subchannel28ConnectivityStateWatcherListD1Ev + + [A] _ZN9grpc_core10Subchannel31ConnectedSubchannelStateWatcher25OnConnectivityStateChangeE23grpc_connectivity_state + + [A] _ZN9grpc_core10Subchannel31ConnectedSubchannelStateWatcherD0Ev + + [A] _ZN9grpc_core10Subchannel31ConnectedSubchannelStateWatcherD1Ev + + [A] _ZN9grpc_core10Subchannel31ConnectedSubchannelStateWatcherD2Ev, aliases _ZN9grpc_core10Subchannel31ConnectedSubchannelStateWatcherD1Ev + + [A] _ZN9grpc_core10Subchannel33ConnectivityStateWatcherInterface26PopConnectivityStateChangeEv + + [A] _ZN9grpc_core10Subchannel33ConnectivityStateWatcherInterface27PushConnectivityStateChangeENS1_23ConnectivityStateChangeE + + [A] _ZN9grpc_core10Subchannel3RefEPKciS2_ + + [A] _ZN9grpc_core10Subchannel5UnrefEPKciS2_ + + [A] _ZN9grpc_core10Subchannel6CreateESt10unique_ptrINS_19SubchannelConnectorENS_16OrphanableDeleteEEPK17grpc_channel_args + + [A] _ZN9grpc_core10Subchannel7WeakRefEPKciS2_ + + [A] _ZN9grpc_core10Subchannel9RefMutateEliPKciS2_S2_ + + [A] _ZN9grpc_core10Subchannel9WeakUnrefEPKciS2_ + + [A] _ZN9grpc_core10SubchannelC1EPNS_13SubchannelKeyESt10unique_ptrINS_19SubchannelConnectorENS_16OrphanableDeleteEEPK17grpc_channel_args + + [A] _ZN9grpc_core10SubchannelC2EPNS_13SubchannelKeyESt10unique_ptrINS_19SubchannelConnectorENS_16OrphanableDeleteEEPK17grpc_channel_args, aliases _ZN9grpc_core10SubchannelC1EPNS_13SubchannelKeyESt10unique_ptrINS_19SubchannelConnectorENS_16OrphanableDeleteEEPK17grpc_channel_args + + [A] _ZN9grpc_core10ThreadPool16DefaultStackSizeEv + + [A] _ZN9grpc_core10ThreadPool24AssertHasNotBeenShutDownEv + + [A] _ZN9grpc_core10ThreadPool27SharedThreadPoolConstructorEv + + [A] _ZN9grpc_core10ThreadPool3AddEP42grpc_experimental_completion_queue_functor + + [A] _ZN9grpc_core10ThreadPoolC1Ei + + [A] _ZN9grpc_core10ThreadPoolC1EiPKc, aliases _ZN9grpc_core10ThreadPoolC2EiPKc + + [A] _ZN9grpc_core10ThreadPoolC1EiPKcRKNS_6Thread7OptionsE, aliases _ZN9grpc_core10ThreadPoolC2EiPKcRKNS_6Thread7OptionsE + + [A] _ZN9grpc_core10ThreadPoolC2Ei, aliases _ZN9grpc_core10ThreadPoolC1Ei + + [A] _ZN9grpc_core10ThreadPoolC2EiPKc + + [A] _ZN9grpc_core10ThreadPoolC2EiPKcRKNS_6Thread7OptionsE + + [A] _ZN9grpc_core10ThreadPoolD0Ev + + [A] _ZN9grpc_core10ThreadPoolD1Ev, aliases _ZN9grpc_core10ThreadPoolD2Ev + + [A] _ZN9grpc_core10ThreadPoolD2Ev + + [A] _ZN9grpc_core12CallCombiner4StopEPKciS2_ + + [A] _ZN9grpc_core12CallCombiner5StartEP12grpc_closureP10grpc_errorPKciS6_ + + [A] _ZN9grpc_core12FakeResolver24ReturnReresolutionResultEv + + [A] _ZN9grpc_core12ResolverArgsD1Ev + + [A] _ZN9grpc_core12ResolverArgsD2Ev, aliases _ZN9grpc_core12ResolverArgsD1Ev + + [A] _ZN9grpc_core12XdsBootstrap12ReadFromFileEPNS_9XdsClientEPNS_9TraceFlagEPP10grpc_error + + [A] _ZN9grpc_core12XdsBootstrap13ParseLocalityEPNS_4JsonE + + [A] _ZN9grpc_core12XdsBootstrap14ParseXdsServerEPNS_4JsonEm + + [A] _ZN9grpc_core12XdsBootstrap17ParseChannelCredsEPNS_4JsonEmPNS0_9XdsServerE + + [A] _ZN9grpc_core12XdsBootstrap18ParseXdsServerListEPNS_4JsonE + + [A] _ZN9grpc_core12XdsBootstrap22ParseChannelCredsArrayEPNS_4JsonEPNS0_9XdsServerE + + [A] _ZN9grpc_core12XdsBootstrap9ParseNodeEPNS_4JsonE + + [A] _ZN9grpc_core12XdsBootstrapC1ENS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core12XdsBootstrapC2ENS_4JsonEPP10grpc_error, aliases _ZN9grpc_core12XdsBootstrapC1ENS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core13InternedSliceC1EPNS_21InternedSliceRefcountE + + [A] _ZN9grpc_core13InternedSliceC2EPNS_21InternedSliceRefcountE, aliases _ZN9grpc_core13InternedSliceC1EPNS_21InternedSliceRefcountE + + [A] _ZN9grpc_core13ServiceConfig19ParseJsonMethodNameB5cxx11ERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core13ServiceConfig20ParsePerMethodParamsEv + + [A] _ZN9grpc_core13ServiceConfig21ParseJsonMethodConfigERKNS_4JsonE + + [A] _ZN9grpc_core13ServiceConfig6CreateEN4absl14lts_2020_02_2511string_viewEPP10grpc_error + + [A] _ZN9grpc_core13ServiceConfigC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4JsonEPP10grpc_error, aliases _ZN9grpc_core13ServiceConfigC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core13ServiceConfigC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core14ConfigSelector10CallConfigD1Ev, aliases _ZN9grpc_core14ConfigSelector10CallConfigD2Ev + + [A] _ZN9grpc_core14ConfigSelector10CallConfigD2Ev + + [A] _ZN9grpc_core14ConfigSelector18GetFromChannelArgsERK17grpc_channel_args + + [A] _ZN9grpc_core14RegisteredCallC1EOS0_, aliases _ZN9grpc_core14RegisteredCallC2EOS0_ + + [A] _ZN9grpc_core14RegisteredCallC1EPKcS2_, aliases _ZN9grpc_core14RegisteredCallC2EPKcS2_ + + [A] _ZN9grpc_core14RegisteredCallC1ERKS0_ + + [A] _ZN9grpc_core14RegisteredCallC2EOS0_ + + [A] _ZN9grpc_core14RegisteredCallC2EPKcS2_ + + [A] _ZN9grpc_core14RegisteredCallC2ERKS0_, aliases _ZN9grpc_core14RegisteredCallC1ERKS0_ + + [A] _ZN9grpc_core14RegisteredCallD1Ev + + [A] _ZN9grpc_core14RegisteredCallD2Ev, aliases _ZN9grpc_core14RegisteredCallD1Ev + + [A] _ZN9grpc_core14SubchannelCall6CreateENS0_4ArgsEPP10grpc_error + + [A] _ZN9grpc_core14SubchannelCallC1ENS0_4ArgsEPP10grpc_error + + [A] _ZN9grpc_core14SubchannelCallC2ENS0_4ArgsEPP10grpc_error, aliases _ZN9grpc_core14SubchannelCallC1ENS0_4ArgsEPP10grpc_error + + [A] _ZN9grpc_core14WorkSerializer18WorkSerializerImpl10DrainQueueEv + + [A] _ZN9grpc_core14WorkSerializer18WorkSerializerImpl3RunESt8functionIFvvEERKNS_13DebugLocationE + + [A] _ZN9grpc_core14WorkSerializer18WorkSerializerImpl6OrphanEv + + [A] _ZN9grpc_core14WorkSerializer18WorkSerializerImplD0Ev + + [A] _ZN9grpc_core14WorkSerializer18WorkSerializerImplD1Ev + + [A] _ZN9grpc_core14WorkSerializer18WorkSerializerImplD2Ev, aliases _ZN9grpc_core14WorkSerializer18WorkSerializerImplD1Ev + + [A] _ZN9grpc_core14WorkSerializer3RunESt8functionIFvvEERKNS_13DebugLocationE + + [A] _ZN9grpc_core14WorkSerializerC1Ev, aliases _ZN9grpc_core14WorkSerializerC2Ev + + [A] _ZN9grpc_core14WorkSerializerC2Ev + + [A] _ZN9grpc_core14WorkSerializerD1Ev + + [A] _ZN9grpc_core14WorkSerializerD2Ev, aliases _ZN9grpc_core14WorkSerializerD1Ev + + [A] _ZN9grpc_core15ByteStreamCacheC1ESt10unique_ptrINS_10ByteStreamENS_16OrphanableDeleteEE + + [A] _ZN9grpc_core15ByteStreamCacheC2ESt10unique_ptrINS_10ByteStreamENS_16OrphanableDeleteEE, aliases _ZN9grpc_core15ByteStreamCacheC1ESt10unique_ptrINS_10ByteStreamENS_16OrphanableDeleteEE + + [A] _ZN9grpc_core15Chttp2Connector15OnHandshakeDoneEPvP10grpc_error + + [A] _ZN9grpc_core15Chttp2Connector20StartHandshakeLockedEv + + [A] _ZN9grpc_core15Chttp2Connector7ConnectERKNS_19SubchannelConnector4ArgsEPNS1_6ResultEP12grpc_closure + + [A] _ZN9grpc_core15Chttp2Connector8ShutdownEP10grpc_error + + [A] _ZN9grpc_core15Chttp2Connector9ConnectedEPvP10grpc_error + + [A] _ZN9grpc_core15Chttp2ConnectorC1Ev + + [A] _ZN9grpc_core15Chttp2ConnectorC2Ev, aliases _ZN9grpc_core15Chttp2ConnectorC1Ev + + [A] _ZN9grpc_core15Chttp2ConnectorD0Ev + + [A] _ZN9grpc_core15Chttp2ConnectorD1Ev, aliases _ZN9grpc_core15Chttp2ConnectorD2Ev + + [A] _ZN9grpc_core15Chttp2ConnectorD2Ev + + [A] _ZN9grpc_core15InfLenFIFOQueue10PushWaiterEPNS0_6WaiterE + + [A] _ZN9grpc_core15InfLenFIFOQueue12RemoveWaiterEPNS0_6WaiterE + + [A] _ZN9grpc_core15InfLenFIFOQueue13AllocateNodesEi + + [A] _ZN9grpc_core15InfLenFIFOQueue3GetEP12gpr_timespec + + [A] _ZN9grpc_core15InfLenFIFOQueue3PutEPv + + [A] _ZN9grpc_core15InfLenFIFOQueue9TopWaiterEv + + [A] _ZN9grpc_core15InfLenFIFOQueueC1Ev + + [A] _ZN9grpc_core15InfLenFIFOQueueC2Ev, aliases _ZN9grpc_core15InfLenFIFOQueueC1Ev + + [A] _ZN9grpc_core15InfLenFIFOQueueD0Ev + + [A] _ZN9grpc_core15InfLenFIFOQueueD1Ev, aliases _ZN9grpc_core15InfLenFIFOQueueD2Ev + + [A] _ZN9grpc_core15InfLenFIFOQueueD2Ev + + [A] _ZN9grpc_core15XdsLocalityNameD0Ev + + [A] _ZN9grpc_core15XdsLocalityNameD1Ev, aliases _ZN9grpc_core15XdsLocalityNameD2Ev + + [A] _ZN9grpc_core15XdsLocalityNameD2Ev + + [A] _ZN9grpc_core16CreateXdsChannelERKNS_12XdsBootstrapERK17grpc_channel_argsPP10grpc_error + + [A] _ZN9grpc_core16InternedMetadataC1ERK10grpc_sliceS3_jPS0_PKNS0_8NoRefKeyE, aliases _ZN9grpc_core16InternedMetadataC2ERK10grpc_sliceS3_jPS0_PKNS0_8NoRefKeyE + + [A] _ZN9grpc_core16InternedMetadataC2ERK10grpc_sliceS3_jPS0_PKNS0_8NoRefKeyE + + [A] _ZN9grpc_core16RefcountedMdBase12TraceAtStartEPKc + + [A] _ZN9grpc_core16ResolverRegistry13IsValidTargetEPKc + + [A] _ZN9grpc_core16ResolverRegistry14CreateResolverEPKcPK17grpc_channel_argsP16grpc_pollset_setSt10shared_ptrINS_14WorkSerializerEESt10unique_ptrINS_8Resolver13ResultHandlerESt14default_deleteISD_EE + + [A] _ZN9grpc_core16ResolverRegistry7Builder23RegisterResolverFactoryESt10unique_ptrINS_15ResolverFactoryESt14default_deleteIS3_EE + + [A] _ZN9grpc_core16ThreadPoolWorker3RunEv + + [A] _ZN9grpc_core17AllocatedMetadataC1ERK10grpc_sliceS3_PKNS0_8NoRefKeyE + + [A] _ZN9grpc_core17AllocatedMetadataC1ERKNS_18ManagedMemorySliceERKNS_20UnmanagedMemorySliceE + + [A] _ZN9grpc_core17AllocatedMetadataC1ERKNS_22ExternallyManagedSliceERKNS_20UnmanagedMemorySliceE + + [A] _ZN9grpc_core17AllocatedMetadataC2ERK10grpc_sliceS3_PKNS0_8NoRefKeyE, aliases _ZN9grpc_core17AllocatedMetadataC1ERK10grpc_sliceS3_PKNS0_8NoRefKeyE + + [A] _ZN9grpc_core17AllocatedMetadataC2ERKNS_18ManagedMemorySliceERKNS_20UnmanagedMemorySliceE, aliases _ZN9grpc_core17AllocatedMetadataC1ERKNS_18ManagedMemorySliceERKNS_20UnmanagedMemorySliceE + + [A] _ZN9grpc_core17AllocatedMetadataC2ERKNS_22ExternallyManagedSliceERKNS_20UnmanagedMemorySliceE, aliases _ZN9grpc_core17AllocatedMetadataC1ERKNS_22ExternallyManagedSliceERKNS_20UnmanagedMemorySliceE + + [A] _ZN9grpc_core17GrpcLbClientStats3GetEPlS1_S1_S1_PSt10unique_ptrIN4absl14lts_2020_02_2513InlinedVectorINS0_14DropTokenCountELm10ESaIS6_EEESt14default_deleteIS8_EE + + [A] _ZN9grpc_core17HealthCheckClient15SetHealthStatusE23grpc_connectivity_statePKc + + [A] _ZN9grpc_core17HealthCheckClient21SetHealthStatusLockedE23grpc_connectivity_statePKc + + [A] _ZN9grpc_core17HealthCheckClient21StartRetryTimerLockedEv + + [A] _ZN9grpc_core17HealthCheckClient9CallState15CallEndedLockedEb + + [A] _ZN9grpc_core17HealthCheckClientC1EPKcNS_13RefCountedPtrINS_19ConnectedSubchannelEEEP16grpc_pollset_setNS3_INS_8channelz14SubchannelNodeEEENS3_INS_33ConnectivityStateWatcherInterfaceEEE + + [A] _ZN9grpc_core17HealthCheckClientC2EPKcNS_13RefCountedPtrINS_19ConnectedSubchannelEEEP16grpc_pollset_setNS3_INS_8channelz14SubchannelNodeEEENS3_INS_33ConnectivityStateWatcherInterfaceEEE, aliases _ZN9grpc_core17HealthCheckClientC1EPKcNS_13RefCountedPtrINS_19ConnectedSubchannelEEEP16grpc_pollset_setNS3_INS_8channelz14SubchannelNodeEEENS3_INS_33ConnectivityStateWatcherInterfaceEEE + + [A] _ZN9grpc_core17MessageSizeParser20ParsePerMethodParamsERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core18ChildPolicyHandler12UpdateLockedENS_19LoadBalancingPolicy10UpdateArgsE + + [A] _ZN9grpc_core18ChildPolicyHandler14ExitIdleLockedEv + + [A] _ZN9grpc_core18ChildPolicyHandler14ShutdownLockedEv + + [A] _ZN9grpc_core18ChildPolicyHandler17CreateChildPolicyEPKcRK17grpc_channel_args + + [A] _ZN9grpc_core18ChildPolicyHandler18ResetBackoffLockedEv + + [A] _ZN9grpc_core18ChildPolicyHandler6Helper11UpdateStateE23grpc_connectivity_stateSt10unique_ptrINS_19LoadBalancingPolicy16SubchannelPickerESt14default_deleteIS5_EE + + [A] _ZN9grpc_core18ChildPolicyHandler6Helper13AddTraceEventENS_19LoadBalancingPolicy20ChannelControlHelper13TraceSeverityEN4absl14lts_2020_02_2511string_viewE + + [A] _ZN9grpc_core18ChildPolicyHandler6Helper16CreateSubchannelERK17grpc_channel_args + + [A] _ZN9grpc_core18ChildPolicyHandler6Helper19RequestReresolutionEv + + [A] _ZN9grpc_core18ChildPolicyHandler6HelperD0Ev + + [A] _ZN9grpc_core18ChildPolicyHandler6HelperD1Ev + + [A] _ZN9grpc_core18ChildPolicyHandler6HelperD2Ev, aliases _ZN9grpc_core18ChildPolicyHandler6HelperD1Ev + + [A] _ZN9grpc_core18ChildPolicyHandlerD0Ev + + [A] _ZN9grpc_core18ChildPolicyHandlerD1Ev, aliases _ZN9grpc_core18ChildPolicyHandlerD2Ev + + [A] _ZN9grpc_core18ChildPolicyHandlerD2Ev + + [A] _ZN9grpc_core18HandshakerRegistry25RegisterHandshakerFactoryEbNS_14HandshakerTypeESt10unique_ptrINS_17HandshakerFactoryESt14default_deleteIS3_EE + + [A] _ZN9grpc_core18ManagedMemorySliceC1EPK10grpc_slice, aliases _ZN9grpc_core18ManagedMemorySliceC2EPK10grpc_slice + + [A] _ZN9grpc_core18ManagedMemorySliceC1EPKc, aliases _ZN9grpc_core18ManagedMemorySliceC2EPKc + + [A] _ZN9grpc_core18ManagedMemorySliceC1EPKcm, aliases _ZN9grpc_core18ManagedMemorySliceC2EPKcm + + [A] _ZN9grpc_core18ManagedMemorySliceC2EPK10grpc_slice + + [A] _ZN9grpc_core18ManagedMemorySliceC2EPKc + + [A] _ZN9grpc_core18ManagedMemorySliceC2EPKcm + + [A] _ZN9grpc_core19Chttp2ServerAddPortEP11grpc_serverPKcP17grpc_channel_argsPi + + [A] _ZN9grpc_core19ConnectedSubchannel10StartWatchEP16grpc_pollset_setSt10unique_ptrINS_33ConnectivityStateWatcherInterfaceENS_16OrphanableDeleteEE + + [A] _ZN9grpc_core19ConnectedSubchannelC1EP18grpc_channel_stackPK17grpc_channel_argsNS_13RefCountedPtrINS_8channelz14SubchannelNodeEEE + + [A] _ZN9grpc_core19ConnectedSubchannelC2EP18grpc_channel_stackPK17grpc_channel_argsNS_13RefCountedPtrINS_8channelz14SubchannelNodeEEE, aliases _ZN9grpc_core19ConnectedSubchannelC1EP18grpc_channel_stackPK17grpc_channel_argsNS_13RefCountedPtrINS_8channelz14SubchannelNodeEEE + + [A] _ZN9grpc_core19ConnectivityWatcher25OnConnectivityStateChangeE23grpc_connectivity_state + + [A] _ZN9grpc_core19ConnectivityWatcherD0Ev + + [A] _ZN9grpc_core19ConnectivityWatcherD1Ev + + [A] _ZN9grpc_core19ConnectivityWatcherD2Ev, aliases _ZN9grpc_core19ConnectivityWatcherD1Ev + + [A] _ZN9grpc_core19GrpcLbRequestCreateEPKcP9upb_arena + + [A] _ZN9grpc_core19GrpcLbResponseParseERK10grpc_sliceP9upb_arenaPNS_14GrpcLbResponseE + + [A] _ZN9grpc_core19LoadBalancingPolicy10PickResultD1Ev, aliases _ZN9grpc_core19LoadBalancingPolicy10PickResultD2Ev + + [A] _ZN9grpc_core19LoadBalancingPolicy10PickResultD2Ev + + [A] _ZN9grpc_core19LoadBalancingPolicy10UpdateArgsD1Ev, aliases _ZN9grpc_core19LoadBalancingPolicy10UpdateArgsD2Ev + + [A] _ZN9grpc_core19LoadBalancingPolicy10UpdateArgsD2Ev + + [A] _ZN9grpc_core19LoadBalancingPolicy4ArgsD1Ev, aliases _ZN9grpc_core19LoadBalancingPolicy4ArgsD2Ev + + [A] _ZN9grpc_core19LoadBalancingPolicy4ArgsD2Ev + + [A] _ZN9grpc_core19ProxyMapperRegistry10MapAddressERK21grpc_resolved_addressPK17grpc_channel_argsPPS1_PPS4_ + + [A] _ZN9grpc_core19ProxyMapperRegistry4InitEv + + [A] _ZN9grpc_core19ProxyMapperRegistry7MapNameEPKcPK17grpc_channel_argsPPcPPS3_ + + [A] _ZN9grpc_core19ProxyMapperRegistry8RegisterEbSt10unique_ptrINS_20ProxyMapperInterfaceESt14default_deleteIS2_EE + + [A] _ZN9grpc_core19ProxyMapperRegistry8ShutdownEv + + [A] _ZN9grpc_core19ServiceConfigParser12ParsedConfigD0Ev + + [A] _ZN9grpc_core19ServiceConfigParser12ParsedConfigD1Ev, aliases _ZN9grpc_core19ServiceConfigParser12ParsedConfigD2Ev + + [A] _ZN9grpc_core19ServiceConfigParser12ParsedConfigD2Ev + + [A] _ZN9grpc_core19ServiceConfigParser14RegisterParserESt10unique_ptrINS0_6ParserESt14default_deleteIS2_EE + + [A] _ZN9grpc_core19ServiceConfigParser21ParseGlobalParametersERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core19ServiceConfigParser24ParsePerMethodParametersERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core19ServiceConfigParser4InitEv + + [A] _ZN9grpc_core19ServiceConfigParser6Parser17ParseGlobalParamsERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core19ServiceConfigParser6Parser20ParsePerMethodParamsERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core19ServiceConfigParser6ParserD0Ev + + [A] _ZN9grpc_core19ServiceConfigParser6ParserD1Ev, aliases _ZN9grpc_core19ServiceConfigParser6ParserD2Ev + + [A] _ZN9grpc_core19ServiceConfigParser6ParserD2Ev + + [A] _ZN9grpc_core19ServiceConfigParser8ShutdownEv + + [A] _ZN9grpc_core19SubchannelConnector6OrphanEv + + [A] _ZN9grpc_core19XdsClusterDropStats14AddCallDroppedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_core19XdsClusterDropStats19GetSnapshotAndResetB5cxx11Ev + + [A] _ZN9grpc_core19XdsClusterDropStatsC1ENS_13RefCountedPtrINS_9XdsClientEEEN4absl14lts_2020_02_2511string_viewES6_S6_, aliases _ZN9grpc_core19XdsClusterDropStatsC2ENS_13RefCountedPtrINS_9XdsClientEEEN4absl14lts_2020_02_2511string_viewES6_S6_ + + [A] _ZN9grpc_core19XdsClusterDropStatsC2ENS_13RefCountedPtrINS_9XdsClientEEEN4absl14lts_2020_02_2511string_viewES6_S6_ + + [A] _ZN9grpc_core19XdsClusterDropStatsD0Ev + + [A] _ZN9grpc_core19XdsClusterDropStatsD1Ev, aliases _ZN9grpc_core19XdsClusterDropStatsD2Ev + + [A] _ZN9grpc_core19XdsClusterDropStatsD2Ev + + [A] _ZN9grpc_core20InternallyRefCountedINS_17HealthCheckClientEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_19LoadBalancingPolicyEE5UnrefERKNS_13DebugLocationEPKc + + [A] _ZN9grpc_core20InternallyRefCountedINS_19LoadBalancingPolicyEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_33ConnectivityStateWatcherInterfaceEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_8ResolverEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12LrsCallStateEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState13RetryableCallINS2_12AdsCallStateEEEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState13RetryableCallINS2_12LrsCallStateEEEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelStateEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_9XdsClientEE5UnrefEv + + [A] _ZN9grpc_core20ModifyXdsChannelArgsEP17grpc_channel_args + + [A] _ZN9grpc_core20UnmanagedMemorySlice8HeapInitEm + + [A] _ZN9grpc_core20UnmanagedMemorySliceC1EPKc + + [A] _ZN9grpc_core20UnmanagedMemorySliceC1EPKcm + + [A] _ZN9grpc_core20UnmanagedMemorySliceC1Em, aliases _ZN9grpc_core20UnmanagedMemorySliceC2Em + + [A] _ZN9grpc_core20UnmanagedMemorySliceC2EPKc, aliases _ZN9grpc_core20UnmanagedMemorySliceC1EPKc + + [A] _ZN9grpc_core20UnmanagedMemorySliceC2EPKcm, aliases _ZN9grpc_core20UnmanagedMemorySliceC1EPKcm + + [A] _ZN9grpc_core20UnmanagedMemorySliceC2Em + + [A] _ZN9grpc_core21ConnectivityStateNameE23grpc_connectivity_state + + [A] _ZN9grpc_core21DefaultConfigSelector13GetCallConfigENS_14ConfigSelector17GetCallConfigArgsE + + [A] _ZN9grpc_core21DefaultConfigSelectorD0Ev + + [A] _ZN9grpc_core21DefaultConfigSelectorD1Ev + + [A] _ZN9grpc_core21DefaultConfigSelectorD2Ev, aliases _ZN9grpc_core21DefaultConfigSelectorD1Ev + + [A] _ZN9grpc_core21ServiceConfigCallData7DestroyEPv + + [A] _ZN9grpc_core21TcpZerocopySendRecord12PopulateIovsEPmS1_S1_P5iovec + + [A] _ZN9grpc_core21TcpZerocopySendRecord24UpdateOffsetForBytesSentEmm + + [A] _ZN9grpc_core22NewGrpcPolledFdFactoryESt10shared_ptrINS_14WorkSerializerEE + + [A] _ZN9grpc_core22ParseBackendMetricDataERK10grpc_slicePNS_5ArenaE + + [A] _ZN9grpc_core23CallCombinerClosureList11RunClosuresEPNS_12CallCombinerE + + [A] _ZN9grpc_core23MakeHierarchicalPathArgERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EE + + [A] _ZN9grpc_core23MessageSizeParsedConfig18GetFromCallContextEPK25grpc_call_context_element + + [A] _ZN9grpc_core23RegisterHttpProxyMapperEv + + [A] _ZN9grpc_core23XdsClusterLocalityStats14AddCallStartedEv + + [A] _ZN9grpc_core23XdsClusterLocalityStats15AddCallFinishedEb + + [A] _ZN9grpc_core23XdsClusterLocalityStats19GetSnapshotAndResetEv + + [A] _ZN9grpc_core23XdsClusterLocalityStatsC1ENS_13RefCountedPtrINS_9XdsClientEEEN4absl14lts_2020_02_2511string_viewES6_S6_NS1_INS_15XdsLocalityNameEEE + + [A] _ZN9grpc_core23XdsClusterLocalityStatsC2ENS_13RefCountedPtrINS_9XdsClientEEEN4absl14lts_2020_02_2511string_viewES6_S6_NS1_INS_15XdsLocalityNameEEE, aliases _ZN9grpc_core23XdsClusterLocalityStatsC1ENS_13RefCountedPtrINS_9XdsClientEEEN4absl14lts_2020_02_2511string_viewES6_S6_NS1_INS_15XdsLocalityNameEEE + + [A] _ZN9grpc_core23XdsClusterLocalityStatsD0Ev + + [A] _ZN9grpc_core23XdsClusterLocalityStatsD1Ev, aliases _ZN9grpc_core23XdsClusterLocalityStatsD2Ev + + [A] _ZN9grpc_core23XdsClusterLocalityStatsD2Ev + + [A] _ZN9grpc_core24ConnectivityStateTracker10AddWatcherE23grpc_connectivity_stateSt10unique_ptrINS_33ConnectivityStateWatcherInterfaceENS_16OrphanableDeleteEE + + [A] _ZN9grpc_core24ConnectivityStateTracker13RemoveWatcherEPNS_33ConnectivityStateWatcherInterfaceE + + [A] _ZN9grpc_core24ConnectivityStateTracker8SetStateE23grpc_connectivity_statePKc + + [A] _ZN9grpc_core24ConnectivityStateTrackerD1Ev, aliases _ZN9grpc_core24ConnectivityStateTrackerD2Ev + + [A] _ZN9grpc_core24ConnectivityStateTrackerD2Ev + + [A] _ZN9grpc_core24GrpcPolledFdFactoryPosix21NewGrpcPolledFdLockedEiP16grpc_pollset_setSt10shared_ptrINS_14WorkSerializerEE + + [A] _ZN9grpc_core24StaticMetadataInitCanaryEv + + [A] _ZN9grpc_core25grpc_executor_global_initEv + + [A] _ZN9grpc_core26FakeResolverResponseSetter16SetFailureLockedEv + + [A] _ZN9grpc_core26FakeResolverResponseSetter17SetResponseLockedEv + + [A] _ZN9grpc_core26FakeResolverResponseSetter29SetReresolutionResponseLockedEv + + [A] _ZN9grpc_core26MakeHierarchicalAddressMapB5cxx11ERKN4absl14lts_2020_02_2513InlinedVectorINS_13ServerAddressELm1ESaIS3_EEE + + [A] _ZN9grpc_core27CreateGrpclbBalancerChannelEPKcRK17grpc_channel_args + + [A] _ZN9grpc_core27CreateGrpclbBalancerNameArgEPKc + + [A] _ZN9grpc_core27LoadBalancingPolicyRegistry24ParseLoadBalancingConfigERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core27LoadBalancingPolicyRegistry7Builder34RegisterLoadBalancingPolicyFactoryESt10unique_ptrINS_26LoadBalancingPolicyFactoryESt14default_deleteIS3_EE + + [A] _ZN9grpc_core27MovedCppStringSliceRefCount7DestroyEPv + + [A] _ZN9grpc_core28ResolvingLoadBalancingPolicy20CreateLbPolicyLockedERK17grpc_channel_args + + [A] _ZN9grpc_core28ResolvingLoadBalancingPolicy22ResolvingControlHelper11UpdateStateE23grpc_connectivity_stateSt10unique_ptrINS_19LoadBalancingPolicy16SubchannelPickerESt14default_deleteIS5_EE + + [A] _ZN9grpc_core28ResolvingLoadBalancingPolicy22ResolvingControlHelper13AddTraceEventENS_19LoadBalancingPolicy20ChannelControlHelper13TraceSeverityEN4absl14lts_2020_02_2511string_viewE + + [A] _ZN9grpc_core28ResolvingLoadBalancingPolicy28CreateOrUpdateLbPolicyLockedENS_13RefCountedPtrINS_19LoadBalancingPolicy6ConfigEEENS_8Resolver6ResultE + + [A] _ZN9grpc_core28ResolvingLoadBalancingPolicy44MaybeAddTraceMessagesForAddressChangesLockedEbPN4absl14lts_2020_02_2513InlinedVectorIPKcLm3ESaIS5_EEE + + [A] _ZN9grpc_core28ResolvingLoadBalancingPolicyC1ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_17DefaultDeleteCharEEPNS0_19ChannelConfigHelperE + + [A] _ZN9grpc_core28ResolvingLoadBalancingPolicyC2ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_17DefaultDeleteCharEEPNS0_19ChannelConfigHelperE, aliases _ZN9grpc_core28ResolvingLoadBalancingPolicyC1ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_17DefaultDeleteCharEEPNS0_19ChannelConfigHelperE + + [A] _ZN9grpc_core29FakeResolverResponseGenerator15SetFakeResolverENS_13RefCountedPtrINS_12FakeResolverEEE + + [A] _ZN9grpc_core29FakeResolverResponseGeneratorC1Ev, aliases _ZN9grpc_core29FakeResolverResponseGeneratorC2Ev + + [A] _ZN9grpc_core29FakeResolverResponseGeneratorC2Ev + + [A] _ZN9grpc_core29GetMaxRecvSizeFromChannelArgsEPK17grpc_channel_args + + [A] _ZN9grpc_core29GetMaxSendSizeFromChannelArgsEPK17grpc_channel_args + + [A] _ZN9grpc_core29GrpcLbLoadReportRequestCreateEllllPKN4absl14lts_2020_02_2513InlinedVectorINS_17GrpcLbClientStats14DropTokenCountELm10ESaIS4_EEEP9upb_arena + + [A] _ZN9grpc_core29SetServerBatchMethodAllocatorEP11grpc_serverP21grpc_completion_queueSt8functionIFNS_25ServerBatchCallAllocationEvEE + + [A] _ZN9grpc_core31ModifyGrpclbBalancerChannelArgsERKN4absl14lts_2020_02_2513InlinedVectorINS_13ServerAddressELm1ESaIS3_EEEP17grpc_channel_args + + [A] _ZN9grpc_core32CreateGrpclbBalancerAddressesArgEPKN4absl14lts_2020_02_2513InlinedVectorINS_13ServerAddressELm1ESaIS3_EEE + + [A] _ZN9grpc_core32MultiProducerSingleConsumerQueueD1Ev, aliases _ZN9grpc_core32MultiProducerSingleConsumerQueueD2Ev + + [A] _ZN9grpc_core32MultiProducerSingleConsumerQueueD2Ev + + [A] _ZN9grpc_core33ConnectivityStateWatcherInterface6OrphanEv + + [A] _ZN9grpc_core34SetServerRegisteredMethodAllocatorEP11grpc_serverP21grpc_completion_queuePvSt8functionIFNS_30ServerRegisteredCallAllocationEvEE + + [A] _ZN9grpc_core35FindGrpclbBalancerNameInChannelArgsERK17grpc_channel_args + + [A] _ZN9grpc_core38AsyncConnectivityStateWatcherInterface6NotifyE23grpc_connectivity_state + + [A] _ZN9grpc_core38AsyncConnectivityStateWatcherInterface8Notifier16SendNotificationEPvP10grpc_error + + [A] _ZN9grpc_core40FindGrpclbBalancerAddressesInChannelArgsERK17grpc_channel_args + + [A] _ZN9grpc_core4Json5ParseEN4absl14lts_2020_02_2511string_viewEPP10grpc_error + + [A] _ZN9grpc_core4Json8CopyFromERKS0_ + + [A] _ZN9grpc_core4Json8MoveFromEOS0_ + + [A] _ZN9grpc_core4JsonC1ERKS0_ + + [A] _ZN9grpc_core4JsonC2ERKS0_, aliases _ZN9grpc_core4JsonC1ERKS0_ + + [A] _ZN9grpc_core4JsonD1Ev + + [A] _ZN9grpc_core4JsonD2Ev, aliases _ZN9grpc_core4JsonD1Ev + + [A] _ZN9grpc_core5Arena5AllocEm + + [A] _ZN9grpc_core6XdsApi10DropConfigD0Ev + + [A] _ZN9grpc_core6XdsApi10DropConfigD1Ev, aliases _ZN9grpc_core6XdsApi10DropConfigD2Ev + + [A] _ZN9grpc_core6XdsApi10DropConfigD2Ev + + [A] _ZN9grpc_core6XdsApi16CreateAdsRequestERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt3setIN4absl14lts_2020_02_2511string_viewESt4lessISC_ESaISC_EES8_S8_P10grpc_errorb + + [A] _ZN9grpc_core6XdsApi16CreateLrsRequestESt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ENS0_17ClusterLoadReportESt4lessIS9_ESaIS2_IKS9_SA_EEE + + [A] _ZN9grpc_core6XdsApi16ParseAdsResponseERK10grpc_sliceRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt3setIN4absl14lts_2020_02_2511string_viewESt4lessISF_ESaISF_EESL_SL_PNSE_8optionalINS0_9LdsUpdateEEEPNSM_INS0_9RdsUpdateEEEPSt3mapIS9_NS0_9CdsUpdateESG_IS9_ESaISt4pairISA_SU_EEEPST_IS9_NS0_9EdsUpdateESV_SaISW_ISA_S11_EEEPS9_S16_S16_ + + [A] _ZN9grpc_core6XdsApi16ParseLrsResponseERK10grpc_slicePbPSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessISB_ESaISB_EEPl + + [A] _ZN9grpc_core6XdsApi18PriorityListUpdate11LocalityMap8LocalityD1Ev + + [A] _ZN9grpc_core6XdsApi18PriorityListUpdate11LocalityMap8LocalityD2Ev, aliases _ZN9grpc_core6XdsApi18PriorityListUpdate11LocalityMap8LocalityD1Ev + + [A] _ZN9grpc_core6XdsApi18PriorityListUpdate3AddENS1_11LocalityMap8LocalityE + + [A] _ZN9grpc_core6XdsApi18PriorityListUpdate8ContainsERKNS_13RefCountedPtrINS_15XdsLocalityNameEEE + + [A] _ZN9grpc_core6XdsApi23CreateLrsInitialRequestERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_core6XdsApi9CdsUpdateD1Ev + + [A] _ZN9grpc_core6XdsApi9CdsUpdateD2Ev, aliases _ZN9grpc_core6XdsApi9CdsUpdateD1Ev + + [A] _ZN9grpc_core6XdsApi9EdsUpdateD1Ev, aliases _ZN9grpc_core6XdsApi9EdsUpdateD2Ev + + [A] _ZN9grpc_core6XdsApi9EdsUpdateD2Ev + + [A] _ZN9grpc_core6XdsApi9LdsUpdateD1Ev + + [A] _ZN9grpc_core6XdsApi9LdsUpdateD2Ev, aliases _ZN9grpc_core6XdsApi9LdsUpdateD1Ev + + [A] _ZN9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers13HeaderMatcherD1Ev + + [A] _ZN9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers13HeaderMatcherD2Ev, aliases _ZN9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers13HeaderMatcherD1Ev + + [A] _ZN9grpc_core6XdsApi9RdsUpdate8RdsRouteD1Ev + + [A] _ZN9grpc_core6XdsApi9RdsUpdate8RdsRouteD2Ev, aliases _ZN9grpc_core6XdsApi9RdsUpdate8RdsRouteD1Ev + + [A] _ZN9grpc_core6XdsApiC1EPNS_9XdsClientEPNS_9TraceFlagEPKNS_12XdsBootstrap4NodeE, aliases _ZN9grpc_core6XdsApiC2EPNS_9XdsClientEPNS_9TraceFlagEPKNS_12XdsBootstrap4NodeE + + [A] _ZN9grpc_core6XdsApiC2EPNS_9XdsClientEPNS_9TraceFlagEPKNS_12XdsBootstrap4NodeE + + [A] _ZN9grpc_core7Closure3RunERKNS_13DebugLocationEP12grpc_closureP10grpc_error + + [A] _ZN9grpc_core7ExecCtx3RunERKNS_13DebugLocationEP12grpc_closureP10grpc_error + + [A] _ZN9grpc_core7ExecCtx7RunListERKNS_13DebugLocationEP17grpc_closure_list + + [A] _ZN9grpc_core8Combiner10FinallyRunEP12grpc_closureP10grpc_error + + [A] _ZN9grpc_core8Combiner3RunEP12grpc_closureP10grpc_error + + [A] _ZN9grpc_core8Executor3RunEP12grpc_closureP10grpc_errorNS_12ExecutorTypeENS_15ExecutorJobTypeE + + [A] _ZN9grpc_core8RefCount10RefNonZeroEv + + [A] _ZN9grpc_core8RefCount3RefERKNS_13DebugLocationEPKcl + + [A] _ZN9grpc_core8RefCount3RefEl + + [A] _ZN9grpc_core8RefCount5UnrefERKNS_13DebugLocationEPKc + + [A] _ZN9grpc_core8RefCount5UnrefEv + + [A] _ZN9grpc_core8ResolverC1ESt10shared_ptrINS_14WorkSerializerEESt10unique_ptrINS0_13ResultHandlerESt14default_deleteIS5_EE, aliases _ZN9grpc_core8ResolverC2ESt10shared_ptrINS_14WorkSerializerEESt10unique_ptrINS0_13ResultHandlerESt14default_deleteIS5_EE + + [A] _ZN9grpc_core8ResolverC2ESt10shared_ptrINS_14WorkSerializerEESt10unique_ptrINS0_13ResultHandlerESt14default_deleteIS5_EE + + [A] _ZN9grpc_core8channelz10ServerNode14AddChildSocketENS_13RefCountedPtrINS0_10SocketNodeEEE + + [A] _ZN9grpc_core8channelz10ServerNode17RemoveChildSocketEl + + [A] _ZN9grpc_core8channelz10ServerNode19RenderServerSocketsB5cxx11Ell + + [A] _ZN9grpc_core8channelz10ServerNode20AddChildListenSocketENS_13RefCountedPtrINS0_16ListenSocketNodeEEE + + [A] _ZN9grpc_core8channelz10ServerNode23RemoveChildListenSocketEl + + [A] _ZN9grpc_core8channelz10SocketNodeC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_, aliases _ZN9grpc_core8channelz10SocketNodeC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_ + + [A] _ZN9grpc_core8channelz10SocketNodeC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_ + + [A] _ZN9grpc_core8channelz11ChannelNode17PopulateChildRefsEPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4JsonESt4lessIS8_ESaISt4pairIKS8_S9_EEE + + [A] _ZN9grpc_core8channelz11ChannelNode39GetChannelConnectivityStateChangeStringE23grpc_connectivity_state + + [A] _ZN9grpc_core8channelz11ChannelNodeC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEml + + [A] _ZN9grpc_core8channelz11ChannelNodeC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEml, aliases _ZN9grpc_core8channelz11ChannelNodeC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEml + + [A] _ZN9grpc_core8channelz14SubchannelNode14SetChildSocketENS_13RefCountedPtrINS0_10SocketNodeEEE + + [A] _ZN9grpc_core8channelz14SubchannelNode23UpdateConnectivityStateE23grpc_connectivity_state + + [A] _ZN9grpc_core8channelz14SubchannelNodeC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEm + + [A] _ZN9grpc_core8channelz14SubchannelNodeC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEm, aliases _ZN9grpc_core8channelz14SubchannelNodeC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEm + + [A] _ZN9grpc_core8channelz16ChannelzRegistry18InternalGetServersB5cxx11El + + [A] _ZN9grpc_core8channelz16ChannelzRegistry22InternalGetTopChannelsB5cxx11El + + [A] _ZN9grpc_core8channelz16ListenSocketNodeC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_, aliases _ZN9grpc_core8channelz16ListenSocketNodeC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ + + [A] _ZN9grpc_core8channelz16ListenSocketNodeC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ + + [A] _ZN9grpc_core8channelz18CallCountingHelper18PopulateCallCountsEPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4JsonESt4lessIS8_ESaISt4pairIKS8_S9_EEE + + [A] _ZN9grpc_core8channelz8BaseNode16RenderJsonStringB5cxx11Ev + + [A] _ZN9grpc_core8channelz8BaseNodeC1ENS1_10EntityTypeENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, aliases _ZN9grpc_core8channelz8BaseNodeC2ENS1_10EntityTypeENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_core8channelz8BaseNodeC2ENS1_10EntityTypeENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_core8internal32ClientChannelServiceConfigParser17ParseGlobalParamsERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core8internal32ClientChannelServiceConfigParser20ParsePerMethodParamsERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState11StopLrsCallEv + + [A] _ZN9grpc_core9XdsClient12ChannelState11UnsubscribeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_b + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState11UnsubscribeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_b + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13OnRequestSentEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceState13OnTimerLockedEP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceState6OrphanEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceState7OnTimerEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateD0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateD1Ev, aliases _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateD2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateD2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState15AcceptCdsUpdateESt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_6XdsApi9CdsUpdateESt4lessIS9_ESaISt4pairIKS9_SB_EEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState15AcceptEdsUpdateESt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_6XdsApi9EdsUpdateESt4lessIS9_ESaISt4pairIKS9_SB_EEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState15AcceptLdsUpdateEN4absl14lts_2020_02_258optionalINS_6XdsApi9LdsUpdateEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState15AcceptRdsUpdateEN4absl14lts_2020_02_258optionalINS_6XdsApi9RdsUpdateEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState16OnStatusReceivedEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState17SendMessageLockedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState18OnResponseReceivedEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState19OnRequestSentLockedEP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState22OnStatusReceivedLockedEP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState23ResourceNamesForRequestERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState24OnResponseReceivedLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState6OrphanEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState9SubscribeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_ + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallStateC1ENS_13RefCountedPtrINS1_13RetryableCallIS2_EEEE, aliases _ZN9grpc_core9XdsClient12ChannelState12AdsCallStateC2ENS_13RefCountedPtrINS1_13RetryableCallIS2_EEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallStateC2ENS_13RefCountedPtrINS1_13RetryableCallIS2_EEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallStateD0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallStateD1Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallStateD2Ev, aliases _ZN9grpc_core9XdsClient12ChannelState12AdsCallStateD1Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState16OnStatusReceivedEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState18OnResponseReceivedEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState20OnInitialRequestSentEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState22OnStatusReceivedLockedEP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState24OnResponseReceivedLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState25MaybeStartReportingLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState26OnInitialRequestSentLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState6OrphanEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8Reporter12OnReportDoneEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8Reporter16SendReportLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8Reporter17OnNextReportTimerEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8Reporter18OnReportDoneLockedEP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8Reporter23OnNextReportTimerLockedEP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8Reporter24ScheduleNextReportLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8Reporter6OrphanEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8ReporterD0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8ReporterD1Ev, aliases _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8ReporterD2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8ReporterD2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallStateC1ENS_13RefCountedPtrINS1_13RetryableCallIS2_EEEE, aliases _ZN9grpc_core9XdsClient12ChannelState12LrsCallStateC2ENS_13RefCountedPtrINS1_13RetryableCallIS2_EEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallStateC2ENS_13RefCountedPtrINS1_13RetryableCallIS2_EEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallStateD0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallStateD1Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallStateD2Ev, aliases _ZN9grpc_core9XdsClient12ChannelState12LrsCallStateD1Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12StateWatcher25OnConnectivityStateChangeE23grpc_connectivity_state + + [A] _ZN9grpc_core9XdsClient12ChannelState12StateWatcherD0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12StateWatcherD1Ev, aliases _ZN9grpc_core9XdsClient12ChannelState12StateWatcherD2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12StateWatcherD2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEE12OnRetryTimerEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEE18StartNewCallLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEE21StartRetryTimerLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEE6OrphanEv + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEED0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEED1Ev, aliases _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEED2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEED2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEE12OnRetryTimerEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEE18StartNewCallLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEE21StartRetryTimerLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEE6OrphanEv + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEED0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEED1Ev, aliases _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEED2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEED2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState17MaybeStartLrsCallEv + + [A] _ZN9grpc_core9XdsClient12ChannelState28StartConnectivityWatchLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState29CancelConnectivityWatchLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState6OrphanEv + + [A] _ZN9grpc_core9XdsClient12ChannelState9SubscribeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ + + [A] _ZN9grpc_core9XdsClient12ChannelStateC1ENS_13RefCountedPtrIS0_EEP12grpc_channel, aliases _ZN9grpc_core9XdsClient12ChannelStateC2ENS_13RefCountedPtrIS0_EEP12grpc_channel + + [A] _ZN9grpc_core9XdsClient12ChannelStateC2ENS_13RefCountedPtrIS0_EEP12grpc_channel + + [A] _ZN9grpc_core9XdsClient12ChannelStateD0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelStateD1Ev + + [A] _ZN9grpc_core9XdsClient12ChannelStateD2Ev, aliases _ZN9grpc_core9XdsClient12ChannelStateD1Ev + + [A] _ZN9grpc_core9XdsClient12ResetBackoffEv + + [A] _ZN9grpc_core9XdsClient13ChannelArgCmpEPvS1_ + + [A] _ZN9grpc_core9XdsClient13NotifyOnErrorEP10grpc_error + + [A] _ZN9grpc_core9XdsClient14ChannelArgCopyEPv + + [A] _ZN9grpc_core9XdsClient15LoadReportStateD1Ev, aliases _ZN9grpc_core9XdsClient15LoadReportStateD2Ev + + [A] _ZN9grpc_core9XdsClient15LoadReportStateD2Ev + + [A] _ZN9grpc_core9XdsClient16WatchClusterDataEN4absl14lts_2020_02_2511string_viewESt10unique_ptrINS0_23ClusterWatcherInterfaceESt14default_deleteIS5_EE + + [A] _ZN9grpc_core9XdsClient17ChannelArgDestroyEPv + + [A] _ZN9grpc_core9XdsClient17WatchEndpointDataEN4absl14lts_2020_02_2511string_viewESt10unique_ptrINS0_24EndpointWatcherInterfaceESt14default_deleteIS5_EE + + [A] _ZN9grpc_core9XdsClient18GetFromChannelArgsERK17grpc_channel_args + + [A] _ZN9grpc_core9XdsClient19AddClusterDropStatsEN4absl14lts_2020_02_2511string_viewES3_S3_ + + [A] _ZN9grpc_core9XdsClient19CreateServiceConfigERKNS_6XdsApi9RdsUpdateEPNS_13RefCountedPtrINS_13ServiceConfigEEE + + [A] _ZN9grpc_core9XdsClient21RemoveFromChannelArgsERK17grpc_channel_args + + [A] _ZN9grpc_core9XdsClient22CancelClusterDataWatchEN4absl14lts_2020_02_2511string_viewEPNS0_23ClusterWatcherInterfaceEb + + [A] _ZN9grpc_core9XdsClient22RemoveClusterDropStatsEN4absl14lts_2020_02_2511string_viewES3_S3_PNS_19XdsClusterDropStatsE + + [A] _ZN9grpc_core9XdsClient23AddClusterLocalityStatsEN4absl14lts_2020_02_2511string_viewES3_S3_NS_13RefCountedPtrINS_15XdsLocalityNameEEE + + [A] _ZN9grpc_core9XdsClient23BuildLoadReportSnapshotEbRKSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS7_ESaIS7_EE + + [A] _ZN9grpc_core9XdsClient23CancelEndpointDataWatchEN4absl14lts_2020_02_2511string_viewEPNS0_24EndpointWatcherInterfaceEb + + [A] _ZN9grpc_core9XdsClient26RemoveClusterLocalityStatsEN4absl14lts_2020_02_2511string_viewES3_S3_RKNS_13RefCountedPtrINS_15XdsLocalityNameEEEPNS_23XdsClusterLocalityStatsE + + [A] _ZN9grpc_core9XdsClient26WeightedClustersActionNameB5cxx11ERKSt6vectorINS_6XdsApi9RdsUpdate8RdsRoute13ClusterWeightESaIS5_EE + + [A] _ZN9grpc_core9XdsClient29UpdateWeightedClusterIndexMapERKNS_6XdsApi9RdsUpdateE + + [A] _ZN9grpc_core9XdsClient6OrphanEv + + [A] _ZN9grpc_core9XdsClientC1ESt10shared_ptrINS_14WorkSerializerEEP16grpc_pollset_setN4absl14lts_2020_02_2511string_viewESt10unique_ptrINS0_29ServiceConfigWatcherInterfaceESt14default_deleteISA_EERK17grpc_channel_argsPP10grpc_error + + [A] _ZN9grpc_core9XdsClientC2ESt10shared_ptrINS_14WorkSerializerEEP16grpc_pollset_setN4absl14lts_2020_02_2511string_viewESt10unique_ptrINS0_29ServiceConfigWatcherInterfaceESt14default_deleteISA_EERK17grpc_channel_argsPP10grpc_error, aliases _ZN9grpc_core9XdsClientC1ESt10shared_ptrINS_14WorkSerializerEEP16grpc_pollset_setN4absl14lts_2020_02_2511string_viewESt10unique_ptrINS0_29ServiceConfigWatcherInterfaceESt14default_deleteISA_EERK17grpc_channel_argsPP10grpc_error + + [A] _ZN9grpc_core9XdsClientD0Ev + + [A] _ZN9grpc_core9XdsClientD1Ev, aliases _ZN9grpc_core9XdsClientD2Ev + + [A] _ZN9grpc_core9XdsClientD2Ev + + [A] _ZNK4absl14lts_2020_02_2516strings_internal8SplitterINS1_13MaxSplitsImplINS0_6ByCharEEENS0_10AllowEmptyEE18ConvertToContainerISt6vectorINS0_11string_viewESaISA_EESA_Lb0EEclERKS7_ + + [A] _ZNK9grpc_core10ThreadPool11thread_nameEv + + [A] _ZNK9grpc_core10ThreadPool13pool_capacityEv + + [A] _ZNK9grpc_core10ThreadPool14thread_optionsEv + + [A] _ZNK9grpc_core10ThreadPool20num_pending_closuresEv + + [A] _ZNK9grpc_core12GrpcLbServereqERKS0_ + + [A] _ZNK9grpc_core13ServerAddress3CmpERKS0_ + + [A] _ZNK9grpc_core13ServiceConfig27GetMethodParsedConfigVectorERK10grpc_slice + + [A] _ZNK9grpc_core14ConfigSelector14MakeChannelArgEv + + [A] _ZNK9grpc_core15InfLenFIFOQueue5countEv + + [A] _ZNK9grpc_core15XdsLocalityName7CompareERKS0_ + + [A] _ZNK9grpc_core18ChildPolicyHandler25CreateLoadBalancingPolicyEPKcNS_19LoadBalancingPolicy4ArgsE + + [A] _ZNK9grpc_core18ChildPolicyHandler37ConfigChangeRequiresNewPolicyInstanceEPNS_19LoadBalancingPolicy6ConfigES3_ + + [A] _ZNK9grpc_core18ChildPolicyHandler4nameEv + + [A] _ZNK9grpc_core24ConnectivityStateTracker5stateEv + + [A] _ZNK9grpc_core28ResolvingLoadBalancingPolicy35ConcatenateAndAddChannelTraceLockedERKN4absl14lts_2020_02_2513InlinedVectorIPKcLm3ESaIS5_EEE + + [A] _ZNK9grpc_core4Json4DumpB5cxx11Ei + + [A] _ZNK9grpc_core6XdsApi10DropConfig10ShouldDropEPPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZNK9grpc_core6XdsApi18PriorityListUpdate4FindEj + + [A] _ZNK9grpc_core6XdsApi18PriorityListUpdateeqERKS1_ + + [A] _ZNK9grpc_core6XdsApi9RdsUpdate8RdsRoute13ClusterWeight8ToStringB5cxx11Ev + + [A] _ZNK9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers11PathMatcher8ToStringB5cxx11Ev + + [A] _ZNK9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers13HeaderMatcher8ToStringB5cxx11Ev + + [A] _ZNK9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers8ToStringB5cxx11Ev + + [A] _ZNK9grpc_core6XdsApi9RdsUpdate8RdsRoute8ToStringB5cxx11Ev + + [A] _ZNK9grpc_core6XdsApi9RdsUpdate8ToStringB5cxx11Ev + + [A] _ZNK9grpc_core8channelz12ChannelTrace10TraceEvent16RenderTraceEventEv + + [A] _ZNK9grpc_core9XdsClient12ChannelState12AdsCallState22HasSubscribedResourcesEv + + [A] _ZNK9grpc_core9XdsClient12ChannelState12AdsCallState22IsCurrentCallOnChannelEv + + [A] _ZNK9grpc_core9XdsClient12ChannelState12LrsCallState22IsCurrentCallOnChannelEv + + [A] _ZNK9grpc_core9XdsClient12ChannelState16HasActiveAdsCallEv + + [A] _ZNK9grpc_core9XdsClient12ChannelState9ads_calldEv + + [A] _ZNK9grpc_core9XdsClient12ChannelState9lrs_calldEv + + [A] _ZNK9grpc_core9XdsClient14MakeChannelArgEv + + [A] _ZNKSt10_HashtableI10grpc_sliceSt4pairIKS0_PKN4absl14lts_2020_02_2513InlinedVectorISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS9_EELm4ESaISC_EEEESaISH_ENSt8__detail10_Select1stESt8equal_toIS0_ENS7_9SliceHashENSJ_18_Mod_range_hashingENSJ_20_Default_ranged_hashENSJ_20_Prime_rehash_policyENSJ_17_Hashtable_traitsILb1ELb0ELb1EEEE19_M_find_before_nodeEmRS2_m + + [A] _ZNKSt10_HashtableI10grpc_sliceSt4pairIKS0_PKN4absl14lts_2020_02_2513InlinedVectorISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS9_EELm4ESaISC_EEEESaISH_ENSt8__detail10_Select1stESt8equal_toIS0_ENS7_9SliceHashENSJ_18_Mod_range_hashingENSJ_20_Default_ranged_hashENSJ_20_Prime_rehash_policyENSJ_17_Hashtable_traitsILb1ELb0ELb1EEEE4findERS2_ + + [A] _ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_M_check_lenEmPKc + + [A] _ZNKSt8_Rb_treeIN4absl14lts_2020_02_2511string_viewES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE4findERKS2_ + + [A] _ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core13RefCountedPtrINS8_19LoadBalancingPolicy6ConfigEEEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE4findERS7_ + + [A] _ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE4findERS7_ + + [A] _ZNSt10_HashtableI10grpc_sliceSt4pairIKS0_PKN4absl14lts_2020_02_2513InlinedVectorISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS9_EELm4ESaISC_EEEESaISH_ENSt8__detail10_Select1stESt8equal_toIS0_ENS7_9SliceHashENSJ_18_Mod_range_hashingENSJ_20_Default_ranged_hashENSJ_20_Prime_rehash_policyENSJ_17_Hashtable_traitsILb1ELb0ELb1EEEE9_M_rehashEmRKm + + [A] _ZNSt10_HashtableI10grpc_sliceSt4pairIKS0_PKN4absl14lts_2020_02_2513InlinedVectorISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS9_EELm4ESaISC_EEEESaISH_ENSt8__detail10_Select1stESt8equal_toIS0_ENS7_9SliceHashENSJ_18_Mod_range_hashingENSJ_20_Default_ranged_hashENSJ_20_Prime_rehash_policyENSJ_17_Hashtable_traitsILb1ELb0ELb1EEEED1Ev + + [A] _ZNSt10_HashtableI10grpc_sliceSt4pairIKS0_PKN4absl14lts_2020_02_2513InlinedVectorISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS9_EELm4ESaISC_EEEESaISH_ENSt8__detail10_Select1stESt8equal_toIS0_ENS7_9SliceHashENSJ_18_Mod_range_hashingENSJ_20_Default_ranged_hashENSJ_20_Prime_rehash_policyENSJ_17_Hashtable_traitsILb1ELb0ELb1EEEED2Ev, aliases _ZNSt10_HashtableI10grpc_sliceSt4pairIKS0_PKN4absl14lts_2020_02_2513InlinedVectorISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS9_EELm4ESaISC_EEEESaISH_ENSt8__detail10_Select1stESt8equal_toIS0_ENS7_9SliceHashENSJ_18_Mod_range_hashingENSJ_20_Default_ranged_hashENSJ_20_Prime_rehash_policyENSJ_17_Hashtable_traitsILb1ELb0ELb1EEEED1Ev + + [A] _ZNSt10_HashtableIjSt4pairIKjPN9grpc_core21TcpZerocopySendRecordEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_insert_unique_nodeEmmPNS7_10_Hash_nodeIS5_Lb0EEE + + [A] _ZNSt10_HashtableIjSt4pairIKjPN9grpc_core21TcpZerocopySendRecordEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_rehashEmRKm + + [A] _ZNSt10_HashtableIjSt4pairIKjPN9grpc_core21TcpZerocopySendRecordEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEED1Ev + + [A] _ZNSt10_HashtableIjSt4pairIKjPN9grpc_core21TcpZerocopySendRecordEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEED2Ev, aliases _ZNSt10_HashtableIjSt4pairIKjPN9grpc_core21TcpZerocopySendRecordEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEED1Ev + + [A] _ZNSt10unique_ptrIN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core17GrpcLbClientStats14DropTokenCountELm10ESaIS5_EEESt14default_deleteIS7_EED1Ev + + [A] _ZNSt10unique_ptrIN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core17GrpcLbClientStats14DropTokenCountELm10ESaIS5_EEESt14default_deleteIS7_EED2Ev, aliases _ZNSt10unique_ptrIN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core17GrpcLbClientStats14DropTokenCountELm10ESaIS5_EEESt14default_deleteIS7_EED1Ev + + [A] _ZNSt10unique_ptrIN9grpc_core12XdsBootstrapESt14default_deleteIS1_EED1Ev, aliases _ZNSt10unique_ptrIN9grpc_core12XdsBootstrapESt14default_deleteIS1_EED2Ev + + [A] _ZNSt10unique_ptrIN9grpc_core12XdsBootstrapESt14default_deleteIS1_EED2Ev + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_core38AsyncConnectivityStateWatcherInterface8NotifierC4ENS1_13RefCountedPtrIS2_EE23grpc_connectivity_stateRKSt10shared_ptrINS1_14WorkSerializerEEEUlvE_E10_M_managerERSt9_Any_dataRKSE_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceState7OnTimerEPvP10grpc_errorEUlvE_E10_M_managerERSt9_Any_dataRKSB_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_core9XdsClient12ChannelState13RetryableCallINS3_12AdsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_E10_M_managerERSt9_Any_dataRKSC_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_core9XdsClient12ChannelState13RetryableCallINS3_12LrsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_E10_M_managerERSt9_Any_dataRKSC_St18_Manager_operation + + [A] _ZNSt15_Sp_counted_ptrIDnLN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv + + [A] _ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv + + [A] _ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_releaseEv + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_core38AsyncConnectivityStateWatcherInterface8NotifierC4ENS1_13RefCountedPtrIS2_EE23grpc_connectivity_stateRKSt10shared_ptrINS1_14WorkSerializerEEEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceState7OnTimerEPvP10grpc_errorEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_core9XdsClient12ChannelState13RetryableCallINS3_12AdsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_core9XdsClient12ChannelState13RetryableCallINS3_12LrsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt20__uninitialized_copyILb0EE13__uninit_copyISt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEES9_EET0_T_SC_SB_ + + [A] _ZNSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv + + [A] _ZNSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv + + [A] _ZNSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE14_M_get_deleterERKSt9type_info + + [A] _ZNSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EED0Ev + + [A] _ZNSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EED1Ev, aliases _ZNSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EED2Ev + + [A] _ZNSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EED2Ev + + [A] _ZNSt3_V28__rotateIPSt10unique_ptrIN9grpc_core17HandshakerFactoryESt14default_deleteIS3_EEEET_S8_S8_S8_St26random_access_iterator_tag + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core4JsonESt4lessIS5_ESaISt4pairIKS5_S7_EEEC1ESt16initializer_listISC_ERKS9_RKSD_, aliases _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core4JsonESt4lessIS5_ESaISt4pairIKS5_S7_EEEC2ESt16initializer_listISC_ERKS9_RKSD_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core4JsonESt4lessIS5_ESaISt4pairIKS5_S7_EEEC2ESt16initializer_listISC_ERKS9_RKSD_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core4JsonESt4lessIS5_ESaISt4pairIKS5_S7_EEEixEOS5_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateESt4lessIS5_ESaISt4pairIKS5_SA_EEEixEOS5_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateESt4lessIS5_ESaISt4pairIKS5_SA_EEEixERSE_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core9XdsClient12ClusterStateESt4lessIS5_ESaISt4pairIKS5_S8_EEEixERSC_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core9XdsClient13EndpointStateESt4lessIS5_ESaISt4pairIKS5_S8_EEEixERSC_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateENS7_16OrphanableDeleteEESt4lessIS5_ESaISt4pairIKS5_SD_EEEixERSH_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmSt4lessIS5_ESaISt4pairIKS5_mEEEixERS9_ + + [A] _ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core4JsonEED1Ev, aliases _ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core4JsonEED2Ev + + [A] _ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core4JsonEED2Ev + + [A] _ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED1Ev + + [A] _ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED2Ev, aliases _ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED1Ev + + [A] _ZNSt5dequeIN9grpc_core10Subchannel33ConnectivityStateWatcherInterface23ConnectivityStateChangeESaIS3_EED1Ev, aliases _ZNSt5dequeIN9grpc_core10Subchannel33ConnectivityStateWatcherInterface23ConnectivityStateChangeESaIS3_EED2Ev + + [A] _ZNSt5dequeIN9grpc_core10Subchannel33ConnectivityStateWatcherInterface23ConnectivityStateChangeESaIS3_EED2Ev + + [A] _ZNSt6vectorIN4absl14lts_2020_02_2511string_viewESaIS2_EE15_M_range_insertIPZNKS1_16strings_internal8SplitterINS6_13MaxSplitsImplINS1_6ByCharEEENS1_10AllowEmptyEE18ConvertToContainerIS4_S2_Lb0EEclERKSC_E8raw_viewEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EET_SN_St20forward_iterator_tag + + [A] _ZNSt6vectorIN9grpc_core12GrpcLbServerESaIS1_EE14_M_emplace_auxIJEEEN9__gnu_cxx17__normal_iteratorIPS1_S3_EENS6_IPKS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core12GrpcLbServerESaIS1_EE17_M_realloc_insertIJEEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core23XdsClusterLocalityStats8SnapshotESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EE12emplace_backIJS1_EEEvDpOT_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EE12emplace_backIJSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_St4lessISB_ESaISt4pairIKSB_S1_EEEEEEvDpOT_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EE17_M_realloc_insertIJEEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EE17_M_realloc_insertIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EE17_M_realloc_insertIJSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_St4lessISB_ESaISt4pairIKSB_S1_EEEEEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EEC1ESt16initializer_listIS1_ERKS2_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EEC2ESt16initializer_listIS1_ERKS2_, aliases _ZNSt6vectorIN9grpc_core4JsonESaIS1_EEC1ESt16initializer_listIS1_ERKS2_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EED1Ev + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EED2Ev, aliases _ZNSt6vectorIN9grpc_core4JsonESaIS1_EED1Ev + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EEaSERKS3_ + + [A] _ZNSt6vectorIN9grpc_core6XdsApi9RdsUpdate8RdsRoute13ClusterWeightESaIS4_EE17_M_realloc_insertIJS4_EEEvN9__gnu_cxx17__normal_iteratorIPS4_S6_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers13HeaderMatcherESaIS5_EE17_M_realloc_insertIJEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers13HeaderMatcherESaIS5_EE17_M_realloc_insertIJS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core6XdsApi9RdsUpdate8RdsRouteESaIS3_EE17_M_realloc_insertIJS3_EEEvN9__gnu_cxx17__normal_iteratorIPS3_S5_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core6XdsApi9RdsUpdate8RdsRouteESaIS3_EED1Ev, aliases _ZNSt6vectorIN9grpc_core6XdsApi9RdsUpdate8RdsRouteESaIS3_EED2Ev + + [A] _ZNSt6vectorIN9grpc_core6XdsApi9RdsUpdate8RdsRouteESaIS3_EED2Ev + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA10_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA12_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA13_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA15_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA16_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA19_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA21_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA25_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA28_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA29_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA2_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA35_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA4_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA6_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA8_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJS5_EEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA10_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA12_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA13_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA15_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA16_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA17_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA19_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA21_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA22_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA23_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA24_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA25_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA26_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA27_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA28_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA29_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA2_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA32_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA33_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA35_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA4_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA6_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA7_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA8_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA9_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRKS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED1Ev, aliases _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev + + [A] _ZNSt6vectorIP10grpc_errorSaIS1_EE12emplace_backIJS1_EEEvDpOT_ + + [A] _ZNSt6vectorIP10grpc_errorSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIP10grpc_errorSaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIP12grpc_channelSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIP12grpc_pollsetSaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIP21grpc_completion_queueSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIPN9grpc_core4JsonESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_ + + [A] _ZNSt6vectorISt10unique_ptrIN9grpc_core20ProxyMapperInterfaceESt14default_deleteIS2_EESaIS5_EE17_M_realloc_insertIJS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_ + + [A] _ZNSt8_Rb_treeIN4absl14lts_2020_02_2511string_viewES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE24_M_get_insert_unique_posERKS2_ + + [A] _ZNSt8_Rb_treeIN4absl14lts_2020_02_2511string_viewES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E + + [A] _ZNSt8_Rb_treeIN4absl14lts_2020_02_2511string_viewESt4pairIKS2_dESt10_Select1stIS5_EN9grpc_core10StringLessESaIS5_EE24_M_get_insert_unique_posERS4_ + + [A] _ZNSt8_Rb_treeIN4absl14lts_2020_02_2511string_viewESt4pairIKS2_dESt10_Select1stIS5_EN9grpc_core10StringLessESaIS5_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_ + + [A] _ZNSt8_Rb_treeIN4absl14lts_2020_02_2511string_viewESt4pairIKS2_dESt10_Select1stIS5_EN9grpc_core10StringLessESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_23XdsClusterLocalityStats8SnapshotEESt10_Select1stIS8_ENS2_4LessESaIS8_EE24_M_get_insert_unique_posERS5_ + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_23XdsClusterLocalityStats8SnapshotEESt10_Select1stIS8_ENS2_4LessESaIS8_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS5_ + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_23XdsClusterLocalityStats8SnapshotEESt10_Select1stIS8_ENS2_4LessESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_6XdsApi18PriorityListUpdate11LocalityMap8LocalityEESt10_Select1stISA_ENS2_4LessESaISA_EE17_M_emplace_uniqueIJRS3_S9_EEES4_ISt17_Rb_tree_iteratorISA_EbEDpOT_ + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_6XdsApi18PriorityListUpdate11LocalityMap8LocalityEESt10_Select1stISA_ENS2_4LessESaISA_EE7_M_copyINSF_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISA_EPKSJ_PSt18_Rb_tree_node_baseRT_ + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_6XdsApi18PriorityListUpdate11LocalityMap8LocalityEESt10_Select1stISA_ENS2_4LessESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_9XdsClient15LoadReportState13LocalityStateEESt10_Select1stIS9_ENS2_4LessESaIS9_EE24_M_get_insert_unique_posERS5_ + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_9XdsClient15LoadReportState13LocalityStateEESt10_Select1stIS9_ENS2_4LessESaIS9_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS9_ERS5_ + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_9XdsClient15LoadReportState13LocalityStateEESt10_Select1stIS9_ENS2_4LessESaIS9_EE8_M_eraseEPSt13_Rb_tree_nodeIS9_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE11equal_rangeERKS5_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSD_PSt13_Rb_tree_nodeIS5_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE16_M_insert_uniqueIRKS5_EESt4pairISt17_Rb_tree_iteratorIS5_EbEOT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE17_M_emplace_uniqueIJRKPKcRKmEEESt4pairISt17_Rb_tree_iteratorIS5_EbEDpOT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE17_M_emplace_uniqueIJS5_EEESt4pairISt17_Rb_tree_iteratorIS5_EbEDpOT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE24_M_get_insert_unique_posERKS5_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE4findERKS5_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE5eraseERKS5_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N4absl14lts_2020_02_2513InlinedVectorIN9grpc_core13ServerAddressELm1ESaISC_EEEESt10_Select1stISF_ESt4lessIS5_ESaISF_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N4absl14lts_2020_02_2513InlinedVectorIN9grpc_core13ServerAddressELm1ESaISC_EEEESt10_Select1stISF_ESt4lessIS5_ESaISF_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISF_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N4absl14lts_2020_02_2513InlinedVectorIN9grpc_core13ServerAddressELm1ESaISC_EEEESt10_Select1stISF_ESt4lessIS5_ESaISF_EE8_M_eraseEPSt13_Rb_tree_nodeISF_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core13RefCountedPtrINS8_19LoadBalancingPolicy6ConfigEEEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core13RefCountedPtrINS8_19LoadBalancingPolicy6ConfigEEEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISD_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core13RefCountedPtrINS8_19LoadBalancingPolicy6ConfigEEEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE8_M_eraseEPSt13_Rb_tree_nodeISD_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core23XdsClusterLocalityStats13BackendMetricEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core23XdsClusterLocalityStats13BackendMetricEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core23XdsClusterLocalityStats13BackendMetricEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSI_PSt13_Rb_tree_nodeISA_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISA_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE4findERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_copyINSG_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeISA_EPKSK_PSt18_Rb_tree_node_baseRT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EEaSERKSG_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core6XdsApi9CdsUpdateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_emplace_uniqueIJS5_SA_EEES6_ISt17_Rb_tree_iteratorISB_EbEDpOT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core6XdsApi9CdsUpdateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core6XdsApi9EdsUpdateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_emplace_uniqueIJS5_SA_EEES6_ISt17_Rb_tree_iteratorISB_EbEDpOT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core6XdsApi9EdsUpdateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE11equal_rangeERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSL_PSt13_Rb_tree_nodeISD_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISD_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE5eraseERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE8_M_eraseEPSt13_Rb_tree_nodeISD_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ClusterStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11equal_rangeERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ClusterStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSJ_PSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ClusterStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ClusterStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ClusterStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5eraseERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ClusterStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient13EndpointStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11equal_rangeERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient13EndpointStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSJ_PSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient13EndpointStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient13EndpointStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient13EndpointStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5eraseERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient13EndpointStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient16ClusterNamesInfoEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient16ClusterNamesInfoEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient16ClusterNamesInfoEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE4findERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient16ClusterNamesInfoEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S5_ESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S5_ESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S5_ESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateENS9_16OrphanableDeleteEEESt10_Select1stISG_ESt4lessIS5_ESaISG_EE11equal_rangeERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateENS9_16OrphanableDeleteEEESt10_Select1stISG_ESt4lessIS5_ESaISG_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSO_PSt13_Rb_tree_nodeISG_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateENS9_16OrphanableDeleteEEESt10_Select1stISG_ESt4lessIS5_ESaISG_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateENS9_16OrphanableDeleteEEESt10_Select1stISG_ESt4lessIS5_ESaISG_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISG_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateENS9_16OrphanableDeleteEEESt10_Select1stISG_ESt4lessIS5_ESaISG_EE8_M_eraseEPSt13_Rb_tree_nodeISG_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_mESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_mESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_mESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E + + [A] _ZNSt8_Rb_treeIPKcSt4pairIKS1_N4absl14lts_2020_02_2511string_viewEESt10_Select1stIS7_ESt4lessIS1_ESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E + + [A] _ZNSt8_Rb_treeIPKcSt4pairIKS1_St10unique_ptrIN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcherENS5_16OrphanableDeleteEEESt10_Select1stISB_ENS5_10StringLessESaISB_EE24_M_get_insert_unique_posERS3_ + + [A] _ZNSt8_Rb_treeIPKcSt4pairIKS1_St10unique_ptrIN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcherENS5_16OrphanableDeleteEEESt10_Select1stISB_ENS5_10StringLessESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS3_ + + [A] _ZNSt8_Rb_treeIPKcSt4pairIKS1_St10unique_ptrIN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcherENS5_16OrphanableDeleteEEESt10_Select1stISB_ENS5_10StringLessESaISB_EE4findERS3_ + + [A] _ZNSt8_Rb_treeIPKcSt4pairIKS1_St10unique_ptrIN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcherENS5_16OrphanableDeleteEEESt10_Select1stISB_ENS5_10StringLessESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core10Subchannel33ConnectivityStateWatcherInterfaceESt4pairIKS3_NS0_13RefCountedPtrIS2_EEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core10SubchannelESt4pairIKS2_iESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE17_M_emplace_uniqueIJRS2_iEEES3_ISt17_Rb_tree_iteratorIS5_EbEDpOT_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core10SubchannelESt4pairIKS2_iESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core15XdsLocalityNameES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core15XdsLocalityNameESt4pairIKS2_mESt10_Select1stIS5_ENS1_4LessESaIS5_EE11equal_rangeERS4_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core15XdsLocalityNameESt4pairIKS2_mESt10_Select1stIS5_ENS1_4LessESaIS5_EE24_M_get_insert_unique_posERS4_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core15XdsLocalityNameESt4pairIKS2_mESt10_Select1stIS5_ENS1_4LessESaIS5_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core15XdsLocalityNameESt4pairIKS2_mESt10_Select1stIS5_ENS1_4LessESaIS5_EE5eraseERS4_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core15XdsLocalityNameESt4pairIKS2_mESt10_Select1stIS5_ENS1_4LessESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core19XdsClusterDropStatsES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE16_M_insert_uniqueIS2_EESt4pairISt17_Rb_tree_iteratorIS2_EbEOT_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core19XdsClusterDropStatsES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core23XdsClusterLocalityStatsES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE16_M_insert_uniqueIS2_EESt4pairISt17_Rb_tree_iteratorIS2_EbEOT_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core23XdsClusterLocalityStatsES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core33ConnectivityStateWatcherInterfaceESt4pairIKS2_St10unique_ptrIS1_NS0_16OrphanableDeleteEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE16_M_insert_uniqueIS3_IS2_S7_EEES3_ISt17_Rb_tree_iteratorIS8_EbEOT_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core33ConnectivityStateWatcherInterfaceESt4pairIKS2_St10unique_ptrIS1_NS0_16OrphanableDeleteEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core9XdsClient23ClusterWatcherInterfaceESt4pairIKS3_St10unique_ptrIS2_St14default_deleteIS2_EEESt10_Select1stISA_ESt4lessIS3_ESaISA_EE24_M_get_insert_unique_posERS5_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core9XdsClient23ClusterWatcherInterfaceESt4pairIKS3_St10unique_ptrIS2_St14default_deleteIS2_EEESt10_Select1stISA_ESt4lessIS3_ESaISA_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISA_ERS5_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core9XdsClient23ClusterWatcherInterfaceESt4pairIKS3_St10unique_ptrIS2_St14default_deleteIS2_EEESt10_Select1stISA_ESt4lessIS3_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core9XdsClient24EndpointWatcherInterfaceESt4pairIKS3_St10unique_ptrIS2_St14default_deleteIS2_EEESt10_Select1stISA_ESt4lessIS3_ESaISA_EE24_M_get_insert_unique_posERS5_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core9XdsClient24EndpointWatcherInterfaceESt4pairIKS3_St10unique_ptrIS2_St14default_deleteIS2_EEESt10_Select1stISA_ESt4lessIS3_ESaISA_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISA_ERS5_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core9XdsClient24EndpointWatcherInterfaceESt4pairIKS3_St10unique_ptrIS2_St14default_deleteIS2_EEESt10_Select1stISA_ESt4lessIS3_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E + + [A] _ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_N9grpc_core6XdsApi17ClusterLoadReportEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE24_M_get_insert_unique_posERS8_ + + [A] _ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_N9grpc_core6XdsApi17ClusterLoadReportEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISC_ERS8_ + + [A] _ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_N9grpc_core6XdsApi17ClusterLoadReportEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE8_M_eraseEPSt13_Rb_tree_nodeISC_E + + [A] _ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_N9grpc_core9XdsClient15LoadReportStateEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE17_M_emplace_uniqueIJS0_IS7_SB_EEEES0_ISt17_Rb_tree_iteratorISC_EbEDpOT_ + + [A] _ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_N9grpc_core9XdsClient15LoadReportStateEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE4findERS8_ + + [A] _ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_N9grpc_core9XdsClient15LoadReportStateEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE8_M_eraseEPSt13_Rb_tree_nodeISC_E + + [A] _ZNSt8_Rb_treeISt4pairIPKcS2_ES0_IKS3_N9grpc_core14RegisteredCallEESt10_Select1stIS7_ESt4lessIS3_ESaIS7_EE16_M_insert_uniqueIS7_EES0_ISt17_Rb_tree_iteratorIS7_EbEOT_ + + [A] _ZNSt8_Rb_treeISt4pairIPKcS2_ES0_IKS3_N9grpc_core14RegisteredCallEESt10_Select1stIS7_ESt4lessIS3_ESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E + + [A] _ZNSt8_Rb_treeIlSt4pairIKlN9grpc_core13RefCountedPtrINS2_8channelz10SocketNodeEEEESt10_Select1stIS7_ESt4lessIlESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E + + [A] _ZNSt8_Rb_treeIlSt4pairIKlN9grpc_core13RefCountedPtrINS2_8channelz16ListenSocketNodeEEEESt10_Select1stIS7_ESt4lessIlESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E + + [A] _ZNSt8_Rb_treeIlSt4pairIKlPN9grpc_core8channelz8BaseNodeEESt10_Select1stIS6_ESt4lessIlESaIS6_EE24_M_get_insert_unique_posERS1_ + + [A] _ZNSt8_Rb_treeIlSt4pairIKlPN9grpc_core8channelz8BaseNodeEESt10_Select1stIS6_ESt4lessIlESaIS6_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS6_ERS1_ + + [A] _ZNSt8_Rb_treeIlSt4pairIKlPN9grpc_core8channelz8BaseNodeEESt10_Select1stIS6_ESt4lessIlESaIS6_EE5eraseERS1_ + + [A] _ZNSt8_Rb_treeIlSt4pairIKlPN9grpc_core8channelz8BaseNodeEESt10_Select1stIS6_ESt4lessIlESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E + + [A] _ZNSt8_Rb_treeIlSt4pairIKlbESt10_Select1stIS2_ESt4lessIlESaIS2_EE16_M_insert_uniqueIS0_IlbEEES0_ISt17_Rb_tree_iteratorIS2_EbEOT_ + + [A] _ZNSt8_Rb_treeIlSt4pairIKlbESt10_Select1stIS2_ESt4lessIlESaIS2_EE5eraseERS1_ + + [A] _ZNSt8_Rb_treeIlSt4pairIKlbESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E + + [A] _ZNSt8_Rb_treeImSt4pairIKmSt3setIPN9grpc_core15XdsLocalityNameESt4lessIS5_ESaIS5_EEESt10_Select1stISA_ES6_ImESaISA_EE24_M_get_insert_unique_posERS1_ + + [A] _ZNSt8_Rb_treeImSt4pairIKmSt3setIPN9grpc_core15XdsLocalityNameESt4lessIS5_ESaIS5_EEESt10_Select1stISA_ES6_ImESaISA_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISA_ERS1_ + + [A] _ZNSt8_Rb_treeImSt4pairIKmSt3setIPN9grpc_core15XdsLocalityNameESt4lessIS5_ESaIS5_EEESt10_Select1stISA_ES6_ImESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E + + [A] _ZNSt8__detail9_Map_baseI10grpc_sliceSt4pairIKS1_PKN4absl14lts_2020_02_2513InlinedVectorISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteISA_EELm4ESaISD_EEEESaISI_ENS_10_Select1stESt8equal_toIS1_ENS8_9SliceHashENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb1ELb0ELb1EEELb1EEixERS3_ + + [A] _ZSteqIcEN9__gnu_cxx11__enable_ifIXsrSt9__is_charIT_E7__valueEbE6__typeERKNSt7__cxx1112basic_stringIS3_St11char_traitsIS3_ESaIS3_EEESE_ + + [A] _ZStltINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EbRKSt4pairIT_T0_ESB_ + + [A] _ZZN4absl14lts_2020_02_2511string_view19CheckLengthInternalEmENKUlvE_clEv + + [A] _ZZN4absl14lts_2020_02_2511string_view19CheckLengthInternalEmENUlvE_4_FUNEv + + [A] _ZZN9grpc_core10Subchannel26AsyncWatcherNotifierLockedC4ENS_13RefCountedPtrINS0_33ConnectivityStateWatcherInterfaceEEEPS0_23grpc_connectivity_stateENKUlPvP10grpc_errorE_clES7_S9_ + + [A] _ZZN9grpc_core10Subchannel26AsyncWatcherNotifierLockedC4ENS_13RefCountedPtrINS0_33ConnectivityStateWatcherInterfaceEEEPS0_23grpc_connectivity_stateENUlPvP10grpc_errorE_4_FUNES7_S9_ + + [A] _ZZN9grpc_core16ThreadPoolWorkerC4EPKcPNS_18MPMCQueueInterfaceERNS_6Thread7OptionsEiENKUlPvE_clES8_ + + [A] _ZZN9grpc_core16ThreadPoolWorkerC4EPKcPNS_18MPMCQueueInterfaceERNS_6Thread7OptionsEiENUlPvE_4_FUNES8_ + + + +28 Removed variable symbols not referenced by debug info: + + + + _ZN9grpc_core17grpc_lb_xds_traceE + + _ZN9grpc_core4Fork13thread_state_E + + _ZN9grpc_core4Fork15exec_ctx_state_E + + _ZN9grpc_core4Fork16support_enabled_E + + _ZN9grpc_core4Fork17override_enabled_E + + _ZN9grpc_core4Fork27reset_child_polling_engine_E + + _ZTVN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEEE + + _ZTVN9grpc_core16XdsLbClientStatsE + + g_hash_seed + + google_protobuf_Duration_fields + + google_protobuf_Timestamp_fields + + gpr_now_impl + + grpc_connectivity_state_trace + + grpc_health_v1_HealthCheckRequest_fields + + grpc_health_v1_HealthCheckResponse_fields + + grpc_lb_v1_ClientStatsPerToken_fields + + grpc_lb_v1_ClientStats_fields + + grpc_lb_v1_InitialLoadBalanceRequest_fields + + grpc_lb_v1_InitialLoadBalanceResponse_fields + + grpc_lb_v1_LoadBalanceRequest_fields + + grpc_lb_v1_LoadBalanceResponse_fields + + grpc_lb_v1_ServerList_fields + + grpc_lb_v1_Server_fields + + grpc_schedule_on_exec_ctx + + grpc_server_channel_trace + + grpc_static_mdelem_table + + grpc_static_metadata_refcounts + + grpc_static_slice_table + + + +670 Added variable symbols not referenced by debug info: + + + + [A] _ZN9grpc_core11g_hash_seedE + + [A] _ZN9grpc_core13kNoopRefcountE + + [A] _ZN9grpc_core17grpc_cds_lb_traceE + + [A] _ZN9grpc_core17grpc_lb_eds_traceE + + [A] _ZN9grpc_core17grpc_lb_lrs_traceE + + [A] _ZN9grpc_core19StaticSliceRefcount18kStaticSubRefcountE + + [A] _ZN9grpc_core21g_static_mdelem_tableE + + [A] _ZN9grpc_core21grpc_xds_client_traceE + + [A] _ZN9grpc_core22grpc_lb_priority_traceE + + [A] _ZN9grpc_core22grpc_thread_pool_traceE + + [A] _ZN9grpc_core23MessageDecompressFilterE + + [A] _ZN9grpc_core23grpc_xds_resolver_traceE + + [A] _ZN9grpc_core25grpc_server_channel_traceE + + [A] _ZN9grpc_core25grpc_xds_routing_lb_traceE + + [A] _ZN9grpc_core25kGrpcLbLbTokenMetadataKeyE + + [A] _ZN9grpc_core26g_static_mdelem_manifestedE + + [A] _ZN9grpc_core26grpc_work_serializer_traceE + + [A] _ZN9grpc_core29g_static_metadata_slice_tableE + + [A] _ZN9grpc_core29grpc_connectivity_state_traceE + + [A] _ZN9grpc_core29grpc_lb_weighted_target_traceE + + [A] _ZN9grpc_core29grpc_trace_client_idle_filterE + + [A] _ZN9grpc_core29kGrpcLbClientStatsMetadataKeyE + + [A] _ZN9grpc_core33g_static_metadata_slice_refcountsE + + [A] _ZN9grpc_core6XdsApi11kCdsTypeUrlE + + [A] _ZN9grpc_core6XdsApi11kEdsTypeUrlE + + [A] _ZN9grpc_core6XdsApi11kLdsTypeUrlE + + [A] _ZN9grpc_core6XdsApi11kRdsTypeUrlE + + [A] _ZN9grpc_core9XdsClient16kXdsClientVtableE + + [A] _ZTI11ExecCtxNext + + [A] _ZTI12ExecCtxPluck + + [A] _ZTIN4grpc12experimental17LibuvEventManagerE + + [A] _ZTIN9grpc_core10ByteStreamE + + [A] _ZTIN9grpc_core10HandshakerE + + [A] _ZTIN9grpc_core10OrphanableE + + [A] _ZTIN9grpc_core10RefCountedINS_10HandshakerENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_10Subchannel33ConnectivityStateWatcherInterfaceENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_13ServiceConfigENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_14ConfigSelectorENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_15XdsLocalityNameENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_16HandshakeManagerENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_17GrpcLbClientStatsENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_19ConnectedSubchannelENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_19LoadBalancingPolicy6ConfigENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_19SubchannelInterfaceENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_19XdsClusterDropStatsENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_23SubchannelPoolInterfaceENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_23XdsClusterLocalityStatsENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_29FakeResolverResponseGeneratorENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_6XdsApi10DropConfigENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_8channelz8BaseNodeENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_8internal23ServerRetryThrottleDataENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcherE + + [A] _ZTIN9grpc_core10Subchannel31ConnectedSubchannelStateWatcherE + + [A] _ZTIN9grpc_core10Subchannel33ConnectivityStateWatcherInterfaceE + + [A] _ZTIN9grpc_core10ThreadPoolE + + [A] _ZTIN9grpc_core12FakeResolverE + + [A] _ZTIN9grpc_core12GrpcPolledFdE + + [A] _ZTIN9grpc_core13ServiceConfigE + + [A] _ZTIN9grpc_core14ConfigSelectorE + + [A] _ZTIN9grpc_core14WorkSerializer18WorkSerializerImplE + + [A] _ZTIN9grpc_core15ByteStreamCache17CachingByteStreamE + + [A] _ZTIN9grpc_core15Chttp2ConnectorE + + [A] _ZTIN9grpc_core15InfLenFIFOQueueE + + [A] _ZTIN9grpc_core15ResolverFactoryE + + [A] _ZTIN9grpc_core15XdsLocalityNameE + + [A] _ZTIN9grpc_core16HandshakeManagerE + + [A] _ZTIN9grpc_core17GrpcLbClientStatsE + + [A] _ZTIN9grpc_core17GrpcPolledFdPosixE + + [A] _ZTIN9grpc_core17HandshakerFactoryE + + [A] _ZTIN9grpc_core17HealthCheckClient9CallStateE + + [A] _ZTIN9grpc_core17HealthCheckClientE + + [A] _ZTIN9grpc_core17MessageSizeParserE + + [A] _ZTIN9grpc_core18ChildPolicyHandler6HelperE + + [A] _ZTIN9grpc_core18ChildPolicyHandlerE + + [A] _ZTIN9grpc_core18MPMCQueueInterfaceE + + [A] _ZTIN9grpc_core18TcpServerFdHandlerE + + [A] _ZTIN9grpc_core19ConnectedSubchannelE + + [A] _ZTIN9grpc_core19ConnectivityWatcherE + + [A] _ZTIN9grpc_core19GrpcPolledFdFactoryE + + [A] _ZTIN9grpc_core19LoadBalancingPolicy11QueuePickerE + + [A] _ZTIN9grpc_core19LoadBalancingPolicy16SubchannelPickerE + + [A] _ZTIN9grpc_core19LoadBalancingPolicy17MetadataInterfaceE + + [A] _ZTIN9grpc_core19LoadBalancingPolicy20ChannelControlHelperE + + [A] _ZTIN9grpc_core19LoadBalancingPolicy22TransientFailurePickerE + + [A] _ZTIN9grpc_core19LoadBalancingPolicy6ConfigE + + [A] _ZTIN9grpc_core19LoadBalancingPolicy9CallStateE + + [A] _ZTIN9grpc_core19LoadBalancingPolicyE + + [A] _ZTIN9grpc_core19LocalSubchannelPoolE + + [A] _ZTIN9grpc_core19PolymorphicRefCountE + + [A] _ZTIN9grpc_core19ServiceConfigParser12ParsedConfigE + + [A] _ZTIN9grpc_core19ServiceConfigParser6ParserE + + [A] _ZTIN9grpc_core19SubchannelConnectorE + + [A] _ZTIN9grpc_core19SubchannelInterface33ConnectivityStateWatcherInterfaceE + + [A] _ZTIN9grpc_core19SubchannelInterfaceE + + [A] _ZTIN9grpc_core19ThreadPoolInterfaceE + + [A] _ZTIN9grpc_core19XdsClusterDropStatsE + + [A] _ZTIN9grpc_core20ClientChannelFactoryE + + [A] _ZTIN9grpc_core20GlobalSubchannelPoolE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_17HealthCheckClientEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_19LoadBalancingPolicyEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_19SubchannelConnectorEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_33ConnectivityStateWatcherInterfaceEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_8ResolverEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12AdsCallState13ResourceStateEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12AdsCallStateEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12LrsCallState8ReporterEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12LrsCallStateEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState13RetryableCallINS2_12AdsCallStateEEEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState13RetryableCallINS2_12LrsCallStateEEEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelStateEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClientEEE + + [A] _ZTIN9grpc_core20ProxyMapperInterfaceE + + [A] _ZTIN9grpc_core21DefaultConfigSelectorE + + [A] _ZTIN9grpc_core21SliceBufferByteStreamE + + [A] _ZTIN9grpc_core23MessageSizeParsedConfigE + + [A] _ZTIN9grpc_core23ServerListenerInterfaceE + + [A] _ZTIN9grpc_core23SubchannelPoolInterfaceE + + [A] _ZTIN9grpc_core23XdsClusterLocalityStatsE + + [A] _ZTIN9grpc_core24Chttp2IncomingByteStreamE + + [A] _ZTIN9grpc_core24GrpcPolledFdFactoryPosixE + + [A] _ZTIN9grpc_core26LoadBalancingPolicyFactoryE + + [A] _ZTIN9grpc_core28ResolvingLoadBalancingPolicy19ChannelConfigHelperE + + [A] _ZTIN9grpc_core28ResolvingLoadBalancingPolicy21ResolverResultHandlerE + + [A] _ZTIN9grpc_core28ResolvingLoadBalancingPolicy22ResolvingControlHelperE + + [A] _ZTIN9grpc_core28ResolvingLoadBalancingPolicyE + + [A] _ZTIN9grpc_core29FakeResolverResponseGeneratorE + + [A] _ZTIN9grpc_core33ConnectivityStateWatcherInterfaceE + + [A] _ZTIN9grpc_core34Chttp2InsecureClientChannelFactoryE + + [A] _ZTIN9grpc_core38AsyncConnectivityStateWatcherInterfaceE + + [A] _ZTIN9grpc_core6XdsApi10DropConfigE + + [A] _ZTIN9grpc_core6chttp217StreamFlowControlE + + [A] _ZTIN9grpc_core6chttp220TransportFlowControlE + + [A] _ZTIN9grpc_core6chttp221StreamFlowControlBaseE + + [A] _ZTIN9grpc_core6chttp224TransportFlowControlBaseE + + [A] _ZTIN9grpc_core6chttp225StreamFlowControlDisabledE + + [A] _ZTIN9grpc_core6chttp228TransportFlowControlDisabledE + + [A] _ZTIN9grpc_core7ExecCtxE + + [A] _ZTIN9grpc_core8Resolver13ResultHandlerE + + [A] _ZTIN9grpc_core8ResolverE + + [A] _ZTIN9grpc_core8channelz10ServerNodeE + + [A] _ZTIN9grpc_core8channelz10SocketNodeE + + [A] _ZTIN9grpc_core8channelz11ChannelNodeE + + [A] _ZTIN9grpc_core8channelz14SubchannelNodeE + + [A] _ZTIN9grpc_core8channelz16ListenSocketNodeE + + [A] _ZTIN9grpc_core8channelz8BaseNodeE + + [A] _ZTIN9grpc_core8internal23ServerRetryThrottleDataE + + [A] _ZTIN9grpc_core8internal31ClientChannelGlobalParsedConfigE + + [A] _ZTIN9grpc_core8internal31ClientChannelMethodParsedConfigE + + [A] _ZTIN9grpc_core8internal32ClientChannelServiceConfigParserE + + [A] _ZTIN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateE + + [A] _ZTIN9grpc_core9XdsClient12ChannelState12AdsCallStateE + + [A] _ZTIN9grpc_core9XdsClient12ChannelState12LrsCallState8ReporterE + + [A] _ZTIN9grpc_core9XdsClient12ChannelState12LrsCallStateE + + [A] _ZTIN9grpc_core9XdsClient12ChannelState12StateWatcherE + + [A] _ZTIN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEEE + + [A] _ZTIN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEEE + + [A] _ZTIN9grpc_core9XdsClient12ChannelStateE + + [A] _ZTIN9grpc_core9XdsClient23ClusterWatcherInterfaceE + + [A] _ZTIN9grpc_core9XdsClient24EndpointWatcherInterfaceE + + [A] _ZTIN9grpc_core9XdsClient29ServiceConfigWatcherInterfaceE + + [A] _ZTIN9grpc_core9XdsClientE + + [A] _ZTISt11_Mutex_baseILN9__gnu_cxx12_Lock_policyE2EE + + [A] _ZTISt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE + + [A] _ZTISt19_Sp_make_shared_tag + + [A] _ZTISt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE + + [A] _ZTIZN9grpc_core38AsyncConnectivityStateWatcherInterface8NotifierC4ENS_13RefCountedPtrIS0_EE23grpc_connectivity_stateRKSt10shared_ptrINS_14WorkSerializerEEEUlvE_ + + [A] _ZTIZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceState7OnTimerEPvP10grpc_errorEUlvE_ + + [A] _ZTIZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_ + + [A] _ZTIZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_ + + [A] _ZTS11ExecCtxNext + + [A] _ZTS12ExecCtxPluck + + [A] _ZTSN4grpc12experimental17LibuvEventManagerE + + [A] _ZTSN9grpc_core10ByteStreamE + + [A] _ZTSN9grpc_core10HandshakerE + + [A] _ZTSN9grpc_core10OrphanableE + + [A] _ZTSN9grpc_core10RefCountedINS_10HandshakerENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_10Subchannel33ConnectivityStateWatcherInterfaceENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_13ServiceConfigENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_14ConfigSelectorENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_15XdsLocalityNameENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_16HandshakeManagerENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_17GrpcLbClientStatsENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_19ConnectedSubchannelENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_19LoadBalancingPolicy6ConfigENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_19SubchannelInterfaceENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_19XdsClusterDropStatsENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_23SubchannelPoolInterfaceENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_23XdsClusterLocalityStatsENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_29FakeResolverResponseGeneratorENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_6XdsApi10DropConfigENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_8channelz8BaseNodeENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_8internal23ServerRetryThrottleDataENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcherE + + [A] _ZTSN9grpc_core10Subchannel31ConnectedSubchannelStateWatcherE + + [A] _ZTSN9grpc_core10Subchannel33ConnectivityStateWatcherInterfaceE + + [A] _ZTSN9grpc_core10ThreadPoolE + + [A] _ZTSN9grpc_core12FakeResolverE + + [A] _ZTSN9grpc_core12GrpcPolledFdE + + [A] _ZTSN9grpc_core13ServiceConfigE + + [A] _ZTSN9grpc_core14ConfigSelectorE + + [A] _ZTSN9grpc_core14WorkSerializer18WorkSerializerImplE + + [A] _ZTSN9grpc_core15ByteStreamCache17CachingByteStreamE + + [A] _ZTSN9grpc_core15Chttp2ConnectorE + + [A] _ZTSN9grpc_core15InfLenFIFOQueueE + + [A] _ZTSN9grpc_core15ResolverFactoryE + + [A] _ZTSN9grpc_core15XdsLocalityNameE + + [A] _ZTSN9grpc_core16HandshakeManagerE + + [A] _ZTSN9grpc_core17GrpcLbClientStatsE + + [A] _ZTSN9grpc_core17GrpcPolledFdPosixE + + [A] _ZTSN9grpc_core17HandshakerFactoryE + + [A] _ZTSN9grpc_core17HealthCheckClient9CallStateE + + [A] _ZTSN9grpc_core17HealthCheckClientE + + [A] _ZTSN9grpc_core17MessageSizeParserE + + [A] _ZTSN9grpc_core18ChildPolicyHandler6HelperE + + [A] _ZTSN9grpc_core18ChildPolicyHandlerE + + [A] _ZTSN9grpc_core18MPMCQueueInterfaceE + + [A] _ZTSN9grpc_core18TcpServerFdHandlerE + + [A] _ZTSN9grpc_core19ConnectedSubchannelE + + [A] _ZTSN9grpc_core19ConnectivityWatcherE + + [A] _ZTSN9grpc_core19GrpcPolledFdFactoryE + + [A] _ZTSN9grpc_core19LoadBalancingPolicy11QueuePickerE + + [A] _ZTSN9grpc_core19LoadBalancingPolicy16SubchannelPickerE + + [A] _ZTSN9grpc_core19LoadBalancingPolicy17MetadataInterfaceE + + [A] _ZTSN9grpc_core19LoadBalancingPolicy20ChannelControlHelperE + + [A] _ZTSN9grpc_core19LoadBalancingPolicy22TransientFailurePickerE + + [A] _ZTSN9grpc_core19LoadBalancingPolicy6ConfigE + + [A] _ZTSN9grpc_core19LoadBalancingPolicy9CallStateE + + [A] _ZTSN9grpc_core19LoadBalancingPolicyE + + [A] _ZTSN9grpc_core19LocalSubchannelPoolE + + [A] _ZTSN9grpc_core19PolymorphicRefCountE + + [A] _ZTSN9grpc_core19ServiceConfigParser12ParsedConfigE + + [A] _ZTSN9grpc_core19ServiceConfigParser6ParserE + + [A] _ZTSN9grpc_core19SubchannelConnectorE + + [A] _ZTSN9grpc_core19SubchannelInterface33ConnectivityStateWatcherInterfaceE + + [A] _ZTSN9grpc_core19SubchannelInterfaceE + + [A] _ZTSN9grpc_core19ThreadPoolInterfaceE + + [A] _ZTSN9grpc_core19XdsClusterDropStatsE + + [A] _ZTSN9grpc_core20ClientChannelFactoryE + + [A] _ZTSN9grpc_core20GlobalSubchannelPoolE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_17HealthCheckClientEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_19LoadBalancingPolicyEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_19SubchannelConnectorEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_33ConnectivityStateWatcherInterfaceEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_8ResolverEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12AdsCallState13ResourceStateEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12AdsCallStateEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12LrsCallState8ReporterEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12LrsCallStateEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState13RetryableCallINS2_12AdsCallStateEEEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState13RetryableCallINS2_12LrsCallStateEEEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelStateEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClientEEE + + [A] _ZTSN9grpc_core20ProxyMapperInterfaceE + + [A] _ZTSN9grpc_core21DefaultConfigSelectorE + + [A] _ZTSN9grpc_core21SliceBufferByteStreamE + + [A] _ZTSN9grpc_core23MessageSizeParsedConfigE + + [A] _ZTSN9grpc_core23ServerListenerInterfaceE + + [A] _ZTSN9grpc_core23SubchannelPoolInterfaceE + + [A] _ZTSN9grpc_core23XdsClusterLocalityStatsE + + [A] _ZTSN9grpc_core24Chttp2IncomingByteStreamE + + [A] _ZTSN9grpc_core24GrpcPolledFdFactoryPosixE + + [A] _ZTSN9grpc_core26LoadBalancingPolicyFactoryE + + [A] _ZTSN9grpc_core28ResolvingLoadBalancingPolicy19ChannelConfigHelperE + + [A] _ZTSN9grpc_core28ResolvingLoadBalancingPolicy21ResolverResultHandlerE + + [A] _ZTSN9grpc_core28ResolvingLoadBalancingPolicy22ResolvingControlHelperE + + [A] _ZTSN9grpc_core28ResolvingLoadBalancingPolicyE + + [A] _ZTSN9grpc_core29FakeResolverResponseGeneratorE + + [A] _ZTSN9grpc_core33ConnectivityStateWatcherInterfaceE + + [A] _ZTSN9grpc_core34Chttp2InsecureClientChannelFactoryE + + [A] _ZTSN9grpc_core38AsyncConnectivityStateWatcherInterfaceE + + [A] _ZTSN9grpc_core6XdsApi10DropConfigE + + [A] _ZTSN9grpc_core6chttp217StreamFlowControlE + + [A] _ZTSN9grpc_core6chttp220TransportFlowControlE + + [A] _ZTSN9grpc_core6chttp221StreamFlowControlBaseE + + [A] _ZTSN9grpc_core6chttp224TransportFlowControlBaseE + + [A] _ZTSN9grpc_core6chttp225StreamFlowControlDisabledE + + [A] _ZTSN9grpc_core6chttp228TransportFlowControlDisabledE + + [A] _ZTSN9grpc_core7ExecCtxE + + [A] _ZTSN9grpc_core8Resolver13ResultHandlerE + + [A] _ZTSN9grpc_core8ResolverE + + [A] _ZTSN9grpc_core8channelz10ServerNodeE + + [A] _ZTSN9grpc_core8channelz10SocketNodeE + + [A] _ZTSN9grpc_core8channelz11ChannelNodeE + + [A] _ZTSN9grpc_core8channelz14SubchannelNodeE + + [A] _ZTSN9grpc_core8channelz16ListenSocketNodeE + + [A] _ZTSN9grpc_core8channelz8BaseNodeE + + [A] _ZTSN9grpc_core8internal23ServerRetryThrottleDataE + + [A] _ZTSN9grpc_core8internal31ClientChannelGlobalParsedConfigE + + [A] _ZTSN9grpc_core8internal31ClientChannelMethodParsedConfigE + + [A] _ZTSN9grpc_core8internal32ClientChannelServiceConfigParserE + + [A] _ZTSN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateE + + [A] _ZTSN9grpc_core9XdsClient12ChannelState12AdsCallStateE + + [A] _ZTSN9grpc_core9XdsClient12ChannelState12LrsCallState8ReporterE + + [A] _ZTSN9grpc_core9XdsClient12ChannelState12LrsCallStateE + + [A] _ZTSN9grpc_core9XdsClient12ChannelState12StateWatcherE + + [A] _ZTSN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEEE + + [A] _ZTSN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEEE + + [A] _ZTSN9grpc_core9XdsClient12ChannelStateE + + [A] _ZTSN9grpc_core9XdsClient23ClusterWatcherInterfaceE + + [A] _ZTSN9grpc_core9XdsClient24EndpointWatcherInterfaceE + + [A] _ZTSN9grpc_core9XdsClient29ServiceConfigWatcherInterfaceE + + [A] _ZTSN9grpc_core9XdsClientE + + [A] _ZTSSt11_Mutex_baseILN9__gnu_cxx12_Lock_policyE2EE + + [A] _ZTSSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE + + [A] _ZTSSt19_Sp_make_shared_tag + + [A] _ZTSSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE + + [A] _ZTSZN9grpc_core38AsyncConnectivityStateWatcherInterface8NotifierC4ENS_13RefCountedPtrIS0_EE23grpc_connectivity_stateRKSt10shared_ptrINS_14WorkSerializerEEEUlvE_ + + [A] _ZTSZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceState7OnTimerEPvP10grpc_errorEUlvE_ + + [A] _ZTSZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_ + + [A] _ZTSZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_ + + [A] _ZTVN4grpc12experimental17LibuvEventManagerE + + [A] _ZTVN9grpc_core10Subchannel31ConnectedSubchannelStateWatcherE + + [A] _ZTVN9grpc_core10Subchannel33ConnectivityStateWatcherInterfaceE + + [A] _ZTVN9grpc_core10ThreadPoolE + + [A] _ZTVN9grpc_core14WorkSerializer18WorkSerializerImplE + + [A] _ZTVN9grpc_core15Chttp2ConnectorE + + [A] _ZTVN9grpc_core15InfLenFIFOQueueE + + [A] _ZTVN9grpc_core15XdsLocalityNameE + + [A] _ZTVN9grpc_core18ChildPolicyHandler6HelperE + + [A] _ZTVN9grpc_core18ChildPolicyHandlerE + + [A] _ZTVN9grpc_core19ConnectivityWatcherE + + [A] _ZTVN9grpc_core19XdsClusterDropStatsE + + [A] _ZTVN9grpc_core21DefaultConfigSelectorE + + [A] _ZTVN9grpc_core23XdsClusterLocalityStatsE + + [A] _ZTVN9grpc_core38AsyncConnectivityStateWatcherInterfaceE + + [A] _ZTVN9grpc_core6XdsApi10DropConfigE + + [A] _ZTVN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateE + + [A] _ZTVN9grpc_core9XdsClient12ChannelState12AdsCallStateE + + [A] _ZTVN9grpc_core9XdsClient12ChannelState12LrsCallState8ReporterE + + [A] _ZTVN9grpc_core9XdsClient12ChannelState12LrsCallStateE + + [A] _ZTVN9grpc_core9XdsClient12ChannelState12StateWatcherE + + [A] _ZTVN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEEE + + [A] _ZTVN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEEE + + [A] _ZTVN9grpc_core9XdsClient12ChannelStateE + + [A] _ZTVN9grpc_core9XdsClientE + + [A] _ZTVSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE + + [A] envoy_annotations_ResourceAnnotation_msginit + + [A] envoy_api_v2_CdsDummy_msginit + + [A] envoy_api_v2_ClusterLoadAssignment_NamedEndpointsEntry_msginit + + [A] envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload_msginit + + [A] envoy_api_v2_ClusterLoadAssignment_Policy_msginit + + [A] envoy_api_v2_ClusterLoadAssignment_msginit + + [A] envoy_api_v2_Cluster_CommonLbConfig_ConsistentHashingLbConfig_msginit + + [A] envoy_api_v2_Cluster_CommonLbConfig_LocalityWeightedLbConfig_msginit + + [A] envoy_api_v2_Cluster_CommonLbConfig_ZoneAwareLbConfig_msginit + + [A] envoy_api_v2_Cluster_CommonLbConfig_msginit + + [A] envoy_api_v2_Cluster_CustomClusterType_msginit + + [A] envoy_api_v2_Cluster_EdsClusterConfig_msginit + + [A] envoy_api_v2_Cluster_ExtensionProtocolOptionsEntry_msginit + + [A] envoy_api_v2_Cluster_LbSubsetConfig_LbSubsetSelector_msginit + + [A] envoy_api_v2_Cluster_LbSubsetConfig_msginit + + [A] envoy_api_v2_Cluster_LeastRequestLbConfig_msginit + + [A] envoy_api_v2_Cluster_OriginalDstLbConfig_msginit + + [A] envoy_api_v2_Cluster_RefreshRate_msginit + + [A] envoy_api_v2_Cluster_RingHashLbConfig_msginit + + [A] envoy_api_v2_Cluster_TransportSocketMatch_msginit + + [A] envoy_api_v2_Cluster_TypedExtensionProtocolOptionsEntry_msginit + + [A] envoy_api_v2_Cluster_msginit + + [A] envoy_api_v2_DeltaDiscoveryRequest_InitialResourceVersionsEntry_msginit + + [A] envoy_api_v2_DeltaDiscoveryRequest_msginit + + [A] envoy_api_v2_DeltaDiscoveryResponse_msginit + + [A] envoy_api_v2_DiscoveryRequest_msginit + + [A] envoy_api_v2_DiscoveryResponse_msginit + + [A] envoy_api_v2_EdsDummy_msginit + + [A] envoy_api_v2_LdsDummy_msginit + + [A] envoy_api_v2_Listener_ConnectionBalanceConfig_ExactBalance_msginit + + [A] envoy_api_v2_Listener_ConnectionBalanceConfig_msginit + + [A] envoy_api_v2_Listener_DeprecatedV1_msginit + + [A] envoy_api_v2_Listener_msginit + + [A] envoy_api_v2_LoadBalancingPolicy_Policy_msginit + + [A] envoy_api_v2_LoadBalancingPolicy_msginit + + [A] envoy_api_v2_RdsDummy_msginit + + [A] envoy_api_v2_Resource_msginit + + [A] envoy_api_v2_RouteConfiguration_msginit + + [A] envoy_api_v2_ScopedRouteConfiguration_Key_Fragment_msginit + + [A] envoy_api_v2_ScopedRouteConfiguration_Key_msginit + + [A] envoy_api_v2_ScopedRouteConfiguration_msginit + + [A] envoy_api_v2_SrdsDummy_msginit + + [A] envoy_api_v2_UpstreamBindConfig_msginit + + [A] envoy_api_v2_UpstreamConnectionOptions_msginit + + [A] envoy_api_v2_Vhds_msginit + + [A] envoy_api_v2_auth_CertificateValidationContext_msginit + + [A] envoy_api_v2_auth_CommonTlsContext_CombinedCertificateValidationContext_msginit + + [A] envoy_api_v2_auth_CommonTlsContext_msginit + + [A] envoy_api_v2_auth_DownstreamTlsContext_msginit + + [A] envoy_api_v2_auth_GenericSecret_msginit + + [A] envoy_api_v2_auth_PrivateKeyProvider_msginit + + [A] envoy_api_v2_auth_SdsSecretConfig_msginit + + [A] envoy_api_v2_auth_Secret_msginit + + [A] envoy_api_v2_auth_TlsCertificate_msginit + + [A] envoy_api_v2_auth_TlsParameters_msginit + + [A] envoy_api_v2_auth_TlsSessionTicketKeys_msginit + + [A] envoy_api_v2_auth_UpstreamTlsContext_msginit + + [A] envoy_api_v2_cluster_CircuitBreakers_Thresholds_RetryBudget_msginit + + [A] envoy_api_v2_cluster_CircuitBreakers_Thresholds_msginit + + [A] envoy_api_v2_cluster_CircuitBreakers_msginit + + [A] envoy_api_v2_cluster_Filter_msginit + + [A] envoy_api_v2_cluster_OutlierDetection_msginit + + [A] envoy_api_v2_core_Address_msginit + + [A] envoy_api_v2_core_AggregatedConfigSource_msginit + + [A] envoy_api_v2_core_ApiConfigSource_msginit + + [A] envoy_api_v2_core_AsyncDataSource_msginit + + [A] envoy_api_v2_core_BackoffStrategy_msginit + + [A] envoy_api_v2_core_BindConfig_msginit + + [A] envoy_api_v2_core_BuildVersion_msginit + + [A] envoy_api_v2_core_CidrRange_msginit + + [A] envoy_api_v2_core_ConfigSource_msginit + + [A] envoy_api_v2_core_ControlPlane_msginit + + [A] envoy_api_v2_core_DataSource_msginit + + [A] envoy_api_v2_core_EventServiceConfig_msginit + + [A] envoy_api_v2_core_Extension_msginit + + [A] envoy_api_v2_core_GrpcProtocolOptions_msginit + + [A] envoy_api_v2_core_GrpcService_EnvoyGrpc_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_CallCredentials_StsService_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_CallCredentials_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_ChannelCredentials_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_GoogleLocalCredentials_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_SslCredentials_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_msginit + + [A] envoy_api_v2_core_GrpcService_msginit + + [A] envoy_api_v2_core_HeaderMap_msginit + + [A] envoy_api_v2_core_HeaderValueOption_msginit + + [A] envoy_api_v2_core_HeaderValue_msginit + + [A] envoy_api_v2_core_HealthCheck_CustomHealthCheck_msginit + + [A] envoy_api_v2_core_HealthCheck_GrpcHealthCheck_msginit + + [A] envoy_api_v2_core_HealthCheck_HttpHealthCheck_msginit + + [A] envoy_api_v2_core_HealthCheck_Payload_msginit + + [A] envoy_api_v2_core_HealthCheck_RedisHealthCheck_msginit + + [A] envoy_api_v2_core_HealthCheck_TcpHealthCheck_msginit + + [A] envoy_api_v2_core_HealthCheck_TlsOptions_msginit + + [A] envoy_api_v2_core_HealthCheck_msginit + + [A] envoy_api_v2_core_Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords_msginit + + [A] envoy_api_v2_core_Http1ProtocolOptions_HeaderKeyFormat_msginit + + [A] envoy_api_v2_core_Http1ProtocolOptions_msginit + + [A] envoy_api_v2_core_Http2ProtocolOptions_SettingsParameter_msginit + + [A] envoy_api_v2_core_Http2ProtocolOptions_msginit + + [A] envoy_api_v2_core_HttpProtocolOptions_msginit + + [A] envoy_api_v2_core_HttpUri_msginit + + [A] envoy_api_v2_core_Locality_msginit + + [A] envoy_api_v2_core_Metadata_FilterMetadataEntry_msginit + + [A] envoy_api_v2_core_Metadata_msginit + + [A] envoy_api_v2_core_Node_msginit + + [A] envoy_api_v2_core_Pipe_msginit + + [A] envoy_api_v2_core_RateLimitSettings_msginit + + [A] envoy_api_v2_core_RemoteDataSource_msginit + + [A] envoy_api_v2_core_RetryPolicy_msginit + + [A] envoy_api_v2_core_RuntimeDouble_msginit + + [A] envoy_api_v2_core_RuntimeFeatureFlag_msginit + + [A] envoy_api_v2_core_RuntimeFractionalPercent_msginit + + [A] envoy_api_v2_core_RuntimeUInt32_msginit + + [A] envoy_api_v2_core_SelfConfigSource_msginit + + [A] envoy_api_v2_core_SocketAddress_msginit + + [A] envoy_api_v2_core_SocketOption_msginit + + [A] envoy_api_v2_core_TcpKeepalive_msginit + + [A] envoy_api_v2_core_TcpProtocolOptions_msginit + + [A] envoy_api_v2_core_TransportSocket_msginit + + [A] envoy_api_v2_core_UpstreamHttpProtocolOptions_msginit + + [A] envoy_api_v2_endpoint_ClusterStats_DroppedRequests_msginit + + [A] envoy_api_v2_endpoint_ClusterStats_msginit + + [A] envoy_api_v2_endpoint_EndpointLoadMetricStats_msginit + + [A] envoy_api_v2_endpoint_Endpoint_HealthCheckConfig_msginit + + [A] envoy_api_v2_endpoint_Endpoint_msginit + + [A] envoy_api_v2_endpoint_LbEndpoint_msginit + + [A] envoy_api_v2_endpoint_LocalityLbEndpoints_msginit + + [A] envoy_api_v2_endpoint_UpstreamEndpointStats_msginit + + [A] envoy_api_v2_endpoint_UpstreamLocalityStats_msginit + + [A] envoy_api_v2_listener_ActiveRawUdpListenerConfig_msginit + + [A] envoy_api_v2_listener_FilterChainMatch_msginit + + [A] envoy_api_v2_listener_FilterChain_msginit + + [A] envoy_api_v2_listener_Filter_msginit + + [A] envoy_api_v2_listener_ListenerFilterChainMatchPredicate_MatchSet_msginit + + [A] envoy_api_v2_listener_ListenerFilterChainMatchPredicate_msginit + + [A] envoy_api_v2_listener_ListenerFilter_msginit + + [A] envoy_api_v2_listener_UdpListenerConfig_msginit + + [A] envoy_api_v2_route_CorsPolicy_msginit + + [A] envoy_api_v2_route_Decorator_msginit + + [A] envoy_api_v2_route_DirectResponseAction_msginit + + [A] envoy_api_v2_route_FilterAction_msginit + + [A] envoy_api_v2_route_HeaderMatcher_msginit + + [A] envoy_api_v2_route_HedgePolicy_msginit + + [A] envoy_api_v2_route_QueryParameterMatcher_msginit + + [A] envoy_api_v2_route_RateLimit_Action_DestinationCluster_msginit + + [A] envoy_api_v2_route_RateLimit_Action_GenericKey_msginit + + [A] envoy_api_v2_route_RateLimit_Action_HeaderValueMatch_msginit + + [A] envoy_api_v2_route_RateLimit_Action_RemoteAddress_msginit + + [A] envoy_api_v2_route_RateLimit_Action_RequestHeaders_msginit + + [A] envoy_api_v2_route_RateLimit_Action_SourceCluster_msginit + + [A] envoy_api_v2_route_RateLimit_Action_msginit + + [A] envoy_api_v2_route_RateLimit_msginit + + [A] envoy_api_v2_route_RedirectAction_msginit + + [A] envoy_api_v2_route_RetryPolicy_RetryBackOff_msginit + + [A] envoy_api_v2_route_RetryPolicy_RetryHostPredicate_msginit + + [A] envoy_api_v2_route_RetryPolicy_RetryPriority_msginit + + [A] envoy_api_v2_route_RetryPolicy_msginit + + [A] envoy_api_v2_route_RouteAction_HashPolicy_ConnectionProperties_msginit + + [A] envoy_api_v2_route_RouteAction_HashPolicy_Cookie_msginit + + [A] envoy_api_v2_route_RouteAction_HashPolicy_FilterState_msginit + + [A] envoy_api_v2_route_RouteAction_HashPolicy_Header_msginit + + [A] envoy_api_v2_route_RouteAction_HashPolicy_QueryParameter_msginit + + [A] envoy_api_v2_route_RouteAction_HashPolicy_msginit + + [A] envoy_api_v2_route_RouteAction_RequestMirrorPolicy_msginit + + [A] envoy_api_v2_route_RouteAction_UpgradeConfig_msginit + + [A] envoy_api_v2_route_RouteAction_msginit + + [A] envoy_api_v2_route_RouteMatch_GrpcRouteMatchOptions_msginit + + [A] envoy_api_v2_route_RouteMatch_TlsContextMatchOptions_msginit + + [A] envoy_api_v2_route_RouteMatch_msginit + + [A] envoy_api_v2_route_Route_PerFilterConfigEntry_msginit + + [A] envoy_api_v2_route_Route_TypedPerFilterConfigEntry_msginit + + [A] envoy_api_v2_route_Route_msginit + + [A] envoy_api_v2_route_Tracing_msginit + + [A] envoy_api_v2_route_VirtualCluster_msginit + + [A] envoy_api_v2_route_VirtualHost_PerFilterConfigEntry_msginit + + [A] envoy_api_v2_route_VirtualHost_TypedPerFilterConfigEntry_msginit + + [A] envoy_api_v2_route_VirtualHost_msginit + + [A] envoy_api_v2_route_WeightedCluster_ClusterWeight_PerFilterConfigEntry_msginit + + [A] envoy_api_v2_route_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_msginit + + [A] envoy_api_v2_route_WeightedCluster_ClusterWeight_msginit + + [A] envoy_api_v2_route_WeightedCluster_msginit + + [A] envoy_config_filter_accesslog_v2_AccessLogFilter_msginit + + [A] envoy_config_filter_accesslog_v2_AccessLog_msginit + + [A] envoy_config_filter_accesslog_v2_AndFilter_msginit + + [A] envoy_config_filter_accesslog_v2_ComparisonFilter_msginit + + [A] envoy_config_filter_accesslog_v2_DurationFilter_msginit + + [A] envoy_config_filter_accesslog_v2_ExtensionFilter_msginit + + [A] envoy_config_filter_accesslog_v2_GrpcStatusFilter_msginit + + [A] envoy_config_filter_accesslog_v2_HeaderFilter_msginit + + [A] envoy_config_filter_accesslog_v2_NotHealthCheckFilter_msginit + + [A] envoy_config_filter_accesslog_v2_OrFilter_msginit + + [A] envoy_config_filter_accesslog_v2_ResponseFlagFilter_msginit + + [A] envoy_config_filter_accesslog_v2_RuntimeFilter_msginit + + [A] envoy_config_filter_accesslog_v2_StatusCodeFilter_msginit + + [A] envoy_config_filter_accesslog_v2_TraceableFilter_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_InternalAddressConfig_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_SetCurrentClientCertDetails_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_Tracing_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_UpgradeConfig_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_HttpFilter_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_Rds_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_RequestIDExtension_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_ScopedRds_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_ScopedRouteConfigurationsList_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_ScopedRoutes_ScopeKeyBuilder_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_ScopedRoutes_msginit + + [A] envoy_config_listener_v2_ApiListener_msginit + + [A] envoy_config_trace_v2_Tracing_Http_msginit + + [A] envoy_config_trace_v2_Tracing_msginit + + [A] envoy_service_discovery_v2_AdsDummy_msginit + + [A] envoy_service_load_stats_v2_LoadStatsRequest_msginit + + [A] envoy_service_load_stats_v2_LoadStatsResponse_msginit + + [A] envoy_type_DoubleRange_msginit + + [A] envoy_type_FractionalPercent_msginit + + [A] envoy_type_Int32Range_msginit + + [A] envoy_type_Int64Range_msginit + + [A] envoy_type_Percent_msginit + + [A] envoy_type_SemanticVersion_msginit + + [A] envoy_type_matcher_ListStringMatcher_msginit + + [A] envoy_type_matcher_RegexMatchAndSubstitute_msginit + + [A] envoy_type_matcher_RegexMatcher_GoogleRE2_msginit + + [A] envoy_type_matcher_RegexMatcher_msginit + + [A] envoy_type_matcher_StringMatcher_msginit + + [A] envoy_type_metadata_v2_MetadataKey_PathSegment_msginit + + [A] envoy_type_metadata_v2_MetadataKey_msginit + + [A] envoy_type_metadata_v2_MetadataKind_Cluster_msginit + + [A] envoy_type_metadata_v2_MetadataKind_Host_msginit + + [A] envoy_type_metadata_v2_MetadataKind_Request_msginit + + [A] envoy_type_metadata_v2_MetadataKind_Route_msginit + + [A] envoy_type_metadata_v2_MetadataKind_msginit + + [A] envoy_type_tracing_v2_CustomTag_Environment_msginit + + [A] envoy_type_tracing_v2_CustomTag_Header_msginit + + [A] envoy_type_tracing_v2_CustomTag_Literal_msginit + + [A] envoy_type_tracing_v2_CustomTag_Metadata_msginit + + [A] envoy_type_tracing_v2_CustomTag_msginit + + [A] google_api_CustomHttpPattern_msginit + + [A] google_api_HttpRule_msginit + + [A] google_api_Http_msginit + + [A] google_protobuf_Any_msginit + + [A] google_protobuf_BoolValue_msginit + + [A] google_protobuf_BytesValue_msginit + + [A] google_protobuf_DescriptorProto_ExtensionRange_msginit + + [A] google_protobuf_DescriptorProto_ReservedRange_msginit + + [A] google_protobuf_DescriptorProto_msginit + + [A] google_protobuf_DoubleValue_msginit + + [A] google_protobuf_Duration_msginit + + [A] google_protobuf_Empty_msginit + + [A] google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit + + [A] google_protobuf_EnumDescriptorProto_msginit + + [A] google_protobuf_EnumOptions_msginit + + [A] google_protobuf_EnumValueDescriptorProto_msginit + + [A] google_protobuf_EnumValueOptions_msginit + + [A] google_protobuf_ExtensionRangeOptions_msginit + + [A] google_protobuf_FieldDescriptorProto_msginit + + [A] google_protobuf_FieldOptions_msginit + + [A] google_protobuf_FileDescriptorProto_msginit + + [A] google_protobuf_FileDescriptorSet_msginit + + [A] google_protobuf_FileOptions_msginit + + [A] google_protobuf_FloatValue_msginit + + [A] google_protobuf_GeneratedCodeInfo_Annotation_msginit + + [A] google_protobuf_GeneratedCodeInfo_msginit + + [A] google_protobuf_Int32Value_msginit + + [A] google_protobuf_Int64Value_msginit + + [A] google_protobuf_ListValue_msginit + + [A] google_protobuf_MessageOptions_msginit + + [A] google_protobuf_MethodDescriptorProto_msginit + + [A] google_protobuf_MethodOptions_msginit + + [A] google_protobuf_OneofDescriptorProto_msginit + + [A] google_protobuf_OneofOptions_msginit + + [A] google_protobuf_ServiceDescriptorProto_msginit + + [A] google_protobuf_ServiceOptions_msginit + + [A] google_protobuf_SourceCodeInfo_Location_msginit + + [A] google_protobuf_SourceCodeInfo_msginit + + [A] google_protobuf_StringValue_msginit + + [A] google_protobuf_Struct_FieldsEntry_msginit + + [A] google_protobuf_Struct_msginit + + [A] google_protobuf_Timestamp_msginit + + [A] google_protobuf_UInt32Value_msginit + + [A] google_protobuf_UInt64Value_msginit + + [A] google_protobuf_UninterpretedOption_NamePart_msginit + + [A] google_protobuf_UninterpretedOption_msginit + + [A] google_protobuf_Value_msginit + + [A] google_rpc_Status_msginit + + [A] grpc_health_v1_HealthCheckRequest_msginit + + [A] grpc_health_v1_HealthCheckResponse_msginit + + [A] grpc_keepalive_trace + + [A] grpc_lb_v1_ClientStatsPerToken_msginit + + [A] grpc_lb_v1_ClientStats_msginit + + [A] grpc_lb_v1_FallbackResponse_msginit + + [A] grpc_lb_v1_InitialLoadBalanceRequest_msginit + + [A] grpc_lb_v1_InitialLoadBalanceResponse_msginit + + [A] grpc_lb_v1_LoadBalanceRequest_msginit + + [A] grpc_lb_v1_LoadBalanceResponse_msginit + + [A] grpc_lb_v1_ServerList_msginit + + [A] grpc_lb_v1_Server_msginit + + [A] grpc_trace_chttp2_hpack_parser + + [A] udpa_annotations_FieldMigrateAnnotation_msginit + + [A] udpa_annotations_FileMigrateAnnotation_msginit + + [A] udpa_annotations_MigrateAnnotation_msginit + + [A] udpa_annotations_StatusAnnotation_msginit + + [A] udpa_data_orca_v1_OrcaLoadReport_RequestCostEntry_msginit + + [A] udpa_data_orca_v1_OrcaLoadReport_UtilizationEntry_msginit + + [A] udpa_data_orca_v1_OrcaLoadReport_msginit + + [A] validate_AnyRules_msginit + + [A] validate_BoolRules_msginit + + [A] validate_BytesRules_msginit + + [A] validate_DoubleRules_msginit + + [A] validate_DurationRules_msginit + + [A] validate_EnumRules_msginit + + [A] validate_FieldRules_msginit + + [A] validate_Fixed32Rules_msginit + + [A] validate_Fixed64Rules_msginit + + [A] validate_FloatRules_msginit + + [A] validate_Int32Rules_msginit + + [A] validate_Int64Rules_msginit + + [A] validate_MapRules_msginit + + [A] validate_MessageRules_msginit + + [A] validate_RepeatedRules_msginit + + [A] validate_SFixed32Rules_msginit + + [A] validate_SFixed64Rules_msginit + + [A] validate_SInt32Rules_msginit + + [A] validate_SInt64Rules_msginit + + [A] validate_StringRules_msginit + + [A] validate_TimestampRules_msginit + + [A] validate_UInt32Rules_msginit + + [A] validate_UInt64Rules_msginit + + + +---------------diffs in grpc_libgrpc++_unsecure.so.1.31.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + +Function symbols changes summary: 377 Removed, 224 Added function symbols not referenced by debug info + +Variable symbols changes summary: 147 Removed, 99 Added variable symbols not referenced by debug info + + + +377 Removed function symbols not referenced by debug info: + + + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10ByteBufferES2_E10OnReadDoneEb + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10ByteBufferES2_E11OnWriteDoneEb + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10ByteBufferES2_E16OnWritesDoneDoneEb + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10ByteBufferES2_E25OnReadInitialMetadataDoneEb + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10ByteBufferES2_E6OnDoneERKNS_6StatusE + + [D] _ZN4grpc12experimental17ServerBidiReactorINS_10ByteBufferES2_E10BindStreamEPNS0_26ServerCallbackReaderWriterIS2_S2_EE + + [D] _ZN4grpc12experimental17ServerBidiReactorINS_10ByteBufferES2_E10OnReadDoneEb + + [D] _ZN4grpc12experimental17ServerBidiReactorINS_10ByteBufferES2_E11OnWriteDoneEb + + [D] _ZN4grpc12experimental17ServerBidiReactorINS_10ByteBufferES2_E25OnSendInitialMetadataDoneEb + + [D] _ZN4grpc12experimental17ServerBidiReactorINS_10ByteBufferES2_E8OnCancelEv + + [D] _ZN4grpc12experimental22CallbackGenericService13CreateReactorEv + + [D] _ZN4grpc12experimental24ServerGenericBidiReactor9OnStartedEPN9grpc_impl13ServerContextE + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEE14WriteAndFinishERKS1_NS_12WriteOptionsERKNS_6StatusEPv + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEE19SendInitialMetadataEPv + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEE5WriteERKS1_NS_12WriteOptionsEPv + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEE5WriteERKS1_Pv + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEE6FinishERKNS_6StatusEPv + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEE8BindCallEPNS_8internal4CallE + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEED0Ev + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEED1Ev, aliases _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEED2Ev + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEED2Ev + + [D] _ZN4grpc19AsyncGenericService11RequestCallEPNS_20GenericServerContextEPNS_23ServerAsyncReaderWriterINS_10ByteBufferES4_EEPN9grpc_impl15CompletionQueueEPNS7_21ServerCompletionQueueEPv + + [D] _ZN4grpc19ServerBuilderPlugin19UpdateServerBuilderEPN9grpc_impl13ServerBuilderE + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E10WritesDoneEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E19ReadInitialMetadataEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E4ReadEPS1_Pv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_NS_12WriteOptionsEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_Pv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E6FinishEPNS_6StatusEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E9StartCallEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED0Ev + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED1Ev, aliases _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED2Ev + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED2Ev + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E14WriteAndFinishERKS1_NS_12WriteOptionsERKNS_6StatusEPv + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E19SendInitialMetadataEPv + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E4ReadEPS1_Pv + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_NS_12WriteOptionsEPv + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_Pv + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E6FinishERKNS_6StatusEPv + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E8BindCallEPNS_8internal4CallE + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED0Ev + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED1Ev, aliases _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED2Ev + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEE19ReadInitialMetadataEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEE6FinishEPS1_PNS_6StatusEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEE9StartCallEv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEED0Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEED1Ev, _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEED1Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEED2Ev + + [D] _ZN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEE19SendInitialMetadataEPv + + [D] _ZN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEE8BindCallEPNS_8internal4CallE + + [D] _ZN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEED0Ev + + [D] _ZN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEED1Ev, aliases _ZN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEED2Ev + + [D] _ZN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEED2Ev + + [D] _ZN4grpc37HealthCheckServiceServerBuilderOptionC1ESt10unique_ptrIN9grpc_impl27HealthCheckServiceInterfaceESt14default_deleteIS3_EE, aliases _ZN4grpc37HealthCheckServiceServerBuilderOptionC2ESt10unique_ptrIN9grpc_impl27HealthCheckServiceInterfaceESt14default_deleteIS3_EE + + [D] _ZN4grpc37HealthCheckServiceServerBuilderOptionC2ESt10unique_ptrIN9grpc_impl27HealthCheckServiceInterfaceESt14default_deleteIS3_EE + + [D] _ZN4grpc8internal16CatchingCallbackISt8functionIFvNS_6StatusEEEJS3_EEEvOT_DpOT0_ + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EE10RunHandlerERKNS0_13MethodHandler16HandlerParameterE + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS_6StatusEPPv + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EED0Ev + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EED1Ev, aliases _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EED2Ev + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EED2Ev + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EE10RunHandlerERKNS0_13MethodHandler16HandlerParameterE + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS_6StatusEPPv + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EED0Ev + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EED1Ev, aliases _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EED2Ev + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EED2Ev + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E10RunHandlerERKNS0_13MethodHandler16HandlerParameterE + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl14WriteAndFinishEPKS2_NS_12WriteOptionsENS_6StatusE + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEv + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl4ReadEPS2_ + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl5WriteEPKS2_NS_12WriteOptionsE + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl6FinishENS_6StatusE + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl9MaybeDoneEv + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplD0Ev + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplD1Ev, aliases _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplD2Ev + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplD2Ev + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_ED0Ev + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_ED1Ev, aliases _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_ED2Ev + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_ED2Ev + + [D] _ZN4grpc8internal21CallbackWithStatusTag9StaticRunEP42grpc_experimental_completion_queue_functori + + [D] _ZN4grpc8internal22CallOpClientRecvStatus8FinishOpEPb + + [D] _ZN4grpc8internal22CallbackWithSuccessTag3SetEP9grpc_callSt8functionIFvbEEPNS0_18CompletionQueueTagE + + [D] _ZN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_E6OnDoneEv + + [D] _ZN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_E9OnStartedEPN9grpc_impl13ServerContextE + + [D] _ZN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_ED0Ev + + [D] _ZN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_ED1Ev, aliases _ZN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_ED2Ev + + [D] _ZN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_ED2Ev + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E10RemoveHoldEv + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E10WritesDoneEv + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E4ReadEPS2_ + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E5WriteEPKS2_NS_12WriteOptionsE + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E7AddHoldEi + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEv + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_ED0Ev + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_ED1Ev, aliases _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_ED2Ev + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_ED2Ev + + [D] _ZN4grpc8internal30ExternalConnectionAcceptorImplC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_impl13ServerBuilder17experimental_type22ExternalConnectionTypeESt10shared_ptrINSA_17ServerCredentialsEE, aliases _ZN4grpc8internal30ExternalConnectionAcceptorImplC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_impl13ServerBuilder17experimental_type22ExternalConnectionTypeESt10shared_ptrINSA_17ServerCredentialsEE + + [D] _ZN4grpc8internal30ExternalConnectionAcceptorImplC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_impl13ServerBuilder17experimental_type22ExternalConnectionTypeESt10shared_ptrINSA_17ServerCredentialsEE + + [D] _ZN4grpc8internal31UnimplementedGenericBidiReactor6OnDoneEv + + [D] _ZN4grpc8internal31UnimplementedGenericBidiReactor9OnStartedEPNS_20GenericServerContextE + + [D] _ZN4grpc8internal31UnimplementedGenericBidiReactorD0Ev + + [D] _ZN4grpc8internal31UnimplementedGenericBidiReactorD1Ev, aliases _ZN4grpc8internal31UnimplementedGenericBidiReactorD2Ev + + [D] _ZN4grpc8internal31UnimplementedGenericBidiReactorD2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED2Ev + + [D] _ZN9grpc_core8internal24ThreadInternalsInterfaceD0Ev + + [D] _ZN9grpc_core8internal24ThreadInternalsInterfaceD1Ev, aliases _ZN9grpc_core8internal24ThreadInternalsInterfaceD2Ev + + [D] _ZN9grpc_core8internal24ThreadInternalsInterfaceD2Ev + + [D] _ZN9grpc_impl11GenericStub11PrepareCallEPNS_13ClientContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_15CompletionQueueE + + [D] _ZN9grpc_impl11GenericStub16PrepareUnaryCallEPNS_13ClientContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN4grpc10ByteBufferEPNS_15CompletionQueueE + + [D] _ZN9grpc_impl11GenericStub17experimental_type24PrepareBidiStreamingCallEPNS_13ClientContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4grpc12experimental17ClientBidiReactorINSC_10ByteBufferESF_EE + + [D] _ZN9grpc_impl11GenericStub17experimental_type9UnaryCallEPNS_13ClientContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKN4grpc10ByteBufferEPSD_St8functionIFvNSC_6StatusEEE + + [D] _ZN9grpc_impl11GenericStub4CallEPNS_13ClientContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_15CompletionQueueEPv + + [D] _ZN9grpc_impl12experimental49CreateCustomInsecureChannelWithInterceptorsFromFdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiRKNS_16ChannelArgumentsESt6vectorISt10unique_ptrIN4grpc12experimental33ClientInterceptorFactoryInterfaceESt14default_deleteISG_EESaISJ_EE + + [D] _ZN9grpc_impl13ResourceQuota13SetMaxThreadsEi + + [D] _ZN9grpc_impl13ResourceQuota6ResizeEm + + [D] _ZN9grpc_impl13ResourceQuotaC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [D] _ZN9grpc_impl13ResourceQuotaC1Ev, aliases _ZN9grpc_impl13ResourceQuotaC2Ev + + [D] _ZN9grpc_impl13ResourceQuotaC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, aliases _ZN9grpc_impl13ResourceQuotaC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [D] _ZN9grpc_impl13ResourceQuotaC2Ev + + [D] _ZN9grpc_impl13ResourceQuotaD0Ev + + [D] _ZN9grpc_impl13ResourceQuotaD1Ev, aliases _ZN9grpc_impl13ResourceQuotaD2Ev + + [D] _ZN9grpc_impl13ResourceQuotaD2Ev + + [D] _ZN9grpc_impl13ServerBuilder13BuildAndStartEv + + [D] _ZN9grpc_impl13ServerBuilder15RegisterServiceEPN4grpc7ServiceE + + [D] _ZN9grpc_impl13ServerBuilder15RegisterServiceERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4grpc7ServiceE + + [D] _ZN9grpc_impl13ServerBuilder16AddListeningPortERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10shared_ptrINS_17ServerCredentialsEEPi + + [D] _ZN9grpc_impl13ServerBuilder16EnableWorkaroundE20grpc_workaround_list + + [D] _ZN9grpc_impl13ServerBuilder16SetResourceQuotaERKNS_13ResourceQuotaE + + [D] _ZN9grpc_impl13ServerBuilder17experimental_type29AddExternalConnectionAcceptorENS1_22ExternalConnectionTypeESt10shared_ptrINS_17ServerCredentialsEE + + [D] _ZN9grpc_impl13ServerBuilder17experimental_type30RegisterCallbackGenericServiceEPN4grpc12experimental22CallbackGenericServiceE + + [D] _ZN9grpc_impl13ServerBuilder18AddCompletionQueueEb + + [D] _ZN9grpc_impl13ServerBuilder19SetSyncServerOptionENS0_16SyncServerOptionEi + + [D] _ZN9grpc_impl13ServerBuilder24InternalAddPluginFactoryEPFSt10unique_ptrIN4grpc19ServerBuilderPluginESt14default_deleteIS3_EEvE + + [D] _ZN9grpc_impl13ServerBuilder26SetDefaultCompressionLevelE22grpc_compression_level + + [D] _ZN9grpc_impl13ServerBuilder27RegisterAsyncGenericServiceEPN4grpc19AsyncGenericServiceE + + [D] _ZN9grpc_impl13ServerBuilder30SetDefaultCompressionAlgorithmE26grpc_compression_algorithm + + [D] _ZN9grpc_impl13ServerBuilder36SetCompressionAlgorithmSupportStatusE26grpc_compression_algorithmb + + [D] _ZN9grpc_impl13ServerBuilder4PortD1Ev, aliases _ZN9grpc_impl13ServerBuilder4PortD2Ev + + [D] _ZN9grpc_impl13ServerBuilder4PortD2Ev + + [D] _ZN9grpc_impl13ServerBuilder9SetOptionESt10unique_ptrINS_19ServerBuilderOptionESt14default_deleteIS2_EE + + [D] _ZN9grpc_impl13ServerBuilderC1Ev, aliases _ZN9grpc_impl13ServerBuilderC2Ev + + [D] _ZN9grpc_impl13ServerBuilderC2Ev + + [D] _ZN9grpc_impl13ServerBuilderD0Ev + + [D] _ZN9grpc_impl13ServerBuilderD1Ev, aliases _ZN9grpc_impl13ServerBuilderD2Ev + + [D] _ZN9grpc_impl13ServerBuilderD2Ev + + [D] _ZN9grpc_impl13ServerContext12CompletionOp11core_cq_tagEv + + [D] _ZN9grpc_impl13ServerContext12CompletionOp14FinalizeResultEPPvPb + + [D] _ZN9grpc_impl13ServerContext12CompletionOp17SetHijackingStateEv + + [D] _ZN9grpc_impl13ServerContext12CompletionOp32ContinueFillOpsAfterInterceptionEv + + [D] _ZN9grpc_impl13ServerContext12CompletionOp39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN9grpc_impl13ServerContext12CompletionOp5UnrefEv + + [D] _ZN9grpc_impl13ServerContext12CompletionOp7FillOpsEPN4grpc8internal4CallE + + [D] _ZN9grpc_impl13ServerContext12CompletionOpD0Ev + + [D] _ZN9grpc_impl13ServerContext12CompletionOpD1Ev + + [D] _ZN9grpc_impl13ServerContext12CompletionOpD2Ev, aliases _ZN9grpc_impl13ServerContext12CompletionOpD1Ev + + [D] _ZN9grpc_impl13ServerContext17BeginCompletionOpEPN4grpc8internal4CallESt8functionIFvbEEPNS2_13ServerReactorE + + [D] _ZN9grpc_impl13ServerContext17SetCancelCallbackESt8functionIFvvEE + + [D] _ZN9grpc_impl13ServerContext18AddInitialMetadataERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ + + [D] _ZN9grpc_impl13ServerContext18GetCompletionOpTagEv + + [D] _ZN9grpc_impl13ServerContext19AddTrailingMetadataERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ + + [D] _ZN9grpc_impl13ServerContext19ClearCancelCallbackEv + + [D] _ZN9grpc_impl13ServerContext19set_server_rpc_infoEPKcN4grpc8internal9RpcMethod7RpcTypeERKSt6vectorISt10unique_ptrINS3_12experimental33ServerInterceptorFactoryInterfaceESt14default_deleteISA_EESaISD_EE + + [D] _ZN9grpc_impl13ServerContext21SetLoadReportingCostsERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EE + + [D] _ZN9grpc_impl13ServerContext23BindDeadlineAndMetadataE12gpr_timespecP19grpc_metadata_array + + [D] _ZN9grpc_impl13ServerContext25set_compression_algorithmE26grpc_compression_algorithm + + [D] _ZN9grpc_impl13ServerContext5ClearEv + + [D] _ZN9grpc_impl13ServerContext5SetupE12gpr_timespec + + [D] _ZN9grpc_impl13ServerContextC1E12gpr_timespecP19grpc_metadata_array + + [D] _ZN9grpc_impl13ServerContextC1Ev, aliases _ZN9grpc_impl13ServerContextC2Ev + + [D] _ZN9grpc_impl13ServerContextC2E12gpr_timespecP19grpc_metadata_array, aliases _ZN9grpc_impl13ServerContextC1E12gpr_timespecP19grpc_metadata_array + + [D] _ZN9grpc_impl13ServerContextC2Ev + + [D] _ZN9grpc_impl16ChannelArguments16SetResourceQuotaERKNS_13ResourceQuotaE + + [D] _ZN9grpc_impl24AddInsecureChannelFromFdEPNS_6ServerEi + + [D] _ZN9grpc_impl27CreateInsecureChannelFromFdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi + + [D] _ZN9grpc_impl31EnableDefaultHealthCheckServiceEb + + [D] _ZN9grpc_impl32DefaultHealthCheckServiceEnabledEv + + [D] _ZN9grpc_impl33CreateCustomInsecureChannelFromFdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiRKNS_16ChannelArgumentsE + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE14FinalizeResultEPPvPb + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEv + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag3RunEb + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag9StaticRunEP42grpc_experimental_completion_queue_functori + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE7RequestEv + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEED0Ev + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEED1Ev, aliases _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEED2Ev + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEED2Ev + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE14FinalizeResultEPPvPb + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEv + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE15CallbackCallTag3RunEb + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE15CallbackCallTag9StaticRunEP42grpc_experimental_completion_queue_functori + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE7RequestEv + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEED0Ev + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEED1Ev, aliases _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEED2Ev + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEED2Ev + + [D] _ZN9grpc_impl6ServerC1EiPNS_16ChannelArgumentsESt10shared_ptrISt6vectorISt10unique_ptrINS_21ServerCompletionQueueESt14default_deleteIS6_EESaIS9_EEEiiiS4_IS3_IN4grpc8internal30ExternalConnectionAcceptorImplEESaISG_EEP19grpc_resource_quotaS4_IS5_INSD_12experimental33ServerInterceptorFactoryInterfaceES7_ISM_EESaISO_EE, aliases _ZN9grpc_impl6ServerC2EiPNS_16ChannelArgumentsESt10shared_ptrISt6vectorISt10unique_ptrINS_21ServerCompletionQueueESt14default_deleteIS6_EESaIS9_EEEiiiS4_IS3_IN4grpc8internal30ExternalConnectionAcceptorImplEESaISG_EEP19grpc_resource_quotaS4_IS5_INSD_12experimental33ServerInterceptorFactoryInterfaceES7_ISM_EESaISO_EE + + [D] _ZN9grpc_impl6ServerC2EiPNS_16ChannelArgumentsESt10shared_ptrISt6vectorISt10unique_ptrINS_21ServerCompletionQueueESt14default_deleteIS6_EESaIS9_EEEiiiS4_IS3_IN4grpc8internal30ExternalConnectionAcceptorImplEESaISG_EEP19grpc_resource_quotaS4_IS5_INSD_12experimental33ServerInterceptorFactoryInterfaceES7_ISM_EESaISO_EE + + [D] _ZNK9grpc_impl13ServerContext11IsCancelledEv + + [D] _ZNK9grpc_impl13ServerContext14census_contextEv + + [D] _ZNK9grpc_impl13ServerContext4peerB5cxx11Ev + + [D] _ZNK9grpc_impl13ServerContext9TryCancelEv + + [D] _ZNK9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE11method_nameEv + + [D] _ZNK9grpc_impl6Server15CallbackRequestINS_13ServerContextEE11method_nameEv + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc12experimental22CallbackGenericService7HandlerEvEUlvE_E10_M_managerERSt9_Any_dataRKS6_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_E10_M_managerERSt9_Any_dataRKS9_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImpl6FinishENS1_6StatusEEUlbE_E10_M_managerERSt9_Any_dataRKSA_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS2_4CallESt8functionIFvvEEPNS1_12experimental17ServerBidiReactorIS4_S4_EEEUlbE0_E10_M_managerERSt9_Any_dataRKSL_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS2_4CallESt8functionIFvvEEPNS1_12experimental17ServerBidiReactorIS4_S4_EEEUlbE1_E10_M_managerERSt9_Any_dataRKSL_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS2_4CallESt8functionIFvvEEPNS1_12experimental17ServerBidiReactorIS4_S4_EEEUlbE_E10_M_managerERSt9_Any_dataRKSL_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E10WritesDoneEvEUlbE_E10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE0_E10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE1_E10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE2_E10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE_E10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E10_M_managerERSt9_Any_dataRKSA_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag3RunEbEUlvE_E10_M_managerERSt9_Any_dataRKSA_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestINS1_13ServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E10_M_managerERSt9_Any_dataRKS9_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestINS1_13ServerContextEE15CallbackCallTag3RunEbEUlvE_E10_M_managerERSt9_Any_dataRKS9_St18_Manager_operation + + [D] _ZNSt17_Function_handlerIFPN4grpc12experimental17ServerBidiReactorINS0_10ByteBufferES3_EEvEZNS1_22CallbackGenericService7HandlerEvEUlvE_E9_M_invokeERKSt9_Any_data + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImpl6FinishENS1_6StatusEEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS2_4CallESt8functionIFvvEEPNS1_12experimental17ServerBidiReactorIS4_S4_EEEUlbE0_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS2_4CallESt8functionIFvvEEPNS1_12experimental17ServerBidiReactorIS4_S4_EEEUlbE1_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS2_4CallESt8functionIFvvEEPNS1_12experimental17ServerBidiReactorIS4_S4_EEEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E10WritesDoneEvEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE0_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE1_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE2_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E9_M_invokeERKSt9_Any_data + + [D] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag3RunEbEUlvE_E9_M_invokeERKSt9_Any_data + + [D] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestINS1_13ServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E9_M_invokeERKSt9_Any_data + + [D] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestINS1_13ServerContextEE15CallbackCallTag3RunEbEUlvE_E9_M_invokeERKSt9_Any_data + + [D] _ZNSt6vectorIN9grpc_impl13ServerBuilder4PortESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_ + + [D] _ZNSt6vectorIN9grpc_impl13ServerBuilder4PortESaIS2_EED1Ev, aliases _ZNSt6vectorIN9grpc_impl13ServerBuilder4PortESaIS2_EED2Ev + + [D] _ZNSt6vectorIN9grpc_impl13ServerBuilder4PortESaIS2_EED2Ev + + [D] _ZNSt6vectorISt10unique_ptrIN9grpc_impl13ServerBuilder12NamedServiceESt14default_deleteIS3_EESaIS6_EE12emplace_backIJPS3_EEEvDpOT_ + + [D] _ZNSt6vectorISt10unique_ptrIN9grpc_impl13ServerBuilder12NamedServiceESt14default_deleteIS3_EESaIS6_EE17_M_realloc_insertIJPS3_EEEvN9__gnu_cxx17__normal_iteratorIPS6_S8_EEDpOT_ + + [D] _ZNSt6vectorIlSaIlEE12emplace_backIJlEEEvDpOT_ + + [D] _ZNSt6vectorIlSaIlEE17_M_realloc_insertIJlEEEvN9__gnu_cxx17__normal_iteratorIPlS1_EEDpOT_ + + [D] _ZNSt8functionIFvN4grpc6StatusEEEC1ERKS3_, aliases _ZNSt8functionIFvN4grpc6StatusEEEC2ERKS3_ + + [D] _ZNSt8functionIFvN4grpc6StatusEEEC2ERKS3_ + + [D] _ZThn16_N4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E4ReadEPS1_Pv + + [D] _ZThn16_N4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED0Ev + + [D] _ZThn16_N4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED1Ev + + [D] _ZThn16_N4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E4ReadEPS1_Pv + + [D] _ZThn16_N4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED0Ev + + [D] _ZThn16_N4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED1Ev + + [D] _ZThn8_N4grpc17ServerAsyncWriterINS_10ByteBufferEE5WriteERKS1_NS_12WriteOptionsEPv + + [D] _ZThn8_N4grpc17ServerAsyncWriterINS_10ByteBufferEE5WriteERKS1_Pv + + [D] _ZThn8_N4grpc17ServerAsyncWriterINS_10ByteBufferEED0Ev + + [D] _ZThn8_N4grpc17ServerAsyncWriterINS_10ByteBufferEED1Ev + + [D] _ZThn8_N4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_NS_12WriteOptionsEPv + + [D] _ZThn8_N4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_Pv + + [D] _ZThn8_N4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED0Ev + + [D] _ZThn8_N4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED1Ev + + [D] _ZThn8_N4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_NS_12WriteOptionsEPv + + [D] _ZThn8_N4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_Pv + + [D] _ZThn8_N4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED0Ev + + [D] _ZThn8_N4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED1Ev + + [D] pb_close_string_substream + + [D] pb_decode + + [D] pb_decode_delimited + + [D] pb_decode_fixed32 + + [D] pb_decode_fixed64 + + [D] pb_decode_noinit + + [D] pb_decode_svarint + + [D] pb_decode_tag + + [D] pb_decode_varint + + [D] pb_encode + + [D] pb_encode_delimited + + [D] pb_encode_fixed32 + + [D] pb_encode_fixed64 + + [D] pb_encode_string + + [D] pb_encode_submessage + + [D] pb_encode_svarint + + [D] pb_encode_tag + + [D] pb_encode_tag_for_field + + [D] pb_encode_varint + + [D] pb_field_iter_begin + + [D] pb_field_iter_find + + [D] pb_field_iter_next + + [D] pb_get_encoded_size + + [D] pb_istream_from_buffer + + [D] pb_make_string_substream + + [D] pb_ostream_from_buffer + + [D] pb_read + + [D] pb_skip_field + + [D] pb_write + + + +224 Added function symbols not referenced by debug info: + + + + [A] _ZN12closure_impl15closure_wrapperEPvP10grpc_error + + [A] _ZN4grpc11CoreCodegen25grpc_call_error_to_stringE15grpc_call_error + + [A] _ZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextE + + [A] _ZN4grpc12experimental28GenericCallbackServerContextD0Ev + + [A] _ZN4grpc12experimental28GenericCallbackServerContextD1Ev + + [A] _ZN4grpc12experimental28GenericCallbackServerContextD2Ev, aliases _ZN4grpc12experimental28GenericCallbackServerContextD1Ev + + [A] _ZN4grpc12experimental49CreateCustomInsecureChannelWithInterceptorsFromFdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiRKN9grpc_impl16ChannelArgumentsESt6vectorISt10unique_ptrINS0_33ClientInterceptorFactoryInterfaceESt14default_deleteISF_EESaISI_EE + + [A] _ZN4grpc13ResourceQuota13SetMaxThreadsEi + + [A] _ZN4grpc13ResourceQuota6ResizeEm + + [A] _ZN4grpc13ResourceQuotaC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, aliases _ZN4grpc13ResourceQuotaC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN4grpc13ResourceQuotaC1Ev, aliases _ZN4grpc13ResourceQuotaC2Ev + + [A] _ZN4grpc13ResourceQuotaC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN4grpc13ResourceQuotaC2Ev + + [A] _ZN4grpc13ResourceQuotaD0Ev + + [A] _ZN4grpc13ResourceQuotaD1Ev, aliases _ZN4grpc13ResourceQuotaD2Ev + + [A] _ZN4grpc13ResourceQuotaD2Ev + + [A] _ZN4grpc13ServerBuilder13BuildAndStartEv + + [A] _ZN4grpc13ServerBuilder15RegisterServiceEPNS_7ServiceE + + [A] _ZN4grpc13ServerBuilder15RegisterServiceERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_7ServiceE + + [A] _ZN4grpc13ServerBuilder16AddListeningPortERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10shared_ptrIN9grpc_impl17ServerCredentialsEEPi + + [A] _ZN4grpc13ServerBuilder16EnableWorkaroundE20grpc_workaround_list + + [A] _ZN4grpc13ServerBuilder16SetResourceQuotaERKNS_13ResourceQuotaE + + [A] _ZN4grpc13ServerBuilder17experimental_type29AddExternalConnectionAcceptorENS1_22ExternalConnectionTypeESt10shared_ptrIN9grpc_impl17ServerCredentialsEE + + [A] _ZN4grpc13ServerBuilder17experimental_type30RegisterCallbackGenericServiceEPNS_12experimental22CallbackGenericServiceE + + [A] _ZN4grpc13ServerBuilder18AddCompletionQueueEb + + [A] _ZN4grpc13ServerBuilder19SetSyncServerOptionENS0_16SyncServerOptionEi + + [A] _ZN4grpc13ServerBuilder24InternalAddPluginFactoryEPFSt10unique_ptrINS_19ServerBuilderPluginESt14default_deleteIS2_EEvE + + [A] _ZN4grpc13ServerBuilder26SetDefaultCompressionLevelE22grpc_compression_level + + [A] _ZN4grpc13ServerBuilder27RegisterAsyncGenericServiceEPNS_19AsyncGenericServiceE + + [A] _ZN4grpc13ServerBuilder30SetDefaultCompressionAlgorithmE26grpc_compression_algorithm + + [A] _ZN4grpc13ServerBuilder36SetCompressionAlgorithmSupportStatusE26grpc_compression_algorithmb + + [A] _ZN4grpc13ServerBuilder4PortD1Ev, aliases _ZN4grpc13ServerBuilder4PortD2Ev + + [A] _ZN4grpc13ServerBuilder4PortD2Ev + + [A] _ZN4grpc13ServerBuilder9SetOptionESt10unique_ptrIN9grpc_impl19ServerBuilderOptionESt14default_deleteIS3_EE + + [A] _ZN4grpc13ServerBuilderC1Ev, aliases _ZN4grpc13ServerBuilderC2Ev + + [A] _ZN4grpc13ServerBuilderC2Ev + + [A] _ZN4grpc13ServerBuilderD0Ev + + [A] _ZN4grpc13ServerBuilderD1Ev, aliases _ZN4grpc13ServerBuilderD2Ev + + [A] _ZN4grpc13ServerBuilderD2Ev + + [A] _ZN4grpc19AsyncGenericService11RequestCallEPNS_20GenericServerContextEPN9grpc_impl23ServerAsyncReaderWriterINS_10ByteBufferES5_EEPNS3_15CompletionQueueEPNS3_21ServerCompletionQueueEPv + + [A] _ZN4grpc19ServerBuilderPlugin19UpdateServerBuilderEPNS_13ServerBuilderE + + [A] _ZN4grpc20GenericServerContextD0Ev + + [A] _ZN4grpc24AddInsecureChannelFromFdEPN9grpc_impl6ServerEi + + [A] _ZN4grpc27CreateInsecureChannelFromFdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi + + [A] _ZN4grpc31EnableDefaultHealthCheckServiceEb + + [A] _ZN4grpc32DefaultHealthCheckServiceEnabledEv + + [A] _ZN4grpc33CreateCustomInsecureChannelFromFdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiRKN9grpc_impl16ChannelArgumentsE + + [A] _ZN4grpc37HealthCheckServiceServerBuilderOptionC1ESt10unique_ptrINS_27HealthCheckServiceInterfaceESt14default_deleteIS2_EE + + [A] _ZN4grpc37HealthCheckServiceServerBuilderOptionC2ESt10unique_ptrINS_27HealthCheckServiceInterfaceESt14default_deleteIS2_EE, aliases _ZN4grpc37HealthCheckServiceServerBuilderOptionC1ESt10unique_ptrINS_27HealthCheckServiceInterfaceESt14default_deleteIS2_EE + + [A] _ZN4grpc8internal22CallbackWithSuccessTag3SetEP9grpc_callSt8functionIFvbEEPNS0_18CompletionQueueTagEb + + [A] _ZN4grpc8internal30ExternalConnectionAcceptorImplC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_13ServerBuilder17experimental_type22ExternalConnectionTypeESt10shared_ptrIN9grpc_impl17ServerCredentialsEE, aliases _ZN4grpc8internal30ExternalConnectionAcceptorImplC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_13ServerBuilder17experimental_type22ExternalConnectionTypeESt10shared_ptrIN9grpc_impl17ServerCredentialsEE + + [A] _ZN4grpc8internal30ExternalConnectionAcceptorImplC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_13ServerBuilder17experimental_type22ExternalConnectionTypeESt10shared_ptrIN9grpc_impl17ServerCredentialsEE + + [A] _ZN9grpc_impl13ClientContext15set_credentialsERKSt10shared_ptrINS_15CallCredentialsEE + + [A] _ZN9grpc_impl13ClientContext25FromCallbackServerContextERKNS_21CallbackServerContextENS_18PropagationOptionsE + + [A] _ZN9grpc_impl13ClientContext25FromInternalServerContextERKNS_17ServerContextBaseENS_18PropagationOptionsE + + [A] _ZN9grpc_impl13ServerContextD0Ev + + [A] _ZN9grpc_impl15CallCredentials11DebugStringB5cxx11Ev + + [A] _ZN9grpc_impl16ChannelArguments16SetResourceQuotaERKN4grpc13ResourceQuotaE + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE14WriteAndFinishERKS2_NS1_12WriteOptionsERKNS1_6StatusEPv + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE19SendInitialMetadataEPv + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE5WriteERKS2_NS1_12WriteOptionsEPv + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE5WriteERKS2_Pv + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE6FinishERKNS1_6StatusEPv + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE8BindCallEPNS1_8internal4CallE + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEED0Ev + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEED1Ev, aliases _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEED2Ev + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEED2Ev + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_E10OnReadDoneEb + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_E11OnWriteDoneEb + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_E18InternalBindStreamEPNS_26ServerCallbackReaderWriterIS2_S2_EE + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_E25OnSendInitialMetadataDoneEb + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_E6FinishENS1_6StatusE + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_E8OnCancelEv + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_ED0Ev + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_ED1Ev, aliases _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_ED2Ev + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_ED2Ev + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOp11core_cq_tagEv + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOp14FinalizeResultEPPvPb + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOp17SetHijackingStateEv + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOp32ContinueFillOpsAfterInterceptionEv + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOp39ContinueFinalizeResultAfterInterceptionEv + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOp5UnrefEv + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOp7FillOpsEPN4grpc8internal4CallE + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOpD0Ev + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOpD1Ev, aliases _ZN9grpc_impl17ServerContextBase12CompletionOpD2Ev + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOpD2Ev + + [A] _ZN9grpc_impl17ServerContextBase17BeginCompletionOpEPN4grpc8internal4CallESt8functionIFvbEEPNS_8internal18ServerCallbackCallE + + [A] _ZN9grpc_impl17ServerContextBase18AddInitialMetadataERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ + + [A] _ZN9grpc_impl17ServerContextBase18GetCompletionOpTagEv + + [A] _ZN9grpc_impl17ServerContextBase19AddTrailingMetadataERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ + + [A] _ZN9grpc_impl17ServerContextBase19set_server_rpc_infoEPKcN4grpc8internal9RpcMethod7RpcTypeERKSt6vectorISt10unique_ptrINS3_12experimental33ServerInterceptorFactoryInterfaceESt14default_deleteISA_EESaISD_EE + + [A] _ZN9grpc_impl17ServerContextBase21SetLoadReportingCostsERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EE + + [A] _ZN9grpc_impl17ServerContextBase23BindDeadlineAndMetadataE12gpr_timespecP19grpc_metadata_array + + [A] _ZN9grpc_impl17ServerContextBase23TestServerCallbackUnary7reactorEv + + [A] _ZN9grpc_impl17ServerContextBase25set_compression_algorithmE26grpc_compression_algorithm + + [A] _ZN9grpc_impl17ServerContextBase5ClearEv + + [A] _ZN9grpc_impl17ServerContextBase5SetupE12gpr_timespec + + [A] _ZN9grpc_impl17ServerContextBaseC1E12gpr_timespecP19grpc_metadata_array + + [A] _ZN9grpc_impl17ServerContextBaseC1Ev, aliases _ZN9grpc_impl17ServerContextBaseC2Ev + + [A] _ZN9grpc_impl17ServerContextBaseC2E12gpr_timespecP19grpc_metadata_array, aliases _ZN9grpc_impl17ServerContextBaseC1E12gpr_timespecP19grpc_metadata_array + + [A] _ZN9grpc_impl17ServerContextBaseC2Ev + + [A] _ZN9grpc_impl17ServerContextBaseD0Ev + + [A] _ZN9grpc_impl17ServerContextBaseD1Ev, aliases _ZN9grpc_impl17ServerContextBaseD2Ev + + [A] _ZN9grpc_impl17ServerContextBaseD2Ev + + [A] _ZN9grpc_impl18ClientUnaryReactor6OnDoneERKN4grpc6StatusE + + [A] _ZN9grpc_impl18ServerUnaryReactor8OnCancelEv + + [A] _ZN9grpc_impl21CallbackServerContextD0Ev + + [A] _ZN9grpc_impl21CallbackServerContextD1Ev, aliases _ZN9grpc_impl21CallbackServerContextD2Ev + + [A] _ZN9grpc_impl21CallbackServerContextD2Ev + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E14WriteAndFinishERKS2_NS1_12WriteOptionsERKNS1_6StatusEPv + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E19SendInitialMetadataEPv + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E4ReadEPS2_Pv + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E5WriteERKS2_NS1_12WriteOptionsEPv + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E5WriteERKS2_Pv + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E6FinishERKNS1_6StatusEPv + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E8BindCallEPNS1_8internal4CallE + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED0Ev + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED1Ev, aliases _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED2Ev + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED2Ev + + [A] _ZN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEE19SendInitialMetadataEPv + + [A] _ZN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEE8BindCallEPNS1_8internal4CallE + + [A] _ZN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEED0Ev + + [A] _ZN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEED1Ev, aliases _ZN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEED2Ev + + [A] _ZN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEED2Ev + + [A] _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE14FinalizeResultEPPvPb + + [A] _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEv + + [A] _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag3RunEb + + [A] _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag9StaticRunEP42grpc_experimental_completion_queue_functori + + [A] _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEED0Ev + + [A] _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEED1Ev, aliases _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEED2Ev + + [A] _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEED2Ev + + [A] _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE14FinalizeResultEPPvPb + + [A] _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEv + + [A] _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE15CallbackCallTag3RunEb + + [A] _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE15CallbackCallTag9StaticRunEP42grpc_experimental_completion_queue_functori + + [A] _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEED0Ev + + [A] _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEED1Ev + + [A] _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEED2Ev, aliases _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEED1Ev + + [A] _ZN9grpc_impl6Server18UnrefAndWaitLockedEv + + [A] _ZN9grpc_impl6Server23UnrefWithPossibleNotifyEv + + [A] _ZN9grpc_impl6Server3RefEv + + [A] _ZN9grpc_impl6ServerC1EPNS_16ChannelArgumentsESt10shared_ptrISt6vectorISt10unique_ptrINS_21ServerCompletionQueueESt14default_deleteIS6_EESaIS9_EEEiiiS4_IS3_IN4grpc8internal30ExternalConnectionAcceptorImplEESaISG_EEP19grpc_resource_quotaS4_IS5_INSD_12experimental33ServerInterceptorFactoryInterfaceES7_ISM_EESaISO_EE + + [A] _ZN9grpc_impl6ServerC2EPNS_16ChannelArgumentsESt10shared_ptrISt6vectorISt10unique_ptrINS_21ServerCompletionQueueESt14default_deleteIS6_EESaIS9_EEEiiiS4_IS3_IN4grpc8internal30ExternalConnectionAcceptorImplEESaISG_EEP19grpc_resource_quotaS4_IS5_INSD_12experimental33ServerInterceptorFactoryInterfaceES7_ISM_EESaISO_EE, aliases _ZN9grpc_impl6ServerC1EPNS_16ChannelArgumentsESt10shared_ptrISt6vectorISt10unique_ptrINS_21ServerCompletionQueueESt14default_deleteIS6_EESaIS9_EEEiiiS4_IS3_IN4grpc8internal30ExternalConnectionAcceptorImplEESaISG_EEP19grpc_resource_quotaS4_IS5_INSD_12experimental33ServerInterceptorFactoryInterfaceES7_ISM_EESaISO_EE + + [A] _ZN9grpc_impl8internal13ClientReactor22InternalScheduleOnDoneEN4grpc6StatusE + + [A] _ZN9grpc_impl8internal13ServerReactor18InternalInlineableEv + + [A] _ZN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEE6OnDoneEv + + [A] _ZN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEED0Ev + + [A] _ZN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEED1Ev, aliases _ZN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEED2Ev + + [A] _ZN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEED2Ev + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EE10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterE + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS2_6StatusEPPv + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EED0Ev + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EED1Ev, aliases _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EED2Ev + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EED2Ev + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EE10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterE + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS2_6StatusEPPv + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EED0Ev + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EED1Ev, aliases _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EED2Ev + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EED2Ev + + [A] _ZN9grpc_impl8internal18ServerCallbackCall12CallOnCancelEPNS0_13ServerReactorE + + [A] _ZN9grpc_impl8internal18ServerCallbackCall14ScheduleOnDoneEb + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterE + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl10CallOnDoneEv + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl14WriteAndFinishEPKS3_NS2_12WriteOptionsENS2_6StatusE + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEv + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl4ReadEPS3_ + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl5WriteEPKS3_NS2_12WriteOptionsE + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl6FinishENS2_6StatusE + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl7reactorEv + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImplD0Ev + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImplD1Ev, aliases _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImplD2Ev + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImplD2Ev + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_ED0Ev + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_ED1Ev, aliases _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_ED2Ev + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_ED2Ev + + [A] _ZNK9grpc_impl17ServerContextBase11IsCancelledEv + + [A] _ZNK9grpc_impl17ServerContextBase14census_contextEv + + [A] _ZNK9grpc_impl17ServerContextBase4peerB5cxx11Ev + + [A] _ZNK9grpc_impl17ServerContextBase9TryCancelEv + + [A] _ZNK9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE11method_nameEv + + [A] _ZNK9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE11method_nameEv + + [A] _ZNSt14_Function_base13_Base_managerIZN4grpc12experimental22CallbackGenericService7HandlerEvEUlPN9grpc_impl21CallbackServerContextEE_E10_M_managerERSt9_Any_dataRKS9_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E10_M_managerERSt9_Any_dataRKSB_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag3RunEbEUlvE_E10_M_managerERSt9_Any_dataRKSB_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestINS1_21CallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E10_M_managerERSt9_Any_dataRKS9_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestINS1_21CallbackServerContextEE15CallbackCallTag3RunEbEUlvE_E10_M_managerERSt9_Any_dataRKS9_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E10RunHandlerERKNS4_8internal13MethodHandler16HandlerParameterEEUlbE_E10_M_managerERSt9_Any_dataRKSE_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS1_17ServerBidiReactorIS5_S5_EEEUlbE0_E10_M_managerERSt9_Any_dataRKSD_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS1_17ServerBidiReactorIS5_S5_EEEUlbE_E10_M_managerERSt9_Any_dataRKSD_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_E10_M_managerERSt9_Any_dataRKSA_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl6FinishENS4_6StatusEEUlbE_E10_M_managerERSt9_Any_dataRKSB_St18_Manager_operation + + [A] _ZNSt17_Function_handlerIFPN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES3_EEPNS0_21CallbackServerContextEEZNS2_12experimental22CallbackGenericService7HandlerEvEUlS7_E_E9_M_invokeERKSt9_Any_dataOS7_ + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E10RunHandlerERKNS4_8internal13MethodHandler16HandlerParameterEEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS1_17ServerBidiReactorIS5_S5_EEEUlbE0_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS1_17ServerBidiReactorIS5_S5_EEEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl6FinishENS4_6StatusEEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag3RunEbEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestINS1_21CallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestINS1_21CallbackServerContextEE15CallbackCallTag3RunEbEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt6vectorIN4grpc13ServerBuilder4PortESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_ + + [A] _ZNSt6vectorIN4grpc13ServerBuilder4PortESaIS2_EED1Ev, aliases _ZNSt6vectorIN4grpc13ServerBuilder4PortESaIS2_EED2Ev + + [A] _ZNSt6vectorIN4grpc13ServerBuilder4PortESaIS2_EED2Ev + + [A] _ZNSt6vectorIPN9grpc_impl15CompletionQueueESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_ + + [A] _ZNSt6vectorISt10unique_ptrIN4grpc13ServerBuilder12NamedServiceESt14default_deleteIS3_EESaIS6_EE12emplace_backIJPS3_EEEvDpOT_ + + [A] _ZNSt6vectorISt10unique_ptrIN4grpc13ServerBuilder12NamedServiceESt14default_deleteIS3_EESaIS6_EE17_M_realloc_insertIJPS3_EEEvN9__gnu_cxx17__normal_iteratorIPS6_S8_EEDpOT_ + + [A] _ZThn16_N9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E4ReadEPS2_Pv + + [A] _ZThn16_N9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED0Ev + + [A] _ZThn16_N9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED1Ev + + [A] _ZThn8_N9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE5WriteERKS2_NS1_12WriteOptionsEPv + + [A] _ZThn8_N9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE5WriteERKS2_Pv + + [A] _ZThn8_N9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEED0Ev + + [A] _ZThn8_N9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEED1Ev + + [A] _ZThn8_N9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E5WriteERKS2_NS1_12WriteOptionsEPv + + [A] _ZThn8_N9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E5WriteERKS2_Pv + + [A] _ZThn8_N9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED0Ev + + [A] _ZThn8_N9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED1Ev + + [A] _ZZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEEN7Reactor6OnDoneEv + + [A] _ZZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEEN7ReactorD0Ev + + [A] _ZZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEEN7ReactorD1Ev, aliases _ZZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEEN7ReactorD2Ev + + [A] _ZZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEEN7ReactorD2Ev + + [A] _ZZZN9grpc_impl8internal9AlarmImpl3SetE12gpr_timespecSt8functionIFvbEEENKUlPvP10grpc_errorE_clES6_S8_ENKUlS6_S8_E_clES6_S8_ + + [A] _ZZZN9grpc_impl8internal9AlarmImpl3SetE12gpr_timespecSt8functionIFvbEEENKUlPvP10grpc_errorE_clES6_S8_ENUlS6_S8_E_4_FUNES6_S8_ + + + +147 Removed variable symbols not referenced by debug info: + + + + [D] _ZTIN4grpc12experimental17ServerBidiReactorINS_10ByteBufferES2_EE + + [D] _ZTIN4grpc12experimental24ServerGenericBidiReactorE + + [D] _ZTIN4grpc12experimental26ClientCallbackReaderWriterINS_10ByteBufferES2_EE + + [D] _ZTIN4grpc12experimental26ServerCallbackReaderWriterINS_10ByteBufferES2_EE + + [D] _ZTIN4grpc17ServerAsyncWriterINS_10ByteBufferEEE + + [D] _ZTIN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_EE + + [D] _ZTIN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_EE + + [D] _ZTIN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEEE + + [D] _ZTIN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEEE + + [D] _ZTIN4grpc26ServerAsyncWriterInterfaceINS_10ByteBufferEEE + + [D] _ZTIN4grpc32ClientAsyncReaderWriterInterfaceINS_10ByteBufferES1_EE + + [D] _ZTIN4grpc32ServerAsyncReaderWriterInterfaceINS_10ByteBufferES1_EE + + [D] _ZTIN4grpc34ClientAsyncResponseReaderInterfaceINS_10ByteBufferEEE + + [D] _ZTIN4grpc8internal13ServerReactorE + + [D] _ZTIN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EEE + + [D] _ZTIN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EEE + + [D] _ZTIN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplE + + [D] _ZTIN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_EE + + [D] _ZTIN4grpc8internal20AsyncReaderInterfaceINS_10ByteBufferEEE + + [D] _ZTIN4grpc8internal20AsyncWriterInterfaceINS_10ByteBufferEEE + + [D] _ZTIN4grpc8internal21CallOpClientSendCloseE + + [D] _ZTIN4grpc8internal22CallOpClientRecvStatusE + + [D] _ZTIN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_EE + + [D] _ZTIN4grpc8internal25CallOpRecvInitialMetadataE + + [D] _ZTIN4grpc8internal29ClientAsyncStreamingInterfaceE + + [D] _ZTIN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_EE + + [D] _ZTIN4grpc8internal31UnimplementedGenericBidiReactorE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTIN9grpc_impl13ResourceQuotaE + + [D] _ZTIN9grpc_impl13ServerBuilderE + + [D] _ZTIN9grpc_impl13ServerContext12CompletionOpE + + [D] _ZTIN9grpc_impl27HealthCheckServiceInterfaceE + + [D] _ZTIN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEEE + + [D] _ZTIN9grpc_impl6Server15CallbackRequestINS_13ServerContextEEE + + [D] _ZTIN9grpc_impl6Server19CallbackRequestBaseE + + [D] _ZTIZN4grpc12experimental22CallbackGenericService7HandlerEvEUlvE_ + + [D] _ZTIZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_ + + [D] _ZTIZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl6FinishENS_6StatusEEUlbE_ + + [D] _ZTIZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS0_4CallESt8functionIFvvEEPNS_12experimental17ServerBidiReactorIS2_S2_EEEUlbE0_ + + [D] _ZTIZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS0_4CallESt8functionIFvvEEPNS_12experimental17ServerBidiReactorIS2_S2_EEEUlbE1_ + + [D] _ZTIZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS0_4CallESt8functionIFvvEEPNS_12experimental17ServerBidiReactorIS2_S2_EEEUlbE_ + + [D] _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E10WritesDoneEvEUlbE_ + + [D] _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE0_ + + [D] _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE1_ + + [D] _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE2_ + + [D] _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE_ + + [D] _ZTIZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + [D] _ZTIZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag3RunEbEUlvE_ + + [D] _ZTIZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + [D] _ZTIZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE15CallbackCallTag3RunEbEUlvE_ + + [D] _ZTSN4grpc12experimental17ServerBidiReactorINS_10ByteBufferES2_EE + + [D] _ZTSN4grpc12experimental24ServerGenericBidiReactorE + + [D] _ZTSN4grpc12experimental26ClientCallbackReaderWriterINS_10ByteBufferES2_EE + + [D] _ZTSN4grpc12experimental26ServerCallbackReaderWriterINS_10ByteBufferES2_EE + + [D] _ZTSN4grpc17ServerAsyncWriterINS_10ByteBufferEEE + + [D] _ZTSN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_EE + + [D] _ZTSN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_EE + + [D] _ZTSN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEEE + + [D] _ZTSN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEEE + + [D] _ZTSN4grpc26ServerAsyncWriterInterfaceINS_10ByteBufferEEE + + [D] _ZTSN4grpc32ClientAsyncReaderWriterInterfaceINS_10ByteBufferES1_EE + + [D] _ZTSN4grpc32ServerAsyncReaderWriterInterfaceINS_10ByteBufferES1_EE + + [D] _ZTSN4grpc34ClientAsyncResponseReaderInterfaceINS_10ByteBufferEEE + + [D] _ZTSN4grpc8internal13ServerReactorE + + [D] _ZTSN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EEE + + [D] _ZTSN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EEE + + [D] _ZTSN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplE + + [D] _ZTSN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_EE + + [D] _ZTSN4grpc8internal20AsyncReaderInterfaceINS_10ByteBufferEEE + + [D] _ZTSN4grpc8internal20AsyncWriterInterfaceINS_10ByteBufferEEE + + [D] _ZTSN4grpc8internal21CallOpClientSendCloseE + + [D] _ZTSN4grpc8internal22CallOpClientRecvStatusE + + [D] _ZTSN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_EE + + [D] _ZTSN4grpc8internal25CallOpRecvInitialMetadataE + + [D] _ZTSN4grpc8internal29ClientAsyncStreamingInterfaceE + + [D] _ZTSN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_EE + + [D] _ZTSN4grpc8internal31UnimplementedGenericBidiReactorE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTSN9grpc_impl13ResourceQuotaE + + [D] _ZTSN9grpc_impl13ServerBuilderE + + [D] _ZTSN9grpc_impl13ServerContext12CompletionOpE + + [D] _ZTSN9grpc_impl27HealthCheckServiceInterfaceE + + [D] _ZTSN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEEE + + [D] _ZTSN9grpc_impl6Server15CallbackRequestINS_13ServerContextEEE + + [D] _ZTSN9grpc_impl6Server19CallbackRequestBaseE + + [D] _ZTSZN4grpc12experimental22CallbackGenericService7HandlerEvEUlvE_ + + [D] _ZTSZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_ + + [D] _ZTSZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl6FinishENS_6StatusEEUlbE_ + + [D] _ZTSZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS0_4CallESt8functionIFvvEEPNS_12experimental17ServerBidiReactorIS2_S2_EEEUlbE0_ + + [D] _ZTSZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS0_4CallESt8functionIFvvEEPNS_12experimental17ServerBidiReactorIS2_S2_EEEUlbE1_ + + [D] _ZTSZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS0_4CallESt8functionIFvvEEPNS_12experimental17ServerBidiReactorIS2_S2_EEEUlbE_ + + [D] _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E10WritesDoneEvEUlbE_ + + [D] _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE0_ + + [D] _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE1_ + + [D] _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE2_ + + [D] _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE_ + + [D] _ZTSZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + [D] _ZTSZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag3RunEbEUlvE_ + + [D] _ZTSZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + [D] _ZTSZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE15CallbackCallTag3RunEbEUlvE_ + + [D] _ZTVN4grpc17ServerAsyncWriterINS_10ByteBufferEEE + + [D] _ZTVN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_EE + + [D] _ZTVN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_EE + + [D] _ZTVN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEEE + + [D] _ZTVN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEEE + + [D] _ZTVN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EEE + + [D] _ZTVN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EEE + + [D] _ZTVN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplE + + [D] _ZTVN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_EE + + [D] _ZTVN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_EE + + [D] _ZTVN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_EE + + [D] _ZTVN4grpc8internal31UnimplementedGenericBidiReactorE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTVN9grpc_impl13ResourceQuotaE + + [D] _ZTVN9grpc_impl13ServerBuilderE + + [D] _ZTVN9grpc_impl13ServerContext12CompletionOpE + + [D] _ZTVN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEEE + + [D] _ZTVN9grpc_impl6Server15CallbackRequestINS_13ServerContextEEE + + [D] grpc_health_v1_HealthCheckRequest_fields + + [D] grpc_health_v1_HealthCheckResponse_fields + + + +99 Added variable symbols not referenced by debug info: + + + + _ZTIN4grpc12experimental28GenericCallbackServerContextE + + _ZTIN4grpc13ResourceQuotaE + + _ZTIN4grpc13ServerBuilderE + + _ZTIN4grpc20GenericServerContextE + + _ZTIN4grpc27HealthCheckServiceInterfaceE + + _ZTIN9grpc_impl13ServerContextE + + _ZTIN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEEE + + _ZTIN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_EE + + _ZTIN9grpc_impl17ServerContextBase12CompletionOpE + + _ZTIN9grpc_impl17ServerContextBaseE + + _ZTIN9grpc_impl21CallbackServerContextE + + _ZTIN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_EE + + _ZTIN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEEE + + _ZTIN9grpc_impl26ServerAsyncWriterInterfaceIN4grpc10ByteBufferEEE + + _ZTIN9grpc_impl26ServerCallbackReaderWriterIN4grpc10ByteBufferES2_EE + + _ZTIN9grpc_impl32ServerAsyncReaderWriterInterfaceIN4grpc10ByteBufferES2_EE + + _ZTIN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEEE + + _ZTIN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEEE + + _ZTIN9grpc_impl8internal13ClientReactorE + + _ZTIN9grpc_impl8internal13ServerReactorE + + _ZTIN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEEE + + _ZTIN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EEE + + _ZTIN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EEE + + _ZTIN9grpc_impl8internal18ServerCallbackCallE + + _ZTIN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImplE + + _ZTIN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_EE + + _ZTIN9grpc_impl8internal20AsyncReaderInterfaceIN4grpc10ByteBufferEEE + + _ZTIN9grpc_impl8internal20AsyncWriterInterfaceIN4grpc10ByteBufferEEE + + _ZTIZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEE7Reactor + + _ZTIZN4grpc12experimental22CallbackGenericService7HandlerEvEUlPN9grpc_impl21CallbackServerContextEE_ + + _ZTIZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + _ZTIZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag3RunEbEUlvE_ + + _ZTIZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + _ZTIZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE15CallbackCallTag3RunEbEUlvE_ + + _ZTIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterEEUlbE_ + + _ZTIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS_17ServerBidiReactorIS3_S3_EEEUlbE0_ + + _ZTIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS_17ServerBidiReactorIS3_S3_EEEUlbE_ + + _ZTIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_ + + _ZTIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl6FinishENS2_6StatusEEUlbE_ + + _ZTSN4grpc12experimental28GenericCallbackServerContextE + + _ZTSN4grpc13ResourceQuotaE + + _ZTSN4grpc13ServerBuilderE + + _ZTSN4grpc20GenericServerContextE + + _ZTSN4grpc27HealthCheckServiceInterfaceE + + _ZTSN9grpc_impl13ServerContextE + + _ZTSN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEEE + + _ZTSN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_EE + + _ZTSN9grpc_impl17ServerContextBase12CompletionOpE + + _ZTSN9grpc_impl17ServerContextBaseE + + _ZTSN9grpc_impl21CallbackServerContextE + + _ZTSN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_EE + + _ZTSN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEEE + + _ZTSN9grpc_impl26ServerAsyncWriterInterfaceIN4grpc10ByteBufferEEE + + _ZTSN9grpc_impl26ServerCallbackReaderWriterIN4grpc10ByteBufferES2_EE + + _ZTSN9grpc_impl32ServerAsyncReaderWriterInterfaceIN4grpc10ByteBufferES2_EE + + _ZTSN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEEE + + _ZTSN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEEE + + _ZTSN9grpc_impl8internal13ClientReactorE + + _ZTSN9grpc_impl8internal13ServerReactorE + + _ZTSN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEEE + + _ZTSN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EEE + + _ZTSN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EEE + + _ZTSN9grpc_impl8internal18ServerCallbackCallE + + _ZTSN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImplE + + _ZTSN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_EE + + _ZTSN9grpc_impl8internal20AsyncReaderInterfaceIN4grpc10ByteBufferEEE + + _ZTSN9grpc_impl8internal20AsyncWriterInterfaceIN4grpc10ByteBufferEEE + + _ZTSZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEE7Reactor + + _ZTSZN4grpc12experimental22CallbackGenericService7HandlerEvEUlPN9grpc_impl21CallbackServerContextEE_ + + _ZTSZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + _ZTSZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag3RunEbEUlvE_ + + _ZTSZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + _ZTSZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE15CallbackCallTag3RunEbEUlvE_ + + _ZTSZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterEEUlbE_ + + _ZTSZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS_17ServerBidiReactorIS3_S3_EEEUlbE0_ + + _ZTSZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS_17ServerBidiReactorIS3_S3_EEEUlbE_ + + _ZTSZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_ + + _ZTSZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl6FinishENS2_6StatusEEUlbE_ + + _ZTVN4grpc12experimental28GenericCallbackServerContextE + + _ZTVN4grpc13ResourceQuotaE + + _ZTVN4grpc13ServerBuilderE + + _ZTVN4grpc20GenericServerContextE + + _ZTVN9grpc_impl13ServerContextE + + _ZTVN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEEE + + _ZTVN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_EE + + _ZTVN9grpc_impl17ServerContextBase12CompletionOpE + + _ZTVN9grpc_impl17ServerContextBaseE + + _ZTVN9grpc_impl21CallbackServerContextE + + _ZTVN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_EE + + _ZTVN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEEE + + _ZTVN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEEE + + _ZTVN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEEE + + _ZTVN9grpc_impl8internal13ClientReactorE + + _ZTVN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEEE + + _ZTVN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EEE + + _ZTVN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EEE + + _ZTVN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImplE + + _ZTVN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_EE + + _ZTVZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEE7Reactor + + + +---------------diffs in grpc_libgrpc++_reflection.so.1.31.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + +Function symbols changes summary: 162 Removed, 157 Added function symbols not referenced by debug info + +Variable symbols changes summary: 74 Removed, 60 Added variable symbols not referenced by debug info + + + +162 Removed function symbols not referenced by debug info: + + + + [D] _ZN4grpc10reflection7v1alpha13ErrorResponse27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc10reflection7v1alpha13ErrorResponseC1Ev, aliases _ZN4grpc10reflection7v1alpha13ErrorResponseC2Ev + + [D] _ZN4grpc10reflection7v1alpha13ErrorResponseC2Ev + + [D] _ZN4grpc10reflection7v1alpha15ServiceResponse27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc10reflection7v1alpha15ServiceResponseC1Ev, aliases _ZN4grpc10reflection7v1alpha15ServiceResponseC2Ev + + [D] _ZN4grpc10reflection7v1alpha15ServiceResponseC2Ev + + [D] _ZN4grpc10reflection7v1alpha16ExtensionRequest27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc10reflection7v1alpha16ExtensionRequestC1Ev, aliases _ZN4grpc10reflection7v1alpha16ExtensionRequestC2Ev + + [D] _ZN4grpc10reflection7v1alpha16ExtensionRequestC2Ev + + [D] _ZN4grpc10reflection7v1alpha16ServerReflection4Stub18experimental_async20ServerReflectionInfoEPN9grpc_impl13ClientContextEPNS_12experimental17ClientBidiReactorINS1_23ServerReflectionRequestENS1_24ServerReflectionResponseEEE + + [D] _ZN4grpc10reflection7v1alpha16ServerReflection7Service20ServerReflectionInfoEPN9grpc_impl13ServerContextEPNS_18ServerReaderWriterINS1_24ServerReflectionResponseENS1_23ServerReflectionRequestEEE + + [D] _ZN4grpc10reflection7v1alpha19ListServiceResponse27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc10reflection7v1alpha19ListServiceResponseC1Ev, aliases _ZN4grpc10reflection7v1alpha19ListServiceResponseC2Ev + + [D] _ZN4grpc10reflection7v1alpha19ListServiceResponseC2Ev + + [D] _ZN4grpc10reflection7v1alpha22FileDescriptorResponse27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc10reflection7v1alpha22FileDescriptorResponseC1Ev, aliases _ZN4grpc10reflection7v1alpha22FileDescriptorResponseC2Ev + + [D] _ZN4grpc10reflection7v1alpha22FileDescriptorResponseC2Ev + + [D] _ZN4grpc10reflection7v1alpha23ExtensionNumberResponse27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc10reflection7v1alpha23ExtensionNumberResponseC1Ev, aliases _ZN4grpc10reflection7v1alpha23ExtensionNumberResponseC2Ev + + [D] _ZN4grpc10reflection7v1alpha23ExtensionNumberResponseC2Ev + + [D] _ZN4grpc10reflection7v1alpha23ServerReflectionRequest27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc10reflection7v1alpha23ServerReflectionRequestC1Ev, aliases _ZN4grpc10reflection7v1alpha23ServerReflectionRequestC2Ev + + [D] _ZN4grpc10reflection7v1alpha23ServerReflectionRequestC2Ev + + [D] _ZN4grpc10reflection7v1alpha24ServerReflectionResponse27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc10reflection7v1alpha24ServerReflectionResponseC1Ev, aliases _ZN4grpc10reflection7v1alpha24ServerReflectionResponseC2Ev + + [D] _ZN4grpc10reflection7v1alpha24ServerReflectionResponseC2Ev + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE10OnReadDoneEb + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE11OnWriteDoneEb + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE16OnWritesDoneDoneEb + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE25OnReadInitialMetadataDoneEb + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE6OnDoneERKNS_6StatusE + + [D] _ZN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE10WritesDoneEv + + [D] _ZN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE15NextMessageSizeEPj + + [D] _ZN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE22WaitForInitialMetadataEv + + [D] _ZN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE4ReadEPS4_ + + [D] _ZN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE5WriteERKS3_NS_12WriteOptionsE + + [D] _ZN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE6FinishEv + + [D] _ZN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEEC1EPNS_16ChannelInterfaceERKNS_8internal9RpcMethodEPN9grpc_impl13ClientContextE, aliases _ZN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEEC2EPNS_16ChannelInterfaceERKNS_8internal9RpcMethodEPN9grpc_impl13ClientContextE + + [D] _ZN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEEC2EPNS_16ChannelInterfaceERKNS_8internal9RpcMethodEPN9grpc_impl13ClientContextE + + [D] _ZN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED0Ev + + [D] _ZN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED1Ev + + [D] _ZN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED2Ev, aliases _ZN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED1Ev + + [D] _ZN4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEE15NextMessageSizeEPj + + [D] _ZN4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEE19SendInitialMetadataEv + + [D] _ZN4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEE4ReadEPS4_ + + [D] _ZN4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEE5WriteERKS3_NS_12WriteOptionsE + + [D] _ZN4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEED0Ev + + [D] _ZN4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEED1Ev, aliases _ZN4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEED2Ev + + [D] _ZN4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEED2Ev + + [D] _ZN4grpc19ServerBuilderPlugin19UpdateServerBuilderEPN9grpc_impl13ServerBuilderE + + [D] _ZN4grpc21ProtoServerReflection20ServerReflectionInfoEPN9grpc_impl13ServerContextEPNS_18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS6_23ServerReflectionRequestEEE + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE10WritesDoneEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE19ReadInitialMetadataEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE4ReadEPS4_Pv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE5WriteERKS3_NS_12WriteOptionsEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE5WriteERKS3_Pv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE6FinishEPNS_6StatusEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE9StartCallEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED0Ev + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED1Ev, aliases _ZN4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED2Ev + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED2Ev + + [D] _ZN4grpc8internal20BidiStreamingHandlerINS_10reflection7v1alpha16ServerReflection7ServiceENS3_23ServerReflectionRequestENS3_24ServerReflectionResponseEED0Ev + + [D] _ZN4grpc8internal20BidiStreamingHandlerINS_10reflection7v1alpha16ServerReflection7ServiceENS3_23ServerReflectionRequestENS3_24ServerReflectionResponseEED1Ev, aliases _ZN4grpc8internal20BidiStreamingHandlerINS_10reflection7v1alpha16ServerReflection7ServiceENS3_23ServerReflectionRequestENS3_24ServerReflectionResponseEED2Ev + + [D] _ZN4grpc8internal20BidiStreamingHandlerINS_10reflection7v1alpha16ServerReflection7ServiceENS3_23ServerReflectionRequestENS3_24ServerReflectionResponseEED2Ev + + [D] _ZN4grpc8internal22CallbackWithSuccessTag3SetEP9grpc_callSt8functionIFvbEEPNS0_18CompletionQueueTagE + + [D] _ZN4grpc8internal22ServerReaderWriterBodyINS_10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEE19SendInitialMetadataEv + + [D] _ZN4grpc8internal23CatchingFunctionHandlerIZNS0_29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS5_23ServerReflectionRequestEEELb0EE10RunHandlerERKNS0_13MethodHandler16HandlerParameterEEUlvE_EENS_6StatusEOT_ + + [D] _ZN4grpc8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS4_23ServerReflectionRequestEEELb0EE10RunHandlerERKNS0_13MethodHandler16HandlerParameterE + + [D] _ZN4grpc8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS4_23ServerReflectionRequestEEELb0EED0Ev + + [D] _ZN4grpc8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS4_23ServerReflectionRequestEEELb0EED1Ev, aliases _ZN4grpc8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS4_23ServerReflectionRequestEEELb0EED2Ev + + [D] _ZN4grpc8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS4_23ServerReflectionRequestEEELb0EED2Ev + + [D] _ZN4grpc8internal30ClientAsyncReaderWriterFactoryINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE6CreateEPNS_16ChannelInterfaceEPN9grpc_impl15CompletionQueueERKNS0_9RpcMethodEPNS9_13ClientContextEbPv + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE10RemoveHoldEv + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE10WritesDoneEv + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE11MaybeFinishEv + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE4ReadEPS5_ + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE5WriteEPKS4_NS_12WriteOptionsE + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE7AddHoldEi + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE9StartCallEv + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED0Ev + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED1Ev + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED2Ev, aliases _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED1Ev + + [D] _ZN6google8protobuf8internal14ArenaStringPtr21CreateInstanceNoArenaEPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc10reflection7v1alpha13ErrorResponseEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc10reflection7v1alpha15ServiceResponseEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc10reflection7v1alpha16ExtensionRequestEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc10reflection7v1alpha19ListServiceResponseEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc10reflection7v1alpha22FileDescriptorResponseEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc10reflection7v1alpha23ExtensionNumberResponseEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc10reflection7v1alpha23ServerReflectionRequestEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc10reflection7v1alpha24ServerReflectionResponseEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectINS1_29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEE9ContainerEEEvPv + + [D] _ZN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEE27mutable_unknown_fields_slowEv + + [D] _ZN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEED1Ev, aliases _ZN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEED2Ev + + [D] _ZN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEED2Ev + + [D] _ZN9grpc_impl10reflection27ProtoServerReflectionPlugin10InitServerEPNS_17ServerInitializerE + + [D] _ZN9grpc_impl10reflection27ProtoServerReflectionPlugin15ChangeArgumentsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPv + + [D] _ZN9grpc_impl10reflection27ProtoServerReflectionPlugin4nameB5cxx11Ev + + [D] _ZN9grpc_impl10reflection27ProtoServerReflectionPlugin6FinishEPNS_17ServerInitializerE + + [D] _ZN9grpc_impl10reflection27ProtoServerReflectionPluginC1Ev, aliases _ZN9grpc_impl10reflection27ProtoServerReflectionPluginC2Ev + + [D] _ZN9grpc_impl10reflection27ProtoServerReflectionPluginC2Ev + + [D] _ZN9grpc_impl10reflection27ProtoServerReflectionPluginD0Ev + + [D] _ZN9grpc_impl10reflection27ProtoServerReflectionPluginD1Ev, aliases _ZN9grpc_impl10reflection27ProtoServerReflectionPluginD2Ev + + [D] _ZN9grpc_impl10reflection27ProtoServerReflectionPluginD2Ev + + [D] _ZN9grpc_impl10reflection38InitProtoReflectionServerBuilderPluginEv + + [D] _ZNK4grpc10reflection7v1alpha13ErrorResponse24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc10reflection7v1alpha13ErrorResponse39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc10reflection7v1alpha15ServiceResponse24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc10reflection7v1alpha15ServiceResponse39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc10reflection7v1alpha16ExtensionRequest24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc10reflection7v1alpha16ExtensionRequest39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc10reflection7v1alpha19ListServiceResponse24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc10reflection7v1alpha19ListServiceResponse39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc10reflection7v1alpha22FileDescriptorResponse24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc10reflection7v1alpha22FileDescriptorResponse39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc10reflection7v1alpha23ExtensionNumberResponse24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc10reflection7v1alpha23ExtensionNumberResponse39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc10reflection7v1alpha23ServerReflectionRequest24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc10reflection7v1alpha23ServerReflectionRequest39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc10reflection7v1alpha24ServerReflectionResponse24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc10reflection7v1alpha24ServerReflectionResponse39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK6google8protobuf11MessageLite20GetMaybeArenaPointerEv + + [D] _ZNK6google8protobuf11MessageLite8GetArenaEv + + [D] _ZNK9grpc_impl10reflection27ProtoServerReflectionPlugin16has_sync_methodsEv + + [D] _ZNK9grpc_impl10reflection27ProtoServerReflectionPlugin17has_async_methodsEv + + [D] _ZNSt14_Function_base13_Base_managerISt5_BindIFSt8functionIFN4grpc6StatusEPNS3_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS3_18ServerReaderWriterINS6_24ServerReflectionResponseENS6_23ServerReflectionRequestEEEEES9_St12_PlaceholderILi1EESK_ILi2EEEEE10_M_managerERSt9_Any_dataRKSQ_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerISt7_Mem_fnIMN4grpc10reflection7v1alpha16ServerReflection7ServiceEFNS2_6StatusEPN9grpc_impl13ServerContextEPNS2_18ServerReaderWriterINS4_24ServerReflectionResponseENS4_23ServerReflectionRequestEEEEEE10_M_managerERSt9_Any_dataRKSK_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10reflection7v1alpha23ServerReflectionRequestENS5_24ServerReflectionResponseEE10WritesDoneEvEUlbE_E10_M_managerERSt9_Any_dataRKSB_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10reflection7v1alpha23ServerReflectionRequestENS5_24ServerReflectionResponseEE9StartCallEvEUlbE0_E10_M_managerERSt9_Any_dataRKSB_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10reflection7v1alpha23ServerReflectionRequestENS5_24ServerReflectionResponseEE9StartCallEvEUlbE1_E10_M_managerERSt9_Any_dataRKSB_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10reflection7v1alpha23ServerReflectionRequestENS5_24ServerReflectionResponseEE9StartCallEvEUlbE2_E10_M_managerERSt9_Any_dataRKSB_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10reflection7v1alpha23ServerReflectionRequestENS5_24ServerReflectionResponseEE9StartCallEvEUlbE_E10_M_managerERSt9_Any_dataRKSB_St18_Manager_operation + + [D] _ZNSt17_Function_handlerIFN4grpc6StatusEPN9grpc_impl13ServerContextEPNS0_18ServerReaderWriterINS0_10reflection7v1alpha24ServerReflectionResponseENS7_23ServerReflectionRequestEEEESt5_BindIFSt8functionIFS1_PNS7_16ServerReflection7ServiceES4_SB_EESH_St12_PlaceholderILi1EESK_ILi2EEEEE9_M_invokeERKSt9_Any_dataOS4_OSB_ + + [D] _ZNSt17_Function_handlerIFN4grpc6StatusEPNS0_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS0_18ServerReaderWriterINS3_24ServerReflectionResponseENS3_23ServerReflectionRequestEEEESt7_Mem_fnIMS5_FS1_S9_SE_EEE9_M_invokeERKSt9_Any_dataOS6_OS9_OSE_ + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10reflection7v1alpha23ServerReflectionRequestENS5_24ServerReflectionResponseEE10WritesDoneEvEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10reflection7v1alpha23ServerReflectionRequestENS5_24ServerReflectionResponseEE9StartCallEvEUlbE0_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10reflection7v1alpha23ServerReflectionRequestENS5_24ServerReflectionResponseEE9StartCallEvEUlbE1_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10reflection7v1alpha23ServerReflectionRequestENS5_24ServerReflectionResponseEE9StartCallEvEUlbE2_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10reflection7v1alpha23ServerReflectionRequestENS5_24ServerReflectionResponseEE9StartCallEvEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt8functionIFN4grpc6StatusEPNS0_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS0_18ServerReaderWriterINS3_24ServerReflectionResponseENS3_23ServerReflectionRequestEEEEEC1ERKSG_ + + [D] _ZNSt8functionIFN4grpc6StatusEPNS0_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS0_18ServerReaderWriterINS3_24ServerReflectionResponseENS3_23ServerReflectionRequestEEEEEC2ERKSG_, aliases _ZNSt8functionIFN4grpc6StatusEPNS0_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS0_18ServerReaderWriterINS3_24ServerReflectionResponseENS3_23ServerReflectionRequestEEEEEC1ERKSG_ + + [D] _ZThn16_N4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE15NextMessageSizeEPj + + [D] _ZThn16_N4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE4ReadEPS4_ + + [D] _ZThn16_N4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED0Ev + + [D] _ZThn16_N4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED1Ev + + [D] _ZThn16_N4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEE15NextMessageSizeEPj + + [D] _ZThn16_N4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEE4ReadEPS4_ + + [D] _ZThn16_N4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEED0Ev + + [D] _ZThn16_N4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEED1Ev + + [D] _ZThn16_N4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE4ReadEPS4_Pv + + [D] _ZThn16_N4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED0Ev + + [D] _ZThn16_N4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED1Ev + + [D] _ZThn8_N4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE5WriteERKS3_NS_12WriteOptionsE + + [D] _ZThn8_N4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED0Ev + + [D] _ZThn8_N4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED1Ev + + [D] _ZThn8_N4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEE5WriteERKS3_NS_12WriteOptionsE + + [D] _ZThn8_N4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEED0Ev + + [D] _ZThn8_N4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEED1Ev + + [D] _ZThn8_N4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE5WriteERKS3_NS_12WriteOptionsEPv + + [D] _ZThn8_N4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEE5WriteERKS3_Pv + + [D] _ZThn8_N4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED0Ev + + [D] _ZThn8_N4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEED1Ev + + + +157 Added function symbols not referenced by debug info: + + + + [A] _ZN4grpc10reflection27ProtoServerReflectionPlugin10InitServerEPN9grpc_impl17ServerInitializerE + + [A] _ZN4grpc10reflection27ProtoServerReflectionPlugin15ChangeArgumentsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPv + + [A] _ZN4grpc10reflection27ProtoServerReflectionPlugin4nameB5cxx11Ev + + [A] _ZN4grpc10reflection27ProtoServerReflectionPlugin6FinishEPN9grpc_impl17ServerInitializerE + + [A] _ZN4grpc10reflection27ProtoServerReflectionPluginC1Ev, aliases _ZN4grpc10reflection27ProtoServerReflectionPluginC2Ev + + [A] _ZN4grpc10reflection27ProtoServerReflectionPluginC2Ev + + [A] _ZN4grpc10reflection27ProtoServerReflectionPluginD0Ev + + [A] _ZN4grpc10reflection27ProtoServerReflectionPluginD1Ev + + [A] _ZN4grpc10reflection27ProtoServerReflectionPluginD2Ev, aliases _ZN4grpc10reflection27ProtoServerReflectionPluginD1Ev + + [A] _ZN4grpc10reflection38InitProtoReflectionServerBuilderPluginEv + + [A] _ZN4grpc10reflection7v1alpha13ErrorResponse14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc10reflection7v1alpha13ErrorResponse9ArenaDtorEPv + + [A] _ZN4grpc10reflection7v1alpha13ErrorResponseC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc10reflection7v1alpha13ErrorResponseC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha13ErrorResponseC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha15ServiceResponse14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc10reflection7v1alpha15ServiceResponse9ArenaDtorEPv + + [A] _ZN4grpc10reflection7v1alpha15ServiceResponseC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha15ServiceResponseC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc10reflection7v1alpha15ServiceResponseC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha16ExtensionRequest14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc10reflection7v1alpha16ExtensionRequest9ArenaDtorEPv + + [A] _ZN4grpc10reflection7v1alpha16ExtensionRequestC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha16ExtensionRequestC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc10reflection7v1alpha16ExtensionRequestC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha16ServerReflection4Stub18experimental_async20ServerReflectionInfoEPN9grpc_impl13ClientContextEPNS5_17ClientBidiReactorINS1_23ServerReflectionRequestENS1_24ServerReflectionResponseEEE + + [A] _ZN4grpc10reflection7v1alpha16ServerReflection7Service20ServerReflectionInfoEPN9grpc_impl13ServerContextEPNS4_18ServerReaderWriterINS1_24ServerReflectionResponseENS1_23ServerReflectionRequestEEE + + [A] _ZN4grpc10reflection7v1alpha19ListServiceResponse14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc10reflection7v1alpha19ListServiceResponse9ArenaDtorEPv + + [A] _ZN4grpc10reflection7v1alpha19ListServiceResponseC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha19ListServiceResponseC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc10reflection7v1alpha19ListServiceResponseC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha22FileDescriptorResponse14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc10reflection7v1alpha22FileDescriptorResponse9ArenaDtorEPv + + [A] _ZN4grpc10reflection7v1alpha22FileDescriptorResponseC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha22FileDescriptorResponseC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc10reflection7v1alpha22FileDescriptorResponseC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha23ExtensionNumberResponse14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc10reflection7v1alpha23ExtensionNumberResponse9ArenaDtorEPv + + [A] _ZN4grpc10reflection7v1alpha23ExtensionNumberResponseC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha23ExtensionNumberResponseC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc10reflection7v1alpha23ExtensionNumberResponseC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha23ServerReflectionRequest14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc10reflection7v1alpha23ServerReflectionRequest9ArenaDtorEPv + + [A] _ZN4grpc10reflection7v1alpha23ServerReflectionRequestC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha23ServerReflectionRequestC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc10reflection7v1alpha23ServerReflectionRequestC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha24ServerReflectionResponse14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc10reflection7v1alpha24ServerReflectionResponse9ArenaDtorEPv + + [A] _ZN4grpc10reflection7v1alpha24ServerReflectionResponseC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc10reflection7v1alpha24ServerReflectionResponseC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc10reflection7v1alpha24ServerReflectionResponseC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc19ServerBuilderPlugin19UpdateServerBuilderEPNS_13ServerBuilderE + + [A] _ZN4grpc21ProtoServerReflection20ServerReflectionInfoEPN9grpc_impl13ServerContextEPNS1_18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS6_23ServerReflectionRequestEEE + + [A] _ZN4grpc8internal22CallbackWithSuccessTag3SetEP9grpc_callSt8functionIFvbEEPNS0_18CompletionQueueTagEb + + [A] _ZN4grpc8internal22CallbackWithSuccessTagD1Ev, aliases _ZN4grpc8internal22CallbackWithSuccessTagD2Ev + + [A] _ZN4grpc8internal22CallbackWithSuccessTagD2Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc10reflection7v1alpha15ServiceResponseEED1Ev, aliases _ZN6google8protobuf16RepeatedPtrFieldIN4grpc10reflection7v1alpha15ServiceResponseEED2Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc10reflection7v1alpha15ServiceResponseEED2Ev + + [A] _ZN6google8protobuf8internal11VarintParseImEEPKcS4_PT_ + + [A] _ZN6google8protobuf8internal14ArenaStringPtr14CreateInstanceEPNS0_5ArenaEPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN6google8protobuf8internal16InternalMetadata27mutable_unknown_fields_slowINS0_15UnknownFieldSetEEEPT_v + + [A] _ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS0_16RepeatedPtrFieldIN4grpc10reflection7v1alpha15ServiceResponseEE11TypeHandlerEEEvv + + [A] _ZN6google8protobuf8internal21arena_destruct_objectINS1_16InternalMetadata9ContainerINS0_15UnknownFieldSetEEEEEvPv + + [A] _ZN6google8protobuf8internal21arena_destruct_objectINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvPv + + [A] _ZN9grpc_impl17ClientBidiReactorIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE10OnReadDoneEb + + [A] _ZN9grpc_impl17ClientBidiReactorIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE11OnWriteDoneEb + + [A] _ZN9grpc_impl17ClientBidiReactorIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE16OnWritesDoneDoneEb + + [A] _ZN9grpc_impl17ClientBidiReactorIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE25OnReadInitialMetadataDoneEb + + [A] _ZN9grpc_impl17ClientBidiReactorIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE6OnDoneERKNS1_6StatusE + + [A] _ZN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE10WritesDoneEv + + [A] _ZN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE15NextMessageSizeEPj + + [A] _ZN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE22WaitForInitialMetadataEv + + [A] _ZN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE4ReadEPS5_ + + [A] _ZN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE5WriteERKS4_NS1_12WriteOptionsE + + [A] _ZN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE6FinishEv + + [A] _ZN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEC1EPNS1_16ChannelInterfaceERKNS1_8internal9RpcMethodEPNS_13ClientContextE + + [A] _ZN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEC2EPNS1_16ChannelInterfaceERKNS1_8internal9RpcMethodEPNS_13ClientContextE, aliases _ZN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEC1EPNS1_16ChannelInterfaceERKNS1_8internal9RpcMethodEPNS_13ClientContextE + + [A] _ZN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED0Ev + + [A] _ZN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED1Ev, aliases _ZN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED2Ev + + [A] _ZN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED2Ev + + [A] _ZN9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEE15NextMessageSizeEPj + + [A] _ZN9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEE19SendInitialMetadataEv + + [A] _ZN9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEE4ReadEPS5_ + + [A] _ZN9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEE5WriteERKS4_NS1_12WriteOptionsE + + [A] _ZN9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEED0Ev + + [A] _ZN9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEED1Ev, aliases _ZN9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEED2Ev + + [A] _ZN9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEED2Ev + + [A] _ZN9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE10WritesDoneEPv + + [A] _ZN9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE19ReadInitialMetadataEPv + + [A] _ZN9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE4ReadEPS5_Pv + + [A] _ZN9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE5WriteERKS4_NS1_12WriteOptionsEPv + + [A] _ZN9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE5WriteERKS4_Pv + + [A] _ZN9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE6FinishEPNS1_6StatusEPv + + [A] _ZN9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE9StartCallEPv + + [A] _ZN9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED0Ev + + [A] _ZN9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED1Ev + + [A] _ZN9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED2Ev, aliases _ZN9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED1Ev + + [A] _ZN9grpc_impl8internal20BidiStreamingHandlerIN4grpc10reflection7v1alpha16ServerReflection7ServiceENS4_23ServerReflectionRequestENS4_24ServerReflectionResponseEED0Ev + + [A] _ZN9grpc_impl8internal20BidiStreamingHandlerIN4grpc10reflection7v1alpha16ServerReflection7ServiceENS4_23ServerReflectionRequestENS4_24ServerReflectionResponseEED1Ev, aliases _ZN9grpc_impl8internal20BidiStreamingHandlerIN4grpc10reflection7v1alpha16ServerReflection7ServiceENS4_23ServerReflectionRequestENS4_24ServerReflectionResponseEED2Ev + + [A] _ZN9grpc_impl8internal20BidiStreamingHandlerIN4grpc10reflection7v1alpha16ServerReflection7ServiceENS4_23ServerReflectionRequestENS4_24ServerReflectionResponseEED2Ev + + [A] _ZN9grpc_impl8internal22ServerReaderWriterBodyIN4grpc10reflection7v1alpha24ServerReflectionResponseENS4_23ServerReflectionRequestEE19SendInitialMetadataEv + + [A] _ZN9grpc_impl8internal23CatchingFunctionHandlerIZNS0_29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS6_23ServerReflectionRequestEEELb0EE10RunHandlerERKNS4_8internal13MethodHandler16HandlerParameterEEUlvE_EENS4_6StatusEOT_ + + [A] _ZN9grpc_impl8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS5_23ServerReflectionRequestEEELb0EE10RunHandlerERKNS3_8internal13MethodHandler16HandlerParameterE + + [A] _ZN9grpc_impl8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS5_23ServerReflectionRequestEEELb0EED0Ev + + [A] _ZN9grpc_impl8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS5_23ServerReflectionRequestEEELb0EED1Ev, aliases _ZN9grpc_impl8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS5_23ServerReflectionRequestEEELb0EED2Ev + + [A] _ZN9grpc_impl8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS5_23ServerReflectionRequestEEELb0EED2Ev + + [A] _ZN9grpc_impl8internal30ClientAsyncReaderWriterFactoryIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEE6CreateEPNS2_16ChannelInterfaceEPNS_15CompletionQueueERKNS2_8internal9RpcMethodEPNS_13ClientContextEbPv + + [A] _ZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEE10RemoveHoldEv + + [A] _ZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEE10WritesDoneEv + + [A] _ZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEE11MaybeFinishEb + + [A] _ZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEE4ReadEPS6_ + + [A] _ZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEE5WriteEPKS5_NS2_12WriteOptionsE + + [A] _ZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEE7AddHoldEi + + [A] _ZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEE9StartCallEv + + [A] _ZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEEC1ENS2_8internal4CallEPNS_13ClientContextEPNS_17ClientBidiReactorIS5_S6_EE + + [A] _ZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEEC2ENS2_8internal4CallEPNS_13ClientContextEPNS_17ClientBidiReactorIS5_S6_EE, aliases _ZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEEC1ENS2_8internal4CallEPNS_13ClientContextEPNS_17ClientBidiReactorIS5_S6_EE + + [A] _ZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEED0Ev + + [A] _ZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEED1Ev, aliases _ZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEED2Ev + + [A] _ZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEED2Ev + + [A] _ZNK4grpc10reflection27ProtoServerReflectionPlugin16has_sync_methodsEv + + [A] _ZNK4grpc10reflection27ProtoServerReflectionPlugin17has_async_methodsEv + + [A] _ZNK4grpc10reflection7v1alpha13ErrorResponse18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc10reflection7v1alpha15ServiceResponse18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc10reflection7v1alpha16ExtensionRequest18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc10reflection7v1alpha19ListServiceResponse18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc10reflection7v1alpha22FileDescriptorResponse18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc10reflection7v1alpha23ExtensionNumberResponse18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc10reflection7v1alpha23ServerReflectionRequest18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc10reflection7v1alpha24ServerReflectionResponse18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal20BidiStreamingHandlerIN4grpc10reflection7v1alpha16ServerReflection7ServiceENS6_23ServerReflectionRequestENS6_24ServerReflectionResponseEEC4ESt8functionIFNS4_6StatusEPS8_PNS1_13ServerContextEPNS1_18ServerReaderWriterISA_S9_EEEESE_EUlSG_SJ_E_E10_M_managerERSt9_Any_dataRKSO_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS6_24ServerReflectionResponseEE10WritesDoneEvEUlbE_E10_M_managerERSt9_Any_dataRKSC_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS6_24ServerReflectionResponseEEC4ENS4_8internal4CallEPNS1_13ClientContextEPNS1_17ClientBidiReactorIS7_S8_EEEUlbE0_E10_M_managerERSt9_Any_dataRKSJ_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS6_24ServerReflectionResponseEEC4ENS4_8internal4CallEPNS1_13ClientContextEPNS1_17ClientBidiReactorIS7_S8_EEEUlbE1_E10_M_managerERSt9_Any_dataRKSJ_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS6_24ServerReflectionResponseEEC4ENS4_8internal4CallEPNS1_13ClientContextEPNS1_17ClientBidiReactorIS7_S8_EEEUlbE2_E10_M_managerERSt9_Any_dataRKSJ_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS6_24ServerReflectionResponseEEC4ENS4_8internal4CallEPNS1_13ClientContextEPNS1_17ClientBidiReactorIS7_S8_EEEUlbE_E10_M_managerERSt9_Any_dataRKSJ_St18_Manager_operation + + [A] _ZNSt17_Function_handlerIFN4grpc6StatusEPN9grpc_impl13ServerContextEPNS2_18ServerReaderWriterINS0_10reflection7v1alpha24ServerReflectionResponseENS7_23ServerReflectionRequestEEEEZNS2_8internal20BidiStreamingHandlerINS7_16ServerReflection7ServiceES9_S8_EC4ESt8functionIFS1_PSG_S4_SB_EESJ_EUlS4_SB_E_E9_M_invokeERKSt9_Any_dataOS4_OSB_ + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS6_24ServerReflectionResponseEE10WritesDoneEvEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS6_24ServerReflectionResponseEEC4ENS4_8internal4CallEPNS1_13ClientContextEPNS1_17ClientBidiReactorIS7_S8_EEEUlbE0_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS6_24ServerReflectionResponseEEC4ENS4_8internal4CallEPNS1_13ClientContextEPNS1_17ClientBidiReactorIS7_S8_EEEUlbE1_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS6_24ServerReflectionResponseEEC4ENS4_8internal4CallEPNS1_13ClientContextEPNS1_17ClientBidiReactorIS7_S8_EEEUlbE2_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS6_24ServerReflectionResponseEEC4ENS4_8internal4CallEPNS1_13ClientContextEPNS1_17ClientBidiReactorIS7_S8_EEEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt8functionIFN4grpc6StatusEPNS0_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS7_18ServerReaderWriterINS3_24ServerReflectionResponseENS3_23ServerReflectionRequestEEEEEC1ERKSG_, aliases _ZNSt8functionIFN4grpc6StatusEPNS0_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS7_18ServerReaderWriterINS3_24ServerReflectionResponseENS3_23ServerReflectionRequestEEEEEC2ERKSG_ + + [A] _ZNSt8functionIFN4grpc6StatusEPNS0_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS7_18ServerReaderWriterINS3_24ServerReflectionResponseENS3_23ServerReflectionRequestEEEEEC2ERKSG_ + + [A] _ZThn16_N9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE15NextMessageSizeEPj + + [A] _ZThn16_N9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE4ReadEPS5_ + + [A] _ZThn16_N9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED0Ev + + [A] _ZThn16_N9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED1Ev + + [A] _ZThn16_N9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEE15NextMessageSizeEPj + + [A] _ZThn16_N9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEE4ReadEPS5_ + + [A] _ZThn16_N9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEED0Ev + + [A] _ZThn16_N9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEED1Ev + + [A] _ZThn16_N9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE4ReadEPS5_Pv + + [A] _ZThn16_N9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED0Ev + + [A] _ZThn16_N9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED1Ev + + [A] _ZThn8_N9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE5WriteERKS4_NS1_12WriteOptionsE + + [A] _ZThn8_N9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED0Ev + + [A] _ZThn8_N9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED1Ev + + [A] _ZThn8_N9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEE5WriteERKS4_NS1_12WriteOptionsE + + [A] _ZThn8_N9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEED0Ev + + [A] _ZThn8_N9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEED1Ev + + [A] _ZThn8_N9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE5WriteERKS4_NS1_12WriteOptionsEPv + + [A] _ZThn8_N9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE5WriteERKS4_Pv + + [A] _ZThn8_N9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED0Ev + + [A] _ZThn8_N9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEED1Ev + + + +74 Removed variable symbols not referenced by debug info: + + + + _ZN9grpc_impl10reflection42static_proto_reflection_plugin_initializerE + + _ZTIN4grpc12experimental26ClientCallbackReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTIN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEEE + + _ZTIN4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEEE + + _ZTIN4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEEE + + _ZTIN4grpc27ClientReaderWriterInterfaceINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEEE + + _ZTIN4grpc27ServerReaderWriterInterfaceINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEEE + + _ZTIN4grpc32ClientAsyncReaderWriterInterfaceINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEEE + + _ZTIN4grpc8internal15ReaderInterfaceINS_10reflection7v1alpha23ServerReflectionRequestEEE + + _ZTIN4grpc8internal15ReaderInterfaceINS_10reflection7v1alpha24ServerReflectionResponseEEE + + _ZTIN4grpc8internal15WriterInterfaceINS_10reflection7v1alpha23ServerReflectionRequestEEE + + _ZTIN4grpc8internal15WriterInterfaceINS_10reflection7v1alpha24ServerReflectionResponseEEE + + _ZTIN4grpc8internal20AsyncReaderInterfaceINS_10reflection7v1alpha24ServerReflectionResponseEEE + + _ZTIN4grpc8internal20AsyncWriterInterfaceINS_10reflection7v1alpha23ServerReflectionRequestEEE + + _ZTIN4grpc8internal20BidiStreamingHandlerINS_10reflection7v1alpha16ServerReflection7ServiceENS3_23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTIN4grpc8internal24ClientStreamingInterfaceE + + _ZTIN4grpc8internal24ServerStreamingInterfaceE + + _ZTIN4grpc8internal29ClientAsyncStreamingInterfaceE + + _ZTIN4grpc8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS4_23ServerReflectionRequestEEELb0EEE + + _ZTIN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTIN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEE9ContainerE + + _ZTIN9grpc_impl10reflection27ProtoServerReflectionPluginE + + _ZTISt12_Mem_fn_baseIMN4grpc10reflection7v1alpha16ServerReflection7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPNS0_18ServerReaderWriterINS2_24ServerReflectionResponseENS2_23ServerReflectionRequestEEEELb1EE + + _ZTISt17_Weak_result_typeISt8functionIFN4grpc6StatusEPNS1_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS1_18ServerReaderWriterINS4_24ServerReflectionResponseENS4_23ServerReflectionRequestEEEEEE + + _ZTISt22_Maybe_get_result_typeISt8functionIFN4grpc6StatusEPNS1_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS1_18ServerReaderWriterINS4_24ServerReflectionResponseENS4_23ServerReflectionRequestEEEEEvE + + _ZTISt22_Weak_result_type_implISt8functionIFN4grpc6StatusEPNS1_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS1_18ServerReaderWriterINS4_24ServerReflectionResponseENS4_23ServerReflectionRequestEEEEEE + + _ZTISt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS0_18ServerReaderWriterINS3_24ServerReflectionResponseENS3_23ServerReflectionRequestEEEEE + + _ZTISt5_BindIFSt8functionIFN4grpc6StatusEPNS1_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS1_18ServerReaderWriterINS4_24ServerReflectionResponseENS4_23ServerReflectionRequestEEEEES7_St12_PlaceholderILi1EESI_ILi2EEEE + + _ZTISt7_Mem_fnIMN4grpc10reflection7v1alpha16ServerReflection7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPNS0_18ServerReaderWriterINS2_24ServerReflectionResponseENS2_23ServerReflectionRequestEEEEE + + _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE10WritesDoneEvEUlbE_ + + _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE9StartCallEvEUlbE0_ + + _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE9StartCallEvEUlbE1_ + + _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE9StartCallEvEUlbE2_ + + _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE9StartCallEvEUlbE_ + + _ZTSN4grpc12experimental26ClientCallbackReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTSN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEEE + + _ZTSN4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEEE + + _ZTSN4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEEE + + _ZTSN4grpc27ClientReaderWriterInterfaceINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEEE + + _ZTSN4grpc27ServerReaderWriterInterfaceINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEEE + + _ZTSN4grpc32ClientAsyncReaderWriterInterfaceINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEEE + + _ZTSN4grpc8internal15ReaderInterfaceINS_10reflection7v1alpha23ServerReflectionRequestEEE + + _ZTSN4grpc8internal15ReaderInterfaceINS_10reflection7v1alpha24ServerReflectionResponseEEE + + _ZTSN4grpc8internal15WriterInterfaceINS_10reflection7v1alpha23ServerReflectionRequestEEE + + _ZTSN4grpc8internal15WriterInterfaceINS_10reflection7v1alpha24ServerReflectionResponseEEE + + _ZTSN4grpc8internal20AsyncReaderInterfaceINS_10reflection7v1alpha24ServerReflectionResponseEEE + + _ZTSN4grpc8internal20AsyncWriterInterfaceINS_10reflection7v1alpha23ServerReflectionRequestEEE + + _ZTSN4grpc8internal20BidiStreamingHandlerINS_10reflection7v1alpha16ServerReflection7ServiceENS3_23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTSN4grpc8internal24ClientStreamingInterfaceE + + _ZTSN4grpc8internal24ServerStreamingInterfaceE + + _ZTSN4grpc8internal29ClientAsyncStreamingInterfaceE + + _ZTSN4grpc8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS4_23ServerReflectionRequestEEELb0EEE + + _ZTSN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTSN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEE9ContainerE + + _ZTSN9grpc_impl10reflection27ProtoServerReflectionPluginE + + _ZTSSt12_Mem_fn_baseIMN4grpc10reflection7v1alpha16ServerReflection7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPNS0_18ServerReaderWriterINS2_24ServerReflectionResponseENS2_23ServerReflectionRequestEEEELb1EE + + _ZTSSt17_Weak_result_typeISt8functionIFN4grpc6StatusEPNS1_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS1_18ServerReaderWriterINS4_24ServerReflectionResponseENS4_23ServerReflectionRequestEEEEEE + + _ZTSSt22_Maybe_get_result_typeISt8functionIFN4grpc6StatusEPNS1_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS1_18ServerReaderWriterINS4_24ServerReflectionResponseENS4_23ServerReflectionRequestEEEEEvE + + _ZTSSt22_Weak_result_type_implISt8functionIFN4grpc6StatusEPNS1_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS1_18ServerReaderWriterINS4_24ServerReflectionResponseENS4_23ServerReflectionRequestEEEEEE + + _ZTSSt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS0_18ServerReaderWriterINS3_24ServerReflectionResponseENS3_23ServerReflectionRequestEEEEE + + _ZTSSt5_BindIFSt8functionIFN4grpc6StatusEPNS1_10reflection7v1alpha16ServerReflection7ServiceEPN9grpc_impl13ServerContextEPNS1_18ServerReaderWriterINS4_24ServerReflectionResponseENS4_23ServerReflectionRequestEEEEES7_St12_PlaceholderILi1EESI_ILi2EEEE + + _ZTSSt7_Mem_fnIMN4grpc10reflection7v1alpha16ServerReflection7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPNS0_18ServerReaderWriterINS2_24ServerReflectionResponseENS2_23ServerReflectionRequestEEEEE + + _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE10WritesDoneEvEUlbE_ + + _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE9StartCallEvEUlbE0_ + + _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE9StartCallEvEUlbE1_ + + _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE9StartCallEvEUlbE2_ + + _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEE9StartCallEvEUlbE_ + + _ZTVN4grpc18ClientReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEEE + + _ZTVN4grpc18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS2_23ServerReflectionRequestEEE + + _ZTVN4grpc23ClientAsyncReaderWriterINS_10reflection7v1alpha23ServerReflectionRequestENS2_24ServerReflectionResponseEEE + + _ZTVN4grpc8internal20BidiStreamingHandlerINS_10reflection7v1alpha16ServerReflection7ServiceENS3_23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTVN4grpc8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterINS_10reflection7v1alpha24ServerReflectionResponseENS4_23ServerReflectionRequestEEELb0EEE + + _ZTVN4grpc8internal30ClientCallbackReaderWriterImplINS_10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTVN9grpc_impl10reflection27ProtoServerReflectionPluginE + + + +60 Added variable symbols not referenced by debug info: + + + + _ZN4grpc10reflection42static_proto_reflection_plugin_initializerE + + _ZTIN4grpc10reflection27ProtoServerReflectionPluginE + + _ZTIN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTIN9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEEE + + _ZTIN9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTIN9grpc_impl26ClientCallbackReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTIN9grpc_impl27ClientReaderWriterInterfaceIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTIN9grpc_impl27ServerReaderWriterInterfaceIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEEE + + _ZTIN9grpc_impl32ClientAsyncReaderWriterInterfaceIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTIN9grpc_impl8internal15ReaderInterfaceIN4grpc10reflection7v1alpha23ServerReflectionRequestEEE + + _ZTIN9grpc_impl8internal15ReaderInterfaceIN4grpc10reflection7v1alpha24ServerReflectionResponseEEE + + _ZTIN9grpc_impl8internal15WriterInterfaceIN4grpc10reflection7v1alpha23ServerReflectionRequestEEE + + _ZTIN9grpc_impl8internal15WriterInterfaceIN4grpc10reflection7v1alpha24ServerReflectionResponseEEE + + _ZTIN9grpc_impl8internal20AsyncReaderInterfaceIN4grpc10reflection7v1alpha24ServerReflectionResponseEEE + + _ZTIN9grpc_impl8internal20AsyncWriterInterfaceIN4grpc10reflection7v1alpha23ServerReflectionRequestEEE + + _ZTIN9grpc_impl8internal20BidiStreamingHandlerIN4grpc10reflection7v1alpha16ServerReflection7ServiceENS4_23ServerReflectionRequestENS4_24ServerReflectionResponseEEE + + _ZTIN9grpc_impl8internal24ClientStreamingInterfaceE + + _ZTIN9grpc_impl8internal24ServerStreamingInterfaceE + + _ZTIN9grpc_impl8internal29ClientAsyncStreamingInterfaceE + + _ZTIN9grpc_impl8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS5_23ServerReflectionRequestEEELb0EEE + + _ZTIN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEEE + + _ZTIZN9grpc_impl8internal20BidiStreamingHandlerIN4grpc10reflection7v1alpha16ServerReflection7ServiceENS4_23ServerReflectionRequestENS4_24ServerReflectionResponseEEC4ESt8functionIFNS2_6StatusEPS6_PNS_13ServerContextEPNS_18ServerReaderWriterIS8_S7_EEEESC_EUlSE_SH_E_ + + _ZTIZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEE10WritesDoneEvEUlbE_ + + _ZTIZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEEC4ENS2_8internal4CallEPNS_13ClientContextEPNS_17ClientBidiReactorIS5_S6_EEEUlbE0_ + + _ZTIZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEEC4ENS2_8internal4CallEPNS_13ClientContextEPNS_17ClientBidiReactorIS5_S6_EEEUlbE1_ + + _ZTIZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEEC4ENS2_8internal4CallEPNS_13ClientContextEPNS_17ClientBidiReactorIS5_S6_EEEUlbE2_ + + _ZTIZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEEC4ENS2_8internal4CallEPNS_13ClientContextEPNS_17ClientBidiReactorIS5_S6_EEEUlbE_ + + _ZTSN4grpc10reflection27ProtoServerReflectionPluginE + + _ZTSN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTSN9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEEE + + _ZTSN9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTSN9grpc_impl26ClientCallbackReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTSN9grpc_impl27ClientReaderWriterInterfaceIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTSN9grpc_impl27ServerReaderWriterInterfaceIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEEE + + _ZTSN9grpc_impl32ClientAsyncReaderWriterInterfaceIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTSN9grpc_impl8internal15ReaderInterfaceIN4grpc10reflection7v1alpha23ServerReflectionRequestEEE + + _ZTSN9grpc_impl8internal15ReaderInterfaceIN4grpc10reflection7v1alpha24ServerReflectionResponseEEE + + _ZTSN9grpc_impl8internal15WriterInterfaceIN4grpc10reflection7v1alpha23ServerReflectionRequestEEE + + _ZTSN9grpc_impl8internal15WriterInterfaceIN4grpc10reflection7v1alpha24ServerReflectionResponseEEE + + _ZTSN9grpc_impl8internal20AsyncReaderInterfaceIN4grpc10reflection7v1alpha24ServerReflectionResponseEEE + + _ZTSN9grpc_impl8internal20AsyncWriterInterfaceIN4grpc10reflection7v1alpha23ServerReflectionRequestEEE + + _ZTSN9grpc_impl8internal20BidiStreamingHandlerIN4grpc10reflection7v1alpha16ServerReflection7ServiceENS4_23ServerReflectionRequestENS4_24ServerReflectionResponseEEE + + _ZTSN9grpc_impl8internal24ClientStreamingInterfaceE + + _ZTSN9grpc_impl8internal24ServerStreamingInterfaceE + + _ZTSN9grpc_impl8internal29ClientAsyncStreamingInterfaceE + + _ZTSN9grpc_impl8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS5_23ServerReflectionRequestEEELb0EEE + + _ZTSN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEEE + + _ZTSZN9grpc_impl8internal20BidiStreamingHandlerIN4grpc10reflection7v1alpha16ServerReflection7ServiceENS4_23ServerReflectionRequestENS4_24ServerReflectionResponseEEC4ESt8functionIFNS2_6StatusEPS6_PNS_13ServerContextEPNS_18ServerReaderWriterIS8_S7_EEEESC_EUlSE_SH_E_ + + _ZTSZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEE10WritesDoneEvEUlbE_ + + _ZTSZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEEC4ENS2_8internal4CallEPNS_13ClientContextEPNS_17ClientBidiReactorIS5_S6_EEEUlbE0_ + + _ZTSZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEEC4ENS2_8internal4CallEPNS_13ClientContextEPNS_17ClientBidiReactorIS5_S6_EEEUlbE1_ + + _ZTSZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEEC4ENS2_8internal4CallEPNS_13ClientContextEPNS_17ClientBidiReactorIS5_S6_EEEUlbE2_ + + _ZTSZN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEEC4ENS2_8internal4CallEPNS_13ClientContextEPNS_17ClientBidiReactorIS5_S6_EEEUlbE_ + + _ZTVN4grpc10reflection27ProtoServerReflectionPluginE + + _ZTVN9grpc_impl18ClientReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTVN9grpc_impl18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS3_23ServerReflectionRequestEEE + + _ZTVN9grpc_impl23ClientAsyncReaderWriterIN4grpc10reflection7v1alpha23ServerReflectionRequestENS3_24ServerReflectionResponseEEE + + _ZTVN9grpc_impl8internal20BidiStreamingHandlerIN4grpc10reflection7v1alpha16ServerReflection7ServiceENS4_23ServerReflectionRequestENS4_24ServerReflectionResponseEEE + + _ZTVN9grpc_impl8internal29TemplatedBidiStreamingHandlerINS_18ServerReaderWriterIN4grpc10reflection7v1alpha24ServerReflectionResponseENS5_23ServerReflectionRequestEEELb0EEE + + _ZTVN9grpc_impl8internal30ClientCallbackReaderWriterImplIN4grpc10reflection7v1alpha23ServerReflectionRequestENS4_24ServerReflectionResponseEEE + + + +---------------diffs in grpc_libgrpc.so.11.0.0_abidiff.out:---------------- + +ELF SONAME changed + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + +Function symbols changes summary: 653 Removed, 1093 Added function symbols not referenced by debug info + +Variable symbols changes summary: 47 Removed, 786 Added variable symbols not referenced by debug info + + + +SONAME changed from 'libgrpc.so.7' to 'libgrpc.so.11' + + + +653 Removed function symbols not referenced by debug info: + + + + [D] _Z10gpr_getenvPKc + + [D] _Z10gpr_setenvPKcS0_ + + [D] _Z10int64_ttoalPc + + [D] _Z11gpr_leftpadPKccm + + [D] _Z11gpr_memrchrPKvim + + [D] _Z11gpr_stricmpPKcS0_ + + [D] _Z11gpr_strjoinPPKcmPm + + [D] _Z12create_slicePKcm + + [D] _Z12gpr_unsetenvPKc + + [D] _Z13destroy_sliceP10grpc_slice + + [D] _Z13gpr_mpscq_popP9gpr_mpscq + + [D] _Z14gpr_mpscq_initP9gpr_mpscq + + [D] _Z14gpr_mpscq_pushP9gpr_mpscqP14gpr_mpscq_node + + [D] _Z14gpr_strvec_addP10gpr_strvecPc + + [D] _Z14grpc_op_stringPK7grpc_op + + [D] _Z15gpr_default_logP17gpr_log_func_args + + [D] _Z15gpr_strjoin_sepPPKcmS0_Pm + + [D] _Z15gpr_strvec_initP10gpr_strvec + + [D] _Z16gpr_murmur_hash3PKvmj + + [D] _Z16gpr_string_splitPKcS0_PPPcPm + + [D] _Z16grpc_json_create14grpc_json_type + + [D] _Z17gpr_mpscq_destroyP9gpr_mpscq + + [D] _Z17gpr_reverse_bytesPci + + [D] _Z17grpc_combiner_refP13grpc_combiner + + [D] _Z17grpc_error_do_refP10grpc_error + + [D] _Z17grpc_event_stringP10grpc_event + + [D] _Z17grpc_json_destroyP9grpc_json + + [D] _Z18add_repeated_fieldPP15repeated_field_PKv + + [D] _Z18gpr_join_host_portPPcPKci + + [D] _Z18gpr_strvec_destroyP10gpr_strvec + + [D] _Z18gpr_strvec_flattenP10gpr_strvecPm + + [D] _Z18grpc_closure_schedP12grpc_closureP10grpc_error + + [D] _Z18grpc_connector_refP14grpc_connector + + [D] _Z18http_proxy_enabledPK17grpc_channel_args + + [D] _Z18pollset_set_createv + + [D] _Z19gpr_dump_return_lenPKcmjPm + + [D] _Z19gpr_format_timespec12gpr_timespec + + [D] _Z19gpr_split_host_portPKcPPcS2_ + + [D] _Z19grpc_call_log_batchPKci16gpr_log_severityP9grpc_callPK7grpc_opmPv + + [D] _Z19grpc_combiner_unrefP13grpc_combiner + + [D] _Z19grpc_error_do_unrefP10grpc_error + + [D] _Z19pollset_set_destroyP16grpc_pollset_set + + [D] _Z20gpr_locked_mpscq_popP16gpr_locked_mpscq + + [D] _Z20gpr_parse_bool_valuePKcPb + + [D] _Z20grpc_connector_unrefP14grpc_connector + + [D] _Z20grpc_cq_internal_refP21grpc_completion_queue + + [D] _Z20grpc_json_link_childP9grpc_jsonS0_S0_ + + [D] _Z20grpc_json_reader_runP16grpc_json_reader + + [D] _Z20grpc_mdelem_do_unref11grpc_mdelem + + [D] _Z20grpc_sockaddr_to_uriPK21grpc_resolved_address + + [D] _Z20grpc_stream_ref_initP20grpc_stream_refcountiPFvPvP10grpc_errorES1_ + + [D] _Z21gpr_locked_mpscq_initP16gpr_locked_mpscq + + [D] _Z21gpr_locked_mpscq_pushP16gpr_locked_mpscqP14gpr_mpscq_node + + [D] _Z21gpr_precise_clock_nowP12gpr_timespec + + [D] _Z21gpr_timer_set_enabledi + + [D] _Z21grpc_json_reader_initP16grpc_json_readerP23grpc_json_reader_vtablePv + + [D] _Z21grpc_json_writer_initP16grpc_json_writeriP23grpc_json_writer_vtablePv + + [D] _Z21grpc_tcp_server_startP15grpc_tcp_serverPP12grpc_pollsetmPFvPvP13grpc_endpointS2_P24grpc_tcp_server_acceptorES4_ + + [D] _Z21grpc_udp_server_startP15grpc_udp_serverPP12grpc_pollsetmPv + + [D] _Z22gpr_precise_clock_initv + + [D] _Z22gpr_timers_global_initv + + [D] _Z22grpc_call_internal_refP9grpc_call + + [D] _Z22grpc_chttp2_hptbl_initP17grpc_chttp2_hptbl + + [D] _Z22grpc_chttp2_stream_refP18grpc_chttp2_stream + + [D] _Z22grpc_connector_connectP14grpc_connectorPK20grpc_connect_in_argsP21grpc_connect_out_argsP12grpc_closure + + [D] _Z22grpc_cq_internal_unrefP21grpc_completion_queue + + [D] _Z22grpc_json_create_childP9grpc_jsonS0_PKcS2_14grpc_json_typeb + + [D] _Z22grpc_json_parse_stringPc + + [D] _Z22grpc_proxy_mapper_initPK24grpc_proxy_mapper_vtableP17grpc_proxy_mapper + + [D] _Z23done_published_shutdownPvP18grpc_cq_completion + + [D] _Z23grpc_combiner_schedulerP13grpc_combiner + + [D] _Z23grpc_connector_shutdownP14grpc_connectorP10grpc_error + + [D] _Z23grpc_lb_policy_xds_initv + + [D] _Z23grpc_sockaddr_to_stringPPcPK21grpc_resolved_addressi + + [D] _Z23grpc_stats_data_as_jsonPK15grpc_stats_data + + [D] _Z23pollset_set_add_pollsetP16grpc_pollset_setP12grpc_pollset + + [D] _Z23pollset_set_del_pollsetP16grpc_pollset_setP12grpc_pollset + + [D] _Z24gpr_locked_mpscq_destroyP16gpr_locked_mpscq + + [D] _Z24gpr_locked_mpscq_try_popP16gpr_locked_mpscq + + [D] _Z24grpc_call_internal_unrefP9grpc_call + + [D] _Z24grpc_channel_args_stringPK17grpc_channel_args + + [D] _Z24grpc_chttp2_hptbl_lookupPK17grpc_chttp2_hptblj + + [D] _Z24grpc_chttp2_stream_unrefP18grpc_chttp2_stream + + [D] _Z24grpc_json_dump_to_stringP9grpc_jsoni + + [D] _Z24grpc_server_add_listenerP11grpc_serverPvPFvS0_S1_PP12grpc_pollsetmEPFvS0_S1_P12grpc_closureEl + + [D] _Z24grpc_server_get_pollsetsP11grpc_serverPPP12grpc_pollsetPm + + [D] _Z24grpc_ssl_check_call_hostPKcS0_S0_P17grpc_auth_contextP12grpc_closurePP10grpc_error + + [D] _Z24grpc_ssl_check_peer_namePKcPK8tsi_peer + + [D] _Z24grpc_ssl_cmp_target_namePKcS0_S0_S0_ + + [D] _Z24grpc_transport_op_stringP17grpc_transport_op + + [D] _Z24xds_grpclb_server_equalsPK18_grpc_lb_v1_ServerS1_ + + [D] _Z25decode_repeated_string_cbP12pb_istream_sPK10pb_field_sPPv + + [D] _Z25decode_string_or_bytes_cbP12pb_istream_sPK10pb_field_sPPv + + [D] _Z25encode_repeated_string_cbP12pb_ostream_sPK10pb_field_sPKPv + + [D] _Z25encode_string_or_bytes_cbP12pb_ostream_sPK10pb_field_sPKPv + + [D] _Z25gpr_parse_bytes_to_uint32PKcmPj + + [D] _Z25gpr_parse_nonnegative_intPKc + + [D] _Z25gpr_timers_global_destroyv + + [D] _Z25grpc_grpclb_server_equalsPK18_grpc_lb_v1_ServerS1_ + + [D] _Z25grpc_jwt_claims_from_jsonP9grpc_jsonRK10grpc_slice + + [D] _Z25grpc_proxy_mapper_destroyP17grpc_proxy_mapper + + [D] _Z25tsi_ssl_peer_matches_namePK8tsi_peerPKc + + [D] _Z25xds_grpclb_request_createPKc + + [D] _Z25xds_grpclb_request_encodePK30_grpc_lb_v1_LoadBalanceRequest + + [D] _Z26alts_tsi_handshaker_createPK29grpc_alts_credentials_optionsPKcS3_bP16grpc_pollset_setPP14tsi_handshaker + + [D] _Z26custom_tcp_endpoint_createP18grpc_custom_socketP19grpc_resource_quotaPc + + [D] _Z26grpc_grpclb_request_createPKc + + [D] _Z26grpc_grpclb_request_encodePK30_grpc_lb_v1_LoadBalanceRequest + + [D] _Z26grpc_json_writer_value_rawP16grpc_json_writerPKc + + [D] _Z26grpc_mdelem_on_final_unref24grpc_mdelem_data_storagePvj + + [D] _Z26grpc_proxy_mapper_map_nameP17grpc_proxy_mapperPKcPK17grpc_channel_argsPPcPPS3_ + + [D] _Z26grpc_proxy_mapper_registerbP17grpc_proxy_mapper + + [D] _Z26grpc_ssl_host_matches_namePK8tsi_peerPKc + + [D] _Z26grpc_tcp_client_prepare_fdPK17grpc_channel_argsPK21grpc_resolved_addressPS2_PP7grpc_fd + + [D] _Z26xds_grpclb_request_destroyP30_grpc_lb_v1_LoadBalanceRequest + + [D] _Z26xds_grpclb_serverlist_copyPK21xds_grpclb_serverlist + + [D] _Z27decode_repeated_identity_cbP12pb_istream_sPK10pb_field_sPPv + + [D] _Z27encode_repeated_identity_cbP12pb_ostream_sPK10pb_field_sPKPv + + [D] _Z27gpr_mpscq_pop_and_check_endP9gpr_mpscqPb + + [D] _Z27gpr_timers_set_log_filenamePKc + + [D] _Z27grpc_chttp2_server_add_portP11grpc_serverPKcP17grpc_channel_argsPi + + [D] _Z27grpc_connectivity_state_setP31grpc_connectivity_state_tracker23grpc_connectivity_statePKc + + [D] _Z27grpc_grpclb_request_destroyP30_grpc_lb_v1_LoadBalanceRequest + + [D] _Z27grpc_grpclb_serverlist_copyPK22grpc_grpclb_serverlist + + [D] _Z27grpc_json_writer_object_keyP16grpc_json_writerPKc + + [D] _Z27grpc_lb_policy_xds_shutdownv + + [D] _Z27grpc_proxy_mappers_map_namePKcPK17grpc_channel_argsPPcPPS1_ + + [D] _Z27grpc_server_setup_transportP11grpc_serverP14grpc_transportP12grpc_pollsetPK17grpc_channel_argsN9grpc_core13RefCountedPtrINS8_8channelz10SocketNodeEEEP18grpc_resource_user + + [D] _Z27pollset_set_add_pollset_setP16grpc_pollset_setS0_ + + [D] _Z27pollset_set_del_pollset_setP16grpc_pollset_setS0_ + + [D] _Z27xds_grpclb_duration_comparePK25_google_protobuf_DurationS1_ + + [D] _Z28grpc_chttp2_connector_createv + + [D] _Z28grpc_connectivity_state_initP31grpc_connectivity_state_tracker23grpc_connectivity_statePKc + + [D] _Z28grpc_connectivity_state_name23grpc_connectivity_state + + [D] _Z28grpc_grpclb_duration_comparePK25_google_protobuf_DurationS1_ + + [D] _Z28grpc_json_reader_is_completeP16grpc_json_reader + + [D] _Z28grpc_slice_from_moved_bufferSt10unique_ptrIcN9grpc_core13DefaultDeleteIcEEEm + + [D] _Z28grpc_slice_from_moved_stringSt10unique_ptrIcN9grpc_core13DefaultDeleteIcEEE + + [D] _Z28xds_grpclb_serverlist_equalsPK21xds_grpclb_serverlistS1_ + + [D] _Z29grpc_connectivity_state_checkP31grpc_connectivity_state_tracker + + [D] _Z29grpc_grpclb_serverlist_equalsPK22grpc_grpclb_serverlistS1_ + + [D] _Z29grpc_json_get_string_propertyPK9grpc_jsonPKc + + [D] _Z29grpc_json_writer_value_stringP16grpc_json_writerPKc + + [D] _Z29grpc_proxy_mapper_map_addressP17grpc_proxy_mapperPK21grpc_resolved_addressPK17grpc_channel_argsPPS1_PPS4_ + + [D] _Z29grpc_ssl_peer_to_auth_contextPK8tsi_peer + + [D] _Z29xds_grpclb_destroy_serverlistP21xds_grpclb_serverlist + + [D] _Z29xds_grpclb_duration_to_millisP25_google_protobuf_Duration + + [D] _Z30grpc_copy_json_string_propertyPK9grpc_jsonPKcPPc + + [D] _Z30grpc_gcp_handshaker_req_create28grpc_gcp_handshaker_req_type + + [D] _Z30grpc_gcp_handshaker_req_encodeP23_grpc_gcp_HandshakerReqP10grpc_slice + + [D] _Z30grpc_grpclb_destroy_serverlistP22grpc_grpclb_serverlist + + [D] _Z30grpc_grpclb_duration_to_millisP25_google_protobuf_Duration + + [D] _Z30grpc_proxy_mappers_map_addressPK21grpc_resolved_addressPK17grpc_channel_argsPPS_PPS2_ + + [D] _Z31grpc_auth_metadata_context_copyP26grpc_auth_metadata_contextS0_ + + [D] _Z31grpc_chttp2_add_incoming_goawayP21grpc_chttp2_transportjRK10grpc_slice + + [D] _Z31grpc_combiner_finally_schedulerP13grpc_combiner + + [D] _Z31grpc_connectivity_state_destroyP31grpc_connectivity_state_tracker + + [D] _Z31grpc_gcp_handshaker_req_destroyP23_grpc_gcp_HandshakerReq + + [D] _Z31grpc_gcp_handshaker_resp_createv + + [D] _Z31grpc_gcp_handshaker_resp_decode10grpc_sliceP24_grpc_gcp_HandshakerResp + + [D] _Z31grpc_json_parse_string_with_lenPcm + + [D] _Z31grpc_json_writer_container_endsP16grpc_json_writer14grpc_json_type + + [D] _Z31grpc_proxy_mapper_registry_initv + + [D] _Z31grpc_register_http_proxy_mapperv + + [D] _Z31grpc_security_handshaker_createP14tsi_handshakerP23grpc_security_connector + + [D] _Z32grpc_auth_metadata_context_resetP26grpc_auth_metadata_context + + [D] _Z32grpc_gcp_handshaker_resp_destroyP24_grpc_gcp_HandshakerResp + + [D] _Z33alts_tsi_handshaker_result_createP24_grpc_gcp_HandshakerRespbPP21tsi_handshaker_result + + [D] _Z33grpc_ares_ev_driver_create_lockedPP19grpc_ares_ev_driverP16grpc_pollset_setiP13grpc_combinerP17grpc_ares_request + + [D] _Z33grpc_base64_estimate_encoded_sizemii + + [D] _Z33grpc_chttp2_parsing_lookup_streamP21grpc_chttp2_transportj + + [D] _Z33grpc_json_add_number_string_childP9grpc_jsonS0_PKcl + + [D] _Z33grpc_json_writer_container_beginsP16grpc_json_writer14grpc_json_type + + [D] _Z33xds_grpclb_initial_response_parseRK10grpc_slice + + [D] _Z34alts_grpc_handshaker_client_createP19alts_tsi_handshakerP12grpc_channelPKcP16grpc_pollset_setP29grpc_alts_credentials_optionsRK10grpc_slicePFvPvP10grpc_errorEPFv10tsi_resultSC_PKhmP21tsi_handshaker_resultESC_P29alts_handshaker_client_vtableb + + [D] _Z34destroy_repeated_field_list_stringP15repeated_field_ + + [D] _Z34grpc_grpclb_initial_response_parseRK10grpc_slice + + [D] _Z35alts_tsi_utils_deserialize_responseP16grpc_byte_buffer + + [D] _Z35grpc_auth_json_key_create_from_jsonPK9grpc_json + + [D] _Z35grpc_json_writer_value_raw_with_lenP16grpc_json_writerPKcm + + [D] _Z35grpc_proxy_mapper_registry_shutdownv + + [D] _Z35grpc_server_populate_listen_socketsP11grpc_serverPN9grpc_core13InlinedVectorIlLm10EEE + + [D] _Z35grpc_server_populate_server_socketsP11grpc_serverPN9grpc_core13InlinedVectorIPNS1_8channelz10SocketNodeELm10EEEl + + [D] _Z35xds_grpclb_initial_response_destroyP38_grpc_lb_v1_InitialLoadBalanceResponse + + [D] _Z36destroy_repeated_field_list_identityP15repeated_field_ + + [D] _Z36gpr_global_config_get_grpc_verbosityv + + [D] _Z36gpr_global_config_set_grpc_verbosityPKc + + [D] _Z36grpc_connectivity_state_has_watchersP31grpc_connectivity_state_tracker + + [D] _Z36grpc_gcp_handshaker_req_set_in_bytesP23_grpc_gcp_HandshakerReqPKcm + + [D] _Z36grpc_grpclb_initial_response_destroyP38_grpc_lb_v1_InitialLoadBalanceResponse + + [D] _Z36xds_grpclb_response_parse_serverlistRK10grpc_slice + + [D] _Z37grpc_grpclb_response_parse_serverlistRK10grpc_slice + + [D] _Z37grpc_sockaddr_to_uri_unix_if_possiblePK21grpc_resolved_address + + [D] _Z37grpc_transport_stream_op_batch_stringP30grpc_transport_stream_op_batch + + [D] _Z38grpc_grpclb_load_report_request_createPN9grpc_core17GrpcLbClientStatsE + + [D] _Z39grpc_cares_wrapper_address_sorting_sortPN9grpc_core13InlinedVectorINS_13ServerAddressELm1EEE + + [D] _Z39grpc_gcp_handshaker_req_set_target_nameP23_grpc_gcp_HandshakerReqPKc + + [D] _Z39grpc_tcp_client_create_from_prepared_fdP16grpc_pollset_setP12grpc_closureP7grpc_fdPK17grpc_channel_argsPK21grpc_resolved_addresslPP13grpc_endpoint + + [D] _Z40grpc_auth_refresh_token_create_from_jsonPK9grpc_json + + [D] _Z40grpc_deframe_unprocessed_incoming_framesP23grpc_chttp2_data_parserP18grpc_chttp2_streamP17grpc_slice_bufferP10grpc_slicePSt10unique_ptrIN9grpc_core10ByteStreamENS8_16OrphanableDeleteIS9_EEE + + [D] _Z40grpc_gcp_handshaker_req_set_rpc_versionsP23_grpc_gcp_HandshakerReqjjjj + + [D] _Z41grpc_lb_policy_xds_modify_lb_channel_argsP17grpc_channel_args + + [D] _Z42grpc_gcp_handshaker_req_set_local_endpointP23_grpc_gcp_HandshakerReqPKcm25_grpc_gcp_NetworkProtocol + + [D] _Z43grpc_channel_args_get_compression_algorithmPK17grpc_channel_args + + [D] _Z43grpc_channel_args_set_compression_algorithmP17grpc_channel_args26grpc_compression_algorithm + + [D] _Z43grpc_gcp_handshaker_req_add_record_protocolP23_grpc_gcp_HandshakerReqPKc + + [D] _Z43grpc_gcp_handshaker_req_set_remote_endpointP23_grpc_gcp_HandshakerReqPKcm25_grpc_gcp_NetworkProtocol + + [D] _Z43grpc_ssl_tsi_client_handshaker_factory_initP25tsi_ssl_pem_key_cert_pairPKcP21tsi_ssl_session_cachePP33tsi_ssl_client_handshaker_factory + + [D] _Z43grpc_ssl_tsi_server_handshaker_factory_initP25tsi_ssl_pem_key_cert_pairmPKc40grpc_ssl_client_certificate_request_typePP33tsi_ssl_server_handshaker_factory + + [D] _Z44grpc_channel_get_reffed_status_elem_slowpathP12grpc_channeli + + [D] _Z44grpc_gcp_rpc_protocol_versions_encode_lengthPK29_grpc_gcp_RpcProtocolVersions + + [D] _Z44grpc_lb_policy_grpclb_modify_lb_channel_argsRKN9grpc_core13InlinedVectorINS_13ServerAddressELm1EEEP17grpc_channel_args + + [D] _Z44xds_grpclb_load_report_request_create_lockedPN9grpc_core16XdsLbClientStatsE + + [D] _Z46gpr_global_config_get_grpc_enable_fork_supportv + + [D] _Z46gpr_global_config_set_grpc_enable_fork_supportb + + [D] _Z46grpc_connectivity_state_notify_on_state_changeP31grpc_connectivity_state_trackerP23grpc_connectivity_stateP12grpc_closure + + [D] _Z46grpc_gcp_handshaker_req_set_handshake_protocolP23_grpc_gcp_HandshakerReq27_grpc_gcp_HandshakeProtocol + + [D] _Z48grpc_gcp_handshaker_req_add_application_protocolP23_grpc_gcp_HandshakerReqPKc + + [D] _Z48grpc_get_well_known_google_credentials_file_pathv + + [D] _Z48grpc_override_well_known_credentials_path_getterPFPcvE + + [D] _Z49grpc_gcp_handshaker_req_param_add_record_protocolP23_grpc_gcp_HandshakerReq27_grpc_gcp_HandshakeProtocolPKc + + [D] _Z50grpc_gcp_rpc_protocol_versions_encode_to_raw_bytesPK29_grpc_gcp_RpcProtocolVersionsPhm + + [D] _Z51grpc_gcp_handshaker_req_set_local_identity_hostnameP23_grpc_gcp_HandshakerReqPKc + + [D] _Z52grpc_gcp_handshaker_req_add_target_identity_hostnameP23_grpc_gcp_HandshakerReqPKc + + [D] _Z53grpc_get_well_known_google_credentials_file_path_implv + + [D] _Z57grpc_gcp_handshaker_req_param_add_local_identity_hostnameP23_grpc_gcp_HandshakerReq27_grpc_gcp_HandshakeProtocolPKc + + [D] _Z58grpc_gcp_handshaker_req_set_local_identity_service_accountP23_grpc_gcp_HandshakerReqPKc + + [D] _Z59grpc_gcp_handshaker_req_add_target_identity_service_accountP23_grpc_gcp_HandshakerReqPKc + + [D] _Z64grpc_gcp_handshaker_req_param_add_local_identity_service_accountP23_grpc_gcp_HandshakerReq27_grpc_gcp_HandshakeProtocolPKc + + [D] _Z74grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_lockedP17grpc_ares_requestPKcS2_S2_P16grpc_pollset_setbiP13grpc_combiner + + [D] _Z8gpr_dumpPKcmj + + [D] _Z8gpr_ltoalPc + + [D] _Z8tcp_sendiPK6msghdr + + [D] _ZN15GrpcUdpListener14StartListeningEPP12grpc_pollsetmP21GrpcUdpHandlerFactory + + [D] _ZN17SpiffeCredentials25create_security_connectorEN9grpc_core13RefCountedPtrI21grpc_call_credentialsEEPKcPK17grpc_channel_argsPPS6_ + + [D] _ZN17SpiffeCredentialsC1EN9grpc_core13RefCountedPtrI28grpc_tls_credentials_optionsEE + + [D] _ZN17SpiffeCredentialsC2EN9grpc_core13RefCountedPtrI28grpc_tls_credentials_optionsEE, aliases _ZN17SpiffeCredentialsC1EN9grpc_core13RefCountedPtrI28grpc_tls_credentials_optionsEE + + [D] _ZN17SpiffeCredentialsD0Ev + + [D] _ZN17SpiffeCredentialsD1Ev, aliases _ZN17SpiffeCredentialsD2Ev + + [D] _ZN17SpiffeCredentialsD2Ev + + [D] _ZN21grpc_call_credentialsD0Ev + + [D] _ZN21grpc_call_credentialsD1Ev + + [D] _ZN21grpc_call_credentialsD2Ev, aliases _ZN21grpc_call_credentialsD1Ev + + [D] _ZN23SpiffeServerCredentials25create_security_connectorEv + + [D] _ZN23SpiffeServerCredentialsC1EN9grpc_core13RefCountedPtrI28grpc_tls_credentials_optionsEE + + [D] _ZN23SpiffeServerCredentialsC2EN9grpc_core13RefCountedPtrI28grpc_tls_credentials_optionsEE, aliases _ZN23SpiffeServerCredentialsC1EN9grpc_core13RefCountedPtrI28grpc_tls_credentials_optionsEE + + [D] _ZN23SpiffeServerCredentialsD0Ev + + [D] _ZN23SpiffeServerCredentialsD1Ev, aliases _ZN23SpiffeServerCredentialsD2Ev + + [D] _ZN23SpiffeServerCredentialsD2Ev + + [D] _ZN23grpc_plugin_credentialsC1E32grpc_metadata_credentials_plugin + + [D] _ZN23grpc_plugin_credentialsC2E32grpc_metadata_credentials_plugin, aliases _ZN23grpc_plugin_credentialsC1E32grpc_metadata_credentials_plugin + + [D] _ZN23grpc_security_connector10check_peerE8tsi_peerP13grpc_endpointPN9grpc_core13RefCountedPtrI17grpc_auth_contextEEP12grpc_closure + + [D] _ZN23grpc_server_credentials25create_security_connectorEv + + [D] _ZN23grpc_server_credentialsD0Ev + + [D] _ZN23grpc_server_credentialsD1Ev + + [D] _ZN23grpc_server_credentialsD2Ev, aliases _ZN23grpc_server_credentialsD1Ev + + [D] _ZN24grpc_channel_credentialsD0Ev + + [D] _ZN24grpc_channel_credentialsD1Ev, aliases _ZN24grpc_channel_credentialsD2Ev + + [D] _ZN24grpc_channel_credentialsD2Ev + + [D] _ZN29SpiffeServerSecurityConnector10check_peerE8tsi_peerP13grpc_endpointPN9grpc_core13RefCountedPtrI17grpc_auth_contextEEP12grpc_closure + + [D] _ZN29SpiffeServerSecurityConnector15add_handshakersEP16grpc_pollset_setPN9grpc_core16HandshakeManagerE + + [D] _ZN29SpiffeServerSecurityConnector30RefreshServerHandshakerFactoryEv + + [D] _ZN29SpiffeServerSecurityConnector35CreateSpiffeServerSecurityConnectorEN9grpc_core13RefCountedPtrI23grpc_server_credentialsEE + + [D] _ZN29SpiffeServerSecurityConnectorC1EN9grpc_core13RefCountedPtrI23grpc_server_credentialsEE + + [D] _ZN29SpiffeServerSecurityConnectorC2EN9grpc_core13RefCountedPtrI23grpc_server_credentialsEE, aliases _ZN29SpiffeServerSecurityConnectorC1EN9grpc_core13RefCountedPtrI23grpc_server_credentialsEE + + [D] _ZN29SpiffeServerSecurityConnectorD0Ev + + [D] _ZN29SpiffeServerSecurityConnectorD1Ev + + [D] _ZN29SpiffeServerSecurityConnectorD2Ev, aliases _ZN29SpiffeServerSecurityConnectorD1Ev + + [D] _ZN29grpc_tls_key_materials_config17set_key_materialsESt10unique_ptrIcN9grpc_core13DefaultDeleteIcEEENS1_13InlinedVectorINS1_14PemKeyCertPairELm1EEE + + [D] _ZN30SpiffeChannelSecurityConnector10check_peerE8tsi_peerP13grpc_endpointPN9grpc_core13RefCountedPtrI17grpc_auth_contextEEP12grpc_closure + + [D] _ZN30SpiffeChannelSecurityConnector15add_handshakersEP16grpc_pollset_setPN9grpc_core16HandshakeManagerE + + [D] _ZN30SpiffeChannelSecurityConnector15check_call_hostEPKcP17grpc_auth_contextP12grpc_closurePP10grpc_error + + [D] _ZN30SpiffeChannelSecurityConnector22cancel_check_call_hostEP12grpc_closureP10grpc_error + + [D] _ZN30SpiffeChannelSecurityConnector27InitializeHandshakerFactoryEP21tsi_ssl_session_cache + + [D] _ZN30SpiffeChannelSecurityConnector28ServerAuthorizationCheckDoneEP39grpc_tls_server_authorization_check_arg + + [D] _ZN30SpiffeChannelSecurityConnector33ServerAuthorizationCheckArgCreateEPv + + [D] _ZN30SpiffeChannelSecurityConnector34ServerAuthorizationCheckArgDestroyEP39grpc_tls_server_authorization_check_arg + + [D] _ZN30SpiffeChannelSecurityConnector36CreateSpiffeChannelSecurityConnectorEN9grpc_core13RefCountedPtrI24grpc_channel_credentialsEENS1_I21grpc_call_credentialsEEPKcS7_P21tsi_ssl_session_cache + + [D] _ZN30SpiffeChannelSecurityConnector37ProcessServerAuthorizationCheckResultEP39grpc_tls_server_authorization_check_arg + + [D] _ZN30SpiffeChannelSecurityConnectorC1EN9grpc_core13RefCountedPtrI24grpc_channel_credentialsEENS1_I21grpc_call_credentialsEEPKcS7_, aliases _ZN30SpiffeChannelSecurityConnectorC2EN9grpc_core13RefCountedPtrI24grpc_channel_credentialsEENS1_I21grpc_call_credentialsEEPKcS7_ + + [D] _ZN30SpiffeChannelSecurityConnectorC2EN9grpc_core13RefCountedPtrI24grpc_channel_credentialsEENS1_I21grpc_call_credentialsEEPKcS7_ + + [D] _ZN30SpiffeChannelSecurityConnectorD0Ev + + [D] _ZN30SpiffeChannelSecurityConnectorD1Ev + + [D] _ZN30SpiffeChannelSecurityConnectorD2Ev, aliases _ZN30SpiffeChannelSecurityConnectorD1Ev + + [D] _ZN30grpc_server_security_connector15add_handshakersEP16grpc_pollset_setPN9grpc_core16HandshakeManagerE + + [D] _ZN31grpc_channel_security_connector15add_handshakersEP16grpc_pollset_setPN9grpc_core16HandshakeManagerE + + [D] _ZN31grpc_channel_security_connector15check_call_hostEPKcP17grpc_auth_contextP12grpc_closurePP10grpc_error + + [D] _ZN31grpc_channel_security_connector22cancel_check_call_hostEP12grpc_closureP10grpc_error + + [D] _ZN37grpc_oauth2_token_fetcher_credentials12fetch_oauth2EP33grpc_credentials_metadata_requestP20grpc_httpcli_contextP19grpc_polling_entityPFvPvP10grpc_errorEl + + [D] _ZN3tsi16SslCachedSessionD0Ev + + [D] _ZN3tsi16SslCachedSessionD1Ev, aliases _ZN3tsi16SslCachedSessionD2Ev + + [D] _ZN3tsi16SslCachedSessionD2Ev + + [D] _ZN43grpc_httpcli_ssl_channel_security_connector15add_handshakersEP16grpc_pollset_setPN9grpc_core16HandshakeManagerE + + [D] _ZN43grpc_httpcli_ssl_channel_security_connector15check_call_hostEPKcP17grpc_auth_contextP12grpc_closurePP10grpc_error + + [D] _ZN9grpc_core10HandshakerD0Ev + + [D] _ZN9grpc_core10HandshakerD1Ev + + [D] _ZN9grpc_core10HandshakerD2Ev, aliases _ZN9grpc_core10HandshakerD1Ev + + [D] _ZN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcher15OnHealthChangedEPvP10grpc_error + + [D] _ZN9grpc_core10Subchannel16HealthWatcherMap16AddWatcherLockedEPS0_23grpc_connectivity_stateSt10unique_ptrIcNS_13DefaultDeleteIcEEES4_INS_19SubchannelInterface24ConnectivityStateWatcherENS5_IS9_EEE + + [D] _ZN9grpc_core10Subchannel16HealthWatcherMap19RemoveWatcherLockedEPKcPNS_19SubchannelInterface24ConnectivityStateWatcherE + + [D] _ZN9grpc_core10Subchannel18GetChildSocketUuidEv + + [D] _ZN9grpc_core10Subchannel22WatchConnectivityStateE23grpc_connectivity_stateSt10unique_ptrIcNS_13DefaultDeleteIcEEES2_INS_19SubchannelInterface24ConnectivityStateWatcherENS3_IS7_EEE + + [D] _ZN9grpc_core10Subchannel28CancelConnectivityStateWatchEPKcPNS_19SubchannelInterface24ConnectivityStateWatcherE + + [D] _ZN9grpc_core10Subchannel28ConnectivityStateWatcherList16AddWatcherLockedESt10unique_ptrINS_19SubchannelInterface24ConnectivityStateWatcherENS_13DefaultDeleteIS4_EEE + + [D] _ZN9grpc_core10Subchannel28ConnectivityStateWatcherList19RemoveWatcherLockedEPNS_19SubchannelInterface24ConnectivityStateWatcherE + + [D] _ZN9grpc_core10Subchannel31ConnectedSubchannelStateWatcher21OnConnectivityChangedEPvP10grpc_error + + [D] _ZN9grpc_core10Subchannel3RefEv + + [D] _ZN9grpc_core10Subchannel5UnrefEv + + [D] _ZN9grpc_core10Subchannel6CreateEP14grpc_connectorPK17grpc_channel_args + + [D] _ZN9grpc_core10Subchannel7WeakRefEv + + [D] _ZN9grpc_core10Subchannel9RefMutateEli + + [D] _ZN9grpc_core10Subchannel9WeakUnrefEv + + [D] _ZN9grpc_core10SubchannelC1EPNS_13SubchannelKeyEP14grpc_connectorPK17grpc_channel_args, aliases _ZN9grpc_core10SubchannelC2EPNS_13SubchannelKeyEP14grpc_connectorPK17grpc_channel_args + + [D] _ZN9grpc_core10SubchannelC2EPNS_13SubchannelKeyEP14grpc_connectorPK17grpc_channel_args + + [D] _ZN9grpc_core12CallCombiner4StopEPKc + + [D] _ZN9grpc_core12CallCombiner5StartEP12grpc_closureP10grpc_errorPKc + + [D] _ZN9grpc_core12FakeResolver24ReturnReresolutionResultEPvP10grpc_error + + [D] _ZN9grpc_core12GrpcPolledFdD0Ev + + [D] _ZN9grpc_core12GrpcPolledFdD1Ev + + [D] _ZN9grpc_core12GrpcPolledFdD2Ev, aliases _ZN9grpc_core12GrpcPolledFdD1Ev + + [D] _ZN9grpc_core13ServiceConfig12ParsedConfigD0Ev + + [D] _ZN9grpc_core13ServiceConfig12ParsedConfigD1Ev + + [D] _ZN9grpc_core13ServiceConfig12ParsedConfigD2Ev, aliases _ZN9grpc_core13ServiceConfig12ParsedConfigD1Ev + + [D] _ZN9grpc_core13ServiceConfig14RegisterParserESt10unique_ptrINS0_6ParserENS_13DefaultDeleteIS2_EEE + + [D] _ZN9grpc_core13ServiceConfig17ParseGlobalParamsEPK9grpc_json + + [D] _ZN9grpc_core13ServiceConfig19ParseJsonMethodNameEP9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core13ServiceConfig20ParsePerMethodParamsEPK9grpc_json + + [D] _ZN9grpc_core13ServiceConfig24CountNamesInMethodConfigEP9grpc_json + + [D] _ZN9grpc_core13ServiceConfig27GetMethodParsedConfigVectorERK10grpc_slice + + [D] _ZN9grpc_core13ServiceConfig47ParseJsonMethodConfigToServiceConfigVectorTableEPK9grpc_jsonPNS_14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS0_12ParsedConfigENS_13DefaultDeleteIS7_EEELm4EEEE5EntryEPm + + [D] _ZN9grpc_core13ServiceConfig4InitEv + + [D] _ZN9grpc_core13ServiceConfig6CreateEPKcPP10grpc_error + + [D] _ZN9grpc_core13ServiceConfig6Parser17ParseGlobalParamsEPK9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core13ServiceConfig6Parser20ParsePerMethodParamsEPK9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core13ServiceConfig6ParserD0Ev + + [D] _ZN9grpc_core13ServiceConfig6ParserD1Ev, aliases _ZN9grpc_core13ServiceConfig6ParserD2Ev + + [D] _ZN9grpc_core13ServiceConfig6ParserD2Ev + + [D] _ZN9grpc_core13ServiceConfig8ShutdownEv + + [D] _ZN9grpc_core13ServiceConfigC1ESt10unique_ptrIcNS_13DefaultDeleteIcEEES4_P9grpc_jsonPP10grpc_error, aliases _ZN9grpc_core13ServiceConfigC2ESt10unique_ptrIcNS_13DefaultDeleteIcEEES4_P9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core13ServiceConfigC2ESt10unique_ptrIcNS_13DefaultDeleteIcEEES4_P9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEEC1EmPNSB_5EntryEPFiRKSA_SF_E + + [D] _ZN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEEC2EmPNSB_5EntryEPFiRKSA_SF_E, aliases _ZN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEEC1EmPNSB_5EntryEPFiRKSA_SF_E + + [D] _ZN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEED0Ev + + [D] _ZN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEED1Ev + + [D] _ZN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEED2Ev, aliases _ZN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEED1Ev + + [D] _ZN9grpc_core14SliceHashTableISt10unique_ptrIcNS_13DefaultDeleteIcEEEE15DefaultValueCmpERKS4_S7_ + + [D] _ZN9grpc_core14SliceHashTableISt10unique_ptrIcNS_13DefaultDeleteIcEEEE3AddERK10grpc_sliceRS4_ + + [D] _ZN9grpc_core14SliceHashTableISt10unique_ptrIcNS_13DefaultDeleteIcEEEED0Ev + + [D] _ZN9grpc_core14SliceHashTableISt10unique_ptrIcNS_13DefaultDeleteIcEEEED1Ev, aliases _ZN9grpc_core14SliceHashTableISt10unique_ptrIcNS_13DefaultDeleteIcEEEED2Ev + + [D] _ZN9grpc_core14SliceHashTableISt10unique_ptrIcNS_13DefaultDeleteIcEEEED2Ev + + [D] _ZN9grpc_core15ByteStreamCacheC1ESt10unique_ptrINS_10ByteStreamENS_16OrphanableDeleteIS2_EEE + + [D] _ZN9grpc_core15ByteStreamCacheC2ESt10unique_ptrINS_10ByteStreamENS_16OrphanableDeleteIS2_EEE, aliases _ZN9grpc_core15ByteStreamCacheC1ESt10unique_ptrINS_10ByteStreamENS_16OrphanableDeleteIS2_EEE + + [D] _ZN9grpc_core15GlobalConfigEnv5UnsetEv + + [D] _ZN9grpc_core15GlobalConfigEnv7GetNameEv + + [D] _ZN9grpc_core15GlobalConfigEnv8GetValueEv + + [D] _ZN9grpc_core15GlobalConfigEnv8SetValueEPKc + + [D] _ZN9grpc_core15ResolverFactoryD0Ev + + [D] _ZN9grpc_core15ResolverFactoryD1Ev, aliases _ZN9grpc_core15ResolverFactoryD2Ev + + [D] _ZN9grpc_core15ResolverFactoryD2Ev + + [D] _ZN9grpc_core16ResolverRegistry14CreateResolverEPKcPK17grpc_channel_argsP16grpc_pollset_setP13grpc_combinerSt10unique_ptrINS_8Resolver13ResultHandlerENS_13DefaultDeleteISC_EEE + + [D] _ZN9grpc_core16ResolverRegistry7Builder23RegisterResolverFactoryESt10unique_ptrINS_15ResolverFactoryENS_13DefaultDeleteIS3_EEE + + [D] _ZN9grpc_core16XdsLbClientStats14AddCallStartedEv + + [D] _ZN9grpc_core16XdsLbClientStats15AddCallFinishedEbb + + [D] _ZN9grpc_core16XdsLbClientStats20AddCallDroppedLockedEPc + + [D] _ZN9grpc_core16XdsLbClientStats9GetLockedEPlS1_S1_S1_PSt10unique_ptrINS_13InlinedVectorINS0_14DropTokenCountELm10EEENS_13DefaultDeleteIS5_EEE + + [D] _ZN9grpc_core16XdsLbClientStatsD0Ev + + [D] _ZN9grpc_core16XdsLbClientStatsD1Ev + + [D] _ZN9grpc_core16XdsLbClientStatsD2Ev, aliases _ZN9grpc_core16XdsLbClientStatsD1Ev + + [D] _ZN9grpc_core17GrpcLbClientStats3GetEPlS1_S1_S1_PSt10unique_ptrINS_13InlinedVectorINS0_14DropTokenCountELm10EEENS_13DefaultDeleteIS5_EEE + + [D] _ZN9grpc_core17GrpcLbClientStats7DestroyEPv + + [D] _ZN9grpc_core17HandshakerFactoryD0Ev + + [D] _ZN9grpc_core17HandshakerFactoryD1Ev, aliases _ZN9grpc_core17HandshakerFactoryD2Ev + + [D] _ZN9grpc_core17HandshakerFactoryD2Ev + + [D] _ZN9grpc_core17HealthCheckClient15SetHealthStatusE23grpc_connectivity_stateP10grpc_error + + [D] _ZN9grpc_core17HealthCheckClient15StartRetryTimerEv + + [D] _ZN9grpc_core17HealthCheckClient20NotifyOnHealthChangeEP23grpc_connectivity_stateP12grpc_closure + + [D] _ZN9grpc_core17HealthCheckClient21SetHealthStatusLockedE23grpc_connectivity_stateP10grpc_error + + [D] _ZN9grpc_core17HealthCheckClient9CallState14CallEndedRetryEPvP10grpc_error + + [D] _ZN9grpc_core17HealthCheckClient9CallState9CallEndedEb + + [D] _ZN9grpc_core17HealthCheckClientC1EPKcNS_13RefCountedPtrINS_19ConnectedSubchannelEEEP16grpc_pollset_setNS3_INS_8channelz14SubchannelNodeEEE + + [D] _ZN9grpc_core17HealthCheckClientC2EPKcNS_13RefCountedPtrINS_19ConnectedSubchannelEEEP16grpc_pollset_setNS3_INS_8channelz14SubchannelNodeEEE, aliases _ZN9grpc_core17HealthCheckClientC1EPKcNS_13RefCountedPtrINS_19ConnectedSubchannelEEEP16grpc_pollset_setNS3_INS_8channelz14SubchannelNodeEEE + + [D] _ZN9grpc_core17MessageSizeParser20ParsePerMethodParamsEPK9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core18HandshakerRegistry25RegisterHandshakerFactoryEbNS_14HandshakerTypeESt10unique_ptrINS_17HandshakerFactoryENS_13DefaultDeleteIS3_EEE + + [D] _ZN9grpc_core19ConnectedSubchannel10CreateCallERKNS0_8CallArgsEPP10grpc_error + + [D] _ZN9grpc_core19ConnectedSubchannel19NotifyOnStateChangeEP16grpc_pollset_setP23grpc_connectivity_stateP12grpc_closure + + [D] _ZN9grpc_core19ConnectedSubchannelC1EP18grpc_channel_stackPK17grpc_channel_argsNS_13RefCountedPtrINS_8channelz14SubchannelNodeEEEl + + [D] _ZN9grpc_core19ConnectedSubchannelC2EP18grpc_channel_stackPK17grpc_channel_argsNS_13RefCountedPtrINS_8channelz14SubchannelNodeEEEl, aliases _ZN9grpc_core19ConnectedSubchannelC1EP18grpc_channel_stackPK17grpc_channel_argsNS_13RefCountedPtrINS_8channelz14SubchannelNodeEEEl + + [D] _ZN9grpc_core19GlobalConfigEnvBool3GetEv + + [D] _ZN9grpc_core19GlobalConfigEnvBool3SetEb + + [D] _ZN9grpc_core19GrpcPolledFdFactoryD0Ev + + [D] _ZN9grpc_core19GrpcPolledFdFactoryD1Ev, aliases _ZN9grpc_core19GrpcPolledFdFactoryD2Ev + + [D] _ZN9grpc_core19GrpcPolledFdFactoryD2Ev + + [D] _ZN9grpc_core19LoadBalancingPolicy11QueuePicker12CallExitIdleEPvP10grpc_error + + [D] _ZN9grpc_core19LoadBalancingPolicy12UpdateLockedENS0_10UpdateArgsE + + [D] _ZN9grpc_core19LoadBalancingPolicy14ShutdownLockedEv + + [D] _ZN9grpc_core19LoadBalancingPolicy18ResetBackoffLockedEv + + [D] _ZN9grpc_core19LoadBalancingPolicy20ChannelControlHelper13AddTraceEventENS1_13TraceSeverityEPKc + + [D] _ZN9grpc_core19LoadBalancingPolicy20ChannelControlHelperD0Ev + + [D] _ZN9grpc_core19LoadBalancingPolicy20ChannelControlHelperD1Ev + + [D] _ZN9grpc_core19LoadBalancingPolicy20ChannelControlHelperD2Ev, aliases _ZN9grpc_core19LoadBalancingPolicy20ChannelControlHelperD1Ev + + [D] _ZN9grpc_core19LoadBalancingPolicy22ShutdownAndUnrefLockedEPvP10grpc_error + + [D] _ZN9grpc_core19LoadBalancingPolicy6ConfigD0Ev + + [D] _ZN9grpc_core19LoadBalancingPolicy6ConfigD1Ev, aliases _ZN9grpc_core19LoadBalancingPolicy6ConfigD2Ev + + [D] _ZN9grpc_core19LoadBalancingPolicy6ConfigD2Ev + + [D] _ZN9grpc_core19SubchannelInterface24ConnectivityStateWatcherD0Ev + + [D] _ZN9grpc_core19SubchannelInterface24ConnectivityStateWatcherD1Ev, aliases _ZN9grpc_core19SubchannelInterface24ConnectivityStateWatcherD2Ev + + [D] _ZN9grpc_core19SubchannelInterface24ConnectivityStateWatcherD2Ev + + [D] _ZN9grpc_core19SubchannelInterfaceD0Ev + + [D] _ZN9grpc_core19SubchannelInterfaceD1Ev, aliases _ZN9grpc_core19SubchannelInterfaceD2Ev + + [D] _ZN9grpc_core19SubchannelInterfaceD2Ev + + [D] _ZN9grpc_core20GlobalConfigEnvInt323GetEv + + [D] _ZN9grpc_core20GlobalConfigEnvInt323SetEi + + [D] _ZN9grpc_core21GlobalConfigEnvString3GetEv + + [D] _ZN9grpc_core21GlobalConfigEnvString3SetEPKc + + [D] _ZN9grpc_core22NewGrpcPolledFdFactoryEP13grpc_combiner + + [D] _ZN9grpc_core23SubchannelPoolInterfaceD0Ev + + [D] _ZN9grpc_core23SubchannelPoolInterfaceD1Ev + + [D] _ZN9grpc_core23SubchannelPoolInterfaceD2Ev, aliases _ZN9grpc_core23SubchannelPoolInterfaceD1Ev + + [D] _ZN9grpc_core24GrpcPolledFdFactoryPosix21NewGrpcPolledFdLockedEiP16grpc_pollset_setP13grpc_combiner + + [D] _ZN9grpc_core24SecurityHandshakerCreateEP14tsi_handshakerP23grpc_security_connector + + [D] _ZN9grpc_core26LoadBalancingPolicyFactoryD0Ev + + [D] _ZN9grpc_core26LoadBalancingPolicyFactoryD1Ev, aliases _ZN9grpc_core26LoadBalancingPolicyFactoryD2Ev + + [D] _ZN9grpc_core26LoadBalancingPolicyFactoryD2Ev + + [D] _ZN9grpc_core27LoadBalancingPolicyRegistry24ParseLoadBalancingConfigEPK9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core27LoadBalancingPolicyRegistry7Builder34RegisterLoadBalancingPolicyFactoryESt10unique_ptrINS_26LoadBalancingPolicyFactoryENS_13DefaultDeleteIS3_EEE + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicy20CreateLbPolicyLockedEPKcRK17grpc_channel_argsPNS_13InlinedVectorIPcLm3EEE + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicy20StartResolvingLockedEv + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicy22ResolvingControlHelper11UpdateStateE23grpc_connectivity_stateSt10unique_ptrINS_19LoadBalancingPolicy16SubchannelPickerENS_13DefaultDeleteIS5_EEE + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicy22ResolvingControlHelper13CreateChannelEPKcRK17grpc_channel_args + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicy28CreateOrUpdateLbPolicyLockedEPKcNS_13RefCountedPtrINS_19LoadBalancingPolicy6ConfigEEENS_8Resolver6ResultEPNS_13InlinedVectorIPcLm3EEE + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicy44MaybeAddTraceMessagesForAddressChangesLockedEbPNS_13InlinedVectorIPcLm3EEE + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicy4InitERK17grpc_channel_args + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicyC1ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_13DefaultDeleteIcEEEPFbPvRKNS_8Resolver6ResultEPPKcPNS_13RefCountedPtrINS1_6ConfigEEEPP10grpc_errorES9_SN_ + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicyC1ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_13DefaultDeleteIcEEES8_NS_13RefCountedPtrINS1_6ConfigEEEPP10grpc_error, aliases _ZN9grpc_core28ResolvingLoadBalancingPolicyC2ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_13DefaultDeleteIcEEES8_NS_13RefCountedPtrINS1_6ConfigEEEPP10grpc_error + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicyC2ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_13DefaultDeleteIcEEEPFbPvRKNS_8Resolver6ResultEPPKcPNS_13RefCountedPtrINS1_6ConfigEEEPP10grpc_errorES9_SN_, aliases _ZN9grpc_core28ResolvingLoadBalancingPolicyC1ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_13DefaultDeleteIcEEEPFbPvRKNS_8Resolver6ResultEPPKcPNS_13RefCountedPtrINS1_6ConfigEEEPP10grpc_errorES9_SN_ + + [D] _ZN9grpc_core28ResolvingLoadBalancingPolicyC2ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_13DefaultDeleteIcEEES8_NS_13RefCountedPtrINS1_6ConfigEEEPP10grpc_error + + [D] _ZN9grpc_core29FakeResolverResponseGenerator16SetFailureLockedEPvP10grpc_error + + [D] _ZN9grpc_core29FakeResolverResponseGenerator17SetResponseLockedEPvP10grpc_error + + [D] _ZN9grpc_core29FakeResolverResponseGenerator29SetReresolutionResponseLockedEPvP10grpc_error + + [D] _ZN9grpc_core31SetGlobalConfigEnvErrorFunctionEPFvPKcE + + [D] _ZN9grpc_core32Chttp2SecureClientChannelFactory13CreateChannelEPKcPK17grpc_channel_args + + [D] _ZN9grpc_core34Chttp2InsecureClientChannelFactory13CreateChannelEPKcPK17grpc_channel_args + + [D] _ZN9grpc_core36CreateTargetAuthorityTableChannelArgEPNS_14SliceHashTableISt10unique_ptrIcNS_13DefaultDeleteIcEEEEE + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE10RotateLeftEPNSB_5EntryE + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE11RotateRightEPNSB_5EntryE + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE15InsertRecursiveEPNSB_5EntryEOSt4pairIS2_S9_E + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE15RemoveRecursiveEPNSB_5EntryERKS2_ + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE26RebalanceTreeAfterDeletionEPNSB_5EntryE + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE27RebalanceTreeAfterInsertionEPNSB_5EntryERKS2_ + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE4findERKS2_ + + [D] _ZN9grpc_core3MapIPKcSt10unique_ptrINS_10Subchannel16HealthWatcherMap13HealthWatcherENS_16OrphanableDeleteIS6_EEENS_10StringLessEE5eraseENSB_8iteratorE + + [D] _ZN9grpc_core3MapIPNS_10SubchannelEiSt4lessIS2_EE10RotateLeftEPNS5_5EntryE + + [D] _ZN9grpc_core3MapIPNS_10SubchannelEiSt4lessIS2_EE11RotateRightEPNS5_5EntryE + + [D] _ZN9grpc_core3MapIPNS_10SubchannelEiSt4lessIS2_EE15InsertRecursiveEPNS5_5EntryEOSt4pairIS2_iE + + [D] _ZN9grpc_core3MapIPNS_10SubchannelEiSt4lessIS2_EE15RemoveRecursiveEPNS5_5EntryERKS2_ + + [D] _ZN9grpc_core3MapIPNS_10SubchannelEiSt4lessIS2_EE26RebalanceTreeAfterDeletionEPNS5_5EntryE + + [D] _ZN9grpc_core3MapIPNS_10SubchannelEiSt4lessIS2_EE27RebalanceTreeAfterInsertionEPNS5_5EntryERKS2_ + + [D] _ZN9grpc_core3MapIPNS_10SubchannelEiSt4lessIS2_EE5eraseENS5_8iteratorE + + [D] _ZN9grpc_core3MapIPNS_19SubchannelInterface24ConnectivityStateWatcherESt10unique_ptrIS2_NS_13DefaultDeleteIS2_EEESt4lessIS3_EE10RotateLeftEPNSA_5EntryE + + [D] _ZN9grpc_core3MapIPNS_19SubchannelInterface24ConnectivityStateWatcherESt10unique_ptrIS2_NS_13DefaultDeleteIS2_EEESt4lessIS3_EE11RotateRightEPNSA_5EntryE + + [D] _ZN9grpc_core3MapIPNS_19SubchannelInterface24ConnectivityStateWatcherESt10unique_ptrIS2_NS_13DefaultDeleteIS2_EEESt4lessIS3_EE15InsertRecursiveEPNSA_5EntryEOSt4pairIS3_S7_E + + [D] _ZN9grpc_core3MapIPNS_19SubchannelInterface24ConnectivityStateWatcherESt10unique_ptrIS2_NS_13DefaultDeleteIS2_EEESt4lessIS3_EE15RemoveRecursiveEPNSA_5EntryERKS3_ + + [D] _ZN9grpc_core3MapIPNS_19SubchannelInterface24ConnectivityStateWatcherESt10unique_ptrIS2_NS_13DefaultDeleteIS2_EEESt4lessIS3_EE26RebalanceTreeAfterDeletionEPNSA_5EntryE + + [D] _ZN9grpc_core3MapIPNS_19SubchannelInterface24ConnectivityStateWatcherESt10unique_ptrIS2_NS_13DefaultDeleteIS2_EEESt4lessIS3_EE27RebalanceTreeAfterInsertionEPNSA_5EntryERKS3_ + + [D] _ZN9grpc_core3MapIPNS_19SubchannelInterface24ConnectivityStateWatcherESt10unique_ptrIS2_NS_13DefaultDeleteIS2_EEESt4lessIS3_EE5eraseENSA_8iteratorE + + [D] _ZN9grpc_core3MapIlPNS_8channelz8BaseNodeESt4lessIlEE10RotateLeftEPNS6_5EntryE + + [D] _ZN9grpc_core3MapIlPNS_8channelz8BaseNodeESt4lessIlEE11RotateRightEPNS6_5EntryE + + [D] _ZN9grpc_core3MapIlPNS_8channelz8BaseNodeESt4lessIlEE15InsertRecursiveEPNS6_5EntryEOSt4pairIlS3_E + + [D] _ZN9grpc_core3MapIlPNS_8channelz8BaseNodeESt4lessIlEE15RemoveRecursiveEPNS6_5EntryERKl + + [D] _ZN9grpc_core3MapIlPNS_8channelz8BaseNodeESt4lessIlEE26RebalanceTreeAfterDeletionEPNS6_5EntryE + + [D] _ZN9grpc_core3MapIlPNS_8channelz8BaseNodeESt4lessIlEE27RebalanceTreeAfterInsertionEPNS6_5EntryERKl + + [D] _ZN9grpc_core3MapIlPNS_8channelz8BaseNodeESt4lessIlEE5eraseENS6_8iteratorE + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE10RotateLeftEPNS3_5EntryE + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE11RotateRightEPNS3_5EntryE + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE15InsertRecursiveEPNS3_5EntryEOSt4pairIlbE + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE15RemoveRecursiveEPNS3_5EntryERKl + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE26RebalanceTreeAfterDeletionEPNS3_5EntryE + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE27RebalanceTreeAfterInsertionEPNS3_5EntryERKl + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE5eraseENS3_8iteratorE + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE5eraseERKl + + [D] _ZN9grpc_core3MapIlbSt4lessIlEE7emplaceIJSt4pairIlbEEEES5_INS3_8iteratorEbEDpOT_ + + [D] _ZN9grpc_core4Fork10GlobalInitEv + + [D] _ZN9grpc_core4Fork12AllowExecCtxEv + + [D] _ZN9grpc_core4Fork12AwaitThreadsEv + + [D] _ZN9grpc_core4Fork12BlockExecCtxEv + + [D] _ZN9grpc_core4Fork14DecThreadCountEv + + [D] _ZN9grpc_core4Fork14GlobalShutdownEv + + [D] _ZN9grpc_core4Fork14IncThreadCountEv + + [D] _ZN9grpc_core4Fork15DecExecCtxCountEv + + [D] _ZN9grpc_core4Fork15IncExecCtxCountEv + + [D] _ZN9grpc_core4Fork30GetResetChildPollingEngineFuncEv + + [D] _ZN9grpc_core4Fork30SetResetChildPollingEngineFuncEPFvvE + + [D] _ZN9grpc_core4Fork6EnableEb + + [D] _ZN9grpc_core4Fork7EnabledEv + + [D] _ZN9grpc_core5Arena15CreateWithAllocEmm + + [D] _ZN9grpc_core5Arena6CreateEm + + [D] _ZN9grpc_core5Arena7DestroyEv + + [D] _ZN9grpc_core5Arena9AllocZoneEm + + [D] _ZN9grpc_core5ArenaD1Ev + + [D] _ZN9grpc_core5ArenaD2Ev, aliases _ZN9grpc_core5ArenaD1Ev + + [D] _ZN9grpc_core6ThreadC1EPKcPFvPvES3_PbRKNS0_7OptionsE, aliases _ZN9grpc_core6ThreadC2EPKcPFvPvES3_PbRKNS0_7OptionsE + + [D] _ZN9grpc_core6ThreadC2EPKcPFvPvES3_PbRKNS0_7OptionsE + + [D] _ZN9grpc_core8Executor9SchedulerENS_12ExecutorTypeENS_15ExecutorJobTypeE + + [D] _ZN9grpc_core8Executor9SchedulerENS_15ExecutorJobTypeE + + [D] _ZN9grpc_core8Resolver11StartLockedEv + + [D] _ZN9grpc_core8Resolver13ResultHandlerD0Ev + + [D] _ZN9grpc_core8Resolver13ResultHandlerD1Ev + + [D] _ZN9grpc_core8Resolver13ResultHandlerD2Ev, aliases _ZN9grpc_core8Resolver13ResultHandlerD1Ev + + [D] _ZN9grpc_core8Resolver14ShutdownLockedEv + + [D] _ZN9grpc_core8Resolver22ShutdownAndUnrefLockedEPvP10grpc_error + + [D] _ZN9grpc_core8ResolverC1EP13grpc_combinerSt10unique_ptrINS0_13ResultHandlerENS_13DefaultDeleteIS4_EEE + + [D] _ZN9grpc_core8ResolverC2EP13grpc_combinerSt10unique_ptrINS0_13ResultHandlerENS_13DefaultDeleteIS4_EEE, aliases _ZN9grpc_core8ResolverC1EP13grpc_combinerSt10unique_ptrINS0_13ResultHandlerENS_13DefaultDeleteIS4_EEE + + [D] _ZN9grpc_core8channelz10ServerNode19RenderServerSocketsEll + + [D] _ZN9grpc_core8channelz10SocketNodeC1ESt10unique_ptrIcNS_13DefaultDeleteIcEEES5_ + + [D] _ZN9grpc_core8channelz10SocketNodeC2ESt10unique_ptrIcNS_13DefaultDeleteIcEEES5_, aliases _ZN9grpc_core8channelz10SocketNodeC1ESt10unique_ptrIcNS_13DefaultDeleteIcEEES5_ + + [D] _ZN9grpc_core8channelz11ChannelNode17PopulateChildRefsEP9grpc_json + + [D] _ZN9grpc_core8channelz11ChannelNodeC1ESt10unique_ptrIcNS_13DefaultDeleteIcEEEml, aliases _ZN9grpc_core8channelz11ChannelNodeC2ESt10unique_ptrIcNS_13DefaultDeleteIcEEEml + + [D] _ZN9grpc_core8channelz11ChannelNodeC2ESt10unique_ptrIcNS_13DefaultDeleteIcEEEml + + [D] _ZN9grpc_core8channelz14SubchannelNode25PopulateConnectivityStateEP9grpc_json + + [D] _ZN9grpc_core8channelz14SubchannelNodeC1EPNS_10SubchannelEm + + [D] _ZN9grpc_core8channelz14SubchannelNodeC2EPNS_10SubchannelEm, aliases _ZN9grpc_core8channelz14SubchannelNodeC1EPNS_10SubchannelEm + + [D] _ZN9grpc_core8channelz16ChannelzRegistry18InternalGetServersEl + + [D] _ZN9grpc_core8channelz16ChannelzRegistry22InternalGetTopChannelsEl + + [D] _ZN9grpc_core8channelz16ListenSocketNodeC1ESt10unique_ptrIcNS_13DefaultDeleteIcEEE + + [D] _ZN9grpc_core8channelz16ListenSocketNodeC2ESt10unique_ptrIcNS_13DefaultDeleteIcEEE, aliases _ZN9grpc_core8channelz16ListenSocketNodeC1ESt10unique_ptrIcNS_13DefaultDeleteIcEEE + + [D] _ZN9grpc_core8channelz18CallCountingHelper18PopulateCallCountsEP9grpc_json + + [D] _ZN9grpc_core8channelz18CallCountingHelperD1Ev + + [D] _ZN9grpc_core8channelz18CallCountingHelperD2Ev, aliases _ZN9grpc_core8channelz18CallCountingHelperD1Ev + + [D] _ZN9grpc_core8channelz8BaseNode10RenderJsonEv + + [D] _ZN9grpc_core8channelz8BaseNode16RenderJsonStringEv + + [D] _ZN9grpc_core8channelz8BaseNodeC1ENS1_10EntityTypeE + + [D] _ZN9grpc_core8channelz8BaseNodeC2ENS1_10EntityTypeE, aliases _ZN9grpc_core8channelz8BaseNodeC1ENS1_10EntityTypeE + + [D] _ZN9grpc_core8internal24ThreadInternalsInterfaceD0Ev + + [D] _ZN9grpc_core8internal24ThreadInternalsInterfaceD1Ev, aliases _ZN9grpc_core8internal24ThreadInternalsInterfaceD2Ev + + [D] _ZN9grpc_core8internal24ThreadInternalsInterfaceD2Ev + + [D] _ZN9grpc_core8internal32ClientChannelServiceConfigParser17ParseGlobalParamsEPK9grpc_jsonPP10grpc_error + + [D] _ZN9grpc_core8internal32ClientChannelServiceConfigParser20ParsePerMethodParamsEPK9grpc_jsonPP10grpc_error + + [D] _ZNK23grpc_security_connector3cmpEPKS_ + + [D] _ZNK29SpiffeServerSecurityConnector3cmpEPK23grpc_security_connector + + [D] _ZNK30SpiffeChannelSecurityConnector3cmpEPK23grpc_security_connector + + [D] _ZNK9grpc_core13ServerAddress10IsBalancerEv + + [D] _ZNK9grpc_core13ServerAddresseqERKS0_ + + [D] _ZNK9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEE3GetERK10grpc_slice + + [D] _ZNK9grpc_core14SliceHashTableISt10unique_ptrIcNS_13DefaultDeleteIcEEEE3GetERK10grpc_slice + + [D] _ZNK9grpc_core19ConnectedSubchannel4argsEv + + [D] _ZNK9grpc_core19LoadBalancingPolicy4nameEv + + [D] _ZNK9grpc_core28ResolvingLoadBalancingPolicy35ConcatenateAndAddChannelTraceLockedEPNS_13InlinedVectorIPcLm3EEE + + [D] _ZNK9grpc_core8channelz12ChannelTrace10TraceEvent16RenderTraceEventEP9grpc_json + + [D] _ZNSt3_V28__rotateIPSt10unique_ptrIN9grpc_core17HandshakerFactoryENS2_13DefaultDeleteIS3_EEEEET_S8_S8_S8_St26random_access_iterator_tag + + [D] address_sorting_abstract_get_family + + [D] address_sorting_create_source_addr_factory_for_current_platform + + [D] address_sorting_get_source_addr_for_testing + + [D] address_sorting_init + + [D] address_sorting_override_source_addr_factory_for_testing + + [D] address_sorting_rfc_6724_sort + + [D] address_sorting_shutdown + + [D] gpr_asprintf + + [D] gpr_atm_no_barrier_clamped_add + + [D] gpr_convert_clock_type + + [D] gpr_cpu_current_cpu + + [D] gpr_cpu_num_cores + + [D] gpr_cv_broadcast + + [D] gpr_cv_destroy + + [D] gpr_cv_init + + [D] gpr_cv_signal + + [D] gpr_cv_wait + + [D] gpr_event_get + + [D] gpr_event_init + + [D] gpr_event_set + + [D] gpr_event_wait + + [D] gpr_free + + [D] gpr_free_aligned + + [D] gpr_get_allocation_functions + + [D] gpr_inf_future + + [D] gpr_inf_past + + [D] gpr_log + + [D] gpr_log_message + + [D] gpr_log_severity_string + + [D] gpr_log_verbosity_init + + [D] gpr_malloc + + [D] gpr_malloc_aligned + + [D] gpr_mu_destroy + + [D] gpr_mu_init + + [D] gpr_mu_lock + + [D] gpr_mu_trylock + + [D] gpr_mu_unlock + + [D] gpr_now + + [D] gpr_once_init + + [D] gpr_realloc + + [D] gpr_ref + + [D] gpr_ref_init + + [D] gpr_ref_is_unique + + [D] gpr_ref_non_zero + + [D] gpr_refn + + [D] gpr_set_allocation_functions + + [D] gpr_set_log_function + + [D] gpr_set_log_verbosity + + [D] gpr_should_log + + [D] gpr_sleep_until + + [D] gpr_stats_inc + + [D] gpr_stats_init + + [D] gpr_stats_read + + [D] gpr_strdup + + [D] gpr_thd_currentid + + [D] gpr_time_0 + + [D] gpr_time_add + + [D] gpr_time_cmp + + [D] gpr_time_from_hours + + [D] gpr_time_from_micros + + [D] gpr_time_from_millis + + [D] gpr_time_from_minutes + + [D] gpr_time_from_nanos + + [D] gpr_time_from_seconds + + [D] gpr_time_init + + [D] gpr_time_max + + [D] gpr_time_min + + [D] gpr_time_similar + + [D] gpr_time_sub + + [D] gpr_time_to_millis + + [D] gpr_timespec_to_micros + + [D] gpr_unref + + [D] gpr_zalloc + + [D] grpc_tls_spiffe_credentials_create + + [D] grpc_tls_spiffe_server_credentials_create + + [D] pb_close_string_substream + + [D] pb_decode + + [D] pb_decode_delimited + + [D] pb_decode_fixed32 + + [D] pb_decode_fixed64 + + [D] pb_decode_noinit + + [D] pb_decode_svarint + + [D] pb_decode_tag + + [D] pb_decode_varint + + [D] pb_encode + + [D] pb_encode_delimited + + [D] pb_encode_fixed32 + + [D] pb_encode_fixed64 + + [D] pb_encode_string + + [D] pb_encode_submessage + + [D] pb_encode_svarint + + [D] pb_encode_tag + + [D] pb_encode_tag_for_field + + [D] pb_encode_varint + + [D] pb_field_iter_begin + + [D] pb_field_iter_find + + [D] pb_field_iter_next + + [D] pb_get_encoded_size + + [D] pb_istream_from_buffer + + [D] pb_make_string_substream + + [D] pb_ostream_from_buffer + + [D] pb_read + + [D] pb_skip_field + + [D] pb_write + + + +1093 Added function symbols not referenced by debug info: + + + + [A] _Z12grpc_cq_initv + + [A] _Z15grpc_mdelem_ref11grpc_mdelemPKci + + [A] _Z15grpc_stream_refP20grpc_stream_refcountPKc + + [A] _Z16functor_callbackPvP10grpc_error + + [A] _Z16grpc_cq_shutdownv + + [A] _Z17grpc_combiner_refPN9grpc_core8CombinerEPKciS3_ + + [A] _Z17grpc_error_do_refP10grpc_errorPKci + + [A] _Z17grpc_event_stringB5cxx11P10grpc_event + + [A] _Z17grpc_mdelem_unref11grpc_mdelemPKci + + [A] _Z17grpc_stream_unrefP20grpc_stream_refcountPKc + + [A] _Z18grpc_mdelem_createRKN9grpc_core19StaticMetadataSliceERK10grpc_sliceP16grpc_mdelem_data + + [A] _Z19grpc_call_log_batchPKci16gpr_log_severityPK7grpc_opm + + [A] _Z19grpc_combiner_unrefPN9grpc_core8CombinerEPKciS3_ + + [A] _Z19grpc_error_do_unrefP10grpc_errorPKci + + [A] _Z20grpc_cq_internal_refP21grpc_completion_queuePKcS2_i + + [A] _Z20grpc_mdelem_do_unref11grpc_mdelemPKci + + [A] _Z20grpc_sockaddr_to_uriB5cxx11PK21grpc_resolved_address + + [A] _Z20grpc_stream_ref_initP20grpc_stream_refcountiPFvPvP10grpc_errorES1_PKc + + [A] _Z21grpc_mdelem_trace_refPvRK10grpc_sliceS2_lPKci + + [A] _Z21grpc_slice_sub_no_refRKN9grpc_core20UnmanagedMemorySliceEmm + + [A] _Z21grpc_tcp_server_startP15grpc_tcp_serverPKSt6vectorIP12grpc_pollsetSaIS3_EEPFvPvP13grpc_endpointS3_P24grpc_tcp_server_acceptorES8_ + + [A] _Z21grpc_udp_server_startP15grpc_udp_serverPKSt6vectorIP12grpc_pollsetSaIS3_EEPv + + [A] _Z22grpc_call_internal_refP9grpc_callPKc + + [A] _Z22grpc_chttp2_stream_refP18grpc_chttp2_streamPKc + + [A] _Z22grpc_cq_internal_unrefP21grpc_completion_queuePKcS2_i + + [A] _Z22grpc_iomgr_non_pollingv + + [A] _Z22grpc_resolver_xds_initv + + [A] _Z23grpc_lb_policy_cds_initv + + [A] _Z23grpc_lb_policy_eds_initv + + [A] _Z23grpc_lb_policy_lrs_initv + + [A] _Z23grpc_mdelem_from_slicesRKN9grpc_core18ManagedMemorySliceES2_ + + [A] _Z23grpc_mdelem_from_slicesRKN9grpc_core19StaticMetadataSliceERK10grpc_slice + + [A] _Z23grpc_mdelem_from_slicesRKN9grpc_core19StaticMetadataSliceERKNS_18ManagedMemorySliceE + + [A] _Z23grpc_mdelem_from_slicesRKN9grpc_core19StaticMetadataSliceES2_ + + [A] _Z23grpc_mdelem_trace_unrefPvRK10grpc_sliceS2_lPKci + + [A] _Z23grpc_sockaddr_to_stringB5cxx11PK21grpc_resolved_addressb + + [A] _Z23grpc_stats_data_as_jsonB5cxx11PK15grpc_stats_data + + [A] _Z24grpc_call_internal_unrefP9grpc_callPKc + + [A] _Z24grpc_channel_args_stringB5cxx11PK17grpc_channel_args + + [A] _Z24grpc_chttp2_stream_unrefP18grpc_chttp2_streamPKc + + [A] _Z24grpc_get_tsi_tls_version16grpc_tls_version + + [A] _Z24grpc_server_add_listenerP11grpc_serverSt10unique_ptrIN9grpc_core23ServerListenerInterfaceENS2_16OrphanableDeleteEE + + [A] _Z24grpc_server_get_pollsetsP11grpc_server + + [A] _Z24grpc_set_socket_zerocopyi + + [A] _Z24grpc_ssl_check_call_hostN4absl14lts_2020_02_2511string_viewES1_S1_P17grpc_auth_contextPP10grpc_error + + [A] _Z24grpc_ssl_check_peer_nameN4absl14lts_2020_02_2511string_viewEPK8tsi_peer + + [A] _Z24grpc_ssl_cmp_target_nameN4absl14lts_2020_02_2511string_viewES1_S1_S1_ + + [A] _Z24grpc_transport_op_stringB5cxx11P17grpc_transport_op + + [A] _Z25grpc_check_security_level19grpc_security_levelS_ + + [A] _Z25grpc_jwt_claims_from_jsonN9grpc_core4JsonE + + [A] _Z25grpc_set_socket_dualstacki + + [A] _Z25tsi_ssl_peer_matches_namePK8tsi_peerN4absl14lts_2020_02_2511string_viewE + + [A] _Z26alts_tsi_handshaker_createPK29grpc_alts_credentials_optionsPKcS3_bP16grpc_pollset_setPP14tsi_handshakerm + + [A] _Z26custom_tcp_endpoint_createP18grpc_custom_socketP19grpc_resource_quotaPKc + + [A] _Z26grpc_mdelem_on_final_unref24grpc_mdelem_data_storagePvjPKci + + [A] _Z26grpc_metadata_batch_removeP19grpc_metadata_batch34grpc_metadata_batch_callouts_index + + [A] _Z26grpc_resolver_xds_shutdownv + + [A] _Z26grpc_slice_from_cpp_stringNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _Z26grpc_ssl_host_matches_namePK8tsi_peerN4absl14lts_2020_02_2511string_viewE + + [A] _Z26grpc_tcp_client_prepare_fdPK17grpc_channel_argsPK21grpc_resolved_addressPS2_Pi + + [A] _Z27grpc_channel_args_find_boolPK17grpc_channel_argsPKcb + + [A] _Z27grpc_lb_policy_cds_shutdownv + + [A] _Z27grpc_lb_policy_eds_shutdownv + + [A] _Z27grpc_lb_policy_lrs_shutdownv + + [A] _Z27grpc_server_setup_transportP11grpc_serverP14grpc_transportP12grpc_pollsetPK17grpc_channel_argsRKN9grpc_core13RefCountedPtrINS8_8channelz10SocketNodeEEEP18grpc_resource_user + + [A] _Z28grpc_chttp2_reset_ping_clockP21grpc_chttp2_transport + + [A] _Z28grpc_client_idle_filter_initv + + [A] _Z28grpc_lb_policy_priority_initv + + [A] _Z28grpc_metadata_batch_add_tailP19grpc_metadata_batchP18grpc_linked_mdelem11grpc_mdelem34grpc_metadata_batch_callouts_index + + [A] _Z28grpc_slice_from_moved_bufferSt10unique_ptrIcN9grpc_core17DefaultDeleteCharEEm + + [A] _Z28grpc_slice_from_moved_stringSt10unique_ptrIcN9grpc_core17DefaultDeleteCharEE + + [A] _Z28tsi_security_level_to_string18tsi_security_level + + [A] _Z29grpc_channel_args_find_stringPK17grpc_channel_argsPKc + + [A] _Z29grpc_channel_destroy_internalP12grpc_channel + + [A] _Z29grpc_init_static_metadata_ctxv + + [A] _Z29grpc_json_get_string_propertyRKN9grpc_core4JsonEPKcPP10grpc_error + + [A] _Z29grpc_metadata_batch_assert_okP19grpc_metadata_batch + + [A] _Z29grpc_metadata_batch_link_headP19grpc_metadata_batchP18grpc_linked_mdelem34grpc_metadata_batch_callouts_index + + [A] _Z29grpc_metadata_batch_link_tailP19grpc_metadata_batchP18grpc_linked_mdelem34grpc_metadata_batch_callouts_index + + [A] _Z29grpc_security_level_to_string19grpc_security_level + + [A] _Z29grpc_ssl_peer_to_auth_contextPK8tsi_peerPKc + + [A] _Z30grpc_channel_args_find_integerPK17grpc_channel_argsPKc20grpc_integer_options + + [A] _Z30grpc_copy_json_string_propertyRKN9grpc_core4JsonEPKcPPc + + [A] _Z31grpc_chttp2_add_incoming_goawayP21grpc_chttp2_transportjjRK10grpc_slice + + [A] _Z31grpc_chttp2_retry_initiate_pingPvP10grpc_error + + [A] _Z31grpc_lb_policy_xds_routing_initv + + [A] _Z31grpc_security_handshaker_createP14tsi_handshakerP23grpc_security_connectorPK17grpc_channel_args + + [A] _Z31tsi_ssl_get_cert_chain_contentsP13stack_st_X509P17tsi_peer_property + + [A] _Z32grpc_client_idle_filter_shutdownv + + [A] _Z32grpc_destroy_static_metadata_ctxv + + [A] _Z32grpc_lb_policy_priority_shutdownv + + [A] _Z33alts_tsi_handshaker_result_createP23grpc_gcp_HandshakerRespbPP21tsi_handshaker_result + + [A] _Z33grpc_apply_socket_mutator_in_argsiPK17grpc_channel_args + + [A] _Z33grpc_ares_ev_driver_create_lockedPP19grpc_ares_ev_driverP16grpc_pollset_setiSt10shared_ptrIN9grpc_core14WorkSerializerEEP17grpc_ares_request + + [A] _Z33grpc_base64_estimate_encoded_sizemi + + [A] _Z34alts_grpc_handshaker_client_createP19alts_tsi_handshakerP12grpc_channelPKcP16grpc_pollset_setP29grpc_alts_credentials_optionsRK10grpc_slicePFvPvP10grpc_errorEPFv10tsi_resultSC_PKhmP21tsi_handshaker_resultESC_P29alts_handshaker_client_vtablebm + + [A] _Z35alts_tsi_utils_deserialize_responseP16grpc_byte_bufferP9upb_arena + + [A] _Z35grpc_alts_set_rpc_protocol_versionsP29_grpc_gcp_RpcProtocolVersions + + [A] _Z35grpc_auth_json_key_create_from_jsonRKN9grpc_core4JsonE + + [A] _Z35grpc_lb_policy_weighted_target_initv + + [A] _Z35grpc_lb_policy_xds_routing_shutdownv + + [A] _Z36grpc_get_reffed_status_elem_slowpathi + + [A] _Z36grpc_iomgr_mark_non_polling_internalv + + [A] _Z37grpc_cycle_counter_to_millis_round_upd + + [A] _Z37grpc_gcp_rpc_protocol_versions_encodePK28grpc_gcp_RpcProtocolVersionsP9upb_arenaP10grpc_slice + + [A] _Z37grpc_sockaddr_to_uri_unix_if_possibleB5cxx11PK21grpc_resolved_address + + [A] _Z37grpc_transport_stream_op_batch_stringB5cxx11P30grpc_transport_stream_op_batch + + [A] _Z38grpc_chttp2_hptbl_lookup_dynamic_indexPK17grpc_chttp2_hptblj + + [A] _Z38grpc_tsi_security_level_string_to_enumPKc + + [A] _Z39grpc_cares_wrapper_address_sorting_sortPK17grpc_ares_requestPN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core13ServerAddressELm1ESaIS6_EEE + + [A] _Z39grpc_cycle_counter_to_millis_round_downd + + [A] _Z39grpc_lb_policy_weighted_target_shutdownv + + [A] _Z39grpc_tcp_client_create_from_prepared_fdP16grpc_pollset_setP12grpc_closureiPK17grpc_channel_argsPK21grpc_resolved_addresslPP13grpc_endpoint + + [A] _Z39grpc_timer_manager_get_wakeups_testonlyv + + [A] _Z40grpc_auth_refresh_token_create_from_jsonRKN9grpc_core4JsonE + + [A] _Z40grpc_chttp2_add_rst_stream_to_next_writeP21grpc_chttp2_transportjjP28grpc_transport_one_way_stats + + [A] _Z40grpc_deframe_unprocessed_incoming_framesP23grpc_chttp2_data_parserP18grpc_chttp2_streamP17grpc_slice_bufferP10grpc_slicePSt10unique_ptrIN9grpc_core10ByteStreamENS8_16OrphanableDeleteEE + + [A] _Z42grpc_chttp2_hptbl_lookup_ref_dynamic_indexPK17grpc_chttp2_hptblj + + [A] _Z43grpc_client_channel_stop_connectivity_watchP20grpc_channel_elementPN9grpc_core38AsyncConnectivityStateWatcherInterfaceE + + [A] _Z43grpc_service_config_channel_arg_filter_initv + + [A] _Z43grpc_ssl_tsi_client_handshaker_factory_initP25tsi_ssl_pem_key_cert_pairPKcb15tsi_tls_versionS3_P21tsi_ssl_session_cachePP33tsi_ssl_client_handshaker_factory + + [A] _Z43grpc_ssl_tsi_server_handshaker_factory_initP25tsi_ssl_pem_key_cert_pairmPKc40grpc_ssl_client_certificate_request_type15tsi_tls_versionS4_PP33tsi_ssl_server_handshaker_factory + + [A] _Z43tsi_zero_copy_grpc_protector_max_frame_sizeP28tsi_zero_copy_grpc_protectorPm + + [A] _Z44grpc_client_channel_start_connectivity_watchP20grpc_channel_element23grpc_connectivity_stateSt10unique_ptrIN9grpc_core38AsyncConnectivityStateWatcherInterfaceENS3_16OrphanableDeleteEE + + [A] _Z46grpc_gcp_rpc_protocol_versions_assign_from_upbP29_grpc_gcp_RpcProtocolVersionsPK28grpc_gcp_RpcProtocolVersions + + [A] _Z47grpc_gcp_RpcProtocolVersions_assign_from_structP28grpc_gcp_RpcProtocolVersionsP9upb_arenaPK29_grpc_gcp_RpcProtocolVersions + + [A] _Z47grpc_service_config_channel_arg_filter_shutdownv + + [A] _Z48grpc_get_well_known_google_credentials_file_pathB5cxx11v + + [A] _Z48grpc_override_well_known_credentials_path_getterPFNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEvE + + [A] _Z48tsi_ssl_extract_x509_subject_names_from_pem_certPKcP8tsi_peer + + [A] _Z53grpc_channel_args_get_client_channel_creation_mutatorv + + [A] _Z53grpc_channel_args_set_client_channel_creation_mutatorPFP17grpc_channel_argsPKcS0_23grpc_channel_stack_typeE + + [A] _Z53grpc_get_well_known_google_credentials_file_path_implB5cxx11v + + [A] _Z59grpc_channel_args_get_channel_default_compression_algorithmPK17grpc_channel_args + + [A] _Z59grpc_channel_args_set_channel_default_compression_algorithmP17grpc_channel_args26grpc_compression_algorithm + + [A] _Z74grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_lockedP17grpc_ares_requestPKcS2_S2_P16grpc_pollset_setiSt10shared_ptrIN9grpc_core14WorkSerializerEE + + [A] _Z8tcp_sendiPK6msghdri + + [A] _ZN14TlsCredentials25create_security_connectorEN9grpc_core13RefCountedPtrI21grpc_call_credentialsEEPKcPK17grpc_channel_argsPPS6_ + + [A] _ZN14TlsCredentialsC1EN9grpc_core13RefCountedPtrI28grpc_tls_credentials_optionsEE + + [A] _ZN14TlsCredentialsC2EN9grpc_core13RefCountedPtrI28grpc_tls_credentials_optionsEE, aliases _ZN14TlsCredentialsC1EN9grpc_core13RefCountedPtrI28grpc_tls_credentials_optionsEE + + [A] _ZN14TlsCredentialsD0Ev + + [A] _ZN14TlsCredentialsD1Ev, aliases _ZN14TlsCredentialsD2Ev + + [A] _ZN14TlsCredentialsD2Ev + + [A] _ZN15GrpcUdpListener14StartListeningEPKSt6vectorIP12grpc_pollsetSaIS2_EEP21GrpcUdpHandlerFactory + + [A] _ZN19grpc_slice_refcount5UnrefEv + + [A] _ZN20TlsServerCredentials25create_security_connectorEv + + [A] _ZN20TlsServerCredentialsC1EN9grpc_core13RefCountedPtrI28grpc_tls_credentials_optionsEE + + [A] _ZN20TlsServerCredentialsC2EN9grpc_core13RefCountedPtrI28grpc_tls_credentials_optionsEE, aliases _ZN20TlsServerCredentialsC1EN9grpc_core13RefCountedPtrI28grpc_tls_credentials_optionsEE + + [A] _ZN20TlsServerCredentialsD0Ev + + [A] _ZN20TlsServerCredentialsD1Ev + + [A] _ZN20TlsServerCredentialsD2Ev, aliases _ZN20TlsServerCredentialsD1Ev + + [A] _ZN20grpc_ssl_credentials19set_max_tls_versionE16grpc_tls_version + + [A] _ZN20grpc_ssl_credentials19set_min_tls_versionE16grpc_tls_version + + [A] _ZN22grpc_tls_error_detailsD0Ev + + [A] _ZN22grpc_tls_error_detailsD1Ev + + [A] _ZN22grpc_tls_error_detailsD2Ev, aliases _ZN22grpc_tls_error_detailsD1Ev + + [A] _ZN23grpc_plugin_credentials12debug_stringB5cxx11Ev + + [A] _ZN23grpc_plugin_credentialsC1E32grpc_metadata_credentials_plugin19grpc_security_level + + [A] _ZN23grpc_plugin_credentialsC2E32grpc_metadata_credentials_plugin19grpc_security_level, aliases _ZN23grpc_plugin_credentialsC1E32grpc_metadata_credentials_plugin19grpc_security_level + + [A] _ZN27grpc_google_iam_credentials12debug_stringB5cxx11Ev + + [A] _ZN27grpc_ssl_server_credentials19set_max_tls_versionE16grpc_tls_version + + [A] _ZN27grpc_ssl_server_credentials19set_min_tls_versionE16grpc_tls_version + + [A] _ZN29grpc_access_token_credentials12debug_stringB5cxx11Ev + + [A] _ZN29grpc_md_only_test_credentials12debug_stringB5cxx11Ev + + [A] _ZN29grpc_tls_key_materials_config17set_key_materialsEPKcPPK26grpc_ssl_pem_key_cert_pairm + + [A] _ZN29grpc_tls_key_materials_config17set_key_materialsEPKcRKN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core14PemKeyCertPairELm1ESaIS6_EEE + + [A] _ZN31grpc_composite_call_credentials12debug_stringB5cxx11Ev + + [A] _ZN37grpc_google_refresh_token_credentials12debug_stringB5cxx11Ev + + [A] _ZN37grpc_oauth2_token_fetcher_credentials12debug_stringB5cxx11Ev + + [A] _ZN43grpc_httpcli_ssl_channel_security_connector15add_handshakersEPK17grpc_channel_argsP16grpc_pollset_setPN9grpc_core16HandshakeManagerE + + [A] _ZN43grpc_httpcli_ssl_channel_security_connector15check_call_hostEN4absl14lts_2020_02_2511string_viewEP17grpc_auth_contextP12grpc_closurePP10grpc_error + + [A] _ZN43grpc_service_account_jwt_access_credentials12debug_stringB5cxx11Ev + + [A] _ZN4absl14lts_2020_02_2511make_uniqueIN3re23RE2EJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEENS0_15memory_internal16MakeUniqueResultIT_E6scalarEDpOT0_ + + [A] _ZN4absl14lts_2020_02_2511make_uniqueIN9grpc_core12XdsBootstrap4NodeEJEEENS0_15memory_internal16MakeUniqueResultIT_E6scalarEDpOT0_ + + [A] _ZN4absl14lts_2020_02_2511make_uniqueIN9grpc_core19LoadBalancingPolicy11QueuePickerEJNS2_13RefCountedPtrIS3_EEEEENS0_15memory_internal16MakeUniqueResultIT_E6scalarEDpOT0_ + + [A] _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core12XdsBootstrap12ChannelCredsELm1ESaIS4_EEC1EOS6_, aliases _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core12XdsBootstrap12ChannelCredsELm1ESaIS4_EEC2EOS6_ + + [A] _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core12XdsBootstrap12ChannelCredsELm1ESaIS4_EEC2EOS6_ + + [A] _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core13ServerAddressELm1ESaIS3_EEC1EOS5_ + + [A] _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core13ServerAddressELm1ESaIS3_EEC2EOS5_, aliases _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core13ServerAddressELm1ESaIS3_EEC1EOS5_ + + [A] _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS5_EEC1EOS7_, aliases _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS5_EEC2EOS7_ + + [A] _ZN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS5_EEC2EOS7_ + + [A] _ZN4absl14lts_2020_02_2516strings_internal13JoinAlgorithmIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorISA_SaISA_EEEEvEESA_T_SH_NS0_11string_viewENS1_11NoFormatterE + + [A] _ZN4absl14lts_2020_02_2516strings_internal13JoinAlgorithmISt23_Rb_tree_const_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEvEES9_T_SB_NS0_11string_viewENS1_11NoFormatterE + + [A] _ZN4absl14lts_2020_02_2516strings_internal9JoinRangeINS0_13InlinedVectorINS0_11string_viewELm1ESaIS4_EEEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_S4_ + + [A] _ZN4absl14lts_2020_02_2517optional_internal13optional_dataIN9grpc_core6XdsApi9RdsUpdateELb0EEC1EOS6_, aliases _ZN4absl14lts_2020_02_2517optional_internal13optional_dataIN9grpc_core6XdsApi9RdsUpdateELb0EEC2EOS6_ + + [A] _ZN4absl14lts_2020_02_2517optional_internal13optional_dataIN9grpc_core6XdsApi9RdsUpdateELb0EEC2EOS6_ + + [A] _ZN4absl14lts_2020_02_2517optional_internal13optional_dataINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EEC1EOS9_ + + [A] _ZN4absl14lts_2020_02_2517optional_internal13optional_dataINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EEC2EOS9_, aliases _ZN4absl14lts_2020_02_2517optional_internal13optional_dataINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EEC1EOS9_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI15GrpcUdpListenerLm16ESaIS3_EE11EmplaceBackIJRP15grpc_udp_serverRiRPK21grpc_resolved_addressEEERS3_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm1ESaIS3_EE11EmplaceBackIJS3_EEERS3_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm2ESaIS3_EE11EmplaceBackIJS3_EEERS3_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm2ESaIS3_EED1Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm2ESaIS3_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm2ESaIS3_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm3ESaIS3_EE11EmplaceBackIJRS3_EEES7_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm3ESaIS3_EE11EmplaceBackIJS3_EEERS3_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm3ESaIS3_EED1Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm3ESaIS3_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageI8grpc_argLm3ESaIS3_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core12XdsBootstrap12ChannelCredsELm1ESaIS5_EE11EmplaceBackIJS5_EEERS5_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core12XdsBootstrap9XdsServerELm1ESaIS5_EE11EmplaceBackIJEEERS5_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13RefCountedPtrI21grpc_call_credentialsEELm2ESaIS6_EE11EmplaceBackIJS6_EEERS6_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13RefCountedPtrI21grpc_call_credentialsEELm2ESaIS6_EE7ReserveEm + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13RefCountedPtrINS3_10HandshakerEEELm2ESaIS6_EE11EmplaceBackIJS6_EEERS6_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13RefCountedPtrINS3_19SubchannelInterfaceEEELm10ESaIS6_EE11EmplaceBackIJS6_EEERS6_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13RefCountedPtrINS3_8channelz8BaseNodeEEELm10ESaIS7_EE11EmplaceBackIJRPS6_EEERS7_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13RefCountedPtrINS3_8channelz8BaseNodeEEELm10ESaIS7_EED1Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13RefCountedPtrINS3_8channelz8BaseNodeEEELm10ESaIS7_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13RefCountedPtrINS3_8channelz8BaseNodeEEELm10ESaIS7_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EE10InitializeINS1_20IteratorValueAdapterIS5_PKS4_EEEEvT_m + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EE11EmplaceBackIJPA128_cRjDnEEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EE11EmplaceBackIJR21grpc_resolved_addressDnEEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EE11EmplaceBackIJRK21grpc_resolved_addressRP17grpc_channel_argsEEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EE11EmplaceBackIJRS4_EEES8_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EE6AssignINS1_20IteratorValueAdapterIS5_PKS4_EEEEvT_m + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EE6AssignINS1_20IteratorValueAdapterIS5_St13move_iteratorIPS4_EEEEEvT_m + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EED1Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EED2Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core13ServerAddressELm1ESaIS4_EED1Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core14PemKeyCertPairELm1ESaIS4_EE11EmplaceBackIJS4_EEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core14PemKeyCertPairELm1ESaIS4_EE6AssignINS1_20IteratorValueAdapterIS5_St13move_iteratorIPS4_EEEEEvT_m + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core14PemKeyCertPairELm1ESaIS4_EED1Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core14PemKeyCertPairELm1ESaIS4_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core14PemKeyCertPairELm1ESaIS4_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core17GrpcLbClientStats14DropTokenCountELm10ESaIS5_EE11EmplaceBackIJSt10unique_ptrIcNS3_17DefaultDeleteCharEEiEEERS5_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core23CallCombinerClosureList19CallCombinerClosureELm6ESaIS5_EE11EmplaceBackIJRP12grpc_closureRP10grpc_errorRPKcEEERS5_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core23CallCombinerClosureList19CallCombinerClosureELm6ESaIS5_EED1Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core23CallCombinerClosureList19CallCombinerClosureELm6ESaIS5_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core23CallCombinerClosureList19CallCombinerClosureELm6ESaIS5_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core6XdsApi10DropConfig12DropCategoryELm2ESaIS6_EE11EmplaceBackIJS6_EEERS6_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS6_EE6AssignINS1_20IteratorValueAdapterIS7_St13move_iteratorIPS6_EEEEEvT_m + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS6_EE6ResizeINS1_19DefaultValueAdapterIS7_EEEEvT_m + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS6_EED1Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS6_EED2Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core6XdsApi18PriorityListUpdate11LocalityMapELm2ESaIS6_EED1Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core8channelz18CallCountingHelper17AtomicCounterDataELm1ESaIS6_EE11EmplaceBackIJEEERS6_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core8channelz18CallCountingHelper17AtomicCounterDataELm1ESaIS6_EED1Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core8channelz18CallCountingHelper17AtomicCounterDataELm1ESaIS6_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core8channelz18CallCountingHelper17AtomicCounterDataELm1ESaIS6_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageINS0_11string_viewELm1ESaIS3_EE11EmplaceBackIJRKS3_EEERS3_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIP10grpc_errorLm3ESaIS4_EE11EmplaceBackIJS4_EEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIP10grpc_errorLm4ESaIS4_EE11EmplaceBackIJS4_EEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIPKcLm1ESaIS4_EE11EmplaceBackIJRA25_S3_EEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIPKcLm1ESaIS4_EE11EmplaceBackIJS4_EEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIPKcLm3ESaIS4_EE11EmplaceBackIJS4_EEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIPN9grpc_core15ByteStreamCacheELm3ESaIS5_EE11EmplaceBackIJRKS5_EEERS5_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core15ResolverFactoryESt14default_deleteIS5_EELm10ESaIS8_EE11EmplaceBackIJS8_EEERS8_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core17HandshakerFactoryESt14default_deleteIS5_EELm2ESaIS8_EE11EmplaceBackIJS8_EEERS8_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS6_EELm4ESaIS9_EE11EmplaceBackIJS9_EEERS9_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS6_EELm4ESaIS9_EE6AssignINS1_20IteratorValueAdapterISA_St13move_iteratorIPS9_EEEEEvT_m + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS6_EELm4ESaIS9_EED1Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS6_EELm4ESaIS9_EED2Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS6_EELm4ESaIS9_EED1Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core19ServiceConfigParser6ParserESt14default_deleteIS6_EELm4ESaIS9_EE11EmplaceBackIJS9_EEERS9_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrIN9grpc_core26LoadBalancingPolicyFactoryESt14default_deleteIS5_EELm10ESaIS8_EE11EmplaceBackIJS8_EEERS8_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageISt10unique_ptrINS0_13InlinedVectorIS3_IN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS7_EELm4ESaISA_EEES8_ISC_EELm32ESaISE_EE11EmplaceBackIJSE_EEERSE_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIiLm1ESaIiEE11EmplaceBackIJRKiEEERiDpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIiLm1ESaIiEED1Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIiLm1ESaIiEED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIiLm1ESaIiEED2Ev + + [A] _ZN4absl14lts_2020_02_25eqIN9grpc_core6XdsApi9RdsUpdateES4_EEDTcl19convertible_to_booleqdefp_defp0_EERKNS0_8optionalIT_EERKNS6_IT0_EE + + [A] _ZN4grpc12experimental17LibuvEventManager10ShouldStopEv + + [A] _ZN4grpc12experimental17LibuvEventManager11ShutdownRefEv + + [A] _ZN4grpc12experimental17LibuvEventManager13RunWorkerLoopEv + + [A] _ZN4grpc12experimental17LibuvEventManager13ShutdownUnrefEv + + [A] _ZN4grpc12experimental17LibuvEventManager7OptionsC1Ei + + [A] _ZN4grpc12experimental17LibuvEventManager7OptionsC1Ev + + [A] _ZN4grpc12experimental17LibuvEventManager7OptionsC2Ei, aliases _ZN4grpc12experimental17LibuvEventManager7OptionsC1Ei + + [A] _ZN4grpc12experimental17LibuvEventManager7OptionsC2Ev, aliases _ZN4grpc12experimental17LibuvEventManager7OptionsC1Ev + + [A] _ZN4grpc12experimental17LibuvEventManager8ShutdownEv + + [A] _ZN4grpc12experimental17LibuvEventManagerC1ERKNS1_7OptionsE + + [A] _ZN4grpc12experimental17LibuvEventManagerC2ERKNS1_7OptionsE, aliases _ZN4grpc12experimental17LibuvEventManagerC1ERKNS1_7OptionsE + + [A] _ZN4grpc12experimental17LibuvEventManagerD0Ev + + [A] _ZN4grpc12experimental17LibuvEventManagerD1Ev + + [A] _ZN4grpc12experimental17LibuvEventManagerD2Ev, aliases _ZN4grpc12experimental17LibuvEventManagerD1Ev + + [A] _ZN9__gnu_cxx12__to_xstringINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcEET_PFiPT0_mPKS8_St9__va_listEmSB_z + + [A] _ZN9grpc_core10RefCountedI17grpc_auth_contextNS_22NonPolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedI21grpc_call_credentialsNS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedI23grpc_security_connectorNS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedI24grpc_channel_credentialsNS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedI28grpc_tls_credentials_optionsNS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedI29grpc_tls_key_materials_configNS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedI33grpc_tls_credential_reload_configNS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedI42grpc_tls_server_authorization_check_configNS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedIN3tsi18SslSessionLRUCacheENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_10HandshakerENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_10Subchannel33ConnectivityStateWatcherInterfaceENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_13ServiceConfigENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_14ConfigSelectorENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_14SliceHashTableISt10unique_ptrIcNS_17DefaultDeleteCharEEEENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_15XdsLocalityNameENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_16HandshakeManagerENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_17GrpcLbClientStatsENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_19ConnectedSubchannelENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_19LoadBalancingPolicy6ConfigENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_19SubchannelInterfaceENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_19XdsClusterDropStatsENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_23SubchannelPoolInterfaceENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_23XdsClusterLocalityStatsENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_29FakeResolverResponseGeneratorENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_6XdsApi10DropConfigENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_8channelz8BaseNodeENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10RefCountedINS_8internal23ServerRetryThrottleDataENS_19PolymorphicRefCountEE5UnrefEv + + [A] _ZN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcher25OnConnectivityStateChangeE23grpc_connectivity_state + + [A] _ZN9grpc_core10Subchannel16HealthWatcherMap16AddWatcherLockedEPS0_23grpc_connectivity_stateSt10unique_ptrIcNS_17DefaultDeleteCharEENS_13RefCountedPtrINS0_33ConnectivityStateWatcherInterfaceEEE + + [A] _ZN9grpc_core10Subchannel16HealthWatcherMap19RemoveWatcherLockedEPKcPNS0_33ConnectivityStateWatcherInterfaceE + + [A] _ZN9grpc_core10Subchannel22WatchConnectivityStateE23grpc_connectivity_stateSt10unique_ptrIcNS_17DefaultDeleteCharEENS_13RefCountedPtrINS0_33ConnectivityStateWatcherInterfaceEEE + + [A] _ZN9grpc_core10Subchannel28CancelConnectivityStateWatchEPKcPNS0_33ConnectivityStateWatcherInterfaceE + + [A] _ZN9grpc_core10Subchannel28ConnectivityStateWatcherList16AddWatcherLockedENS_13RefCountedPtrINS0_33ConnectivityStateWatcherInterfaceEEE + + [A] _ZN9grpc_core10Subchannel28ConnectivityStateWatcherList19RemoveWatcherLockedEPNS0_33ConnectivityStateWatcherInterfaceE + + [A] _ZN9grpc_core10Subchannel28ConnectivityStateWatcherListD1Ev + + [A] _ZN9grpc_core10Subchannel28ConnectivityStateWatcherListD2Ev, aliases _ZN9grpc_core10Subchannel28ConnectivityStateWatcherListD1Ev + + [A] _ZN9grpc_core10Subchannel31ConnectedSubchannelStateWatcher25OnConnectivityStateChangeE23grpc_connectivity_state + + [A] _ZN9grpc_core10Subchannel31ConnectedSubchannelStateWatcherD0Ev + + [A] _ZN9grpc_core10Subchannel31ConnectedSubchannelStateWatcherD1Ev + + [A] _ZN9grpc_core10Subchannel31ConnectedSubchannelStateWatcherD2Ev, aliases _ZN9grpc_core10Subchannel31ConnectedSubchannelStateWatcherD1Ev + + [A] _ZN9grpc_core10Subchannel33ConnectivityStateWatcherInterface26PopConnectivityStateChangeEv + + [A] _ZN9grpc_core10Subchannel33ConnectivityStateWatcherInterface27PushConnectivityStateChangeENS1_23ConnectivityStateChangeE + + [A] _ZN9grpc_core10Subchannel3RefEPKciS2_ + + [A] _ZN9grpc_core10Subchannel5UnrefEPKciS2_ + + [A] _ZN9grpc_core10Subchannel6CreateESt10unique_ptrINS_19SubchannelConnectorENS_16OrphanableDeleteEEPK17grpc_channel_args + + [A] _ZN9grpc_core10Subchannel7WeakRefEPKciS2_ + + [A] _ZN9grpc_core10Subchannel9RefMutateEliPKciS2_S2_ + + [A] _ZN9grpc_core10Subchannel9WeakUnrefEPKciS2_ + + [A] _ZN9grpc_core10SubchannelC1EPNS_13SubchannelKeyESt10unique_ptrINS_19SubchannelConnectorENS_16OrphanableDeleteEEPK17grpc_channel_args + + [A] _ZN9grpc_core10SubchannelC2EPNS_13SubchannelKeyESt10unique_ptrINS_19SubchannelConnectorENS_16OrphanableDeleteEEPK17grpc_channel_args, aliases _ZN9grpc_core10SubchannelC1EPNS_13SubchannelKeyESt10unique_ptrINS_19SubchannelConnectorENS_16OrphanableDeleteEEPK17grpc_channel_args + + [A] _ZN9grpc_core10ThreadPool16DefaultStackSizeEv + + [A] _ZN9grpc_core10ThreadPool24AssertHasNotBeenShutDownEv + + [A] _ZN9grpc_core10ThreadPool27SharedThreadPoolConstructorEv + + [A] _ZN9grpc_core10ThreadPool3AddEP42grpc_experimental_completion_queue_functor + + [A] _ZN9grpc_core10ThreadPoolC1Ei + + [A] _ZN9grpc_core10ThreadPoolC1EiPKc, aliases _ZN9grpc_core10ThreadPoolC2EiPKc + + [A] _ZN9grpc_core10ThreadPoolC1EiPKcRKNS_6Thread7OptionsE, aliases _ZN9grpc_core10ThreadPoolC2EiPKcRKNS_6Thread7OptionsE + + [A] _ZN9grpc_core10ThreadPoolC2Ei, aliases _ZN9grpc_core10ThreadPoolC1Ei + + [A] _ZN9grpc_core10ThreadPoolC2EiPKc + + [A] _ZN9grpc_core10ThreadPoolC2EiPKcRKNS_6Thread7OptionsE + + [A] _ZN9grpc_core10ThreadPoolD0Ev + + [A] _ZN9grpc_core10ThreadPoolD1Ev, aliases _ZN9grpc_core10ThreadPoolD2Ev + + [A] _ZN9grpc_core10ThreadPoolD2Ev + + [A] _ZN9grpc_core12CallCombiner4StopEPKciS2_ + + [A] _ZN9grpc_core12CallCombiner5StartEP12grpc_closureP10grpc_errorPKciS6_ + + [A] _ZN9grpc_core12FakeResolver24ReturnReresolutionResultEv + + [A] _ZN9grpc_core12ResolverArgsD1Ev + + [A] _ZN9grpc_core12ResolverArgsD2Ev, aliases _ZN9grpc_core12ResolverArgsD1Ev + + [A] _ZN9grpc_core12XdsBootstrap12ReadFromFileEPNS_9XdsClientEPNS_9TraceFlagEPP10grpc_error + + [A] _ZN9grpc_core12XdsBootstrap13ParseLocalityEPNS_4JsonE + + [A] _ZN9grpc_core12XdsBootstrap14ParseXdsServerEPNS_4JsonEm + + [A] _ZN9grpc_core12XdsBootstrap17ParseChannelCredsEPNS_4JsonEmPNS0_9XdsServerE + + [A] _ZN9grpc_core12XdsBootstrap18ParseXdsServerListEPNS_4JsonE + + [A] _ZN9grpc_core12XdsBootstrap22ParseChannelCredsArrayEPNS_4JsonEPNS0_9XdsServerE + + [A] _ZN9grpc_core12XdsBootstrap9ParseNodeEPNS_4JsonE + + [A] _ZN9grpc_core12XdsBootstrapC1ENS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core12XdsBootstrapC2ENS_4JsonEPP10grpc_error, aliases _ZN9grpc_core12XdsBootstrapC1ENS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core13InternedSliceC1EPNS_21InternedSliceRefcountE + + [A] _ZN9grpc_core13InternedSliceC2EPNS_21InternedSliceRefcountE, aliases _ZN9grpc_core13InternedSliceC1EPNS_21InternedSliceRefcountE + + [A] _ZN9grpc_core13ServiceConfig19ParseJsonMethodNameB5cxx11ERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core13ServiceConfig20ParsePerMethodParamsEv + + [A] _ZN9grpc_core13ServiceConfig21ParseJsonMethodConfigERKNS_4JsonE + + [A] _ZN9grpc_core13ServiceConfig6CreateEN4absl14lts_2020_02_2511string_viewEPP10grpc_error + + [A] _ZN9grpc_core13ServiceConfigC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4JsonEPP10grpc_error, aliases _ZN9grpc_core13ServiceConfigC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core13ServiceConfigC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core14ConfigSelector10CallConfigD1Ev, aliases _ZN9grpc_core14ConfigSelector10CallConfigD2Ev + + [A] _ZN9grpc_core14ConfigSelector10CallConfigD2Ev + + [A] _ZN9grpc_core14ConfigSelector18GetFromChannelArgsERK17grpc_channel_args + + [A] _ZN9grpc_core14RegisteredCallC1EOS0_, aliases _ZN9grpc_core14RegisteredCallC2EOS0_ + + [A] _ZN9grpc_core14RegisteredCallC1EPKcS2_, aliases _ZN9grpc_core14RegisteredCallC2EPKcS2_ + + [A] _ZN9grpc_core14RegisteredCallC1ERKS0_ + + [A] _ZN9grpc_core14RegisteredCallC2EOS0_ + + [A] _ZN9grpc_core14RegisteredCallC2EPKcS2_ + + [A] _ZN9grpc_core14RegisteredCallC2ERKS0_, aliases _ZN9grpc_core14RegisteredCallC1ERKS0_ + + [A] _ZN9grpc_core14RegisteredCallD1Ev + + [A] _ZN9grpc_core14RegisteredCallD2Ev, aliases _ZN9grpc_core14RegisteredCallD1Ev + + [A] _ZN9grpc_core14SliceHashTableISt10unique_ptrIcNS_17DefaultDeleteCharEEE15DefaultValueCmpERKS3_S6_ + + [A] _ZN9grpc_core14SliceHashTableISt10unique_ptrIcNS_17DefaultDeleteCharEEE3AddERK10grpc_sliceRS3_ + + [A] _ZN9grpc_core14SliceHashTableISt10unique_ptrIcNS_17DefaultDeleteCharEEED0Ev + + [A] _ZN9grpc_core14SliceHashTableISt10unique_ptrIcNS_17DefaultDeleteCharEEED1Ev + + [A] _ZN9grpc_core14SliceHashTableISt10unique_ptrIcNS_17DefaultDeleteCharEEED2Ev, aliases _ZN9grpc_core14SliceHashTableISt10unique_ptrIcNS_17DefaultDeleteCharEEED1Ev + + [A] _ZN9grpc_core14SubchannelCall6CreateENS0_4ArgsEPP10grpc_error + + [A] _ZN9grpc_core14SubchannelCallC1ENS0_4ArgsEPP10grpc_error + + [A] _ZN9grpc_core14SubchannelCallC2ENS0_4ArgsEPP10grpc_error, aliases _ZN9grpc_core14SubchannelCallC1ENS0_4ArgsEPP10grpc_error + + [A] _ZN9grpc_core14WorkSerializer18WorkSerializerImpl10DrainQueueEv + + [A] _ZN9grpc_core14WorkSerializer18WorkSerializerImpl3RunESt8functionIFvvEERKNS_13DebugLocationE + + [A] _ZN9grpc_core14WorkSerializer18WorkSerializerImpl6OrphanEv + + [A] _ZN9grpc_core14WorkSerializer18WorkSerializerImplD0Ev + + [A] _ZN9grpc_core14WorkSerializer18WorkSerializerImplD1Ev + + [A] _ZN9grpc_core14WorkSerializer18WorkSerializerImplD2Ev, aliases _ZN9grpc_core14WorkSerializer18WorkSerializerImplD1Ev + + [A] _ZN9grpc_core14WorkSerializer3RunESt8functionIFvvEERKNS_13DebugLocationE + + [A] _ZN9grpc_core14WorkSerializerC1Ev, aliases _ZN9grpc_core14WorkSerializerC2Ev + + [A] _ZN9grpc_core14WorkSerializerC2Ev + + [A] _ZN9grpc_core14WorkSerializerD1Ev + + [A] _ZN9grpc_core14WorkSerializerD2Ev, aliases _ZN9grpc_core14WorkSerializerD1Ev + + [A] _ZN9grpc_core15ByteStreamCacheC1ESt10unique_ptrINS_10ByteStreamENS_16OrphanableDeleteEE + + [A] _ZN9grpc_core15ByteStreamCacheC2ESt10unique_ptrINS_10ByteStreamENS_16OrphanableDeleteEE, aliases _ZN9grpc_core15ByteStreamCacheC1ESt10unique_ptrINS_10ByteStreamENS_16OrphanableDeleteEE + + [A] _ZN9grpc_core15Chttp2Connector15OnHandshakeDoneEPvP10grpc_error + + [A] _ZN9grpc_core15Chttp2Connector20StartHandshakeLockedEv + + [A] _ZN9grpc_core15Chttp2Connector7ConnectERKNS_19SubchannelConnector4ArgsEPNS1_6ResultEP12grpc_closure + + [A] _ZN9grpc_core15Chttp2Connector8ShutdownEP10grpc_error + + [A] _ZN9grpc_core15Chttp2Connector9ConnectedEPvP10grpc_error + + [A] _ZN9grpc_core15Chttp2ConnectorC1Ev + + [A] _ZN9grpc_core15Chttp2ConnectorC2Ev, aliases _ZN9grpc_core15Chttp2ConnectorC1Ev + + [A] _ZN9grpc_core15Chttp2ConnectorD0Ev + + [A] _ZN9grpc_core15Chttp2ConnectorD1Ev, aliases _ZN9grpc_core15Chttp2ConnectorD2Ev + + [A] _ZN9grpc_core15Chttp2ConnectorD2Ev + + [A] _ZN9grpc_core15InfLenFIFOQueue10PushWaiterEPNS0_6WaiterE + + [A] _ZN9grpc_core15InfLenFIFOQueue12RemoveWaiterEPNS0_6WaiterE + + [A] _ZN9grpc_core15InfLenFIFOQueue13AllocateNodesEi + + [A] _ZN9grpc_core15InfLenFIFOQueue3GetEP12gpr_timespec + + [A] _ZN9grpc_core15InfLenFIFOQueue3PutEPv + + [A] _ZN9grpc_core15InfLenFIFOQueue9TopWaiterEv + + [A] _ZN9grpc_core15InfLenFIFOQueueC1Ev + + [A] _ZN9grpc_core15InfLenFIFOQueueC2Ev, aliases _ZN9grpc_core15InfLenFIFOQueueC1Ev + + [A] _ZN9grpc_core15InfLenFIFOQueueD0Ev + + [A] _ZN9grpc_core15InfLenFIFOQueueD1Ev, aliases _ZN9grpc_core15InfLenFIFOQueueD2Ev + + [A] _ZN9grpc_core15InfLenFIFOQueueD2Ev + + [A] _ZN9grpc_core15XdsLocalityNameD0Ev + + [A] _ZN9grpc_core15XdsLocalityNameD1Ev, aliases _ZN9grpc_core15XdsLocalityNameD2Ev + + [A] _ZN9grpc_core15XdsLocalityNameD2Ev + + [A] _ZN9grpc_core16CreateXdsChannelERKNS_12XdsBootstrapERK17grpc_channel_argsPP10grpc_error + + [A] _ZN9grpc_core16InternedMetadataC1ERK10grpc_sliceS3_jPS0_PKNS0_8NoRefKeyE, aliases _ZN9grpc_core16InternedMetadataC2ERK10grpc_sliceS3_jPS0_PKNS0_8NoRefKeyE + + [A] _ZN9grpc_core16InternedMetadataC2ERK10grpc_sliceS3_jPS0_PKNS0_8NoRefKeyE + + [A] _ZN9grpc_core16RefcountedMdBase12TraceAtStartEPKc + + [A] _ZN9grpc_core16ResolverRegistry13IsValidTargetEPKc + + [A] _ZN9grpc_core16ResolverRegistry14CreateResolverEPKcPK17grpc_channel_argsP16grpc_pollset_setSt10shared_ptrINS_14WorkSerializerEESt10unique_ptrINS_8Resolver13ResultHandlerESt14default_deleteISD_EE + + [A] _ZN9grpc_core16ResolverRegistry7Builder23RegisterResolverFactoryESt10unique_ptrINS_15ResolverFactoryESt14default_deleteIS3_EE + + [A] _ZN9grpc_core16ThreadPoolWorker3RunEv + + [A] _ZN9grpc_core16TlsCheckHostNameEPKcPK8tsi_peer + + [A] _ZN9grpc_core17AllocatedMetadataC1ERK10grpc_sliceS3_PKNS0_8NoRefKeyE + + [A] _ZN9grpc_core17AllocatedMetadataC1ERKNS_18ManagedMemorySliceERKNS_20UnmanagedMemorySliceE + + [A] _ZN9grpc_core17AllocatedMetadataC1ERKNS_22ExternallyManagedSliceERKNS_20UnmanagedMemorySliceE + + [A] _ZN9grpc_core17AllocatedMetadataC2ERK10grpc_sliceS3_PKNS0_8NoRefKeyE, aliases _ZN9grpc_core17AllocatedMetadataC1ERK10grpc_sliceS3_PKNS0_8NoRefKeyE + + [A] _ZN9grpc_core17AllocatedMetadataC2ERKNS_18ManagedMemorySliceERKNS_20UnmanagedMemorySliceE, aliases _ZN9grpc_core17AllocatedMetadataC1ERKNS_18ManagedMemorySliceERKNS_20UnmanagedMemorySliceE + + [A] _ZN9grpc_core17AllocatedMetadataC2ERKNS_22ExternallyManagedSliceERKNS_20UnmanagedMemorySliceE, aliases _ZN9grpc_core17AllocatedMetadataC1ERKNS_22ExternallyManagedSliceERKNS_20UnmanagedMemorySliceE + + [A] _ZN9grpc_core17GrpcLbClientStats3GetEPlS1_S1_S1_PSt10unique_ptrIN4absl14lts_2020_02_2513InlinedVectorINS0_14DropTokenCountELm10ESaIS6_EEESt14default_deleteIS8_EE + + [A] _ZN9grpc_core17HealthCheckClient15SetHealthStatusE23grpc_connectivity_statePKc + + [A] _ZN9grpc_core17HealthCheckClient21SetHealthStatusLockedE23grpc_connectivity_statePKc + + [A] _ZN9grpc_core17HealthCheckClient21StartRetryTimerLockedEv + + [A] _ZN9grpc_core17HealthCheckClient9CallState15CallEndedLockedEb + + [A] _ZN9grpc_core17HealthCheckClientC1EPKcNS_13RefCountedPtrINS_19ConnectedSubchannelEEEP16grpc_pollset_setNS3_INS_8channelz14SubchannelNodeEEENS3_INS_33ConnectivityStateWatcherInterfaceEEE + + [A] _ZN9grpc_core17HealthCheckClientC2EPKcNS_13RefCountedPtrINS_19ConnectedSubchannelEEEP16grpc_pollset_setNS3_INS_8channelz14SubchannelNodeEEENS3_INS_33ConnectivityStateWatcherInterfaceEEE, aliases _ZN9grpc_core17HealthCheckClientC1EPKcNS_13RefCountedPtrINS_19ConnectedSubchannelEEEP16grpc_pollset_setNS3_INS_8channelz14SubchannelNodeEEENS3_INS_33ConnectivityStateWatcherInterfaceEEE + + [A] _ZN9grpc_core17MessageSizeParser20ParsePerMethodParamsERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core18ChildPolicyHandler12UpdateLockedENS_19LoadBalancingPolicy10UpdateArgsE + + [A] _ZN9grpc_core18ChildPolicyHandler14ExitIdleLockedEv + + [A] _ZN9grpc_core18ChildPolicyHandler14ShutdownLockedEv + + [A] _ZN9grpc_core18ChildPolicyHandler17CreateChildPolicyEPKcRK17grpc_channel_args + + [A] _ZN9grpc_core18ChildPolicyHandler18ResetBackoffLockedEv + + [A] _ZN9grpc_core18ChildPolicyHandler6Helper11UpdateStateE23grpc_connectivity_stateSt10unique_ptrINS_19LoadBalancingPolicy16SubchannelPickerESt14default_deleteIS5_EE + + [A] _ZN9grpc_core18ChildPolicyHandler6Helper13AddTraceEventENS_19LoadBalancingPolicy20ChannelControlHelper13TraceSeverityEN4absl14lts_2020_02_2511string_viewE + + [A] _ZN9grpc_core18ChildPolicyHandler6Helper16CreateSubchannelERK17grpc_channel_args + + [A] _ZN9grpc_core18ChildPolicyHandler6Helper19RequestReresolutionEv + + [A] _ZN9grpc_core18ChildPolicyHandler6HelperD0Ev + + [A] _ZN9grpc_core18ChildPolicyHandler6HelperD1Ev + + [A] _ZN9grpc_core18ChildPolicyHandler6HelperD2Ev, aliases _ZN9grpc_core18ChildPolicyHandler6HelperD1Ev + + [A] _ZN9grpc_core18ChildPolicyHandlerD0Ev + + [A] _ZN9grpc_core18ChildPolicyHandlerD1Ev, aliases _ZN9grpc_core18ChildPolicyHandlerD2Ev + + [A] _ZN9grpc_core18ChildPolicyHandlerD2Ev + + [A] _ZN9grpc_core18HandshakerRegistry25RegisterHandshakerFactoryEbNS_14HandshakerTypeESt10unique_ptrINS_17HandshakerFactoryESt14default_deleteIS3_EE + + [A] _ZN9grpc_core18ManagedMemorySliceC1EPK10grpc_slice, aliases _ZN9grpc_core18ManagedMemorySliceC2EPK10grpc_slice + + [A] _ZN9grpc_core18ManagedMemorySliceC1EPKc, aliases _ZN9grpc_core18ManagedMemorySliceC2EPKc + + [A] _ZN9grpc_core18ManagedMemorySliceC1EPKcm, aliases _ZN9grpc_core18ManagedMemorySliceC2EPKcm + + [A] _ZN9grpc_core18ManagedMemorySliceC2EPK10grpc_slice + + [A] _ZN9grpc_core18ManagedMemorySliceC2EPKc + + [A] _ZN9grpc_core18ManagedMemorySliceC2EPKcm + + [A] _ZN9grpc_core19Chttp2ServerAddPortEP11grpc_serverPKcP17grpc_channel_argsPi + + [A] _ZN9grpc_core19ConnectedSubchannel10StartWatchEP16grpc_pollset_setSt10unique_ptrINS_33ConnectivityStateWatcherInterfaceENS_16OrphanableDeleteEE + + [A] _ZN9grpc_core19ConnectedSubchannelC1EP18grpc_channel_stackPK17grpc_channel_argsNS_13RefCountedPtrINS_8channelz14SubchannelNodeEEE + + [A] _ZN9grpc_core19ConnectedSubchannelC2EP18grpc_channel_stackPK17grpc_channel_argsNS_13RefCountedPtrINS_8channelz14SubchannelNodeEEE, aliases _ZN9grpc_core19ConnectedSubchannelC1EP18grpc_channel_stackPK17grpc_channel_argsNS_13RefCountedPtrINS_8channelz14SubchannelNodeEEE + + [A] _ZN9grpc_core19ConnectivityWatcher25OnConnectivityStateChangeE23grpc_connectivity_state + + [A] _ZN9grpc_core19ConnectivityWatcherD0Ev + + [A] _ZN9grpc_core19ConnectivityWatcherD1Ev + + [A] _ZN9grpc_core19ConnectivityWatcherD2Ev, aliases _ZN9grpc_core19ConnectivityWatcherD1Ev + + [A] _ZN9grpc_core19GrpcLbRequestCreateEPKcP9upb_arena + + [A] _ZN9grpc_core19GrpcLbResponseParseERK10grpc_sliceP9upb_arenaPNS_14GrpcLbResponseE + + [A] _ZN9grpc_core19LoadBalancingPolicy10PickResultD1Ev, aliases _ZN9grpc_core19LoadBalancingPolicy10PickResultD2Ev + + [A] _ZN9grpc_core19LoadBalancingPolicy10PickResultD2Ev + + [A] _ZN9grpc_core19LoadBalancingPolicy10UpdateArgsD1Ev, aliases _ZN9grpc_core19LoadBalancingPolicy10UpdateArgsD2Ev + + [A] _ZN9grpc_core19LoadBalancingPolicy10UpdateArgsD2Ev + + [A] _ZN9grpc_core19LoadBalancingPolicy4ArgsD1Ev, aliases _ZN9grpc_core19LoadBalancingPolicy4ArgsD2Ev + + [A] _ZN9grpc_core19LoadBalancingPolicy4ArgsD2Ev + + [A] _ZN9grpc_core19ProxyMapperRegistry10MapAddressERK21grpc_resolved_addressPK17grpc_channel_argsPPS1_PPS4_ + + [A] _ZN9grpc_core19ProxyMapperRegistry4InitEv + + [A] _ZN9grpc_core19ProxyMapperRegistry7MapNameEPKcPK17grpc_channel_argsPPcPPS3_ + + [A] _ZN9grpc_core19ProxyMapperRegistry8RegisterEbSt10unique_ptrINS_20ProxyMapperInterfaceESt14default_deleteIS2_EE + + [A] _ZN9grpc_core19ProxyMapperRegistry8ShutdownEv + + [A] _ZN9grpc_core19ServiceConfigParser12ParsedConfigD0Ev + + [A] _ZN9grpc_core19ServiceConfigParser12ParsedConfigD1Ev, aliases _ZN9grpc_core19ServiceConfigParser12ParsedConfigD2Ev + + [A] _ZN9grpc_core19ServiceConfigParser12ParsedConfigD2Ev + + [A] _ZN9grpc_core19ServiceConfigParser14RegisterParserESt10unique_ptrINS0_6ParserESt14default_deleteIS2_EE + + [A] _ZN9grpc_core19ServiceConfigParser21ParseGlobalParametersERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core19ServiceConfigParser24ParsePerMethodParametersERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core19ServiceConfigParser4InitEv + + [A] _ZN9grpc_core19ServiceConfigParser6Parser17ParseGlobalParamsERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core19ServiceConfigParser6Parser20ParsePerMethodParamsERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core19ServiceConfigParser6ParserD0Ev + + [A] _ZN9grpc_core19ServiceConfigParser6ParserD1Ev, aliases _ZN9grpc_core19ServiceConfigParser6ParserD2Ev + + [A] _ZN9grpc_core19ServiceConfigParser6ParserD2Ev + + [A] _ZN9grpc_core19ServiceConfigParser8ShutdownEv + + [A] _ZN9grpc_core19SubchannelConnector6OrphanEv + + [A] _ZN9grpc_core19XdsClusterDropStats14AddCallDroppedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_core19XdsClusterDropStats19GetSnapshotAndResetB5cxx11Ev + + [A] _ZN9grpc_core19XdsClusterDropStatsC1ENS_13RefCountedPtrINS_9XdsClientEEEN4absl14lts_2020_02_2511string_viewES6_S6_, aliases _ZN9grpc_core19XdsClusterDropStatsC2ENS_13RefCountedPtrINS_9XdsClientEEEN4absl14lts_2020_02_2511string_viewES6_S6_ + + [A] _ZN9grpc_core19XdsClusterDropStatsC2ENS_13RefCountedPtrINS_9XdsClientEEEN4absl14lts_2020_02_2511string_viewES6_S6_ + + [A] _ZN9grpc_core19XdsClusterDropStatsD0Ev + + [A] _ZN9grpc_core19XdsClusterDropStatsD1Ev, aliases _ZN9grpc_core19XdsClusterDropStatsD2Ev + + [A] _ZN9grpc_core19XdsClusterDropStatsD2Ev + + [A] _ZN9grpc_core20InternallyRefCountedINS_17HealthCheckClientEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_19LoadBalancingPolicyEE5UnrefERKNS_13DebugLocationEPKc + + [A] _ZN9grpc_core20InternallyRefCountedINS_19LoadBalancingPolicyEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_33ConnectivityStateWatcherInterfaceEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_8ResolverEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12LrsCallStateEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState13RetryableCallINS2_12AdsCallStateEEEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState13RetryableCallINS2_12LrsCallStateEEEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelStateEE5UnrefEv + + [A] _ZN9grpc_core20InternallyRefCountedINS_9XdsClientEE5UnrefEv + + [A] _ZN9grpc_core20ModifyXdsChannelArgsEP17grpc_channel_args + + [A] _ZN9grpc_core20TlsFetchKeyMaterialsERKNS_13RefCountedPtrI29grpc_tls_key_materials_configEERK28grpc_tls_credentials_optionsbP41grpc_ssl_certificate_config_reload_status + + [A] _ZN9grpc_core20UnmanagedMemorySlice8HeapInitEm + + [A] _ZN9grpc_core20UnmanagedMemorySliceC1EPKc + + [A] _ZN9grpc_core20UnmanagedMemorySliceC1EPKcm + + [A] _ZN9grpc_core20UnmanagedMemorySliceC1Em, aliases _ZN9grpc_core20UnmanagedMemorySliceC2Em + + [A] _ZN9grpc_core20UnmanagedMemorySliceC2EPKc, aliases _ZN9grpc_core20UnmanagedMemorySliceC1EPKc + + [A] _ZN9grpc_core20UnmanagedMemorySliceC2EPKcm, aliases _ZN9grpc_core20UnmanagedMemorySliceC1EPKcm + + [A] _ZN9grpc_core20UnmanagedMemorySliceC2Em + + [A] _ZN9grpc_core21ConnectivityStateNameE23grpc_connectivity_state + + [A] _ZN9grpc_core21DefaultConfigSelector13GetCallConfigENS_14ConfigSelector17GetCallConfigArgsE + + [A] _ZN9grpc_core21DefaultConfigSelectorD0Ev + + [A] _ZN9grpc_core21DefaultConfigSelectorD1Ev + + [A] _ZN9grpc_core21DefaultConfigSelectorD2Ev, aliases _ZN9grpc_core21DefaultConfigSelectorD1Ev + + [A] _ZN9grpc_core21ServiceConfigCallData7DestroyEPv + + [A] _ZN9grpc_core21TcpZerocopySendRecord12PopulateIovsEPmS1_S1_P5iovec + + [A] _ZN9grpc_core21TcpZerocopySendRecord24UpdateOffsetForBytesSentEmm + + [A] _ZN9grpc_core22NewGrpcPolledFdFactoryESt10shared_ptrINS_14WorkSerializerEE + + [A] _ZN9grpc_core22ParseBackendMetricDataERK10grpc_slicePNS_5ArenaE + + [A] _ZN9grpc_core23CallCombinerClosureList11RunClosuresEPNS_12CallCombinerE + + [A] _ZN9grpc_core23MakeHierarchicalPathArgERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EE + + [A] _ZN9grpc_core23MessageSizeParsedConfig18GetFromCallContextEPK25grpc_call_context_element + + [A] _ZN9grpc_core23RegisterHttpProxyMapperEv + + [A] _ZN9grpc_core23XdsClusterLocalityStats14AddCallStartedEv + + [A] _ZN9grpc_core23XdsClusterLocalityStats15AddCallFinishedEb + + [A] _ZN9grpc_core23XdsClusterLocalityStats19GetSnapshotAndResetEv + + [A] _ZN9grpc_core23XdsClusterLocalityStatsC1ENS_13RefCountedPtrINS_9XdsClientEEEN4absl14lts_2020_02_2511string_viewES6_S6_NS1_INS_15XdsLocalityNameEEE + + [A] _ZN9grpc_core23XdsClusterLocalityStatsC2ENS_13RefCountedPtrINS_9XdsClientEEEN4absl14lts_2020_02_2511string_viewES6_S6_NS1_INS_15XdsLocalityNameEEE, aliases _ZN9grpc_core23XdsClusterLocalityStatsC1ENS_13RefCountedPtrINS_9XdsClientEEEN4absl14lts_2020_02_2511string_viewES6_S6_NS1_INS_15XdsLocalityNameEEE + + [A] _ZN9grpc_core23XdsClusterLocalityStatsD0Ev + + [A] _ZN9grpc_core23XdsClusterLocalityStatsD1Ev, aliases _ZN9grpc_core23XdsClusterLocalityStatsD2Ev + + [A] _ZN9grpc_core23XdsClusterLocalityStatsD2Ev + + [A] _ZN9grpc_core24ConnectivityStateTracker10AddWatcherE23grpc_connectivity_stateSt10unique_ptrINS_33ConnectivityStateWatcherInterfaceENS_16OrphanableDeleteEE + + [A] _ZN9grpc_core24ConnectivityStateTracker13RemoveWatcherEPNS_33ConnectivityStateWatcherInterfaceE + + [A] _ZN9grpc_core24ConnectivityStateTracker8SetStateE23grpc_connectivity_statePKc + + [A] _ZN9grpc_core24ConnectivityStateTrackerD1Ev, aliases _ZN9grpc_core24ConnectivityStateTrackerD2Ev + + [A] _ZN9grpc_core24ConnectivityStateTrackerD2Ev + + [A] _ZN9grpc_core24GrpcPolledFdFactoryPosix21NewGrpcPolledFdLockedEiP16grpc_pollset_setSt10shared_ptrINS_14WorkSerializerEE + + [A] _ZN9grpc_core24SecurityHandshakerCreateEP14tsi_handshakerP23grpc_security_connectorPK17grpc_channel_args + + [A] _ZN9grpc_core24StaticMetadataInitCanaryEv + + [A] _ZN9grpc_core25grpc_executor_global_initEv + + [A] _ZN9grpc_core26FakeResolverResponseSetter16SetFailureLockedEv + + [A] _ZN9grpc_core26FakeResolverResponseSetter17SetResponseLockedEv + + [A] _ZN9grpc_core26FakeResolverResponseSetter29SetReresolutionResponseLockedEv + + [A] _ZN9grpc_core26MakeHierarchicalAddressMapB5cxx11ERKN4absl14lts_2020_02_2513InlinedVectorINS_13ServerAddressELm1ESaIS3_EEE + + [A] _ZN9grpc_core26TlsServerSecurityConnector10check_peerE8tsi_peerP13grpc_endpointPNS_13RefCountedPtrI17grpc_auth_contextEEP12grpc_closure + + [A] _ZN9grpc_core26TlsServerSecurityConnector15add_handshakersEPK17grpc_channel_argsP16grpc_pollset_setPNS_16HandshakeManagerE + + [A] _ZN9grpc_core26TlsServerSecurityConnector24RefreshHandshakerFactoryEv + + [A] _ZN9grpc_core26TlsServerSecurityConnector24ReplaceHandshakerFactoryEv + + [A] _ZN9grpc_core26TlsServerSecurityConnector27InitializeHandshakerFactoryEv + + [A] _ZN9grpc_core26TlsServerSecurityConnector32CreateTlsServerSecurityConnectorENS_13RefCountedPtrI23grpc_server_credentialsEE + + [A] _ZN9grpc_core26TlsServerSecurityConnectorC1ENS_13RefCountedPtrI23grpc_server_credentialsEE, aliases _ZN9grpc_core26TlsServerSecurityConnectorC2ENS_13RefCountedPtrI23grpc_server_credentialsEE + + [A] _ZN9grpc_core26TlsServerSecurityConnectorC2ENS_13RefCountedPtrI23grpc_server_credentialsEE + + [A] _ZN9grpc_core26TlsServerSecurityConnectorD0Ev + + [A] _ZN9grpc_core26TlsServerSecurityConnectorD1Ev + + [A] _ZN9grpc_core26TlsServerSecurityConnectorD2Ev, aliases _ZN9grpc_core26TlsServerSecurityConnectorD1Ev + + [A] _ZN9grpc_core27CreateGrpclbBalancerChannelEPKcRK17grpc_channel_args + + [A] _ZN9grpc_core27CreateGrpclbBalancerNameArgEPKc + + [A] _ZN9grpc_core27LoadBalancingPolicyRegistry24ParseLoadBalancingConfigERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core27LoadBalancingPolicyRegistry7Builder34RegisterLoadBalancingPolicyFactoryESt10unique_ptrINS_26LoadBalancingPolicyFactoryESt14default_deleteIS3_EE + + [A] _ZN9grpc_core27MovedCppStringSliceRefCount7DestroyEPv + + [A] _ZN9grpc_core27TlsChannelSecurityConnector10check_peerE8tsi_peerP13grpc_endpointPNS_13RefCountedPtrI17grpc_auth_contextEEP12grpc_closure + + [A] _ZN9grpc_core27TlsChannelSecurityConnector15add_handshakersEPK17grpc_channel_argsP16grpc_pollset_setPNS_16HandshakeManagerE + + [A] _ZN9grpc_core27TlsChannelSecurityConnector15check_call_hostEN4absl14lts_2020_02_2511string_viewEP17grpc_auth_contextP12grpc_closurePP10grpc_error + + [A] _ZN9grpc_core27TlsChannelSecurityConnector22cancel_check_call_hostEP12grpc_closureP10grpc_error + + [A] _ZN9grpc_core27TlsChannelSecurityConnector24RefreshHandshakerFactoryEv + + [A] _ZN9grpc_core27TlsChannelSecurityConnector24ReplaceHandshakerFactoryEP21tsi_ssl_session_cache + + [A] _ZN9grpc_core27TlsChannelSecurityConnector27InitializeHandshakerFactoryEP21tsi_ssl_session_cache + + [A] _ZN9grpc_core27TlsChannelSecurityConnector28ServerAuthorizationCheckDoneEP39grpc_tls_server_authorization_check_arg + + [A] _ZN9grpc_core27TlsChannelSecurityConnector33CreateTlsChannelSecurityConnectorENS_13RefCountedPtrI24grpc_channel_credentialsEENS1_I21grpc_call_credentialsEEPKcS7_P21tsi_ssl_session_cache + + [A] _ZN9grpc_core27TlsChannelSecurityConnector33ServerAuthorizationCheckArgCreateEPv + + [A] _ZN9grpc_core27TlsChannelSecurityConnector34ServerAuthorizationCheckArgDestroyEP39grpc_tls_server_authorization_check_arg + + [A] _ZN9grpc_core27TlsChannelSecurityConnector37ProcessServerAuthorizationCheckResultEP39grpc_tls_server_authorization_check_arg + + [A] _ZN9grpc_core27TlsChannelSecurityConnectorC1ENS_13RefCountedPtrI24grpc_channel_credentialsEENS1_I21grpc_call_credentialsEEPKcS7_, aliases _ZN9grpc_core27TlsChannelSecurityConnectorC2ENS_13RefCountedPtrI24grpc_channel_credentialsEENS1_I21grpc_call_credentialsEEPKcS7_ + + [A] _ZN9grpc_core27TlsChannelSecurityConnectorC2ENS_13RefCountedPtrI24grpc_channel_credentialsEENS1_I21grpc_call_credentialsEEPKcS7_ + + [A] _ZN9grpc_core27TlsChannelSecurityConnectorD0Ev + + [A] _ZN9grpc_core27TlsChannelSecurityConnectorD1Ev + + [A] _ZN9grpc_core27TlsChannelSecurityConnectorD2Ev, aliases _ZN9grpc_core27TlsChannelSecurityConnectorD1Ev + + [A] _ZN9grpc_core28ResolvingLoadBalancingPolicy20CreateLbPolicyLockedERK17grpc_channel_args + + [A] _ZN9grpc_core28ResolvingLoadBalancingPolicy22ResolvingControlHelper11UpdateStateE23grpc_connectivity_stateSt10unique_ptrINS_19LoadBalancingPolicy16SubchannelPickerESt14default_deleteIS5_EE + + [A] _ZN9grpc_core28ResolvingLoadBalancingPolicy22ResolvingControlHelper13AddTraceEventENS_19LoadBalancingPolicy20ChannelControlHelper13TraceSeverityEN4absl14lts_2020_02_2511string_viewE + + [A] _ZN9grpc_core28ResolvingLoadBalancingPolicy28CreateOrUpdateLbPolicyLockedENS_13RefCountedPtrINS_19LoadBalancingPolicy6ConfigEEENS_8Resolver6ResultE + + [A] _ZN9grpc_core28ResolvingLoadBalancingPolicy44MaybeAddTraceMessagesForAddressChangesLockedEbPN4absl14lts_2020_02_2513InlinedVectorIPKcLm3ESaIS5_EEE + + [A] _ZN9grpc_core28ResolvingLoadBalancingPolicyC1ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_17DefaultDeleteCharEEPNS0_19ChannelConfigHelperE + + [A] _ZN9grpc_core28ResolvingLoadBalancingPolicyC2ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_17DefaultDeleteCharEEPNS0_19ChannelConfigHelperE, aliases _ZN9grpc_core28ResolvingLoadBalancingPolicyC1ENS_19LoadBalancingPolicy4ArgsEPNS_9TraceFlagESt10unique_ptrIcNS_17DefaultDeleteCharEEPNS0_19ChannelConfigHelperE + + [A] _ZN9grpc_core29FakeResolverResponseGenerator15SetFakeResolverENS_13RefCountedPtrINS_12FakeResolverEEE + + [A] _ZN9grpc_core29FakeResolverResponseGeneratorC1Ev, aliases _ZN9grpc_core29FakeResolverResponseGeneratorC2Ev + + [A] _ZN9grpc_core29FakeResolverResponseGeneratorC2Ev + + [A] _ZN9grpc_core29GetMaxRecvSizeFromChannelArgsEPK17grpc_channel_args + + [A] _ZN9grpc_core29GetMaxSendSizeFromChannelArgsEPK17grpc_channel_args + + [A] _ZN9grpc_core29GrpcLbLoadReportRequestCreateEllllPKN4absl14lts_2020_02_2513InlinedVectorINS_17GrpcLbClientStats14DropTokenCountELm10ESaIS4_EEEP9upb_arena + + [A] _ZN9grpc_core29SetServerBatchMethodAllocatorEP11grpc_serverP21grpc_completion_queueSt8functionIFNS_25ServerBatchCallAllocationEvEE + + [A] _ZN9grpc_core29ValidateStsCredentialsOptionsEPK28grpc_sts_credentials_optionsPP8grpc_uri + + [A] _ZN9grpc_core31ModifyGrpclbBalancerChannelArgsERKN4absl14lts_2020_02_2513InlinedVectorINS_13ServerAddressELm1ESaIS3_EEEP17grpc_channel_args + + [A] _ZN9grpc_core32CreateGrpclbBalancerAddressesArgEPKN4absl14lts_2020_02_2513InlinedVectorINS_13ServerAddressELm1ESaIS3_EEE + + [A] _ZN9grpc_core32MultiProducerSingleConsumerQueueD1Ev, aliases _ZN9grpc_core32MultiProducerSingleConsumerQueueD2Ev + + [A] _ZN9grpc_core32MultiProducerSingleConsumerQueueD2Ev + + [A] _ZN9grpc_core33ConnectivityStateWatcherInterface6OrphanEv + + [A] _ZN9grpc_core34SetServerRegisteredMethodAllocatorEP11grpc_serverP21grpc_completion_queuePvSt8functionIFNS_30ServerRegisteredCallAllocationEvEE + + [A] _ZN9grpc_core35FindGrpclbBalancerNameInChannelArgsERK17grpc_channel_args + + [A] _ZN9grpc_core36CreateTargetAuthorityTableChannelArgEPNS_14SliceHashTableISt10unique_ptrIcNS_17DefaultDeleteCharEEEE + + [A] _ZN9grpc_core38AsyncConnectivityStateWatcherInterface6NotifyE23grpc_connectivity_state + + [A] _ZN9grpc_core38AsyncConnectivityStateWatcherInterface8Notifier16SendNotificationEPvP10grpc_error + + [A] _ZN9grpc_core40FindGrpclbBalancerAddressesInChannelArgsERK17grpc_channel_args + + [A] _ZN9grpc_core4Json5ParseEN4absl14lts_2020_02_2511string_viewEPP10grpc_error + + [A] _ZN9grpc_core4Json8CopyFromERKS0_ + + [A] _ZN9grpc_core4Json8MoveFromEOS0_ + + [A] _ZN9grpc_core4JsonC1ERKS0_ + + [A] _ZN9grpc_core4JsonC2ERKS0_, aliases _ZN9grpc_core4JsonC1ERKS0_ + + [A] _ZN9grpc_core4JsonD1Ev + + [A] _ZN9grpc_core4JsonD2Ev, aliases _ZN9grpc_core4JsonD1Ev + + [A] _ZN9grpc_core5Arena5AllocEm + + [A] _ZN9grpc_core6XdsApi10DropConfigD0Ev + + [A] _ZN9grpc_core6XdsApi10DropConfigD1Ev, aliases _ZN9grpc_core6XdsApi10DropConfigD2Ev + + [A] _ZN9grpc_core6XdsApi10DropConfigD2Ev + + [A] _ZN9grpc_core6XdsApi16CreateAdsRequestERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt3setIN4absl14lts_2020_02_2511string_viewESt4lessISC_ESaISC_EES8_S8_P10grpc_errorb + + [A] _ZN9grpc_core6XdsApi16CreateLrsRequestESt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ENS0_17ClusterLoadReportESt4lessIS9_ESaIS2_IKS9_SA_EEE + + [A] _ZN9grpc_core6XdsApi16ParseAdsResponseERK10grpc_sliceRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt3setIN4absl14lts_2020_02_2511string_viewESt4lessISF_ESaISF_EESL_SL_PNSE_8optionalINS0_9LdsUpdateEEEPNSM_INS0_9RdsUpdateEEEPSt3mapIS9_NS0_9CdsUpdateESG_IS9_ESaISt4pairISA_SU_EEEPST_IS9_NS0_9EdsUpdateESV_SaISW_ISA_S11_EEEPS9_S16_S16_ + + [A] _ZN9grpc_core6XdsApi16ParseLrsResponseERK10grpc_slicePbPSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessISB_ESaISB_EEPl + + [A] _ZN9grpc_core6XdsApi18PriorityListUpdate11LocalityMap8LocalityD1Ev + + [A] _ZN9grpc_core6XdsApi18PriorityListUpdate11LocalityMap8LocalityD2Ev, aliases _ZN9grpc_core6XdsApi18PriorityListUpdate11LocalityMap8LocalityD1Ev + + [A] _ZN9grpc_core6XdsApi18PriorityListUpdate3AddENS1_11LocalityMap8LocalityE + + [A] _ZN9grpc_core6XdsApi18PriorityListUpdate8ContainsERKNS_13RefCountedPtrINS_15XdsLocalityNameEEE + + [A] _ZN9grpc_core6XdsApi23CreateLrsInitialRequestERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_core6XdsApi9CdsUpdateD1Ev + + [A] _ZN9grpc_core6XdsApi9CdsUpdateD2Ev, aliases _ZN9grpc_core6XdsApi9CdsUpdateD1Ev + + [A] _ZN9grpc_core6XdsApi9EdsUpdateD1Ev, aliases _ZN9grpc_core6XdsApi9EdsUpdateD2Ev + + [A] _ZN9grpc_core6XdsApi9EdsUpdateD2Ev + + [A] _ZN9grpc_core6XdsApi9LdsUpdateD1Ev + + [A] _ZN9grpc_core6XdsApi9LdsUpdateD2Ev, aliases _ZN9grpc_core6XdsApi9LdsUpdateD1Ev + + [A] _ZN9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers13HeaderMatcherD1Ev + + [A] _ZN9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers13HeaderMatcherD2Ev, aliases _ZN9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers13HeaderMatcherD1Ev + + [A] _ZN9grpc_core6XdsApi9RdsUpdate8RdsRouteD1Ev + + [A] _ZN9grpc_core6XdsApi9RdsUpdate8RdsRouteD2Ev, aliases _ZN9grpc_core6XdsApi9RdsUpdate8RdsRouteD1Ev + + [A] _ZN9grpc_core6XdsApiC1EPNS_9XdsClientEPNS_9TraceFlagEPKNS_12XdsBootstrap4NodeE, aliases _ZN9grpc_core6XdsApiC2EPNS_9XdsClientEPNS_9TraceFlagEPKNS_12XdsBootstrap4NodeE + + [A] _ZN9grpc_core6XdsApiC2EPNS_9XdsClientEPNS_9TraceFlagEPKNS_12XdsBootstrap4NodeE + + [A] _ZN9grpc_core7Closure3RunERKNS_13DebugLocationEP12grpc_closureP10grpc_error + + [A] _ZN9grpc_core7ExecCtx3RunERKNS_13DebugLocationEP12grpc_closureP10grpc_error + + [A] _ZN9grpc_core7ExecCtx7RunListERKNS_13DebugLocationEP17grpc_closure_list + + [A] _ZN9grpc_core8Combiner10FinallyRunEP12grpc_closureP10grpc_error + + [A] _ZN9grpc_core8Combiner3RunEP12grpc_closureP10grpc_error + + [A] _ZN9grpc_core8Executor3RunEP12grpc_closureP10grpc_errorNS_12ExecutorTypeENS_15ExecutorJobTypeE + + [A] _ZN9grpc_core8RefCount10RefNonZeroEv + + [A] _ZN9grpc_core8RefCount3RefERKNS_13DebugLocationEPKcl + + [A] _ZN9grpc_core8RefCount3RefEl + + [A] _ZN9grpc_core8RefCount5UnrefERKNS_13DebugLocationEPKc + + [A] _ZN9grpc_core8RefCount5UnrefEv + + [A] _ZN9grpc_core8ResolverC1ESt10shared_ptrINS_14WorkSerializerEESt10unique_ptrINS0_13ResultHandlerESt14default_deleteIS5_EE, aliases _ZN9grpc_core8ResolverC2ESt10shared_ptrINS_14WorkSerializerEESt10unique_ptrINS0_13ResultHandlerESt14default_deleteIS5_EE + + [A] _ZN9grpc_core8ResolverC2ESt10shared_ptrINS_14WorkSerializerEESt10unique_ptrINS0_13ResultHandlerESt14default_deleteIS5_EE + + [A] _ZN9grpc_core8channelz10ServerNode14AddChildSocketENS_13RefCountedPtrINS0_10SocketNodeEEE + + [A] _ZN9grpc_core8channelz10ServerNode17RemoveChildSocketEl + + [A] _ZN9grpc_core8channelz10ServerNode19RenderServerSocketsB5cxx11Ell + + [A] _ZN9grpc_core8channelz10ServerNode20AddChildListenSocketENS_13RefCountedPtrINS0_16ListenSocketNodeEEE + + [A] _ZN9grpc_core8channelz10ServerNode23RemoveChildListenSocketEl + + [A] _ZN9grpc_core8channelz10SocketNodeC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_, aliases _ZN9grpc_core8channelz10SocketNodeC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_ + + [A] _ZN9grpc_core8channelz10SocketNodeC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_ + + [A] _ZN9grpc_core8channelz11ChannelNode17PopulateChildRefsEPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4JsonESt4lessIS8_ESaISt4pairIKS8_S9_EEE + + [A] _ZN9grpc_core8channelz11ChannelNode39GetChannelConnectivityStateChangeStringE23grpc_connectivity_state + + [A] _ZN9grpc_core8channelz11ChannelNodeC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEml + + [A] _ZN9grpc_core8channelz11ChannelNodeC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEml, aliases _ZN9grpc_core8channelz11ChannelNodeC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEml + + [A] _ZN9grpc_core8channelz14SubchannelNode14SetChildSocketENS_13RefCountedPtrINS0_10SocketNodeEEE + + [A] _ZN9grpc_core8channelz14SubchannelNode23UpdateConnectivityStateE23grpc_connectivity_state + + [A] _ZN9grpc_core8channelz14SubchannelNodeC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEm + + [A] _ZN9grpc_core8channelz14SubchannelNodeC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEm, aliases _ZN9grpc_core8channelz14SubchannelNodeC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEm + + [A] _ZN9grpc_core8channelz16ChannelzRegistry18InternalGetServersB5cxx11El + + [A] _ZN9grpc_core8channelz16ChannelzRegistry22InternalGetTopChannelsB5cxx11El + + [A] _ZN9grpc_core8channelz16ListenSocketNodeC1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_, aliases _ZN9grpc_core8channelz16ListenSocketNodeC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ + + [A] _ZN9grpc_core8channelz16ListenSocketNodeC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ + + [A] _ZN9grpc_core8channelz18CallCountingHelper18PopulateCallCountsEPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4JsonESt4lessIS8_ESaISt4pairIKS8_S9_EEE + + [A] _ZN9grpc_core8channelz8BaseNode16RenderJsonStringB5cxx11Ev + + [A] _ZN9grpc_core8channelz8BaseNodeC1ENS1_10EntityTypeENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, aliases _ZN9grpc_core8channelz8BaseNodeC2ENS1_10EntityTypeENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_core8channelz8BaseNodeC2ENS1_10EntityTypeENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_core8internal32ClientChannelServiceConfigParser17ParseGlobalParamsERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core8internal32ClientChannelServiceConfigParser20ParsePerMethodParamsERKNS_4JsonEPP10grpc_error + + [A] _ZN9grpc_core8internal38alts_handshaker_client_ref_for_testingEP22alts_handshaker_client + + [A] _ZN9grpc_core8internal53alts_handshaker_client_on_status_received_for_testingEP22alts_handshaker_client16grpc_status_codeP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState11StopLrsCallEv + + [A] _ZN9grpc_core9XdsClient12ChannelState11UnsubscribeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_b + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState11UnsubscribeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_b + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13OnRequestSentEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceState13OnTimerLockedEP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceState6OrphanEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceState7OnTimerEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateD0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateD1Ev, aliases _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateD2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateD2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState15AcceptCdsUpdateESt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_6XdsApi9CdsUpdateESt4lessIS9_ESaISt4pairIKS9_SB_EEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState15AcceptEdsUpdateESt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_6XdsApi9EdsUpdateESt4lessIS9_ESaISt4pairIKS9_SB_EEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState15AcceptLdsUpdateEN4absl14lts_2020_02_258optionalINS_6XdsApi9LdsUpdateEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState15AcceptRdsUpdateEN4absl14lts_2020_02_258optionalINS_6XdsApi9RdsUpdateEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState16OnStatusReceivedEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState17SendMessageLockedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState18OnResponseReceivedEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState19OnRequestSentLockedEP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState22OnStatusReceivedLockedEP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState23ResourceNamesForRequestERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState24OnResponseReceivedLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState6OrphanEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallState9SubscribeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_ + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallStateC1ENS_13RefCountedPtrINS1_13RetryableCallIS2_EEEE, aliases _ZN9grpc_core9XdsClient12ChannelState12AdsCallStateC2ENS_13RefCountedPtrINS1_13RetryableCallIS2_EEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallStateC2ENS_13RefCountedPtrINS1_13RetryableCallIS2_EEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallStateD0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallStateD1Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12AdsCallStateD2Ev, aliases _ZN9grpc_core9XdsClient12ChannelState12AdsCallStateD1Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState16OnStatusReceivedEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState18OnResponseReceivedEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState20OnInitialRequestSentEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState22OnStatusReceivedLockedEP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState24OnResponseReceivedLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState25MaybeStartReportingLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState26OnInitialRequestSentLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState6OrphanEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8Reporter12OnReportDoneEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8Reporter16SendReportLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8Reporter17OnNextReportTimerEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8Reporter18OnReportDoneLockedEP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8Reporter23OnNextReportTimerLockedEP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8Reporter24ScheduleNextReportLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8Reporter6OrphanEv + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8ReporterD0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8ReporterD1Ev, aliases _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8ReporterD2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallState8ReporterD2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallStateC1ENS_13RefCountedPtrINS1_13RetryableCallIS2_EEEE, aliases _ZN9grpc_core9XdsClient12ChannelState12LrsCallStateC2ENS_13RefCountedPtrINS1_13RetryableCallIS2_EEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallStateC2ENS_13RefCountedPtrINS1_13RetryableCallIS2_EEEE + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallStateD0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallStateD1Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12LrsCallStateD2Ev, aliases _ZN9grpc_core9XdsClient12ChannelState12LrsCallStateD1Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12StateWatcher25OnConnectivityStateChangeE23grpc_connectivity_state + + [A] _ZN9grpc_core9XdsClient12ChannelState12StateWatcherD0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12StateWatcherD1Ev, aliases _ZN9grpc_core9XdsClient12ChannelState12StateWatcherD2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState12StateWatcherD2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEE12OnRetryTimerEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEE18StartNewCallLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEE21StartRetryTimerLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEE6OrphanEv + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEED0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEED1Ev, aliases _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEED2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEED2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEE12OnRetryTimerEPvP10grpc_error + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEE18StartNewCallLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEE21StartRetryTimerLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEE6OrphanEv + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEED0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEED1Ev, aliases _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEED2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEED2Ev + + [A] _ZN9grpc_core9XdsClient12ChannelState17MaybeStartLrsCallEv + + [A] _ZN9grpc_core9XdsClient12ChannelState28StartConnectivityWatchLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState29CancelConnectivityWatchLockedEv + + [A] _ZN9grpc_core9XdsClient12ChannelState6OrphanEv + + [A] _ZN9grpc_core9XdsClient12ChannelState9SubscribeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ + + [A] _ZN9grpc_core9XdsClient12ChannelStateC1ENS_13RefCountedPtrIS0_EEP12grpc_channel, aliases _ZN9grpc_core9XdsClient12ChannelStateC2ENS_13RefCountedPtrIS0_EEP12grpc_channel + + [A] _ZN9grpc_core9XdsClient12ChannelStateC2ENS_13RefCountedPtrIS0_EEP12grpc_channel + + [A] _ZN9grpc_core9XdsClient12ChannelStateD0Ev + + [A] _ZN9grpc_core9XdsClient12ChannelStateD1Ev + + [A] _ZN9grpc_core9XdsClient12ChannelStateD2Ev, aliases _ZN9grpc_core9XdsClient12ChannelStateD1Ev + + [A] _ZN9grpc_core9XdsClient12ResetBackoffEv + + [A] _ZN9grpc_core9XdsClient13ChannelArgCmpEPvS1_ + + [A] _ZN9grpc_core9XdsClient13NotifyOnErrorEP10grpc_error + + [A] _ZN9grpc_core9XdsClient14ChannelArgCopyEPv + + [A] _ZN9grpc_core9XdsClient15LoadReportStateD1Ev, aliases _ZN9grpc_core9XdsClient15LoadReportStateD2Ev + + [A] _ZN9grpc_core9XdsClient15LoadReportStateD2Ev + + [A] _ZN9grpc_core9XdsClient16WatchClusterDataEN4absl14lts_2020_02_2511string_viewESt10unique_ptrINS0_23ClusterWatcherInterfaceESt14default_deleteIS5_EE + + [A] _ZN9grpc_core9XdsClient17ChannelArgDestroyEPv + + [A] _ZN9grpc_core9XdsClient17WatchEndpointDataEN4absl14lts_2020_02_2511string_viewESt10unique_ptrINS0_24EndpointWatcherInterfaceESt14default_deleteIS5_EE + + [A] _ZN9grpc_core9XdsClient18GetFromChannelArgsERK17grpc_channel_args + + [A] _ZN9grpc_core9XdsClient19AddClusterDropStatsEN4absl14lts_2020_02_2511string_viewES3_S3_ + + [A] _ZN9grpc_core9XdsClient19CreateServiceConfigERKNS_6XdsApi9RdsUpdateEPNS_13RefCountedPtrINS_13ServiceConfigEEE + + [A] _ZN9grpc_core9XdsClient21RemoveFromChannelArgsERK17grpc_channel_args + + [A] _ZN9grpc_core9XdsClient22CancelClusterDataWatchEN4absl14lts_2020_02_2511string_viewEPNS0_23ClusterWatcherInterfaceEb + + [A] _ZN9grpc_core9XdsClient22RemoveClusterDropStatsEN4absl14lts_2020_02_2511string_viewES3_S3_PNS_19XdsClusterDropStatsE + + [A] _ZN9grpc_core9XdsClient23AddClusterLocalityStatsEN4absl14lts_2020_02_2511string_viewES3_S3_NS_13RefCountedPtrINS_15XdsLocalityNameEEE + + [A] _ZN9grpc_core9XdsClient23BuildLoadReportSnapshotEbRKSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS7_ESaIS7_EE + + [A] _ZN9grpc_core9XdsClient23CancelEndpointDataWatchEN4absl14lts_2020_02_2511string_viewEPNS0_24EndpointWatcherInterfaceEb + + [A] _ZN9grpc_core9XdsClient26RemoveClusterLocalityStatsEN4absl14lts_2020_02_2511string_viewES3_S3_RKNS_13RefCountedPtrINS_15XdsLocalityNameEEEPNS_23XdsClusterLocalityStatsE + + [A] _ZN9grpc_core9XdsClient26WeightedClustersActionNameB5cxx11ERKSt6vectorINS_6XdsApi9RdsUpdate8RdsRoute13ClusterWeightESaIS5_EE + + [A] _ZN9grpc_core9XdsClient29UpdateWeightedClusterIndexMapERKNS_6XdsApi9RdsUpdateE + + [A] _ZN9grpc_core9XdsClient6OrphanEv + + [A] _ZN9grpc_core9XdsClientC1ESt10shared_ptrINS_14WorkSerializerEEP16grpc_pollset_setN4absl14lts_2020_02_2511string_viewESt10unique_ptrINS0_29ServiceConfigWatcherInterfaceESt14default_deleteISA_EERK17grpc_channel_argsPP10grpc_error + + [A] _ZN9grpc_core9XdsClientC2ESt10shared_ptrINS_14WorkSerializerEEP16grpc_pollset_setN4absl14lts_2020_02_2511string_viewESt10unique_ptrINS0_29ServiceConfigWatcherInterfaceESt14default_deleteISA_EERK17grpc_channel_argsPP10grpc_error, aliases _ZN9grpc_core9XdsClientC1ESt10shared_ptrINS_14WorkSerializerEEP16grpc_pollset_setN4absl14lts_2020_02_2511string_viewESt10unique_ptrINS0_29ServiceConfigWatcherInterfaceESt14default_deleteISA_EERK17grpc_channel_argsPP10grpc_error + + [A] _ZN9grpc_core9XdsClientD0Ev + + [A] _ZN9grpc_core9XdsClientD1Ev, aliases _ZN9grpc_core9XdsClientD2Ev + + [A] _ZN9grpc_core9XdsClientD2Ev + + [A] _ZNK21grpc_call_credentials18min_security_levelEv + + [A] _ZNK31grpc_composite_call_credentials18min_security_levelEv + + [A] _ZNK4absl14lts_2020_02_2516strings_internal8SplitterINS1_13MaxSplitsImplINS0_6ByCharEEENS0_10AllowEmptyEE18ConvertToContainerISt6vectorINS0_11string_viewESaISA_EESA_Lb0EEclERKS7_ + + [A] _ZNK9grpc_core10ThreadPool11thread_nameEv + + [A] _ZNK9grpc_core10ThreadPool13pool_capacityEv + + [A] _ZNK9grpc_core10ThreadPool14thread_optionsEv + + [A] _ZNK9grpc_core10ThreadPool20num_pending_closuresEv + + [A] _ZNK9grpc_core12GrpcLbServereqERKS0_ + + [A] _ZNK9grpc_core13ServerAddress3CmpERKS0_ + + [A] _ZNK9grpc_core13ServiceConfig27GetMethodParsedConfigVectorERK10grpc_slice + + [A] _ZNK9grpc_core14ConfigSelector14MakeChannelArgEv + + [A] _ZNK9grpc_core14SliceHashTableISt10unique_ptrIcNS_17DefaultDeleteCharEEE3GetERK10grpc_slice + + [A] _ZNK9grpc_core15InfLenFIFOQueue5countEv + + [A] _ZNK9grpc_core15XdsLocalityName7CompareERKS0_ + + [A] _ZNK9grpc_core18ChildPolicyHandler25CreateLoadBalancingPolicyEPKcNS_19LoadBalancingPolicy4ArgsE + + [A] _ZNK9grpc_core18ChildPolicyHandler37ConfigChangeRequiresNewPolicyInstanceEPNS_19LoadBalancingPolicy6ConfigES3_ + + [A] _ZNK9grpc_core18ChildPolicyHandler4nameEv + + [A] _ZNK9grpc_core24ConnectivityStateTracker5stateEv + + [A] _ZNK9grpc_core26TlsServerSecurityConnector3cmpEPK23grpc_security_connector + + [A] _ZNK9grpc_core27TlsChannelSecurityConnector3cmpEPK23grpc_security_connector + + [A] _ZNK9grpc_core28ResolvingLoadBalancingPolicy35ConcatenateAndAddChannelTraceLockedERKN4absl14lts_2020_02_2513InlinedVectorIPKcLm3ESaIS5_EEE + + [A] _ZNK9grpc_core4Json4DumpB5cxx11Ei + + [A] _ZNK9grpc_core6XdsApi10DropConfig10ShouldDropEPPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZNK9grpc_core6XdsApi18PriorityListUpdate4FindEj + + [A] _ZNK9grpc_core6XdsApi18PriorityListUpdateeqERKS1_ + + [A] _ZNK9grpc_core6XdsApi9RdsUpdate8RdsRoute13ClusterWeight8ToStringB5cxx11Ev + + [A] _ZNK9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers11PathMatcher8ToStringB5cxx11Ev + + [A] _ZNK9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers13HeaderMatcher8ToStringB5cxx11Ev + + [A] _ZNK9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers8ToStringB5cxx11Ev + + [A] _ZNK9grpc_core6XdsApi9RdsUpdate8RdsRoute8ToStringB5cxx11Ev + + [A] _ZNK9grpc_core6XdsApi9RdsUpdate8ToStringB5cxx11Ev + + [A] _ZNK9grpc_core8channelz12ChannelTrace10TraceEvent16RenderTraceEventEv + + [A] _ZNK9grpc_core9XdsClient12ChannelState12AdsCallState22HasSubscribedResourcesEv + + [A] _ZNK9grpc_core9XdsClient12ChannelState12AdsCallState22IsCurrentCallOnChannelEv + + [A] _ZNK9grpc_core9XdsClient12ChannelState12LrsCallState22IsCurrentCallOnChannelEv + + [A] _ZNK9grpc_core9XdsClient12ChannelState16HasActiveAdsCallEv + + [A] _ZNK9grpc_core9XdsClient12ChannelState9ads_calldEv + + [A] _ZNK9grpc_core9XdsClient12ChannelState9lrs_calldEv + + [A] _ZNK9grpc_core9XdsClient14MakeChannelArgEv + + [A] _ZNKSt10_HashtableI10grpc_sliceSt4pairIKS0_PKN4absl14lts_2020_02_2513InlinedVectorISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS9_EELm4ESaISC_EEEESaISH_ENSt8__detail10_Select1stESt8equal_toIS0_ENS7_9SliceHashENSJ_18_Mod_range_hashingENSJ_20_Default_ranged_hashENSJ_20_Prime_rehash_policyENSJ_17_Hashtable_traitsILb1ELb0ELb1EEEE19_M_find_before_nodeEmRS2_m + + [A] _ZNKSt10_HashtableI10grpc_sliceSt4pairIKS0_PKN4absl14lts_2020_02_2513InlinedVectorISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS9_EELm4ESaISC_EEEESaISH_ENSt8__detail10_Select1stESt8equal_toIS0_ENS7_9SliceHashENSJ_18_Mod_range_hashingENSJ_20_Default_ranged_hashENSJ_20_Prime_rehash_policyENSJ_17_Hashtable_traitsILb1ELb0ELb1EEEE4findERS2_ + + [A] _ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_M_check_lenEmPKc + + [A] _ZNKSt8_Rb_treeIN4absl14lts_2020_02_2511string_viewES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE4findERKS2_ + + [A] _ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core13RefCountedPtrINS8_19LoadBalancingPolicy6ConfigEEEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE4findERS7_ + + [A] _ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE4findERS7_ + + [A] _ZNSt10_HashtableI10grpc_sliceSt4pairIKS0_PKN4absl14lts_2020_02_2513InlinedVectorISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS9_EELm4ESaISC_EEEESaISH_ENSt8__detail10_Select1stESt8equal_toIS0_ENS7_9SliceHashENSJ_18_Mod_range_hashingENSJ_20_Default_ranged_hashENSJ_20_Prime_rehash_policyENSJ_17_Hashtable_traitsILb1ELb0ELb1EEEE9_M_rehashEmRKm + + [A] _ZNSt10_HashtableI10grpc_sliceSt4pairIKS0_PKN4absl14lts_2020_02_2513InlinedVectorISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS9_EELm4ESaISC_EEEESaISH_ENSt8__detail10_Select1stESt8equal_toIS0_ENS7_9SliceHashENSJ_18_Mod_range_hashingENSJ_20_Default_ranged_hashENSJ_20_Prime_rehash_policyENSJ_17_Hashtable_traitsILb1ELb0ELb1EEEED1Ev + + [A] _ZNSt10_HashtableI10grpc_sliceSt4pairIKS0_PKN4absl14lts_2020_02_2513InlinedVectorISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS9_EELm4ESaISC_EEEESaISH_ENSt8__detail10_Select1stESt8equal_toIS0_ENS7_9SliceHashENSJ_18_Mod_range_hashingENSJ_20_Default_ranged_hashENSJ_20_Prime_rehash_policyENSJ_17_Hashtable_traitsILb1ELb0ELb1EEEED2Ev, aliases _ZNSt10_HashtableI10grpc_sliceSt4pairIKS0_PKN4absl14lts_2020_02_2513InlinedVectorISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteIS9_EELm4ESaISC_EEEESaISH_ENSt8__detail10_Select1stESt8equal_toIS0_ENS7_9SliceHashENSJ_18_Mod_range_hashingENSJ_20_Default_ranged_hashENSJ_20_Prime_rehash_policyENSJ_17_Hashtable_traitsILb1ELb0ELb1EEEED1Ev + + [A] _ZNSt10_HashtableIjSt4pairIKjPN9grpc_core21TcpZerocopySendRecordEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_insert_unique_nodeEmmPNS7_10_Hash_nodeIS5_Lb0EEE + + [A] _ZNSt10_HashtableIjSt4pairIKjPN9grpc_core21TcpZerocopySendRecordEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_rehashEmRKm + + [A] _ZNSt10_HashtableIjSt4pairIKjPN9grpc_core21TcpZerocopySendRecordEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEED1Ev + + [A] _ZNSt10_HashtableIjSt4pairIKjPN9grpc_core21TcpZerocopySendRecordEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEED2Ev, aliases _ZNSt10_HashtableIjSt4pairIKjPN9grpc_core21TcpZerocopySendRecordEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEED1Ev + + [A] _ZNSt10unique_ptrIN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core17GrpcLbClientStats14DropTokenCountELm10ESaIS5_EEESt14default_deleteIS7_EED1Ev + + [A] _ZNSt10unique_ptrIN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core17GrpcLbClientStats14DropTokenCountELm10ESaIS5_EEESt14default_deleteIS7_EED2Ev, aliases _ZNSt10unique_ptrIN4absl14lts_2020_02_2513InlinedVectorIN9grpc_core17GrpcLbClientStats14DropTokenCountELm10ESaIS5_EEESt14default_deleteIS7_EED1Ev + + [A] _ZNSt10unique_ptrIN9grpc_core12XdsBootstrapESt14default_deleteIS1_EED1Ev, aliases _ZNSt10unique_ptrIN9grpc_core12XdsBootstrapESt14default_deleteIS1_EED2Ev + + [A] _ZNSt10unique_ptrIN9grpc_core12XdsBootstrapESt14default_deleteIS1_EED2Ev + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_core38AsyncConnectivityStateWatcherInterface8NotifierC4ENS1_13RefCountedPtrIS2_EE23grpc_connectivity_stateRKSt10shared_ptrINS1_14WorkSerializerEEEUlvE_E10_M_managerERSt9_Any_dataRKSE_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceState7OnTimerEPvP10grpc_errorEUlvE_E10_M_managerERSt9_Any_dataRKSB_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_core9XdsClient12ChannelState13RetryableCallINS3_12AdsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_E10_M_managerERSt9_Any_dataRKSC_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_core9XdsClient12ChannelState13RetryableCallINS3_12LrsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_E10_M_managerERSt9_Any_dataRKSC_St18_Manager_operation + + [A] _ZNSt15_Sp_counted_ptrIDnLN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv + + [A] _ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv + + [A] _ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_releaseEv + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_core38AsyncConnectivityStateWatcherInterface8NotifierC4ENS1_13RefCountedPtrIS2_EE23grpc_connectivity_stateRKSt10shared_ptrINS1_14WorkSerializerEEEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceState7OnTimerEPvP10grpc_errorEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_core9XdsClient12ChannelState13RetryableCallINS3_12AdsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_core9XdsClient12ChannelState13RetryableCallINS3_12LrsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt20__uninitialized_copyILb0EE13__uninit_copyISt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEES9_EET0_T_SC_SB_ + + [A] _ZNSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv + + [A] _ZNSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv + + [A] _ZNSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE14_M_get_deleterERKSt9type_info + + [A] _ZNSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EED0Ev + + [A] _ZNSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EED1Ev, aliases _ZNSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EED2Ev + + [A] _ZNSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EED2Ev + + [A] _ZNSt3_V28__rotateIPSt10unique_ptrIN9grpc_core17HandshakerFactoryESt14default_deleteIS3_EEEET_S8_S8_S8_St26random_access_iterator_tag + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core4JsonESt4lessIS5_ESaISt4pairIKS5_S7_EEEC1ESt16initializer_listISC_ERKS9_RKSD_, aliases _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core4JsonESt4lessIS5_ESaISt4pairIKS5_S7_EEEC2ESt16initializer_listISC_ERKS9_RKSD_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core4JsonESt4lessIS5_ESaISt4pairIKS5_S7_EEEC2ESt16initializer_listISC_ERKS9_RKSD_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core4JsonESt4lessIS5_ESaISt4pairIKS5_S7_EEEixEOS5_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateESt4lessIS5_ESaISt4pairIKS5_SA_EEEixEOS5_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateESt4lessIS5_ESaISt4pairIKS5_SA_EEEixERSE_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core9XdsClient12ClusterStateESt4lessIS5_ESaISt4pairIKS5_S8_EEEixERSC_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core9XdsClient13EndpointStateESt4lessIS5_ESaISt4pairIKS5_S8_EEEixERSC_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateENS7_16OrphanableDeleteEESt4lessIS5_ESaISt4pairIKS5_SD_EEEixERSH_ + + [A] _ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmSt4lessIS5_ESaISt4pairIKS5_mEEEixERS9_ + + [A] _ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core4JsonEED1Ev, aliases _ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core4JsonEED2Ev + + [A] _ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_core4JsonEED2Ev + + [A] _ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED1Ev + + [A] _ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED2Ev, aliases _ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ED1Ev + + [A] _ZNSt5dequeIN9grpc_core10Subchannel33ConnectivityStateWatcherInterface23ConnectivityStateChangeESaIS3_EED1Ev, aliases _ZNSt5dequeIN9grpc_core10Subchannel33ConnectivityStateWatcherInterface23ConnectivityStateChangeESaIS3_EED2Ev + + [A] _ZNSt5dequeIN9grpc_core10Subchannel33ConnectivityStateWatcherInterface23ConnectivityStateChangeESaIS3_EED2Ev + + [A] _ZNSt6vectorIN4absl14lts_2020_02_2511string_viewESaIS2_EE15_M_range_insertIPZNKS1_16strings_internal8SplitterINS1_6ByCharENS1_10AllowEmptyEE18ConvertToContainerIS4_S2_Lb0EEclERKSA_E8raw_viewEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EET_SL_St20forward_iterator_tag + + [A] _ZNSt6vectorIN4absl14lts_2020_02_2511string_viewESaIS2_EE15_M_range_insertIPZNKS1_16strings_internal8SplitterINS6_13MaxSplitsImplINS1_6ByCharEEENS1_10AllowEmptyEE18ConvertToContainerIS4_S2_Lb0EEclERKSC_E8raw_viewEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EET_SN_St20forward_iterator_tag + + [A] _ZNSt6vectorIN9grpc_core12GrpcLbServerESaIS1_EE14_M_emplace_auxIJEEEN9__gnu_cxx17__normal_iteratorIPS1_S3_EENS6_IPKS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core12GrpcLbServerESaIS1_EE17_M_realloc_insertIJEEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core23XdsClusterLocalityStats8SnapshotESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EE12emplace_backIJS1_EEEvDpOT_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EE12emplace_backIJSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_St4lessISB_ESaISt4pairIKSB_S1_EEEEEEvDpOT_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EE17_M_realloc_insertIJEEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EE17_M_realloc_insertIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EE17_M_realloc_insertIJSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_St4lessISB_ESaISt4pairIKSB_S1_EEEEEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EEC1ESt16initializer_listIS1_ERKS2_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EEC2ESt16initializer_listIS1_ERKS2_, aliases _ZNSt6vectorIN9grpc_core4JsonESaIS1_EEC1ESt16initializer_listIS1_ERKS2_ + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EED1Ev + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EED2Ev, aliases _ZNSt6vectorIN9grpc_core4JsonESaIS1_EED1Ev + + [A] _ZNSt6vectorIN9grpc_core4JsonESaIS1_EEaSERKS3_ + + [A] _ZNSt6vectorIN9grpc_core6XdsApi9RdsUpdate8RdsRoute13ClusterWeightESaIS4_EE17_M_realloc_insertIJS4_EEEvN9__gnu_cxx17__normal_iteratorIPS4_S6_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers13HeaderMatcherESaIS5_EE17_M_realloc_insertIJEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core6XdsApi9RdsUpdate8RdsRoute8Matchers13HeaderMatcherESaIS5_EE17_M_realloc_insertIJS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core6XdsApi9RdsUpdate8RdsRouteESaIS3_EE17_M_realloc_insertIJS3_EEEvN9__gnu_cxx17__normal_iteratorIPS3_S5_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_core6XdsApi9RdsUpdate8RdsRouteESaIS3_EED1Ev, aliases _ZNSt6vectorIN9grpc_core6XdsApi9RdsUpdate8RdsRouteESaIS3_EED2Ev + + [A] _ZNSt6vectorIN9grpc_core6XdsApi9RdsUpdate8RdsRouteESaIS3_EED2Ev + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA10_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA12_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA13_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA15_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA16_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA19_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA21_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA25_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA28_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA29_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA2_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA35_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA4_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA6_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJRA8_KcEEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJS5_EEEvDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA10_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA12_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA13_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA15_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA16_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA17_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA19_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA21_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA22_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA23_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA24_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA25_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA26_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA27_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA28_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA29_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA2_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA32_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA33_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA35_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA4_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA6_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA7_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA8_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRA9_KcEEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRKS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED1Ev, aliases _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev + + [A] _ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev + + [A] _ZNSt6vectorIP10grpc_errorSaIS1_EE12emplace_backIJS1_EEEvDpOT_ + + [A] _ZNSt6vectorIP10grpc_errorSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIP10grpc_errorSaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIP12grpc_channelSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIP12grpc_pollsetSaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIP21grpc_completion_queueSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIPN9grpc_core4JsonESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_ + + [A] _ZNSt6vectorISt10unique_ptrIN9grpc_core20ProxyMapperInterfaceESt14default_deleteIS2_EESaIS5_EE17_M_realloc_insertIJS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_ + + [A] _ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_ + + [A] _ZNSt8_Rb_treeIN4absl14lts_2020_02_2511string_viewES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE24_M_get_insert_unique_posERKS2_ + + [A] _ZNSt8_Rb_treeIN4absl14lts_2020_02_2511string_viewES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E + + [A] _ZNSt8_Rb_treeIN4absl14lts_2020_02_2511string_viewESt4pairIKS2_dESt10_Select1stIS5_EN9grpc_core10StringLessESaIS5_EE24_M_get_insert_unique_posERS4_ + + [A] _ZNSt8_Rb_treeIN4absl14lts_2020_02_2511string_viewESt4pairIKS2_dESt10_Select1stIS5_EN9grpc_core10StringLessESaIS5_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_ + + [A] _ZNSt8_Rb_treeIN4absl14lts_2020_02_2511string_viewESt4pairIKS2_dESt10_Select1stIS5_EN9grpc_core10StringLessESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_23XdsClusterLocalityStats8SnapshotEESt10_Select1stIS8_ENS2_4LessESaIS8_EE24_M_get_insert_unique_posERS5_ + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_23XdsClusterLocalityStats8SnapshotEESt10_Select1stIS8_ENS2_4LessESaIS8_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS5_ + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_23XdsClusterLocalityStats8SnapshotEESt10_Select1stIS8_ENS2_4LessESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_6XdsApi18PriorityListUpdate11LocalityMap8LocalityEESt10_Select1stISA_ENS2_4LessESaISA_EE17_M_emplace_uniqueIJRS3_S9_EEES4_ISt17_Rb_tree_iteratorISA_EbEDpOT_ + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_6XdsApi18PriorityListUpdate11LocalityMap8LocalityEESt10_Select1stISA_ENS2_4LessESaISA_EE7_M_copyINSF_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISA_EPKSJ_PSt18_Rb_tree_node_baseRT_ + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_6XdsApi18PriorityListUpdate11LocalityMap8LocalityEESt10_Select1stISA_ENS2_4LessESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_9XdsClient15LoadReportState13LocalityStateEESt10_Select1stIS9_ENS2_4LessESaIS9_EE24_M_get_insert_unique_posERS5_ + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_9XdsClient15LoadReportState13LocalityStateEESt10_Select1stIS9_ENS2_4LessESaIS9_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS9_ERS5_ + + [A] _ZNSt8_Rb_treeIN9grpc_core13RefCountedPtrINS0_15XdsLocalityNameEEESt4pairIKS3_NS0_9XdsClient15LoadReportState13LocalityStateEESt10_Select1stIS9_ENS2_4LessESaIS9_EE8_M_eraseEPSt13_Rb_tree_nodeIS9_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE11equal_rangeERKS5_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSD_PSt13_Rb_tree_nodeIS5_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE16_M_insert_uniqueIRKS5_EESt4pairISt17_Rb_tree_iteratorIS5_EbEOT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE17_M_emplace_uniqueIJRKPKcRKmEEESt4pairISt17_Rb_tree_iteratorIS5_EbEDpOT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE17_M_emplace_uniqueIJS5_EEESt4pairISt17_Rb_tree_iteratorIS5_EbEDpOT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE24_M_get_insert_unique_posERKS5_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE4findERKS5_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE5eraseERKS5_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N4absl14lts_2020_02_2513InlinedVectorIN9grpc_core13ServerAddressELm1ESaISC_EEEESt10_Select1stISF_ESt4lessIS5_ESaISF_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N4absl14lts_2020_02_2513InlinedVectorIN9grpc_core13ServerAddressELm1ESaISC_EEEESt10_Select1stISF_ESt4lessIS5_ESaISF_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISF_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N4absl14lts_2020_02_2513InlinedVectorIN9grpc_core13ServerAddressELm1ESaISC_EEEESt10_Select1stISF_ESt4lessIS5_ESaISF_EE8_M_eraseEPSt13_Rb_tree_nodeISF_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core13RefCountedPtrINS8_19LoadBalancingPolicy6ConfigEEEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core13RefCountedPtrINS8_19LoadBalancingPolicy6ConfigEEEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISD_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core13RefCountedPtrINS8_19LoadBalancingPolicy6ConfigEEEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE8_M_eraseEPSt13_Rb_tree_nodeISD_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core23XdsClusterLocalityStats13BackendMetricEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core23XdsClusterLocalityStats13BackendMetricEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core23XdsClusterLocalityStats13BackendMetricEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSI_PSt13_Rb_tree_nodeISA_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISA_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE4findERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_copyINSG_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISA_EPKSK_PSt18_Rb_tree_node_baseRT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE7_M_copyINSG_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeISA_EPKSK_PSt18_Rb_tree_node_baseRT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EEaSERKSG_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core6XdsApi9CdsUpdateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_emplace_uniqueIJS5_SA_EEES6_ISt17_Rb_tree_iteratorISB_EbEDpOT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core6XdsApi9CdsUpdateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core6XdsApi9EdsUpdateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_emplace_uniqueIJS5_SA_EEES6_ISt17_Rb_tree_iteratorISB_EbEDpOT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core6XdsApi9EdsUpdateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE11equal_rangeERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSL_PSt13_Rb_tree_nodeISD_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISD_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE5eraseERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ChannelState12AdsCallState17ResourceTypeStateEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE8_M_eraseEPSt13_Rb_tree_nodeISD_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ClusterStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11equal_rangeERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ClusterStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSJ_PSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ClusterStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ClusterStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ClusterStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5eraseERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient12ClusterStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient13EndpointStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11equal_rangeERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient13EndpointStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSJ_PSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient13EndpointStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient13EndpointStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient13EndpointStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5eraseERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient13EndpointStateEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient16ClusterNamesInfoEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient16ClusterNamesInfoEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient16ClusterNamesInfoEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE4findERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core9XdsClient16ClusterNamesInfoEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S5_ESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S5_ESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S5_ESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateENS9_16OrphanableDeleteEEESt10_Select1stISG_ESt4lessIS5_ESaISG_EE11equal_rangeERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateENS9_16OrphanableDeleteEEESt10_Select1stISG_ESt4lessIS5_ESaISG_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSO_PSt13_Rb_tree_nodeISG_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateENS9_16OrphanableDeleteEEESt10_Select1stISG_ESt4lessIS5_ESaISG_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateENS9_16OrphanableDeleteEEESt10_Select1stISG_ESt4lessIS5_ESaISG_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISG_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateENS9_16OrphanableDeleteEEESt10_Select1stISG_ESt4lessIS5_ESaISG_EE8_M_eraseEPSt13_Rb_tree_nodeISG_E + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_mESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE24_M_get_insert_unique_posERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_mESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS7_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_mESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E + + [A] _ZNSt8_Rb_treeIPKcSt4pairIKS1_N4absl14lts_2020_02_2511string_viewEESt10_Select1stIS7_ESt4lessIS1_ESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E + + [A] _ZNSt8_Rb_treeIPKcSt4pairIKS1_St10unique_ptrIN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcherENS5_16OrphanableDeleteEEESt10_Select1stISB_ENS5_10StringLessESaISB_EE24_M_get_insert_unique_posERS3_ + + [A] _ZNSt8_Rb_treeIPKcSt4pairIKS1_St10unique_ptrIN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcherENS5_16OrphanableDeleteEEESt10_Select1stISB_ENS5_10StringLessESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS3_ + + [A] _ZNSt8_Rb_treeIPKcSt4pairIKS1_St10unique_ptrIN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcherENS5_16OrphanableDeleteEEESt10_Select1stISB_ENS5_10StringLessESaISB_EE4findERS3_ + + [A] _ZNSt8_Rb_treeIPKcSt4pairIKS1_St10unique_ptrIN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcherENS5_16OrphanableDeleteEEESt10_Select1stISB_ENS5_10StringLessESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core10Subchannel33ConnectivityStateWatcherInterfaceESt4pairIKS3_NS0_13RefCountedPtrIS2_EEESt10_Select1stIS8_ESt4lessIS3_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core10SubchannelESt4pairIKS2_iESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE17_M_emplace_uniqueIJRS2_iEEES3_ISt17_Rb_tree_iteratorIS5_EbEDpOT_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core10SubchannelESt4pairIKS2_iESt10_Select1stIS5_ESt4lessIS2_ESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core15XdsLocalityNameES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core15XdsLocalityNameESt4pairIKS2_mESt10_Select1stIS5_ENS1_4LessESaIS5_EE11equal_rangeERS4_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core15XdsLocalityNameESt4pairIKS2_mESt10_Select1stIS5_ENS1_4LessESaIS5_EE24_M_get_insert_unique_posERS4_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core15XdsLocalityNameESt4pairIKS2_mESt10_Select1stIS5_ENS1_4LessESaIS5_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS4_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core15XdsLocalityNameESt4pairIKS2_mESt10_Select1stIS5_ENS1_4LessESaIS5_EE5eraseERS4_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core15XdsLocalityNameESt4pairIKS2_mESt10_Select1stIS5_ENS1_4LessESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core19XdsClusterDropStatsES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE16_M_insert_uniqueIS2_EESt4pairISt17_Rb_tree_iteratorIS2_EbEOT_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core19XdsClusterDropStatsES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core23XdsClusterLocalityStatsES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE16_M_insert_uniqueIS2_EESt4pairISt17_Rb_tree_iteratorIS2_EbEOT_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core23XdsClusterLocalityStatsES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core33ConnectivityStateWatcherInterfaceESt4pairIKS2_St10unique_ptrIS1_NS0_16OrphanableDeleteEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE16_M_insert_uniqueIS3_IS2_S7_EEES3_ISt17_Rb_tree_iteratorIS8_EbEOT_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core33ConnectivityStateWatcherInterfaceESt4pairIKS2_St10unique_ptrIS1_NS0_16OrphanableDeleteEEESt10_Select1stIS8_ESt4lessIS2_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core9XdsClient23ClusterWatcherInterfaceESt4pairIKS3_St10unique_ptrIS2_St14default_deleteIS2_EEESt10_Select1stISA_ESt4lessIS3_ESaISA_EE24_M_get_insert_unique_posERS5_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core9XdsClient23ClusterWatcherInterfaceESt4pairIKS3_St10unique_ptrIS2_St14default_deleteIS2_EEESt10_Select1stISA_ESt4lessIS3_ESaISA_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISA_ERS5_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core9XdsClient23ClusterWatcherInterfaceESt4pairIKS3_St10unique_ptrIS2_St14default_deleteIS2_EEESt10_Select1stISA_ESt4lessIS3_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E + + [A] _ZNSt8_Rb_treeIPN9grpc_core9XdsClient24EndpointWatcherInterfaceESt4pairIKS3_St10unique_ptrIS2_St14default_deleteIS2_EEESt10_Select1stISA_ESt4lessIS3_ESaISA_EE24_M_get_insert_unique_posERS5_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core9XdsClient24EndpointWatcherInterfaceESt4pairIKS3_St10unique_ptrIS2_St14default_deleteIS2_EEESt10_Select1stISA_ESt4lessIS3_ESaISA_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISA_ERS5_ + + [A] _ZNSt8_Rb_treeIPN9grpc_core9XdsClient24EndpointWatcherInterfaceESt4pairIKS3_St10unique_ptrIS2_St14default_deleteIS2_EEESt10_Select1stISA_ESt4lessIS3_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E + + [A] _ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_N9grpc_core6XdsApi17ClusterLoadReportEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE24_M_get_insert_unique_posERS8_ + + [A] _ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_N9grpc_core6XdsApi17ClusterLoadReportEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISC_ERS8_ + + [A] _ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_N9grpc_core6XdsApi17ClusterLoadReportEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE8_M_eraseEPSt13_Rb_tree_nodeISC_E + + [A] _ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_N9grpc_core9XdsClient15LoadReportStateEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE17_M_emplace_uniqueIJS0_IS7_SB_EEEES0_ISt17_Rb_tree_iteratorISC_EbEDpOT_ + + [A] _ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_N9grpc_core9XdsClient15LoadReportStateEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE4findERS8_ + + [A] _ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_N9grpc_core9XdsClient15LoadReportStateEESt10_Select1stISC_ESt4lessIS7_ESaISC_EE8_M_eraseEPSt13_Rb_tree_nodeISC_E + + [A] _ZNSt8_Rb_treeISt4pairIPKcS2_ES0_IKS3_N9grpc_core14RegisteredCallEESt10_Select1stIS7_ESt4lessIS3_ESaIS7_EE16_M_insert_uniqueIS7_EES0_ISt17_Rb_tree_iteratorIS7_EbEOT_ + + [A] _ZNSt8_Rb_treeISt4pairIPKcS2_ES0_IKS3_N9grpc_core14RegisteredCallEESt10_Select1stIS7_ESt4lessIS3_ESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E + + [A] _ZNSt8_Rb_treeIlSt4pairIKlN9grpc_core13RefCountedPtrINS2_8channelz10SocketNodeEEEESt10_Select1stIS7_ESt4lessIlESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E + + [A] _ZNSt8_Rb_treeIlSt4pairIKlN9grpc_core13RefCountedPtrINS2_8channelz16ListenSocketNodeEEEESt10_Select1stIS7_ESt4lessIlESaIS7_EE8_M_eraseEPSt13_Rb_tree_nodeIS7_E + + [A] _ZNSt8_Rb_treeIlSt4pairIKlPN9grpc_core8channelz8BaseNodeEESt10_Select1stIS6_ESt4lessIlESaIS6_EE24_M_get_insert_unique_posERS1_ + + [A] _ZNSt8_Rb_treeIlSt4pairIKlPN9grpc_core8channelz8BaseNodeEESt10_Select1stIS6_ESt4lessIlESaIS6_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS6_ERS1_ + + [A] _ZNSt8_Rb_treeIlSt4pairIKlPN9grpc_core8channelz8BaseNodeEESt10_Select1stIS6_ESt4lessIlESaIS6_EE5eraseERS1_ + + [A] _ZNSt8_Rb_treeIlSt4pairIKlPN9grpc_core8channelz8BaseNodeEESt10_Select1stIS6_ESt4lessIlESaIS6_EE8_M_eraseEPSt13_Rb_tree_nodeIS6_E + + [A] _ZNSt8_Rb_treeIlSt4pairIKlbESt10_Select1stIS2_ESt4lessIlESaIS2_EE16_M_insert_uniqueIS0_IlbEEES0_ISt17_Rb_tree_iteratorIS2_EbEOT_ + + [A] _ZNSt8_Rb_treeIlSt4pairIKlbESt10_Select1stIS2_ESt4lessIlESaIS2_EE5eraseERS1_ + + [A] _ZNSt8_Rb_treeIlSt4pairIKlbESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E + + [A] _ZNSt8_Rb_treeImSt4pairIKmSt3setIPN9grpc_core15XdsLocalityNameESt4lessIS5_ESaIS5_EEESt10_Select1stISA_ES6_ImESaISA_EE24_M_get_insert_unique_posERS1_ + + [A] _ZNSt8_Rb_treeImSt4pairIKmSt3setIPN9grpc_core15XdsLocalityNameESt4lessIS5_ESaIS5_EEESt10_Select1stISA_ES6_ImESaISA_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISA_ERS1_ + + [A] _ZNSt8_Rb_treeImSt4pairIKmSt3setIPN9grpc_core15XdsLocalityNameESt4lessIS5_ESaIS5_EEESt10_Select1stISA_ES6_ImESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E + + [A] _ZNSt8__detail9_Map_baseI10grpc_sliceSt4pairIKS1_PKN4absl14lts_2020_02_2513InlinedVectorISt10unique_ptrIN9grpc_core19ServiceConfigParser12ParsedConfigESt14default_deleteISA_EELm4ESaISD_EEEESaISI_ENS_10_Select1stESt8equal_toIS1_ENS8_9SliceHashENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb1ELb0ELb1EEELb1EEixERS3_ + + [A] _ZSteqIcEN9__gnu_cxx11__enable_ifIXsrSt9__is_charIT_E7__valueEbE6__typeERKNSt7__cxx1112basic_stringIS3_St11char_traitsIS3_ESaIS3_EEESE_ + + [A] _ZStltINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EbRKSt4pairIT_T0_ESB_ + + [A] _ZZN4absl14lts_2020_02_2511string_view19CheckLengthInternalEmENKUlvE_clEv + + [A] _ZZN4absl14lts_2020_02_2511string_view19CheckLengthInternalEmENUlvE_4_FUNEv + + [A] _ZZN9grpc_core10Subchannel26AsyncWatcherNotifierLockedC4ENS_13RefCountedPtrINS0_33ConnectivityStateWatcherInterfaceEEEPS0_23grpc_connectivity_stateENKUlPvP10grpc_errorE_clES7_S9_ + + [A] _ZZN9grpc_core10Subchannel26AsyncWatcherNotifierLockedC4ENS_13RefCountedPtrINS0_33ConnectivityStateWatcherInterfaceEEEPS0_23grpc_connectivity_stateENUlPvP10grpc_errorE_4_FUNES7_S9_ + + [A] _ZZN9grpc_core16ThreadPoolWorkerC4EPKcPNS_18MPMCQueueInterfaceERNS_6Thread7OptionsEiENKUlPvE_clES8_ + + [A] _ZZN9grpc_core16ThreadPoolWorkerC4EPKcPNS_18MPMCQueueInterfaceERNS_6Thread7OptionsEiENUlPvE_4_FUNES8_ + + [A] _ZZNK4absl14lts_2020_02_2511string_view4backEvENKUlvE_clEv + + [A] _ZZNK4absl14lts_2020_02_2511string_view4backEvENUlvE_4_FUNEv + + [A] grpc_auth_metadata_context_copy + + [A] grpc_auth_metadata_context_reset + + [A] grpc_sts_credentials_create + + [A] grpc_tls_credentials_create + + [A] grpc_tls_credentials_options_set_server_verification_option + + [A] grpc_tls_key_materials_config_get_version + + [A] grpc_tls_key_materials_config_set_version + + [A] grpc_tls_server_credentials_create + + + +47 Removed variable symbols not referenced by debug info: + + + + _ZN9grpc_core17grpc_lb_xds_traceE + + _ZN9grpc_core4Fork13thread_state_E + + _ZN9grpc_core4Fork15exec_ctx_state_E + + _ZN9grpc_core4Fork16support_enabled_E + + _ZN9grpc_core4Fork17override_enabled_E + + _ZN9grpc_core4Fork27reset_child_polling_engine_E + + _ZTV17SpiffeCredentials + + _ZTV23SpiffeServerCredentials + + _ZTV29SpiffeServerSecurityConnector + + _ZTV30SpiffeChannelSecurityConnector + + _ZTVN9grpc_core14SliceHashTableIPKNS_13InlinedVectorISt10unique_ptrINS_13ServiceConfig12ParsedConfigENS_13DefaultDeleteIS4_EEELm4EEEEE + + _ZTVN9grpc_core14SliceHashTableISt10unique_ptrIcNS_13DefaultDeleteIcEEEEE + + _ZTVN9grpc_core16XdsLbClientStatsE + + g_hash_seed + + google_protobuf_Duration_fields + + google_protobuf_Timestamp_fields + + gpr_now_impl + + grpc_connectivity_state_trace + + grpc_gcp_AltsContext_fields + + grpc_gcp_Endpoint_fields + + grpc_gcp_HandshakerReq_fields + + grpc_gcp_HandshakerResp_fields + + grpc_gcp_HandshakerResult_fields + + grpc_gcp_HandshakerStatus_fields + + grpc_gcp_Identity_fields + + grpc_gcp_NextHandshakeMessageReq_fields + + grpc_gcp_RpcProtocolVersions_Version_fields + + grpc_gcp_RpcProtocolVersions_fields + + grpc_gcp_ServerHandshakeParameters_fields + + grpc_gcp_StartClientHandshakeReq_fields + + grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_fields + + grpc_gcp_StartServerHandshakeReq_fields + + grpc_health_v1_HealthCheckRequest_fields + + grpc_health_v1_HealthCheckResponse_fields + + grpc_lb_v1_ClientStatsPerToken_fields + + grpc_lb_v1_ClientStats_fields + + grpc_lb_v1_InitialLoadBalanceRequest_fields + + grpc_lb_v1_InitialLoadBalanceResponse_fields + + grpc_lb_v1_LoadBalanceRequest_fields + + grpc_lb_v1_LoadBalanceResponse_fields + + grpc_lb_v1_ServerList_fields + + grpc_lb_v1_Server_fields + + grpc_schedule_on_exec_ctx + + grpc_server_channel_trace + + grpc_static_mdelem_table + + grpc_static_metadata_refcounts + + grpc_static_slice_table + + + +786 Added variable symbols not referenced by debug info: + + + + [A] _ZN9grpc_core11g_hash_seedE + + [A] _ZN9grpc_core13kNoopRefcountE + + [A] _ZN9grpc_core17grpc_cds_lb_traceE + + [A] _ZN9grpc_core17grpc_lb_eds_traceE + + [A] _ZN9grpc_core17grpc_lb_lrs_traceE + + [A] _ZN9grpc_core19StaticSliceRefcount18kStaticSubRefcountE + + [A] _ZN9grpc_core21g_static_mdelem_tableE + + [A] _ZN9grpc_core21grpc_xds_client_traceE + + [A] _ZN9grpc_core22grpc_lb_priority_traceE + + [A] _ZN9grpc_core22grpc_thread_pool_traceE + + [A] _ZN9grpc_core23MessageDecompressFilterE + + [A] _ZN9grpc_core23grpc_xds_resolver_traceE + + [A] _ZN9grpc_core25grpc_server_channel_traceE + + [A] _ZN9grpc_core25grpc_xds_routing_lb_traceE + + [A] _ZN9grpc_core25kGrpcLbLbTokenMetadataKeyE + + [A] _ZN9grpc_core26g_static_mdelem_manifestedE + + [A] _ZN9grpc_core26grpc_work_serializer_traceE + + [A] _ZN9grpc_core29g_static_metadata_slice_tableE + + [A] _ZN9grpc_core29grpc_connectivity_state_traceE + + [A] _ZN9grpc_core29grpc_lb_weighted_target_traceE + + [A] _ZN9grpc_core29grpc_trace_client_idle_filterE + + [A] _ZN9grpc_core29kGrpcLbClientStatsMetadataKeyE + + [A] _ZN9grpc_core33g_static_metadata_slice_refcountsE + + [A] _ZN9grpc_core6XdsApi11kCdsTypeUrlE + + [A] _ZN9grpc_core6XdsApi11kEdsTypeUrlE + + [A] _ZN9grpc_core6XdsApi11kLdsTypeUrlE + + [A] _ZN9grpc_core6XdsApi11kRdsTypeUrlE + + [A] _ZN9grpc_core9XdsClient16kXdsClientVtableE + + [A] _ZTI11ExecCtxNext + + [A] _ZTI12ExecCtxPluck + + [A] _ZTI14TlsCredentials + + [A] _ZTI20TlsServerCredentials + + [A] _ZTI20grpc_ssl_credentials + + [A] _ZTI21grpc_alts_credentials + + [A] _ZTI21grpc_call_credentials + + [A] _ZTI22grpc_local_credentials + + [A] _ZTI22grpc_tls_error_details + + [A] _ZTI23grpc_plugin_credentials + + [A] _ZTI23grpc_security_connector + + [A] _ZTI23grpc_server_credentials + + [A] _ZTI24grpc_channel_credentials + + [A] _ZTI27grpc_google_iam_credentials + + [A] _ZTI27grpc_ssl_server_credentials + + [A] _ZTI28grpc_alts_server_credentials + + [A] _ZTI28grpc_tls_credentials_options + + [A] _ZTI29grpc_access_token_credentials + + [A] _ZTI29grpc_local_server_credentials + + [A] _ZTI29grpc_md_only_test_credentials + + [A] _ZTI29grpc_tls_key_materials_config + + [A] _ZTI30grpc_server_security_connector + + [A] _ZTI31grpc_channel_security_connector + + [A] _ZTI31grpc_composite_call_credentials + + [A] _ZTI33grpc_tls_credential_reload_config + + [A] _ZTI34grpc_composite_channel_credentials + + [A] _ZTI37grpc_google_refresh_token_credentials + + [A] _ZTI37grpc_oauth2_token_fetcher_credentials + + [A] _ZTI39grpc_google_default_channel_credentials + + [A] _ZTI42grpc_tls_server_authorization_check_config + + [A] _ZTI43grpc_httpcli_ssl_channel_security_connector + + [A] _ZTI43grpc_service_account_jwt_access_credentials + + [A] _ZTIN3tsi16SslCachedSessionE + + [A] _ZTIN3tsi18SslSessionLRUCacheE + + [A] _ZTIN4grpc12experimental17LibuvEventManagerE + + [A] _ZTIN9grpc_core10ByteStreamE + + [A] _ZTIN9grpc_core10HandshakerE + + [A] _ZTIN9grpc_core10OrphanableE + + [A] _ZTIN9grpc_core10RefCountedI21grpc_call_credentialsNS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedI22grpc_tls_error_detailsNS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedI23grpc_security_connectorNS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedI23grpc_server_credentialsNS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedI24grpc_channel_credentialsNS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedI28grpc_tls_credentials_optionsNS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedI29grpc_tls_key_materials_configNS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedI33grpc_tls_credential_reload_configNS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedI42grpc_tls_server_authorization_check_configNS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedIN3tsi18SslSessionLRUCacheENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_10HandshakerENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_10Subchannel33ConnectivityStateWatcherInterfaceENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_13ServiceConfigENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_14ConfigSelectorENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_14SliceHashTableISt10unique_ptrIcNS_17DefaultDeleteCharEEEENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_15XdsLocalityNameENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_16HandshakeManagerENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_17GrpcLbClientStatsENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_19ConnectedSubchannelENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_19LoadBalancingPolicy6ConfigENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_19SubchannelInterfaceENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_19XdsClusterDropStatsENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_23SubchannelPoolInterfaceENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_23XdsClusterLocalityStatsENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_29FakeResolverResponseGeneratorENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_6XdsApi10DropConfigENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_8channelz8BaseNodeENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10RefCountedINS_8internal23ServerRetryThrottleDataENS_19PolymorphicRefCountEEE + + [A] _ZTIN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcherE + + [A] _ZTIN9grpc_core10Subchannel31ConnectedSubchannelStateWatcherE + + [A] _ZTIN9grpc_core10Subchannel33ConnectivityStateWatcherInterfaceE + + [A] _ZTIN9grpc_core10ThreadPoolE + + [A] _ZTIN9grpc_core12FakeResolverE + + [A] _ZTIN9grpc_core12GrpcPolledFdE + + [A] _ZTIN9grpc_core13ServiceConfigE + + [A] _ZTIN9grpc_core14ConfigSelectorE + + [A] _ZTIN9grpc_core14SliceHashTableISt10unique_ptrIcNS_17DefaultDeleteCharEEEE + + [A] _ZTIN9grpc_core14WorkSerializer18WorkSerializerImplE + + [A] _ZTIN9grpc_core15ByteStreamCache17CachingByteStreamE + + [A] _ZTIN9grpc_core15Chttp2ConnectorE + + [A] _ZTIN9grpc_core15InfLenFIFOQueueE + + [A] _ZTIN9grpc_core15ResolverFactoryE + + [A] _ZTIN9grpc_core15XdsLocalityNameE + + [A] _ZTIN9grpc_core16HandshakeManagerE + + [A] _ZTIN9grpc_core17GrpcLbClientStatsE + + [A] _ZTIN9grpc_core17GrpcPolledFdPosixE + + [A] _ZTIN9grpc_core17HandshakerFactoryE + + [A] _ZTIN9grpc_core17HealthCheckClient9CallStateE + + [A] _ZTIN9grpc_core17HealthCheckClientE + + [A] _ZTIN9grpc_core17MessageSizeParserE + + [A] _ZTIN9grpc_core18ChildPolicyHandler6HelperE + + [A] _ZTIN9grpc_core18ChildPolicyHandlerE + + [A] _ZTIN9grpc_core18MPMCQueueInterfaceE + + [A] _ZTIN9grpc_core18TcpServerFdHandlerE + + [A] _ZTIN9grpc_core19ConnectedSubchannelE + + [A] _ZTIN9grpc_core19ConnectivityWatcherE + + [A] _ZTIN9grpc_core19GrpcPolledFdFactoryE + + [A] _ZTIN9grpc_core19LoadBalancingPolicy11QueuePickerE + + [A] _ZTIN9grpc_core19LoadBalancingPolicy16SubchannelPickerE + + [A] _ZTIN9grpc_core19LoadBalancingPolicy17MetadataInterfaceE + + [A] _ZTIN9grpc_core19LoadBalancingPolicy20ChannelControlHelperE + + [A] _ZTIN9grpc_core19LoadBalancingPolicy22TransientFailurePickerE + + [A] _ZTIN9grpc_core19LoadBalancingPolicy6ConfigE + + [A] _ZTIN9grpc_core19LoadBalancingPolicy9CallStateE + + [A] _ZTIN9grpc_core19LoadBalancingPolicyE + + [A] _ZTIN9grpc_core19LocalSubchannelPoolE + + [A] _ZTIN9grpc_core19PolymorphicRefCountE + + [A] _ZTIN9grpc_core19ServiceConfigParser12ParsedConfigE + + [A] _ZTIN9grpc_core19ServiceConfigParser6ParserE + + [A] _ZTIN9grpc_core19SubchannelConnectorE + + [A] _ZTIN9grpc_core19SubchannelInterface33ConnectivityStateWatcherInterfaceE + + [A] _ZTIN9grpc_core19SubchannelInterfaceE + + [A] _ZTIN9grpc_core19ThreadPoolInterfaceE + + [A] _ZTIN9grpc_core19XdsClusterDropStatsE + + [A] _ZTIN9grpc_core20ClientChannelFactoryE + + [A] _ZTIN9grpc_core20GlobalSubchannelPoolE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_17HealthCheckClientEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_19LoadBalancingPolicyEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_19SubchannelConnectorEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_33ConnectivityStateWatcherInterfaceEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_8ResolverEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12AdsCallState13ResourceStateEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12AdsCallStateEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12LrsCallState8ReporterEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12LrsCallStateEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState13RetryableCallINS2_12AdsCallStateEEEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState13RetryableCallINS2_12LrsCallStateEEEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelStateEEE + + [A] _ZTIN9grpc_core20InternallyRefCountedINS_9XdsClientEEE + + [A] _ZTIN9grpc_core20ProxyMapperInterfaceE + + [A] _ZTIN9grpc_core21DefaultConfigSelectorE + + [A] _ZTIN9grpc_core21SliceBufferByteStreamE + + [A] _ZTIN9grpc_core23MessageSizeParsedConfigE + + [A] _ZTIN9grpc_core23ServerListenerInterfaceE + + [A] _ZTIN9grpc_core23SubchannelPoolInterfaceE + + [A] _ZTIN9grpc_core23XdsClusterLocalityStatsE + + [A] _ZTIN9grpc_core24Chttp2IncomingByteStreamE + + [A] _ZTIN9grpc_core24GrpcPolledFdFactoryPosixE + + [A] _ZTIN9grpc_core26LoadBalancingPolicyFactoryE + + [A] _ZTIN9grpc_core26TlsServerSecurityConnectorE + + [A] _ZTIN9grpc_core27TlsChannelSecurityConnectorE + + [A] _ZTIN9grpc_core28ResolvingLoadBalancingPolicy19ChannelConfigHelperE + + [A] _ZTIN9grpc_core28ResolvingLoadBalancingPolicy21ResolverResultHandlerE + + [A] _ZTIN9grpc_core28ResolvingLoadBalancingPolicy22ResolvingControlHelperE + + [A] _ZTIN9grpc_core28ResolvingLoadBalancingPolicyE + + [A] _ZTIN9grpc_core29FakeResolverResponseGeneratorE + + [A] _ZTIN9grpc_core32Chttp2SecureClientChannelFactoryE + + [A] _ZTIN9grpc_core33ConnectivityStateWatcherInterfaceE + + [A] _ZTIN9grpc_core34Chttp2InsecureClientChannelFactoryE + + [A] _ZTIN9grpc_core38AsyncConnectivityStateWatcherInterfaceE + + [A] _ZTIN9grpc_core6XdsApi10DropConfigE + + [A] _ZTIN9grpc_core6chttp217StreamFlowControlE + + [A] _ZTIN9grpc_core6chttp220TransportFlowControlE + + [A] _ZTIN9grpc_core6chttp221StreamFlowControlBaseE + + [A] _ZTIN9grpc_core6chttp224TransportFlowControlBaseE + + [A] _ZTIN9grpc_core6chttp225StreamFlowControlDisabledE + + [A] _ZTIN9grpc_core6chttp228TransportFlowControlDisabledE + + [A] _ZTIN9grpc_core7ExecCtxE + + [A] _ZTIN9grpc_core8Resolver13ResultHandlerE + + [A] _ZTIN9grpc_core8ResolverE + + [A] _ZTIN9grpc_core8channelz10ServerNodeE + + [A] _ZTIN9grpc_core8channelz10SocketNodeE + + [A] _ZTIN9grpc_core8channelz11ChannelNodeE + + [A] _ZTIN9grpc_core8channelz14SubchannelNodeE + + [A] _ZTIN9grpc_core8channelz16ListenSocketNodeE + + [A] _ZTIN9grpc_core8channelz8BaseNodeE + + [A] _ZTIN9grpc_core8internal23ServerRetryThrottleDataE + + [A] _ZTIN9grpc_core8internal31ClientChannelGlobalParsedConfigE + + [A] _ZTIN9grpc_core8internal31ClientChannelMethodParsedConfigE + + [A] _ZTIN9grpc_core8internal32ClientChannelServiceConfigParserE + + [A] _ZTIN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateE + + [A] _ZTIN9grpc_core9XdsClient12ChannelState12AdsCallStateE + + [A] _ZTIN9grpc_core9XdsClient12ChannelState12LrsCallState8ReporterE + + [A] _ZTIN9grpc_core9XdsClient12ChannelState12LrsCallStateE + + [A] _ZTIN9grpc_core9XdsClient12ChannelState12StateWatcherE + + [A] _ZTIN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEEE + + [A] _ZTIN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEEE + + [A] _ZTIN9grpc_core9XdsClient12ChannelStateE + + [A] _ZTIN9grpc_core9XdsClient23ClusterWatcherInterfaceE + + [A] _ZTIN9grpc_core9XdsClient24EndpointWatcherInterfaceE + + [A] _ZTIN9grpc_core9XdsClient29ServiceConfigWatcherInterfaceE + + [A] _ZTIN9grpc_core9XdsClientE + + [A] _ZTISt11_Mutex_baseILN9__gnu_cxx12_Lock_policyE2EE + + [A] _ZTISt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE + + [A] _ZTISt19_Sp_make_shared_tag + + [A] _ZTISt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE + + [A] _ZTIZN9grpc_core38AsyncConnectivityStateWatcherInterface8NotifierC4ENS_13RefCountedPtrIS0_EE23grpc_connectivity_stateRKSt10shared_ptrINS_14WorkSerializerEEEUlvE_ + + [A] _ZTIZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceState7OnTimerEPvP10grpc_errorEUlvE_ + + [A] _ZTIZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_ + + [A] _ZTIZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_ + + [A] _ZTS11ExecCtxNext + + [A] _ZTS12ExecCtxPluck + + [A] _ZTS14TlsCredentials + + [A] _ZTS20TlsServerCredentials + + [A] _ZTS20grpc_ssl_credentials + + [A] _ZTS21grpc_alts_credentials + + [A] _ZTS21grpc_call_credentials + + [A] _ZTS22grpc_local_credentials + + [A] _ZTS22grpc_tls_error_details + + [A] _ZTS23grpc_plugin_credentials + + [A] _ZTS23grpc_security_connector + + [A] _ZTS23grpc_server_credentials + + [A] _ZTS24grpc_channel_credentials + + [A] _ZTS27grpc_google_iam_credentials + + [A] _ZTS27grpc_ssl_server_credentials + + [A] _ZTS28grpc_alts_server_credentials + + [A] _ZTS28grpc_tls_credentials_options + + [A] _ZTS29grpc_access_token_credentials + + [A] _ZTS29grpc_local_server_credentials + + [A] _ZTS29grpc_md_only_test_credentials + + [A] _ZTS29grpc_tls_key_materials_config + + [A] _ZTS30grpc_server_security_connector + + [A] _ZTS31grpc_channel_security_connector + + [A] _ZTS31grpc_composite_call_credentials + + [A] _ZTS33grpc_tls_credential_reload_config + + [A] _ZTS34grpc_composite_channel_credentials + + [A] _ZTS37grpc_google_refresh_token_credentials + + [A] _ZTS37grpc_oauth2_token_fetcher_credentials + + [A] _ZTS39grpc_google_default_channel_credentials + + [A] _ZTS42grpc_tls_server_authorization_check_config + + [A] _ZTS43grpc_httpcli_ssl_channel_security_connector + + [A] _ZTS43grpc_service_account_jwt_access_credentials + + [A] _ZTSN3tsi16SslCachedSessionE + + [A] _ZTSN3tsi18SslSessionLRUCacheE + + [A] _ZTSN4grpc12experimental17LibuvEventManagerE + + [A] _ZTSN9grpc_core10ByteStreamE + + [A] _ZTSN9grpc_core10HandshakerE + + [A] _ZTSN9grpc_core10OrphanableE + + [A] _ZTSN9grpc_core10RefCountedI21grpc_call_credentialsNS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedI22grpc_tls_error_detailsNS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedI23grpc_security_connectorNS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedI23grpc_server_credentialsNS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedI24grpc_channel_credentialsNS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedI28grpc_tls_credentials_optionsNS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedI29grpc_tls_key_materials_configNS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedI33grpc_tls_credential_reload_configNS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedI42grpc_tls_server_authorization_check_configNS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedIN3tsi18SslSessionLRUCacheENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_10HandshakerENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_10Subchannel33ConnectivityStateWatcherInterfaceENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_13ServiceConfigENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_14ConfigSelectorENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_14SliceHashTableISt10unique_ptrIcNS_17DefaultDeleteCharEEEENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_15XdsLocalityNameENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_16HandshakeManagerENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_17GrpcLbClientStatsENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_19ConnectedSubchannelENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_19LoadBalancingPolicy6ConfigENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_19SubchannelInterfaceENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_19XdsClusterDropStatsENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_23SubchannelPoolInterfaceENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_23XdsClusterLocalityStatsENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_29FakeResolverResponseGeneratorENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_6XdsApi10DropConfigENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_8channelz8BaseNodeENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10RefCountedINS_8internal23ServerRetryThrottleDataENS_19PolymorphicRefCountEEE + + [A] _ZTSN9grpc_core10Subchannel16HealthWatcherMap13HealthWatcherE + + [A] _ZTSN9grpc_core10Subchannel31ConnectedSubchannelStateWatcherE + + [A] _ZTSN9grpc_core10Subchannel33ConnectivityStateWatcherInterfaceE + + [A] _ZTSN9grpc_core10ThreadPoolE + + [A] _ZTSN9grpc_core12FakeResolverE + + [A] _ZTSN9grpc_core12GrpcPolledFdE + + [A] _ZTSN9grpc_core13ServiceConfigE + + [A] _ZTSN9grpc_core14ConfigSelectorE + + [A] _ZTSN9grpc_core14SliceHashTableISt10unique_ptrIcNS_17DefaultDeleteCharEEEE + + [A] _ZTSN9grpc_core14WorkSerializer18WorkSerializerImplE + + [A] _ZTSN9grpc_core15ByteStreamCache17CachingByteStreamE + + [A] _ZTSN9grpc_core15Chttp2ConnectorE + + [A] _ZTSN9grpc_core15InfLenFIFOQueueE + + [A] _ZTSN9grpc_core15ResolverFactoryE + + [A] _ZTSN9grpc_core15XdsLocalityNameE + + [A] _ZTSN9grpc_core16HandshakeManagerE + + [A] _ZTSN9grpc_core17GrpcLbClientStatsE + + [A] _ZTSN9grpc_core17GrpcPolledFdPosixE + + [A] _ZTSN9grpc_core17HandshakerFactoryE + + [A] _ZTSN9grpc_core17HealthCheckClient9CallStateE + + [A] _ZTSN9grpc_core17HealthCheckClientE + + [A] _ZTSN9grpc_core17MessageSizeParserE + + [A] _ZTSN9grpc_core18ChildPolicyHandler6HelperE + + [A] _ZTSN9grpc_core18ChildPolicyHandlerE + + [A] _ZTSN9grpc_core18MPMCQueueInterfaceE + + [A] _ZTSN9grpc_core18TcpServerFdHandlerE + + [A] _ZTSN9grpc_core19ConnectedSubchannelE + + [A] _ZTSN9grpc_core19ConnectivityWatcherE + + [A] _ZTSN9grpc_core19GrpcPolledFdFactoryE + + [A] _ZTSN9grpc_core19LoadBalancingPolicy11QueuePickerE + + [A] _ZTSN9grpc_core19LoadBalancingPolicy16SubchannelPickerE + + [A] _ZTSN9grpc_core19LoadBalancingPolicy17MetadataInterfaceE + + [A] _ZTSN9grpc_core19LoadBalancingPolicy20ChannelControlHelperE + + [A] _ZTSN9grpc_core19LoadBalancingPolicy22TransientFailurePickerE + + [A] _ZTSN9grpc_core19LoadBalancingPolicy6ConfigE + + [A] _ZTSN9grpc_core19LoadBalancingPolicy9CallStateE + + [A] _ZTSN9grpc_core19LoadBalancingPolicyE + + [A] _ZTSN9grpc_core19LocalSubchannelPoolE + + [A] _ZTSN9grpc_core19PolymorphicRefCountE + + [A] _ZTSN9grpc_core19ServiceConfigParser12ParsedConfigE + + [A] _ZTSN9grpc_core19ServiceConfigParser6ParserE + + [A] _ZTSN9grpc_core19SubchannelConnectorE + + [A] _ZTSN9grpc_core19SubchannelInterface33ConnectivityStateWatcherInterfaceE + + [A] _ZTSN9grpc_core19SubchannelInterfaceE + + [A] _ZTSN9grpc_core19ThreadPoolInterfaceE + + [A] _ZTSN9grpc_core19XdsClusterDropStatsE + + [A] _ZTSN9grpc_core20ClientChannelFactoryE + + [A] _ZTSN9grpc_core20GlobalSubchannelPoolE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_17HealthCheckClientEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_19LoadBalancingPolicyEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_19SubchannelConnectorEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_33ConnectivityStateWatcherInterfaceEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_8ResolverEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12AdsCallState13ResourceStateEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12AdsCallStateEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12LrsCallState8ReporterEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState12LrsCallStateEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState13RetryableCallINS2_12AdsCallStateEEEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelState13RetryableCallINS2_12LrsCallStateEEEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClient12ChannelStateEEE + + [A] _ZTSN9grpc_core20InternallyRefCountedINS_9XdsClientEEE + + [A] _ZTSN9grpc_core20ProxyMapperInterfaceE + + [A] _ZTSN9grpc_core21DefaultConfigSelectorE + + [A] _ZTSN9grpc_core21SliceBufferByteStreamE + + [A] _ZTSN9grpc_core23MessageSizeParsedConfigE + + [A] _ZTSN9grpc_core23ServerListenerInterfaceE + + [A] _ZTSN9grpc_core23SubchannelPoolInterfaceE + + [A] _ZTSN9grpc_core23XdsClusterLocalityStatsE + + [A] _ZTSN9grpc_core24Chttp2IncomingByteStreamE + + [A] _ZTSN9grpc_core24GrpcPolledFdFactoryPosixE + + [A] _ZTSN9grpc_core26LoadBalancingPolicyFactoryE + + [A] _ZTSN9grpc_core26TlsServerSecurityConnectorE + + [A] _ZTSN9grpc_core27TlsChannelSecurityConnectorE + + [A] _ZTSN9grpc_core28ResolvingLoadBalancingPolicy19ChannelConfigHelperE + + [A] _ZTSN9grpc_core28ResolvingLoadBalancingPolicy21ResolverResultHandlerE + + [A] _ZTSN9grpc_core28ResolvingLoadBalancingPolicy22ResolvingControlHelperE + + [A] _ZTSN9grpc_core28ResolvingLoadBalancingPolicyE + + [A] _ZTSN9grpc_core29FakeResolverResponseGeneratorE + + [A] _ZTSN9grpc_core32Chttp2SecureClientChannelFactoryE + + [A] _ZTSN9grpc_core33ConnectivityStateWatcherInterfaceE + + [A] _ZTSN9grpc_core34Chttp2InsecureClientChannelFactoryE + + [A] _ZTSN9grpc_core38AsyncConnectivityStateWatcherInterfaceE + + [A] _ZTSN9grpc_core6XdsApi10DropConfigE + + [A] _ZTSN9grpc_core6chttp217StreamFlowControlE + + [A] _ZTSN9grpc_core6chttp220TransportFlowControlE + + [A] _ZTSN9grpc_core6chttp221StreamFlowControlBaseE + + [A] _ZTSN9grpc_core6chttp224TransportFlowControlBaseE + + [A] _ZTSN9grpc_core6chttp225StreamFlowControlDisabledE + + [A] _ZTSN9grpc_core6chttp228TransportFlowControlDisabledE + + [A] _ZTSN9grpc_core7ExecCtxE + + [A] _ZTSN9grpc_core8Resolver13ResultHandlerE + + [A] _ZTSN9grpc_core8ResolverE + + [A] _ZTSN9grpc_core8channelz10ServerNodeE + + [A] _ZTSN9grpc_core8channelz10SocketNodeE + + [A] _ZTSN9grpc_core8channelz11ChannelNodeE + + [A] _ZTSN9grpc_core8channelz14SubchannelNodeE + + [A] _ZTSN9grpc_core8channelz16ListenSocketNodeE + + [A] _ZTSN9grpc_core8channelz8BaseNodeE + + [A] _ZTSN9grpc_core8internal23ServerRetryThrottleDataE + + [A] _ZTSN9grpc_core8internal31ClientChannelGlobalParsedConfigE + + [A] _ZTSN9grpc_core8internal31ClientChannelMethodParsedConfigE + + [A] _ZTSN9grpc_core8internal32ClientChannelServiceConfigParserE + + [A] _ZTSN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateE + + [A] _ZTSN9grpc_core9XdsClient12ChannelState12AdsCallStateE + + [A] _ZTSN9grpc_core9XdsClient12ChannelState12LrsCallState8ReporterE + + [A] _ZTSN9grpc_core9XdsClient12ChannelState12LrsCallStateE + + [A] _ZTSN9grpc_core9XdsClient12ChannelState12StateWatcherE + + [A] _ZTSN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEEE + + [A] _ZTSN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEEE + + [A] _ZTSN9grpc_core9XdsClient12ChannelStateE + + [A] _ZTSN9grpc_core9XdsClient23ClusterWatcherInterfaceE + + [A] _ZTSN9grpc_core9XdsClient24EndpointWatcherInterfaceE + + [A] _ZTSN9grpc_core9XdsClient29ServiceConfigWatcherInterfaceE + + [A] _ZTSN9grpc_core9XdsClientE + + [A] _ZTSSt11_Mutex_baseILN9__gnu_cxx12_Lock_policyE2EE + + [A] _ZTSSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE + + [A] _ZTSSt19_Sp_make_shared_tag + + [A] _ZTSSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE + + [A] _ZTSZN9grpc_core38AsyncConnectivityStateWatcherInterface8NotifierC4ENS_13RefCountedPtrIS0_EE23grpc_connectivity_stateRKSt10shared_ptrINS_14WorkSerializerEEEUlvE_ + + [A] _ZTSZN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceState7OnTimerEPvP10grpc_errorEUlvE_ + + [A] _ZTSZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_ + + [A] _ZTSZN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEE12OnRetryTimerEPvP10grpc_errorEUlvE_ + + [A] _ZTV14TlsCredentials + + [A] _ZTV20TlsServerCredentials + + [A] _ZTV22grpc_tls_error_details + + [A] _ZTVN4grpc12experimental17LibuvEventManagerE + + [A] _ZTVN9grpc_core10Subchannel31ConnectedSubchannelStateWatcherE + + [A] _ZTVN9grpc_core10Subchannel33ConnectivityStateWatcherInterfaceE + + [A] _ZTVN9grpc_core10ThreadPoolE + + [A] _ZTVN9grpc_core14SliceHashTableISt10unique_ptrIcNS_17DefaultDeleteCharEEEE + + [A] _ZTVN9grpc_core14WorkSerializer18WorkSerializerImplE + + [A] _ZTVN9grpc_core15Chttp2ConnectorE + + [A] _ZTVN9grpc_core15InfLenFIFOQueueE + + [A] _ZTVN9grpc_core15XdsLocalityNameE + + [A] _ZTVN9grpc_core18ChildPolicyHandler6HelperE + + [A] _ZTVN9grpc_core18ChildPolicyHandlerE + + [A] _ZTVN9grpc_core19ConnectivityWatcherE + + [A] _ZTVN9grpc_core19XdsClusterDropStatsE + + [A] _ZTVN9grpc_core21DefaultConfigSelectorE + + [A] _ZTVN9grpc_core23XdsClusterLocalityStatsE + + [A] _ZTVN9grpc_core26TlsServerSecurityConnectorE + + [A] _ZTVN9grpc_core27TlsChannelSecurityConnectorE + + [A] _ZTVN9grpc_core38AsyncConnectivityStateWatcherInterfaceE + + [A] _ZTVN9grpc_core6XdsApi10DropConfigE + + [A] _ZTVN9grpc_core9XdsClient12ChannelState12AdsCallState13ResourceStateE + + [A] _ZTVN9grpc_core9XdsClient12ChannelState12AdsCallStateE + + [A] _ZTVN9grpc_core9XdsClient12ChannelState12LrsCallState8ReporterE + + [A] _ZTVN9grpc_core9XdsClient12ChannelState12LrsCallStateE + + [A] _ZTVN9grpc_core9XdsClient12ChannelState12StateWatcherE + + [A] _ZTVN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12AdsCallStateEEE + + [A] _ZTVN9grpc_core9XdsClient12ChannelState13RetryableCallINS1_12LrsCallStateEEE + + [A] _ZTVN9grpc_core9XdsClient12ChannelStateE + + [A] _ZTVN9grpc_core9XdsClientE + + [A] _ZTVSt23_Sp_counted_ptr_inplaceIN9grpc_core14WorkSerializerESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE + + [A] envoy_annotations_ResourceAnnotation_msginit + + [A] envoy_api_v2_CdsDummy_msginit + + [A] envoy_api_v2_ClusterLoadAssignment_NamedEndpointsEntry_msginit + + [A] envoy_api_v2_ClusterLoadAssignment_Policy_DropOverload_msginit + + [A] envoy_api_v2_ClusterLoadAssignment_Policy_msginit + + [A] envoy_api_v2_ClusterLoadAssignment_msginit + + [A] envoy_api_v2_Cluster_CommonLbConfig_ConsistentHashingLbConfig_msginit + + [A] envoy_api_v2_Cluster_CommonLbConfig_LocalityWeightedLbConfig_msginit + + [A] envoy_api_v2_Cluster_CommonLbConfig_ZoneAwareLbConfig_msginit + + [A] envoy_api_v2_Cluster_CommonLbConfig_msginit + + [A] envoy_api_v2_Cluster_CustomClusterType_msginit + + [A] envoy_api_v2_Cluster_EdsClusterConfig_msginit + + [A] envoy_api_v2_Cluster_ExtensionProtocolOptionsEntry_msginit + + [A] envoy_api_v2_Cluster_LbSubsetConfig_LbSubsetSelector_msginit + + [A] envoy_api_v2_Cluster_LbSubsetConfig_msginit + + [A] envoy_api_v2_Cluster_LeastRequestLbConfig_msginit + + [A] envoy_api_v2_Cluster_OriginalDstLbConfig_msginit + + [A] envoy_api_v2_Cluster_RefreshRate_msginit + + [A] envoy_api_v2_Cluster_RingHashLbConfig_msginit + + [A] envoy_api_v2_Cluster_TransportSocketMatch_msginit + + [A] envoy_api_v2_Cluster_TypedExtensionProtocolOptionsEntry_msginit + + [A] envoy_api_v2_Cluster_msginit + + [A] envoy_api_v2_DeltaDiscoveryRequest_InitialResourceVersionsEntry_msginit + + [A] envoy_api_v2_DeltaDiscoveryRequest_msginit + + [A] envoy_api_v2_DeltaDiscoveryResponse_msginit + + [A] envoy_api_v2_DiscoveryRequest_msginit + + [A] envoy_api_v2_DiscoveryResponse_msginit + + [A] envoy_api_v2_EdsDummy_msginit + + [A] envoy_api_v2_LdsDummy_msginit + + [A] envoy_api_v2_Listener_ConnectionBalanceConfig_ExactBalance_msginit + + [A] envoy_api_v2_Listener_ConnectionBalanceConfig_msginit + + [A] envoy_api_v2_Listener_DeprecatedV1_msginit + + [A] envoy_api_v2_Listener_msginit + + [A] envoy_api_v2_LoadBalancingPolicy_Policy_msginit + + [A] envoy_api_v2_LoadBalancingPolicy_msginit + + [A] envoy_api_v2_RdsDummy_msginit + + [A] envoy_api_v2_Resource_msginit + + [A] envoy_api_v2_RouteConfiguration_msginit + + [A] envoy_api_v2_ScopedRouteConfiguration_Key_Fragment_msginit + + [A] envoy_api_v2_ScopedRouteConfiguration_Key_msginit + + [A] envoy_api_v2_ScopedRouteConfiguration_msginit + + [A] envoy_api_v2_SrdsDummy_msginit + + [A] envoy_api_v2_UpstreamBindConfig_msginit + + [A] envoy_api_v2_UpstreamConnectionOptions_msginit + + [A] envoy_api_v2_Vhds_msginit + + [A] envoy_api_v2_auth_CertificateValidationContext_msginit + + [A] envoy_api_v2_auth_CommonTlsContext_CombinedCertificateValidationContext_msginit + + [A] envoy_api_v2_auth_CommonTlsContext_msginit + + [A] envoy_api_v2_auth_DownstreamTlsContext_msginit + + [A] envoy_api_v2_auth_GenericSecret_msginit + + [A] envoy_api_v2_auth_PrivateKeyProvider_msginit + + [A] envoy_api_v2_auth_SdsSecretConfig_msginit + + [A] envoy_api_v2_auth_Secret_msginit + + [A] envoy_api_v2_auth_TlsCertificate_msginit + + [A] envoy_api_v2_auth_TlsParameters_msginit + + [A] envoy_api_v2_auth_TlsSessionTicketKeys_msginit + + [A] envoy_api_v2_auth_UpstreamTlsContext_msginit + + [A] envoy_api_v2_cluster_CircuitBreakers_Thresholds_RetryBudget_msginit + + [A] envoy_api_v2_cluster_CircuitBreakers_Thresholds_msginit + + [A] envoy_api_v2_cluster_CircuitBreakers_msginit + + [A] envoy_api_v2_cluster_Filter_msginit + + [A] envoy_api_v2_cluster_OutlierDetection_msginit + + [A] envoy_api_v2_core_Address_msginit + + [A] envoy_api_v2_core_AggregatedConfigSource_msginit + + [A] envoy_api_v2_core_ApiConfigSource_msginit + + [A] envoy_api_v2_core_AsyncDataSource_msginit + + [A] envoy_api_v2_core_BackoffStrategy_msginit + + [A] envoy_api_v2_core_BindConfig_msginit + + [A] envoy_api_v2_core_BuildVersion_msginit + + [A] envoy_api_v2_core_CidrRange_msginit + + [A] envoy_api_v2_core_ConfigSource_msginit + + [A] envoy_api_v2_core_ControlPlane_msginit + + [A] envoy_api_v2_core_DataSource_msginit + + [A] envoy_api_v2_core_EventServiceConfig_msginit + + [A] envoy_api_v2_core_Extension_msginit + + [A] envoy_api_v2_core_GrpcProtocolOptions_msginit + + [A] envoy_api_v2_core_GrpcService_EnvoyGrpc_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_CallCredentials_GoogleIAMCredentials_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_CallCredentials_MetadataCredentialsFromPlugin_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_CallCredentials_ServiceAccountJWTAccessCredentials_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_CallCredentials_StsService_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_CallCredentials_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_ChannelCredentials_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_GoogleLocalCredentials_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_SslCredentials_msginit + + [A] envoy_api_v2_core_GrpcService_GoogleGrpc_msginit + + [A] envoy_api_v2_core_GrpcService_msginit + + [A] envoy_api_v2_core_HeaderMap_msginit + + [A] envoy_api_v2_core_HeaderValueOption_msginit + + [A] envoy_api_v2_core_HeaderValue_msginit + + [A] envoy_api_v2_core_HealthCheck_CustomHealthCheck_msginit + + [A] envoy_api_v2_core_HealthCheck_GrpcHealthCheck_msginit + + [A] envoy_api_v2_core_HealthCheck_HttpHealthCheck_msginit + + [A] envoy_api_v2_core_HealthCheck_Payload_msginit + + [A] envoy_api_v2_core_HealthCheck_RedisHealthCheck_msginit + + [A] envoy_api_v2_core_HealthCheck_TcpHealthCheck_msginit + + [A] envoy_api_v2_core_HealthCheck_TlsOptions_msginit + + [A] envoy_api_v2_core_HealthCheck_msginit + + [A] envoy_api_v2_core_Http1ProtocolOptions_HeaderKeyFormat_ProperCaseWords_msginit + + [A] envoy_api_v2_core_Http1ProtocolOptions_HeaderKeyFormat_msginit + + [A] envoy_api_v2_core_Http1ProtocolOptions_msginit + + [A] envoy_api_v2_core_Http2ProtocolOptions_SettingsParameter_msginit + + [A] envoy_api_v2_core_Http2ProtocolOptions_msginit + + [A] envoy_api_v2_core_HttpProtocolOptions_msginit + + [A] envoy_api_v2_core_HttpUri_msginit + + [A] envoy_api_v2_core_Locality_msginit + + [A] envoy_api_v2_core_Metadata_FilterMetadataEntry_msginit + + [A] envoy_api_v2_core_Metadata_msginit + + [A] envoy_api_v2_core_Node_msginit + + [A] envoy_api_v2_core_Pipe_msginit + + [A] envoy_api_v2_core_RateLimitSettings_msginit + + [A] envoy_api_v2_core_RemoteDataSource_msginit + + [A] envoy_api_v2_core_RetryPolicy_msginit + + [A] envoy_api_v2_core_RuntimeDouble_msginit + + [A] envoy_api_v2_core_RuntimeFeatureFlag_msginit + + [A] envoy_api_v2_core_RuntimeFractionalPercent_msginit + + [A] envoy_api_v2_core_RuntimeUInt32_msginit + + [A] envoy_api_v2_core_SelfConfigSource_msginit + + [A] envoy_api_v2_core_SocketAddress_msginit + + [A] envoy_api_v2_core_SocketOption_msginit + + [A] envoy_api_v2_core_TcpKeepalive_msginit + + [A] envoy_api_v2_core_TcpProtocolOptions_msginit + + [A] envoy_api_v2_core_TransportSocket_msginit + + [A] envoy_api_v2_core_UpstreamHttpProtocolOptions_msginit + + [A] envoy_api_v2_endpoint_ClusterStats_DroppedRequests_msginit + + [A] envoy_api_v2_endpoint_ClusterStats_msginit + + [A] envoy_api_v2_endpoint_EndpointLoadMetricStats_msginit + + [A] envoy_api_v2_endpoint_Endpoint_HealthCheckConfig_msginit + + [A] envoy_api_v2_endpoint_Endpoint_msginit + + [A] envoy_api_v2_endpoint_LbEndpoint_msginit + + [A] envoy_api_v2_endpoint_LocalityLbEndpoints_msginit + + [A] envoy_api_v2_endpoint_UpstreamEndpointStats_msginit + + [A] envoy_api_v2_endpoint_UpstreamLocalityStats_msginit + + [A] envoy_api_v2_listener_ActiveRawUdpListenerConfig_msginit + + [A] envoy_api_v2_listener_FilterChainMatch_msginit + + [A] envoy_api_v2_listener_FilterChain_msginit + + [A] envoy_api_v2_listener_Filter_msginit + + [A] envoy_api_v2_listener_ListenerFilterChainMatchPredicate_MatchSet_msginit + + [A] envoy_api_v2_listener_ListenerFilterChainMatchPredicate_msginit + + [A] envoy_api_v2_listener_ListenerFilter_msginit + + [A] envoy_api_v2_listener_UdpListenerConfig_msginit + + [A] envoy_api_v2_route_CorsPolicy_msginit + + [A] envoy_api_v2_route_Decorator_msginit + + [A] envoy_api_v2_route_DirectResponseAction_msginit + + [A] envoy_api_v2_route_FilterAction_msginit + + [A] envoy_api_v2_route_HeaderMatcher_msginit + + [A] envoy_api_v2_route_HedgePolicy_msginit + + [A] envoy_api_v2_route_QueryParameterMatcher_msginit + + [A] envoy_api_v2_route_RateLimit_Action_DestinationCluster_msginit + + [A] envoy_api_v2_route_RateLimit_Action_GenericKey_msginit + + [A] envoy_api_v2_route_RateLimit_Action_HeaderValueMatch_msginit + + [A] envoy_api_v2_route_RateLimit_Action_RemoteAddress_msginit + + [A] envoy_api_v2_route_RateLimit_Action_RequestHeaders_msginit + + [A] envoy_api_v2_route_RateLimit_Action_SourceCluster_msginit + + [A] envoy_api_v2_route_RateLimit_Action_msginit + + [A] envoy_api_v2_route_RateLimit_msginit + + [A] envoy_api_v2_route_RedirectAction_msginit + + [A] envoy_api_v2_route_RetryPolicy_RetryBackOff_msginit + + [A] envoy_api_v2_route_RetryPolicy_RetryHostPredicate_msginit + + [A] envoy_api_v2_route_RetryPolicy_RetryPriority_msginit + + [A] envoy_api_v2_route_RetryPolicy_msginit + + [A] envoy_api_v2_route_RouteAction_HashPolicy_ConnectionProperties_msginit + + [A] envoy_api_v2_route_RouteAction_HashPolicy_Cookie_msginit + + [A] envoy_api_v2_route_RouteAction_HashPolicy_FilterState_msginit + + [A] envoy_api_v2_route_RouteAction_HashPolicy_Header_msginit + + [A] envoy_api_v2_route_RouteAction_HashPolicy_QueryParameter_msginit + + [A] envoy_api_v2_route_RouteAction_HashPolicy_msginit + + [A] envoy_api_v2_route_RouteAction_RequestMirrorPolicy_msginit + + [A] envoy_api_v2_route_RouteAction_UpgradeConfig_msginit + + [A] envoy_api_v2_route_RouteAction_msginit + + [A] envoy_api_v2_route_RouteMatch_GrpcRouteMatchOptions_msginit + + [A] envoy_api_v2_route_RouteMatch_TlsContextMatchOptions_msginit + + [A] envoy_api_v2_route_RouteMatch_msginit + + [A] envoy_api_v2_route_Route_PerFilterConfigEntry_msginit + + [A] envoy_api_v2_route_Route_TypedPerFilterConfigEntry_msginit + + [A] envoy_api_v2_route_Route_msginit + + [A] envoy_api_v2_route_Tracing_msginit + + [A] envoy_api_v2_route_VirtualCluster_msginit + + [A] envoy_api_v2_route_VirtualHost_PerFilterConfigEntry_msginit + + [A] envoy_api_v2_route_VirtualHost_TypedPerFilterConfigEntry_msginit + + [A] envoy_api_v2_route_VirtualHost_msginit + + [A] envoy_api_v2_route_WeightedCluster_ClusterWeight_PerFilterConfigEntry_msginit + + [A] envoy_api_v2_route_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_msginit + + [A] envoy_api_v2_route_WeightedCluster_ClusterWeight_msginit + + [A] envoy_api_v2_route_WeightedCluster_msginit + + [A] envoy_config_filter_accesslog_v2_AccessLogFilter_msginit + + [A] envoy_config_filter_accesslog_v2_AccessLog_msginit + + [A] envoy_config_filter_accesslog_v2_AndFilter_msginit + + [A] envoy_config_filter_accesslog_v2_ComparisonFilter_msginit + + [A] envoy_config_filter_accesslog_v2_DurationFilter_msginit + + [A] envoy_config_filter_accesslog_v2_ExtensionFilter_msginit + + [A] envoy_config_filter_accesslog_v2_GrpcStatusFilter_msginit + + [A] envoy_config_filter_accesslog_v2_HeaderFilter_msginit + + [A] envoy_config_filter_accesslog_v2_NotHealthCheckFilter_msginit + + [A] envoy_config_filter_accesslog_v2_OrFilter_msginit + + [A] envoy_config_filter_accesslog_v2_ResponseFlagFilter_msginit + + [A] envoy_config_filter_accesslog_v2_RuntimeFilter_msginit + + [A] envoy_config_filter_accesslog_v2_StatusCodeFilter_msginit + + [A] envoy_config_filter_accesslog_v2_TraceableFilter_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_InternalAddressConfig_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_SetCurrentClientCertDetails_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_Tracing_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_UpgradeConfig_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_HttpConnectionManager_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_HttpFilter_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_Rds_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_RequestIDExtension_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_ScopedRds_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_ScopedRouteConfigurationsList_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_KvElement_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_HeaderValueExtractor_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_ScopedRoutes_ScopeKeyBuilder_FragmentBuilder_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_ScopedRoutes_ScopeKeyBuilder_msginit + + [A] envoy_config_filter_network_http_connection_manager_v2_ScopedRoutes_msginit + + [A] envoy_config_listener_v2_ApiListener_msginit + + [A] envoy_config_trace_v2_Tracing_Http_msginit + + [A] envoy_config_trace_v2_Tracing_msginit + + [A] envoy_service_discovery_v2_AdsDummy_msginit + + [A] envoy_service_load_stats_v2_LoadStatsRequest_msginit + + [A] envoy_service_load_stats_v2_LoadStatsResponse_msginit + + [A] envoy_type_DoubleRange_msginit + + [A] envoy_type_FractionalPercent_msginit + + [A] envoy_type_Int32Range_msginit + + [A] envoy_type_Int64Range_msginit + + [A] envoy_type_Percent_msginit + + [A] envoy_type_SemanticVersion_msginit + + [A] envoy_type_matcher_ListStringMatcher_msginit + + [A] envoy_type_matcher_RegexMatchAndSubstitute_msginit + + [A] envoy_type_matcher_RegexMatcher_GoogleRE2_msginit + + [A] envoy_type_matcher_RegexMatcher_msginit + + [A] envoy_type_matcher_StringMatcher_msginit + + [A] envoy_type_metadata_v2_MetadataKey_PathSegment_msginit + + [A] envoy_type_metadata_v2_MetadataKey_msginit + + [A] envoy_type_metadata_v2_MetadataKind_Cluster_msginit + + [A] envoy_type_metadata_v2_MetadataKind_Host_msginit + + [A] envoy_type_metadata_v2_MetadataKind_Request_msginit + + [A] envoy_type_metadata_v2_MetadataKind_Route_msginit + + [A] envoy_type_metadata_v2_MetadataKind_msginit + + [A] envoy_type_tracing_v2_CustomTag_Environment_msginit + + [A] envoy_type_tracing_v2_CustomTag_Header_msginit + + [A] envoy_type_tracing_v2_CustomTag_Literal_msginit + + [A] envoy_type_tracing_v2_CustomTag_Metadata_msginit + + [A] envoy_type_tracing_v2_CustomTag_msginit + + [A] google_api_CustomHttpPattern_msginit + + [A] google_api_HttpRule_msginit + + [A] google_api_Http_msginit + + [A] google_protobuf_Any_msginit + + [A] google_protobuf_BoolValue_msginit + + [A] google_protobuf_BytesValue_msginit + + [A] google_protobuf_DescriptorProto_ExtensionRange_msginit + + [A] google_protobuf_DescriptorProto_ReservedRange_msginit + + [A] google_protobuf_DescriptorProto_msginit + + [A] google_protobuf_DoubleValue_msginit + + [A] google_protobuf_Duration_msginit + + [A] google_protobuf_Empty_msginit + + [A] google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit + + [A] google_protobuf_EnumDescriptorProto_msginit + + [A] google_protobuf_EnumOptions_msginit + + [A] google_protobuf_EnumValueDescriptorProto_msginit + + [A] google_protobuf_EnumValueOptions_msginit + + [A] google_protobuf_ExtensionRangeOptions_msginit + + [A] google_protobuf_FieldDescriptorProto_msginit + + [A] google_protobuf_FieldOptions_msginit + + [A] google_protobuf_FileDescriptorProto_msginit + + [A] google_protobuf_FileDescriptorSet_msginit + + [A] google_protobuf_FileOptions_msginit + + [A] google_protobuf_FloatValue_msginit + + [A] google_protobuf_GeneratedCodeInfo_Annotation_msginit + + [A] google_protobuf_GeneratedCodeInfo_msginit + + [A] google_protobuf_Int32Value_msginit + + [A] google_protobuf_Int64Value_msginit + + [A] google_protobuf_ListValue_msginit + + [A] google_protobuf_MessageOptions_msginit + + [A] google_protobuf_MethodDescriptorProto_msginit + + [A] google_protobuf_MethodOptions_msginit + + [A] google_protobuf_OneofDescriptorProto_msginit + + [A] google_protobuf_OneofOptions_msginit + + [A] google_protobuf_ServiceDescriptorProto_msginit + + [A] google_protobuf_ServiceOptions_msginit + + [A] google_protobuf_SourceCodeInfo_Location_msginit + + [A] google_protobuf_SourceCodeInfo_msginit + + [A] google_protobuf_StringValue_msginit + + [A] google_protobuf_Struct_FieldsEntry_msginit + + [A] google_protobuf_Struct_msginit + + [A] google_protobuf_Timestamp_msginit + + [A] google_protobuf_UInt32Value_msginit + + [A] google_protobuf_UInt64Value_msginit + + [A] google_protobuf_UninterpretedOption_NamePart_msginit + + [A] google_protobuf_UninterpretedOption_msginit + + [A] google_protobuf_Value_msginit + + [A] google_rpc_Status_msginit + + [A] grpc_gcp_AltsContext_PeerAttributesEntry_msginit + + [A] grpc_gcp_AltsContext_msginit + + [A] grpc_gcp_Endpoint_msginit + + [A] grpc_gcp_HandshakerReq_msginit + + [A] grpc_gcp_HandshakerResp_msginit + + [A] grpc_gcp_HandshakerResult_msginit + + [A] grpc_gcp_HandshakerStatus_msginit + + [A] grpc_gcp_Identity_AttributesEntry_msginit + + [A] grpc_gcp_Identity_msginit + + [A] grpc_gcp_NextHandshakeMessageReq_msginit + + [A] grpc_gcp_RpcProtocolVersions_Version_msginit + + [A] grpc_gcp_RpcProtocolVersions_msginit + + [A] grpc_gcp_ServerHandshakeParameters_msginit + + [A] grpc_gcp_StartClientHandshakeReq_msginit + + [A] grpc_gcp_StartServerHandshakeReq_HandshakeParametersEntry_msginit + + [A] grpc_gcp_StartServerHandshakeReq_msginit + + [A] grpc_health_v1_HealthCheckRequest_msginit + + [A] grpc_health_v1_HealthCheckResponse_msginit + + [A] grpc_keepalive_trace + + [A] grpc_lb_v1_ClientStatsPerToken_msginit + + [A] grpc_lb_v1_ClientStats_msginit + + [A] grpc_lb_v1_FallbackResponse_msginit + + [A] grpc_lb_v1_InitialLoadBalanceRequest_msginit + + [A] grpc_lb_v1_InitialLoadBalanceResponse_msginit + + [A] grpc_lb_v1_LoadBalanceRequest_msginit + + [A] grpc_lb_v1_LoadBalanceResponse_msginit + + [A] grpc_lb_v1_ServerList_msginit + + [A] grpc_lb_v1_Server_msginit + + [A] grpc_trace_chttp2_hpack_parser + + [A] udpa_annotations_FieldMigrateAnnotation_msginit + + [A] udpa_annotations_FileMigrateAnnotation_msginit + + [A] udpa_annotations_MigrateAnnotation_msginit + + [A] udpa_annotations_StatusAnnotation_msginit + + [A] udpa_data_orca_v1_OrcaLoadReport_RequestCostEntry_msginit + + [A] udpa_data_orca_v1_OrcaLoadReport_UtilizationEntry_msginit + + [A] udpa_data_orca_v1_OrcaLoadReport_msginit + + [A] validate_AnyRules_msginit + + [A] validate_BoolRules_msginit + + [A] validate_BytesRules_msginit + + [A] validate_DoubleRules_msginit + + [A] validate_DurationRules_msginit + + [A] validate_EnumRules_msginit + + [A] validate_FieldRules_msginit + + [A] validate_Fixed32Rules_msginit + + [A] validate_Fixed64Rules_msginit + + [A] validate_FloatRules_msginit + + [A] validate_Int32Rules_msginit + + [A] validate_Int64Rules_msginit + + [A] validate_MapRules_msginit + + [A] validate_MessageRules_msginit + + [A] validate_RepeatedRules_msginit + + [A] validate_SFixed32Rules_msginit + + [A] validate_SFixed64Rules_msginit + + [A] validate_SInt32Rules_msginit + + [A] validate_SInt64Rules_msginit + + [A] validate_StringRules_msginit + + [A] validate_TimestampRules_msginit + + [A] validate_UInt32Rules_msginit + + [A] validate_UInt64Rules_msginit + + + +---------------diffs in grpc_libgrpc++.so.1.31.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + +Function symbols changes summary: 385 Removed, 312 Added function symbols not referenced by debug info + +Variable symbols changes summary: 147 Removed, 99 Added variable symbols not referenced by debug info + + + +385 Removed function symbols not referenced by debug info: + + + + [D] _ZN21grpc_call_credentialsD0Ev + + [D] _ZN21grpc_call_credentialsD1Ev, aliases _ZN21grpc_call_credentialsD2Ev + + [D] _ZN21grpc_call_credentialsD2Ev + + [D] _ZN24grpc_channel_credentialsD0Ev + + [D] _ZN24grpc_channel_credentialsD1Ev, aliases _ZN24grpc_channel_credentialsD2Ev + + [D] _ZN24grpc_channel_credentialsD2Ev + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10ByteBufferES2_E10OnReadDoneEb + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10ByteBufferES2_E11OnWriteDoneEb + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10ByteBufferES2_E16OnWritesDoneDoneEb + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10ByteBufferES2_E25OnReadInitialMetadataDoneEb + + [D] _ZN4grpc12experimental17ClientBidiReactorINS_10ByteBufferES2_E6OnDoneERKNS_6StatusE + + [D] _ZN4grpc12experimental17ServerBidiReactorINS_10ByteBufferES2_E10BindStreamEPNS0_26ServerCallbackReaderWriterIS2_S2_EE + + [D] _ZN4grpc12experimental17ServerBidiReactorINS_10ByteBufferES2_E10OnReadDoneEb + + [D] _ZN4grpc12experimental17ServerBidiReactorINS_10ByteBufferES2_E11OnWriteDoneEb + + [D] _ZN4grpc12experimental17ServerBidiReactorINS_10ByteBufferES2_E25OnSendInitialMetadataDoneEb + + [D] _ZN4grpc12experimental17ServerBidiReactorINS_10ByteBufferES2_E8OnCancelEv + + [D] _ZN4grpc12experimental22CallbackGenericService13CreateReactorEv + + [D] _ZN4grpc12experimental24ServerGenericBidiReactor9OnStartedEPN9grpc_impl13ServerContextE + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEE14WriteAndFinishERKS1_NS_12WriteOptionsERKNS_6StatusEPv + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEE19SendInitialMetadataEPv + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEE5WriteERKS1_NS_12WriteOptionsEPv + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEE5WriteERKS1_Pv + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEE6FinishERKNS_6StatusEPv + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEE8BindCallEPNS_8internal4CallE + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEED0Ev + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEED1Ev, aliases _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEED2Ev + + [D] _ZN4grpc17ServerAsyncWriterINS_10ByteBufferEED2Ev + + [D] _ZN4grpc19AsyncGenericService11RequestCallEPNS_20GenericServerContextEPNS_23ServerAsyncReaderWriterINS_10ByteBufferES4_EEPN9grpc_impl15CompletionQueueEPNS7_21ServerCompletionQueueEPv + + [D] _ZN4grpc19ServerBuilderPlugin19UpdateServerBuilderEPN9grpc_impl13ServerBuilderE + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E10WritesDoneEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E19ReadInitialMetadataEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E4ReadEPS1_Pv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_NS_12WriteOptionsEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_Pv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E6FinishEPNS_6StatusEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E9StartCallEPv + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED0Ev + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED1Ev, aliases _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED2Ev + + [D] _ZN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED2Ev + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E14WriteAndFinishERKS1_NS_12WriteOptionsERKNS_6StatusEPv + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E19SendInitialMetadataEPv + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E4ReadEPS1_Pv + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_NS_12WriteOptionsEPv + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_Pv + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E6FinishERKNS_6StatusEPv + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E8BindCallEPNS_8internal4CallE + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED0Ev + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED1Ev, aliases _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED2Ev + + [D] _ZN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEE19ReadInitialMetadataEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEE6FinishEPS1_PNS_6StatusEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEE9StartCallEv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEED0Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEED1Ev, _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEED1Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEED2Ev + + [D] _ZN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEE19SendInitialMetadataEPv + + [D] _ZN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEE8BindCallEPNS_8internal4CallE + + [D] _ZN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEED0Ev + + [D] _ZN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEED1Ev, aliases _ZN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEED2Ev + + [D] _ZN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEED2Ev + + [D] _ZN4grpc37HealthCheckServiceServerBuilderOptionC1ESt10unique_ptrIN9grpc_impl27HealthCheckServiceInterfaceESt14default_deleteIS3_EE, aliases _ZN4grpc37HealthCheckServiceServerBuilderOptionC2ESt10unique_ptrIN9grpc_impl27HealthCheckServiceInterfaceESt14default_deleteIS3_EE + + [D] _ZN4grpc37HealthCheckServiceServerBuilderOptionC2ESt10unique_ptrIN9grpc_impl27HealthCheckServiceInterfaceESt14default_deleteIS3_EE + + [D] _ZN4grpc8internal16CatchingCallbackISt8functionIFvNS_6StatusEEEJS3_EEEvOT_DpOT0_ + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EE10RunHandlerERKNS0_13MethodHandler16HandlerParameterE + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS_6StatusEPPv + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EED0Ev + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EED1Ev, aliases _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EED2Ev + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EED2Ev + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EE10RunHandlerERKNS0_13MethodHandler16HandlerParameterE + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS_6StatusEPPv + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EED0Ev + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EED1Ev, aliases _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EED2Ev + + [D] _ZN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EED2Ev + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E10RunHandlerERKNS0_13MethodHandler16HandlerParameterE + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl14WriteAndFinishEPKS2_NS_12WriteOptionsENS_6StatusE + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEv + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl4ReadEPS2_ + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl5WriteEPKS2_NS_12WriteOptionsE + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl6FinishENS_6StatusE + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl9MaybeDoneEv + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplD0Ev + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplD1Ev, aliases _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplD2Ev + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplD2Ev + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_ED0Ev + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_ED1Ev, aliases _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_ED2Ev + + [D] _ZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_ED2Ev + + [D] _ZN4grpc8internal21CallbackWithStatusTag9StaticRunEP42grpc_experimental_completion_queue_functori + + [D] _ZN4grpc8internal22CallOpClientRecvStatus8FinishOpEPb + + [D] _ZN4grpc8internal22CallbackWithSuccessTag3SetEP9grpc_callSt8functionIFvbEEPNS0_18CompletionQueueTagE + + [D] _ZN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_E6OnDoneEv + + [D] _ZN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_E9OnStartedEPN9grpc_impl13ServerContextE + + [D] _ZN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_ED0Ev + + [D] _ZN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_ED1Ev, aliases _ZN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_ED2Ev + + [D] _ZN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_ED2Ev + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E10RemoveHoldEv + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E10WritesDoneEv + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E4ReadEPS2_ + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E5WriteEPKS2_NS_12WriteOptionsE + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E7AddHoldEi + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEv + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_ED0Ev + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_ED1Ev, aliases _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_ED2Ev + + [D] _ZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_ED2Ev + + [D] _ZN4grpc8internal30ExternalConnectionAcceptorImplC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_impl13ServerBuilder17experimental_type22ExternalConnectionTypeESt10shared_ptrINSA_17ServerCredentialsEE, aliases _ZN4grpc8internal30ExternalConnectionAcceptorImplC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_impl13ServerBuilder17experimental_type22ExternalConnectionTypeESt10shared_ptrINSA_17ServerCredentialsEE + + [D] _ZN4grpc8internal30ExternalConnectionAcceptorImplC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9grpc_impl13ServerBuilder17experimental_type22ExternalConnectionTypeESt10shared_ptrINSA_17ServerCredentialsEE + + [D] _ZN4grpc8internal31UnimplementedGenericBidiReactor6OnDoneEv + + [D] _ZN4grpc8internal31UnimplementedGenericBidiReactor9OnStartedEPNS_20GenericServerContextE + + [D] _ZN4grpc8internal31UnimplementedGenericBidiReactorD0Ev + + [D] _ZN4grpc8internal31UnimplementedGenericBidiReactorD1Ev, aliases _ZN4grpc8internal31UnimplementedGenericBidiReactorD2Ev + + [D] _ZN4grpc8internal31UnimplementedGenericBidiReactorD2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE11core_cq_tagEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE14FinalizeResultEPPvPb + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE17SetHijackingStateEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE32ContinueFillOpsAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEE7FillOpsEPNS0_4CallE + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED0Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED1Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED2Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEED2Ev + + [D] _ZN9grpc_core8internal24ThreadInternalsInterfaceD0Ev + + [D] _ZN9grpc_core8internal24ThreadInternalsInterfaceD1Ev, aliases _ZN9grpc_core8internal24ThreadInternalsInterfaceD2Ev + + [D] _ZN9grpc_core8internal24ThreadInternalsInterfaceD2Ev + + [D] _ZN9grpc_impl11GenericStub11PrepareCallEPNS_13ClientContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_15CompletionQueueE + + [D] _ZN9grpc_impl11GenericStub16PrepareUnaryCallEPNS_13ClientContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN4grpc10ByteBufferEPNS_15CompletionQueueE + + [D] _ZN9grpc_impl11GenericStub17experimental_type24PrepareBidiStreamingCallEPNS_13ClientContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4grpc12experimental17ClientBidiReactorINSC_10ByteBufferESF_EE + + [D] _ZN9grpc_impl11GenericStub17experimental_type9UnaryCallEPNS_13ClientContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKN4grpc10ByteBufferEPSD_St8functionIFvNSC_6StatusEEE + + [D] _ZN9grpc_impl11GenericStub4CallEPNS_13ClientContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_15CompletionQueueEPv + + [D] _ZN9grpc_impl12experimental49CreateCustomInsecureChannelWithInterceptorsFromFdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiRKNS_16ChannelArgumentsESt6vectorISt10unique_ptrIN4grpc12experimental33ClientInterceptorFactoryInterfaceESt14default_deleteISG_EESaISJ_EE + + [D] _ZN9grpc_impl13ResourceQuota13SetMaxThreadsEi + + [D] _ZN9grpc_impl13ResourceQuota6ResizeEm + + [D] _ZN9grpc_impl13ResourceQuotaC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [D] _ZN9grpc_impl13ResourceQuotaC1Ev, aliases _ZN9grpc_impl13ResourceQuotaC2Ev + + [D] _ZN9grpc_impl13ResourceQuotaC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, aliases _ZN9grpc_impl13ResourceQuotaC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [D] _ZN9grpc_impl13ResourceQuotaC2Ev + + [D] _ZN9grpc_impl13ResourceQuotaD0Ev + + [D] _ZN9grpc_impl13ResourceQuotaD1Ev, aliases _ZN9grpc_impl13ResourceQuotaD2Ev + + [D] _ZN9grpc_impl13ResourceQuotaD2Ev + + [D] _ZN9grpc_impl13ServerBuilder13BuildAndStartEv + + [D] _ZN9grpc_impl13ServerBuilder15RegisterServiceEPN4grpc7ServiceE + + [D] _ZN9grpc_impl13ServerBuilder15RegisterServiceERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4grpc7ServiceE + + [D] _ZN9grpc_impl13ServerBuilder16AddListeningPortERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10shared_ptrINS_17ServerCredentialsEEPi + + [D] _ZN9grpc_impl13ServerBuilder16EnableWorkaroundE20grpc_workaround_list + + [D] _ZN9grpc_impl13ServerBuilder16SetResourceQuotaERKNS_13ResourceQuotaE + + [D] _ZN9grpc_impl13ServerBuilder17experimental_type29AddExternalConnectionAcceptorENS1_22ExternalConnectionTypeESt10shared_ptrINS_17ServerCredentialsEE + + [D] _ZN9grpc_impl13ServerBuilder17experimental_type30RegisterCallbackGenericServiceEPN4grpc12experimental22CallbackGenericServiceE + + [D] _ZN9grpc_impl13ServerBuilder18AddCompletionQueueEb + + [D] _ZN9grpc_impl13ServerBuilder19SetSyncServerOptionENS0_16SyncServerOptionEi + + [D] _ZN9grpc_impl13ServerBuilder24InternalAddPluginFactoryEPFSt10unique_ptrIN4grpc19ServerBuilderPluginESt14default_deleteIS3_EEvE + + [D] _ZN9grpc_impl13ServerBuilder26SetDefaultCompressionLevelE22grpc_compression_level + + [D] _ZN9grpc_impl13ServerBuilder27RegisterAsyncGenericServiceEPN4grpc19AsyncGenericServiceE + + [D] _ZN9grpc_impl13ServerBuilder30SetDefaultCompressionAlgorithmE26grpc_compression_algorithm + + [D] _ZN9grpc_impl13ServerBuilder36SetCompressionAlgorithmSupportStatusE26grpc_compression_algorithmb + + [D] _ZN9grpc_impl13ServerBuilder4PortD1Ev, aliases _ZN9grpc_impl13ServerBuilder4PortD2Ev + + [D] _ZN9grpc_impl13ServerBuilder4PortD2Ev + + [D] _ZN9grpc_impl13ServerBuilder9SetOptionESt10unique_ptrINS_19ServerBuilderOptionESt14default_deleteIS2_EE + + [D] _ZN9grpc_impl13ServerBuilderC1Ev, aliases _ZN9grpc_impl13ServerBuilderC2Ev + + [D] _ZN9grpc_impl13ServerBuilderC2Ev + + [D] _ZN9grpc_impl13ServerBuilderD0Ev + + [D] _ZN9grpc_impl13ServerBuilderD1Ev, aliases _ZN9grpc_impl13ServerBuilderD2Ev + + [D] _ZN9grpc_impl13ServerBuilderD2Ev + + [D] _ZN9grpc_impl13ServerContext12CompletionOp11core_cq_tagEv + + [D] _ZN9grpc_impl13ServerContext12CompletionOp14FinalizeResultEPPvPb + + [D] _ZN9grpc_impl13ServerContext12CompletionOp17SetHijackingStateEv + + [D] _ZN9grpc_impl13ServerContext12CompletionOp32ContinueFillOpsAfterInterceptionEv + + [D] _ZN9grpc_impl13ServerContext12CompletionOp39ContinueFinalizeResultAfterInterceptionEv + + [D] _ZN9grpc_impl13ServerContext12CompletionOp5UnrefEv + + [D] _ZN9grpc_impl13ServerContext12CompletionOp7FillOpsEPN4grpc8internal4CallE + + [D] _ZN9grpc_impl13ServerContext12CompletionOpD0Ev + + [D] _ZN9grpc_impl13ServerContext12CompletionOpD1Ev + + [D] _ZN9grpc_impl13ServerContext12CompletionOpD2Ev, aliases _ZN9grpc_impl13ServerContext12CompletionOpD1Ev + + [D] _ZN9grpc_impl13ServerContext17BeginCompletionOpEPN4grpc8internal4CallESt8functionIFvbEEPNS2_13ServerReactorE + + [D] _ZN9grpc_impl13ServerContext17SetCancelCallbackESt8functionIFvvEE + + [D] _ZN9grpc_impl13ServerContext18AddInitialMetadataERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ + + [D] _ZN9grpc_impl13ServerContext18GetCompletionOpTagEv + + [D] _ZN9grpc_impl13ServerContext19AddTrailingMetadataERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ + + [D] _ZN9grpc_impl13ServerContext19ClearCancelCallbackEv + + [D] _ZN9grpc_impl13ServerContext19set_server_rpc_infoEPKcN4grpc8internal9RpcMethod7RpcTypeERKSt6vectorISt10unique_ptrINS3_12experimental33ServerInterceptorFactoryInterfaceESt14default_deleteISA_EESaISD_EE + + [D] _ZN9grpc_impl13ServerContext21SetLoadReportingCostsERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EE + + [D] _ZN9grpc_impl13ServerContext23BindDeadlineAndMetadataE12gpr_timespecP19grpc_metadata_array + + [D] _ZN9grpc_impl13ServerContext25set_compression_algorithmE26grpc_compression_algorithm + + [D] _ZN9grpc_impl13ServerContext5ClearEv + + [D] _ZN9grpc_impl13ServerContext5SetupE12gpr_timespec + + [D] _ZN9grpc_impl13ServerContextC1E12gpr_timespecP19grpc_metadata_array + + [D] _ZN9grpc_impl13ServerContextC1Ev, aliases _ZN9grpc_impl13ServerContextC2Ev + + [D] _ZN9grpc_impl13ServerContextC2E12gpr_timespecP19grpc_metadata_array, aliases _ZN9grpc_impl13ServerContextC1E12gpr_timespecP19grpc_metadata_array + + [D] _ZN9grpc_impl13ServerContextC2Ev + + [D] _ZN9grpc_impl16ChannelArguments16SetResourceQuotaERKNS_13ResourceQuotaE + + [D] _ZN9grpc_impl23SecureServerCredentials24SetAuthMetadataProcessorERKSt10shared_ptrINS_21AuthMetadataProcessorEE + + [D] _ZN9grpc_impl24AddInsecureChannelFromFdEPNS_6ServerEi + + [D] _ZN9grpc_impl27CreateInsecureChannelFromFdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi + + [D] _ZN9grpc_impl31EnableDefaultHealthCheckServiceEb + + [D] _ZN9grpc_impl32DefaultHealthCheckServiceEnabledEv + + [D] _ZN9grpc_impl33CreateCustomInsecureChannelFromFdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiRKNS_16ChannelArgumentsE + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE14FinalizeResultEPPvPb + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEv + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag3RunEb + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag9StaticRunEP42grpc_experimental_completion_queue_functori + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE7RequestEv + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEED0Ev + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEED1Ev, aliases _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEED2Ev + + [D] _ZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEED2Ev + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE14FinalizeResultEPPvPb + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEv + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE15CallbackCallTag3RunEb + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE15CallbackCallTag9StaticRunEP42grpc_experimental_completion_queue_functori + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE7RequestEv + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEED0Ev + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEED1Ev, aliases _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEED2Ev + + [D] _ZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEED2Ev + + [D] _ZN9grpc_impl6ServerC1EiPNS_16ChannelArgumentsESt10shared_ptrISt6vectorISt10unique_ptrINS_21ServerCompletionQueueESt14default_deleteIS6_EESaIS9_EEEiiiS4_IS3_IN4grpc8internal30ExternalConnectionAcceptorImplEESaISG_EEP19grpc_resource_quotaS4_IS5_INSD_12experimental33ServerInterceptorFactoryInterfaceES7_ISM_EESaISO_EE, aliases _ZN9grpc_impl6ServerC2EiPNS_16ChannelArgumentsESt10shared_ptrISt6vectorISt10unique_ptrINS_21ServerCompletionQueueESt14default_deleteIS6_EESaIS9_EEEiiiS4_IS3_IN4grpc8internal30ExternalConnectionAcceptorImplEESaISG_EEP19grpc_resource_quotaS4_IS5_INSD_12experimental33ServerInterceptorFactoryInterfaceES7_ISM_EESaISO_EE + + [D] _ZN9grpc_impl6ServerC2EiPNS_16ChannelArgumentsESt10shared_ptrISt6vectorISt10unique_ptrINS_21ServerCompletionQueueESt14default_deleteIS6_EESaIS9_EEEiiiS4_IS3_IN4grpc8internal30ExternalConnectionAcceptorImplEESaISG_EEP19grpc_resource_quotaS4_IS5_INSD_12experimental33ServerInterceptorFactoryInterfaceES7_ISM_EESaISO_EE + + [D] _ZNK9grpc_impl13ServerContext11IsCancelledEv + + [D] _ZNK9grpc_impl13ServerContext14census_contextEv + + [D] _ZNK9grpc_impl13ServerContext4peerB5cxx11Ev + + [D] _ZNK9grpc_impl13ServerContext9TryCancelEv + + [D] _ZNK9grpc_impl21AuthMetadataProcessor10IsBlockingEv + + [D] _ZNK9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE11method_nameEv + + [D] _ZNK9grpc_impl6Server15CallbackRequestINS_13ServerContextEE11method_nameEv + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc12experimental22CallbackGenericService7HandlerEvEUlvE_E10_M_managerERSt9_Any_dataRKS6_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_E10_M_managerERSt9_Any_dataRKS9_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImpl6FinishENS1_6StatusEEUlbE_E10_M_managerERSt9_Any_dataRKSA_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS2_4CallESt8functionIFvvEEPNS1_12experimental17ServerBidiReactorIS4_S4_EEEUlbE0_E10_M_managerERSt9_Any_dataRKSL_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS2_4CallESt8functionIFvvEEPNS1_12experimental17ServerBidiReactorIS4_S4_EEEUlbE1_E10_M_managerERSt9_Any_dataRKSL_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS2_4CallESt8functionIFvvEEPNS1_12experimental17ServerBidiReactorIS4_S4_EEEUlbE_E10_M_managerERSt9_Any_dataRKSL_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E10WritesDoneEvEUlbE_E10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE0_E10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE1_E10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE2_E10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE_E10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E10_M_managerERSt9_Any_dataRKSA_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag3RunEbEUlvE_E10_M_managerERSt9_Any_dataRKSA_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestINS1_13ServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E10_M_managerERSt9_Any_dataRKS9_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestINS1_13ServerContextEE15CallbackCallTag3RunEbEUlvE_E10_M_managerERSt9_Any_dataRKS9_St18_Manager_operation + + [D] _ZNSt17_Function_handlerIFPN4grpc12experimental17ServerBidiReactorINS0_10ByteBufferES3_EEvEZNS1_22CallbackGenericService7HandlerEvEUlvE_E9_M_invokeERKSt9_Any_data + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImpl6FinishENS1_6StatusEEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS2_4CallESt8functionIFvvEEPNS1_12experimental17ServerBidiReactorIS4_S4_EEEUlbE0_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS2_4CallESt8functionIFvvEEPNS1_12experimental17ServerBidiReactorIS4_S4_EEEUlbE1_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal19CallbackBidiHandlerINS1_10ByteBufferES4_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS2_4CallESt8functionIFvvEEPNS1_12experimental17ServerBidiReactorIS4_S4_EEEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E10WritesDoneEvEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE0_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE1_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE2_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal30ClientCallbackReaderWriterImplINS1_10ByteBufferES4_E9StartCallEvEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E9_M_invokeERKSt9_Any_data + + [D] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag3RunEbEUlvE_E9_M_invokeERKSt9_Any_data + + [D] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestINS1_13ServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E9_M_invokeERKSt9_Any_data + + [D] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestINS1_13ServerContextEE15CallbackCallTag3RunEbEUlvE_E9_M_invokeERKSt9_Any_data + + [D] _ZNSt6vectorIN9grpc_impl13ServerBuilder4PortESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_ + + [D] _ZNSt6vectorIN9grpc_impl13ServerBuilder4PortESaIS2_EED1Ev, aliases _ZNSt6vectorIN9grpc_impl13ServerBuilder4PortESaIS2_EED2Ev + + [D] _ZNSt6vectorIN9grpc_impl13ServerBuilder4PortESaIS2_EED2Ev + + [D] _ZNSt6vectorISt10unique_ptrIN9grpc_impl13ServerBuilder12NamedServiceESt14default_deleteIS3_EESaIS6_EE12emplace_backIJPS3_EEEvDpOT_ + + [D] _ZNSt6vectorISt10unique_ptrIN9grpc_impl13ServerBuilder12NamedServiceESt14default_deleteIS3_EESaIS6_EE17_M_realloc_insertIJPS3_EEEvN9__gnu_cxx17__normal_iteratorIPS6_S8_EEDpOT_ + + [D] _ZNSt6vectorIlSaIlEE12emplace_backIJlEEEvDpOT_ + + [D] _ZNSt6vectorIlSaIlEE17_M_realloc_insertIJlEEEvN9__gnu_cxx17__normal_iteratorIPlS1_EEDpOT_ + + [D] _ZNSt8functionIFvN4grpc6StatusEEEC1ERKS3_, aliases _ZNSt8functionIFvN4grpc6StatusEEEC2ERKS3_ + + [D] _ZNSt8functionIFvN4grpc6StatusEEEC2ERKS3_ + + [D] _ZThn16_N4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E4ReadEPS1_Pv + + [D] _ZThn16_N4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED0Ev + + [D] _ZThn16_N4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED1Ev + + [D] _ZThn16_N4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E4ReadEPS1_Pv + + [D] _ZThn16_N4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED0Ev + + [D] _ZThn16_N4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED1Ev + + [D] _ZThn8_N4grpc17ServerAsyncWriterINS_10ByteBufferEE5WriteERKS1_NS_12WriteOptionsEPv + + [D] _ZThn8_N4grpc17ServerAsyncWriterINS_10ByteBufferEE5WriteERKS1_Pv + + [D] _ZThn8_N4grpc17ServerAsyncWriterINS_10ByteBufferEED0Ev + + [D] _ZThn8_N4grpc17ServerAsyncWriterINS_10ByteBufferEED1Ev + + [D] _ZThn8_N4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_NS_12WriteOptionsEPv + + [D] _ZThn8_N4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_Pv + + [D] _ZThn8_N4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED0Ev + + [D] _ZThn8_N4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_ED1Ev + + [D] _ZThn8_N4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_NS_12WriteOptionsEPv + + [D] _ZThn8_N4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_E5WriteERKS1_Pv + + [D] _ZThn8_N4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED0Ev + + [D] _ZThn8_N4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_ED1Ev + + [D] pb_close_string_substream + + [D] pb_decode + + [D] pb_decode_delimited + + [D] pb_decode_fixed32 + + [D] pb_decode_fixed64 + + [D] pb_decode_noinit + + [D] pb_decode_svarint + + [D] pb_decode_tag + + [D] pb_decode_varint + + [D] pb_encode + + [D] pb_encode_delimited + + [D] pb_encode_fixed32 + + [D] pb_encode_fixed64 + + [D] pb_encode_string + + [D] pb_encode_submessage + + [D] pb_encode_svarint + + [D] pb_encode_tag + + [D] pb_encode_tag_for_field + + [D] pb_encode_varint + + [D] pb_field_iter_begin + + [D] pb_field_iter_find + + [D] pb_field_iter_next + + [D] pb_get_encoded_size + + [D] pb_istream_from_buffer + + [D] pb_make_string_substream + + [D] pb_ostream_from_buffer + + [D] pb_read + + [D] pb_skip_field + + [D] pb_write + + + +312 Added function symbols not referenced by debug info: + + + + [A] _ZN21grpc_call_credentials12debug_stringB5cxx11Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core14PemKeyCertPairELm1ESaIS4_EE11EmplaceBackIJRKS4_EEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core14PemKeyCertPairELm1ESaIS4_EE11EmplaceBackIJS4_EEERS4_DpOT_ + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core14PemKeyCertPairELm1ESaIS4_EED1Ev, aliases _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core14PemKeyCertPairELm1ESaIS4_EED2Ev + + [A] _ZN4absl14lts_2020_02_2523inlined_vector_internal7StorageIN9grpc_core14PemKeyCertPairELm1ESaIS4_EED2Ev + + [A] _ZN4grpc11CoreCodegen25grpc_call_error_to_stringE15grpc_call_error + + [A] _ZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextE + + [A] _ZN4grpc12experimental28GenericCallbackServerContextD0Ev + + [A] _ZN4grpc12experimental28GenericCallbackServerContextD1Ev + + [A] _ZN4grpc12experimental28GenericCallbackServerContextD2Ev, aliases _ZN4grpc12experimental28GenericCallbackServerContextD1Ev + + [A] _ZN4grpc12experimental49CreateCustomInsecureChannelWithInterceptorsFromFdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiRKN9grpc_impl16ChannelArgumentsESt6vectorISt10unique_ptrINS0_33ClientInterceptorFactoryInterfaceESt14default_deleteISF_EESaISI_EE + + [A] _ZN4grpc13ResourceQuota13SetMaxThreadsEi + + [A] _ZN4grpc13ResourceQuota6ResizeEm + + [A] _ZN4grpc13ResourceQuotaC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, aliases _ZN4grpc13ResourceQuotaC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN4grpc13ResourceQuotaC1Ev, aliases _ZN4grpc13ResourceQuotaC2Ev + + [A] _ZN4grpc13ResourceQuotaC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN4grpc13ResourceQuotaC2Ev + + [A] _ZN4grpc13ResourceQuotaD0Ev + + [A] _ZN4grpc13ResourceQuotaD1Ev, aliases _ZN4grpc13ResourceQuotaD2Ev + + [A] _ZN4grpc13ResourceQuotaD2Ev + + [A] _ZN4grpc13ServerBuilder13BuildAndStartEv + + [A] _ZN4grpc13ServerBuilder15RegisterServiceEPNS_7ServiceE + + [A] _ZN4grpc13ServerBuilder15RegisterServiceERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_7ServiceE + + [A] _ZN4grpc13ServerBuilder16AddListeningPortERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10shared_ptrIN9grpc_impl17ServerCredentialsEEPi + + [A] _ZN4grpc13ServerBuilder16EnableWorkaroundE20grpc_workaround_list + + [A] _ZN4grpc13ServerBuilder16SetResourceQuotaERKNS_13ResourceQuotaE + + [A] _ZN4grpc13ServerBuilder17experimental_type29AddExternalConnectionAcceptorENS1_22ExternalConnectionTypeESt10shared_ptrIN9grpc_impl17ServerCredentialsEE + + [A] _ZN4grpc13ServerBuilder17experimental_type30RegisterCallbackGenericServiceEPNS_12experimental22CallbackGenericServiceE + + [A] _ZN4grpc13ServerBuilder18AddCompletionQueueEb + + [A] _ZN4grpc13ServerBuilder19SetSyncServerOptionENS0_16SyncServerOptionEi + + [A] _ZN4grpc13ServerBuilder24InternalAddPluginFactoryEPFSt10unique_ptrINS_19ServerBuilderPluginESt14default_deleteIS2_EEvE + + [A] _ZN4grpc13ServerBuilder26SetDefaultCompressionLevelE22grpc_compression_level + + [A] _ZN4grpc13ServerBuilder27RegisterAsyncGenericServiceEPNS_19AsyncGenericServiceE + + [A] _ZN4grpc13ServerBuilder30SetDefaultCompressionAlgorithmE26grpc_compression_algorithm + + [A] _ZN4grpc13ServerBuilder36SetCompressionAlgorithmSupportStatusE26grpc_compression_algorithmb + + [A] _ZN4grpc13ServerBuilder4PortD1Ev, aliases _ZN4grpc13ServerBuilder4PortD2Ev + + [A] _ZN4grpc13ServerBuilder4PortD2Ev + + [A] _ZN4grpc13ServerBuilder9SetOptionESt10unique_ptrIN9grpc_impl19ServerBuilderOptionESt14default_deleteIS3_EE + + [A] _ZN4grpc13ServerBuilderC1Ev, aliases _ZN4grpc13ServerBuilderC2Ev + + [A] _ZN4grpc13ServerBuilderC2Ev + + [A] _ZN4grpc13ServerBuilderD0Ev + + [A] _ZN4grpc13ServerBuilderD1Ev, aliases _ZN4grpc13ServerBuilderD2Ev + + [A] _ZN4grpc13ServerBuilderD2Ev + + [A] _ZN4grpc19AsyncGenericService11RequestCallEPNS_20GenericServerContextEPN9grpc_impl23ServerAsyncReaderWriterINS_10ByteBufferES5_EEPNS3_15CompletionQueueEPNS3_21ServerCompletionQueueEPv + + [A] _ZN4grpc19ServerBuilderPlugin19UpdateServerBuilderEPNS_13ServerBuilderE + + [A] _ZN4grpc20GenericServerContextD0Ev + + [A] _ZN4grpc24AddInsecureChannelFromFdEPN9grpc_impl6ServerEi + + [A] _ZN4grpc27CreateInsecureChannelFromFdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi + + [A] _ZN4grpc31EnableDefaultHealthCheckServiceEb + + [A] _ZN4grpc32DefaultHealthCheckServiceEnabledEv + + [A] _ZN4grpc32MetadataCredentialsPluginWrapper11DebugStringEPv + + [A] _ZN4grpc33CreateCustomInsecureChannelFromFdERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiRKN9grpc_impl16ChannelArgumentsE + + [A] _ZN4grpc37HealthCheckServiceServerBuilderOptionC1ESt10unique_ptrINS_27HealthCheckServiceInterfaceESt14default_deleteIS2_EE + + [A] _ZN4grpc37HealthCheckServiceServerBuilderOptionC2ESt10unique_ptrINS_27HealthCheckServiceInterfaceESt14default_deleteIS2_EE, aliases _ZN4grpc37HealthCheckServiceServerBuilderOptionC1ESt10unique_ptrINS_27HealthCheckServiceInterfaceESt14default_deleteIS2_EE + + [A] _ZN4grpc8internal22CallbackWithSuccessTag3SetEP9grpc_callSt8functionIFvbEEPNS0_18CompletionQueueTagEb + + [A] _ZN4grpc8internal30ExternalConnectionAcceptorImplC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_13ServerBuilder17experimental_type22ExternalConnectionTypeESt10shared_ptrIN9grpc_impl17ServerCredentialsEE, aliases _ZN4grpc8internal30ExternalConnectionAcceptorImplC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_13ServerBuilder17experimental_type22ExternalConnectionTypeESt10shared_ptrIN9grpc_impl17ServerCredentialsEE + + [A] _ZN4grpc8internal30ExternalConnectionAcceptorImplC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_13ServerBuilder17experimental_type22ExternalConnectionTypeESt10shared_ptrIN9grpc_impl17ServerCredentialsEE + + [A] _ZN9grpc_core14PemKeyCertPairD1Ev, aliases _ZN9grpc_core14PemKeyCertPairD2Ev + + [A] _ZN9grpc_core14PemKeyCertPairD2Ev + + [A] _ZN9grpc_core4JsonD1Ev, aliases _ZN9grpc_core4JsonD2Ev + + [A] _ZN9grpc_core4JsonD2Ev + + [A] _ZN9grpc_impl12experimental14StsCredentialsERKNS0_21StsCredentialsOptionsE + + [A] _ZN9grpc_impl12experimental14TlsCredentialsERKNS0_21TlsCredentialsOptionsE + + [A] _ZN9grpc_impl12experimental20TlsServerCredentialsERKNS0_21TlsCredentialsOptionsE + + [A] _ZN9grpc_impl12experimental21TlsCredentialsOptionsC1E35grpc_tls_server_verification_optionSt10shared_ptrINS0_21TlsKeyMaterialsConfigEES3_INS0_25TlsCredentialReloadConfigEES3_INS0_33TlsServerAuthorizationCheckConfigEE, aliases _ZN9grpc_impl12experimental21TlsCredentialsOptionsC2E35grpc_tls_server_verification_optionSt10shared_ptrINS0_21TlsKeyMaterialsConfigEES3_INS0_25TlsCredentialReloadConfigEES3_INS0_33TlsServerAuthorizationCheckConfigEE + + [A] _ZN9grpc_impl12experimental21TlsCredentialsOptionsC1E40grpc_ssl_client_certificate_request_type35grpc_tls_server_verification_optionSt10shared_ptrINS0_21TlsKeyMaterialsConfigEES4_INS0_25TlsCredentialReloadConfigEES4_INS0_33TlsServerAuthorizationCheckConfigEE + + [A] _ZN9grpc_impl12experimental21TlsCredentialsOptionsC1E40grpc_ssl_client_certificate_request_typeSt10shared_ptrINS0_21TlsKeyMaterialsConfigEES3_INS0_25TlsCredentialReloadConfigEE + + [A] _ZN9grpc_impl12experimental21TlsCredentialsOptionsC2E35grpc_tls_server_verification_optionSt10shared_ptrINS0_21TlsKeyMaterialsConfigEES3_INS0_25TlsCredentialReloadConfigEES3_INS0_33TlsServerAuthorizationCheckConfigEE + + [A] _ZN9grpc_impl12experimental21TlsCredentialsOptionsC2E40grpc_ssl_client_certificate_request_type35grpc_tls_server_verification_optionSt10shared_ptrINS0_21TlsKeyMaterialsConfigEES4_INS0_25TlsCredentialReloadConfigEES4_INS0_33TlsServerAuthorizationCheckConfigEE, aliases _ZN9grpc_impl12experimental21TlsCredentialsOptionsC1E40grpc_ssl_client_certificate_request_type35grpc_tls_server_verification_optionSt10shared_ptrINS0_21TlsKeyMaterialsConfigEES4_INS0_25TlsCredentialReloadConfigEES4_INS0_33TlsServerAuthorizationCheckConfigEE + + [A] _ZN9grpc_impl12experimental21TlsCredentialsOptionsC2E40grpc_ssl_client_certificate_request_typeSt10shared_ptrINS0_21TlsKeyMaterialsConfigEES3_INS0_25TlsCredentialReloadConfigEE, aliases _ZN9grpc_impl12experimental21TlsCredentialsOptionsC1E40grpc_ssl_client_certificate_request_typeSt10shared_ptrINS0_21TlsKeyMaterialsConfigEES3_INS0_25TlsCredentialReloadConfigEE + + [A] _ZN9grpc_impl12experimental21TlsCredentialsOptionsD1Ev, aliases _ZN9grpc_impl12experimental21TlsCredentialsOptionsD2Ev + + [A] _ZN9grpc_impl12experimental21TlsCredentialsOptionsD2Ev + + [A] _ZN9grpc_impl12experimental21TlsKeyMaterialsConfig14PemKeyCertPairD1Ev, aliases _ZN9grpc_impl12experimental21TlsKeyMaterialsConfig14PemKeyCertPairD2Ev + + [A] _ZN9grpc_impl12experimental21TlsKeyMaterialsConfig14PemKeyCertPairD2Ev + + [A] _ZN9grpc_impl12experimental21TlsKeyMaterialsConfig17set_key_materialsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt6vectorINS1_14PemKeyCertPairESaISB_EE + + [A] _ZN9grpc_impl12experimental21TlsKeyMaterialsConfig18set_pem_root_certsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_impl12experimental21TlsKeyMaterialsConfig21add_pem_key_cert_pairERKNS1_14PemKeyCertPairE + + [A] _ZN9grpc_impl12experimental22TlsCredentialReloadArg10set_statusE41grpc_ssl_certificate_config_reload_status + + [A] _ZN9grpc_impl12experimental22TlsCredentialReloadArg16set_cb_user_dataEPv + + [A] _ZN9grpc_impl12experimental22TlsCredentialReloadArg17set_error_detailsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_impl12experimental22TlsCredentialReloadArg17set_key_materialsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorINS0_21TlsKeyMaterialsConfig14PemKeyCertPairESaISC_EE + + [A] _ZN9grpc_impl12experimental22TlsCredentialReloadArg18set_pem_root_certsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_impl12experimental22TlsCredentialReloadArg21add_pem_key_cert_pairERKNS0_21TlsKeyMaterialsConfig14PemKeyCertPairE + + [A] _ZN9grpc_impl12experimental22TlsCredentialReloadArg24set_key_materials_configERKSt10shared_ptrINS0_21TlsKeyMaterialsConfigEE + + [A] _ZN9grpc_impl12experimental22TlsCredentialReloadArg30OnCredentialReloadDoneCallbackEv + + [A] _ZN9grpc_impl12experimental22TlsCredentialReloadArgC1EP30grpc_tls_credential_reload_arg + + [A] _ZN9grpc_impl12experimental22TlsCredentialReloadArgC2EP30grpc_tls_credential_reload_arg, aliases _ZN9grpc_impl12experimental22TlsCredentialReloadArgC1EP30grpc_tls_credential_reload_arg + + [A] _ZN9grpc_impl12experimental22TlsCredentialReloadArgD1Ev, aliases _ZN9grpc_impl12experimental22TlsCredentialReloadArgD2Ev + + [A] _ZN9grpc_impl12experimental22TlsCredentialReloadArgD2Ev + + [A] _ZN9grpc_impl12experimental25TlsCredentialReloadConfigC1ESt10shared_ptrINS0_28TlsCredentialReloadInterfaceEE + + [A] _ZN9grpc_impl12experimental25TlsCredentialReloadConfigC2ESt10shared_ptrINS0_28TlsCredentialReloadInterfaceEE, aliases _ZN9grpc_impl12experimental25TlsCredentialReloadConfigC1ESt10shared_ptrINS0_28TlsCredentialReloadInterfaceEE + + [A] _ZN9grpc_impl12experimental25TlsCredentialReloadConfigD1Ev, aliases _ZN9grpc_impl12experimental25TlsCredentialReloadConfigD2Ev + + [A] _ZN9grpc_impl12experimental25TlsCredentialReloadConfigD2Ev + + [A] _ZN9grpc_impl12experimental28ConvertToCKeyMaterialsConfigERKSt10shared_ptrINS0_21TlsKeyMaterialsConfigEE + + [A] _ZN9grpc_impl12experimental28StsCredentialsOptionsFromEnvEPNS0_21StsCredentialsOptionsE + + [A] _ZN9grpc_impl12experimental28TlsCredentialReloadInterface6CancelEPNS0_22TlsCredentialReloadArgE + + [A] _ZN9grpc_impl12experimental29MetadataCredentialsFromPluginESt10unique_ptrINS_25MetadataCredentialsPluginESt14default_deleteIS2_EE19grpc_security_level + + [A] _ZN9grpc_impl12experimental29StsCredentialsOptionsFromJsonERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS0_21StsCredentialsOptionsE + + [A] _ZN9grpc_impl12experimental30StsCredentialsCppToCoreOptionsERKNS0_21StsCredentialsOptionsE + + [A] _ZN9grpc_impl12experimental30TlsServerAuthorizationCheckArg10set_statusE16grpc_status_code + + [A] _ZN9grpc_impl12experimental30TlsServerAuthorizationCheckArg11set_successEi + + [A] _ZN9grpc_impl12experimental30TlsServerAuthorizationCheckArg13set_peer_certERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_impl12experimental30TlsServerAuthorizationCheckArg15set_target_nameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_impl12experimental30TlsServerAuthorizationCheckArg16set_cb_user_dataEPv + + [A] _ZN9grpc_impl12experimental30TlsServerAuthorizationCheckArg17set_error_detailsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_impl12experimental30TlsServerAuthorizationCheckArg24set_peer_cert_full_chainERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN9grpc_impl12experimental30TlsServerAuthorizationCheckArg38OnServerAuthorizationCheckDoneCallbackEv + + [A] _ZN9grpc_impl12experimental30TlsServerAuthorizationCheckArgC1EP39grpc_tls_server_authorization_check_arg, aliases _ZN9grpc_impl12experimental30TlsServerAuthorizationCheckArgC2EP39grpc_tls_server_authorization_check_arg + + [A] _ZN9grpc_impl12experimental30TlsServerAuthorizationCheckArgC2EP39grpc_tls_server_authorization_check_arg + + [A] _ZN9grpc_impl12experimental30TlsServerAuthorizationCheckArgD1Ev, aliases _ZN9grpc_impl12experimental30TlsServerAuthorizationCheckArgD2Ev + + [A] _ZN9grpc_impl12experimental30TlsServerAuthorizationCheckArgD2Ev + + [A] _ZN9grpc_impl12experimental32TlsCredentialReloadConfigCCancelEPvP30grpc_tls_credential_reload_arg + + [A] _ZN9grpc_impl12experimental33TlsServerAuthorizationCheckConfigC1ESt10shared_ptrINS0_36TlsServerAuthorizationCheckInterfaceEE, aliases _ZN9grpc_impl12experimental33TlsServerAuthorizationCheckConfigC2ESt10shared_ptrINS0_36TlsServerAuthorizationCheckInterfaceEE + + [A] _ZN9grpc_impl12experimental33TlsServerAuthorizationCheckConfigC2ESt10shared_ptrINS0_36TlsServerAuthorizationCheckInterfaceEE + + [A] _ZN9grpc_impl12experimental33TlsServerAuthorizationCheckConfigD1Ev, aliases _ZN9grpc_impl12experimental33TlsServerAuthorizationCheckConfigD2Ev + + [A] _ZN9grpc_impl12experimental33TlsServerAuthorizationCheckConfigD2Ev + + [A] _ZN9grpc_impl12experimental34TlsCredentialReloadConfigCScheduleEPvP30grpc_tls_credential_reload_arg + + [A] _ZN9grpc_impl12experimental36TlsCredentialReloadArgDestroyContextEPv + + [A] _ZN9grpc_impl12experimental36TlsServerAuthorizationCheckInterface6CancelEPNS0_30TlsServerAuthorizationCheckArgE + + [A] _ZN9grpc_impl12experimental40TlsServerAuthorizationCheckConfigCCancelEPvP39grpc_tls_server_authorization_check_arg + + [A] _ZN9grpc_impl12experimental42TlsServerAuthorizationCheckConfigCScheduleEPvP39grpc_tls_server_authorization_check_arg + + [A] _ZN9grpc_impl12experimental44TlsServerAuthorizationCheckArgDestroyContextEPv + + [A] _ZN9grpc_impl13ClientContext15set_credentialsERKSt10shared_ptrINS_15CallCredentialsEE + + [A] _ZN9grpc_impl13ClientContext25FromCallbackServerContextERKNS_21CallbackServerContextENS_18PropagationOptionsE + + [A] _ZN9grpc_impl13ClientContext25FromInternalServerContextERKNS_17ServerContextBaseENS_18PropagationOptionsE + + [A] _ZN9grpc_impl13ServerContextD0Ev + + [A] _ZN9grpc_impl15CallCredentials11DebugStringB5cxx11Ev + + [A] _ZN9grpc_impl16ChannelArguments16SetResourceQuotaERKN4grpc13ResourceQuotaE + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE14WriteAndFinishERKS2_NS1_12WriteOptionsERKNS1_6StatusEPv + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE19SendInitialMetadataEPv + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE5WriteERKS2_NS1_12WriteOptionsEPv + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE5WriteERKS2_Pv + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE6FinishERKNS1_6StatusEPv + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE8BindCallEPNS1_8internal4CallE + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEED0Ev + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEED1Ev, aliases _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEED2Ev + + [A] _ZN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEED2Ev + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_E10OnReadDoneEb + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_E11OnWriteDoneEb + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_E18InternalBindStreamEPNS_26ServerCallbackReaderWriterIS2_S2_EE + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_E25OnSendInitialMetadataDoneEb + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_E6FinishENS1_6StatusE + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_E8OnCancelEv + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_ED0Ev + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_ED1Ev, aliases _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_ED2Ev + + [A] _ZN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_ED2Ev + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOp11core_cq_tagEv + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOp14FinalizeResultEPPvPb + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOp17SetHijackingStateEv + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOp32ContinueFillOpsAfterInterceptionEv + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOp39ContinueFinalizeResultAfterInterceptionEv + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOp5UnrefEv + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOp7FillOpsEPN4grpc8internal4CallE + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOpD0Ev + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOpD1Ev, aliases _ZN9grpc_impl17ServerContextBase12CompletionOpD2Ev + + [A] _ZN9grpc_impl17ServerContextBase12CompletionOpD2Ev + + [A] _ZN9grpc_impl17ServerContextBase17BeginCompletionOpEPN4grpc8internal4CallESt8functionIFvbEEPNS_8internal18ServerCallbackCallE + + [A] _ZN9grpc_impl17ServerContextBase18AddInitialMetadataERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ + + [A] _ZN9grpc_impl17ServerContextBase18GetCompletionOpTagEv + + [A] _ZN9grpc_impl17ServerContextBase19AddTrailingMetadataERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ + + [A] _ZN9grpc_impl17ServerContextBase19set_server_rpc_infoEPKcN4grpc8internal9RpcMethod7RpcTypeERKSt6vectorISt10unique_ptrINS3_12experimental33ServerInterceptorFactoryInterfaceESt14default_deleteISA_EESaISD_EE + + [A] _ZN9grpc_impl17ServerContextBase21SetLoadReportingCostsERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EE + + [A] _ZN9grpc_impl17ServerContextBase23BindDeadlineAndMetadataE12gpr_timespecP19grpc_metadata_array + + [A] _ZN9grpc_impl17ServerContextBase23TestServerCallbackUnary7reactorEv + + [A] _ZN9grpc_impl17ServerContextBase25set_compression_algorithmE26grpc_compression_algorithm + + [A] _ZN9grpc_impl17ServerContextBase5ClearEv + + [A] _ZN9grpc_impl17ServerContextBase5SetupE12gpr_timespec + + [A] _ZN9grpc_impl17ServerContextBaseC1E12gpr_timespecP19grpc_metadata_array + + [A] _ZN9grpc_impl17ServerContextBaseC1Ev, aliases _ZN9grpc_impl17ServerContextBaseC2Ev + + [A] _ZN9grpc_impl17ServerContextBaseC2E12gpr_timespecP19grpc_metadata_array, aliases _ZN9grpc_impl17ServerContextBaseC1E12gpr_timespecP19grpc_metadata_array + + [A] _ZN9grpc_impl17ServerContextBaseC2Ev + + [A] _ZN9grpc_impl17ServerContextBaseD0Ev + + [A] _ZN9grpc_impl17ServerContextBaseD1Ev, aliases _ZN9grpc_impl17ServerContextBaseD2Ev + + [A] _ZN9grpc_impl17ServerContextBaseD2Ev + + [A] _ZN9grpc_impl18ClientUnaryReactor6OnDoneERKN4grpc6StatusE + + [A] _ZN9grpc_impl18ServerUnaryReactor8OnCancelEv + + [A] _ZN9grpc_impl21CallbackServerContextD0Ev + + [A] _ZN9grpc_impl21CallbackServerContextD1Ev, aliases _ZN9grpc_impl21CallbackServerContextD2Ev + + [A] _ZN9grpc_impl21CallbackServerContextD2Ev + + [A] _ZN9grpc_impl21SecureCallCredentials11DebugStringB5cxx11Ev + + [A] _ZN9grpc_impl23SecureServerCredentials24SetAuthMetadataProcessorERKSt10shared_ptrIN4grpc21AuthMetadataProcessorEE + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E14WriteAndFinishERKS2_NS1_12WriteOptionsERKNS1_6StatusEPv + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E19SendInitialMetadataEPv + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E4ReadEPS2_Pv + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E5WriteERKS2_NS1_12WriteOptionsEPv + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E5WriteERKS2_Pv + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E6FinishERKNS1_6StatusEPv + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E8BindCallEPNS1_8internal4CallE + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED0Ev + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED1Ev, aliases _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED2Ev + + [A] _ZN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED2Ev + + [A] _ZN9grpc_impl25MetadataCredentialsPlugin11DebugStringB5cxx11Ev + + [A] _ZN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEE19SendInitialMetadataEPv + + [A] _ZN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEE8BindCallEPNS1_8internal4CallE + + [A] _ZN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEED0Ev + + [A] _ZN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEED1Ev, aliases _ZN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEED2Ev + + [A] _ZN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEED2Ev + + [A] _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE14FinalizeResultEPPvPb + + [A] _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEv + + [A] _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag3RunEb + + [A] _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag9StaticRunEP42grpc_experimental_completion_queue_functori + + [A] _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEED0Ev + + [A] _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEED1Ev, aliases _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEED2Ev + + [A] _ZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEED2Ev + + [A] _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE14FinalizeResultEPPvPb + + [A] _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEv + + [A] _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE15CallbackCallTag3RunEb + + [A] _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE15CallbackCallTag9StaticRunEP42grpc_experimental_completion_queue_functori + + [A] _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEED0Ev + + [A] _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEED1Ev + + [A] _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEED2Ev, aliases _ZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEED1Ev + + [A] _ZN9grpc_impl6Server18UnrefAndWaitLockedEv + + [A] _ZN9grpc_impl6Server23UnrefWithPossibleNotifyEv + + [A] _ZN9grpc_impl6Server3RefEv + + [A] _ZN9grpc_impl6ServerC1EPNS_16ChannelArgumentsESt10shared_ptrISt6vectorISt10unique_ptrINS_21ServerCompletionQueueESt14default_deleteIS6_EESaIS9_EEEiiiS4_IS3_IN4grpc8internal30ExternalConnectionAcceptorImplEESaISG_EEP19grpc_resource_quotaS4_IS5_INSD_12experimental33ServerInterceptorFactoryInterfaceES7_ISM_EESaISO_EE + + [A] _ZN9grpc_impl6ServerC2EPNS_16ChannelArgumentsESt10shared_ptrISt6vectorISt10unique_ptrINS_21ServerCompletionQueueESt14default_deleteIS6_EESaIS9_EEEiiiS4_IS3_IN4grpc8internal30ExternalConnectionAcceptorImplEESaISG_EEP19grpc_resource_quotaS4_IS5_INSD_12experimental33ServerInterceptorFactoryInterfaceES7_ISM_EESaISO_EE, aliases _ZN9grpc_impl6ServerC1EPNS_16ChannelArgumentsESt10shared_ptrISt6vectorISt10unique_ptrINS_21ServerCompletionQueueESt14default_deleteIS6_EESaIS9_EEEiiiS4_IS3_IN4grpc8internal30ExternalConnectionAcceptorImplEESaISG_EEP19grpc_resource_quotaS4_IS5_INSD_12experimental33ServerInterceptorFactoryInterfaceES7_ISM_EESaISO_EE + + [A] _ZN9grpc_impl8internal13ClientReactor22InternalScheduleOnDoneEN4grpc6StatusE + + [A] _ZN9grpc_impl8internal13ServerReactor18InternalInlineableEv + + [A] _ZN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEE6OnDoneEv + + [A] _ZN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEED0Ev + + [A] _ZN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEED1Ev, aliases _ZN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEED2Ev + + [A] _ZN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEED2Ev + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EE10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterE + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS2_6StatusEPPv + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EED0Ev + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EED1Ev, aliases _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EED2Ev + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EED2Ev + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EE10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterE + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS2_6StatusEPPv + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EED0Ev + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EED1Ev, aliases _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EED2Ev + + [A] _ZN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EED2Ev + + [A] _ZN9grpc_impl8internal18ServerCallbackCall12CallOnCancelEPNS0_13ServerReactorE + + [A] _ZN9grpc_impl8internal18ServerCallbackCall14ScheduleOnDoneEb + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterE + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl10CallOnDoneEv + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl14WriteAndFinishEPKS3_NS2_12WriteOptionsENS2_6StatusE + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEv + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl4ReadEPS3_ + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl5WriteEPKS3_NS2_12WriteOptionsE + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl6FinishENS2_6StatusE + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl7reactorEv + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImplD0Ev + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImplD1Ev, aliases _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImplD2Ev + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImplD2Ev + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_ED0Ev + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_ED1Ev, aliases _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_ED2Ev + + [A] _ZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_ED2Ev + + [A] _ZNK4grpc21AuthMetadataProcessor10IsBlockingEv + + [A] _ZNK9grpc_impl12experimental22TlsCredentialReloadArg12cb_user_dataEv + + [A] _ZNK9grpc_impl12experimental22TlsCredentialReloadArg13error_detailsB5cxx11Ev + + [A] _ZNK9grpc_impl12experimental22TlsCredentialReloadArg31is_pem_key_cert_pair_list_emptyEv + + [A] _ZNK9grpc_impl12experimental22TlsCredentialReloadArg6statusEv + + [A] _ZNK9grpc_impl12experimental30TlsServerAuthorizationCheckArg11target_nameB5cxx11Ev + + [A] _ZNK9grpc_impl12experimental30TlsServerAuthorizationCheckArg12cb_user_dataEv + + [A] _ZNK9grpc_impl12experimental30TlsServerAuthorizationCheckArg13error_detailsB5cxx11Ev + + [A] _ZNK9grpc_impl12experimental30TlsServerAuthorizationCheckArg20peer_cert_full_chainB5cxx11Ev + + [A] _ZNK9grpc_impl12experimental30TlsServerAuthorizationCheckArg6statusEv + + [A] _ZNK9grpc_impl12experimental30TlsServerAuthorizationCheckArg7successEv + + [A] _ZNK9grpc_impl12experimental30TlsServerAuthorizationCheckArg9peer_certB5cxx11Ev + + [A] _ZNK9grpc_impl17ServerContextBase11IsCancelledEv + + [A] _ZNK9grpc_impl17ServerContextBase14census_contextEv + + [A] _ZNK9grpc_impl17ServerContextBase4peerB5cxx11Ev + + [A] _ZNK9grpc_impl17ServerContextBase9TryCancelEv + + [A] _ZNK9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE11method_nameEv + + [A] _ZNK9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE11method_nameEv + + [A] _ZNSt14_Function_base13_Base_managerIZN4grpc12experimental22CallbackGenericService7HandlerEvEUlPN9grpc_impl21CallbackServerContextEE_E10_M_managerERSt9_Any_dataRKS9_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E10_M_managerERSt9_Any_dataRKSB_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag3RunEbEUlvE_E10_M_managerERSt9_Any_dataRKSB_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestINS1_21CallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E10_M_managerERSt9_Any_dataRKS9_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl6Server15CallbackRequestINS1_21CallbackServerContextEE15CallbackCallTag3RunEbEUlvE_E10_M_managerERSt9_Any_dataRKS9_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E10RunHandlerERKNS4_8internal13MethodHandler16HandlerParameterEEUlbE_E10_M_managerERSt9_Any_dataRKSE_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS1_17ServerBidiReactorIS5_S5_EEEUlbE0_E10_M_managerERSt9_Any_dataRKSD_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS1_17ServerBidiReactorIS5_S5_EEEUlbE_E10_M_managerERSt9_Any_dataRKSD_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_E10_M_managerERSt9_Any_dataRKSA_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl6FinishENS4_6StatusEEUlbE_E10_M_managerERSt9_Any_dataRKSB_St18_Manager_operation + + [A] _ZNSt17_Function_handlerIFPN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES3_EEPNS0_21CallbackServerContextEEZNS2_12experimental22CallbackGenericService7HandlerEvEUlS7_E_E9_M_invokeERKSt9_Any_dataOS7_ + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E10RunHandlerERKNS4_8internal13MethodHandler16HandlerParameterEEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS1_17ServerBidiReactorIS5_S5_EEEUlbE0_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS1_17ServerBidiReactorIS5_S5_EEEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES5_E30ServerCallbackReaderWriterImpl6FinishENS4_6StatusEEUlbE_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag3RunEbEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestINS1_21CallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt17_Function_handlerIFvvEZN9grpc_impl6Server15CallbackRequestINS1_21CallbackServerContextEE15CallbackCallTag3RunEbEUlvE_E9_M_invokeERKSt9_Any_data + + [A] _ZNSt6vectorIN4grpc13ServerBuilder4PortESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_ + + [A] _ZNSt6vectorIN4grpc13ServerBuilder4PortESaIS2_EED1Ev, aliases _ZNSt6vectorIN4grpc13ServerBuilder4PortESaIS2_EED2Ev + + [A] _ZNSt6vectorIN4grpc13ServerBuilder4PortESaIS2_EED2Ev + + [A] _ZNSt6vectorIN9grpc_impl12experimental21TlsKeyMaterialsConfig14PemKeyCertPairESaIS3_EE17_M_realloc_insertIJRKS3_EEEvN9__gnu_cxx17__normal_iteratorIPS3_S5_EEDpOT_ + + [A] _ZNSt6vectorIN9grpc_impl12experimental21TlsKeyMaterialsConfig14PemKeyCertPairESaIS3_EEaSERKS5_ + + [A] _ZNSt6vectorIPN9grpc_impl15CompletionQueueESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_ + + [A] _ZNSt6vectorISt10unique_ptrIN4grpc13ServerBuilder12NamedServiceESt14default_deleteIS3_EESaIS6_EE12emplace_backIJPS3_EEEvDpOT_ + + [A] _ZNSt6vectorISt10unique_ptrIN4grpc13ServerBuilder12NamedServiceESt14default_deleteIS3_EESaIS6_EE17_M_realloc_insertIJPS3_EEEvN9__gnu_cxx17__normal_iteratorIPS6_S8_EEDpOT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N9grpc_core4JsonEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE8_M_eraseEPSt13_Rb_tree_nodeISA_E + + [A] _ZThn16_N9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E4ReadEPS2_Pv + + [A] _ZThn16_N9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED0Ev + + [A] _ZThn16_N9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED1Ev + + [A] _ZThn8_N9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE5WriteERKS2_NS1_12WriteOptionsEPv + + [A] _ZThn8_N9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEE5WriteERKS2_Pv + + [A] _ZThn8_N9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEED0Ev + + [A] _ZThn8_N9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEED1Ev + + [A] _ZThn8_N9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E5WriteERKS2_NS1_12WriteOptionsEPv + + [A] _ZThn8_N9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_E5WriteERKS2_Pv + + [A] _ZThn8_N9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED0Ev + + [A] _ZThn8_N9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_ED1Ev + + [A] _ZZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEEN7Reactor6OnDoneEv + + [A] _ZZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEEN7ReactorD0Ev + + [A] _ZZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEEN7ReactorD1Ev, aliases _ZZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEEN7ReactorD2Ev + + [A] _ZZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEEN7ReactorD2Ev + + [A] _ZZZN9grpc_impl8internal9AlarmImpl3SetE12gpr_timespecSt8functionIFvbEEENKUlPvP10grpc_errorE_clES6_S8_ENKUlS6_S8_E_clES6_S8_ + + [A] _ZZZN9grpc_impl8internal9AlarmImpl3SetE12gpr_timespecSt8functionIFvbEEENKUlPvP10grpc_errorE_clES6_S8_ENUlS6_S8_E_4_FUNES6_S8_ + + + +147 Removed variable symbols not referenced by debug info: + + + + [D] _ZTIN4grpc12experimental17ServerBidiReactorINS_10ByteBufferES2_EE + + [D] _ZTIN4grpc12experimental24ServerGenericBidiReactorE + + [D] _ZTIN4grpc12experimental26ClientCallbackReaderWriterINS_10ByteBufferES2_EE + + [D] _ZTIN4grpc12experimental26ServerCallbackReaderWriterINS_10ByteBufferES2_EE + + [D] _ZTIN4grpc17ServerAsyncWriterINS_10ByteBufferEEE + + [D] _ZTIN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_EE + + [D] _ZTIN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_EE + + [D] _ZTIN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEEE + + [D] _ZTIN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEEE + + [D] _ZTIN4grpc26ServerAsyncWriterInterfaceINS_10ByteBufferEEE + + [D] _ZTIN4grpc32ClientAsyncReaderWriterInterfaceINS_10ByteBufferES1_EE + + [D] _ZTIN4grpc32ServerAsyncReaderWriterInterfaceINS_10ByteBufferES1_EE + + [D] _ZTIN4grpc34ClientAsyncResponseReaderInterfaceINS_10ByteBufferEEE + + [D] _ZTIN4grpc8internal13ServerReactorE + + [D] _ZTIN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EEE + + [D] _ZTIN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EEE + + [D] _ZTIN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplE + + [D] _ZTIN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_EE + + [D] _ZTIN4grpc8internal20AsyncReaderInterfaceINS_10ByteBufferEEE + + [D] _ZTIN4grpc8internal20AsyncWriterInterfaceINS_10ByteBufferEEE + + [D] _ZTIN4grpc8internal21CallOpClientSendCloseE + + [D] _ZTIN4grpc8internal22CallOpClientRecvStatusE + + [D] _ZTIN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_EE + + [D] _ZTIN4grpc8internal25CallOpRecvInitialMetadataE + + [D] _ZTIN4grpc8internal29ClientAsyncStreamingInterfaceE + + [D] _ZTIN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_EE + + [D] _ZTIN4grpc8internal31UnimplementedGenericBidiReactorE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTIN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTIN9grpc_impl13ResourceQuotaE + + [D] _ZTIN9grpc_impl13ServerBuilderE + + [D] _ZTIN9grpc_impl13ServerContext12CompletionOpE + + [D] _ZTIN9grpc_impl27HealthCheckServiceInterfaceE + + [D] _ZTIN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEEE + + [D] _ZTIN9grpc_impl6Server15CallbackRequestINS_13ServerContextEEE + + [D] _ZTIN9grpc_impl6Server19CallbackRequestBaseE + + [D] _ZTIZN4grpc12experimental22CallbackGenericService7HandlerEvEUlvE_ + + [D] _ZTIZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_ + + [D] _ZTIZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl6FinishENS_6StatusEEUlbE_ + + [D] _ZTIZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS0_4CallESt8functionIFvvEEPNS_12experimental17ServerBidiReactorIS2_S2_EEEUlbE0_ + + [D] _ZTIZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS0_4CallESt8functionIFvvEEPNS_12experimental17ServerBidiReactorIS2_S2_EEEUlbE1_ + + [D] _ZTIZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS0_4CallESt8functionIFvvEEPNS_12experimental17ServerBidiReactorIS2_S2_EEEUlbE_ + + [D] _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E10WritesDoneEvEUlbE_ + + [D] _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE0_ + + [D] _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE1_ + + [D] _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE2_ + + [D] _ZTIZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE_ + + [D] _ZTIZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + [D] _ZTIZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag3RunEbEUlvE_ + + [D] _ZTIZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + [D] _ZTIZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE15CallbackCallTag3RunEbEUlvE_ + + [D] _ZTSN4grpc12experimental17ServerBidiReactorINS_10ByteBufferES2_EE + + [D] _ZTSN4grpc12experimental24ServerGenericBidiReactorE + + [D] _ZTSN4grpc12experimental26ClientCallbackReaderWriterINS_10ByteBufferES2_EE + + [D] _ZTSN4grpc12experimental26ServerCallbackReaderWriterINS_10ByteBufferES2_EE + + [D] _ZTSN4grpc17ServerAsyncWriterINS_10ByteBufferEEE + + [D] _ZTSN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_EE + + [D] _ZTSN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_EE + + [D] _ZTSN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEEE + + [D] _ZTSN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEEE + + [D] _ZTSN4grpc26ServerAsyncWriterInterfaceINS_10ByteBufferEEE + + [D] _ZTSN4grpc32ClientAsyncReaderWriterInterfaceINS_10ByteBufferES1_EE + + [D] _ZTSN4grpc32ServerAsyncReaderWriterInterfaceINS_10ByteBufferES1_EE + + [D] _ZTSN4grpc34ClientAsyncResponseReaderInterfaceINS_10ByteBufferEEE + + [D] _ZTSN4grpc8internal13ServerReactorE + + [D] _ZTSN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EEE + + [D] _ZTSN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EEE + + [D] _ZTSN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplE + + [D] _ZTSN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_EE + + [D] _ZTSN4grpc8internal20AsyncReaderInterfaceINS_10ByteBufferEEE + + [D] _ZTSN4grpc8internal20AsyncWriterInterfaceINS_10ByteBufferEEE + + [D] _ZTSN4grpc8internal21CallOpClientSendCloseE + + [D] _ZTSN4grpc8internal22CallOpClientRecvStatusE + + [D] _ZTSN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_EE + + [D] _ZTSN4grpc8internal25CallOpRecvInitialMetadataE + + [D] _ZTSN4grpc8internal29ClientAsyncStreamingInterfaceE + + [D] _ZTSN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_EE + + [D] _ZTSN4grpc8internal31UnimplementedGenericBidiReactorE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTSN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTSN9grpc_impl13ResourceQuotaE + + [D] _ZTSN9grpc_impl13ServerBuilderE + + [D] _ZTSN9grpc_impl13ServerContext12CompletionOpE + + [D] _ZTSN9grpc_impl27HealthCheckServiceInterfaceE + + [D] _ZTSN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEEE + + [D] _ZTSN9grpc_impl6Server15CallbackRequestINS_13ServerContextEEE + + [D] _ZTSN9grpc_impl6Server19CallbackRequestBaseE + + [D] _ZTSZN4grpc12experimental22CallbackGenericService7HandlerEvEUlvE_ + + [D] _ZTSZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_ + + [D] _ZTSZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImpl6FinishENS_6StatusEEUlbE_ + + [D] _ZTSZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS0_4CallESt8functionIFvvEEPNS_12experimental17ServerBidiReactorIS2_S2_EEEUlbE0_ + + [D] _ZTSZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS0_4CallESt8functionIFvvEEPNS_12experimental17ServerBidiReactorIS2_S2_EEEUlbE1_ + + [D] _ZTSZN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplC4EPN9grpc_impl13ServerContextEPNS0_4CallESt8functionIFvvEEPNS_12experimental17ServerBidiReactorIS2_S2_EEEUlbE_ + + [D] _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E10WritesDoneEvEUlbE_ + + [D] _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE0_ + + [D] _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE1_ + + [D] _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE2_ + + [D] _ZTSZN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_E9StartCallEvEUlbE_ + + [D] _ZTSZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + [D] _ZTSZN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEE15CallbackCallTag3RunEbEUlvE_ + + [D] _ZTSZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + [D] _ZTSZN9grpc_impl6Server15CallbackRequestINS_13ServerContextEE15CallbackCallTag3RunEbEUlvE_ + + [D] _ZTVN4grpc17ServerAsyncWriterINS_10ByteBufferEEE + + [D] _ZTVN4grpc23ClientAsyncReaderWriterINS_10ByteBufferES1_EE + + [D] _ZTVN4grpc23ServerAsyncReaderWriterINS_10ByteBufferES1_EE + + [D] _ZTVN4grpc25ClientAsyncResponseReaderINS_10ByteBufferEEE + + [D] _ZTVN4grpc25ServerAsyncResponseWriterINS_10ByteBufferEEE + + [D] _ZTVN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE12EEE + + [D] _ZTVN4grpc8internal18ErrorMethodHandlerILNS_10StatusCodeE8EEE + + [D] _ZTVN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_E30ServerCallbackReaderWriterImplE + + [D] _ZTVN4grpc8internal19CallbackBidiHandlerINS_10ByteBufferES2_EE + + [D] _ZTVN4grpc8internal24UnimplementedBidiReactorINS_10ByteBufferES2_EE + + [D] _ZTVN4grpc8internal30ClientCallbackReaderWriterImplINS_10ByteBufferES2_EE + + [D] _ZTVN4grpc8internal31UnimplementedGenericBidiReactorE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_22CallOpClientRecvStatusENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_8CallNoOpILi3EEENS6_ILi4EEENS6_ILi5EEENS6_ILi6EEEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_22CallOpClientRecvStatusENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi2EEENS3_ILi3EEENS3_ILi4EEENS3_ILi5EEENS3_ILi6EEEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_22CallOpClientRecvStatusEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_8CallNoOpILi4EEENS5_ILi5EEENS5_ILi6EEEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_25CallOpRecvInitialMetadataENS0_17CallOpRecvMessageINS_10ByteBufferEEENS0_21CallOpClientSendCloseENS0_22CallOpClientRecvStatusEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_21CallOpClientSendCloseENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTVN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi3EEENS4_ILi4EEENS4_ILi5EEENS4_ILi6EEEEE + + [D] _ZTVN9grpc_impl13ResourceQuotaE + + [D] _ZTVN9grpc_impl13ServerBuilderE + + [D] _ZTVN9grpc_impl13ServerContext12CompletionOpE + + [D] _ZTVN9grpc_impl6Server15CallbackRequestIN4grpc20GenericServerContextEEE + + [D] _ZTVN9grpc_impl6Server15CallbackRequestINS_13ServerContextEEE + + [D] grpc_health_v1_HealthCheckRequest_fields + + [D] grpc_health_v1_HealthCheckResponse_fields + + + +99 Added variable symbols not referenced by debug info: + + + + _ZTIN4grpc12experimental28GenericCallbackServerContextE + + _ZTIN4grpc13ResourceQuotaE + + _ZTIN4grpc13ServerBuilderE + + _ZTIN4grpc20GenericServerContextE + + _ZTIN4grpc27HealthCheckServiceInterfaceE + + _ZTIN9grpc_impl13ServerContextE + + _ZTIN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEEE + + _ZTIN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_EE + + _ZTIN9grpc_impl17ServerContextBase12CompletionOpE + + _ZTIN9grpc_impl17ServerContextBaseE + + _ZTIN9grpc_impl21CallbackServerContextE + + _ZTIN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_EE + + _ZTIN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEEE + + _ZTIN9grpc_impl26ServerAsyncWriterInterfaceIN4grpc10ByteBufferEEE + + _ZTIN9grpc_impl26ServerCallbackReaderWriterIN4grpc10ByteBufferES2_EE + + _ZTIN9grpc_impl32ServerAsyncReaderWriterInterfaceIN4grpc10ByteBufferES2_EE + + _ZTIN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEEE + + _ZTIN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEEE + + _ZTIN9grpc_impl8internal13ClientReactorE + + _ZTIN9grpc_impl8internal13ServerReactorE + + _ZTIN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEEE + + _ZTIN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EEE + + _ZTIN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EEE + + _ZTIN9grpc_impl8internal18ServerCallbackCallE + + _ZTIN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImplE + + _ZTIN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_EE + + _ZTIN9grpc_impl8internal20AsyncReaderInterfaceIN4grpc10ByteBufferEEE + + _ZTIN9grpc_impl8internal20AsyncWriterInterfaceIN4grpc10ByteBufferEEE + + _ZTIZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEE7Reactor + + _ZTIZN4grpc12experimental22CallbackGenericService7HandlerEvEUlPN9grpc_impl21CallbackServerContextEE_ + + _ZTIZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + _ZTIZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag3RunEbEUlvE_ + + _ZTIZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + _ZTIZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE15CallbackCallTag3RunEbEUlvE_ + + _ZTIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterEEUlbE_ + + _ZTIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS_17ServerBidiReactorIS3_S3_EEEUlbE0_ + + _ZTIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS_17ServerBidiReactorIS3_S3_EEEUlbE_ + + _ZTIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_ + + _ZTIZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl6FinishENS2_6StatusEEUlbE_ + + _ZTSN4grpc12experimental28GenericCallbackServerContextE + + _ZTSN4grpc13ResourceQuotaE + + _ZTSN4grpc13ServerBuilderE + + _ZTSN4grpc20GenericServerContextE + + _ZTSN4grpc27HealthCheckServiceInterfaceE + + _ZTSN9grpc_impl13ServerContextE + + _ZTSN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEEE + + _ZTSN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_EE + + _ZTSN9grpc_impl17ServerContextBase12CompletionOpE + + _ZTSN9grpc_impl17ServerContextBaseE + + _ZTSN9grpc_impl21CallbackServerContextE + + _ZTSN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_EE + + _ZTSN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEEE + + _ZTSN9grpc_impl26ServerAsyncWriterInterfaceIN4grpc10ByteBufferEEE + + _ZTSN9grpc_impl26ServerCallbackReaderWriterIN4grpc10ByteBufferES2_EE + + _ZTSN9grpc_impl32ServerAsyncReaderWriterInterfaceIN4grpc10ByteBufferES2_EE + + _ZTSN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEEE + + _ZTSN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEEE + + _ZTSN9grpc_impl8internal13ClientReactorE + + _ZTSN9grpc_impl8internal13ServerReactorE + + _ZTSN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEEE + + _ZTSN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EEE + + _ZTSN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EEE + + _ZTSN9grpc_impl8internal18ServerCallbackCallE + + _ZTSN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImplE + + _ZTSN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_EE + + _ZTSN9grpc_impl8internal20AsyncReaderInterfaceIN4grpc10ByteBufferEEE + + _ZTSN9grpc_impl8internal20AsyncWriterInterfaceIN4grpc10ByteBufferEEE + + _ZTSZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEE7Reactor + + _ZTSZN4grpc12experimental22CallbackGenericService7HandlerEvEUlPN9grpc_impl21CallbackServerContextEE_ + + _ZTSZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + _ZTSZN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEE15CallbackCallTag3RunEbEUlvE_ + + _ZTSZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE15CallbackCallTag28ContinueRunAfterInterceptionEvEUlvE_ + + _ZTSZN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEE15CallbackCallTag3RunEbEUlvE_ + + _ZTSZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterEEUlbE_ + + _ZTSZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS_17ServerBidiReactorIS3_S3_EEEUlbE0_ + + _ZTSZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl12SetupReactorEPNS_17ServerBidiReactorIS3_S3_EEEUlbE_ + + _ZTSZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl19SendInitialMetadataEvEUlbE_ + + _ZTSZN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImpl6FinishENS2_6StatusEEUlbE_ + + _ZTVN4grpc12experimental28GenericCallbackServerContextE + + _ZTVN4grpc13ResourceQuotaE + + _ZTVN4grpc13ServerBuilderE + + _ZTVN4grpc20GenericServerContextE + + _ZTVN9grpc_impl13ServerContextE + + _ZTVN9grpc_impl17ServerAsyncWriterIN4grpc10ByteBufferEEE + + _ZTVN9grpc_impl17ServerBidiReactorIN4grpc10ByteBufferES2_EE + + _ZTVN9grpc_impl17ServerContextBase12CompletionOpE + + _ZTVN9grpc_impl17ServerContextBaseE + + _ZTVN9grpc_impl21CallbackServerContextE + + _ZTVN9grpc_impl23ServerAsyncReaderWriterIN4grpc10ByteBufferES2_EE + + _ZTVN9grpc_impl25ServerAsyncResponseWriterIN4grpc10ByteBufferEEE + + _ZTVN9grpc_impl6Server15CallbackRequestIN4grpc12experimental28GenericCallbackServerContextEEE + + _ZTVN9grpc_impl6Server15CallbackRequestINS_21CallbackServerContextEEE + + _ZTVN9grpc_impl8internal13ClientReactorE + + _ZTVN9grpc_impl8internal17FinishOnlyReactorINS_17ServerBidiReactorIN4grpc10ByteBufferES4_EEEE + + _ZTVN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE12EEE + + _ZTVN9grpc_impl8internal18ErrorMethodHandlerILN4grpc10StatusCodeE8EEE + + _ZTVN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_E30ServerCallbackReaderWriterImplE + + _ZTVN9grpc_impl8internal19CallbackBidiHandlerIN4grpc10ByteBufferES3_EE + + _ZTVZN4grpc12experimental22CallbackGenericService13CreateReactorEPNS0_28GenericCallbackServerContextEE7Reactor + + + +---------------diffs in grpc_libgrpc++_error_details.so.1.31.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + +Function symbols changes summary: 13 Removed, 13 Added function symbols not referenced by debug info + +Variable symbols changes summary: 2 Removed, 0 Added variable symbols not referenced by debug info + + + +13 Removed function symbols not referenced by debug info: + + + + _ZN6google3rpc6Status27MergePartialFromCodedStreamEPNS_8protobuf2io16CodedInputStreamE + + _ZN6google3rpc6StatusC1Ev + + _ZN6google3rpc6StatusC2Ev, aliases _ZN6google3rpc6StatusC1Ev + + _ZN6google8protobuf8internal14ArenaStringPtr21CreateInstanceNoArenaEPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + _ZN6google8protobuf8internal21arena_destruct_objectINS1_29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEE9ContainerEEEvPv + + _ZN6google8protobuf8internal21arena_destruct_objectINS_3rpc6StatusEEEvPv + + _ZN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEE27mutable_unknown_fields_slowEv + + _ZN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEED1Ev + + _ZN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEED2Ev, aliases _ZN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEED1Ev + + _ZNK6google3rpc6Status24SerializeWithCachedSizesEPNS_8protobuf2io17CodedOutputStreamE + + _ZNK6google3rpc6Status39InternalSerializeWithCachedSizesToArrayEPh + + _ZNK6google8protobuf11MessageLite20GetMaybeArenaPointerEv + + _ZNK6google8protobuf11MessageLite8GetArenaEv + + + +13 Added function symbols not referenced by debug info: + + + + _ZN6google3rpc6Status14_InternalParseEPKcPNS_8protobuf8internal12ParseContextE + + _ZN6google3rpc6Status9ArenaDtorEPv + + _ZN6google3rpc6StatusC1EPNS_8protobuf5ArenaE + + _ZN6google3rpc6StatusC2EPNS_8protobuf5ArenaE, aliases _ZN6google3rpc6StatusC1EPNS_8protobuf5ArenaE + + _ZN6google8protobuf16RepeatedPtrFieldINS0_3AnyEED1Ev + + _ZN6google8protobuf16RepeatedPtrFieldINS0_3AnyEED2Ev, aliases _ZN6google8protobuf16RepeatedPtrFieldINS0_3AnyEED1Ev + + _ZN6google8protobuf8internal12ParseContext12ParseMessageINS0_3AnyEEEPKcPT_S6_ + + _ZN6google8protobuf8internal14ArenaStringPtr14CreateInstanceEPNS0_5ArenaEPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + _ZN6google8protobuf8internal16InternalMetadata27mutable_unknown_fields_slowINS0_15UnknownFieldSetEEEPT_v + + _ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS0_16RepeatedPtrFieldINS0_3AnyEE11TypeHandlerEEEvv + + _ZN6google8protobuf8internal21arena_destruct_objectINS1_16InternalMetadata9ContainerINS0_15UnknownFieldSetEEEEEvPv + + _ZN6google8protobuf8internal21arena_destruct_objectINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvPv + + _ZNK6google3rpc6Status18_InternalSerializeEPhPNS_8protobuf2io19EpsCopyOutputStreamE + + + +2 Removed variable symbols not referenced by debug info: + + + + _ZTIN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEE9ContainerE + + _ZTSN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEE9ContainerE + + + +---------------diffs in grpc_libgrpcpp_channelz.so.1.31.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + +Function symbols changes summary: 373 Removed, 364 Added function symbols not referenced by debug info + +Variable symbols changes summary: 109 Removed, 65 Added variable symbols not referenced by debug info + + + +373 Removed function symbols not referenced by debug info: + + + + [D] _ZN4grpc12experimental18ClientUnaryReactor25OnReadInitialMetadataDoneEb + + [D] _ZN4grpc12experimental18ClientUnaryReactor6OnDoneERKNS_6StatusE + + [D] _ZN4grpc19ServerBuilderPlugin19UpdateServerBuilderEPN9grpc_impl13ServerBuilderE + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetServerResponseEE19ReadInitialMetadataEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetServerResponseEE6FinishEPS3_PNS_6StatusEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetServerResponseEE9StartCallEv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetServerResponseEED0Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetServerResponseEED2Ev, _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetServerResponseEED1Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetServerResponseEED1Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetServerResponseEED2Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetServerResponseEED1Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetSocketResponseEE19ReadInitialMetadataEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetSocketResponseEE6FinishEPS3_PNS_6StatusEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetSocketResponseEE9StartCallEv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetSocketResponseEED0Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetSocketResponseEED2Ev, _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetSocketResponseEED1Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetSocketResponseEED1Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetSocketResponseEED2Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetSocketResponseEED1Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetChannelResponseEE19ReadInitialMetadataEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetChannelResponseEE6FinishEPS3_PNS_6StatusEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetChannelResponseEE9StartCallEv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetChannelResponseEED0Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetChannelResponseEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetChannelResponseEED1Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetChannelResponseEED0Ev, _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetChannelResponseEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetChannelResponseEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetServersResponseEE19ReadInitialMetadataEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetServersResponseEE6FinishEPS3_PNS_6StatusEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetServersResponseEE9StartCallEv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetServersResponseEED0Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetServersResponseEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetServersResponseEED1Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetServersResponseEED0Ev, _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetServersResponseEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetServersResponseEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v121GetSubchannelResponseEE19ReadInitialMetadataEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v121GetSubchannelResponseEE6FinishEPS3_PNS_6StatusEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v121GetSubchannelResponseEE9StartCallEv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v121GetSubchannelResponseEED0Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v121GetSubchannelResponseEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v121GetSubchannelResponseEED1Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v121GetSubchannelResponseEED0Ev, _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v121GetSubchannelResponseEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v121GetSubchannelResponseEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v122GetTopChannelsResponseEE19ReadInitialMetadataEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v122GetTopChannelsResponseEE6FinishEPS3_PNS_6StatusEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v122GetTopChannelsResponseEE9StartCallEv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v122GetTopChannelsResponseEED0Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v122GetTopChannelsResponseEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v122GetTopChannelsResponseEED1Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v122GetTopChannelsResponseEED0Ev, _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v122GetTopChannelsResponseEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v122GetTopChannelsResponseEED2Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v124GetServerSocketsResponseEE19ReadInitialMetadataEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v124GetServerSocketsResponseEE6FinishEPS3_PNS_6StatusEPv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v124GetServerSocketsResponseEE9StartCallEv + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v124GetServerSocketsResponseEED0Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v124GetServerSocketsResponseEED2Ev, _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v124GetServerSocketsResponseEED1Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v124GetServerSocketsResponseEED1Ev + + [D] _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v124GetServerSocketsResponseEED2Ev, aliases _ZN4grpc25ClientAsyncResponseReaderINS_8channelz2v124GetServerSocketsResponseEED1Ev + + [D] _ZN4grpc8channelz2v110ChannelRef27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v110ChannelRefC1Ev, aliases _ZN4grpc8channelz2v110ChannelRefC2Ev + + [D] _ZN4grpc8channelz2v110ChannelRefC2Ev + + [D] _ZN4grpc8channelz2v110ServerData27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v110ServerDataC1Ev, aliases _ZN4grpc8channelz2v110ServerDataC2Ev + + [D] _ZN4grpc8channelz2v110ServerDataC2Ev + + [D] _ZN4grpc8channelz2v110SocketData27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v110SocketDataC1Ev, aliases _ZN4grpc8channelz2v110SocketDataC2Ev + + [D] _ZN4grpc8channelz2v110SocketDataC2Ev + + [D] _ZN4grpc8channelz2v110Subchannel27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v110SubchannelC1Ev + + [D] _ZN4grpc8channelz2v110SubchannelC2Ev, aliases _ZN4grpc8channelz2v110SubchannelC1Ev + + [D] _ZN4grpc8channelz2v111ChannelData27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v111ChannelDataC1Ev + + [D] _ZN4grpc8channelz2v111ChannelDataC2Ev, aliases _ZN4grpc8channelz2v111ChannelDataC1Ev + + [D] _ZN4grpc8channelz2v112ChannelTrace27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v112ChannelTraceC1Ev + + [D] _ZN4grpc8channelz2v112ChannelTraceC2Ev, aliases _ZN4grpc8channelz2v112ChannelTraceC1Ev + + [D] _ZN4grpc8channelz2v112Security_Tls27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v112Security_TlsC1Ev + + [D] _ZN4grpc8channelz2v112Security_TlsC2Ev, aliases _ZN4grpc8channelz2v112Security_TlsC1Ev + + [D] _ZN4grpc8channelz2v112SocketOption27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v112SocketOptionC1Ev, aliases _ZN4grpc8channelz2v112SocketOptionC2Ev + + [D] _ZN4grpc8channelz2v112SocketOptionC2Ev + + [D] _ZN4grpc8channelz2v113SubchannelRef27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v113SubchannelRefC1Ev + + [D] _ZN4grpc8channelz2v113SubchannelRefC2Ev, aliases _ZN4grpc8channelz2v113SubchannelRefC1Ev + + [D] _ZN4grpc8channelz2v116GetServerRequest27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v116GetServerRequestC1Ev, aliases _ZN4grpc8channelz2v116GetServerRequestC2Ev + + [D] _ZN4grpc8channelz2v116GetServerRequestC2Ev + + [D] _ZN4grpc8channelz2v116GetSocketRequest27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v116GetSocketRequestC1Ev + + [D] _ZN4grpc8channelz2v116GetSocketRequestC2Ev, aliases _ZN4grpc8channelz2v116GetSocketRequestC1Ev + + [D] _ZN4grpc8channelz2v117ChannelTraceEvent27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v117ChannelTraceEventC1Ev + + [D] _ZN4grpc8channelz2v117ChannelTraceEventC2Ev, aliases _ZN4grpc8channelz2v117ChannelTraceEventC1Ev + + [D] _ZN4grpc8channelz2v117GetChannelRequest27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v117GetChannelRequestC1Ev + + [D] _ZN4grpc8channelz2v117GetChannelRequestC2Ev, aliases _ZN4grpc8channelz2v117GetChannelRequestC1Ev + + [D] _ZN4grpc8channelz2v117GetServerResponse27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v117GetServerResponseC1Ev + + [D] _ZN4grpc8channelz2v117GetServerResponseC2Ev, aliases _ZN4grpc8channelz2v117GetServerResponseC1Ev + + [D] _ZN4grpc8channelz2v117GetServersRequest27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v117GetServersRequestC1Ev, aliases _ZN4grpc8channelz2v117GetServersRequestC2Ev + + [D] _ZN4grpc8channelz2v117GetServersRequestC2Ev + + [D] _ZN4grpc8channelz2v117GetSocketResponse27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v117GetSocketResponseC1Ev + + [D] _ZN4grpc8channelz2v117GetSocketResponseC2Ev, aliases _ZN4grpc8channelz2v117GetSocketResponseC1Ev + + [D] _ZN4grpc8channelz2v118Address_UdsAddress27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v118Address_UdsAddressC1Ev + + [D] _ZN4grpc8channelz2v118Address_UdsAddressC2Ev, aliases _ZN4grpc8channelz2v118Address_UdsAddressC1Ev + + [D] _ZN4grpc8channelz2v118GetChannelResponse27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v118GetChannelResponseC1Ev + + [D] _ZN4grpc8channelz2v118GetChannelResponseC2Ev, aliases _ZN4grpc8channelz2v118GetChannelResponseC1Ev + + [D] _ZN4grpc8channelz2v118GetServersResponse27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v118GetServersResponseC1Ev, aliases _ZN4grpc8channelz2v118GetServersResponseC2Ev + + [D] _ZN4grpc8channelz2v118GetServersResponseC2Ev + + [D] _ZN4grpc8channelz2v118SocketOptionLinger27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v118SocketOptionLingerC1Ev, aliases _ZN4grpc8channelz2v118SocketOptionLingerC2Ev + + [D] _ZN4grpc8channelz2v118SocketOptionLingerC2Ev + + [D] _ZN4grpc8channelz2v119SocketOptionTcpInfo27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v119SocketOptionTcpInfoC1Ev, aliases _ZN4grpc8channelz2v119SocketOptionTcpInfoC2Ev + + [D] _ZN4grpc8channelz2v119SocketOptionTcpInfoC2Ev + + [D] _ZN4grpc8channelz2v119SocketOptionTimeout27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v119SocketOptionTimeoutC1Ev + + [D] _ZN4grpc8channelz2v119SocketOptionTimeoutC2Ev, aliases _ZN4grpc8channelz2v119SocketOptionTimeoutC1Ev + + [D] _ZN4grpc8channelz2v120Address_OtherAddress27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v120Address_OtherAddressC1Ev + + [D] _ZN4grpc8channelz2v120Address_OtherAddressC2Ev, aliases _ZN4grpc8channelz2v120Address_OtherAddressC1Ev + + [D] _ZN4grpc8channelz2v120Address_TcpIpAddress27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v120Address_TcpIpAddressC1Ev + + [D] _ZN4grpc8channelz2v120Address_TcpIpAddressC2Ev, aliases _ZN4grpc8channelz2v120Address_TcpIpAddressC1Ev + + [D] _ZN4grpc8channelz2v120GetSubchannelRequest27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v120GetSubchannelRequestC1Ev + + [D] _ZN4grpc8channelz2v120GetSubchannelRequestC2Ev, aliases _ZN4grpc8channelz2v120GetSubchannelRequestC1Ev + + [D] _ZN4grpc8channelz2v121GetSubchannelResponse27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v121GetSubchannelResponseC1Ev, aliases _ZN4grpc8channelz2v121GetSubchannelResponseC2Ev + + [D] _ZN4grpc8channelz2v121GetSubchannelResponseC2Ev + + [D] _ZN4grpc8channelz2v121GetTopChannelsRequest27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v121GetTopChannelsRequestC1Ev + + [D] _ZN4grpc8channelz2v121GetTopChannelsRequestC2Ev, aliases _ZN4grpc8channelz2v121GetTopChannelsRequestC1Ev + + [D] _ZN4grpc8channelz2v122GetTopChannelsResponse27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v122GetTopChannelsResponseC1Ev, aliases _ZN4grpc8channelz2v122GetTopChannelsResponseC2Ev + + [D] _ZN4grpc8channelz2v122GetTopChannelsResponseC2Ev + + [D] _ZN4grpc8channelz2v122Security_OtherSecurity27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v122Security_OtherSecurityC1Ev, aliases _ZN4grpc8channelz2v122Security_OtherSecurityC2Ev + + [D] _ZN4grpc8channelz2v122Security_OtherSecurityC2Ev + + [D] _ZN4grpc8channelz2v123GetServerSocketsRequest27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v123GetServerSocketsRequestC1Ev, aliases _ZN4grpc8channelz2v123GetServerSocketsRequestC2Ev + + [D] _ZN4grpc8channelz2v123GetServerSocketsRequestC2Ev + + [D] _ZN4grpc8channelz2v124ChannelConnectivityState27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v124ChannelConnectivityStateC1Ev, aliases _ZN4grpc8channelz2v124ChannelConnectivityStateC2Ev + + [D] _ZN4grpc8channelz2v124ChannelConnectivityStateC2Ev + + [D] _ZN4grpc8channelz2v124GetServerSocketsResponse27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v124GetServerSocketsResponseC1Ev, aliases _ZN4grpc8channelz2v124GetServerSocketsResponseC2Ev + + [D] _ZN4grpc8channelz2v124GetServerSocketsResponseC2Ev + + [D] _ZN4grpc8channelz2v16Server27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v16ServerC1Ev + + [D] _ZN4grpc8channelz2v16ServerC2Ev, aliases _ZN4grpc8channelz2v16ServerC1Ev + + [D] _ZN4grpc8channelz2v16Socket27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v16SocketC1Ev, aliases _ZN4grpc8channelz2v16SocketC2Ev + + [D] _ZN4grpc8channelz2v16SocketC2Ev + + [D] _ZN4grpc8channelz2v17Address27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v17AddressC1Ev, aliases _ZN4grpc8channelz2v17AddressC2Ev + + [D] _ZN4grpc8channelz2v17AddressC2Ev + + [D] _ZN4grpc8channelz2v17Channel27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v17ChannelC1Ev, aliases _ZN4grpc8channelz2v17ChannelC2Ev + + [D] _ZN4grpc8channelz2v17ChannelC2Ev + + [D] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async10GetChannelEPN9grpc_impl13ClientContextEPKNS1_17GetChannelRequestEPNS1_18GetChannelResponseEPNS_12experimental18ClientUnaryReactorE + + [D] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async10GetChannelEPN9grpc_impl13ClientContextEPKNS_10ByteBufferEPNS1_18GetChannelResponseEPNS_12experimental18ClientUnaryReactorE + + [D] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async10GetServersEPN9grpc_impl13ClientContextEPKNS1_17GetServersRequestEPNS1_18GetServersResponseEPNS_12experimental18ClientUnaryReactorE + + [D] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async10GetServersEPN9grpc_impl13ClientContextEPKNS_10ByteBufferEPNS1_18GetServersResponseEPNS_12experimental18ClientUnaryReactorE + + [D] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async13GetSubchannelEPN9grpc_impl13ClientContextEPKNS1_20GetSubchannelRequestEPNS1_21GetSubchannelResponseEPNS_12experimental18ClientUnaryReactorE + + [D] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async13GetSubchannelEPN9grpc_impl13ClientContextEPKNS_10ByteBufferEPNS1_21GetSubchannelResponseEPNS_12experimental18ClientUnaryReactorE + + [D] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async14GetTopChannelsEPN9grpc_impl13ClientContextEPKNS1_21GetTopChannelsRequestEPNS1_22GetTopChannelsResponseEPNS_12experimental18ClientUnaryReactorE + + [D] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async14GetTopChannelsEPN9grpc_impl13ClientContextEPKNS_10ByteBufferEPNS1_22GetTopChannelsResponseEPNS_12experimental18ClientUnaryReactorE + + [D] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async16GetServerSocketsEPN9grpc_impl13ClientContextEPKNS1_23GetServerSocketsRequestEPNS1_24GetServerSocketsResponseEPNS_12experimental18ClientUnaryReactorE + + [D] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async16GetServerSocketsEPN9grpc_impl13ClientContextEPKNS_10ByteBufferEPNS1_24GetServerSocketsResponseEPNS_12experimental18ClientUnaryReactorE + + [D] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async9GetServerEPN9grpc_impl13ClientContextEPKNS1_16GetServerRequestEPNS1_17GetServerResponseEPNS_12experimental18ClientUnaryReactorE + + [D] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async9GetServerEPN9grpc_impl13ClientContextEPKNS_10ByteBufferEPNS1_17GetServerResponseEPNS_12experimental18ClientUnaryReactorE + + [D] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async9GetSocketEPN9grpc_impl13ClientContextEPKNS1_16GetSocketRequestEPNS1_17GetSocketResponseEPNS_12experimental18ClientUnaryReactorE + + [D] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async9GetSocketEPN9grpc_impl13ClientContextEPKNS_10ByteBufferEPNS1_17GetSocketResponseEPNS_12experimental18ClientUnaryReactorE + + [D] _ZN4grpc8channelz2v18Security27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v18SecurityC1Ev, aliases _ZN4grpc8channelz2v18SecurityC2Ev + + [D] _ZN4grpc8channelz2v18SecurityC2Ev + + [D] _ZN4grpc8channelz2v19ServerRef27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v19ServerRefC1Ev, aliases _ZN4grpc8channelz2v19ServerRefC2Ev + + [D] _ZN4grpc8channelz2v19ServerRefC2Ev + + [D] _ZN4grpc8channelz2v19SocketRef27MergePartialFromCodedStreamEPN6google8protobuf2io16CodedInputStreamE + + [D] _ZN4grpc8channelz2v19SocketRefC1Ev, aliases _ZN4grpc8channelz2v19SocketRefC2Ev + + [D] _ZN4grpc8channelz2v19SocketRefC2Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetServerRequestENS3_17GetServerResponseEE10RunHandlerERKNS0_13MethodHandler16HandlerParameterE + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetServerRequestENS3_17GetServerResponseEE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS_6StatusEPPv + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetServerRequestENS3_17GetServerResponseEED0Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetServerRequestENS3_17GetServerResponseEED1Ev, aliases _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetServerRequestENS3_17GetServerResponseEED2Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetServerRequestENS3_17GetServerResponseEED2Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetSocketRequestENS3_17GetSocketResponseEE10RunHandlerERKNS0_13MethodHandler16HandlerParameterE + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetSocketRequestENS3_17GetSocketResponseEE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS_6StatusEPPv + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetSocketRequestENS3_17GetSocketResponseEED0Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetSocketRequestENS3_17GetSocketResponseEED1Ev, aliases _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetSocketRequestENS3_17GetSocketResponseEED2Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetSocketRequestENS3_17GetSocketResponseEED2Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetChannelRequestENS3_18GetChannelResponseEE10RunHandlerERKNS0_13MethodHandler16HandlerParameterE + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetChannelRequestENS3_18GetChannelResponseEE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS_6StatusEPPv + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetChannelRequestENS3_18GetChannelResponseEED0Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetChannelRequestENS3_18GetChannelResponseEED1Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetChannelRequestENS3_18GetChannelResponseEED2Ev, aliases _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetChannelRequestENS3_18GetChannelResponseEED1Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetServersRequestENS3_18GetServersResponseEE10RunHandlerERKNS0_13MethodHandler16HandlerParameterE + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetServersRequestENS3_18GetServersResponseEE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS_6StatusEPPv + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetServersRequestENS3_18GetServersResponseEED0Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetServersRequestENS3_18GetServersResponseEED1Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetServersRequestENS3_18GetServersResponseEED2Ev, aliases _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetServersRequestENS3_18GetServersResponseEED1Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_20GetSubchannelRequestENS3_21GetSubchannelResponseEE10RunHandlerERKNS0_13MethodHandler16HandlerParameterE + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_20GetSubchannelRequestENS3_21GetSubchannelResponseEE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS_6StatusEPPv + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_20GetSubchannelRequestENS3_21GetSubchannelResponseEED0Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_20GetSubchannelRequestENS3_21GetSubchannelResponseEED1Ev, aliases _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_20GetSubchannelRequestENS3_21GetSubchannelResponseEED2Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_20GetSubchannelRequestENS3_21GetSubchannelResponseEED2Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_21GetTopChannelsRequestENS3_22GetTopChannelsResponseEE10RunHandlerERKNS0_13MethodHandler16HandlerParameterE + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_21GetTopChannelsRequestENS3_22GetTopChannelsResponseEE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS_6StatusEPPv + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_21GetTopChannelsRequestENS3_22GetTopChannelsResponseEED0Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_21GetTopChannelsRequestENS3_22GetTopChannelsResponseEED1Ev, aliases _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_21GetTopChannelsRequestENS3_22GetTopChannelsResponseEED2Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_21GetTopChannelsRequestENS3_22GetTopChannelsResponseEED2Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_23GetServerSocketsRequestENS3_24GetServerSocketsResponseEE10RunHandlerERKNS0_13MethodHandler16HandlerParameterE + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_23GetServerSocketsRequestENS3_24GetServerSocketsResponseEE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS_6StatusEPPv + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_23GetServerSocketsRequestENS3_24GetServerSocketsResponseEED0Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_23GetServerSocketsRequestENS3_24GetServerSocketsResponseEED1Ev, aliases _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_23GetServerSocketsRequestENS3_24GetServerSocketsResponseEED2Ev + + [D] _ZN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_23GetServerSocketsRequestENS3_24GetServerSocketsResponseEED2Ev + + [D] _ZN4grpc8internal23CatchingFunctionHandlerIZNS0_16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS4_16GetServerRequestENS4_17GetServerResponseEE10RunHandlerERKNS0_13MethodHandler16HandlerParameterEEUlvE_EENS_6StatusEOT_ + + [D] _ZN4grpc8internal23CatchingFunctionHandlerIZNS0_16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS4_16GetSocketRequestENS4_17GetSocketResponseEE10RunHandlerERKNS0_13MethodHandler16HandlerParameterEEUlvE_EENS_6StatusEOT_ + + [D] _ZN4grpc8internal23CatchingFunctionHandlerIZNS0_16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS4_17GetChannelRequestENS4_18GetChannelResponseEE10RunHandlerERKNS0_13MethodHandler16HandlerParameterEEUlvE_EENS_6StatusEOT_ + + [D] _ZN4grpc8internal23CatchingFunctionHandlerIZNS0_16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS4_17GetServersRequestENS4_18GetServersResponseEE10RunHandlerERKNS0_13MethodHandler16HandlerParameterEEUlvE_EENS_6StatusEOT_ + + [D] _ZN4grpc8internal23CatchingFunctionHandlerIZNS0_16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS4_20GetSubchannelRequestENS4_21GetSubchannelResponseEE10RunHandlerERKNS0_13MethodHandler16HandlerParameterEEUlvE_EENS_6StatusEOT_ + + [D] _ZN4grpc8internal23CatchingFunctionHandlerIZNS0_16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS4_21GetTopChannelsRequestENS4_22GetTopChannelsResponseEE10RunHandlerERKNS0_13MethodHandler16HandlerParameterEEUlvE_EENS_6StatusEOT_ + + [D] _ZN4grpc8internal23CatchingFunctionHandlerIZNS0_16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS4_23GetServerSocketsRequestENS4_24GetServerSocketsResponseEE10RunHandlerERKNS0_13MethodHandler16HandlerParameterEEUlvE_EENS_6StatusEOT_ + + [D] _ZN4grpc8internal23ClientCallbackUnaryImpl9StartCallEv + + [D] _ZN4grpc8internal23ClientCallbackUnaryImplD0Ev + + [D] _ZN4grpc8internal23ClientCallbackUnaryImplD1Ev + + [D] _ZN4grpc8internal23ClientCallbackUnaryImplD2Ev, aliases _ZN4grpc8internal23ClientCallbackUnaryImplD1Ev + + [D] _ZN4grpc8internal32ClientAsyncResponseReaderFactoryINS_8channelz2v117GetServerResponseEE6CreateINS3_16GetServerRequestEEEPNS_25ClientAsyncResponseReaderIS4_EEPNS_16ChannelInterfaceEPN9grpc_impl15CompletionQueueERKNS0_9RpcMethodEPNSD_13ClientContextERKT_b + + [D] _ZN4grpc8internal32ClientAsyncResponseReaderFactoryINS_8channelz2v117GetSocketResponseEE6CreateINS3_16GetSocketRequestEEEPNS_25ClientAsyncResponseReaderIS4_EEPNS_16ChannelInterfaceEPN9grpc_impl15CompletionQueueERKNS0_9RpcMethodEPNSD_13ClientContextERKT_b + + [D] _ZN4grpc8internal32ClientAsyncResponseReaderFactoryINS_8channelz2v118GetChannelResponseEE6CreateINS3_17GetChannelRequestEEEPNS_25ClientAsyncResponseReaderIS4_EEPNS_16ChannelInterfaceEPN9grpc_impl15CompletionQueueERKNS0_9RpcMethodEPNSD_13ClientContextERKT_b + + [D] _ZN4grpc8internal32ClientAsyncResponseReaderFactoryINS_8channelz2v118GetServersResponseEE6CreateINS3_17GetServersRequestEEEPNS_25ClientAsyncResponseReaderIS4_EEPNS_16ChannelInterfaceEPN9grpc_impl15CompletionQueueERKNS0_9RpcMethodEPNSD_13ClientContextERKT_b + + [D] _ZN4grpc8internal32ClientAsyncResponseReaderFactoryINS_8channelz2v121GetSubchannelResponseEE6CreateINS3_20GetSubchannelRequestEEEPNS_25ClientAsyncResponseReaderIS4_EEPNS_16ChannelInterfaceEPN9grpc_impl15CompletionQueueERKNS0_9RpcMethodEPNSD_13ClientContextERKT_b + + [D] _ZN4grpc8internal32ClientAsyncResponseReaderFactoryINS_8channelz2v122GetTopChannelsResponseEE6CreateINS3_21GetTopChannelsRequestEEEPNS_25ClientAsyncResponseReaderIS4_EEPNS_16ChannelInterfaceEPN9grpc_impl15CompletionQueueERKNS0_9RpcMethodEPNSD_13ClientContextERKT_b + + [D] _ZN4grpc8internal32ClientAsyncResponseReaderFactoryINS_8channelz2v124GetServerSocketsResponseEE6CreateINS3_23GetServerSocketsRequestEEEPNS_25ClientAsyncResponseReaderIS4_EEPNS_16ChannelInterfaceEPN9grpc_impl15CompletionQueueERKNS0_9RpcMethodEPNSD_13ClientContextERKT_b + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi5EEENS6_ILi6EEEEC1Ev + + [D] _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi5EEENS6_ILi6EEEEC2Ev, aliases _ZN4grpc8internal9CallOpSetINS0_25CallOpSendInitialMetadataENS0_17CallOpSendMessageENS0_21CallOpClientSendCloseENS0_25CallOpRecvInitialMetadataENS0_8CallNoOpILi5EEENS6_ILi6EEEEC1Ev + + [D] _ZN4grpc9ParseJsonEPKcPN6google8protobuf7MessageE + + [D] _ZN6google8protobuf8internal14ArenaStringPtr21CreateInstanceNoArenaEPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v110ChannelRefEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v110ServerDataEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v110SocketDataEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v110SubchannelEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v111ChannelDataEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v112ChannelTraceEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v112Security_TlsEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v112SocketOptionEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v113SubchannelRefEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v116GetServerRequestEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v116GetSocketRequestEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v117ChannelTraceEventEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v117GetChannelRequestEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v117GetServerResponseEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v117GetServersRequestEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v117GetSocketResponseEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v118Address_UdsAddressEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v118GetChannelResponseEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v118GetServersResponseEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v118SocketOptionLingerEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v119SocketOptionTcpInfoEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v119SocketOptionTimeoutEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v120Address_OtherAddressEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v120Address_TcpIpAddressEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v120GetSubchannelRequestEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v121GetSubchannelResponseEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v121GetTopChannelsRequestEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v122GetTopChannelsResponseEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v122Security_OtherSecurityEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v123GetServerSocketsRequestEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v124ChannelConnectivityStateEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v124GetServerSocketsResponseEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v16ServerEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v16SocketEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v17AddressEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v17ChannelEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v18SecurityEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v19ServerRefEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectIN4grpc8channelz2v19SocketRefEEEvPv + + [D] _ZN6google8protobuf8internal21arena_destruct_objectINS1_29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEE9ContainerEEEvPv + + [D] _ZN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEE27mutable_unknown_fields_slowEv + + [D] _ZN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEED1Ev, aliases _ZN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEED2Ev + + [D] _ZN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEED2Ev + + [D] _ZNK4grpc8channelz2v110ChannelRef24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v110ChannelRef39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v110ServerData24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v110ServerData39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v110SocketData24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v110SocketData39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v110Subchannel24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v110Subchannel39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v111ChannelData24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v111ChannelData39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v112ChannelTrace24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v112ChannelTrace39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v112Security_Tls24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v112Security_Tls39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v112SocketOption24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v112SocketOption39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v113SubchannelRef24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v113SubchannelRef39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v116GetServerRequest24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v116GetServerRequest39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v116GetSocketRequest24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v116GetSocketRequest39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v117ChannelTraceEvent24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v117ChannelTraceEvent39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v117GetChannelRequest24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v117GetChannelRequest39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v117GetServerResponse24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v117GetServerResponse39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v117GetServersRequest24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v117GetServersRequest39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v117GetSocketResponse24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v117GetSocketResponse39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v118Address_UdsAddress24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v118Address_UdsAddress39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v118GetChannelResponse24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v118GetChannelResponse39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v118GetServersResponse24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v118GetServersResponse39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v118SocketOptionLinger24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v118SocketOptionLinger39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v119SocketOptionTcpInfo24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v119SocketOptionTcpInfo39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v119SocketOptionTimeout24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v119SocketOptionTimeout39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v120Address_OtherAddress24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v120Address_OtherAddress39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v120Address_TcpIpAddress24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v120Address_TcpIpAddress39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v120GetSubchannelRequest24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v120GetSubchannelRequest39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v121GetSubchannelResponse24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v121GetSubchannelResponse39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v121GetTopChannelsRequest24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v121GetTopChannelsRequest39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v122GetTopChannelsResponse24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v122GetTopChannelsResponse39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v122Security_OtherSecurity24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v122Security_OtherSecurity39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v123GetServerSocketsRequest24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v123GetServerSocketsRequest39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v124ChannelConnectivityState24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v124ChannelConnectivityState39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v124GetServerSocketsResponse24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v124GetServerSocketsResponse39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v16Server24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v16Server39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v16Socket24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v16Socket39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v17Address24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v17Address39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v17Channel24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v17Channel39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v18Security24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v18Security39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v19ServerRef24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v19ServerRef39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK4grpc8channelz2v19SocketRef24SerializeWithCachedSizesEPN6google8protobuf2io17CodedOutputStreamE + + [D] _ZNK4grpc8channelz2v19SocketRef39InternalSerializeWithCachedSizesToArrayEPh + + [D] _ZNK6google8protobuf11MessageLite20GetMaybeArenaPointerEv + + [D] _ZNSt14_Function_base13_Base_managerISt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS2_6StatusEPN9grpc_impl13ServerContextEPKNS4_16GetServerRequestEPNS4_17GetServerResponseEEEE10_M_managerERSt9_Any_dataRKSK_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerISt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS2_6StatusEPN9grpc_impl13ServerContextEPKNS4_16GetSocketRequestEPNS4_17GetSocketResponseEEEE10_M_managerERSt9_Any_dataRKSK_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerISt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS2_6StatusEPN9grpc_impl13ServerContextEPKNS4_17GetChannelRequestEPNS4_18GetChannelResponseEEEE10_M_managerERSt9_Any_dataRKSK_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerISt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS2_6StatusEPN9grpc_impl13ServerContextEPKNS4_17GetServersRequestEPNS4_18GetServersResponseEEEE10_M_managerERSt9_Any_dataRKSK_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerISt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS2_6StatusEPN9grpc_impl13ServerContextEPKNS4_20GetSubchannelRequestEPNS4_21GetSubchannelResponseEEEE10_M_managerERSt9_Any_dataRKSK_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerISt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS2_6StatusEPN9grpc_impl13ServerContextEPKNS4_21GetTopChannelsRequestEPNS4_22GetTopChannelsResponseEEEE10_M_managerERSt9_Any_dataRKSK_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerISt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS2_6StatusEPN9grpc_impl13ServerContextEPKNS4_23GetServerSocketsRequestEPNS4_24GetServerSocketsResponseEEEE10_M_managerERSt9_Any_dataRKSK_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE0_E10_M_managerERSt9_Any_dataRKS6_St18_Manager_operation + + [D] _ZNSt14_Function_base13_Base_managerIZN4grpc8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE_E10_M_managerERSt9_Any_dataRKS6_St18_Manager_operation + + [D] _ZNSt17_Function_handlerIFN4grpc6StatusEPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_16GetServerRequestEPNS3_17GetServerResponseEESt7_Mem_fnIMS5_FS1_S9_SC_SE_EEE9_M_invokeERKSt9_Any_dataOS6_OS9_OSC_OSE_ + + [D] _ZNSt17_Function_handlerIFN4grpc6StatusEPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_16GetSocketRequestEPNS3_17GetSocketResponseEESt7_Mem_fnIMS5_FS1_S9_SC_SE_EEE9_M_invokeERKSt9_Any_dataOS6_OS9_OSC_OSE_ + + [D] _ZNSt17_Function_handlerIFN4grpc6StatusEPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_17GetChannelRequestEPNS3_18GetChannelResponseEESt7_Mem_fnIMS5_FS1_S9_SC_SE_EEE9_M_invokeERKSt9_Any_dataOS6_OS9_OSC_OSE_ + + [D] _ZNSt17_Function_handlerIFN4grpc6StatusEPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_17GetServersRequestEPNS3_18GetServersResponseEESt7_Mem_fnIMS5_FS1_S9_SC_SE_EEE9_M_invokeERKSt9_Any_dataOS6_OS9_OSC_OSE_ + + [D] _ZNSt17_Function_handlerIFN4grpc6StatusEPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_20GetSubchannelRequestEPNS3_21GetSubchannelResponseEESt7_Mem_fnIMS5_FS1_S9_SC_SE_EEE9_M_invokeERKSt9_Any_dataOS6_OS9_OSC_OSE_ + + [D] _ZNSt17_Function_handlerIFN4grpc6StatusEPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_21GetTopChannelsRequestEPNS3_22GetTopChannelsResponseEESt7_Mem_fnIMS5_FS1_S9_SC_SE_EEE9_M_invokeERKSt9_Any_dataOS6_OS9_OSC_OSE_ + + [D] _ZNSt17_Function_handlerIFN4grpc6StatusEPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_23GetServerSocketsRequestEPNS3_24GetServerSocketsResponseEESt7_Mem_fnIMS5_FS1_S9_SC_SE_EEE9_M_invokeERKSt9_Any_dataOS6_OS9_OSC_OSE_ + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE0_E9_M_invokeERKSt9_Any_dataOb + + [D] _ZNSt17_Function_handlerIFvbEZN4grpc8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE_E9_M_invokeERKSt9_Any_dataOb + + + +364 Added function symbols not referenced by debug info: + + + + [A] _ZN4grpc19ServerBuilderPlugin19UpdateServerBuilderEPNS_13ServerBuilderE + + [A] _ZN4grpc8channelz2v110ChannelRef14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v110ChannelRef9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v110ChannelRefC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v110ChannelRefC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v110ChannelRefC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v110ServerData14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v110ServerData9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v110ServerDataC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v110ServerDataC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v110ServerDataC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v110SocketData14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v110SocketData9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v110SocketDataC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v110SocketDataC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v110SocketDataC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v110Subchannel14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v110Subchannel9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v110SubchannelC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v110SubchannelC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v110SubchannelC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v111ChannelData14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v111ChannelData9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v111ChannelDataC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v111ChannelDataC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v111ChannelDataC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v112ChannelTrace14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v112ChannelTrace9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v112ChannelTraceC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v112ChannelTraceC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v112ChannelTraceC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v112Security_Tls14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v112Security_Tls9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v112Security_TlsC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v112Security_TlsC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v112Security_TlsC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v112SocketOption14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v112SocketOption9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v112SocketOptionC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v112SocketOptionC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v112SocketOptionC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v113SubchannelRef14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v113SubchannelRef9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v113SubchannelRefC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v113SubchannelRefC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v113SubchannelRefC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v116GetServerRequest14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v116GetServerRequest9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v116GetServerRequestC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v116GetServerRequestC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v116GetServerRequestC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v116GetSocketRequest14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v116GetSocketRequest9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v116GetSocketRequestC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v116GetSocketRequestC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v116GetSocketRequestC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v117ChannelTraceEvent14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v117ChannelTraceEvent9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v117ChannelTraceEventC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v117ChannelTraceEventC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v117ChannelTraceEventC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v117GetChannelRequest14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v117GetChannelRequest9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v117GetChannelRequestC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v117GetChannelRequestC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v117GetChannelRequestC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v117GetServerResponse14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v117GetServerResponse9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v117GetServerResponseC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v117GetServerResponseC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v117GetServerResponseC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v117GetServersRequest14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v117GetServersRequest9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v117GetServersRequestC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v117GetServersRequestC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v117GetServersRequestC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v117GetSocketResponse14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v117GetSocketResponse9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v117GetSocketResponseC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v117GetSocketResponseC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v117GetSocketResponseC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v118Address_UdsAddress14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v118Address_UdsAddress9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v118Address_UdsAddressC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v118Address_UdsAddressC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v118Address_UdsAddressC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v118GetChannelResponse14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v118GetChannelResponse9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v118GetChannelResponseC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v118GetChannelResponseC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v118GetChannelResponseC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v118GetServersResponse14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v118GetServersResponse9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v118GetServersResponseC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v118GetServersResponseC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v118GetServersResponseC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v118SocketOptionLinger14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v118SocketOptionLinger9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v118SocketOptionLingerC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v118SocketOptionLingerC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v118SocketOptionLingerC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v119SocketOptionTcpInfo14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v119SocketOptionTcpInfo9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v119SocketOptionTcpInfoC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v119SocketOptionTcpInfoC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v119SocketOptionTcpInfoC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v119SocketOptionTimeout14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v119SocketOptionTimeout9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v119SocketOptionTimeoutC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v119SocketOptionTimeoutC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v119SocketOptionTimeoutC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v120Address_OtherAddress14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v120Address_OtherAddress9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v120Address_OtherAddressC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v120Address_OtherAddressC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v120Address_OtherAddressC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v120Address_TcpIpAddress14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v120Address_TcpIpAddress9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v120Address_TcpIpAddressC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v120Address_TcpIpAddressC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v120Address_TcpIpAddressC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v120GetSubchannelRequest14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v120GetSubchannelRequest9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v120GetSubchannelRequestC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v120GetSubchannelRequestC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v120GetSubchannelRequestC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v121GetSubchannelResponse14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v121GetSubchannelResponse9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v121GetSubchannelResponseC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v121GetSubchannelResponseC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v121GetSubchannelResponseC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v121GetTopChannelsRequest14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v121GetTopChannelsRequest9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v121GetTopChannelsRequestC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v121GetTopChannelsRequestC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v121GetTopChannelsRequestC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v122GetTopChannelsResponse14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v122GetTopChannelsResponse9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v122GetTopChannelsResponseC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v122GetTopChannelsResponseC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v122GetTopChannelsResponseC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v122Security_OtherSecurity14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v122Security_OtherSecurity9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v122Security_OtherSecurityC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v122Security_OtherSecurityC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v122Security_OtherSecurityC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v123GetServerSocketsRequest14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v123GetServerSocketsRequest9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v123GetServerSocketsRequestC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v123GetServerSocketsRequestC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v123GetServerSocketsRequestC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v124ChannelConnectivityState14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v124ChannelConnectivityState9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v124ChannelConnectivityStateC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v124ChannelConnectivityStateC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v124ChannelConnectivityStateC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v124GetServerSocketsResponse14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v124GetServerSocketsResponse9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v124GetServerSocketsResponseC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v124GetServerSocketsResponseC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v124GetServerSocketsResponseC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v16Server14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v16Server9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v16ServerC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v16ServerC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v16ServerC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v16Socket14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v16Socket9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v16SocketC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v16SocketC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v16SocketC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v17Address14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v17Address9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v17AddressC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v17AddressC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v17AddressC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v17Channel14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v17Channel9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v17ChannelC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v17ChannelC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v17ChannelC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async10GetChannelEPN9grpc_impl13ClientContextEPKNS1_17GetChannelRequestEPNS1_18GetChannelResponseEPNS5_18ClientUnaryReactorE + + [A] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async10GetChannelEPN9grpc_impl13ClientContextEPKNS_10ByteBufferEPNS1_18GetChannelResponseEPNS5_18ClientUnaryReactorE + + [A] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async10GetServersEPN9grpc_impl13ClientContextEPKNS1_17GetServersRequestEPNS1_18GetServersResponseEPNS5_18ClientUnaryReactorE + + [A] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async10GetServersEPN9grpc_impl13ClientContextEPKNS_10ByteBufferEPNS1_18GetServersResponseEPNS5_18ClientUnaryReactorE + + [A] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async13GetSubchannelEPN9grpc_impl13ClientContextEPKNS1_20GetSubchannelRequestEPNS1_21GetSubchannelResponseEPNS5_18ClientUnaryReactorE + + [A] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async13GetSubchannelEPN9grpc_impl13ClientContextEPKNS_10ByteBufferEPNS1_21GetSubchannelResponseEPNS5_18ClientUnaryReactorE + + [A] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async14GetTopChannelsEPN9grpc_impl13ClientContextEPKNS1_21GetTopChannelsRequestEPNS1_22GetTopChannelsResponseEPNS5_18ClientUnaryReactorE + + [A] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async14GetTopChannelsEPN9grpc_impl13ClientContextEPKNS_10ByteBufferEPNS1_22GetTopChannelsResponseEPNS5_18ClientUnaryReactorE + + [A] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async16GetServerSocketsEPN9grpc_impl13ClientContextEPKNS1_23GetServerSocketsRequestEPNS1_24GetServerSocketsResponseEPNS5_18ClientUnaryReactorE + + [A] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async16GetServerSocketsEPN9grpc_impl13ClientContextEPKNS_10ByteBufferEPNS1_24GetServerSocketsResponseEPNS5_18ClientUnaryReactorE + + [A] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async9GetServerEPN9grpc_impl13ClientContextEPKNS1_16GetServerRequestEPNS1_17GetServerResponseEPNS5_18ClientUnaryReactorE + + [A] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async9GetServerEPN9grpc_impl13ClientContextEPKNS_10ByteBufferEPNS1_17GetServerResponseEPNS5_18ClientUnaryReactorE + + [A] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async9GetSocketEPN9grpc_impl13ClientContextEPKNS1_16GetSocketRequestEPNS1_17GetSocketResponseEPNS5_18ClientUnaryReactorE + + [A] _ZN4grpc8channelz2v18Channelz4Stub18experimental_async9GetSocketEPN9grpc_impl13ClientContextEPKNS_10ByteBufferEPNS1_17GetSocketResponseEPNS5_18ClientUnaryReactorE + + [A] _ZN4grpc8channelz2v18Security14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v18Security9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v18SecurityC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v18SecurityC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v18SecurityC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v19ServerRef14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v19ServerRef9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v19ServerRefC1EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v19ServerRefC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v19ServerRefC2EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v19SocketRef14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE + + [A] _ZN4grpc8channelz2v19SocketRef9ArenaDtorEPv + + [A] _ZN4grpc8channelz2v19SocketRefC1EPN6google8protobuf5ArenaE + + [A] _ZN4grpc8channelz2v19SocketRefC2EPN6google8protobuf5ArenaE, aliases _ZN4grpc8channelz2v19SocketRefC1EPN6google8protobuf5ArenaE + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v110ChannelRefEED1Ev, aliases _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v110ChannelRefEED2Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v110ChannelRefEED2Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v112SocketOptionEED1Ev, aliases _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v112SocketOptionEED2Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v112SocketOptionEED2Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v113SubchannelRefEED1Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v113SubchannelRefEED2Ev, aliases _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v113SubchannelRefEED1Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v117ChannelTraceEventEED1Ev, aliases _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v117ChannelTraceEventEED2Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v117ChannelTraceEventEED2Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v16ServerEED1Ev, aliases _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v16ServerEED2Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v16ServerEED2Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v17ChannelEED1Ev, aliases _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v17ChannelEED2Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v17ChannelEED2Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v19SocketRefEED1Ev, aliases _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v19SocketRefEED2Ev + + [A] _ZN6google8protobuf16RepeatedPtrFieldIN4grpc8channelz2v19SocketRefEED2Ev + + [A] _ZN6google8protobuf2io19EpsCopyOutputStream23WriteStringMaybeAliasedEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPh + + [A] _ZN6google8protobuf8internal11VarintParseIjEEPKcS4_PT_ + + [A] _ZN6google8protobuf8internal11VarintParseImEEPKcS4_PT_ + + [A] _ZN6google8protobuf8internal12ParseContext12ParseMessageIN4grpc8channelz2v110ChannelRefEEEPKcPT_S9_ + + [A] _ZN6google8protobuf8internal12ParseContext12ParseMessageIN4grpc8channelz2v111ChannelDataEEEPKcPT_S9_ + + [A] _ZN6google8protobuf8internal12ParseContext12ParseMessageIN4grpc8channelz2v112ChannelTraceEEEPKcPT_S9_ + + [A] _ZN6google8protobuf8internal12ParseContext12ParseMessageIN4grpc8channelz2v113SubchannelRefEEEPKcPT_S9_ + + [A] _ZN6google8protobuf8internal12ParseContext12ParseMessageIN4grpc8channelz2v16ServerEEEPKcPT_S9_ + + [A] _ZN6google8protobuf8internal12ParseContext12ParseMessageIN4grpc8channelz2v17AddressEEEPKcPT_S9_ + + [A] _ZN6google8protobuf8internal12ParseContext12ParseMessageIN4grpc8channelz2v17ChannelEEEPKcPT_S9_ + + [A] _ZN6google8protobuf8internal12ParseContext12ParseMessageIN4grpc8channelz2v19SocketRefEEEPKcPT_S9_ + + [A] _ZN6google8protobuf8internal12ParseContext12ParseMessageINS0_10Int64ValueEEEPKcPT_S6_ + + [A] _ZN6google8protobuf8internal12ParseContext12ParseMessageINS0_3AnyEEEPKcPT_S6_ + + [A] _ZN6google8protobuf8internal12ParseContext12ParseMessageINS0_8DurationEEEPKcPT_S6_ + + [A] _ZN6google8protobuf8internal12ParseContext12ParseMessageINS0_9TimestampEEEPKcPT_S6_ + + [A] _ZN6google8protobuf8internal14ArenaStringPtr14CreateInstanceEPNS0_5ArenaEPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN6google8protobuf8internal16InternalMetadata11DoMergeFromINS0_15UnknownFieldSetEEEvRKT_ + + [A] _ZN6google8protobuf8internal16InternalMetadata27mutable_unknown_fields_slowINS0_15UnknownFieldSetEEEPT_v + + [A] _ZN6google8protobuf8internal16InternalMetadata6DoSwapINS0_15UnknownFieldSetEEEvPT_ + + [A] _ZN6google8protobuf8internal16InternalMetadata7DoClearINS0_15UnknownFieldSetEEEvv + + [A] _ZN6google8protobuf8internal18EpsCopyInputStream13DoneWithCheckEPPKci + + [A] _ZN6google8protobuf8internal18EpsCopyInputStream9PushLimitEPKci + + [A] _ZN6google8protobuf8internal20RepeatedPtrFieldBase12InternalSwapEPS2_ + + [A] _ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS0_16RepeatedPtrFieldIN4grpc8channelz2v110ChannelRefEE11TypeHandlerEEEvv + + [A] _ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS0_16RepeatedPtrFieldIN4grpc8channelz2v112SocketOptionEE11TypeHandlerEEEvv + + [A] _ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS0_16RepeatedPtrFieldIN4grpc8channelz2v113SubchannelRefEE11TypeHandlerEEEvv + + [A] _ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS0_16RepeatedPtrFieldIN4grpc8channelz2v117ChannelTraceEventEE11TypeHandlerEEEvv + + [A] _ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS0_16RepeatedPtrFieldIN4grpc8channelz2v16ServerEE11TypeHandlerEEEvv + + [A] _ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS0_16RepeatedPtrFieldIN4grpc8channelz2v17ChannelEE11TypeHandlerEEEvv + + [A] _ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS0_16RepeatedPtrFieldIN4grpc8channelz2v19SocketRefEE11TypeHandlerEEEvv + + [A] _ZN6google8protobuf8internal20RepeatedPtrFieldBase9MergeFromINS0_16RepeatedPtrFieldIN4grpc8channelz2v19SocketRefEE11TypeHandlerEEEvRKS2_ + + [A] _ZN6google8protobuf8internal21arena_destruct_objectINS1_16InternalMetadata9ContainerINS0_15UnknownFieldSetEEEEEvPv + + [A] _ZN6google8protobuf8internal21arena_destruct_objectINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvPv + + [A] _ZN6google8protobuf8internal7memswapILi100EEENSt9enable_ifIXaageT_stoltT_lsLj1ELi31EEvE4typeEPcS6_ + + [A] _ZN6google8protobuf8internal7memswapILi24EEENSt9enable_ifIXaageT_stoltT_lsLj1ELi31EEvE4typeEPcS6_ + + [A] _ZN6google8protobuf8internal7memswapILi40EEENSt9enable_ifIXaageT_stoltT_lsLj1ELi31EEvE4typeEPcS6_ + + [A] _ZN6google8protobuf8internal7memswapILi48EEENSt9enable_ifIXaageT_stoltT_lsLj1ELi31EEvE4typeEPcS6_ + + [A] _ZN6google8protobuf8internal7memswapILi9EEENSt9enable_ifIXaageT_stmltT_Li16EEvE4typeEPcS6_ + + [A] _ZN6google8protobuf8internal8ReadSizeEPPKc + + [A] _ZN9grpc_impl18ClientUnaryReactor25OnReadInitialMetadataDoneEb + + [A] _ZN9grpc_impl18ClientUnaryReactor6OnDoneERKN4grpc6StatusE + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetServerResponseEE19ReadInitialMetadataEPv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetServerResponseEE6FinishEPS4_PNS1_6StatusEPv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetServerResponseEE9StartCallEv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetServerResponseEED0Ev, aliases _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetServerResponseEED2Ev, _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetServerResponseEED1Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetServerResponseEED1Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetServerResponseEED2Ev, aliases _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetServerResponseEED1Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetSocketResponseEE19ReadInitialMetadataEPv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetSocketResponseEE6FinishEPS4_PNS1_6StatusEPv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetSocketResponseEE9StartCallEv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetSocketResponseEED0Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetSocketResponseEED1Ev, aliases _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetSocketResponseEED0Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetSocketResponseEED2Ev, aliases _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetSocketResponseEED1Ev, _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetSocketResponseEED0Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetChannelResponseEE19ReadInitialMetadataEPv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetChannelResponseEE6FinishEPS4_PNS1_6StatusEPv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetChannelResponseEE9StartCallEv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetChannelResponseEED0Ev, aliases _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetChannelResponseEED2Ev, _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetChannelResponseEED1Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetChannelResponseEED1Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetChannelResponseEED2Ev, aliases _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetChannelResponseEED1Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetServersResponseEE19ReadInitialMetadataEPv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetServersResponseEE6FinishEPS4_PNS1_6StatusEPv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetServersResponseEE9StartCallEv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetServersResponseEED0Ev, aliases _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetServersResponseEED2Ev, _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetServersResponseEED1Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetServersResponseEED1Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetServersResponseEED2Ev, aliases _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetServersResponseEED1Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v121GetSubchannelResponseEE19ReadInitialMetadataEPv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v121GetSubchannelResponseEE6FinishEPS4_PNS1_6StatusEPv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v121GetSubchannelResponseEE9StartCallEv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v121GetSubchannelResponseEED0Ev, aliases _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v121GetSubchannelResponseEED2Ev, _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v121GetSubchannelResponseEED1Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v121GetSubchannelResponseEED1Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v121GetSubchannelResponseEED2Ev, aliases _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v121GetSubchannelResponseEED1Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v122GetTopChannelsResponseEE19ReadInitialMetadataEPv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v122GetTopChannelsResponseEE6FinishEPS4_PNS1_6StatusEPv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v122GetTopChannelsResponseEE9StartCallEv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v122GetTopChannelsResponseEED0Ev, aliases _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v122GetTopChannelsResponseEED2Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v122GetTopChannelsResponseEED1Ev, aliases _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v122GetTopChannelsResponseEED0Ev, _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v122GetTopChannelsResponseEED2Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v122GetTopChannelsResponseEED2Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v124GetServerSocketsResponseEE19ReadInitialMetadataEPv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v124GetServerSocketsResponseEE6FinishEPS4_PNS1_6StatusEPv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v124GetServerSocketsResponseEE9StartCallEv + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v124GetServerSocketsResponseEED0Ev, aliases _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v124GetServerSocketsResponseEED2Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v124GetServerSocketsResponseEED1Ev, aliases _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v124GetServerSocketsResponseEED0Ev, _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v124GetServerSocketsResponseEED2Ev + + [A] _ZN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v124GetServerSocketsResponseEED2Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetServerRequestENS4_17GetServerResponseEE10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterE + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetServerRequestENS4_17GetServerResponseEE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS2_6StatusEPPv + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetServerRequestENS4_17GetServerResponseEED0Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetServerRequestENS4_17GetServerResponseEED1Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetServerRequestENS4_17GetServerResponseEED2Ev, aliases _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetServerRequestENS4_17GetServerResponseEED1Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetSocketRequestENS4_17GetSocketResponseEE10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterE + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetSocketRequestENS4_17GetSocketResponseEE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS2_6StatusEPPv + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetSocketRequestENS4_17GetSocketResponseEED0Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetSocketRequestENS4_17GetSocketResponseEED1Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetSocketRequestENS4_17GetSocketResponseEED2Ev, aliases _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetSocketRequestENS4_17GetSocketResponseEED1Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetChannelRequestENS4_18GetChannelResponseEE10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterE + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetChannelRequestENS4_18GetChannelResponseEE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS2_6StatusEPPv + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetChannelRequestENS4_18GetChannelResponseEED0Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetChannelRequestENS4_18GetChannelResponseEED1Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetChannelRequestENS4_18GetChannelResponseEED2Ev, aliases _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetChannelRequestENS4_18GetChannelResponseEED1Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetServersRequestENS4_18GetServersResponseEE10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterE + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetServersRequestENS4_18GetServersResponseEE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS2_6StatusEPPv + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetServersRequestENS4_18GetServersResponseEED0Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetServersRequestENS4_18GetServersResponseEED1Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetServersRequestENS4_18GetServersResponseEED2Ev, aliases _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetServersRequestENS4_18GetServersResponseEED1Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_20GetSubchannelRequestENS4_21GetSubchannelResponseEE10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterE + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_20GetSubchannelRequestENS4_21GetSubchannelResponseEE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS2_6StatusEPPv + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_20GetSubchannelRequestENS4_21GetSubchannelResponseEED0Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_20GetSubchannelRequestENS4_21GetSubchannelResponseEED1Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_20GetSubchannelRequestENS4_21GetSubchannelResponseEED2Ev, aliases _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_20GetSubchannelRequestENS4_21GetSubchannelResponseEED1Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_21GetTopChannelsRequestENS4_22GetTopChannelsResponseEE10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterE + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_21GetTopChannelsRequestENS4_22GetTopChannelsResponseEE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS2_6StatusEPPv + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_21GetTopChannelsRequestENS4_22GetTopChannelsResponseEED0Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_21GetTopChannelsRequestENS4_22GetTopChannelsResponseEED1Ev, aliases _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_21GetTopChannelsRequestENS4_22GetTopChannelsResponseEED2Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_21GetTopChannelsRequestENS4_22GetTopChannelsResponseEED2Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_23GetServerSocketsRequestENS4_24GetServerSocketsResponseEE10RunHandlerERKNS2_8internal13MethodHandler16HandlerParameterE + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_23GetServerSocketsRequestENS4_24GetServerSocketsResponseEE11DeserializeEP9grpc_callP16grpc_byte_bufferPNS2_6StatusEPPv + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_23GetServerSocketsRequestENS4_24GetServerSocketsResponseEED0Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_23GetServerSocketsRequestENS4_24GetServerSocketsResponseEED1Ev, aliases _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_23GetServerSocketsRequestENS4_24GetServerSocketsResponseEED2Ev + + [A] _ZN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_23GetServerSocketsRequestENS4_24GetServerSocketsResponseEED2Ev + + [A] _ZN9grpc_impl8internal23CatchingFunctionHandlerIZNS0_16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS5_16GetServerRequestENS5_17GetServerResponseEE10RunHandlerERKNS3_8internal13MethodHandler16HandlerParameterEEUlvE_EENS3_6StatusEOT_ + + [A] _ZN9grpc_impl8internal23CatchingFunctionHandlerIZNS0_16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS5_16GetSocketRequestENS5_17GetSocketResponseEE10RunHandlerERKNS3_8internal13MethodHandler16HandlerParameterEEUlvE_EENS3_6StatusEOT_ + + [A] _ZN9grpc_impl8internal23CatchingFunctionHandlerIZNS0_16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS5_17GetChannelRequestENS5_18GetChannelResponseEE10RunHandlerERKNS3_8internal13MethodHandler16HandlerParameterEEUlvE_EENS3_6StatusEOT_ + + [A] _ZN9grpc_impl8internal23CatchingFunctionHandlerIZNS0_16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS5_17GetServersRequestENS5_18GetServersResponseEE10RunHandlerERKNS3_8internal13MethodHandler16HandlerParameterEEUlvE_EENS3_6StatusEOT_ + + [A] _ZN9grpc_impl8internal23CatchingFunctionHandlerIZNS0_16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS5_20GetSubchannelRequestENS5_21GetSubchannelResponseEE10RunHandlerERKNS3_8internal13MethodHandler16HandlerParameterEEUlvE_EENS3_6StatusEOT_ + + [A] _ZN9grpc_impl8internal23CatchingFunctionHandlerIZNS0_16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS5_21GetTopChannelsRequestENS5_22GetTopChannelsResponseEE10RunHandlerERKNS3_8internal13MethodHandler16HandlerParameterEEUlvE_EENS3_6StatusEOT_ + + [A] _ZN9grpc_impl8internal23CatchingFunctionHandlerIZNS0_16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS5_23GetServerSocketsRequestENS5_24GetServerSocketsResponseEE10RunHandlerERKNS3_8internal13MethodHandler16HandlerParameterEEUlvE_EENS3_6StatusEOT_ + + [A] _ZN9grpc_impl8internal23ClientCallbackUnaryImpl9StartCallEv + + [A] _ZN9grpc_impl8internal23ClientCallbackUnaryImplD0Ev + + [A] _ZN9grpc_impl8internal23ClientCallbackUnaryImplD1Ev + + [A] _ZN9grpc_impl8internal23ClientCallbackUnaryImplD2Ev, aliases _ZN9grpc_impl8internal23ClientCallbackUnaryImplD1Ev + + [A] _ZN9grpc_impl8internal32ClientAsyncResponseReaderFactoryIN4grpc8channelz2v117GetServerResponseEE6CreateINS4_16GetServerRequestEEEPNS_25ClientAsyncResponseReaderIS5_EEPNS2_16ChannelInterfaceEPNS_15CompletionQueueERKNS2_8internal9RpcMethodEPNS_13ClientContextERKT_b + + [A] _ZN9grpc_impl8internal32ClientAsyncResponseReaderFactoryIN4grpc8channelz2v117GetSocketResponseEE6CreateINS4_16GetSocketRequestEEEPNS_25ClientAsyncResponseReaderIS5_EEPNS2_16ChannelInterfaceEPNS_15CompletionQueueERKNS2_8internal9RpcMethodEPNS_13ClientContextERKT_b + + [A] _ZN9grpc_impl8internal32ClientAsyncResponseReaderFactoryIN4grpc8channelz2v118GetChannelResponseEE6CreateINS4_17GetChannelRequestEEEPNS_25ClientAsyncResponseReaderIS5_EEPNS2_16ChannelInterfaceEPNS_15CompletionQueueERKNS2_8internal9RpcMethodEPNS_13ClientContextERKT_b + + [A] _ZN9grpc_impl8internal32ClientAsyncResponseReaderFactoryIN4grpc8channelz2v118GetServersResponseEE6CreateINS4_17GetServersRequestEEEPNS_25ClientAsyncResponseReaderIS5_EEPNS2_16ChannelInterfaceEPNS_15CompletionQueueERKNS2_8internal9RpcMethodEPNS_13ClientContextERKT_b + + [A] _ZN9grpc_impl8internal32ClientAsyncResponseReaderFactoryIN4grpc8channelz2v121GetSubchannelResponseEE6CreateINS4_20GetSubchannelRequestEEEPNS_25ClientAsyncResponseReaderIS5_EEPNS2_16ChannelInterfaceEPNS_15CompletionQueueERKNS2_8internal9RpcMethodEPNS_13ClientContextERKT_b + + [A] _ZN9grpc_impl8internal32ClientAsyncResponseReaderFactoryIN4grpc8channelz2v122GetTopChannelsResponseEE6CreateINS4_21GetTopChannelsRequestEEEPNS_25ClientAsyncResponseReaderIS5_EEPNS2_16ChannelInterfaceEPNS_15CompletionQueueERKNS2_8internal9RpcMethodEPNS_13ClientContextERKT_b + + [A] _ZN9grpc_impl8internal32ClientAsyncResponseReaderFactoryIN4grpc8channelz2v124GetServerSocketsResponseEE6CreateINS4_23GetServerSocketsRequestEEEPNS_25ClientAsyncResponseReaderIS5_EEPNS2_16ChannelInterfaceEPNS_15CompletionQueueERKNS2_8internal9RpcMethodEPNS_13ClientContextERKT_b + + [A] _ZNK4grpc8channelz2v110ChannelRef18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v110ServerData18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v110SocketData18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v110Subchannel18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v111ChannelData18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v112ChannelTrace18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v112Security_Tls18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v112SocketOption18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v113SubchannelRef18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v116GetServerRequest18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v116GetSocketRequest18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v117ChannelTraceEvent18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v117GetChannelRequest18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v117GetServerResponse18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v117GetServersRequest18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v117GetSocketResponse18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v118Address_UdsAddress18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v118GetChannelResponse18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v118GetServersResponse18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v118SocketOptionLinger18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v119SocketOptionTcpInfo18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v119SocketOptionTimeout18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v120Address_OtherAddress18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v120Address_TcpIpAddress18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v120GetSubchannelRequest18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v121GetSubchannelResponse18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v121GetTopChannelsRequest18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v122GetTopChannelsResponse18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v122Security_OtherSecurity18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v123GetServerSocketsRequest18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v124ChannelConnectivityState18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v124GetServerSocketsResponse18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v16Server18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v16Socket18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v17Address18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v17Channel18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v18Security18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v19ServerRef18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNK4grpc8channelz2v19SocketRef18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE0_E10_M_managerERSt9_Any_dataRKS6_St18_Manager_operation + + [A] _ZNSt14_Function_base13_Base_managerIZN9grpc_impl8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE_E10_M_managerERSt9_Any_dataRKS6_St18_Manager_operation + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE0_E9_M_invokeERKSt9_Any_dataOb + + [A] _ZNSt17_Function_handlerIFvbEZN9grpc_impl8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE_E9_M_invokeERKSt9_Any_dataOb + + + +109 Removed variable symbols not referenced by debug info: + + + + [D] _ZTIN4grpc12experimental19ClientCallbackUnaryE + + [D] _ZTIN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetServerResponseEEE + + [D] _ZTIN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetSocketResponseEEE + + [D] _ZTIN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetChannelResponseEEE + + [D] _ZTIN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetServersResponseEEE + + [D] _ZTIN4grpc25ClientAsyncResponseReaderINS_8channelz2v121GetSubchannelResponseEEE + + [D] _ZTIN4grpc25ClientAsyncResponseReaderINS_8channelz2v122GetTopChannelsResponseEEE + + [D] _ZTIN4grpc25ClientAsyncResponseReaderINS_8channelz2v124GetServerSocketsResponseEEE + + [D] _ZTIN4grpc34ClientAsyncResponseReaderInterfaceINS_8channelz2v117GetServerResponseEEE + + [D] _ZTIN4grpc34ClientAsyncResponseReaderInterfaceINS_8channelz2v117GetSocketResponseEEE + + [D] _ZTIN4grpc34ClientAsyncResponseReaderInterfaceINS_8channelz2v118GetChannelResponseEEE + + [D] _ZTIN4grpc34ClientAsyncResponseReaderInterfaceINS_8channelz2v118GetServersResponseEEE + + [D] _ZTIN4grpc34ClientAsyncResponseReaderInterfaceINS_8channelz2v121GetSubchannelResponseEEE + + [D] _ZTIN4grpc34ClientAsyncResponseReaderInterfaceINS_8channelz2v122GetTopChannelsResponseEEE + + [D] _ZTIN4grpc34ClientAsyncResponseReaderInterfaceINS_8channelz2v124GetServerSocketsResponseEEE + + [D] _ZTIN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetServerRequestENS3_17GetServerResponseEEE + + [D] _ZTIN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetSocketRequestENS3_17GetSocketResponseEEE + + [D] _ZTIN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetChannelRequestENS3_18GetChannelResponseEEE + + [D] _ZTIN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetServersRequestENS3_18GetServersResponseEEE + + [D] _ZTIN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_20GetSubchannelRequestENS3_21GetSubchannelResponseEEE + + [D] _ZTIN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_21GetTopChannelsRequestENS3_22GetTopChannelsResponseEEE + + [D] _ZTIN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_23GetServerSocketsRequestENS3_24GetServerSocketsResponseEEE + + [D] _ZTIN4grpc8internal23ClientCallbackUnaryImplE + + [D] _ZTIN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEE9ContainerE + + [D] _ZTISt12_Mem_fn_baseIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_16GetServerRequestEPNS2_17GetServerResponseEELb1EE + + [D] _ZTISt12_Mem_fn_baseIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_16GetSocketRequestEPNS2_17GetSocketResponseEELb1EE + + [D] _ZTISt12_Mem_fn_baseIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_17GetChannelRequestEPNS2_18GetChannelResponseEELb1EE + + [D] _ZTISt12_Mem_fn_baseIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_17GetServersRequestEPNS2_18GetServersResponseEELb1EE + + [D] _ZTISt12_Mem_fn_baseIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_20GetSubchannelRequestEPNS2_21GetSubchannelResponseEELb1EE + + [D] _ZTISt12_Mem_fn_baseIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_21GetTopChannelsRequestEPNS2_22GetTopChannelsResponseEELb1EE + + [D] _ZTISt12_Mem_fn_baseIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_23GetServerSocketsRequestEPNS2_24GetServerSocketsResponseEELb1EE + + [D] _ZTISt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_16GetServerRequestEPNS3_17GetServerResponseEEE + + [D] _ZTISt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_16GetSocketRequestEPNS3_17GetSocketResponseEEE + + [D] _ZTISt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_17GetChannelRequestEPNS3_18GetChannelResponseEEE + + [D] _ZTISt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_17GetServersRequestEPNS3_18GetServersResponseEEE + + [D] _ZTISt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_20GetSubchannelRequestEPNS3_21GetSubchannelResponseEEE + + [D] _ZTISt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_21GetTopChannelsRequestEPNS3_22GetTopChannelsResponseEEE + + [D] _ZTISt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_23GetServerSocketsRequestEPNS3_24GetServerSocketsResponseEEE + + [D] _ZTISt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_16GetServerRequestEPNS2_17GetServerResponseEEE + + [D] _ZTISt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_16GetSocketRequestEPNS2_17GetSocketResponseEEE + + [D] _ZTISt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_17GetChannelRequestEPNS2_18GetChannelResponseEEE + + [D] _ZTISt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_17GetServersRequestEPNS2_18GetServersResponseEEE + + [D] _ZTISt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_20GetSubchannelRequestEPNS2_21GetSubchannelResponseEEE + + [D] _ZTISt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_21GetTopChannelsRequestEPNS2_22GetTopChannelsResponseEEE + + [D] _ZTISt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_23GetServerSocketsRequestEPNS2_24GetServerSocketsResponseEEE + + [D] _ZTIZN4grpc8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE0_ + + [D] _ZTIZN4grpc8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE_ + + [D] _ZTSN4grpc12experimental19ClientCallbackUnaryE + + [D] _ZTSN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetServerResponseEEE + + [D] _ZTSN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetSocketResponseEEE + + [D] _ZTSN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetChannelResponseEEE + + [D] _ZTSN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetServersResponseEEE + + [D] _ZTSN4grpc25ClientAsyncResponseReaderINS_8channelz2v121GetSubchannelResponseEEE + + [D] _ZTSN4grpc25ClientAsyncResponseReaderINS_8channelz2v122GetTopChannelsResponseEEE + + [D] _ZTSN4grpc25ClientAsyncResponseReaderINS_8channelz2v124GetServerSocketsResponseEEE + + [D] _ZTSN4grpc34ClientAsyncResponseReaderInterfaceINS_8channelz2v117GetServerResponseEEE + + [D] _ZTSN4grpc34ClientAsyncResponseReaderInterfaceINS_8channelz2v117GetSocketResponseEEE + + [D] _ZTSN4grpc34ClientAsyncResponseReaderInterfaceINS_8channelz2v118GetChannelResponseEEE + + [D] _ZTSN4grpc34ClientAsyncResponseReaderInterfaceINS_8channelz2v118GetServersResponseEEE + + [D] _ZTSN4grpc34ClientAsyncResponseReaderInterfaceINS_8channelz2v121GetSubchannelResponseEEE + + [D] _ZTSN4grpc34ClientAsyncResponseReaderInterfaceINS_8channelz2v122GetTopChannelsResponseEEE + + [D] _ZTSN4grpc34ClientAsyncResponseReaderInterfaceINS_8channelz2v124GetServerSocketsResponseEEE + + [D] _ZTSN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetServerRequestENS3_17GetServerResponseEEE + + [D] _ZTSN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetSocketRequestENS3_17GetSocketResponseEEE + + [D] _ZTSN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetChannelRequestENS3_18GetChannelResponseEEE + + [D] _ZTSN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetServersRequestENS3_18GetServersResponseEEE + + [D] _ZTSN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_20GetSubchannelRequestENS3_21GetSubchannelResponseEEE + + [D] _ZTSN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_21GetTopChannelsRequestENS3_22GetTopChannelsResponseEEE + + [D] _ZTSN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_23GetServerSocketsRequestENS3_24GetServerSocketsResponseEEE + + [D] _ZTSN4grpc8internal23ClientCallbackUnaryImplE + + [D] _ZTSN6google8protobuf8internal29InternalMetadataWithArenaBaseINS0_15UnknownFieldSetENS1_25InternalMetadataWithArenaEE9ContainerE + + [D] _ZTSSt12_Mem_fn_baseIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_16GetServerRequestEPNS2_17GetServerResponseEELb1EE + + [D] _ZTSSt12_Mem_fn_baseIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_16GetSocketRequestEPNS2_17GetSocketResponseEELb1EE + + [D] _ZTSSt12_Mem_fn_baseIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_17GetChannelRequestEPNS2_18GetChannelResponseEELb1EE + + [D] _ZTSSt12_Mem_fn_baseIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_17GetServersRequestEPNS2_18GetServersResponseEELb1EE + + [D] _ZTSSt12_Mem_fn_baseIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_20GetSubchannelRequestEPNS2_21GetSubchannelResponseEELb1EE + + [D] _ZTSSt12_Mem_fn_baseIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_21GetTopChannelsRequestEPNS2_22GetTopChannelsResponseEELb1EE + + [D] _ZTSSt12_Mem_fn_baseIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_23GetServerSocketsRequestEPNS2_24GetServerSocketsResponseEELb1EE + + [D] _ZTSSt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_16GetServerRequestEPNS3_17GetServerResponseEEE + + [D] _ZTSSt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_16GetSocketRequestEPNS3_17GetSocketResponseEEE + + [D] _ZTSSt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_17GetChannelRequestEPNS3_18GetChannelResponseEEE + + [D] _ZTSSt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_17GetServersRequestEPNS3_18GetServersResponseEEE + + [D] _ZTSSt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_20GetSubchannelRequestEPNS3_21GetSubchannelResponseEEE + + [D] _ZTSSt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_21GetTopChannelsRequestEPNS3_22GetTopChannelsResponseEEE + + [D] _ZTSSt31_Maybe_unary_or_binary_functionIN4grpc6StatusEJPNS0_8channelz2v18Channelz7ServiceEPN9grpc_impl13ServerContextEPKNS3_23GetServerSocketsRequestEPNS3_24GetServerSocketsResponseEEE + + [D] _ZTSSt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_16GetServerRequestEPNS2_17GetServerResponseEEE + + [D] _ZTSSt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_16GetSocketRequestEPNS2_17GetSocketResponseEEE + + [D] _ZTSSt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_17GetChannelRequestEPNS2_18GetChannelResponseEEE + + [D] _ZTSSt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_17GetServersRequestEPNS2_18GetServersResponseEEE + + [D] _ZTSSt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_20GetSubchannelRequestEPNS2_21GetSubchannelResponseEEE + + [D] _ZTSSt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_21GetTopChannelsRequestEPNS2_22GetTopChannelsResponseEEE + + [D] _ZTSSt7_Mem_fnIMN4grpc8channelz2v18Channelz7ServiceEFNS0_6StatusEPN9grpc_impl13ServerContextEPKNS2_23GetServerSocketsRequestEPNS2_24GetServerSocketsResponseEEE + + [D] _ZTSZN4grpc8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE0_ + + [D] _ZTSZN4grpc8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE_ + + [D] _ZTVN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetServerResponseEEE + + [D] _ZTVN4grpc25ClientAsyncResponseReaderINS_8channelz2v117GetSocketResponseEEE + + [D] _ZTVN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetChannelResponseEEE + + [D] _ZTVN4grpc25ClientAsyncResponseReaderINS_8channelz2v118GetServersResponseEEE + + [D] _ZTVN4grpc25ClientAsyncResponseReaderINS_8channelz2v121GetSubchannelResponseEEE + + [D] _ZTVN4grpc25ClientAsyncResponseReaderINS_8channelz2v122GetTopChannelsResponseEEE + + [D] _ZTVN4grpc25ClientAsyncResponseReaderINS_8channelz2v124GetServerSocketsResponseEEE + + [D] _ZTVN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetServerRequestENS3_17GetServerResponseEEE + + [D] _ZTVN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_16GetSocketRequestENS3_17GetSocketResponseEEE + + [D] _ZTVN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetChannelRequestENS3_18GetChannelResponseEEE + + [D] _ZTVN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_17GetServersRequestENS3_18GetServersResponseEEE + + [D] _ZTVN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_20GetSubchannelRequestENS3_21GetSubchannelResponseEEE + + [D] _ZTVN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_21GetTopChannelsRequestENS3_22GetTopChannelsResponseEEE + + [D] _ZTVN4grpc8internal16RpcMethodHandlerINS_8channelz2v18Channelz7ServiceENS3_23GetServerSocketsRequestENS3_24GetServerSocketsResponseEEE + + [D] _ZTVN4grpc8internal23ClientCallbackUnaryImplE + + + +65 Added variable symbols not referenced by debug info: + + + + _ZTIN9grpc_impl19ClientCallbackUnaryE + + _ZTIN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetServerResponseEEE + + _ZTIN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetSocketResponseEEE + + _ZTIN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetChannelResponseEEE + + _ZTIN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetServersResponseEEE + + _ZTIN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v121GetSubchannelResponseEEE + + _ZTIN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v122GetTopChannelsResponseEEE + + _ZTIN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v124GetServerSocketsResponseEEE + + _ZTIN9grpc_impl34ClientAsyncResponseReaderInterfaceIN4grpc8channelz2v117GetServerResponseEEE + + _ZTIN9grpc_impl34ClientAsyncResponseReaderInterfaceIN4grpc8channelz2v117GetSocketResponseEEE + + _ZTIN9grpc_impl34ClientAsyncResponseReaderInterfaceIN4grpc8channelz2v118GetChannelResponseEEE + + _ZTIN9grpc_impl34ClientAsyncResponseReaderInterfaceIN4grpc8channelz2v118GetServersResponseEEE + + _ZTIN9grpc_impl34ClientAsyncResponseReaderInterfaceIN4grpc8channelz2v121GetSubchannelResponseEEE + + _ZTIN9grpc_impl34ClientAsyncResponseReaderInterfaceIN4grpc8channelz2v122GetTopChannelsResponseEEE + + _ZTIN9grpc_impl34ClientAsyncResponseReaderInterfaceIN4grpc8channelz2v124GetServerSocketsResponseEEE + + _ZTIN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetServerRequestENS4_17GetServerResponseEEE + + _ZTIN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetSocketRequestENS4_17GetSocketResponseEEE + + _ZTIN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetChannelRequestENS4_18GetChannelResponseEEE + + _ZTIN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetServersRequestENS4_18GetServersResponseEEE + + _ZTIN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_20GetSubchannelRequestENS4_21GetSubchannelResponseEEE + + _ZTIN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_21GetTopChannelsRequestENS4_22GetTopChannelsResponseEEE + + _ZTIN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_23GetServerSocketsRequestENS4_24GetServerSocketsResponseEEE + + _ZTIN9grpc_impl8internal23ClientCallbackUnaryImplE + + _ZTIZN9grpc_impl8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE0_ + + _ZTIZN9grpc_impl8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE_ + + _ZTSN9grpc_impl19ClientCallbackUnaryE + + _ZTSN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetServerResponseEEE + + _ZTSN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetSocketResponseEEE + + _ZTSN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetChannelResponseEEE + + _ZTSN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetServersResponseEEE + + _ZTSN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v121GetSubchannelResponseEEE + + _ZTSN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v122GetTopChannelsResponseEEE + + _ZTSN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v124GetServerSocketsResponseEEE + + _ZTSN9grpc_impl34ClientAsyncResponseReaderInterfaceIN4grpc8channelz2v117GetServerResponseEEE + + _ZTSN9grpc_impl34ClientAsyncResponseReaderInterfaceIN4grpc8channelz2v117GetSocketResponseEEE + + _ZTSN9grpc_impl34ClientAsyncResponseReaderInterfaceIN4grpc8channelz2v118GetChannelResponseEEE + + _ZTSN9grpc_impl34ClientAsyncResponseReaderInterfaceIN4grpc8channelz2v118GetServersResponseEEE + + _ZTSN9grpc_impl34ClientAsyncResponseReaderInterfaceIN4grpc8channelz2v121GetSubchannelResponseEEE + + _ZTSN9grpc_impl34ClientAsyncResponseReaderInterfaceIN4grpc8channelz2v122GetTopChannelsResponseEEE + + _ZTSN9grpc_impl34ClientAsyncResponseReaderInterfaceIN4grpc8channelz2v124GetServerSocketsResponseEEE + + _ZTSN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetServerRequestENS4_17GetServerResponseEEE + + _ZTSN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetSocketRequestENS4_17GetSocketResponseEEE + + _ZTSN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetChannelRequestENS4_18GetChannelResponseEEE + + _ZTSN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetServersRequestENS4_18GetServersResponseEEE + + _ZTSN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_20GetSubchannelRequestENS4_21GetSubchannelResponseEEE + + _ZTSN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_21GetTopChannelsRequestENS4_22GetTopChannelsResponseEEE + + _ZTSN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_23GetServerSocketsRequestENS4_24GetServerSocketsResponseEEE + + _ZTSN9grpc_impl8internal23ClientCallbackUnaryImplE + + _ZTSZN9grpc_impl8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE0_ + + _ZTSZN9grpc_impl8internal23ClientCallbackUnaryImpl9StartCallEvEUlbE_ + + _ZTVN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetServerResponseEEE + + _ZTVN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v117GetSocketResponseEEE + + _ZTVN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetChannelResponseEEE + + _ZTVN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v118GetServersResponseEEE + + _ZTVN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v121GetSubchannelResponseEEE + + _ZTVN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v122GetTopChannelsResponseEEE + + _ZTVN9grpc_impl25ClientAsyncResponseReaderIN4grpc8channelz2v124GetServerSocketsResponseEEE + + _ZTVN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetServerRequestENS4_17GetServerResponseEEE + + _ZTVN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_16GetSocketRequestENS4_17GetSocketResponseEEE + + _ZTVN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetChannelRequestENS4_18GetChannelResponseEEE + + _ZTVN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_17GetServersRequestENS4_18GetServersResponseEEE + + _ZTVN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_20GetSubchannelRequestENS4_21GetSubchannelResponseEEE + + _ZTVN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_21GetTopChannelsRequestENS4_22GetTopChannelsResponseEEE + + _ZTVN9grpc_impl8internal16RpcMethodHandlerIN4grpc8channelz2v18Channelz7ServiceENS4_23GetServerSocketsRequestENS4_24GetServerSocketsResponseEEE + + _ZTVN9grpc_impl8internal23ClientCallbackUnaryImplE + + + +---------------diffs in grpc_libaddress_sorting.so.11.0.0_abidiff.out:---------------- + +ELF SONAME changed + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +SONAME changed from 'libaddress_sorting.so.7' to 'libaddress_sorting.so.11' + + + +---------------diffs in grpc_libgpr.so.11.0.0_abidiff.out:---------------- + +ELF SONAME changed + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + +Function symbols changes summary: 21 Removed, 16 Added function symbols not referenced by debug info + +Variable symbols changes summary: 0 Removed, 2 Added variable symbols not referenced by debug info + + + +SONAME changed from 'libgpr.so.7' to 'libgpr.so.11' + + + +21 Removed function symbols not referenced by debug info: + + + + _Z13gpr_mpscq_popP9gpr_mpscq + + _Z14gpr_mpscq_initP9gpr_mpscq + + _Z14gpr_mpscq_pushP9gpr_mpscqP14gpr_mpscq_node + + _Z14gpr_strvec_addP10gpr_strvecPc + + _Z15gpr_strvec_initP10gpr_strvec + + _Z17gpr_mpscq_destroyP9gpr_mpscq + + _Z18gpr_join_host_portPPcPKci + + _Z18gpr_strvec_destroyP10gpr_strvec + + _Z18gpr_strvec_flattenP10gpr_strvecPm + + _Z19gpr_format_timespec12gpr_timespec + + _Z19gpr_split_host_portPKcPPcS2_ + + _Z20gpr_locked_mpscq_popP16gpr_locked_mpscq + + _Z21gpr_locked_mpscq_initP16gpr_locked_mpscq + + _Z21gpr_locked_mpscq_pushP16gpr_locked_mpscqP14gpr_mpscq_node + + _Z24gpr_locked_mpscq_destroyP16gpr_locked_mpscq + + _Z24gpr_locked_mpscq_try_popP16gpr_locked_mpscq + + _Z27gpr_mpscq_pop_and_check_endP9gpr_mpscqPb + + _ZN9grpc_core4Fork15DecExecCtxCountEv + + _ZN9grpc_core4Fork15IncExecCtxCountEv + + gpr_get_allocation_functions + + gpr_set_allocation_functions + + + +16 Added function symbols not referenced by debug info: + + + + _Z12gpr_strincmpPKcS0_m + + _Z19gpr_format_timespecB5cxx1112gpr_timespec + + _Z21gpr_cycle_counter_subdd + + _Z21gpr_get_cycle_counterv + + _Z25gpr_cycle_counter_to_timed + + _ZN9grpc_core12JoinHostPortB5cxx11EN4absl14lts_2020_02_2511string_viewEi + + _ZN9grpc_core13SplitHostPortEN4absl14lts_2020_02_2511string_viewEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ + + _ZN9grpc_core13SplitHostPortEN4absl14lts_2020_02_2511string_viewEPS2_S3_ + + _ZN9grpc_core32MultiProducerSingleConsumerQueue14PopAndCheckEndEPb + + _ZN9grpc_core32MultiProducerSingleConsumerQueue3PopEv + + _ZN9grpc_core32MultiProducerSingleConsumerQueue4PushEPNS0_4NodeE + + _ZN9grpc_core38LockedMultiProducerSingleConsumerQueue3PopEv + + _ZN9grpc_core38LockedMultiProducerSingleConsumerQueue4PushEPNS_32MultiProducerSingleConsumerQueue4NodeE + + _ZN9grpc_core38LockedMultiProducerSingleConsumerQueue6TryPopEv + + _ZN9grpc_core4Fork17DoDecExecCtxCountEv + + _ZN9grpc_core4Fork17DoIncExecCtxCountEv + + + +2 Added variable symbols not referenced by debug info: + + + + _ZTIN9grpc_core8internal24ThreadInternalsInterfaceE + + _ZTSN9grpc_core8internal24ThreadInternalsInterfaceE + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/haveged_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/haveged_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..f43c7bccd6a36a26d9ea96bfa4d81b46e465251d --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/haveged_all_result.md @@ -0,0 +1,24 @@ +# Functions changed info + +---------------diffs in haveged_libhavege.so.2.0.0_abidiff.out:---------------- + +ELF SONAME changed + +Functions changes summary: 0 Removed, 0 Changed, 1 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +SONAME changed from 'libhavege.so.1' to 'libhavege.so.2' + + + +1 Added function: + + + + 'function void havege_reparent(H_PTR)' {havege_reparent} + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libcap-ng_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libcap-ng_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..e77d9bedf45c661b77fe37c6f11330250dc8e2b8 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libcap-ng_all_result.md @@ -0,0 +1,18 @@ +# Functions changed info + +---------------diffs in libcap-ng_libcap-ng.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 1 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +1 Added function: + + + + 'function capng_results_t capng_have_permitted_capabilities()' {capng_have_permitted_capabilities} + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libcomps_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libcomps_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..ac0c842af1f6abd5994e2cdb9dd3d14fb1fe5ce3 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libcomps_all_result.md @@ -0,0 +1,16 @@ +# Functions changed info + +---------------diffs in libcomps_libcomps.so.0.1.10_abidiff.out:---------------- + +ELF SONAME changed + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +SONAME changed from 'libcomps.so.0.1.6' to 'libcomps.so.0.1.10' + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libdnf_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libdnf_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..9ce7fc27a1d6decb5ec188d68309ef33e71bccd0 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libdnf_all_result.md @@ -0,0 +1,582 @@ +# Functions changed info + +---------------diffs in libdnf_libdnf.so.2_abidiff.out:---------------- + +Functions changes summary: 31 Removed (16 filtered out), 0 Changed, 0 Added functions + +Variables changes summary: 0 Removed (1 filtered out), 0 Changed, 0 Added variable + +Function symbols changes summary: 34 Removed, 132 Added function symbols not referenced by debug info + +Variable symbols changes summary: 36 Removed, 36 Added variable symbols not referenced by debug info + + + +31 Removed functions: + + + + 'method libdnf::DependencyContainer::DependencyContainer(DnfSack*, Queue)' {_ZN6libdnf19DependencyContainerC1EP8_DnfSack7s_Queue, aliases _ZN6libdnf19DependencyContainerC2EP8_DnfSack7s_Queue} + + 'method libdnf::File::OpenException::OpenException(const std::__cxx11::string&, const std::__cxx11::string&)' {_ZN6libdnf4File13OpenExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_, aliases _ZN6libdnf4File13OpenExceptionC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_} + + 'method libdnf::ModuleDefaultsContainer::ModuleDefaultsContainer()' {_ZN6libdnf23ModuleDefaultsContainerC1Ev, aliases _ZN6libdnf23ModuleDefaultsContainerC2Ev} + + 'method void libdnf::ModuleDefaultsContainer::fromString(const std::__cxx11::string&, int)' {_ZN6libdnf23ModuleDefaultsContainer10fromStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi} + + 'method std::vector, std::allocator >, std::allocator, std::allocator > > > libdnf::ModuleDefaultsContainer::getDefaultProfiles(std::__cxx11::string&, std::__cxx11::string&)' {_ZN6libdnf23ModuleDefaultsContainer18getDefaultProfilesERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_} + + 'method std::__cxx11::string libdnf::ModuleDefaultsContainer::getDefaultStreamFor(std::__cxx11::string)' {_ZN6libdnf23ModuleDefaultsContainer19getDefaultStreamForENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE} + + 'method std::map, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator >, std::__cxx11::basic_string, std::allocator > > > > libdnf::ModuleDefaultsContainer::getDefaultStreams()' {_ZN6libdnf23ModuleDefaultsContainer17getDefaultStreamsB5cxx11Ev} + + 'method void libdnf::ModuleDefaultsContainer::reportFailures(const GPtrArray*) const' {_ZNK6libdnf23ModuleDefaultsContainer14reportFailuresEPK10_GPtrArray} + + 'method void libdnf::ModuleDefaultsContainer::resolve()' {_ZN6libdnf23ModuleDefaultsContainer7resolveEv} + + 'method void libdnf::ModuleDefaultsContainer::saveDefaults(GPtrArray*, int)' {_ZN6libdnf23ModuleDefaultsContainer12saveDefaultsEP10_GPtrArrayi} + + 'method libdnf::ModuleDefaultsContainer::~ModuleDefaultsContainer(int)' {_ZN6libdnf23ModuleDefaultsContainerD2Ev, aliases _ZN6libdnf23ModuleDefaultsContainerD1Ev} + + 'method std::vector, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >, std::allocator, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > > > > > > > libdnf::ModuleDependencies::getRequirements(GHashTable*) const' {_ZNK6libdnf18ModuleDependencies15getRequirementsB5cxx11EP11_GHashTable} + + 'method std::map, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > > > > > libdnf::ModuleDependencies::wrapModuleDependencies(const char*, ModulemdSimpleSet*) const' {_ZNK6libdnf18ModuleDependencies22wrapModuleDependenciesB5cxx11EPKcP18_ModulemdSimpleSet} + + 'method libdnf::ModuleMetadata::ModuleMetadata(std::unique_ptr<_ModulemdModule, std::default_delete<_ModulemdModule> >&&)' {_ZN6libdnf14ModuleMetadataC2EOSt10unique_ptrI15_ModulemdModuleSt14default_deleteIS2_EE, aliases _ZN6libdnf14ModuleMetadataC1EOSt10unique_ptrI15_ModulemdModuleSt14default_deleteIS2_EE} + + 'method const char* libdnf::ModuleMetadata::getArchitecture() const' {_ZNK6libdnf14ModuleMetadata15getArchitectureEv} + + 'method std::vector, std::allocator >, std::allocator, std::allocator > > > libdnf::ModuleMetadata::getArtifacts() const' {_ZNK6libdnf14ModuleMetadata12getArtifactsB5cxx11Ev} + + 'method const char* libdnf::ModuleMetadata::getContext() const' {_ZNK6libdnf14ModuleMetadata10getContextEv} + + 'method std::vector > libdnf::ModuleMetadata::getDependencies() const' {_ZNK6libdnf14ModuleMetadata15getDependenciesEv} + + 'method std::__cxx11::string libdnf::ModuleMetadata::getDescription() const' {_ZNK6libdnf14ModuleMetadata14getDescriptionB5cxx11Ev} + + 'method const char* libdnf::ModuleMetadata::getName() const' {_ZNK6libdnf14ModuleMetadata7getNameEv} + + 'method std::vector > libdnf::ModuleMetadata::getProfiles(const std::__cxx11::string&) const' {_ZNK6libdnf14ModuleMetadata11getProfilesERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE} + + 'method const char* libdnf::ModuleMetadata::getStream() const' {_ZNK6libdnf14ModuleMetadata9getStreamEv} + + 'method std::__cxx11::string libdnf::ModuleMetadata::getSummary() const' {_ZNK6libdnf14ModuleMetadata10getSummaryB5cxx11Ev} + + 'method long long int libdnf::ModuleMetadata::getVersion() const' {_ZNK6libdnf14ModuleMetadata10getVersionEv} + + 'method std::__cxx11::string libdnf::ModuleMetadata::getYaml() const' {_ZNK6libdnf14ModuleMetadata7getYamlB5cxx11Ev} + + 'method std::vector > libdnf::ModuleMetadata::metadataFromString()' {_ZN6libdnf14ModuleMetadata18metadataFromStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE} + + 'method std::vector > libdnf::ModuleMetadata::wrapModulemdModule()' {_ZN6libdnf14ModuleMetadata18wrapModulemdModuleEP10_GPtrArray} + + 'method libdnf::ModuleMetadata::~ModuleMetadata(int)' {_ZN6libdnf14ModuleMetadataD1Ev, aliases _ZN6libdnf14ModuleMetadataD2Ev} + + 'method libdnf::ModulePackage::ModulePackage(DnfSack*, libdnf::LibsolvRepo*, libdnf::ModuleMetadata&&, const std::__cxx11::string&)' {_ZN6libdnf13ModulePackageC2EP8_DnfSackP6s_RepoONS_14ModuleMetadataERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, aliases _ZN6libdnf13ModulePackageC1EP8_DnfSackP6s_RepoONS_14ModuleMetadataERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE} + + 'method std::unique_ptr<_LrHandle, std::default_delete<_LrHandle> > libdnf::Repo::Impl::lrHandleInitRemote(const char*, bool)' {_ZN6libdnf4Repo4Impl18lrHandleInitRemoteEPKcb} + + 'method int64_t libdnf::Swdb::beginTransaction(int64_t, std::__cxx11::string, std::__cxx11::string, uint32_t)' {_ZN6libdnf4Swdb16beginTransactionElNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_j} + + + +34 Removed function symbols not referenced by debug info: + + + + _ZN6libdnf23ModuleDefaultsContainer16ResolveExceptionD0Ev + + _ZN6libdnf23ModuleDefaultsContainer16ResolveExceptionD1Ev + + _ZN6libdnf23ModuleDefaultsContainer16ResolveExceptionD2Ev, aliases _ZN6libdnf23ModuleDefaultsContainer16ResolveExceptionD1Ev + + _ZN6libdnf23ModuleDefaultsContainer17ConflictExceptionD0Ev + + _ZN6libdnf23ModuleDefaultsContainer17ConflictExceptionD1Ev, aliases _ZN6libdnf23ModuleDefaultsContainer17ConflictExceptionD2Ev + + _ZN6libdnf23ModuleDefaultsContainer17ConflictExceptionD2Ev + + _ZN6libdnf23ModuleDefaultsContainer9ExceptionD0Ev + + _ZN6libdnf23ModuleDefaultsContainer9ExceptionD1Ev + + _ZN6libdnf23ModuleDefaultsContainer9ExceptionD2Ev, aliases _ZN6libdnf23ModuleDefaultsContainer9ExceptionD1Ev + + _ZN6libdnf4File11IOExceptionD0Ev + + _ZN6libdnf4File11IOExceptionD1Ev + + _ZN6libdnf4File11IOExceptionD2Ev, aliases _ZN6libdnf4File11IOExceptionD1Ev + + _ZN6libdnf4File13OpenExceptionD0Ev + + _ZN6libdnf4File13OpenExceptionD1Ev, aliases _ZN6libdnf4File13OpenExceptionD2Ev + + _ZN6libdnf4File13OpenExceptionD2Ev + + _ZN6libdnf4File14CloseExceptionD0Ev + + _ZN6libdnf4File14CloseExceptionD1Ev, aliases _ZN6libdnf4File14CloseExceptionD2Ev + + _ZN6libdnf4File14CloseExceptionD2Ev + + _ZN6libdnf4File18ShortReadExceptionD0Ev + + _ZN6libdnf4File18ShortReadExceptionD1Ev + + _ZN6libdnf4File18ShortReadExceptionD2Ev, aliases _ZN6libdnf4File18ShortReadExceptionD1Ev + + _ZN6libdnf4Goal9ExceptionD0Ev + + _ZN6libdnf4Goal9ExceptionD1Ev + + _ZN6libdnf4Goal9ExceptionD2Ev, aliases _ZN6libdnf4Goal9ExceptionD1Ev + + _ZN7SQLite312LibExceptionD0Ev + + _ZN7SQLite312LibExceptionD1Ev + + _ZN7SQLite312LibExceptionD2Ev, aliases _ZN7SQLite312LibExceptionD1Ev + + _ZN7SQLite39ExceptionD0Ev + + _ZN7SQLite39ExceptionD1Ev + + _ZN7SQLite39ExceptionD2Ev, aliases _ZN7SQLite39ExceptionD1Ev + + _ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS5_SaIS5_EEED1Ev, aliases _ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS5_SaIS5_EEED2Ev + + _ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS5_SaIS5_EEED2Ev + + _ZNSt5arrayIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm1EED1Ev + + _ZNSt5arrayIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm1EED2Ev, aliases _ZNSt5arrayIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm1EED1Ev + + + +132 Added function symbols not referenced by debug info: + + + + [A] _ZN10tinyformat6detail21parseWidthOrPrecisionERiRPKcbPKNS0_9FormatArgES1_i + + [A] _ZN6libdnf11TransactionD0Ev + + [A] _ZN6libdnf11Transformer13migrateSchemaESt10shared_ptrI7SQLite3E + + [A] _ZN6libdnf12swdb_private11TransactionD0Ev + + [A] _ZN6libdnf12swdb_private11TransactionD1Ev + + [A] _ZN6libdnf12swdb_private11TransactionD2Ev, aliases _ZN6libdnf12swdb_private11TransactionD1Ev + + [A] _ZN6libdnf13ModulePackageC1EP8_DnfSackP6s_RepoP21_ModulemdModuleStreamRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN6libdnf13ModulePackageC2EP8_DnfSackP6s_RepoP21_ModulemdModuleStreamRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, aliases _ZN6libdnf13ModulePackageC1EP8_DnfSackP6s_RepoP21_ModulemdModuleStreamRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN6libdnf14ModuleMetadata17getDefaultStreamsB5cxx11Ev + + [A] _ZN6libdnf14ModuleMetadata18getDefaultProfilesENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ + + [A] _ZN6libdnf14ModuleMetadata20getAllModulePackagesEP8_DnfSackP6s_RepoRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN6libdnf14ModuleMetadata20resolveAddedMetadataEv + + [A] _ZN6libdnf14ModuleMetadata21addMetadataFromStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi + + [A] _ZN6libdnf14ModuleMetadataC1Ev + + [A] _ZN6libdnf14ModuleMetadataC2Ev, aliases _ZN6libdnf14ModuleMetadataC1Ev + + [A] _ZN6libdnf19DependencyContainerC1EP8_DnfSackO7s_Queue + + [A] _ZN6libdnf19DependencyContainerC1EP8_DnfSackRK7s_Queue + + [A] _ZN6libdnf19DependencyContainerC2EP8_DnfSackO7s_Queue, aliases _ZN6libdnf19DependencyContainerC1EP8_DnfSackO7s_Queue + + [A] _ZN6libdnf19DependencyContainerC2EP8_DnfSackRK7s_Queue, aliases _ZN6libdnf19DependencyContainerC1EP8_DnfSackRK7s_Queue + + [A] _ZN6libdnf21pathExistsOrExceptionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN6libdnf22ModulePackageContainer16ResolveExceptionD0Ev + + [A] _ZN6libdnf22ModulePackageContainer16ResolveExceptionD1Ev + + [A] _ZN6libdnf22ModulePackageContainer16ResolveExceptionD2Ev, aliases _ZN6libdnf22ModulePackageContainer16ResolveExceptionD1Ev + + [A] _ZN6libdnf22ModulePackageContainer17ConflictExceptionD0Ev + + [A] _ZN6libdnf22ModulePackageContainer17ConflictExceptionD1Ev, aliases _ZN6libdnf22ModulePackageContainer17ConflictExceptionD2Ev + + [A] _ZN6libdnf22ModulePackageContainer17ConflictExceptionD2Ev + + [A] _ZN6libdnf22TransformerTransactionD0Ev + + [A] _ZN6libdnf22TransformerTransactionD1Ev + + [A] _ZN6libdnf22TransformerTransactionD2Ev, aliases _ZN6libdnf22TransformerTransactionD1Ev + + [A] _ZN6libdnf4File10CloseErrorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, aliases _ZN6libdnf4File10CloseErrorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN6libdnf4File10CloseErrorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN6libdnf4File10CloseErrorD0Ev + + [A] _ZN6libdnf4File10CloseErrorD1Ev, aliases _ZN6libdnf4File10CloseErrorD2Ev + + [A] _ZN6libdnf4File10CloseErrorD2Ev + + [A] _ZN6libdnf4File7IOErrorD0Ev + + [A] _ZN6libdnf4File7IOErrorD1Ev, aliases _ZN6libdnf4File7IOErrorD2Ev + + [A] _ZN6libdnf4File7IOErrorD2Ev + + [A] _ZN6libdnf4File9OpenErrorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ + + [A] _ZN6libdnf4File9OpenErrorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_, aliases _ZN6libdnf4File9OpenErrorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ + + [A] _ZN6libdnf4File9OpenErrorD0Ev + + [A] _ZN6libdnf4File9OpenErrorD1Ev + + [A] _ZN6libdnf4File9OpenErrorD2Ev, aliases _ZN6libdnf4File9OpenErrorD1Ev + + [A] _ZN6libdnf4File9ReadErrorD0Ev + + [A] _ZN6libdnf4File9ReadErrorD1Ev, aliases _ZN6libdnf4File9ReadErrorD2Ev + + [A] _ZN6libdnf4File9ReadErrorD2Ev + + [A] _ZN6libdnf4Goal26set_protect_running_kernelEb + + [A] _ZN6libdnf4Goal4Impl22protectedRunningKernelEv + + [A] _ZN6libdnf4Goal5ErrorC1EPKci, aliases _ZN6libdnf4Goal5ErrorC2EPKci + + [A] _ZN6libdnf4Goal5ErrorC2EPKci + + [A] _ZN6libdnf4Goal5ErrorD0Ev + + [A] _ZN6libdnf4Goal5ErrorD1Ev, aliases _ZN6libdnf4Goal5ErrorD2Ev + + [A] _ZN6libdnf4Goal5ErrorD2Ev + + [A] _ZN6libdnf4Goal5favorEP11_DnfPackage + + [A] _ZN6libdnf4Goal8disfavorEP11_DnfPackage + + [A] _ZN6libdnf4Repo4Impl18lrHandleInitRemoteEPKc + + [A] _ZN6libdnf4Swdb16beginTransactionElNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_jS6_ + + [A] _ZN6libdnf5ErrorD0Ev + + [A] _ZN6libdnf5ErrorD1Ev + + [A] _ZN6libdnf5ErrorD2Ev, aliases _ZN6libdnf5ErrorD1Ev + + [A] _ZN6libdnf5Query4Impl17filterDepSolvableERKNS_6FilterEP5s_Map + + [A] _ZN6libdnf5Query4Impl19obsoletesByPriorityEP6s_PoolP10s_SolvableP5s_MapPKS6_i + + [A] _ZN6libdnf5Query4Impl22filterUpdownByPriorityERKNS_6FilterEP5s_Map + + [A] _ZN6libdnf5Query4Impl25filterObsoletesByPriorityERKNS_6FilterEP5s_Map + + [A] _ZN6libdnf9ExceptionD0Ev + + [A] _ZN6libdnf9ExceptionD1Ev, aliases _ZN6libdnf9ExceptionD2Ev + + [A] _ZN6libdnf9ExceptionD2Ev + + [A] _ZN6libdnf9RepoErrorD0Ev + + [A] _ZN6libdnf9RepoErrorD1Ev + + [A] _ZN6libdnf9RepoErrorD2Ev, aliases _ZN6libdnf9RepoErrorD1Ev + + [A] _ZN6libdnf9urlEncodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ + + [A] _ZN7SQLite35ErrorC1ERKS_iRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN7SQLite35ErrorC2ERKS_iRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, aliases _ZN7SQLite35ErrorC1ERKS_iRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN7SQLite35ErrorD0Ev + + [A] _ZN7SQLite35ErrorD1Ev, aliases _ZN7SQLite35ErrorD2Ev + + [A] _ZN7SQLite35ErrorD2Ev + + [A] _ZN7SQLite39Statement5ErrorC1ERS0_iRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN7SQLite39Statement5ErrorC2ERS0_iRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, aliases _ZN7SQLite39Statement5ErrorC1ERS0_iRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + + [A] _ZN7SQLite39Statement5ErrorD0Ev + + [A] _ZN7SQLite39Statement5ErrorD1Ev, aliases _ZN7SQLite39Statement5ErrorD2Ev + + [A] _ZN7SQLite39Statement5ErrorD2Ev + + [A] _ZNK6libdnf13ModulePackage7getYamlB5cxx11Ev + + [A] _ZNK6libdnf17MergedTransaction12listCommentsB5cxx11Ev + + [A] _ZNK6libdnf4Goal26get_protect_running_kernelEv + + [A] _ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE4findERKS5_ + + [A] _ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE10_M_emplaceIJS5_EEESt4pairINS7_14_Node_iteratorIS5_Lb1ELb1EEEbESt17integral_constantIbLb1EEDpOT_ + + [A] _ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE9_M_rehashEmRKm + + [A] _ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEED1Ev, aliases _ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEED2Ev + + [A] _ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEED2Ev + + [A] _ZNSt10unique_ptrIN6libdnf5NevraESt14default_deleteIS1_EED1Ev, aliases _ZNSt10unique_ptrIN6libdnf5NevraESt14default_deleteIS1_EED2Ev + + [A] _ZNSt10unique_ptrIN6libdnf5NevraESt14default_deleteIS1_EED2Ev + + [A] _ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt14default_deleteIS5_EED1Ev, aliases _ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt14default_deleteIS5_EED2Ev + + [A] _ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt14default_deleteIS5_EED2Ev + + [A] _ZNSt12__shared_ptrI7SQLite3LN9__gnu_cxx12_Lock_policyE2EEC1ERKS3_ + + [A] _ZNSt12__shared_ptrI7SQLite3LN9__gnu_cxx12_Lock_policyE2EEC1ISaIS0_EJRA9_KcEEESt19_Sp_make_shared_tagRKT_DpOT0_ + + [A] _ZNSt12__shared_ptrI7SQLite3LN9__gnu_cxx12_Lock_policyE2EEC2ERKS3_, aliases _ZNSt12__shared_ptrI7SQLite3LN9__gnu_cxx12_Lock_policyE2EEC1ERKS3_ + + [A] _ZNSt12__shared_ptrI7SQLite3LN9__gnu_cxx12_Lock_policyE2EEC2ISaIS0_EJRA9_KcEEESt19_Sp_make_shared_tagRKT_DpOT0_, aliases _ZNSt12__shared_ptrI7SQLite3LN9__gnu_cxx12_Lock_policyE2EEC1ISaIS0_EJRA9_KcEEESt19_Sp_make_shared_tagRKT_DpOT0_ + + [A] _ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED1Ev, aliases _ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED2Ev + + [A] _ZNSt3setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4lessIS5_ESaIS5_EED2Ev + + [A] _ZNSt6vectorIN6libdnf7Plugins14PluginWithDataESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_ + + [A] _ZNSt6vectorIP10s_SolvableSaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_ + + [A] _ZNSt6vectorIP10s_SolvableSaIS1_EE7reserveEm + + [A] _ZNSt6vectorIPN6libdnf13ModulePackageESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE16_M_insert_uniqueIRKS5_EESt4pairISt17_Rb_tree_iteratorIS5_EbEOT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE16_M_insert_uniqueIS5_EESt4pairISt17_Rb_tree_iteratorIS5_EbEOT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE24_M_get_insert_unique_posERKS5_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE7_M_copyINSB_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeIS5_EPKSF_PSt18_Rb_tree_node_baseRT_ + + [A] _ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EEaSERKSB_ + + [A] _ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPP10s_SolvableSt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIPFbPKS2_SC_EEEEvT_SG_T0_ + + [A] _ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIA4_KcEEET_SJ_SJ_T0_St26random_access_iterator_tag + + [A] _ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIA5_KcEEET_SJ_SJ_T0_St26random_access_iterator_tag + + [A] dnf_context_disable_plugins + + [A] dnf_context_enable_plugins + + [A] dnf_context_get_config_file_path + + [A] dnf_context_get_disabled_plugins + + [A] dnf_context_get_enabled_plugins + + [A] dnf_context_get_install_weak_deps + + [A] dnf_context_get_plugins_all_disabled + + [A] dnf_context_get_repos_dir + + [A] dnf_context_is_set_config_file_path + + [A] dnf_context_reset_all_modules + + [A] dnf_context_set_config_file_path + + [A] dnf_context_set_install_weak_deps + + [A] dnf_context_set_plugins_all_disabled + + [A] dnf_context_set_repos_dir + + [A] dnf_package_get_prereq_ignoreinst + + [A] dnf_package_get_regular_requires + + [A] dnf_package_is_local + + [A] dnf_repo_set_skip_if_unavailable + + [A] dnf_transaction_set_dont_solve_goal + + [A] hy_goal_disfavor + + [A] hy_goal_favor + + [A] hy_nevra_free + + + +36 Removed variable symbols not referenced by debug info: + + + + _ZTIN6libdnf23ModuleDefaultsContainer16ResolveExceptionE + + _ZTIN6libdnf23ModuleDefaultsContainer17ConflictExceptionE + + _ZTIN6libdnf23ModuleDefaultsContainer9ExceptionE + + _ZTIN6libdnf4File11IOExceptionE + + _ZTIN6libdnf4File13OpenExceptionE + + _ZTIN6libdnf4File14CloseExceptionE + + _ZTIN6libdnf4File18ShortReadExceptionE + + _ZTIN6libdnf4Goal9ExceptionE + + _ZTIN7SQLite312LibExceptionE + + _ZTIN7SQLite39ExceptionE + + _ZTISt23_Sp_counted_ptr_inplaceIN6libdnf14CompressedFileESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE + + _ZTISt23_Sp_counted_ptr_inplaceIN6libdnf4FileESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE + + _ZTSN6libdnf23ModuleDefaultsContainer16ResolveExceptionE + + _ZTSN6libdnf23ModuleDefaultsContainer17ConflictExceptionE + + _ZTSN6libdnf23ModuleDefaultsContainer9ExceptionE + + _ZTSN6libdnf4File11IOExceptionE + + _ZTSN6libdnf4File13OpenExceptionE + + _ZTSN6libdnf4File14CloseExceptionE + + _ZTSN6libdnf4File18ShortReadExceptionE + + _ZTSN6libdnf4Goal9ExceptionE + + _ZTSN7SQLite312LibExceptionE + + _ZTSN7SQLite39ExceptionE + + _ZTSSt23_Sp_counted_ptr_inplaceIN6libdnf14CompressedFileESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE + + _ZTSSt23_Sp_counted_ptr_inplaceIN6libdnf4FileESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE + + _ZTVN6libdnf23ModuleDefaultsContainer16ResolveExceptionE + + _ZTVN6libdnf23ModuleDefaultsContainer17ConflictExceptionE + + _ZTVN6libdnf23ModuleDefaultsContainer9ExceptionE + + _ZTVN6libdnf4File11IOExceptionE + + _ZTVN6libdnf4File13OpenExceptionE + + _ZTVN6libdnf4File14CloseExceptionE + + _ZTVN6libdnf4File18ShortReadExceptionE + + _ZTVN6libdnf4Goal9ExceptionE + + _ZTVN7SQLite312LibExceptionE + + _ZTVN7SQLite39ExceptionE + + _ZTVSt23_Sp_counted_ptr_inplaceIN6libdnf14CompressedFileESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE + + _ZTVSt23_Sp_counted_ptr_inplaceIN6libdnf4FileESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE + + + +36 Added variable symbols not referenced by debug info: + + + + _ZTIN6libdnf22ModulePackageContainer16ResolveExceptionE + + _ZTIN6libdnf22ModulePackageContainer17ConflictExceptionE + + _ZTIN6libdnf4File10CloseErrorE + + _ZTIN6libdnf4File7IOErrorE + + _ZTIN6libdnf4File9OpenErrorE + + _ZTIN6libdnf4File9ReadErrorE + + _ZTIN6libdnf4Goal5ErrorE + + _ZTIN6libdnf5ErrorE + + _ZTIN6libdnf9ExceptionE + + _ZTIN6libdnf9RepoErrorE + + _ZTIN7SQLite35ErrorE + + _ZTIN7SQLite39Statement5ErrorE + + _ZTSN6libdnf22ModulePackageContainer16ResolveExceptionE + + _ZTSN6libdnf22ModulePackageContainer17ConflictExceptionE + + _ZTSN6libdnf4File10CloseErrorE + + _ZTSN6libdnf4File7IOErrorE + + _ZTSN6libdnf4File9OpenErrorE + + _ZTSN6libdnf4File9ReadErrorE + + _ZTSN6libdnf4Goal5ErrorE + + _ZTSN6libdnf5ErrorE + + _ZTSN6libdnf9ExceptionE + + _ZTSN6libdnf9RepoErrorE + + _ZTSN7SQLite35ErrorE + + _ZTSN7SQLite39Statement5ErrorE + + _ZTVN6libdnf22ModulePackageContainer16ResolveExceptionE + + _ZTVN6libdnf22ModulePackageContainer17ConflictExceptionE + + _ZTVN6libdnf4File10CloseErrorE + + _ZTVN6libdnf4File7IOErrorE + + _ZTVN6libdnf4File9OpenErrorE + + _ZTVN6libdnf4File9ReadErrorE + + _ZTVN6libdnf4Goal5ErrorE + + _ZTVN6libdnf5ErrorE + + _ZTVN6libdnf9ExceptionE + + _ZTVN6libdnf9RepoErrorE + + _ZTVN7SQLite35ErrorE + + _ZTVN7SQLite39Statement5ErrorE + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libdrm_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libdrm_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..1683b72fbc4e428f21ec0773ea4e537928a5f0e1 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libdrm_all_result.md @@ -0,0 +1,694 @@ +# Functions changed info + +---------------diffs in libdrm_libdrm.so.2.4.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 8 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +8 Added functions: + + + + 'function int drmIsMaster(int)' {drmIsMaster} + + 'function void drmModeFreeFB2(drmModeFB2Ptr)' {drmModeFreeFB2} + + 'function drmModeFB2Ptr drmModeGetFB2(int, uint32_t)' {drmModeGetFB2} + + 'function int drmSyncobjQuery(int, uint32_t*, uint64_t*, uint32_t)' {drmSyncobjQuery} + + 'function int drmSyncobjQuery2(int, uint32_t*, uint64_t*, uint32_t, uint32_t)' {drmSyncobjQuery2} + + 'function int drmSyncobjTimelineSignal(int, const uint32_t*, uint64_t*, uint32_t)' {drmSyncobjTimelineSignal} + + 'function int drmSyncobjTimelineWait(int, uint32_t*, uint64_t*, unsigned int, int64_t, unsigned int, uint32_t*)' {drmSyncobjTimelineWait} + + 'function int drmSyncobjTransfer(int, uint32_t, uint64_t, uint32_t, uint64_t, uint32_t)' {drmSyncobjTransfer} + + + +---------------diffs in libdrm_libdrm_exynos.so.1.0.0_abidiff.out:---------------- + +---------------diffs in libdrm_libdrm_nouveau.so.2.0.0_abidiff.out:---------------- + +---------------diffs in libdrm_libdrm_amdgpu.so.1.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 35 Changed (27 filtered out), 12 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +12 Added functions: + + + + 'function int amdgpu_bo_list_create_raw(amdgpu_device_handle, uint32_t, drm_amdgpu_bo_list_entry*, uint32_t*)' {amdgpu_bo_list_create_raw} + + 'function int amdgpu_bo_list_destroy_raw(amdgpu_device_handle, uint32_t)' {amdgpu_bo_list_destroy_raw} + + 'function int amdgpu_cs_ctx_override_priority(amdgpu_device_handle, amdgpu_context_handle, int, unsigned int)' {amdgpu_cs_ctx_override_priority} + + 'function int amdgpu_cs_query_reset_state2(amdgpu_context_handle, uint64_t*)' {amdgpu_cs_query_reset_state2} + + 'function int amdgpu_cs_submit_raw2(amdgpu_device_handle, amdgpu_context_handle, uint32_t, int, drm_amdgpu_cs_chunk*, uint64_t*)' {amdgpu_cs_submit_raw2} + + 'function int amdgpu_cs_syncobj_export_sync_file2(amdgpu_device_handle, uint32_t, uint64_t, uint32_t, int*)' {amdgpu_cs_syncobj_export_sync_file2} + + 'function int amdgpu_cs_syncobj_import_sync_file2(amdgpu_device_handle, uint32_t, uint64_t, int)' {amdgpu_cs_syncobj_import_sync_file2} + + 'function int amdgpu_cs_syncobj_query(amdgpu_device_handle, uint32_t*, uint64_t*, unsigned int)' {amdgpu_cs_syncobj_query} + + 'function int amdgpu_cs_syncobj_query2(amdgpu_device_handle, uint32_t*, uint64_t*, unsigned int, uint32_t)' {amdgpu_cs_syncobj_query2} + + 'function int amdgpu_cs_syncobj_timeline_signal(amdgpu_device_handle, const uint32_t*, uint64_t*, uint32_t)' {amdgpu_cs_syncobj_timeline_signal} + + 'function int amdgpu_cs_syncobj_timeline_wait(amdgpu_device_handle, uint32_t*, uint64_t*, unsigned int, int64_t, unsigned int, uint32_t*)' {amdgpu_cs_syncobj_timeline_wait} + + 'function int amdgpu_cs_syncobj_transfer(amdgpu_device_handle, uint32_t, uint64_t, uint32_t, uint64_t, uint32_t)' {amdgpu_cs_syncobj_transfer} + + + +35 functions with some indirect sub-type change: + + + + [C]'function int amdgpu_bo_alloc(amdgpu_device_handle, amdgpu_bo_alloc_request*, amdgpu_bo_handle*)' at amdgpu_bo.c:78:1 has some indirect sub-type changes: + + parameter 3 of type 'amdgpu_bo_handle*' has sub-type changes: + + in pointed to type 'typedef amdgpu_bo_handle' at amdgpu.h:129:1: + + underlying type 'amdgpu_bo*' changed: + + in pointed to type 'struct amdgpu_bo' at amdgpu_internal.h:94:1: + + type size hasn't changed + + 2 data member changes: + + type of 'amdgpu_device* amdgpu_bo::dev' changed: + + in pointed to type 'struct amdgpu_device' at amdgpu_internal.h:67:1: + + type size changed from 9664 to 9792 (in bits) + + 6 data member changes (1 filtered): + + type of 'drm_amdgpu_info_device amdgpu_device::dev_info' changed: + + type size changed from 2816 to 2944 (in bits) + + 2 data member insertions: + + '__u32 drm_amdgpu_info_device::pa_sc_tile_steering_override', at offset 2816 (in bits) at amdgpu_drm.h:1005:1 + + '__u64 drm_amdgpu_info_device::tcc_disabled_mask', at offset 2880 (in bits) at amdgpu_drm.h:1007:1 + + + + 'amdgpu_gpu_info amdgpu_device::info' offset changed from 3776 to 3904 (in bits) (by +128 bits) + + 'amdgpu_bo_va_mgr amdgpu_device::vamgr' offset changed from 7104 to 7232 (in bits) (by +128 bits) + + 'amdgpu_bo_va_mgr amdgpu_device::vamgr_32' offset changed from 7744 to 7872 (in bits) (by +128 bits) + + 'amdgpu_bo_va_mgr amdgpu_device::vamgr_high' offset changed from 8384 to 8512 (in bits) (by +128 bits) + + 'amdgpu_bo_va_mgr amdgpu_device::vamgr_high_32' offset changed from 9024 to 9152 (in bits) (by +128 bits) + + + + type of 'int amdgpu_bo::cpu_map_count' changed: + + entity changed from 'int' to compatible type 'typedef int64_t' at stdint-intn.h:27:1 + + type name changed from 'int' to 'long int' + + type size changed from 32 to 64 (in bits) + + + + + + [C]'function int amdgpu_bo_import(amdgpu_device_handle, amdgpu_bo_handle_type, uint32_t, amdgpu_bo_import_result*)' at amdgpu_bo.c:256:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_bo_list_create(amdgpu_device_handle, uint32_t, amdgpu_bo_handle*, uint8_t*, amdgpu_bo_list_handle*)' at amdgpu_bo.c:642:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + parameter 5 of type 'amdgpu_bo_list_handle*' has sub-type changes: + + in pointed to type 'typedef amdgpu_bo_list_handle' at amdgpu.h:134:1: + + underlying type 'amdgpu_bo_list*' changed: + + in pointed to type 'struct amdgpu_bo_list' at amdgpu_internal.h:108:1: + + type size hasn't changed + + 1 data member change: + + type of 'amdgpu_device* amdgpu_bo_list::dev' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + + + [C]'function int amdgpu_bo_va_op_raw(amdgpu_device_handle, amdgpu_bo_handle, uint64_t, uint64_t, uint64_t, uint64_t, uint32_t)' at amdgpu_bo.c:773:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_create_bo_from_user_mem(amdgpu_device_handle, void*, uint64_t, amdgpu_bo_handle*)' at amdgpu_bo.c:580:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function void amdgpu_cs_chunk_fence_to_dep(amdgpu_cs_fence*, drm_amdgpu_cs_chunk_dep*)' at amdgpu_cs.c:919:1 has some indirect sub-type changes: + + parameter 1 of type 'amdgpu_cs_fence*' has sub-type changes: + + in pointed to type 'struct amdgpu_cs_fence' at amdgpu.h:270:1: + + type size hasn't changed + + 1 data member change: + + type of 'amdgpu_context_handle amdgpu_cs_fence::context' changed: + + underlying type 'amdgpu_context*' changed: + + in pointed to type 'struct amdgpu_context' at amdgpu_internal.h:114:1: + + type size hasn't changed + + 1 data member change: + + type of 'amdgpu_device* amdgpu_context::dev' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + + + + + [C]'function int amdgpu_cs_create_syncobj(amdgpu_device_handle, uint32_t*)' at amdgpu_cs.c:648:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_cs_create_syncobj2(amdgpu_device_handle, uint32_t, uint32_t*)' at amdgpu_cs.c:638:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_cs_ctx_create(amdgpu_device_handle, amdgpu_context_handle*)' at amdgpu_cs.c:97:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_cs_ctx_create2(amdgpu_device_handle, uint32_t, amdgpu_context_handle*)' at amdgpu_cs.c:51:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_cs_destroy_syncobj(amdgpu_device_handle, uint32_t)' at amdgpu_cs.c:657:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_cs_export_syncobj(amdgpu_device_handle, uint32_t, int*)' at amdgpu_cs.c:743:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_cs_fence_to_handle(amdgpu_device_handle, amdgpu_cs_fence*, uint32_t, uint32_t*)' at amdgpu_cs.c:929:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_cs_import_syncobj(amdgpu_device_handle, int, uint32_t*)' at amdgpu_cs.c:753:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_cs_submit_raw(amdgpu_device_handle, amdgpu_context_handle, amdgpu_bo_list_handle, int, drm_amdgpu_cs_chunk*, uint64_t*)' at amdgpu_cs.c:855:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_cs_syncobj_import_sync_file(amdgpu_device_handle, uint32_t, int)' at amdgpu_cs.c:773:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_cs_syncobj_reset(amdgpu_device_handle, const uint32_t*, uint32_t)' at amdgpu_cs.c:666:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_cs_syncobj_wait(amdgpu_device_handle, uint32_t*, unsigned int, int64_t, unsigned int, uint32_t*)' at amdgpu_cs.c:698:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_device_deinitialize(amdgpu_device_handle)' at amdgpu_device.c:282:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_device_initialize(int, uint32_t*, uint32_t*, amdgpu_device_handle*)' at amdgpu_device.c:143:1 has some indirect sub-type changes: + + parameter 4 of type 'amdgpu_device_handle*' has sub-type changes: + + pointed to type 'typedef amdgpu_device_handle' changed at amdgpu.h:116:1, as reported earlier + + + + [C]'function int amdgpu_find_bo_by_cpu_mapping(amdgpu_device_handle, void*, uint64_t, amdgpu_bo_handle*, uint64_t*)' at amdgpu_bo.c:538:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function const char* amdgpu_get_marketing_name(amdgpu_device_handle)' at amdgpu_device.c:288:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_query_buffer_size_alignment(amdgpu_device_handle, amdgpu_buffer_size_alignments*)' at amdgpu_bo.c:507:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_query_crtc_from_id(amdgpu_device_handle, unsigned int, int32_t*)' at amdgpu_gpu_info.c:47:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_query_firmware_version(amdgpu_device_handle, unsigned int, unsigned int, unsigned int, uint32_t*, uint32_t*)' at amdgpu_gpu_info.c:114:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_query_gds_info(amdgpu_device_handle, amdgpu_gds_resource_info*)' at amdgpu_gpu_info.c:295:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_query_gpu_info(amdgpu_device_handle, amdgpu_gpu_info*)' at amdgpu_gpu_info.c:231:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_query_heap_info(amdgpu_device_handle, uint32_t, uint32_t, amdgpu_heap_info*)' at amdgpu_gpu_info.c:243:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_query_hw_ip_count(amdgpu_device_handle, unsigned int, uint32_t*)' at amdgpu_gpu_info.c:81:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_query_hw_ip_info(amdgpu_device_handle, unsigned int, unsigned int, drm_amdgpu_info_hw_ip*)' at amdgpu_gpu_info.c:97:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_query_info(amdgpu_device_handle, unsigned int, unsigned int, void*)' at amdgpu_gpu_info.c:33:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_query_sw_info(amdgpu_device_handle, amdgpu_sw_info, void*)' at amdgpu_device.c:293:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_read_mm_registers(amdgpu_device_handle, unsigned int, unsigned int, uint32_t, uint32_t, uint32_t*)' at amdgpu_gpu_info.c:62:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + [C]'function int amdgpu_va_range_alloc(amdgpu_device_handle, amdgpu_gpu_va_range, uint64_t, uint64_t, uint64_t, uint64_t*, amdgpu_va_handle*, uint64_t)' at amdgpu_vamgr.c:189:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + parameter 7 of type 'amdgpu_va_handle*' has sub-type changes: + + in pointed to type 'typedef amdgpu_va_handle' at amdgpu.h:139:1: + + underlying type 'amdgpu_va*' changed: + + in pointed to type 'struct amdgpu_va' at amdgpu_internal.h:59:1: + + type size hasn't changed + + 1 data member change: + + type of 'amdgpu_device_handle amdgpu_va::dev' changed: + + details were reported earlier + + + + + + [C]'function int amdgpu_va_range_query(amdgpu_device_handle, amdgpu_gpu_va_range, uint64_t*, uint64_t*)' at amdgpu_vamgr.c:32:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef amdgpu_device_handle' has sub-type changes: + + underlying type 'amdgpu_device*' changed: + + pointed to type 'struct amdgpu_device' changed at amdgpu_internal.h:67:1, as reported earlier + + + + + +---------------diffs in libdrm_libdrm_etnaviv.so.1.0.0_abidiff.out:---------------- + +---------------diffs in libdrm_libkms.so.1.0.0_abidiff.out:---------------- + +---------------diffs in libdrm_libdrm_tegra.so.0.0.0_abidiff.out:---------------- + +---------------diffs in libdrm_libdrm_radeon.so.1.0.1_abidiff.out:---------------- + +---------------diffs in libdrm_libdrm_freedreno.so.1.0.0_abidiff.out:---------------- + +Functions changes summary: 6 Removed, 1 Changed (42 filtered out), 2 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +6 Removed functions: + + + + 'function void fd_ringbuffer_emit_reloc_ring(fd_ringbuffer*, fd_ringmarker*, fd_ringmarker*)' {fd_ringbuffer_emit_reloc_ring} + + 'function void fd_ringmarker_del(fd_ringmarker*)' {fd_ringmarker_del} + + 'function uint32_t fd_ringmarker_dwords(fd_ringmarker*, fd_ringmarker*)' {fd_ringmarker_dwords} + + 'function int fd_ringmarker_flush(fd_ringmarker*)' {fd_ringmarker_flush} + + 'function void fd_ringmarker_mark(fd_ringmarker*)' {fd_ringmarker_mark} + + 'function fd_ringmarker* fd_ringmarker_new(fd_ringbuffer*)' {fd_ringmarker_new} + + + +2 Added functions: + + + + 'function fd_ringbuffer* fd_ringbuffer_new_flags(fd_pipe*, uint32_t, fd_ringbuffer_flags)' {fd_ringbuffer_new_flags} + + 'function fd_ringbuffer* fd_ringbuffer_ref(fd_ringbuffer*)' {fd_ringbuffer_ref} + + + +1 function with some indirect sub-type change: + + + + [C]'function void fd_bo_cpu_fini(fd_bo*)' at freedreno_bo.c:355:1 has some indirect sub-type changes: + + parameter 1 of type 'fd_bo*' has sub-type changes: + + in pointed to type 'struct fd_bo' at freedreno_priv.h:157:1: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'fd_device* fd_bo::dev' changed: + + in pointed to type 'struct fd_device' at freedreno_priv.h:82:1: + + type size hasn't changed + + 1 data member change: + + type of 'const fd_device_funcs* fd_device::funcs' changed: + + in pointed to type 'const fd_device_funcs': + + in unqualified underlying type 'struct fd_device_funcs' at freedreno_priv.h:61:1: + + type size hasn't changed + + 1 data member changes (2 filtered): + + type of 'fd_pipe* (fd_device*, enum fd_pipe_id, unsigned int)* fd_device_funcs::pipe_new' changed: + + in pointed to type 'function type fd_pipe* (fd_device*, enum fd_pipe_id, unsigned int)': + + return type changed: + + in pointed to type 'struct fd_pipe' at freedreno_priv.h:126:1: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'const fd_pipe_funcs* fd_pipe::funcs' changed: + + in pointed to type 'const fd_pipe_funcs': + + in unqualified underlying type 'struct fd_pipe_funcs' at freedreno_priv.h:118:1: + + type size hasn't changed + + 1 data member changes (3 filtered): + + type of 'fd_ringbuffer* (fd_pipe*, typedef uint32_t, enum fd_ringbuffer_flags)* fd_pipe_funcs::ringbuffer_new' changed: + + in pointed to type 'function type fd_ringbuffer* (fd_pipe*, typedef uint32_t, enum fd_ringbuffer_flags)': + + return type changed: + + in pointed to type 'struct fd_ringbuffer' at freedreno_ringbuffer.h:64:1: + + type size changed from 704 to 768 (in bits) + + 1 data member insertion: + + 'union {atomic_t refcnt; uint64_t __pad;}', at offset 704 (in bits) + + 2 data member changes (2 filtered): + + type of 'const fd_ringbuffer_funcs* fd_ringbuffer::funcs' changed: + + in pointed to type 'const fd_ringbuffer_funcs': + + in unqualified underlying type 'struct fd_ringbuffer_funcs' at freedreno_priv.h:134:1: + + type size hasn't changed + + 1 data member changes (7 filtered): + + type of 'typedef uint32_t (fd_ringbuffer*, fd_ringbuffer*, typedef uint32_t, typedef uint32_t, typedef uint32_t)* fd_ringbuffer_funcs::emit_reloc_ring' changed: + + in pointed to type 'function type typedef uint32_t (fd_ringbuffer*, fd_ringbuffer*, typedef uint32_t, typedef uint32_t, typedef uint32_t)': + + parameter 4 of type 'typedef uint32_t' was removed + + parameter 5 of type 'typedef uint32_t' was removed + + + + + + + + type of 'uint32_t fd_ringbuffer::flags' changed: + + entity changed from 'typedef uint32_t' to 'enum fd_ringbuffer_flags' at freedreno_ringbuffer.h:41:1 + + type size hasn't changed + + type alignement changed from 0 to 32 + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libell_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libell_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..8fde188df798af33c876f6e23e51e32c14765c73 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libell_all_result.md @@ -0,0 +1,344 @@ +# Functions changed info + +---------------diffs in libell_libell.so.0.0.2_abidiff.out:---------------- + +Functions changes summary: 13 Removed, 0 Changed, 148 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added (1 filtered out) variable + + + +13 Removed functions: + + + + [D] 'function void l_fswatch_destroy(l_fswatch*)' {l_fswatch_destroy} + + [D] 'function l_fswatch* l_fswatch_new(const char*, l_fswatch_cb_t, void*, l_fswatch_destroy_cb_t)' {l_fswatch_new} + + [D] 'function bool l_genl_family_can_dump(l_genl_family*, uint8_t)' {l_genl_family_can_dump} + + [D] 'function bool l_genl_family_can_send(l_genl_family*, uint8_t)' {l_genl_family_can_send} + + [D] 'function uint32_t l_genl_family_get_version(l_genl_family*)' {l_genl_family_get_version} + + [D] 'function bool l_genl_family_has_group(l_genl_family*, const char*)' {l_genl_family_has_group} + + [D] 'function l_genl_family* l_genl_family_ref(l_genl_family*)' {l_genl_family_ref} + + [D] 'function bool l_genl_family_set_watches(l_genl_family*, l_genl_watch_func_t, l_genl_watch_func_t, void*, l_genl_destroy_func_t)' {l_genl_family_set_watches} + + [D] 'function void l_genl_family_unref(l_genl_family*)' {l_genl_family_unref} + + [D] 'function l_genl* l_genl_new_default()' {l_genl_new_default} + + [D] 'function bool l_genl_set_close_on_unref(l_genl*, bool)' {l_genl_set_close_on_unref} + + [D] 'function bool l_genl_set_unicast_handler(l_genl*, l_genl_msg_func_t, void*, l_genl_destroy_func_t)' {l_genl_set_unicast_handler} + + [D] 'function uint8_t* l_pem_load_certificate(const char*, size_t*)' {l_pem_load_certificate} + + + +148 Added functions: + + + + [A] 'function bool l_aead_cipher_is_supported(l_aead_cipher_type)' {l_aead_cipher_is_supported@@ELL_0.10} + + [A] 'function void l_cert_free(l_cert*)' {l_cert_free@@ELL_0.10} + + [A] 'function const uint8_t* l_cert_get_der_data(l_cert*, size_t*)' {l_cert_get_der_data@@ELL_0.10} + + [A] 'function const uint8_t* l_cert_get_dn(l_cert*, size_t*)' {l_cert_get_dn@@ELL_0.10} + + [A] 'function l_key* l_cert_get_pubkey(l_cert*)' {l_cert_get_pubkey@@ELL_0.10} + + [A] 'function l_cert_key_type l_cert_get_pubkey_type(l_cert*)' {l_cert_get_pubkey_type@@ELL_0.10} + + [A] 'function l_cert* l_cert_new_from_der(const uint8_t*, size_t)' {l_cert_new_from_der@@ELL_0.10} + + [A] 'function void l_certchain_free(l_certchain*)' {l_certchain_free@@ELL_0.10} + + [A] 'function l_cert* l_certchain_get_leaf(l_certchain*)' {l_certchain_get_leaf@@ELL_0.10} + + [A] 'function bool l_certchain_verify(l_certchain*, l_queue*, const char**)' {l_certchain_verify@@ELL_0.10} + + [A] 'function void l_certchain_walk_from_ca(l_certchain*, l_cert_walk_cb_t, void*)' {l_certchain_walk_from_ca@@ELL_0.10} + + [A] 'function void l_certchain_walk_from_leaf(l_certchain*, l_cert_walk_cb_t, void*)' {l_certchain_walk_from_leaf@@ELL_0.10} + + [A] 'function ssize_t l_checksum_digest_length(l_checksum_type)' {l_checksum_digest_length@@ELL_0.10} + + [A] 'function bool l_cipher_is_supported(l_cipher_type)' {l_cipher_is_supported@@ELL_0.10} + + [A] 'function void* l_dbus_object_get_data(l_dbus*, const char*, const char*)' {l_dbus_object_get_data@@ELL_0.10} + + [A] 'function bool l_dhcp_client_set_debug(l_dhcp_client*, l_dhcp_debug_cb_t, void*, l_dhcp_destroy_cb_t)' {l_dhcp_client_set_debug@@ELL_0.10} + + [A] 'function char** l_dhcp_lease_get_dns(const l_dhcp_lease*)' {l_dhcp_lease_get_dns@@ELL_0.10} + + [A] 'function char* l_dhcp_lease_get_domain_name(const l_dhcp_lease*)' {l_dhcp_lease_get_domain_name@@ELL_0.10} + + [A] 'function void l_dir_watch_destroy(l_dir_watch*)' {l_dir_watch_destroy@@ELL_0.10} + + [A] 'function l_dir_watch* l_dir_watch_new(const char*, l_dir_watch_event_func_t, void*, l_dir_watch_destroy_func_t)' {l_dir_watch_new@@ELL_0.10} + + [A] 'function const l_ecc_curve* l_ecc_curve_get(const char*)' {l_ecc_curve_get@@ELL_0.10} + + [A] 'function const l_ecc_curve* l_ecc_curve_get_ike_group(unsigned int)' {l_ecc_curve_get_ike_group@@ELL_0.10} + + [A] 'function const char* l_ecc_curve_get_name(const l_ecc_curve*)' {l_ecc_curve_get_name@@ELL_0.10} + + [A] 'function l_ecc_scalar* l_ecc_curve_get_order(const l_ecc_curve*)' {l_ecc_curve_get_order@@ELL_0.10} + + [A] 'function l_ecc_scalar* l_ecc_curve_get_prime(const l_ecc_curve*)' {l_ecc_curve_get_prime@@ELL_0.10} + + [A] 'function size_t l_ecc_curve_get_scalar_bytes(const l_ecc_curve*)' {l_ecc_curve_get_scalar_bytes@@ELL_0.10} + + [A] 'function const unsigned int* l_ecc_curve_get_supported_ike_groups()' {l_ecc_curve_get_supported_ike_groups@@ELL_0.10} + + [A] 'function const unsigned int* l_ecc_curve_get_supported_tls_groups()' {l_ecc_curve_get_supported_tls_groups@@ELL_0.10} + + [A] 'function const l_ecc_curve* l_ecc_curve_get_tls_group(unsigned int)' {l_ecc_curve_get_tls_group@@ELL_0.10} + + [A] 'function bool l_ecc_point_add(l_ecc_point*, const l_ecc_point*, const l_ecc_point*)' {l_ecc_point_add@@ELL_0.10} + + [A] 'function void l_ecc_point_free(l_ecc_point*)' {l_ecc_point_free@@ELL_0.10} + + [A] 'function l_ecc_point* l_ecc_point_from_data(const l_ecc_curve*, l_ecc_point_type, void*, size_t)' {l_ecc_point_from_data@@ELL_0.10} + + [A] 'function ssize_t l_ecc_point_get_data(const l_ecc_point*, void*, size_t)' {l_ecc_point_get_data@@ELL_0.10} + + [A] 'function ssize_t l_ecc_point_get_x(const l_ecc_point*, void*, size_t)' {l_ecc_point_get_x@@ELL_0.10} + + [A] 'function bool l_ecc_point_inverse(l_ecc_point*)' {l_ecc_point_inverse@@ELL_0.10} + + [A] 'function bool l_ecc_point_multiply(l_ecc_point*, const l_ecc_scalar*, const l_ecc_point*)' {l_ecc_point_multiply@@ELL_0.10} + + [A] 'function l_ecc_point* l_ecc_point_new(const l_ecc_curve*)' {l_ecc_point_new@@ELL_0.10} + + [A] 'function bool l_ecc_points_are_equal(const l_ecc_point*, const l_ecc_point*)' {l_ecc_points_are_equal@@ELL_0.10} + + [A] 'function bool l_ecc_scalar_add(l_ecc_scalar*, const l_ecc_scalar*, const l_ecc_scalar*, const l_ecc_scalar*)' {l_ecc_scalar_add@@ELL_0.10} + + [A] 'function void l_ecc_scalar_free(l_ecc_scalar*)' {l_ecc_scalar_free@@ELL_0.10} + + [A] 'function ssize_t l_ecc_scalar_get_data(const l_ecc_scalar*, void*, size_t)' {l_ecc_scalar_get_data@@ELL_0.10} + + [A] 'function int l_ecc_scalar_legendre(l_ecc_scalar*)' {l_ecc_scalar_legendre@@ELL_0.10} + + [A] 'function bool l_ecc_scalar_multiply(l_ecc_scalar*, const l_ecc_scalar*, const l_ecc_scalar*)' {l_ecc_scalar_multiply@@ELL_0.10} + + [A] 'function l_ecc_scalar* l_ecc_scalar_new(const l_ecc_curve*, void*, size_t)' {l_ecc_scalar_new@@ELL_0.10} + + [A] 'function l_ecc_scalar* l_ecc_scalar_new_random(const l_ecc_curve*)' {l_ecc_scalar_new_random@@ELL_0.10} + + [A] 'function bool l_ecc_scalar_sum_x(l_ecc_scalar*, const l_ecc_scalar*)' {l_ecc_scalar_sum_x@@ELL_0.10} + + [A] 'function bool l_ecc_scalars_are_equal(const l_ecc_scalar*, const l_ecc_scalar*)' {l_ecc_scalars_are_equal@@ELL_0.10} + + [A] 'function bool l_ecdh_generate_key_pair(const l_ecc_curve*, l_ecc_scalar**, l_ecc_point**)' {l_ecdh_generate_key_pair@@ELL_0.10} + + [A] 'function bool l_ecdh_generate_shared_secret(const l_ecc_scalar*, const l_ecc_point*, l_ecc_scalar**)' {l_ecdh_generate_shared_secret@@ELL_0.10} + + [A] 'function unsigned int l_genl_add_family_watch(l_genl*, const char*, l_genl_discover_func_t, l_genl_vanished_func_t, void*, l_genl_destroy_func_t)' {l_genl_add_family_watch@@ELL_0.10} + + [A] 'function unsigned int l_genl_add_unicast_watch(l_genl*, const char*, l_genl_msg_func_t, void*, l_genl_destroy_func_t)' {l_genl_add_unicast_watch@@ELL_0.10} + + [A] 'function bool l_genl_discover_families(l_genl*, l_genl_discover_func_t, void*, l_genl_destroy_func_t)' {l_genl_discover_families@@ELL_0.10} + + [A] 'function void l_genl_family_free(l_genl_family*)' {l_genl_family_free@@ELL_0.10} + + [A] 'function const l_genl_family_info* l_genl_family_get_info(l_genl_family*)' {l_genl_family_get_info@@ELL_0.10} + + [A] 'function bool l_genl_family_info_can_dump(const l_genl_family_info*, uint8_t)' {l_genl_family_info_can_dump@@ELL_0.10} + + [A] 'function bool l_genl_family_info_can_send(const l_genl_family_info*, uint8_t)' {l_genl_family_info_can_send@@ELL_0.10} + + [A] 'function char** l_genl_family_info_get_groups(const l_genl_family_info*)' {l_genl_family_info_get_groups@@ELL_0.10} + + [A] 'function uint32_t l_genl_family_info_get_id(const l_genl_family_info*)' {l_genl_family_info_get_id@@ELL_0.10} + + [A] 'function const char* l_genl_family_info_get_name(const l_genl_family_info*)' {l_genl_family_info_get_name@@ELL_0.10} + + [A] 'function uint32_t l_genl_family_info_get_version(const l_genl_family_info*)' {l_genl_family_info_get_version@@ELL_0.10} + + [A] 'function bool l_genl_family_info_has_group(const l_genl_family_info*, const char*)' {l_genl_family_info_has_group@@ELL_0.10} + + [A] 'function const char* l_genl_msg_get_extended_error(l_genl_msg*)' {l_genl_msg_get_extended_error@@ELL_0.10} + + [A] 'function l_genl_msg* l_genl_msg_new_from_data(void*, size_t)' {l_genl_msg_new_from_data@@ELL_0.10} + + [A] 'function void* l_genl_msg_to_data(l_genl_msg*, uint16_t, uint16_t, uint32_t, uint32_t, size_t*)' {l_genl_msg_to_data@@ELL_0.10} + + [A] 'function bool l_genl_remove_family_watch(l_genl*, unsigned int)' {l_genl_remove_family_watch@@ELL_0.10} + + [A] 'function bool l_genl_remove_unicast_watch(l_genl*, unsigned int)' {l_genl_remove_unicast_watch@@ELL_0.10} + + [A] 'function bool l_genl_request_family(l_genl*, const char*, l_genl_discover_func_t, void*, l_genl_destroy_func_t)' {l_genl_request_family@@ELL_0.10} + + [A] 'function uint32_t l_getrandom_uint32()' {l_getrandom_uint32@@ELL_0.10} + + [A] 'function bool l_gpio_chip_find_line_offset(l_gpio_chip*, const char*, uint32_t*)' {l_gpio_chip_find_line_offset@@ELL_0.10} + + [A] 'function void l_gpio_chip_free(l_gpio_chip*)' {l_gpio_chip_free@@ELL_0.10} + + [A] 'function const char* l_gpio_chip_get_label(l_gpio_chip*)' {l_gpio_chip_get_label@@ELL_0.10} + + [A] 'function char* l_gpio_chip_get_line_consumer(l_gpio_chip*, uint32_t)' {l_gpio_chip_get_line_consumer@@ELL_0.10} + + [A] 'function char* l_gpio_chip_get_line_label(l_gpio_chip*, uint32_t)' {l_gpio_chip_get_line_label@@ELL_0.10} + + [A] 'function const char* l_gpio_chip_get_name(l_gpio_chip*)' {l_gpio_chip_get_name@@ELL_0.10} + + [A] 'function uint32_t l_gpio_chip_get_num_lines(l_gpio_chip*)' {l_gpio_chip_get_num_lines@@ELL_0.10} + + [A] 'function l_gpio_chip* l_gpio_chip_new(const char*)' {l_gpio_chip_new@@ELL_0.10} + + [A] 'function char** l_gpio_chips_with_line_label(const char*)' {l_gpio_chips_with_line_label@@ELL_0.10} + + [A] 'function void l_gpio_reader_free(l_gpio_reader*)' {l_gpio_reader_free@@ELL_0.10} + + [A] 'function bool l_gpio_reader_get(l_gpio_reader*, uint32_t, uint32_t*)' {l_gpio_reader_get@@ELL_0.10} + + [A] 'function l_gpio_reader* l_gpio_reader_new(l_gpio_chip*, const char*, uint32_t, const uint32_t*)' {l_gpio_reader_new@@ELL_0.10} + + [A] 'function void l_gpio_writer_free(l_gpio_writer*)' {l_gpio_writer_free@@ELL_0.10} + + [A] 'function l_gpio_writer* l_gpio_writer_new(l_gpio_chip*, const char*, uint32_t, const uint32_t*, const uint32_t*)' {l_gpio_writer_new@@ELL_0.10} + + [A] 'function bool l_gpio_writer_set(l_gpio_writer*, uint32_t, const uint32_t*)' {l_gpio_writer_set@@ELL_0.10} + + [A] 'function l_key* l_key_generate_dh_private(void*, size_t)' {l_key_generate_dh_private@@ELL_0.10} + + [A] 'function bool l_key_get_info(l_key*, l_key_cipher_type, l_checksum_type, size_t*, bool*)' {l_key_get_info@@ELL_0.10} + + [A] 'function bool l_key_is_supported(uint32_t)' {l_key_is_supported@@ELL_0.10} + + [A] 'function bool l_key_validate_dh_payload(void*, size_t, void*, size_t)' {l_key_validate_dh_payload@@ELL_0.10} + + [A] 'function bool l_keyring_link(l_keyring*, const l_key*)' {l_keyring_link@@ELL_0.10} + + [A] 'function bool l_keyring_link_nested(l_keyring*, const l_keyring*)' {l_keyring_link_nested@@ELL_0.10} + + [A] 'function bool l_keyring_unlink(l_keyring*, const l_key*)' {l_keyring_unlink@@ELL_0.10} + + [A] 'function bool l_keyring_unlink_nested(l_keyring*, const l_keyring*)' {l_keyring_unlink_nested@@ELL_0.10} + + [A] 'function bool l_net_hostname_is_localhost(const char*)' {l_net_hostname_is_localhost@@ELL_0.10} + + [A] 'function bool l_net_hostname_is_root(const char*)' {l_net_hostname_is_root@@ELL_0.10} + + [A] 'function char* l_path_find(const char*, const char*, int)' {l_path_find@@ELL_0.10} + + [A] 'function uint64_t l_path_get_mtime(const char*)' {l_path_get_mtime@@ELL_0.10} + + [A] 'function const char* l_path_next(const char*, char**)' {l_path_next@@ELL_0.10} + + [A] 'function int l_path_touch(const char*)' {l_path_touch@@ELL_0.10} + + [A] 'function l_certchain* l_pem_load_certificate_chain(const char*)' {l_pem_load_certificate_chain@@ELL_0.10} + + [A] 'function l_certchain* l_pem_load_certificate_chain_from_data(void*, size_t)' {l_pem_load_certificate_chain_from_data@@ELL_0.10} + + [A] 'function l_queue* l_pem_load_certificate_list(const char*)' {l_pem_load_certificate_list@@ELL_0.10} + + [A] 'function l_queue* l_pem_load_certificate_list_from_data(void*, size_t)' {l_pem_load_certificate_list_from_data@@ELL_0.10} + + [A] 'function l_key* l_pem_load_private_key_from_data(void*, size_t, const char*, bool*)' {l_pem_load_private_key_from_data@@ELL_0.10} + + [A] 'function ssize_t l_ringbuf_append(l_ringbuf*, void*, size_t)' {l_ringbuf_append@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_ifaddr4_add(l_netlink*, int, uint8_t, const char*, const char*, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_ifaddr4_add@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_ifaddr4_delete(l_netlink*, int, uint8_t, const char*, const char*, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_ifaddr4_delete@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_ifaddr4_dump(l_netlink*, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_ifaddr4_dump@@ELL_0.10} + + [A] 'function void l_rtnl_ifaddr4_extract(const ifaddrmsg*, int, char**, char**, char**)' {l_rtnl_ifaddr4_extract@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_ifaddr6_add(l_netlink*, int, uint8_t, const char*, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_ifaddr6_add@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_ifaddr6_delete(l_netlink*, int, uint8_t, const char*, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_ifaddr6_delete@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_ifaddr6_dump(l_netlink*, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_ifaddr6_dump@@ELL_0.10} + + [A] 'function void l_rtnl_ifaddr6_extract(const ifaddrmsg*, int, char**)' {l_rtnl_ifaddr6_extract@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_route4_add_connected(l_netlink*, int, uint8_t, const char*, const char*, uint8_t, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_route4_add_connected@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_route4_add_gateway(l_netlink*, int, const char*, const char*, uint32_t, uint8_t, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_route4_add_gateway@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_route4_dump(l_netlink*, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_route4_dump@@ELL_0.10} + + [A] 'function void l_rtnl_route4_extract(const rtmsg*, uint32_t, uint32_t*, uint32_t*, char**, char**, char**)' {l_rtnl_route4_extract@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_route6_add_gateway(l_netlink*, int, const char*, uint32_t, uint8_t, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_route6_add_gateway@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_route6_delete_gateway(l_netlink*, int, const char*, uint32_t, uint8_t, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_route6_delete_gateway@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_route6_dump(l_netlink*, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_route6_dump@@ELL_0.10} + + [A] 'function void l_rtnl_route6_extract(const rtmsg*, uint32_t, uint32_t*, uint32_t*, char**, char**, char**)' {l_rtnl_route6_extract@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_set_linkmode_and_operstate(l_netlink*, int, uint8_t, uint8_t, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_set_linkmode_and_operstate@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_set_mac(l_netlink*, int, const uint8_t*, bool, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_set_mac@@ELL_0.10} + + [A] 'function uint32_t l_rtnl_set_powered(l_netlink*, int, bool, l_netlink_command_func_t, void*, l_netlink_destroy_func_t)' {l_rtnl_set_powered@@ELL_0.10} + + [A] 'function char** l_settings_get_embedded_groups(l_settings*)' {l_settings_get_embedded_groups@@ELL_0.10} + + [A] 'function const char* l_settings_get_embedded_value(l_settings*, const char*, const char**)' {l_settings_get_embedded_value@@ELL_0.10} + + [A] 'function bool l_settings_has_embedded_group(l_settings*, const char*)' {l_settings_has_embedded_group@@ELL_0.10} + + [A] 'function char** l_strv_append(char**, const char*)' {l_strv_append@@ELL_0.10} + + [A] 'function char** l_strv_append_printf(char**, const char*, ...)' {l_strv_append_printf@@ELL_0.10} + + [A] 'function char** l_strv_append_vprintf(char**, const char*, va_list)' {l_strv_append_vprintf@@ELL_0.10} + + [A] 'function char** l_strv_copy(char**)' {l_strv_copy@@ELL_0.10} + + [A] 'function void l_strv_free(char**)' {l_strv_free@@ELL_0.10} + + [A] 'function char** l_strv_new()' {l_strv_new@@ELL_0.10} + + [A] 'function uint64_t l_time_now()' {l_time_now@@ELL_0.10} + + [A] 'function void l_timeout_set_callback(l_timeout*, l_timeout_notify_cb_t, void*, l_timeout_destroy_cb_t)' {l_timeout_set_callback@@ELL_0.10} + + [A] 'function bool l_tls_prf_get_bytes(l_tls*, bool, const char*, uint8_t*, size_t)' {l_tls_prf_get_bytes@@ELL_0.10} + + [A] 'function bool l_tls_set_debug(l_tls*, l_tls_debug_cb_t, void*, l_tls_destroy_cb_t)' {l_tls_set_debug@@ELL_0.10} + + [A] 'function void l_tls_set_domain_mask(l_tls*, char**)' {l_tls_set_domain_mask@@ELL_0.10} + + [A] 'function void l_tls_set_version_range(l_tls*, l_tls_version, l_tls_version)' {l_tls_set_version_range@@ELL_0.10} + + [A] 'function bool l_tls_start(l_tls*)' {l_tls_start@@ELL_0.10} + + [A] 'function uint32_t l_uintset_find_unused(l_uintset*, uint32_t)' {l_uintset_find_unused@@ELL_0.10} + + [A] 'function void l_uintset_foreach(l_uintset*, l_uintset_foreach_func_t, void*)' {l_uintset_foreach@@ELL_0.10} + + [A] 'function l_uintset* l_uintset_intersect(const l_uintset*, const l_uintset*)' {l_uintset_intersect@@ELL_0.10} + + [A] 'function bool l_uintset_isempty(const l_uintset*)' {l_uintset_isempty@@ELL_0.10} + + [A] 'function char* l_utf8_from_ucs2be(void*, ssize_t)' {l_utf8_from_ucs2be@@ELL_0.10} + + [A] 'function size_t l_utf8_from_wchar(wchar_t, char*)' {l_utf8_from_wchar@@ELL_0.10} + + [A] 'function void* l_utf8_to_ucs2be(const char*, size_t*)' {l_utf8_to_ucs2be@@ELL_0.10} + + [A] 'function char* l_util_hexstring_upper(const unsigned char*, size_t)' {l_util_hexstring_upper@@ELL_0.10} + + [A] 'function bool l_uuid_from_string(const char*, uint8_t*)' {l_uuid_from_string@@ELL_0.10} + + [A] 'function bool l_uuid_v4(uint8_t*)' {l_uuid_v4@@ELL_0.10} + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libgusb_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libgusb_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..d16e657787d42077280e8e6c743c4c8b1c90a0cb --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libgusb_all_result.md @@ -0,0 +1,74 @@ +# Functions changed info + +---------------diffs in libgusb_libgusb.so.2.0.10_abidiff.out:---------------- + +Functions changes summary: 2 Removed, 1 Changed (11 filtered out), 13 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +2 Removed functions: + + + + 'function GType g_usb_interface_get_type()' {g_usb_interface_get_type@@LIBGUSB_0.1.0} + + 'function void g_usb_source_set_callback(GUsbSource*, GSourceFunc, gpointer, GDestroyNotify)' {g_usb_source_set_callback@@LIBGUSB_0.1.0} + + + +13 Added functions: + + + + 'function guint16 g_usb_device_get_spec(GUsbDevice*)' {g_usb_device_get_spec@@LIBGUSB_0.3.1} + + 'function guint8 g_usb_endpoint_get_address(GUsbEndpoint*)' {g_usb_endpoint_get_address@@LIBGUSB_0.3.3} + + 'function GUsbDeviceDirection g_usb_endpoint_get_direction(GUsbEndpoint*)' {g_usb_endpoint_get_direction@@LIBGUSB_0.3.3} + + 'function GBytes* g_usb_endpoint_get_extra(GUsbEndpoint*)' {g_usb_endpoint_get_extra@@LIBGUSB_0.3.3} + + 'function guint8 g_usb_endpoint_get_kind(GUsbEndpoint*)' {g_usb_endpoint_get_kind@@LIBGUSB_0.3.3} + + 'function guint16 g_usb_endpoint_get_maximum_packet_size(GUsbEndpoint*)' {g_usb_endpoint_get_maximum_packet_size@@LIBGUSB_0.3.3} + + 'function guint8 g_usb_endpoint_get_number(GUsbEndpoint*)' {g_usb_endpoint_get_number@@LIBGUSB_0.3.3} + + 'function guint8 g_usb_endpoint_get_polling_interval(GUsbEndpoint*)' {g_usb_endpoint_get_polling_interval@@LIBGUSB_0.3.3} + + 'function guint8 g_usb_endpoint_get_refresh(GUsbEndpoint*)' {g_usb_endpoint_get_refresh@@LIBGUSB_0.3.3} + + 'function guint8 g_usb_endpoint_get_synch_address(GUsbEndpoint*)' {g_usb_endpoint_get_synch_address@@LIBGUSB_0.3.3} + + 'function GType g_usb_endpoint_get_type()' {g_usb_endpoint_get_type@@LIBGUSB_0.3.3} + + 'function GPtrArray* g_usb_interface_get_endpoints(GUsbInterface*)' {g_usb_interface_get_endpoints@@LIBGUSB_0.3.3} + + 'function const gchar* g_usb_version_string()' {g_usb_version_string@@LIBGUSB_0.3.1} + + + +1 function with some indirect sub-type change: + + + + [C]'function GUsbInterface* g_usb_device_get_interface(GUsbDevice*, guint8, guint8, guint8, GError**)' at gusb-device.c:500:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'typedef GUsbInterface' at gusb-interface.h:17:1: + + underlying type 'struct _GUsbInterface' at gusb-interface.c:38:1 changed: + + type size changed from 576 to 640 (in bits) + + 1 data member insertion: + + 'GPtrArray* _GUsbInterface::endpoints', at offset 576 (in bits) at gusb-interface.c:34:1 + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libical_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libical_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..bed04d37395bc95295df3feca0cbf64e237bdab4 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libical_all_result.md @@ -0,0 +1,1774 @@ +# Functions changed info + +---------------diffs in libical_libical_cxx.so.3.0.8_abidiff.out:---------------- + +---------------diffs in libical_libicalss_cxx.so.3.0.8_abidiff.out:---------------- + +---------------diffs in libical_libicalvcal.so.3.0.8_abidiff.out:---------------- + +---------------diffs in libical_libical.so.3.0.8_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed, 2 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +2 Added functions: + + + + 'function icaltimetype icalproperty_get_datetime_with_component(icalproperty*, icalcomponent*)' {icalproperty_get_datetime_with_component} + + 'function void icaltimezone_truncate_vtimezone(icalcomponent*, icaltimetype, icaltimetype, int)' {icaltimezone_truncate_vtimezone} + + + +1 function with some indirect sub-type change: + + + + [C]'function icalattach* icalattach_new_from_data(const char*, icalattach_free_fn_t, void*)' at icalattach.c:60:1 has some indirect sub-type changes: + + parameter 2 of type 'typedef icalattach_free_fn_t' changed: + + underlying type 'void (unsigned char*, void*)*' changed: + + in pointed to type 'function type void (unsigned char*, void*)': + + parameter 1 of type 'unsigned char*' changed: + + in pointed to type 'unsigned char': + + type name changed from 'unsigned char' to 'char' + + type size hasn't changed + + + + + + + +---------------diffs in libical_libicalss.so.3.0.8_abidiff.out:---------------- + +---------------diffs in libical_libical-glib.so.3.0.8_abidiff.out:---------------- + +Functions changes summary: 196 Removed, 137 Changed (46 filtered out), 199 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + +Function symbols changes summary: 0 Removed, 1 Added function symbol not referenced by debug info + +Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info + + + +196 Removed functions: + + + + [D] 'function void i_cal_array_append(ICalArray*, GObject*)' {i_cal_array_append} + + [D] 'function GObject* i_cal_array_element_at(ICalArray*, gint)' {i_cal_array_element_at} + + [D] 'function ICalArray* i_cal_array_new(gint, gint)' {i_cal_array_new} + + [D] 'function gchar* i_cal_component_as_ical_string_r(ICalComponent*)' {i_cal_component_as_ical_string_r} + + [D] 'function ICalComponent* i_cal_component_new_clone(ICalComponent*)' {i_cal_component_new_clone} + + [D] 'function ICalComponentKind i_cal_component_string_to_kind(const gchar*)' {i_cal_component_string_to_kind} + + [D] 'function ICalPeriodType* i_cal_datetimeperiod_type_get_period(ICalDatetimeperiodType*)' {i_cal_datetimeperiod_type_get_period} + + [D] 'function ICalTimetype* i_cal_datetimeperiod_type_get_time(ICalDatetimeperiodType*)' {i_cal_datetimeperiod_type_get_time} + + [D] 'function GType i_cal_datetimeperiod_type_get_type()' {i_cal_datetimeperiod_type_get_type} + + [D] 'function void i_cal_datetimeperiod_type_set_period(ICalDatetimeperiodType*, ICalPeriodType*)' {i_cal_datetimeperiod_type_set_period} + + [D] 'function void i_cal_datetimeperiod_type_set_time(ICalDatetimeperiodType*, ICalTimetype*)' {i_cal_datetimeperiod_type_set_time} + + [D] 'function gchar* i_cal_duration_type_as_ical_string_r(ICalDurationType*)' {i_cal_duration_type_as_ical_string_r} + + [D] 'function gint i_cal_duration_type_as_int(ICalDurationType*)' {i_cal_duration_type_as_int} + + [D] 'function ICalDurationType* i_cal_duration_type_bad_duration()' {i_cal_duration_type_bad_duration} + + [D] 'function ICalDurationType* i_cal_duration_type_from_int(gint)' {i_cal_duration_type_from_int} + + [D] 'function ICalDurationType* i_cal_duration_type_from_string(const gchar*)' {i_cal_duration_type_from_string} + + [D] 'function guint i_cal_duration_type_get_days(ICalDurationType*)' {i_cal_duration_type_get_days} + + [D] 'function guint i_cal_duration_type_get_hours(ICalDurationType*)' {i_cal_duration_type_get_hours} + + [D] 'function guint i_cal_duration_type_get_minutes(ICalDurationType*)' {i_cal_duration_type_get_minutes} + + [D] 'function guint i_cal_duration_type_get_seconds(ICalDurationType*)' {i_cal_duration_type_get_seconds} + + [D] 'function GType i_cal_duration_type_get_type()' {i_cal_duration_type_get_type} + + [D] 'function guint i_cal_duration_type_get_weeks(ICalDurationType*)' {i_cal_duration_type_get_weeks} + + [D] 'function gint i_cal_duration_type_is_bad_duration(ICalDurationType*)' {i_cal_duration_type_is_bad_duration} + + [D] 'function gint i_cal_duration_type_is_neg(ICalDurationType*)' {i_cal_duration_type_is_neg} + + [D] 'function gint i_cal_duration_type_is_null_duration(ICalDurationType*)' {i_cal_duration_type_is_null_duration} + + [D] 'function ICalDurationType* i_cal_duration_type_null_duration()' {i_cal_duration_type_null_duration} + + [D] 'function void i_cal_duration_type_set_days(ICalDurationType*, guint)' {i_cal_duration_type_set_days} + + [D] 'function void i_cal_duration_type_set_hours(ICalDurationType*, guint)' {i_cal_duration_type_set_hours} + + [D] 'function void i_cal_duration_type_set_is_neg(ICalDurationType*, gint)' {i_cal_duration_type_set_is_neg} + + [D] 'function void i_cal_duration_type_set_minutes(ICalDurationType*, guint)' {i_cal_duration_type_set_minutes} + + [D] 'function void i_cal_duration_type_set_seconds(ICalDurationType*, guint)' {i_cal_duration_type_set_seconds} + + [D] 'function void i_cal_duration_type_set_weeks(ICalDurationType*, guint)' {i_cal_duration_type_set_weeks} + + [D] 'function ICalRequestStatus i_cal_enum_num_to_reqstat(gshort, gshort)' {i_cal_enum_num_to_reqstat} + + [D] 'function gchar* i_cal_enum_reqstat_code_r(ICalRequestStatus)' {i_cal_enum_reqstat_code_r} + + [D] 'function const gchar* i_cal_enum_reqstat_desc(ICalRequestStatus)' {i_cal_enum_reqstat_desc} + + [D] 'function gshort i_cal_enum_reqstat_major(ICalRequestStatus)' {i_cal_enum_reqstat_major} + + [D] 'function gshort i_cal_enum_reqstat_minor(ICalRequestStatus)' {i_cal_enum_reqstat_minor} + + [D] 'function gdouble i_cal_geo_type_get_lat(ICalGeoType*)' {i_cal_geo_type_get_lat} + + [D] 'function gdouble i_cal_geo_type_get_lon(ICalGeoType*)' {i_cal_geo_type_get_lon} + + [D] 'function GType i_cal_geo_type_get_type()' {i_cal_geo_type_get_type} + + [D] 'function icalgeotype i_cal_geo_type_new_default()' {i_cal_geo_type_new_default} + + [D] 'function void i_cal_geo_type_set_lat(ICalGeoType*, gdouble)' {i_cal_geo_type_set_lat} + + [D] 'function void i_cal_geo_type_set_lon(ICalGeoType*, gdouble)' {i_cal_geo_type_set_lon} + + [D] 'function gint i_cal_langbind_access_array(gint*, gint)' {i_cal_langbind_access_array} + + [D] 'function void i_cal_langbind_free_array(gint*)' {i_cal_langbind_free_array} + + [D] 'function ICalComponent* i_cal_langbind_get_first_component(ICalComponent*, const gchar*)' {i_cal_langbind_get_first_component} + + [D] 'function ICalParameter* i_cal_langbind_get_first_parameter(ICalProperty*)' {i_cal_langbind_get_first_parameter} + + [D] 'function ICalProperty* i_cal_langbind_get_first_property(ICalComponent*, const gchar*)' {i_cal_langbind_get_first_property} + + [D] 'function ICalComponent* i_cal_langbind_get_next_component(ICalComponent*, const gchar*)' {i_cal_langbind_get_next_component} + + [D] 'function ICalParameter* i_cal_langbind_get_next_parameter(ICalProperty*)' {i_cal_langbind_get_next_parameter} + + [D] 'function ICalProperty* i_cal_langbind_get_next_property(ICalComponent*, const gchar*)' {i_cal_langbind_get_next_property} + + [D] 'function gint* i_cal_langbind_new_array(gint)' {i_cal_langbind_new_array} + + [D] 'function gchar* i_cal_langbind_property_eval_string_r(ICalProperty*, const gchar*)' {i_cal_langbind_property_eval_string_r} + + [D] 'function gchar* i_cal_langbind_quote_as_ical_r(const gchar*)' {i_cal_langbind_quote_as_ical_r} + + [D] 'function gint i_cal_langbind_string_to_open_flag(const gchar*)' {i_cal_langbind_string_to_open_flag} + + [D] 'function gchar* i_cal_parameter_as_ical_string_r(ICalParameter*)' {i_cal_parameter_as_ical_string_r} + + [D] 'function ICalParameter* i_cal_parameter_new_clone(ICalParameter*)' {i_cal_parameter_new_clone} + + [D] 'function ICalParameterKind i_cal_parameter_string_to_kind(const gchar*)' {i_cal_parameter_string_to_kind} + + [D] 'function void i_cal_parser_set_gen_data(ICalParser*, void*)' {i_cal_parser_set_gen_data} + + [D] 'function gchar* i_cal_parser_string_line_generator(gchar*, size_t, void*)' {i_cal_parser_string_line_generator} + + [D] 'function gchar* i_cal_period_type_as_ical_string_r(ICalPeriodType*)' {i_cal_period_type_as_ical_string_r} + + [D] 'function ICalPeriodType* i_cal_period_type_from_string(const gchar*)' {i_cal_period_type_from_string} + + [D] 'function ICalDurationType* i_cal_period_type_get_duration(ICalPeriodType*)' {i_cal_period_type_get_duration} + + [D] 'function ICalTimetype* i_cal_period_type_get_end(ICalPeriodType*)' {i_cal_period_type_get_end} + + [D] 'function ICalTimetype* i_cal_period_type_get_start(ICalPeriodType*)' {i_cal_period_type_get_start} + + [D] 'function GType i_cal_period_type_get_type()' {i_cal_period_type_get_type} + + [D] 'function gint i_cal_period_type_is_null_period(ICalPeriodType*)' {i_cal_period_type_is_null_period} + + [D] 'function gint i_cal_period_type_is_valid_period(ICalPeriodType*)' {i_cal_period_type_is_valid_period} + + [D] 'function ICalPeriodType* i_cal_period_type_null_period()' {i_cal_period_type_null_period} + + [D] 'function void i_cal_period_type_set_duration(ICalPeriodType*, ICalDurationType*)' {i_cal_period_type_set_duration} + + [D] 'function void i_cal_period_type_set_end(ICalPeriodType*, ICalTimetype*)' {i_cal_period_type_set_end} + + [D] 'function void i_cal_period_type_set_start(ICalPeriodType*, ICalTimetype*)' {i_cal_period_type_set_start} + + [D] 'function const gchar* i_cal_property_as_ical_string_r(ICalProperty*)' {i_cal_property_as_ical_string_r} + + [D] 'function gint i_cal_property_enum_belongs_to_property(ICalPropertyKind, gint)' {i_cal_property_enum_belongs_to_property} + + [D] 'function gchar* i_cal_property_enum_to_string_r(gint)' {i_cal_property_enum_to_string_r} + + [D] 'function gchar* i_cal_property_get_parameter_as_string_r(ICalProperty*, const gchar*)' {i_cal_property_get_parameter_as_string_r} + + [D] 'function gchar* i_cal_property_get_property_name_r(const ICalProperty*)' {i_cal_property_get_property_name_r} + + [D] 'function gchar* i_cal_property_get_value_as_string_r(const ICalProperty*)' {i_cal_property_get_value_as_string_r} + + [D] 'function ICalProperty* i_cal_property_new_clone(ICalProperty*)' {i_cal_property_new_clone} + + [D] 'function ICalPropertyKind i_cal_property_string_to_kind(const gchar*)' {i_cal_property_string_to_kind} + + [D] 'function ICalPropertyMethod i_cal_property_string_to_method(const gchar*)' {i_cal_property_string_to_method} + + [D] 'function ICalPropertyStatus i_cal_property_string_to_status(const gchar*)' {i_cal_property_string_to_status} + + [D] 'function ICalPropertyKind i_cal_property_value_kind_to_kind(ICalValueKind)' {i_cal_property_value_kind_to_kind} + + [D] 'function const gchar* i_cal_recur_freq_to_string(ICalRecurrenceTypeFrequency)' {i_cal_recur_freq_to_string} + + [D] 'function const gchar* i_cal_recur_skip_to_string(ICalRecurrenceTypeSkip)' {i_cal_recur_skip_to_string} + + [D] 'function ICalRecurrenceTypeFrequency i_cal_recur_string_to_freq(const gchar*)' {i_cal_recur_string_to_freq} + + [D] 'function ICalRecurrenceTypeSkip i_cal_recur_string_to_skip(const gchar*)' {i_cal_recur_string_to_skip} + + [D] 'function ICalRecurrenceTypeWeekday i_cal_recur_string_to_weekday(const gchar*)' {i_cal_recur_string_to_weekday} + + [D] 'function const gchar* i_cal_recur_weekday_to_string(ICalRecurrenceTypeWeekday)' {i_cal_recur_weekday_to_string} + + [D] 'function gchar* i_cal_recurrence_type_as_string_r(ICalRecurrenceType*)' {i_cal_recurrence_type_as_string_r} + + [D] 'function void i_cal_recurrence_type_clear(ICalRecurrenceType*)' {i_cal_recurrence_type_clear} + + [D] 'function ICalRecurrenceTypeWeekday i_cal_recurrence_type_day_day_of_week(gshort)' {i_cal_recurrence_type_day_day_of_week} + + [D] 'function gint i_cal_recurrence_type_day_position(gshort)' {i_cal_recurrence_type_day_position} + + [D] 'function ICalRecurrenceType* i_cal_recurrence_type_from_string(const gchar*)' {i_cal_recurrence_type_from_string} + + [D] 'function GArray* i_cal_recurrence_type_get_by_day(ICalRecurrenceType*)' {i_cal_recurrence_type_get_by_day} + + [D] 'function GArray* i_cal_recurrence_type_get_by_hour(ICalRecurrenceType*)' {i_cal_recurrence_type_get_by_hour} + + [D] 'function GArray* i_cal_recurrence_type_get_by_minute(ICalRecurrenceType*)' {i_cal_recurrence_type_get_by_minute} + + [D] 'function GArray* i_cal_recurrence_type_get_by_month(ICalRecurrenceType*)' {i_cal_recurrence_type_get_by_month} + + [D] 'function GArray* i_cal_recurrence_type_get_by_month_day(ICalRecurrenceType*)' {i_cal_recurrence_type_get_by_month_day} + + [D] 'function GArray* i_cal_recurrence_type_get_by_second(ICalRecurrenceType*)' {i_cal_recurrence_type_get_by_second} + + [D] 'function GArray* i_cal_recurrence_type_get_by_set_pos(ICalRecurrenceType*)' {i_cal_recurrence_type_get_by_set_pos} + + [D] 'function GArray* i_cal_recurrence_type_get_by_week_no(ICalRecurrenceType*)' {i_cal_recurrence_type_get_by_week_no} + + [D] 'function GArray* i_cal_recurrence_type_get_by_year_day(ICalRecurrenceType*)' {i_cal_recurrence_type_get_by_year_day} + + [D] 'function gint i_cal_recurrence_type_get_count(ICalRecurrenceType*)' {i_cal_recurrence_type_get_count} + + [D] 'function ICalRecurrenceTypeFrequency i_cal_recurrence_type_get_freq(ICalRecurrenceType*)' {i_cal_recurrence_type_get_freq} + + [D] 'function gshort i_cal_recurrence_type_get_interval(ICalRecurrenceType*)' {i_cal_recurrence_type_get_interval} + + [D] 'function GType i_cal_recurrence_type_get_type()' {i_cal_recurrence_type_get_type} + + [D] 'function ICalTimetype* i_cal_recurrence_type_get_until(ICalRecurrenceType*)' {i_cal_recurrence_type_get_until} + + [D] 'function ICalRecurrenceTypeWeekday i_cal_recurrence_type_get_week_start(ICalRecurrenceType*)' {i_cal_recurrence_type_get_week_start} + + [D] 'function gint i_cal_recurrence_type_month_is_leap(gshort)' {i_cal_recurrence_type_month_is_leap} + + [D] 'function gint i_cal_recurrence_type_month_month(gshort)' {i_cal_recurrence_type_month_month} + + [D] 'function gint i_cal_recurrence_type_rscale_is_supported()' {i_cal_recurrence_type_rscale_is_supported} + + [D] 'function ICalArray* i_cal_recurrence_type_rscale_supported_calendars()' {i_cal_recurrence_type_rscale_supported_calendars} + + [D] 'function void i_cal_recurrence_type_set_by_day(ICalRecurrenceType*, guint, gshort)' {i_cal_recurrence_type_set_by_day} + + [D] 'function void i_cal_recurrence_type_set_by_hour(ICalRecurrenceType*, guint, gshort)' {i_cal_recurrence_type_set_by_hour} + + [D] 'function void i_cal_recurrence_type_set_by_minute(ICalRecurrenceType*, guint, gshort)' {i_cal_recurrence_type_set_by_minute} + + [D] 'function void i_cal_recurrence_type_set_by_month(ICalRecurrenceType*, guint, gshort)' {i_cal_recurrence_type_set_by_month} + + [D] 'function void i_cal_recurrence_type_set_by_month_day(ICalRecurrenceType*, guint, gshort)' {i_cal_recurrence_type_set_by_month_day} + + [D] 'function void i_cal_recurrence_type_set_by_second(ICalRecurrenceType*, guint, gshort)' {i_cal_recurrence_type_set_by_second} + + [D] 'function void i_cal_recurrence_type_set_by_set_pos(ICalRecurrenceType*, guint, gshort)' {i_cal_recurrence_type_set_by_set_pos} + + [D] 'function void i_cal_recurrence_type_set_by_week_no(ICalRecurrenceType*, guint, gshort)' {i_cal_recurrence_type_set_by_week_no} + + [D] 'function void i_cal_recurrence_type_set_by_year_day(ICalRecurrenceType*, guint, gshort)' {i_cal_recurrence_type_set_by_year_day} + + [D] 'function void i_cal_recurrence_type_set_count(ICalRecurrenceType*, gint)' {i_cal_recurrence_type_set_count} + + [D] 'function void i_cal_recurrence_type_set_freq(ICalRecurrenceType*, ICalRecurrenceTypeFrequency)' {i_cal_recurrence_type_set_freq} + + [D] 'function void i_cal_recurrence_type_set_interval(ICalRecurrenceType*, gshort)' {i_cal_recurrence_type_set_interval} + + [D] 'function void i_cal_recurrence_type_set_until(ICalRecurrenceType*, ICalTimetype*)' {i_cal_recurrence_type_set_until} + + [D] 'function void i_cal_recurrence_type_set_week_start(ICalRecurrenceType*, ICalRecurrenceTypeWeekday)' {i_cal_recurrence_type_set_week_start} + + [D] 'function gchar* i_cal_reqstat_type_as_string_r(ICalReqstatType*)' {i_cal_reqstat_type_as_string_r} + + [D] 'function ICalReqstatType* i_cal_reqstat_type_from_string(const gchar*)' {i_cal_reqstat_type_from_string} + + [D] 'function ICalRequestStatus i_cal_reqstat_type_get_code(ICalReqstatType*)' {i_cal_reqstat_type_get_code} + + [D] 'function const gchar* i_cal_reqstat_type_get_debug(ICalReqstatType*)' {i_cal_reqstat_type_get_debug} + + [D] 'function const gchar* i_cal_reqstat_type_get_desc(ICalReqstatType*)' {i_cal_reqstat_type_get_desc} + + [D] 'function GType i_cal_reqstat_type_get_type()' {i_cal_reqstat_type_get_type} + + [D] 'function void i_cal_reqstat_type_set_code(ICalReqstatType*, ICalRequestStatus)' {i_cal_reqstat_type_set_code} + + [D] 'function gchar* i_cal_time_as_ical_string_r(ICalTimetype*)' {i_cal_time_as_ical_string_r} + + [D] 'function ICalTimetype* i_cal_time_current_time_with_zone(ICalTimezone*)' {i_cal_time_current_time_with_zone} + + [D] 'function ICalTimetype* i_cal_time_from_day_of_year(const gint, const gint)' {i_cal_time_from_day_of_year} + + [D] 'function ICalTimetype* i_cal_time_from_string(const gchar*)' {i_cal_time_from_string} + + [D] 'function ICalTimetype* i_cal_time_from_timet_with_zone(const time_t, gint, ICalTimezone*)' {i_cal_time_from_timet_with_zone} + + [D] 'function ICalTimetype* i_cal_time_null_date()' {i_cal_time_null_date} + + [D] 'function ICalTimetype* i_cal_time_null_time()' {i_cal_time_null_time} + + [D] 'function gint i_cal_time_span_is_busy(ICalTimeSpan*)' {i_cal_time_span_is_busy} + + [D] 'function void i_cal_time_tiemzone_expand_vtimezone(ICalComponent*, gint, ICalArray*)' {i_cal_time_tiemzone_expand_vtimezone} + + [D] 'function ICalTimetype* i_cal_time_today()' {i_cal_time_today} + + [D] 'function gint i_cal_timetype_get_day(ICalTimetype*)' {i_cal_timetype_get_day} + + [D] 'function gint i_cal_timetype_get_hour(ICalTimetype*)' {i_cal_timetype_get_hour} + + [D] 'function gint i_cal_timetype_get_minute(ICalTimetype*)' {i_cal_timetype_get_minute} + + [D] 'function gint i_cal_timetype_get_month(ICalTimetype*)' {i_cal_timetype_get_month} + + [D] 'function gint i_cal_timetype_get_second(ICalTimetype*)' {i_cal_timetype_get_second} + + [D] 'function GType i_cal_timetype_get_type()' {i_cal_timetype_get_type} + + [D] 'function gint i_cal_timetype_get_year(ICalTimetype*)' {i_cal_timetype_get_year} + + [D] 'function const ICalTimezone* i_cal_timetype_get_zone(ICalTimetype*)' {i_cal_timetype_get_zone} + + [D] 'function gint i_cal_timetype_is_date(ICalTimetype*)' {i_cal_timetype_is_date} + + [D] 'function gint i_cal_timetype_is_daylight(ICalTimetype*)' {i_cal_timetype_is_daylight} + + [D] 'function gint i_cal_timetype_is_utc(ICalTimetype*)' {i_cal_timetype_is_utc} + + [D] 'function ICalTimetype* i_cal_timetype_new()' {i_cal_timetype_new} + + [D] 'function void i_cal_timetype_set_day(ICalTimetype*, gint)' {i_cal_timetype_set_day} + + [D] 'function void i_cal_timetype_set_hour(ICalTimetype*, gint)' {i_cal_timetype_set_hour} + + [D] 'function void i_cal_timetype_set_is_date(ICalTimetype*, gint)' {i_cal_timetype_set_is_date} + + [D] 'function void i_cal_timetype_set_is_daylight(ICalTimetype*, gint)' {i_cal_timetype_set_is_daylight} + + [D] 'function void i_cal_timetype_set_minute(ICalTimetype*, gint)' {i_cal_timetype_set_minute} + + [D] 'function void i_cal_timetype_set_month(ICalTimetype*, gint)' {i_cal_timetype_set_month} + + [D] 'function void i_cal_timetype_set_second(ICalTimetype*, gint)' {i_cal_timetype_set_second} + + [D] 'function void i_cal_timetype_set_year(ICalTimetype*, gint)' {i_cal_timetype_set_year} + + [D] 'function void i_cal_timezone_convert_time(ICalTimetype*, ICalTimezone*, ICalTimezone*)' {i_cal_timezone_convert_time} + + [D] 'function const gchar* i_cal_timezone_phase_get_comment(ICalTimezonePhase*)' {i_cal_timezone_phase_get_comment} + + [D] 'function ICalTimetype* i_cal_timezone_phase_get_dtstart(ICalTimezonePhase*)' {i_cal_timezone_phase_get_dtstart} + + [D] 'function gint i_cal_timezone_phase_get_offsetto(ICalTimezonePhase*)' {i_cal_timezone_phase_get_offsetto} + + [D] 'function ICalDatetimeperiodType* i_cal_timezone_phase_get_rdate(ICalTimezonePhase*)' {i_cal_timezone_phase_get_rdate} + + [D] 'function const gchar* i_cal_timezone_phase_get_rrule(ICalTimezonePhase*)' {i_cal_timezone_phase_get_rrule} + + [D] 'function GType i_cal_timezone_phase_get_type()' {i_cal_timezone_phase_get_type} + + [D] 'function const gchar* i_cal_timezone_phase_get_tzname(ICalTimezonePhase*)' {i_cal_timezone_phase_get_tzname} + + [D] 'function gint i_cal_timezone_phase_get_tzoffsetfrom(ICalTimezonePhase*)' {i_cal_timezone_phase_get_tzoffsetfrom} + + [D] 'function gint i_cal_timezone_phase_is_stdandard(ICalTimezonePhase*)' {i_cal_timezone_phase_is_stdandard} + + [D] 'function void i_cal_timezone_phase_set_dtstart(ICalTimezonePhase*, ICalTimetype*)' {i_cal_timezone_phase_set_dtstart} + + [D] 'function void i_cal_timezone_phase_set_is_stdandard(ICalTimezonePhase*, gint)' {i_cal_timezone_phase_set_is_stdandard} + + [D] 'function void i_cal_timezone_phase_set_offsetto(ICalTimezonePhase*, gint)' {i_cal_timezone_phase_set_offsetto} + + [D] 'function void i_cal_timezone_phase_set_rdate(ICalTimezonePhase*, ICalDatetimeperiodType*)' {i_cal_timezone_phase_set_rdate} + + [D] 'function void i_cal_timezone_phase_set_tzoffsetfrom(ICalTimezonePhase*, gint)' {i_cal_timezone_phase_set_tzoffsetfrom} + + [D] 'function ICalTimetype* i_cal_timezonetype_get_last_mod(ICalTimezonetype*)' {i_cal_timezonetype_get_last_mod} + + [D] 'function GType i_cal_timezonetype_get_type()' {i_cal_timezonetype_get_type} + + [D] 'function const gchar* i_cal_timezonetype_get_tzid(ICalTimezonetype*)' {i_cal_timezonetype_get_tzid} + + [D] 'function const gchar* i_cal_timezonetype_get_tzurl(ICalTimezonetype*)' {i_cal_timezonetype_get_tzurl} + + [D] 'function void i_cal_timezonetype_set_last_mod(ICalTimezonetype*, ICalTimetype*)' {i_cal_timezonetype_set_last_mod} + + [D] 'function ICalTriggerType* i_cal_trigger_type_from_int(const gint)' {i_cal_trigger_type_from_int} + + [D] 'function ICalTriggerType* i_cal_trigger_type_from_string(const gchar*)' {i_cal_trigger_type_from_string} + + [D] 'function ICalDurationType* i_cal_trigger_type_get_duration(ICalTriggerType*)' {i_cal_trigger_type_get_duration} + + [D] 'function ICalTimetype* i_cal_trigger_type_get_time(ICalTriggerType*)' {i_cal_trigger_type_get_time} + + [D] 'function GType i_cal_trigger_type_get_type()' {i_cal_trigger_type_get_type} + + [D] 'function gint i_cal_trigger_type_is_bad_trigger(ICalTriggerType*)' {i_cal_trigger_type_is_bad_trigger} + + [D] 'function gint i_cal_trigger_type_is_null_trigger(ICalTriggerType*)' {i_cal_trigger_type_is_null_trigger} + + [D] 'function void i_cal_trigger_type_set_duration(ICalTriggerType*, ICalDurationType*)' {i_cal_trigger_type_set_duration} + + [D] 'function void i_cal_trigger_type_set_time(ICalTriggerType*, ICalTimetype*)' {i_cal_trigger_type_set_time} + + [D] 'function gchar* i_cal_value_as_ical_string_r(const ICalValue*)' {i_cal_value_as_ical_string_r} + + [D] 'function ICalValue* i_cal_value_new_clone(const ICalValue*)' {i_cal_value_new_clone} + + [D] 'function ICalValueKind i_cal_value_string_to_kind(const gchar*)' {i_cal_value_string_to_kind} + + + +199 Added functions: + + + + [A] 'function ICalAttach* i_cal_attach_new_from_bytes(GBytes*)' {i_cal_attach_new_from_bytes} + + [A] 'function gchar* i_cal_component_as_ical_string(ICalComponent*)' {i_cal_component_as_ical_string} + + [A] 'function ICalComponent* i_cal_component_clone(ICalComponent*)' {i_cal_component_clone} + + [A] 'function void i_cal_component_foreach_recurrence(ICalComponent*, ICalTime*, ICalTime*, ICalComponentForeachRecurrenceFunc, gpointer)' {i_cal_component_foreach_recurrence} + + [A] 'function ICalComponent* i_cal_component_get_parent(ICalComponent*)' {i_cal_component_get_parent} + + [A] 'function ICalComponentKind i_cal_component_kind_from_string(const gchar*)' {i_cal_component_kind_from_string} + + [A] 'function void i_cal_component_set_parent(ICalComponent*, ICalComponent*)' {i_cal_component_set_parent} + + [A] 'function void i_cal_component_take_component(ICalComponent*, ICalComponent*)' {i_cal_component_take_component} + + [A] 'function void i_cal_component_take_property(ICalComponent*, ICalProperty*)' {i_cal_component_take_property} + + [A] 'function ICalPeriod* i_cal_datetimeperiod_get_period(ICalDatetimeperiod*)' {i_cal_datetimeperiod_get_period} + + [A] 'function ICalTime* i_cal_datetimeperiod_get_time(ICalDatetimeperiod*)' {i_cal_datetimeperiod_get_time} + + [A] 'function GType i_cal_datetimeperiod_get_type()' {i_cal_datetimeperiod_get_type} + + [A] 'function ICalDatetimeperiod* i_cal_datetimeperiod_new()' {i_cal_datetimeperiod_new} + + [A] 'function void i_cal_datetimeperiod_set_period(ICalDatetimeperiod*, ICalPeriod*)' {i_cal_datetimeperiod_set_period} + + [A] 'function void i_cal_datetimeperiod_set_time(ICalDatetimeperiod*, ICalTime*)' {i_cal_datetimeperiod_set_time} + + [A] 'function gchar* i_cal_duration_as_ical_string(ICalDuration*)' {i_cal_duration_as_ical_string} + + [A] 'function gint i_cal_duration_as_int(ICalDuration*)' {i_cal_duration_as_int} + + [A] 'function guint i_cal_duration_get_days(ICalDuration*)' {i_cal_duration_get_days} + + [A] 'function guint i_cal_duration_get_hours(ICalDuration*)' {i_cal_duration_get_hours} + + [A] 'function guint i_cal_duration_get_minutes(ICalDuration*)' {i_cal_duration_get_minutes} + + [A] 'function guint i_cal_duration_get_seconds(ICalDuration*)' {i_cal_duration_get_seconds} + + [A] 'function GType i_cal_duration_get_type()' {i_cal_duration_get_type} + + [A] 'function guint i_cal_duration_get_weeks(ICalDuration*)' {i_cal_duration_get_weeks} + + [A] 'function gboolean i_cal_duration_is_bad_duration(ICalDuration*)' {i_cal_duration_is_bad_duration} + + [A] 'function gboolean i_cal_duration_is_neg(ICalDuration*)' {i_cal_duration_is_neg} + + [A] 'function gboolean i_cal_duration_is_null_duration(ICalDuration*)' {i_cal_duration_is_null_duration} + + [A] 'function ICalDuration* i_cal_duration_new_bad_duration()' {i_cal_duration_new_bad_duration} + + [A] 'function ICalDuration* i_cal_duration_new_from_int(gint)' {i_cal_duration_new_from_int} + + [A] 'function ICalDuration* i_cal_duration_new_from_string(const gchar*)' {i_cal_duration_new_from_string} + + [A] 'function ICalDuration* i_cal_duration_new_null_duration()' {i_cal_duration_new_null_duration} + + [A] 'function void i_cal_duration_set_days(ICalDuration*, guint)' {i_cal_duration_set_days} + + [A] 'function void i_cal_duration_set_hours(ICalDuration*, guint)' {i_cal_duration_set_hours} + + [A] 'function void i_cal_duration_set_is_neg(ICalDuration*, gboolean)' {i_cal_duration_set_is_neg} + + [A] 'function void i_cal_duration_set_minutes(ICalDuration*, guint)' {i_cal_duration_set_minutes} + + [A] 'function void i_cal_duration_set_seconds(ICalDuration*, guint)' {i_cal_duration_set_seconds} + + [A] 'function void i_cal_duration_set_weeks(ICalDuration*, guint)' {i_cal_duration_set_weeks} + + [A] 'function ICalGeo* i_cal_geo_clone(const ICalGeo*)' {i_cal_geo_clone} + + [A] 'function gdouble i_cal_geo_get_lat(ICalGeo*)' {i_cal_geo_get_lat} + + [A] 'function gdouble i_cal_geo_get_lon(ICalGeo*)' {i_cal_geo_get_lon} + + [A] 'function GType i_cal_geo_get_type()' {i_cal_geo_get_type} + + [A] 'function ICalGeo* i_cal_geo_new(gdouble, gdouble)' {i_cal_geo_new} + + [A] 'function void i_cal_geo_set_lat(ICalGeo*, gdouble)' {i_cal_geo_set_lat} + + [A] 'function void i_cal_geo_set_lon(ICalGeo*, gdouble)' {i_cal_geo_set_lon} + + [A] 'function void i_cal_object_free_global_objects()' {i_cal_object_free_global_objects} + + [A] 'function gchar* i_cal_parameter_as_ical_string(ICalParameter*)' {i_cal_parameter_as_ical_string} + + [A] 'function ICalParameter* i_cal_parameter_clone(ICalParameter*)' {i_cal_parameter_clone} + + [A] 'function ICalParameterKind i_cal_parameter_kind_from_string(const gchar*)' {i_cal_parameter_kind_from_string} + + [A] 'function gchar* i_cal_period_as_ical_string(ICalPeriod*)' {i_cal_period_as_ical_string} + + [A] 'function ICalDuration* i_cal_period_get_duration(ICalPeriod*)' {i_cal_period_get_duration} + + [A] 'function ICalTime* i_cal_period_get_end(ICalPeriod*)' {i_cal_period_get_end} + + [A] 'function ICalTime* i_cal_period_get_start(ICalPeriod*)' {i_cal_period_get_start} + + [A] 'function GType i_cal_period_get_type()' {i_cal_period_get_type} + + [A] 'function gboolean i_cal_period_is_null_period(ICalPeriod*)' {i_cal_period_is_null_period} + + [A] 'function gboolean i_cal_period_is_valid_period(ICalPeriod*)' {i_cal_period_is_valid_period} + + [A] 'function ICalPeriod* i_cal_period_new_from_string(const gchar*)' {i_cal_period_new_from_string} + + [A] 'function ICalPeriod* i_cal_period_new_null_period()' {i_cal_period_new_null_period} + + [A] 'function void i_cal_period_set_duration(ICalPeriod*, ICalDuration*)' {i_cal_period_set_duration} + + [A] 'function void i_cal_period_set_end(ICalPeriod*, ICalTime*)' {i_cal_period_set_end} + + [A] 'function void i_cal_period_set_start(ICalPeriod*, ICalTime*)' {i_cal_period_set_start} + + [A] 'function gchar* i_cal_property_as_ical_string(ICalProperty*)' {i_cal_property_as_ical_string} + + [A] 'function ICalProperty* i_cal_property_clone(ICalProperty*)' {i_cal_property_clone} + + [A] 'function gchar* i_cal_property_enum_to_string(gint)' {i_cal_property_enum_to_string} + + [A] 'function const gchar* i_cal_property_get_color(ICalProperty*)' {i_cal_property_get_color} + + [A] 'function ICalTime* i_cal_property_get_datetime_with_component(ICalProperty*, ICalComponent*)' {i_cal_property_get_datetime_with_component} + + [A] 'function gchar* i_cal_property_get_parameter_as_string(ICalProperty*, const gchar*)' {i_cal_property_get_parameter_as_string} + + [A] 'function gchar* i_cal_property_get_property_name(const ICalProperty*)' {i_cal_property_get_property_name} + + [A] 'function gchar* i_cal_property_get_value_as_string(const ICalProperty*)' {i_cal_property_get_value_as_string} + + [A] 'function ICalPropertyKind i_cal_property_kind_from_string(const gchar*)' {i_cal_property_kind_from_string} + + [A] 'function gint i_cal_property_kind_has_property(ICalPropertyKind, gint)' {i_cal_property_kind_has_property} + + [A] 'function ICalPropertyMethod i_cal_property_method_from_string(const gchar*)' {i_cal_property_method_from_string} + + [A] 'function ICalProperty* i_cal_property_new_color(const gchar*)' {i_cal_property_new_color} + + [A] 'function void i_cal_property_set_color(ICalProperty*, const gchar*)' {i_cal_property_set_color} + + [A] 'function ICalPropertyStatus i_cal_property_status_from_string(const gchar*)' {i_cal_property_status_from_string} + + [A] 'function void i_cal_property_take_parameter(ICalProperty*, ICalParameter*)' {i_cal_property_take_parameter} + + [A] 'function void i_cal_property_take_value(ICalProperty*, ICalValue*)' {i_cal_property_take_value} + + [A] 'function void i_cal_recurrence_clear(ICalRecurrence*)' {i_cal_recurrence_clear} + + [A] 'function ICalRecurrenceWeekday i_cal_recurrence_day_day_of_week(gshort)' {i_cal_recurrence_day_day_of_week} + + [A] 'function gint i_cal_recurrence_day_position(gshort)' {i_cal_recurrence_day_position} + + [A] 'function ICalRecurrenceFrequency i_cal_recurrence_frequency_from_string(const gchar*)' {i_cal_recurrence_frequency_from_string} + + [A] 'function const gchar* i_cal_recurrence_frequency_to_string(ICalRecurrenceFrequency)' {i_cal_recurrence_frequency_to_string} + + [A] 'function gshort i_cal_recurrence_get_by_day(ICalRecurrence*, guint)' {i_cal_recurrence_get_by_day} + + [A] 'function GArray* i_cal_recurrence_get_by_day_array(ICalRecurrence*)' {i_cal_recurrence_get_by_day_array} + + [A] 'function gshort i_cal_recurrence_get_by_hour(ICalRecurrence*, guint)' {i_cal_recurrence_get_by_hour} + + [A] 'function GArray* i_cal_recurrence_get_by_hour_array(ICalRecurrence*)' {i_cal_recurrence_get_by_hour_array} + + [A] 'function gshort i_cal_recurrence_get_by_minute(ICalRecurrence*, guint)' {i_cal_recurrence_get_by_minute} + + [A] 'function GArray* i_cal_recurrence_get_by_minute_array(ICalRecurrence*)' {i_cal_recurrence_get_by_minute_array} + + [A] 'function gshort i_cal_recurrence_get_by_month(ICalRecurrence*, guint)' {i_cal_recurrence_get_by_month} + + [A] 'function GArray* i_cal_recurrence_get_by_month_array(ICalRecurrence*)' {i_cal_recurrence_get_by_month_array} + + [A] 'function gshort i_cal_recurrence_get_by_month_day(ICalRecurrence*, guint)' {i_cal_recurrence_get_by_month_day} + + [A] 'function GArray* i_cal_recurrence_get_by_month_day_array(ICalRecurrence*)' {i_cal_recurrence_get_by_month_day_array} + + [A] 'function gshort i_cal_recurrence_get_by_second(ICalRecurrence*, guint)' {i_cal_recurrence_get_by_second} + + [A] 'function GArray* i_cal_recurrence_get_by_second_array(ICalRecurrence*)' {i_cal_recurrence_get_by_second_array} + + [A] 'function gshort i_cal_recurrence_get_by_set_pos(ICalRecurrence*, guint)' {i_cal_recurrence_get_by_set_pos} + + [A] 'function GArray* i_cal_recurrence_get_by_set_pos_array(ICalRecurrence*)' {i_cal_recurrence_get_by_set_pos_array} + + [A] 'function gshort i_cal_recurrence_get_by_week_no(ICalRecurrence*, guint)' {i_cal_recurrence_get_by_week_no} + + [A] 'function GArray* i_cal_recurrence_get_by_week_no_array(ICalRecurrence*)' {i_cal_recurrence_get_by_week_no_array} + + [A] 'function gshort i_cal_recurrence_get_by_year_day(ICalRecurrence*, guint)' {i_cal_recurrence_get_by_year_day} + + [A] 'function GArray* i_cal_recurrence_get_by_year_day_array(ICalRecurrence*)' {i_cal_recurrence_get_by_year_day_array} + + [A] 'function gint i_cal_recurrence_get_count(ICalRecurrence*)' {i_cal_recurrence_get_count} + + [A] 'function ICalRecurrenceFrequency i_cal_recurrence_get_freq(ICalRecurrence*)' {i_cal_recurrence_get_freq} + + [A] 'function gshort i_cal_recurrence_get_interval(ICalRecurrence*)' {i_cal_recurrence_get_interval} + + [A] 'function GType i_cal_recurrence_get_type()' {i_cal_recurrence_get_type} + + [A] 'function ICalTime* i_cal_recurrence_get_until(ICalRecurrence*)' {i_cal_recurrence_get_until} + + [A] 'function ICalRecurrenceWeekday i_cal_recurrence_get_week_start(ICalRecurrence*)' {i_cal_recurrence_get_week_start} + + [A] 'function gboolean i_cal_recurrence_month_is_leap(gshort)' {i_cal_recurrence_month_is_leap} + + [A] 'function gint i_cal_recurrence_month_month(gshort)' {i_cal_recurrence_month_month} + + [A] 'function ICalRecurrence* i_cal_recurrence_new()' {i_cal_recurrence_new} + + [A] 'function ICalRecurrence* i_cal_recurrence_new_from_string(const gchar*)' {i_cal_recurrence_new_from_string} + + [A] 'function gboolean i_cal_recurrence_rscale_is_supported()' {i_cal_recurrence_rscale_is_supported} + + [A] 'function ICalArray* i_cal_recurrence_rscale_supported_calendars()' {i_cal_recurrence_rscale_supported_calendars} + + [A] 'function void i_cal_recurrence_set_by_day(ICalRecurrence*, guint, gshort)' {i_cal_recurrence_set_by_day} + + [A] 'function void i_cal_recurrence_set_by_day_array(ICalRecurrence*, GArray*)' {i_cal_recurrence_set_by_day_array} + + [A] 'function void i_cal_recurrence_set_by_hour(ICalRecurrence*, guint, gshort)' {i_cal_recurrence_set_by_hour} + + [A] 'function void i_cal_recurrence_set_by_hour_array(ICalRecurrence*, GArray*)' {i_cal_recurrence_set_by_hour_array} + + [A] 'function void i_cal_recurrence_set_by_minute(ICalRecurrence*, guint, gshort)' {i_cal_recurrence_set_by_minute} + + [A] 'function void i_cal_recurrence_set_by_minute_array(ICalRecurrence*, GArray*)' {i_cal_recurrence_set_by_minute_array} + + [A] 'function void i_cal_recurrence_set_by_month(ICalRecurrence*, guint, gshort)' {i_cal_recurrence_set_by_month} + + [A] 'function void i_cal_recurrence_set_by_month_array(ICalRecurrence*, GArray*)' {i_cal_recurrence_set_by_month_array} + + [A] 'function void i_cal_recurrence_set_by_month_day(ICalRecurrence*, guint, gshort)' {i_cal_recurrence_set_by_month_day} + + [A] 'function void i_cal_recurrence_set_by_month_day_array(ICalRecurrence*, GArray*)' {i_cal_recurrence_set_by_month_day_array} + + [A] 'function void i_cal_recurrence_set_by_second(ICalRecurrence*, guint, gshort)' {i_cal_recurrence_set_by_second} + + [A] 'function void i_cal_recurrence_set_by_second_array(ICalRecurrence*, GArray*)' {i_cal_recurrence_set_by_second_array} + + [A] 'function void i_cal_recurrence_set_by_set_pos(ICalRecurrence*, guint, gshort)' {i_cal_recurrence_set_by_set_pos} + + [A] 'function void i_cal_recurrence_set_by_set_pos_array(ICalRecurrence*, GArray*)' {i_cal_recurrence_set_by_set_pos_array} + + [A] 'function void i_cal_recurrence_set_by_week_no(ICalRecurrence*, guint, gshort)' {i_cal_recurrence_set_by_week_no} + + [A] 'function void i_cal_recurrence_set_by_week_no_array(ICalRecurrence*, GArray*)' {i_cal_recurrence_set_by_week_no_array} + + [A] 'function void i_cal_recurrence_set_by_year_day(ICalRecurrence*, guint, gshort)' {i_cal_recurrence_set_by_year_day} + + [A] 'function void i_cal_recurrence_set_by_year_day_array(ICalRecurrence*, GArray*)' {i_cal_recurrence_set_by_year_day_array} + + [A] 'function void i_cal_recurrence_set_count(ICalRecurrence*, gint)' {i_cal_recurrence_set_count} + + [A] 'function void i_cal_recurrence_set_freq(ICalRecurrence*, ICalRecurrenceFrequency)' {i_cal_recurrence_set_freq} + + [A] 'function void i_cal_recurrence_set_interval(ICalRecurrence*, gshort)' {i_cal_recurrence_set_interval} + + [A] 'function void i_cal_recurrence_set_until(ICalRecurrence*, ICalTime*)' {i_cal_recurrence_set_until} + + [A] 'function void i_cal_recurrence_set_week_start(ICalRecurrence*, ICalRecurrenceWeekday)' {i_cal_recurrence_set_week_start} + + [A] 'function ICalRecurrenceSkip i_cal_recurrence_skip_from_string(const gchar*)' {i_cal_recurrence_skip_from_string} + + [A] 'function const gchar* i_cal_recurrence_skip_to_string(ICalRecurrenceSkip)' {i_cal_recurrence_skip_to_string} + + [A] 'function gchar* i_cal_recurrence_to_string(ICalRecurrence*)' {i_cal_recurrence_to_string} + + [A] 'function ICalRecurrenceWeekday i_cal_recurrence_weekday_from_string(const gchar*)' {i_cal_recurrence_weekday_from_string} + + [A] 'function const gchar* i_cal_recurrence_weekday_to_string(ICalRecurrenceWeekday)' {i_cal_recurrence_weekday_to_string} + + [A] 'function ICalRequestStatus i_cal_reqstat_get_code(ICalReqstat*)' {i_cal_reqstat_get_code} + + [A] 'function const gchar* i_cal_reqstat_get_debug(const ICalReqstat*)' {i_cal_reqstat_get_debug} + + [A] 'function const gchar* i_cal_reqstat_get_desc(const ICalReqstat*)' {i_cal_reqstat_get_desc} + + [A] 'function GType i_cal_reqstat_get_type()' {i_cal_reqstat_get_type} + + [A] 'function ICalReqstat* i_cal_reqstat_new_from_string(const gchar*)' {i_cal_reqstat_new_from_string} + + [A] 'function void i_cal_reqstat_set_code(ICalReqstat*, ICalRequestStatus)' {i_cal_reqstat_set_code} + + [A] 'function gchar* i_cal_reqstat_to_string(ICalReqstat*)' {i_cal_reqstat_to_string} + + [A] 'function gchar* i_cal_request_status_code(ICalRequestStatus)' {i_cal_request_status_code} + + [A] 'function const gchar* i_cal_request_status_desc(ICalRequestStatus)' {i_cal_request_status_desc} + + [A] 'function ICalRequestStatus i_cal_request_status_from_num(gshort, gshort)' {i_cal_request_status_from_num} + + [A] 'function gshort i_cal_request_status_major(ICalRequestStatus)' {i_cal_request_status_major} + + [A] 'function gshort i_cal_request_status_minor(ICalRequestStatus)' {i_cal_request_status_minor} + + [A] 'function gchar* i_cal_time_as_ical_string(const ICalTime*)' {i_cal_time_as_ical_string} + + [A] 'function ICalTime* i_cal_time_clone(const ICalTime*)' {i_cal_time_clone} + + [A] 'function void i_cal_time_convert_timezone(ICalTime*, ICalTimezone*, ICalTimezone*)' {i_cal_time_convert_timezone} + + [A] 'function void i_cal_time_convert_to_zone_inplace(ICalTime*, ICalTimezone*)' {i_cal_time_convert_to_zone_inplace} + + [A] 'function void i_cal_time_get_date(const ICalTime*, gint*, gint*, gint*)' {i_cal_time_get_date} + + [A] 'function gint i_cal_time_get_day(const ICalTime*)' {i_cal_time_get_day} + + [A] 'function gint i_cal_time_get_hour(const ICalTime*)' {i_cal_time_get_hour} + + [A] 'function gint i_cal_time_get_minute(const ICalTime*)' {i_cal_time_get_minute} + + [A] 'function gint i_cal_time_get_month(const ICalTime*)' {i_cal_time_get_month} + + [A] 'function gint i_cal_time_get_second(const ICalTime*)' {i_cal_time_get_second} + + [A] 'function void i_cal_time_get_time(const ICalTime*, gint*, gint*, gint*)' {i_cal_time_get_time} + + [A] 'function GType i_cal_time_get_type()' {i_cal_time_get_type} + + [A] 'function gint i_cal_time_get_year(const ICalTime*)' {i_cal_time_get_year} + + [A] 'function gboolean i_cal_time_is_daylight(const ICalTime*)' {i_cal_time_is_daylight} + + [A] 'function ICalTime* i_cal_time_new()' {i_cal_time_new} + + [A] 'function ICalTime* i_cal_time_new_current_with_zone(ICalTimezone*)' {i_cal_time_new_current_with_zone} + + [A] 'function ICalTime* i_cal_time_new_from_day_of_year(const gint, const gint)' {i_cal_time_new_from_day_of_year} + + [A] 'function ICalTime* i_cal_time_new_from_string(const gchar*)' {i_cal_time_new_from_string} + + [A] 'function ICalTime* i_cal_time_new_from_timet_with_zone(const time_t, gint, ICalTimezone*)' {i_cal_time_new_from_timet_with_zone} + + [A] 'function ICalTime* i_cal_time_new_null_date()' {i_cal_time_new_null_date} + + [A] 'function ICalTime* i_cal_time_new_today()' {i_cal_time_new_today} + + [A] 'function void i_cal_time_normalize_inplace(ICalTime*)' {i_cal_time_normalize_inplace} + + [A] 'function void i_cal_time_set_date(ICalTime*, gint, gint, gint)' {i_cal_time_set_date} + + [A] 'function void i_cal_time_set_day(ICalTime*, gint)' {i_cal_time_set_day} + + [A] 'function void i_cal_time_set_hour(ICalTime*, gint)' {i_cal_time_set_hour} + + [A] 'function void i_cal_time_set_is_date(ICalTime*, gboolean)' {i_cal_time_set_is_date} + + [A] 'function void i_cal_time_set_is_daylight(ICalTime*, gboolean)' {i_cal_time_set_is_daylight} + + [A] 'function void i_cal_time_set_minute(ICalTime*, gint)' {i_cal_time_set_minute} + + [A] 'function void i_cal_time_set_month(ICalTime*, gint)' {i_cal_time_set_month} + + [A] 'function void i_cal_time_set_second(ICalTime*, gint)' {i_cal_time_set_second} + + [A] 'function void i_cal_time_set_time(ICalTime*, gint, gint, gint)' {i_cal_time_set_time} + + [A] 'function void i_cal_time_set_year(ICalTime*, gint)' {i_cal_time_set_year} + + [A] 'function ICalTimeSpan* i_cal_time_span_clone(const ICalTimeSpan*)' {i_cal_time_span_clone} + + [A] 'function gboolean i_cal_time_span_get_is_busy(ICalTimeSpan*)' {i_cal_time_span_get_is_busy} + + [A] 'function ICalTimeSpan* i_cal_time_span_new_timet(time_t, time_t, gboolean)' {i_cal_time_span_new_timet} + + [A] 'function void i_cal_time_timezone_expand_vtimezone(ICalComponent*, gint, ICalArray*)' {i_cal_time_timezone_expand_vtimezone} + + [A] 'function ICalDuration* i_cal_trigger_get_duration(ICalTrigger*)' {i_cal_trigger_get_duration} + + [A] 'function ICalTime* i_cal_trigger_get_time(ICalTrigger*)' {i_cal_trigger_get_time} + + [A] 'function GType i_cal_trigger_get_type()' {i_cal_trigger_get_type} + + [A] 'function gboolean i_cal_trigger_is_bad_trigger(ICalTrigger*)' {i_cal_trigger_is_bad_trigger} + + [A] 'function gboolean i_cal_trigger_is_null_trigger(ICalTrigger*)' {i_cal_trigger_is_null_trigger} + + [A] 'function ICalTrigger* i_cal_trigger_new_from_int(const gint)' {i_cal_trigger_new_from_int} + + [A] 'function ICalTrigger* i_cal_trigger_new_from_string(const gchar*)' {i_cal_trigger_new_from_string} + + [A] 'function void i_cal_trigger_set_duration(ICalTrigger*, ICalDuration*)' {i_cal_trigger_set_duration} + + [A] 'function void i_cal_trigger_set_time(ICalTrigger*, ICalTime*)' {i_cal_trigger_set_time} + + [A] 'function gchar* i_cal_value_as_ical_string(const ICalValue*)' {i_cal_value_as_ical_string} + + [A] 'function ICalValue* i_cal_value_clone(const ICalValue*)' {i_cal_value_clone} + + [A] 'function ICalValueKind i_cal_value_kind_from_string(const gchar*)' {i_cal_value_kind_from_string} + + [A] 'function ICalPropertyKind i_cal_value_kind_to_property_kind(ICalValueKind)' {i_cal_value_kind_to_property_kind} + + + +137 functions with some indirect sub-type change: + + + + [C]'function guchar* i_cal_attach_get_data(ICalAttach*)' at i-cal-attach.c:224:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'typedef guchar': + + entity changed from 'typedef guchar' to 'const gchar' + + type size hasn't changed + + + + [C]'function ICalTimetype* i_cal_component_get_dtend(ICalComponent*)' at i-cal-component.c:1065:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'typedef ICalTimetype' at i-cal-forward-declarations.h:44:1: + + typedef name changed from ICalTimetype to ICalTime at i-cal-forward-declarations.h:44:1 + + underlying type 'struct _ICalTimetype' at i-cal-timetype.h:63:1 changed: + + type name changed from '_ICalTimetype' to '_ICalTime' + + type size hasn't changed + + + + no data member change (1 filtered); + + + + [C]'function ICalTimetype* i_cal_component_get_dtstamp(ICalComponent*)' at i-cal-component.c:1220:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_component_get_dtstart(ICalComponent*)' at i-cal-component.c:1026:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_component_get_due(ICalComponent*)' at i-cal-component.c:1104:1 has some indirect sub-type changes: + + + + [C]'function ICalDurationType* i_cal_component_get_duration(ICalComponent*)' at i-cal-component.c:1143:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'typedef ICalDurationType' at i-cal-forward-declarations.h:35:1: + + typedef name changed from ICalDurationType to ICalDuration at i-cal-forward-declarations.h:35:1 + + underlying type 'struct _ICalDurationType' at i-cal-duration-type.h:63:1 changed: + + type name changed from '_ICalDurationType' to '_ICalDuration' + + type size hasn't changed + + + + no data member change (1 filtered); + + + + [C]'function ICalTimetype* i_cal_component_get_recurrenceid(ICalComponent*)' at i-cal-component.c:1415:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_component_set_dtend(ICalComponent*, ICalTimetype*)' at i-cal-component.c:1044:1 has some indirect sub-type changes: + + parameter 2 of type 'ICalTimetype*' changed: + + pointed to type 'typedef ICalTimetype' changed at i-cal-forward-declarations.h:45:1, as reported earlier + + + + [C]'function void i_cal_component_set_dtstamp(ICalComponent*, ICalTimetype*)' at i-cal-component.c:1199:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_component_set_dtstart(ICalComponent*, ICalTimetype*)' at i-cal-component.c:1005:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_component_set_due(ICalComponent*, ICalTimetype*)' at i-cal-component.c:1083:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_component_set_duration(ICalComponent*, ICalDurationType*)' at i-cal-component.c:1122:1 has some indirect sub-type changes: + + parameter 2 of type 'ICalDurationType*' changed: + + pointed to type 'typedef ICalDurationType' changed at i-cal-forward-declarations.h:35:1, as reported earlier + + + + [C]'function void i_cal_component_set_recurrenceid(ICalComponent*, ICalTimetype*)' at i-cal-component.c:1394:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_object_construct(ICalObject*, gpointer, GDestroyNotify, gboolean, GObject*)' at i-cal-object.c:320:1 has some indirect sub-type changes: + + return type changed: + + entity changed from 'void' to 'typedef gpointer' at gtypes.h:103:1 + + type size changed from 0 to 64 (in bits) + + parameter 1 of type 'ICalObject*' changed: + + entity changed from 'ICalObject*' to 'typedef GType' at gtype.h:384:1 + + type size hasn't changed + + + + [C]'function gchar* i_cal_parser_get_line(ICalParser*, gchar* (gchar*, typedef size_t, void*)*)' at i-cal-parser.c:220:1 has some indirect sub-type changes: + + parameter 2 of type 'gchar* (gchar*, typedef size_t, void*)*' changed: + + entity changed from 'gchar* (gchar*, typedef size_t, void*)*' to compatible type 'typedef ICalParserLineGenFunc' at i-cal-parser.h:80:1 + + parameter 3 of type 'typedef gpointer' was added + + + + + + [C]'function ICalComponent* i_cal_parser_parse(ICalParser*, gchar* (gchar*, typedef size_t, void*)*)' at i-cal-parser.c:177:1 has some indirect sub-type changes: + + parameter 3 of type 'typedef gpointer' was added + + + + + + [C]'function ICalTimetype* i_cal_property_get_acknowledged(ICalProperty*)' at i-cal-derived-property.c:146:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_property_get_completed(ICalProperty*)' at i-cal-derived-property.c:1118:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_property_get_created(ICalProperty*)' at i-cal-derived-property.c:1292:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_property_get_datemax(ICalProperty*)' at i-cal-derived-property.c:1408:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_property_get_datemin(ICalProperty*)' at i-cal-derived-property.c:1466:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_property_get_dtend(ICalProperty*)' at i-cal-derived-property.c:1930:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_property_get_dtstamp(ICalProperty*)' at i-cal-derived-property.c:1988:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_property_get_dtstart(ICalProperty*)' at i-cal-derived-property.c:2046:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_property_get_due(ICalProperty*)' at i-cal-derived-property.c:2104:1 has some indirect sub-type changes: + + + + [C]'function ICalDurationType* i_cal_property_get_duration(ICalProperty*)' at i-cal-derived-property.c:2162:1 has some indirect sub-type changes: + + + + [C]'function ICalDurationType* i_cal_property_get_estimatedduration(ICalProperty*)' at i-cal-derived-property.c:2220:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_property_get_exdate(ICalProperty*)' at i-cal-derived-property.c:2278:1 has some indirect sub-type changes: + + + + [C]'function ICalRecurrenceType* i_cal_property_get_exrule(ICalProperty*)' at i-cal-derived-property.c:2391:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'typedef ICalRecurrenceType' at i-cal-forward-declarations.h:42:1: + + typedef name changed from ICalRecurrenceType to ICalRecurrence at i-cal-forward-declarations.h:42:1 + + underlying type 'struct _ICalRecurrenceType' at i-cal-recurrence-type.h:63:1 changed: + + type name changed from '_ICalRecurrenceType' to '_ICalRecurrence' + + type size hasn't changed + + + + no data member change (1 filtered); + + + + [C]'function ICalPeriodType* i_cal_property_get_freebusy(ICalProperty*)' at i-cal-derived-property.c:2449:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'typedef ICalPeriodType' at i-cal-forward-declarations.h:39:1: + + typedef name changed from ICalPeriodType to ICalPeriod at i-cal-forward-declarations.h:39:1 + + underlying type 'struct _ICalPeriodType' at i-cal-period-type.h:63:1 changed: + + type name changed from '_ICalPeriodType' to '_ICalPeriod' + + type size hasn't changed + + + + no data member change (1 filtered); + + + + [C]'function ICalGeoType* i_cal_property_get_geo(ICalProperty*)' at i-cal-derived-property.c:2507:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'typedef ICalGeoType' at i-cal-forward-declarations.h:36:1: + + typedef name changed from ICalGeoType to ICalGeo at i-cal-forward-declarations.h:36:1 + + underlying type 'struct _ICalGeoType' at i-cal-geo-type.h:63:1 changed: + + type name changed from '_ICalGeoType' to '_ICalGeo' + + type size hasn't changed + + + + no data member change (1 filtered); + + + + [C]'function ICalTimetype* i_cal_property_get_lastmodified(ICalProperty*)' at i-cal-derived-property.c:2681:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_property_get_maxdate(ICalProperty*)' at i-cal-derived-property.c:2852:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_property_get_mindate(ICalProperty*)' at i-cal-derived-property.c:3075:1 has some indirect sub-type changes: + + + + [C]'function ICalDatetimeperiodType* i_cal_property_get_rdate(ICalProperty*)' at i-cal-derived-property.c:4098:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'typedef ICalDatetimeperiodType' at i-cal-forward-declarations.h:34:1: + + typedef name changed from ICalDatetimeperiodType to ICalDatetimeperiod at i-cal-forward-declarations.h:34:1 + + underlying type 'struct _ICalDatetimeperiodType' at i-cal-datetimeperiod-type.h:65:1 changed: + + type name changed from '_ICalDatetimeperiodType' to '_ICalDatetimeperiod' + + type size hasn't changed + + + + no data member change (1 filtered); + + + + [C]'function ICalTimetype* i_cal_property_get_recurrenceid(ICalProperty*)' at i-cal-derived-property.c:4330:1 has some indirect sub-type changes: + + + + [C]'function ICalReqstatType* i_cal_property_get_requeststatus(ICalProperty*)' at i-cal-derived-property.c:4617:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'typedef ICalReqstatType' at i-cal-forward-declarations.h:43:1: + + typedef name changed from ICalReqstatType to ICalReqstat at i-cal-forward-declarations.h:43:1 + + underlying type 'struct _ICalReqstatType' at i-cal-reqstat-type.h:64:1 changed: + + type name changed from '_ICalReqstatType' to '_ICalReqstat' + + type size hasn't changed + + + + no data member change (1 filtered); + + + + [C]'function ICalRecurrenceType* i_cal_property_get_rrule(ICalProperty*)' at i-cal-derived-property.c:4846:1 has some indirect sub-type changes: + + + + [C]'function ICalTriggerType* i_cal_property_get_trigger(ICalProperty*)' at i-cal-derived-property.c:5356:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'typedef ICalTriggerType' at i-cal-forward-declarations.h:47:1: + + typedef name changed from ICalTriggerType to ICalTrigger at i-cal-forward-declarations.h:47:1 + + underlying type 'struct _ICalTriggerType' at i-cal-trigger-type.h:63:1 changed: + + type name changed from '_ICalTriggerType' to '_ICalTrigger' + + type size hasn't changed + + + + no data member change (1 filtered); + + + + [C]'function ICalTimetype* i_cal_property_get_tzuntil(ICalProperty*)' at i-cal-derived-property.c:5698:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_acknowledged(ICalTimetype*)' at i-cal-derived-property.c:107:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalTimetype*' changed: + + pointed to type 'typedef ICalTimetype' changed at i-cal-forward-declarations.h:45:1, as reported earlier + + + + [C]'function ICalProperty* i_cal_property_new_completed(ICalTimetype*)' at i-cal-derived-property.c:1079:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_created(ICalTimetype*)' at i-cal-derived-property.c:1253:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_datemax(ICalTimetype*)' at i-cal-derived-property.c:1369:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_datemin(ICalTimetype*)' at i-cal-derived-property.c:1427:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_dtend(ICalTimetype*)' at i-cal-derived-property.c:1891:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_dtstamp(ICalTimetype*)' at i-cal-derived-property.c:1949:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_dtstart(ICalTimetype*)' at i-cal-derived-property.c:2007:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_due(ICalTimetype*)' at i-cal-derived-property.c:2065:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_duration(ICalDurationType*)' at i-cal-derived-property.c:2123:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalDurationType*' changed: + + pointed to type 'typedef ICalDurationType' changed at i-cal-forward-declarations.h:35:1, as reported earlier + + + + [C]'function ICalProperty* i_cal_property_new_estimatedduration(ICalDurationType*)' at i-cal-derived-property.c:2181:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_exdate(ICalTimetype*)' at i-cal-derived-property.c:2239:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_exrule(ICalRecurrenceType*)' at i-cal-derived-property.c:2352:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalRecurrenceType*' changed: + + pointed to type 'typedef ICalRecurrenceType' changed at i-cal-forward-declarations.h:42:1, as reported earlier + + + + [C]'function ICalProperty* i_cal_property_new_freebusy(ICalPeriodType*)' at i-cal-derived-property.c:2410:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalPeriodType*' changed: + + pointed to type 'typedef ICalPeriodType' changed at i-cal-forward-declarations.h:39:1, as reported earlier + + + + [C]'function ICalProperty* i_cal_property_new_geo(ICalGeoType*)' at i-cal-derived-property.c:2468:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalGeoType*' changed: + + pointed to type 'typedef ICalGeoType' changed at i-cal-forward-declarations.h:36:1, as reported earlier + + + + [C]'function ICalProperty* i_cal_property_new_lastmodified(ICalTimetype*)' at i-cal-derived-property.c:2642:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_maxdate(ICalTimetype*)' at i-cal-derived-property.c:2813:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_mindate(ICalTimetype*)' at i-cal-derived-property.c:3036:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_rdate(ICalDatetimeperiodType*)' at i-cal-derived-property.c:4059:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalDatetimeperiodType*' changed: + + pointed to type 'typedef ICalDatetimeperiodType' changed at i-cal-forward-declarations.h:34:1, as reported earlier + + + + [C]'function ICalProperty* i_cal_property_new_recurrenceid(ICalTimetype*)' at i-cal-derived-property.c:4291:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_requeststatus(ICalReqstatType*)' at i-cal-derived-property.c:4578:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalReqstatType*' changed: + + pointed to type 'typedef ICalReqstatType' changed at i-cal-forward-declarations.h:43:1, as reported earlier + + + + [C]'function ICalProperty* i_cal_property_new_rrule(ICalRecurrenceType*)' at i-cal-derived-property.c:4807:1 has some indirect sub-type changes: + + + + [C]'function ICalProperty* i_cal_property_new_trigger(ICalTriggerType*)' at i-cal-derived-property.c:5317:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalTriggerType*' changed: + + pointed to type 'typedef ICalTriggerType' changed at i-cal-forward-declarations.h:49:1, as reported earlier + + + + [C]'function ICalProperty* i_cal_property_new_tzuntil(ICalTimetype*)' at i-cal-derived-property.c:5659:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_acknowledged(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:125:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_completed(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:1097:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_created(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:1271:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_datemax(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:1387:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_datemin(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:1445:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_dtend(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:1909:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_dtstamp(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:1967:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_dtstart(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:2025:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_due(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:2083:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_duration(ICalProperty*, ICalDurationType*)' at i-cal-derived-property.c:2141:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_estimatedduration(ICalProperty*, ICalDurationType*)' at i-cal-derived-property.c:2199:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_exdate(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:2257:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_exrule(ICalProperty*, ICalRecurrenceType*)' at i-cal-derived-property.c:2370:1 has some indirect sub-type changes: + + parameter 2 of type 'ICalRecurrenceType*' changed: + + pointed to type 'typedef ICalRecurrenceType' changed at i-cal-forward-declarations.h:42:1, as reported earlier + + + + [C]'function void i_cal_property_set_freebusy(ICalProperty*, ICalPeriodType*)' at i-cal-derived-property.c:2428:1 has some indirect sub-type changes: + + parameter 2 of type 'ICalPeriodType*' changed: + + pointed to type 'typedef ICalPeriodType' changed at i-cal-forward-declarations.h:39:1, as reported earlier + + + + [C]'function void i_cal_property_set_geo(ICalProperty*, ICalGeoType*)' at i-cal-derived-property.c:2486:1 has some indirect sub-type changes: + + parameter 2 of type 'ICalGeoType*' changed: + + pointed to type 'typedef ICalGeoType' changed at i-cal-forward-declarations.h:36:1, as reported earlier + + + + [C]'function void i_cal_property_set_lastmodified(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:2660:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_maxdate(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:2831:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_mindate(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:3054:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_rdate(ICalProperty*, ICalDatetimeperiodType*)' at i-cal-derived-property.c:4077:1 has some indirect sub-type changes: + + parameter 2 of type 'ICalDatetimeperiodType*' changed: + + pointed to type 'typedef ICalDatetimeperiodType' changed at i-cal-forward-declarations.h:34:1, as reported earlier + + + + [C]'function void i_cal_property_set_recurrenceid(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:4309:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_requeststatus(ICalProperty*, ICalReqstatType*)' at i-cal-derived-property.c:4596:1 has some indirect sub-type changes: + + parameter 2 of type 'ICalReqstatType*' changed: + + pointed to type 'typedef ICalReqstatType' changed at i-cal-forward-declarations.h:43:1, as reported earlier + + + + [C]'function void i_cal_property_set_rrule(ICalProperty*, ICalRecurrenceType*)' at i-cal-derived-property.c:4825:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_property_set_trigger(ICalProperty*, ICalTriggerType*)' at i-cal-derived-property.c:5335:1 has some indirect sub-type changes: + + parameter 2 of type 'ICalTriggerType*' changed: + + pointed to type 'typedef ICalTriggerType' changed at i-cal-forward-declarations.h:49:1, as reported earlier + + + + [C]'function void i_cal_property_set_tzuntil(ICalProperty*, ICalTimetype*)' at i-cal-derived-property.c:5677:1 has some indirect sub-type changes: + + + + [C]'function ICalRecurIterator* i_cal_recur_iterator_new(ICalRecurrenceType*, ICalTimetype*)' at i-cal-recur-iterator.c:81:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_recur_iterator_next(ICalRecurIterator*)' at i-cal-recur-iterator.c:102:1 has some indirect sub-type changes: + + + + [C]'function gint i_cal_recur_iterator_set_start(ICalRecurIterator*, ICalTimetype*)' at i-cal-recur-iterator.c:124:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_time_add(ICalTimetype*, ICalDurationType*)' at i-cal-time.c:831:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_time_adjust(ICalTimetype*, const gint, const gint, const gint, const gint)' at i-cal-time.c:596:1 has some indirect sub-type changes: + + + + [C]'function time_t i_cal_time_as_timet(ICalTimetype*)' at i-cal-time.c:250:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalTimetype*' changed: + + in pointed to type 'typedef ICalTimetype': + + entity changed from 'typedef ICalTimetype' to 'const ICalTime' + + type size hasn't changed + + + + [C]'function gint i_cal_time_compare(ICalTimetype*, ICalTimetype*)' at i-cal-time.c:525:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalTimetype*' changed: + + in pointed to type 'typedef ICalTimetype': + + entity changed from 'typedef ICalTimetype' to 'const ICalTime' + + type size hasn't changed + + parameter 2 of type 'ICalTimetype*' changed: + + in pointed to type 'typedef ICalTimetype': + + entity changed from 'typedef ICalTimetype' to 'const ICalTime' + + type size hasn't changed + + + + [C]'function gint i_cal_time_compare_date_only(ICalTimetype*, ICalTimetype*)' at i-cal-time.c:547:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalTimetype*' changed: + + in pointed to type 'typedef ICalTimetype': + + entity changed from 'typedef ICalTimetype' to 'const ICalTime' + + type size hasn't changed + + parameter 2 of type 'ICalTimetype*' changed: + + in pointed to type 'typedef ICalTimetype': + + entity changed from 'typedef ICalTimetype' to 'const ICalTime' + + type size hasn't changed + + + + [C]'function gint i_cal_time_compare_date_only_tz(ICalTimetype*, ICalTimetype*, ICalTimezone*)' at i-cal-time.c:570:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalTimetype*' changed: + + in pointed to type 'typedef ICalTimetype': + + entity changed from 'typedef ICalTimetype' to 'const ICalTime' + + type size hasn't changed + + parameter 2 of type 'ICalTimetype*' changed: + + in pointed to type 'typedef ICalTimetype': + + entity changed from 'typedef ICalTimetype' to 'const ICalTime' + + type size hasn't changed + + + + [C]'function ICalTimetype* i_cal_time_convert_to_zone(ICalTimetype*, ICalTimezone*)' at i-cal-time.c:661:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalTimetype*' changed: + + in pointed to type 'typedef ICalTimetype': + + entity changed from 'typedef ICalTimetype' to 'const ICalTime' + + type size hasn't changed + + + + [C]'function gint i_cal_time_day_of_week(ICalTimetype*)' at i-cal-time.c:389:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalTimetype*' changed: + + in pointed to type 'typedef ICalTimetype': + + entity changed from 'typedef ICalTimetype' to 'const ICalTime' + + type size hasn't changed + + + + [C]'function gint i_cal_time_day_of_year(ICalTimetype*)' at i-cal-time.c:370:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalTimetype*' changed: + + in pointed to type 'typedef ICalTimetype': + + entity changed from 'typedef ICalTimetype' to 'const ICalTime' + + type size hasn't changed + + + + [C]'function ICalTimetype* i_cal_time_normalize(ICalTimetype*)' at i-cal-time.c:619:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalTimetype*' changed: + + in pointed to type 'typedef ICalTimetype': + + entity changed from 'typedef ICalTimetype' to 'const ICalTime' + + type size hasn't changed + + + + [C]'function ICalTimeSpan* i_cal_time_span_new(ICalTimetype*, ICalTimetype*, gint)' at i-cal-time.c:764:1 has some indirect sub-type changes: + + + + [C]'function gint i_cal_time_start_doy_week(ICalTimetype*, gint)' at i-cal-time.c:409:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalTimetype*' changed: + + in pointed to type 'typedef ICalTimetype': + + entity changed from 'typedef ICalTimetype' to 'const ICalTime' + + type size hasn't changed + + + + [C]'function ICalDurationType* i_cal_time_subtract(ICalTimetype*, ICalTimetype*)' at i-cal-time.c:853:1 has some indirect sub-type changes: + + + + [C]'function gint i_cal_time_week_number(ICalTimetype*)' at i-cal-time.c:429:1 has some indirect sub-type changes: + + parameter 1 of type 'ICalTimetype*' changed: + + in pointed to type 'typedef ICalTimetype': + + entity changed from 'typedef ICalTimetype' to 'const ICalTime' + + type size hasn't changed + + + + [C]'function void i_cal_timezone_get_utc_offset(ICalTimezone*, ICalTimetype*, gint*)' at i-cal-timezone.c:469:1 has some indirect sub-type changes: + + return type changed: + + entity changed from 'void' to compatible type 'typedef gint' at gtypes.h:49:1 + + type name changed from 'void' to 'int' + + type size changed from 0 to 32 (in bits) + + + + [C]'function void i_cal_timezone_get_utc_offset_of_utc_time(ICalTimezone*, ICalTimetype*, gint*)' at i-cal-timezone.c:497:1 has some indirect sub-type changes: + + return type changed: + + entity changed from 'void' to compatible type 'typedef gint' at gtypes.h:49:1 + + type name changed from 'void' to 'int' + + type size changed from 0 to 32 (in bits) + + + + [C]'function ICalTimetype* i_cal_value_get_date(ICalValue*)' at i-cal-derived-value.c:1806:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_value_get_datetime(ICalValue*)' at i-cal-derived-value.c:261:1 has some indirect sub-type changes: + + + + [C]'function ICalTimetype* i_cal_value_get_datetimedate(ICalValue*)' at i-cal-derived-value.c:319:1 has some indirect sub-type changes: + + + + [C]'function ICalDatetimeperiodType* i_cal_value_get_datetimeperiod(ICalValue*)' at i-cal-derived-value.c:377:1 has some indirect sub-type changes: + + + + [C]'function ICalDurationType* i_cal_value_get_duration(ICalValue*)' at i-cal-derived-value.c:1296:1 has some indirect sub-type changes: + + + + [C]'function ICalGeoType* i_cal_value_get_geo(ICalValue*)' at i-cal-derived-value.c:435:1 has some indirect sub-type changes: + + + + [C]'function ICalPeriodType* i_cal_value_get_period(ICalValue*)' at i-cal-derived-value.c:1067:1 has some indirect sub-type changes: + + + + [C]'function ICalRecurrenceType* i_cal_value_get_recur(ICalValue*)' at i-cal-derived-value.c:145:1 has some indirect sub-type changes: + + + + [C]'function ICalReqstatType* i_cal_value_get_requeststatus(ICalValue*)' at i-cal-derived-value.c:1748:1 has some indirect sub-type changes: + + + + [C]'function ICalTriggerType* i_cal_value_get_trigger(ICalValue*)' at i-cal-derived-value.c:203:1 has some indirect sub-type changes: + + + + [C]'function ICalValue* i_cal_value_new_date(ICalTimetype*)' at i-cal-derived-value.c:1787:1 has some indirect sub-type changes: + + + + [C]'function ICalValue* i_cal_value_new_datetime(ICalTimetype*)' at i-cal-derived-value.c:242:1 has some indirect sub-type changes: + + + + [C]'function ICalValue* i_cal_value_new_datetimedate(ICalTimetype*)' at i-cal-derived-value.c:300:1 has some indirect sub-type changes: + + + + [C]'function ICalValue* i_cal_value_new_datetimeperiod(ICalDatetimeperiodType*)' at i-cal-derived-value.c:358:1 has some indirect sub-type changes: + + + + [C]'function ICalValue* i_cal_value_new_duration(ICalDurationType*)' at i-cal-derived-value.c:1277:1 has some indirect sub-type changes: + + + + [C]'function ICalValue* i_cal_value_new_geo(ICalGeoType*)' at i-cal-derived-value.c:416:1 has some indirect sub-type changes: + + + + [C]'function ICalValue* i_cal_value_new_period(ICalPeriodType*)' at i-cal-derived-value.c:1048:1 has some indirect sub-type changes: + + + + [C]'function ICalValue* i_cal_value_new_recur(ICalRecurrenceType*)' at i-cal-derived-value.c:126:1 has some indirect sub-type changes: + + + + [C]'function ICalValue* i_cal_value_new_requeststatus(ICalReqstatType*)' at i-cal-derived-value.c:1729:1 has some indirect sub-type changes: + + + + [C]'function ICalValue* i_cal_value_new_trigger(ICalTriggerType*)' at i-cal-derived-value.c:184:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_value_set_date(ICalValue*, ICalTimetype*)' at i-cal-derived-value.c:1766:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_value_set_datetime(ICalValue*, ICalTimetype*)' at i-cal-derived-value.c:221:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_value_set_datetimedate(ICalValue*, ICalTimetype*)' at i-cal-derived-value.c:279:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_value_set_datetimeperiod(ICalValue*, ICalDatetimeperiodType*)' at i-cal-derived-value.c:337:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_value_set_duration(ICalValue*, ICalDurationType*)' at i-cal-derived-value.c:1256:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_value_set_geo(ICalValue*, ICalGeoType*)' at i-cal-derived-value.c:395:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_value_set_period(ICalValue*, ICalPeriodType*)' at i-cal-derived-value.c:1027:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_value_set_recur(ICalValue*, ICalRecurrenceType*)' at i-cal-derived-value.c:105:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_value_set_requeststatus(ICalValue*, ICalReqstatType*)' at i-cal-derived-value.c:1708:1 has some indirect sub-type changes: + + + + [C]'function void i_cal_value_set_trigger(ICalValue*, ICalTriggerType*)' at i-cal-derived-value.c:163:1 has some indirect sub-type changes: + + + + + +1 Added function symbol not referenced by debug info: + + + + i_cal_time_new_null_time + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libid3tag_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libid3tag_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..c3d7f2bf82f0e06a4b343532a11e935594f0d23f --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libid3tag_all_result.md @@ -0,0 +1,38 @@ +# Functions changed info + +---------------diffs in libid3tag_libid3tag.so.0.3.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed, 2 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +2 Added functions: + + + + 'function int id3_compat_fixup(id3_tag*)' {id3_compat_fixup} + + 'function const id3_compat* id3_compat_lookup(const char*, size_t)' {id3_compat_lookup} + + + +1 function with some indirect sub-type change: + + + + [C]'function const id3_frametype* id3_frametype_lookup(const char*, unsigned int)' at frametype.gperf:327:1 has some indirect sub-type changes: + + parameter 2 of type 'unsigned int' changed: + + entity changed from 'unsigned int' to compatible type 'typedef size_t' at stddef.h:216:1 + + type name changed from 'unsigned int' to 'unsigned long int' + + type size changed from 32 to 64 (in bits) + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libiscsi_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libiscsi_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..81b25ce2de73fcc394f3c6ed7ca9d58d319a0854 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libiscsi_all_result.md @@ -0,0 +1,132 @@ +# Functions changed info + +---------------diffs in libiscsi_libiscsi.so.9.0.0_abidiff.out:---------------- + +ELF SONAME changed + +Functions changes summary: 0 Removed, 1 Changed (196 filtered out), 4 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +SONAME changed from 'libiscsi.so.8' to 'libiscsi.so.9' + + + +4 Added functions: + + + + 'function scsi_task* iscsi_extended_copy_sync(iscsi_context*, int, iscsi_data*)' {iscsi_extended_copy_sync} + + 'function scsi_task* iscsi_extended_copy_task(iscsi_context*, int, iscsi_data*, iscsi_command_cb, void*)' {iscsi_extended_copy_task} + + 'function scsi_task* iscsi_receive_copy_results_sync(iscsi_context*, int, int, int, int)' {iscsi_receive_copy_results_sync} + + 'function scsi_task* iscsi_receive_copy_results_task(iscsi_context*, int, int, int, int, iscsi_command_cb, void*)' {iscsi_receive_copy_results_task} + + + +1 function with some indirect sub-type change: + + + + [C]'function scsi_task* iscsi_compareandwrite_iov_sync(iscsi_context*, int, uint64_t, unsigned char*, uint32_t, int, int, int, int, int, int, scsi_iovec*, int)' at sync.c:1164:1 has some indirect sub-type changes: + + parameter 1 of type 'iscsi_context*' has sub-type changes: + + in pointed to type 'struct iscsi_context' at iscsi-private.h:68:1: + + type size changed from 51968 to 51904 (in bits) + + 1 data member deletion: + + 'iscsi_in_pdu* iscsi_context::inqueue', at offset 42624 (in bits) at iscsi-private.h:145:1 + + + + 1 data member insertion: + + 'int iscsi_context::tcp_nonblocking', at offset 41920 (in bits) at iscsi-private.h:112:1 + + 37 data member changes (5 filtered): + + 'int iscsi_context::current_phase' offset changed from 41920 to 41952 (in bits) (by +32 bits) + + 'int iscsi_context::next_phase' offset changed from 41952 to 41984 (in bits) (by +32 bits) + + 'int iscsi_context::secneg_phase' offset changed from 41984 to 42016 (in bits) (by +32 bits) + + 'int iscsi_context::login_attempts' offset changed from 42016 to 42048 (in bits) (by +32 bits) + + 'int iscsi_context::is_loggedin' offset changed from 42048 to 42080 (in bits) (by +32 bits) + + 'int iscsi_context::bind_interfaces_cnt' offset changed from 42080 to 42112 (in bits) (by +32 bits) + + 'int iscsi_context::nops_in_flight' offset changed from 42112 to 42144 (in bits) (by +32 bits) + + 'int iscsi_context::chap_a' offset changed from 42144 to 42176 (in bits) (by +32 bits) + + 'int iscsi_context::chap_i' offset changed from 42176 to 42208 (in bits) (by +32 bits) + + 'uint32_t iscsi_context::max_burst_length' offset changed from 42688 to 42624 (in bits) (by -64 bits) + + 'uint32_t iscsi_context::first_burst_length' offset changed from 42720 to 42656 (in bits) (by -64 bits) + + 'uint32_t iscsi_context::initiator_max_recv_data_segment_length' offset changed from 42752 to 42688 (in bits) (by -64 bits) + + 'uint32_t iscsi_context::target_max_recv_data_segment_length' offset changed from 42784 to 42720 (in bits) (by -64 bits) + + 'iscsi_initial_r2t iscsi_context::want_initial_r2t' offset changed from 42816 to 42752 (in bits) (by -64 bits) + + 'iscsi_initial_r2t iscsi_context::use_initial_r2t' offset changed from 42848 to 42784 (in bits) (by -64 bits) + + 'iscsi_immediate_data iscsi_context::want_immediate_data' offset changed from 42880 to 42816 (in bits) (by -64 bits) + + 'iscsi_immediate_data iscsi_context::use_immediate_data' offset changed from 42912 to 42848 (in bits) (by -64 bits) + + 'int iscsi_context::lun' offset changed from 42944 to 42880 (in bits) (by -64 bits) + + 'int iscsi_context::no_auto_reconnect' offset changed from 42976 to 42912 (in bits) (by -64 bits) + + 'int iscsi_context::reconnect_deferred' offset changed from 43008 to 42944 (in bits) (by -64 bits) + + 'int iscsi_context::reconnect_max_retries' offset changed from 43040 to 42976 (in bits) (by -64 bits) + + 'int iscsi_context::pending_reconnect' offset changed from 43072 to 43008 (in bits) (by -64 bits) + + 'int iscsi_context::log_level' offset changed from 43104 to 43040 (in bits) (by -64 bits) + + 'iscsi_log_fn iscsi_context::log_fn' offset changed from 43136 to 43072 (in bits) (by -64 bits) + + 'int iscsi_context::mallocs' offset changed from 43200 to 43136 (in bits) (by -64 bits) + + 'int iscsi_context::reallocs' offset changed from 43232 to 43168 (in bits) (by -64 bits) + + 'int iscsi_context::frees' offset changed from 43264 to 43200 (in bits) (by -64 bits) + + 'int iscsi_context::smallocs' offset changed from 43296 to 43232 (in bits) (by -64 bits) + + 'void* iscsi_context::smalloc_ptrs[128]' offset changed from 43328 to 43264 (in bits) (by -64 bits) + + 'int iscsi_context::smalloc_free' offset changed from 51520 to 51456 (in bits) (by -64 bits) + + 'size_t iscsi_context::smalloc_size' offset changed from 51584 to 51520 (in bits) (by -64 bits) + + 'int iscsi_context::cache_allocations' offset changed from 51648 to 51584 (in bits) (by -64 bits) + + 'time_t iscsi_context::next_reconnect' offset changed from 51712 to 51648 (in bits) (by -64 bits) + + 'int iscsi_context::scsi_timeout' offset changed from 51776 to 51712 (in bits) (by -64 bits) + + 'iscsi_context* iscsi_context::old_iscsi' offset changed from 51840 to 51776 (in bits) (by -64 bits) + + 'int iscsi_context::retry_cnt' offset changed from 51904 to 51840 (in bits) (by -64 bits) + + 'int iscsi_context::no_ua_on_reconnect' offset changed from 51936 to 51872 (in bits) (by -64 bits) + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libksba_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libksba_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..81bcc02b64d458facdad40c1d675e3211c0bbbd9 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libksba_all_result.md @@ -0,0 +1,68 @@ +# Functions changed info + +---------------diffs in libksba_libksba.so.8.12.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed (3 filtered out), 12 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +12 Added functions: + + + + 'function void ksba_der_add_bts(ksba_der_t, void*, size_t, unsigned int)' {ksba_der_add_bts@@KSBA_0.9} + + 'function void ksba_der_add_der(ksba_der_t, void*, size_t)' {ksba_der_add_der@@KSBA_0.9} + + 'function void ksba_der_add_end(ksba_der_t)' {ksba_der_add_end@@KSBA_0.9} + + 'function void ksba_der_add_int(ksba_der_t, void*, size_t, int)' {ksba_der_add_int@@KSBA_0.9} + + 'function void ksba_der_add_oid(ksba_der_t, const char*)' {ksba_der_add_oid@@KSBA_0.9} + + 'function void ksba_der_add_ptr(ksba_der_t, int, int, void*, size_t)' {ksba_der_add_ptr@@KSBA_0.9} + + 'function void ksba_der_add_tag(ksba_der_t, int, int)' {ksba_der_add_tag@@KSBA_0.9} + + 'function void ksba_der_add_val(ksba_der_t, int, int, void*, size_t)' {ksba_der_add_val@@KSBA_0.9} + + 'function gpg_error_t ksba_der_builder_get(ksba_der_t, unsigned char**, size_t*)' {ksba_der_builder_get@@KSBA_0.9} + + 'function ksba_der_t ksba_der_builder_new(unsigned int)' {ksba_der_builder_new@@KSBA_0.9} + + 'function void ksba_der_builder_reset(ksba_der_t)' {ksba_der_builder_reset@@KSBA_0.9} + + 'function void ksba_der_release(ksba_der_t)' {ksba_der_release@@KSBA_0.9} + + + +1 function with some indirect sub-type change: + + + + [C]'function gpg_error_t _ksba_keyinfo_from_sexp(ksba_const_sexp_t, unsigned char**, size_t*)' at keyinfo.c:940:1 has some indirect sub-type changes: + + parameter 2 of type 'unsigned char**' changed: + + entity changed from 'unsigned char**' to 'int' + + type size changed from 64 to 32 (in bits) + + parameter 3 of type 'size_t*' changed: + + in pointed to type 'typedef size_t': + + entity changed from 'typedef size_t' to 'unsigned char*' + + type size hasn't changed + + parameter 4 of type 'size_t*' was added + + + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libmpc_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libmpc_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..2ddd82b44b84c995b91c36d604f579d32db71c5a --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libmpc_all_result.md @@ -0,0 +1,20 @@ +# Functions changed info + +---------------diffs in libmpc_libmpc.so.3.2.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 2 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +2 Added functions: + + + + 'function int mpc_dot(mpc_ptr, const mpc_ptr*, const mpc_ptr*, unsigned long int, mpc_rnd_t)' {mpc_dot} + + 'function int mpc_sum(mpc_ptr, const mpc_ptr*, unsigned long int, mpc_rnd_t)' {mpc_sum} + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libnet_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libnet_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..0ebde1ac038bbb0b540613f5c18012f61df18974 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libnet_all_result.md @@ -0,0 +1,84 @@ +# Functions changed info + +---------------diffs in libnet_libnet.so.9.0.0_abidiff.out:---------------- + +ELF SONAME changed + +Functions changes summary: 1 Removed, 1 Changed (132 filtered out), 1 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +SONAME changed from 'libnet.so.1' to 'libnet.so.9' + + + +1 Removed function: + + + + 'function void __libnet_print_vers()' {__libnet_print_vers} + + + +1 Added function: + + + + 'function libnet_ptag_t libnet_build_ospfv2_hello_neighbor(uint32_t, uint16_t, uint8_t, uint8_t, uint32_t, uint32_t, uint32_t, uint32_t, const uint8_t*, uint32_t, libnet_t*, libnet_ptag_t)' {libnet_build_ospfv2_hello_neighbor} + + + +1 function with some indirect sub-type change: + + + + [C]'function int libnet_adv_cull_header(libnet_t*, libnet_ptag_t, uint8_t**, uint32_t*)' at libnet_advanced.c:53:1 has some indirect sub-type changes: + + parameter 1 of type 'libnet_t*' has sub-type changes: + + in pointed to type 'typedef libnet_t' at libnet-structures.h:229:1: + + underlying type 'struct libnet_context' at libnet-structures.h:186:1 changed: + + type size changed from 3200 to 3264 (in bits) + + 1 data member insertion: + + 'libnet_ether_addr libnet_context::link_addr', at offset 3200 (in bits) at libnet-structures.h:227:1 + + 1 data member change: + + type of 'libnet_stats libnet_context::stats' changed: + + type size hasn't changed + + 3 data member changes: + + + + + + type of 'uint64_t libnet_stats::bytes_written' changed: + + typedef name changed from uint64_t to __int64_t at types.h:43:1 + + underlying type 'typedef __uint64_t' at types.h:44:1 changed: + + entity changed from 'typedef __uint64_t' to compatible type 'long int' + + type name changed from 'unsigned long int' to 'long int' + + type size hasn't changed + + + + + + + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libpsl_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libpsl_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..8a885ec6258b59d8ee3ab482ce83d71bcc19ee0e --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libpsl_all_result.md @@ -0,0 +1,114 @@ +# Functions changed info + +---------------diffs in libpsl_libpsl.so.5.3.3_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 11 Changed (2 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +11 functions with some indirect sub-type change: + + + + [C]'function const psl_ctx_t* psl_builtin()' at psl.c:1365:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'const psl_ctx_t': + + in unqualified underlying type 'typedef psl_ctx_t' at libpsl.h:94:1: + + underlying type 'struct _psl_ctx_st' at psl.c:153:1 changed: + + type name changed from '_psl_ctx_st' to 'psl_ctx_st' + + type size hasn't changed + + + + 1 data member changes (6 filtered): + + type of '_psl_vector_t* _psl_ctx_st::suffixes' changed: + + in pointed to type 'typedef _psl_vector_t' at psl.c:151:1: + + typedef name changed from _psl_vector_t to psl_vector_t at psl.c:151:1 + + underlying type 'struct {int (const _psl_entry_t**, const _psl_entry_t**)* cmp; _psl_entry_t** entry; int max; int cur;}' at psl.c:143:1 changed: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'int (const _psl_entry_t**, const _psl_entry_t**)* cmp' changed: + + in pointed to type 'function type int (const _psl_entry_t**, const _psl_entry_t**)': + + parameter 1 of type 'const _psl_entry_t**' has sub-type changes: + + in pointed to type 'const _psl_entry_t*': + + in pointed to type 'const _psl_entry_t': + + 'const _psl_entry_t' changed to 'const psl_entry_t' + + + + and name of '_psl_ctx_st::suffixes' changed to 'psl_ctx_st::suffixes' at psl.c:155:1 + + + + [C]'function void psl_free(psl_ctx_t*)' at psl.c:1340:1 has some indirect sub-type changes: + + parameter 1 of type 'psl_ctx_t*' changed: + + pointed to type 'typedef psl_ctx_t' changed at libpsl.h:89:1, as reported earlier + + + + [C]'function int psl_is_cookie_domain_acceptable(const psl_ctx_t*, const char*, const char*)' at psl.c:1636:1 has some indirect sub-type changes: + + parameter 1 of type 'const psl_ctx_t*' changed: + + in pointed to type 'const psl_ctx_t': + + unqualified underlying type 'typedef psl_ctx_t' changed at libpsl.h:89:1, as reported earlier + + + + [C]'function int psl_is_public_suffix(const psl_ctx_t*, const char*)' at psl.c:990:1 has some indirect sub-type changes: + + + + [C]'function int psl_is_public_suffix2(const psl_ctx_t*, const char*, int)' at psl.c:1025:1 has some indirect sub-type changes: + + + + [C]'function psl_ctx_t* psl_latest(const char*)' at psl.c:1931:1 has some indirect sub-type changes: + + + + [C]'function psl_ctx_t* psl_load_file(const char*)' at psl.c:1155:1 has some indirect sub-type changes: + + + + [C]'function psl_ctx_t* psl_load_fp(FILE*)' at psl.c:1184:1 has some indirect sub-type changes: + + + + [C]'function int psl_suffix_count(const psl_ctx_t*)' at psl.c:1388:1 has some indirect sub-type changes: + + + + [C]'function int psl_suffix_exception_count(const psl_ctx_t*)' at psl.c:1411:1 has some indirect sub-type changes: + + + + [C]'function int psl_suffix_wildcard_count(const psl_ctx_t*)' at psl.c:1434:1 has some indirect sub-type changes: + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/librepo_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/librepo_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..c297c50b0a775aae0633d8d6126188568bbe41a8 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/librepo_all_result.md @@ -0,0 +1,18 @@ +# Functions changed info + +---------------diffs in librepo_librepo.so.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 1 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +1 Added function: + + + + 'function void ensure_socket_dir_exists()' {ensure_socket_dir_exists} + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libsecret_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libsecret_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..ae8e1c7237b1d8f700d1f6167667f7be89babec0 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libsecret_all_result.md @@ -0,0 +1,86 @@ +# Functions changed info + +---------------diffs in libsecret_libsecret-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 35 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +35 Added functions: + + + + 'function GType secret_backend_flags_get_type()' {secret_backend_flags_get_type} + + 'function void secret_backend_get(SecretBackendFlags, GCancellable*, GAsyncReadyCallback, gpointer)' {secret_backend_get} + + 'function SecretBackend* secret_backend_get_finish(GAsyncResult*, GError**)' {secret_backend_get_finish} + + 'function GType secret_backend_get_type()' {secret_backend_get_type} + + 'function GType secret_file_backend_get_type()' {secret_file_backend_get_type} + + 'function gboolean secret_file_collection_clear(SecretFileCollection*, GHashTable*, GError**)' {secret_file_collection_clear} + + 'function GType secret_file_collection_get_type()' {secret_file_collection_get_type} + + 'function gboolean secret_file_collection_replace(SecretFileCollection*, GHashTable*, const gchar*, SecretValue*, GError**)' {secret_file_collection_replace} + + 'function GList* secret_file_collection_search(SecretFileCollection*, GHashTable*)' {secret_file_collection_search} + + 'function void secret_file_collection_write(SecretFileCollection*, GCancellable*, GAsyncReadyCallback, gpointer)' {secret_file_collection_write} + + 'function gboolean secret_file_collection_write_finish(SecretFileCollection*, GAsyncResult*, GError**)' {secret_file_collection_write_finish} + + 'function SecretFileItem* secret_file_item_deserialize(GVariant*)' {secret_file_item_deserialize} + + 'function GType secret_file_item_get_type()' {secret_file_item_get_type} + + 'function GVariant* secret_file_item_serialize(SecretFileItem*)' {secret_file_item_serialize} + + 'function SecretValue* secret_password_lookup_binary_finish(GAsyncResult*, GError**)' {secret_password_lookup_binary_finish} + + 'function SecretValue* secret_password_lookup_binary_sync(const SecretSchema*, GCancellable*, GError**, ...)' {secret_password_lookup_binary_sync} + + 'function SecretValue* secret_password_lookupv_binary_sync(const SecretSchema*, GHashTable*, GCancellable*, GError**)' {secret_password_lookupv_binary_sync} + + 'function void secret_password_search(const SecretSchema*, SecretSearchFlags, GCancellable*, GAsyncReadyCallback, gpointer, ...)' {secret_password_search} + + 'function GList* secret_password_search_finish(GAsyncResult*, GError**)' {secret_password_search_finish} + + 'function GList* secret_password_search_sync(const SecretSchema*, SecretSearchFlags, GCancellable*, GError**, ...)' {secret_password_search_sync} + + 'function void secret_password_searchv(const SecretSchema*, GHashTable*, SecretSearchFlags, GCancellable*, GAsyncReadyCallback, gpointer)' {secret_password_searchv} + + 'function GList* secret_password_searchv_sync(const SecretSchema*, GHashTable*, SecretSearchFlags, GCancellable*, GError**)' {secret_password_searchv_sync} + + 'function void secret_password_store_binary(const SecretSchema*, const gchar*, const gchar*, SecretValue*, GCancellable*, GAsyncReadyCallback, gpointer, ...)' {secret_password_store_binary} + + 'function gboolean secret_password_store_binary_sync(const SecretSchema*, const gchar*, const gchar*, SecretValue*, GCancellable*, GError**, ...)' {secret_password_store_binary_sync} + + 'function void secret_password_storev_binary(const SecretSchema*, GHashTable*, const gchar*, const gchar*, SecretValue*, GCancellable*, GAsyncReadyCallback, gpointer)' {secret_password_storev_binary} + + 'function gboolean secret_password_storev_binary_sync(const SecretSchema*, GHashTable*, const gchar*, const gchar*, SecretValue*, GCancellable*, GError**)' {secret_password_storev_binary_sync} + + 'function GHashTable* secret_retrievable_get_attributes(SecretRetrievable*)' {secret_retrievable_get_attributes} + + 'function guint64 secret_retrievable_get_created(SecretRetrievable*)' {secret_retrievable_get_created} + + 'function gchar* secret_retrievable_get_label(SecretRetrievable*)' {secret_retrievable_get_label} + + 'function guint64 secret_retrievable_get_modified(SecretRetrievable*)' {secret_retrievable_get_modified} + + 'function GType secret_retrievable_get_type()' {secret_retrievable_get_type} + + 'function void secret_retrievable_retrieve_secret(SecretRetrievable*, GCancellable*, GAsyncReadyCallback, gpointer)' {secret_retrievable_retrieve_secret} + + 'function SecretValue* secret_retrievable_retrieve_secret_finish(SecretRetrievable*, GAsyncResult*, GError**)' {secret_retrievable_retrieve_secret_finish} + + 'function SecretValue* secret_retrievable_retrieve_secret_sync(SecretRetrievable*, GCancellable*, GError**)' {secret_retrievable_retrieve_secret_sync} + + 'function gchar* secret_value_unref_to_password(SecretValue*, gsize*)' {secret_value_unref_to_password} + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libvma_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libvma_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..848a6b41d29011a4dd1f0f4bb605b6b9fa3d2a73 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libvma_all_result.md @@ -0,0 +1,296 @@ +# Functions changed info + +---------------diffs in libvma_libvma.so.8.9.4_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 5 Changed (274 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed (13 filtered out), 0 Added variables + + + +5 functions with some indirect sub-type change: + + + + [C]'function void Floyd_LogCircleInfo(Node)' at buffer_pool.cpp:234:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef Node' has sub-type changes: + + underlying type 'mem_buf_desc_t*' changed: + + in pointed to type 'class mem_buf_desc_t' at mem_buf_desc.h:60:1: + + type size hasn't changed + + 1 data member changes (2 filtered): + + type of 'ring_slave* mem_buf_desc_t::p_desc_owner' changed: + + in pointed to type 'class ring_slave' at ring_slave.h:159:1: + + type size hasn't changed + + 1 base class change: + + 'class ring' at ring.h:73:1 changed: + + type size hasn't changed + + 1 member function changes (10 filtered): + + 'method virtual bool ring::attach_flow(flow_tuple&, pkt_rcvr_sink*)' has some sub-type changes: + + parameter 2 of type 'pkt_rcvr_sink*' has sub-type changes: + + in pointed to type 'class pkt_rcvr_sink' at pkt_rcvr_sink.h:52:1: + + type size hasn't changed + + 1 member function changes (2 filtered): + + 'method virtual void pkt_rcvr_sink::rx_add_ring_cb(flow_tuple_with_local_if&, ring*, bool)' has some sub-type changes: + + parameter 2 of type 'ring*' has sub-type changes: + + pointed to type 'class ring' changed; details are being reported + + + + + + no data member change (1 filtered); + + + + no member function changes (6 filtered); + + + + no data member changes (5 filtered); + + + + + + [C]'method uint32_t buffer_pool::find_lkey_by_ib_ctx_thread_safe(ib_ctx_handler*)' at buffer_pool.h:60:1 has some indirect sub-type changes: + + parameter 1 of type 'ib_ctx_handler*' has sub-type changes: + + in pointed to type 'class ib_ctx_handler' at ib_ctx_handler.h:57:1: + + type size hasn't changed + + 1 data member changes (6 filtered): + + type of 'vma_ibv_device_attr_ex* ib_ctx_handler::m_p_ibv_device_attr' changed: + + in pointed to type 'typedef vma_ibv_device_attr_ex' at verbs_extra.h:144:1: + + underlying type 'struct ibv_device_attr_ex' at verbs.h:296:1 changed: + + type size changed from 3072 to 3200 (in bits) + + 2 data member insertions: + + 'ibv_pci_atomic_caps ibv_device_attr_ex::pci_atomic_caps', at offset 3072 (in bits) at verbs.h:331:1 + + 'uint32_t ibv_device_attr_ex::xrc_odp_caps', at offset 3136 (in bits) at verbs.h:332:1 + + + + + + [C]'method virtual void cq_mgr::add_qp_rx(qp_mgr*)' at cq_mgr.cpp:244:1 has some indirect sub-type changes: + + parameter 1 of type 'qp_mgr*' has sub-type changes: + + in pointed to type 'class qp_mgr' at qp_mgr.h:94:1: + + type size hasn't changed + + 2 member function changes (4 filtered): + + 'method virtual int qp_mgr::prepare_ibv_qp(vma_ibv_qp_init_attr&)' has some sub-type changes: + + parameter 1 of type 'vma_ibv_qp_init_attr&' has sub-type changes: + + in referenced type 'typedef vma_ibv_qp_init_attr' at verbs_extra.h:126:1: + + underlying type 'struct ibv_qp_init_attr_ex' at verbs.h:877:1 changed: + + type size changed from 1024 to 1088 (in bits) + + 1 data member insertion: + + 'uint64_t ibv_qp_init_attr_ex::send_ops_flags', at offset 1024 (in bits) at verbs.h:949:1 + + no data member changes (6 filtered); + + + + 'method virtual cq_mgr* qp_mgr::init_rx_cq_mgr(ibv_comp_channel*)' has some sub-type changes: + + return type changed: + + in pointed to type 'class cq_mgr' at cq_mgr.h:95:1: + + type size hasn't changed + + no member function changes (5 filtered); + + + + 1 data member changes (7 filtered): + + type of 'ring_simple* cq_mgr::m_p_ring' changed: + + in pointed to type 'class ring_simple' at ring_simple.h:58:1: + + type size hasn't changed + + 1 base class change: + + 'class ring_slave' at ring_slave.h:159:1 changed: + + details were reported earlier + + + + no member function changes (9 filtered); + + + + no data member changes (6 filtered); + + + + + + no data member changes (7 filtered); + + + + [C]'method sockinfo_tcp* sockinfo_tcp::accept_clone()' at sockinfo_tcp.cpp:2695:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'class sockinfo_tcp' at sockinfo_tcp.h:116:1: + + type size hasn't changed + + 1 base class change: + + 'class sockinfo' at sockinfo.h:157:1 changed: + + type size hasn't changed + + 1 base class changes (1 filtered): + + 'class pkt_rcvr_sink' at pkt_rcvr_sink.h:52:1 changed: + + details were reported earlier + + + + no member function changes (10 filtered); + + + + no data member changes (5 filtered); + + + + no member function changes (7 filtered); + + + + no data member changes (2 filtered); + + + + [C]'function int vma_ib_mlx5dv_init_obj(mlx5dv_obj*, uint64_t)' at ib_mlx5_dv.cpp:41:1 has some indirect sub-type changes: + + parameter 1 of type 'mlx5dv_obj*' has sub-type changes: + + in pointed to type 'struct mlx5dv_obj' at mlx5dv.h:495:1: + + type size changed from 768 to 896 (in bits) + + 1 data member insertion: + + 'struct {ibv_pd* in; mlx5dv_pd* out;} mlx5dv_obj::pd', at offset 768 (in bits) at mlx5dv.h:523:1 + + 3 data member changes (3 filtered): + + type of 'struct {ibv_qp* in; mlx5dv_qp* out;} mlx5dv_obj::qp' changed: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'mlx5dv_qp* out' changed: + + in pointed to type 'struct mlx5dv_qp' at mlx5dv.h:406:1: + + type size changed from 576 to 768 (in bits) + + 5 data member insertions: + + 'uint32_t mlx5dv_qp::tirn', at offset 576 (in bits) at mlx5dv.h:424:1 + + 'uint32_t mlx5dv_qp::tisn', at offset 608 (in bits) at mlx5dv.h:425:1 + + 'uint32_t mlx5dv_qp::rqn', at offset 640 (in bits) at mlx5dv.h:426:1 + + 'uint32_t mlx5dv_qp::sqn', at offset 672 (in bits) at mlx5dv.h:427:1 + + 'uint64_t mlx5dv_qp::tir_icm_addr', at offset 704 (in bits) at mlx5dv.h:428:1 + + + + + + type of 'struct {ibv_srq* in; mlx5dv_srq* out;} mlx5dv_obj::srq' changed: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'mlx5dv_srq* out' changed: + + in pointed to type 'struct mlx5dv_srq' at mlx5dv.h:445:1: + + type size changed from 320 to 384 (in bits) + + 1 data member insertion: + + 'uint32_t mlx5dv_srq::srqn', at offset 320 (in bits) at mlx5dv.h:452:1 + + + + + + type of 'struct {ibv_dm* in; mlx5dv_dm* out;} mlx5dv_obj::dm' changed: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'mlx5dv_dm* out' changed: + + in pointed to type 'struct mlx5dv_dm' at mlx5dv.h:472:1: + + type size changed from 192 to 256 (in bits) + + 1 data member insertion: + + 'uint64_t mlx5dv_dm::remote_va', at offset 192 (in bits) at mlx5dv.h:476:1 + + + + + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libwebsockets_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libwebsockets_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..52672efe01795ea08cea1027cf1e4ad555dab630 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libwebsockets_all_result.md @@ -0,0 +1,2668 @@ +# Functions changed info + +---------------diffs in libwebsockets_libwebsockets.so.16_abidiff.out:---------------- + +ELF SONAME changed + +Functions changes summary: 39 Removed, 19 Changed (100 filtered out), 274 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added (3 filtered out) variables + + + +SONAME changed from 'libwebsockets.so.12' to 'libwebsockets.so.16' + + + +39 Removed functions: + + + + [D] 'function int interface_to_sa(lws_vhost*, const char*, sockaddr_in*, size_t)' {interface_to_sa} + + [D] 'function int lws_alloc_vfs_file(lws_context*, const char*, uint8_t**, lws_filepos_t*)' {lws_alloc_vfs_file} + + [D] 'function lws* lws_client_connect(lws_context*, const char*, int, int, const char*, const char*, const char*, const char*, int)' {lws_client_connect} + + [D] 'function lws* lws_client_connect_extended(lws_context*, const char*, int, int, const char*, const char*, const char*, const char*, int, void*)' {lws_client_connect_extended} + + [D] 'function void lws_context_destroy2(lws_context*)' {lws_context_destroy2} + + [D] 'function void lws_context_init_extensions(lws_context_creation_info*, lws_context*)' {lws_context_init_extensions} + + [D] 'function int lws_context_init_server_ssl(lws_context_creation_info*, lws_vhost*)' {lws_context_init_server_ssl} + + [D] 'function int lws_ext_parse_options(const lws_extension*, lws*, void*, const lws_ext_options*, const char*, int)' {lws_ext_parse_options} + + [D] 'function int lws_extension_callback_pm_deflate(lws_context*, const lws_extension*, lws*, lws_extension_callback_reasons, void*, void*, size_t)' {lws_extension_callback_pm_deflate} + + [D] 'function int lws_plat_change_pollfd(lws_context*, lws*, pollfd*)' {lws_plat_change_pollfd} + + [D] 'function int lws_plat_check_connection_error(lws*)' {lws_plat_check_connection_error} + + [D] 'function void lws_plat_context_early_destroy(lws_context*)' {lws_plat_context_early_destroy} + + [D] 'function int lws_plat_context_early_init()' {lws_plat_context_early_init} + + [D] 'function void lws_plat_context_late_destroy(lws_context*)' {lws_plat_context_late_destroy} + + [D] 'function void lws_plat_delete_socket_from_fds(lws_context*, lws*, int)' {lws_plat_delete_socket_from_fds} + + [D] 'function void lws_plat_drop_app_privileges(lws_context_creation_info*)' {lws_plat_drop_app_privileges} + + [D] 'function const char* lws_plat_inet_ntop(int, void*, char*, int)' {lws_plat_inet_ntop} + + [D] 'function int lws_plat_inet_pton(int, const char*, void*)' {lws_plat_inet_pton} + + [D] 'function int lws_plat_init(lws_context*, lws_context_creation_info*)' {lws_plat_init} + + [D] 'function void lws_plat_insert_socket_into_fds(lws_context*, lws*)' {lws_plat_insert_socket_into_fds} + + [D] 'function int lws_plat_service(lws_context*, int)' {lws_plat_service} + + [D] 'function void lws_plat_service_periodic(lws_context*)' {lws_plat_service_periodic} + + [D] 'function int lws_plat_set_socket_options(lws_vhost*, int)' {lws_plat_set_socket_options} + + [D] 'function int lws_poll_listen_fd(pollfd*)' {lws_poll_listen_fd} + + [D] 'function int lws_read(lws*, unsigned char*, lws_filepos_t)' {lws_read} + + [D] 'function void lws_server_get_canonical_hostname(lws_context*, lws_context_creation_info*)' {lws_server_get_canonical_hostname} + + [D] 'function int lws_server_socket_service(lws_context*, lws*, pollfd*)' {lws_server_socket_service} + + [D] 'function int lws_server_socket_service_ssl(lws*, lws_sockfd_type)' {lws_server_socket_service_ssl} + + [D] 'function void lws_set_parent_carries_io(lws*)' {lws_set_parent_carries_io} + + [D] 'function int lws_ssl_capable_read(lws*, unsigned char*, int)' {lws_ssl_capable_read} + + [D] 'function int lws_ssl_capable_read_no_ssl(lws*, unsigned char*, int)' {lws_ssl_capable_read_no_ssl} + + [D] 'function int lws_ssl_capable_write(lws*, unsigned char*, int)' {lws_ssl_capable_write} + + [D] 'function int lws_ssl_capable_write_no_ssl(lws*, unsigned char*, int)' {lws_ssl_capable_write_no_ssl} + + [D] 'function int lws_ssl_close(lws*)' {lws_ssl_close} + + [D] 'function void lws_ssl_destroy(lws_vhost*)' {lws_ssl_destroy} + + [D] 'function int lws_ssl_pending(lws*)' {lws_ssl_pending} + + [D] 'function int lws_ssl_pending_no_ssl(lws*)' {lws_ssl_pending_no_ssl} + + [D] 'function void lws_union_transition(lws*, connection_mode)' {lws_union_transition} + + [D] 'function lws_vhost* lws_vhost_get(lws*)' {lws_vhost_get} + + + +274 Added functions: + + + + [A] 'function int __lws_sul_insert(lws_dll2_owner_t*, lws_sorted_usec_list_t*, lws_usec_t)' {__lws_sul_insert} + + [A] 'function lws_usec_t __lws_sul_service_ripe(lws_dll2_owner_t*, lws_usec_t)' {__lws_sul_service_ripe} + + [A] 'function int __lws_system_attach(lws_context*, int, lws_attach_cb_t, lws_system_states_t, void*, lws_attach_item**)' {__lws_system_attach} + + [A] 'function void lejp_change_callback(lejp_ctx*, signed char (lejp_ctx*, char)*)' {lejp_change_callback} + + [A] 'function void lejp_check_path_match(lejp_ctx*)' {lejp_check_path_match} + + [A] 'function void lejp_construct(lejp_ctx*, signed char (lejp_ctx*, char)*, void*, const char* const*, unsigned char)' {lejp_construct} + + [A] 'function void lejp_destruct(lejp_ctx*)' {lejp_destruct} + + [A] 'function const char* lejp_error_to_string(int)' {lejp_error_to_string} + + [A] 'function int lejp_get_wildcard(lejp_ctx*, int, char*, int)' {lejp_get_wildcard} + + [A] 'function int lejp_parse(lejp_ctx*, const unsigned char*, int)' {lejp_parse} + + [A] 'function int lejp_parser_pop(lejp_ctx*)' {lejp_parser_pop} + + [A] 'function int lejp_parser_push(lejp_ctx*, void*, const char* const*, unsigned char, lejp_callback)' {lejp_parser_push} + + [A] 'function int lws_add_http_common_headers(lws*, unsigned int, const char*, lws_filepos_t, unsigned char**, unsigned char*)' {lws_add_http_common_headers} + + [A] 'function lws* lws_adopt_descriptor_vhost_via_info(const lws_adopt_desc_t*)' {lws_adopt_descriptor_vhost_via_info} + + [A] 'function void lws_b64_decode_state_init(lws_b64state*)' {lws_b64_decode_state_init} + + [A] 'function int lws_b64_decode_stateful(lws_b64state*, const char*, size_t*, uint8_t*, size_t*, int)' {lws_b64_decode_stateful} + + [A] 'function int lws_b64_decode_string_len(const char*, int, char*, int)' {lws_b64_decode_string_len} + + [A] 'function int lws_b64_encode_string_url(const char*, int, char*, int)' {lws_b64_encode_string_url} + + [A] 'function int lws_base64_size(int)' {lws_base64_size} + + [A] 'function int lws_buflist_append_segment(lws_buflist**, const uint8_t*, size_t)' {lws_buflist_append_segment} + + [A] 'function void lws_buflist_describe(lws_buflist**, void*, const char*)' {lws_buflist_describe} + + [A] 'function void lws_buflist_destroy_all_segments(lws_buflist**)' {lws_buflist_destroy_all_segments} + + [A] 'function int lws_buflist_linear_copy(lws_buflist**, size_t, uint8_t*, size_t)' {lws_buflist_linear_copy} + + [A] 'function size_t lws_buflist_next_segment_len(lws_buflist**, uint8_t**)' {lws_buflist_next_segment_len} + + [A] 'function size_t lws_buflist_total_len(lws_buflist**)' {lws_buflist_total_len} + + [A] 'function size_t lws_buflist_use_segment(lws_buflist**, size_t)' {lws_buflist_use_segment} + + [A] 'function int lws_callback_vhost_protocols_vhost(lws_vhost*, int, void*, size_t)' {lws_callback_vhost_protocols_vhost} + + [A] 'function int lws_client_http_multipart(lws*, const char*, const char*, const char*, char**, char*)' {lws_client_http_multipart} + + [A] 'function const char* lws_cmdline_option(int, const char**, const char*)' {lws_cmdline_option} + + [A] 'function void lws_cmdline_option_handle_builtin(int, const char**, lws_context_creation_info*)' {lws_cmdline_option_handle_builtin} + + [A] 'function lws* lws_create_adopt_udp(lws_vhost*, const char*, int, int, const char*, const char*, lws*, void*, const lws_retry_bo_t*)' {lws_create_adopt_udp} + + [A] 'function int lws_dir(const char*, void*, lws_dir_callback_function*)' {lws_dir} + + [A] 'function lws_diskcache_scan* lws_diskcache_create(const char*, uint64_t)' {lws_diskcache_create} + + [A] 'function void lws_diskcache_destroy(lws_diskcache_scan**)' {lws_diskcache_destroy} + + [A] 'function int lws_diskcache_finalize_name(char*)' {lws_diskcache_finalize_name} + + [A] 'function int lws_diskcache_prepare(const char*, int, int)' {lws_diskcache_prepare} + + [A] 'function int lws_diskcache_query(lws_diskcache_scan*, int, const char*, int*, char*, int, size_t*)' {lws_diskcache_query} + + [A] 'function int lws_diskcache_secs_to_idle(lws_diskcache_scan*)' {lws_diskcache_secs_to_idle} + + [A] 'function int lws_diskcache_trim(lws_diskcache_scan*)' {lws_diskcache_trim} + + [A] 'function void lws_dll2_add_before(lws_dll2*, lws_dll2*)' {lws_dll2_add_before} + + [A] 'function void lws_dll2_add_head(lws_dll2*, lws_dll2_owner*)' {lws_dll2_add_head} + + [A] 'function void lws_dll2_add_sorted(lws_dll2_t*, lws_dll2_owner_t*, int (const lws_dll2_t*, const lws_dll2_t*)*)' {lws_dll2_add_sorted} + + [A] 'function void lws_dll2_add_tail(lws_dll2*, lws_dll2_owner*)' {lws_dll2_add_tail} + + [A] 'function void lws_dll2_clear(lws_dll2*)' {lws_dll2_clear} + + [A] 'function int lws_dll2_foreach_safe(lws_dll2_owner*, void*, int (lws_dll2*, void*)*)' {lws_dll2_foreach_safe} + + [A] 'function void lws_dll2_owner_clear(lws_dll2_owner*)' {lws_dll2_owner_clear} + + [A] 'function void lws_dll2_remove(lws_dll2*)' {lws_dll2_remove} + + [A] 'function void lws_explicit_bzero(void*, size_t)' {lws_explicit_bzero} + + [A] 'function void lws_filename_purify_inplace(char*)' {lws_filename_purify_inplace} + + [A] 'function int lws_finalize_write_http_header(lws*, unsigned char*, unsigned char**, unsigned char*)' {lws_finalize_write_http_header} + + [A] 'function void lws_fts_close(lws_fts_file*)' {lws_fts_close} + + [A] 'function lws_fts* lws_fts_create(int)' {lws_fts_create} + + [A] 'function void lws_fts_destroy(lws_fts**)' {lws_fts_destroy} + + [A] 'function int lws_fts_file_index(lws_fts*, const char*, int, int)' {lws_fts_file_index} + + [A] 'function int lws_fts_fill(lws_fts*, uint32_t, const char*, size_t)' {lws_fts_fill} + + [A] 'function lws_fts_file* lws_fts_open(const char*)' {lws_fts_open} + + [A] 'function lws_fts_result* lws_fts_search(lws_fts_file*, lws_fts_search_params*)' {lws_fts_search} + + [A] 'function int lws_fts_serialize(lws_fts*)' {lws_fts_serialize} + + [A] 'function int lws_genaes_create(lws_genaes_ctx*, enum_aes_operation, enum_aes_modes, lws_gencrypto_keyelem*, enum_aes_padding, void*)' {lws_genaes_create} + + [A] 'function int lws_genaes_crypt(lws_genaes_ctx*, const uint8_t*, size_t, uint8_t*, uint8_t*, uint8_t*, size_t*, int)' {lws_genaes_crypt} + + [A] 'function int lws_genaes_destroy(lws_genaes_ctx*, unsigned char*, size_t)' {lws_genaes_destroy} + + [A] 'function int lws_gencrypto_bits_to_bytes(int)' {lws_gencrypto_bits_to_bytes} + + [A] 'function int lws_gencrypto_jwe_alg_to_definition(const char*, const lws_jose_jwe_alg**)' {lws_gencrypto_jwe_alg_to_definition} + + [A] 'function int lws_gencrypto_jwe_enc_to_definition(const char*, const lws_jose_jwe_alg**)' {lws_gencrypto_jwe_enc_to_definition} + + [A] 'function int lws_gencrypto_jws_alg_to_definition(const char*, const lws_jose_jwe_alg**)' {lws_gencrypto_jws_alg_to_definition} + + [A] 'function size_t lws_gencrypto_padded_length(size_t, size_t)' {lws_gencrypto_padded_length} + + [A] 'function void lws_genec_destroy(lws_genec_ctx*)' {lws_genec_destroy} + + [A] 'function void lws_genec_destroy_elements(lws_gencrypto_keyelem*)' {lws_genec_destroy_elements} + + [A] 'function int lws_genec_dump(lws_gencrypto_keyelem*)' {lws_genec_dump} + + [A] 'function int lws_genecdh_compute_shared_secret(lws_genec_ctx*, uint8_t*, int*)' {lws_genecdh_compute_shared_secret} + + [A] 'function int lws_genecdh_create(lws_genec_ctx*, lws_context*, const lws_ec_curves*)' {lws_genecdh_create} + + [A] 'function int lws_genecdh_new_keypair(lws_genec_ctx*, enum_lws_dh_side, const char*, lws_gencrypto_keyelem*)' {lws_genecdh_new_keypair} + + [A] 'function int lws_genecdh_set_key(lws_genec_ctx*, lws_gencrypto_keyelem*, enum_lws_dh_side)' {lws_genecdh_set_key} + + [A] 'function int lws_genecdsa_create(lws_genec_ctx*, lws_context*, const lws_ec_curves*)' {lws_genecdsa_create} + + [A] 'function int lws_genecdsa_hash_sig_verify_jws(lws_genec_ctx*, const uint8_t*, lws_genhash_types, int, const uint8_t*, size_t)' {lws_genecdsa_hash_sig_verify_jws} + + [A] 'function int lws_genecdsa_hash_sign_jws(lws_genec_ctx*, const uint8_t*, lws_genhash_types, int, uint8_t*, size_t)' {lws_genecdsa_hash_sign_jws} + + [A] 'function int lws_genecdsa_new_keypair(lws_genec_ctx*, const char*, lws_gencrypto_keyelem*)' {lws_genecdsa_new_keypair} + + [A] 'function int lws_genecdsa_set_key(lws_genec_ctx*, lws_gencrypto_keyelem*)' {lws_genecdsa_set_key} + + [A] 'function int lws_genhmac_destroy(lws_genhmac_ctx*, void*)' {lws_genhmac_destroy} + + [A] 'function int lws_genhmac_init(lws_genhmac_ctx*, lws_genhmac_types, const uint8_t*, size_t)' {lws_genhmac_init} + + [A] 'function size_t lws_genhmac_size(lws_genhmac_types)' {lws_genhmac_size} + + [A] 'function int lws_genhmac_update(lws_genhmac_ctx*, void*, size_t)' {lws_genhmac_update} + + [A] 'function int lws_genrsa_create(lws_genrsa_ctx*, lws_gencrypto_keyelem*, lws_context*, enum_genrsa_mode, lws_genhash_types)' {lws_genrsa_create} + + [A] 'function void lws_genrsa_destroy(lws_genrsa_ctx*)' {lws_genrsa_destroy} + + [A] 'function void lws_genrsa_destroy_elements(lws_gencrypto_keyelem*)' {lws_genrsa_destroy_elements} + + [A] 'function int lws_genrsa_hash_sig_verify(lws_genrsa_ctx*, const uint8_t*, lws_genhash_types, const uint8_t*, size_t)' {lws_genrsa_hash_sig_verify} + + [A] 'function int lws_genrsa_hash_sign(lws_genrsa_ctx*, const uint8_t*, lws_genhash_types, uint8_t*, size_t)' {lws_genrsa_hash_sign} + + [A] 'function int lws_genrsa_new_keypair(lws_context*, lws_genrsa_ctx*, enum_genrsa_mode, lws_gencrypto_keyelem*, int)' {lws_genrsa_new_keypair} + + [A] 'function int lws_genrsa_private_decrypt(lws_genrsa_ctx*, const uint8_t*, size_t, uint8_t*, size_t)' {lws_genrsa_private_decrypt} + + [A] 'function int lws_genrsa_private_encrypt(lws_genrsa_ctx*, const uint8_t*, size_t, uint8_t*)' {lws_genrsa_private_encrypt} + + [A] 'function int lws_genrsa_public_decrypt(lws_genrsa_ctx*, const uint8_t*, size_t, uint8_t*, size_t)' {lws_genrsa_public_decrypt} + + [A] 'function int lws_genrsa_public_encrypt(lws_genrsa_ctx*, const uint8_t*, size_t, uint8_t*)' {lws_genrsa_public_encrypt} + + [A] 'function void lws_get_effective_uid_gid(lws_context*, int*, int*)' {lws_get_effective_uid_gid} + + [A] 'function void* lws_get_opaque_user_data(const lws*)' {lws_get_opaque_user_data} + + [A] 'function const char* lws_get_peer_simple_fd(lws_sockfd_type, char*, size_t)' {lws_get_peer_simple_fd} + + [A] 'function int lws_get_tsi(lws*)' {lws_get_tsi} + + [A] 'function const lws_udp* lws_get_udp(const lws*)' {lws_get_udp} + + [A] 'function lws_vhost* lws_get_vhost_by_name(lws_context*, const char*)' {lws_get_vhost_by_name} + + [A] 'function const char* lws_get_vhost_iface(lws_vhost*)' {lws_get_vhost_iface} + + [A] 'function int lws_get_vhost_listen_port(lws_vhost*)' {lws_get_vhost_listen_port} + + [A] 'function const char* lws_get_vhost_name(lws_vhost*)' {lws_get_vhost_name} + + [A] 'function int lws_get_vhost_port(lws_vhost*)' {lws_get_vhost_port} + + [A] 'function void* lws_get_vhost_user(lws_vhost*)' {lws_get_vhost_user} + + [A] 'function int lws_h2_client_stream_long_poll_rxonly(lws*)' {lws_h2_client_stream_long_poll_rxonly} + + [A] 'function int lws_h2_get_peer_txcredit_estimate(lws*)' {lws_h2_get_peer_txcredit_estimate} + + [A] 'function int lws_h2_update_peer_txcredit(lws*, int, int)' {lws_h2_update_peer_txcredit} + + [A] 'function int lws_hdr_custom_copy(lws*, char*, int, const char*, int)' {lws_hdr_custom_copy} + + [A] 'function int lws_hdr_custom_length(lws*, const char*, int)' {lws_hdr_custom_length} + + [A] 'function int lws_hex_to_byte_array(const char*, uint8_t*, int)' {lws_hex_to_byte_array} + + [A] 'function int lws_http_basic_auth_gen(const char*, const char*, char*, size_t)' {lws_http_basic_auth_gen} + + [A] 'function int lws_http_compression_apply(lws*, const char*, unsigned char**, unsigned char*, char)' {lws_http_compression_apply} + + [A] 'function int lws_http_get_uri_and_method(lws*, char**, int*)' {lws_http_get_uri_and_method} + + [A] 'function int lws_http_headers_detach(lws*)' {lws_http_headers_detach} + + [A] 'function int lws_http_is_redirected_to_get(lws*)' {lws_http_is_redirected_to_get} + + [A] 'function int lws_http_mark_sse(lws*)' {lws_http_mark_sse} + + [A] 'function int lws_humanize(char*, int, uint64_t, const lws_humanize_unit_t*)' {lws_humanize} + + [A] 'function void lws_jose_destroy(lws_jose*)' {lws_jose_destroy} + + [A] 'function void lws_jose_init(lws_jose*)' {lws_jose_init} + + [A] 'function int lws_json_purify_len(const char*)' {lws_json_purify_len} + + [A] 'function int lws_jwa_concat_kdf(lws_jwe*, int, uint8_t*, const uint8_t*, int)' {lws_jwa_concat_kdf} + + [A] 'function int lws_jwe_auth_and_decrypt(lws_jwe*, char*, int*)' {lws_jwe_auth_and_decrypt} + + [A] 'function int lws_jwe_auth_and_decrypt_cbc_hs(lws_jwe*, uint8_t*, uint8_t*, int)' {lws_jwe_auth_and_decrypt_cbc_hs} + + [A] 'function void lws_jwe_be64(uint64_t, uint8_t*)' {lws_jwe_be64} + + [A] 'function int lws_jwe_create_packet(lws_jwe*, const char*, size_t, const char*, char*, size_t, lws_context*)' {lws_jwe_create_packet} + + [A] 'function void lws_jwe_destroy(lws_jwe*)' {lws_jwe_destroy} + + [A] 'function int lws_jwe_encrypt(lws_jwe*, char*, int*)' {lws_jwe_encrypt} + + [A] 'function void lws_jwe_init(lws_jwe*, lws_context*)' {lws_jwe_init} + + [A] 'function int lws_jwe_json_parse(lws_jwe*, const uint8_t*, int, char*, int*)' {lws_jwe_json_parse} + + [A] 'function int lws_jwe_parse_jose(lws_jose*, const char*, int, char*, int*)' {lws_jwe_parse_jose} + + [A] 'function int lws_jwe_render_compact(lws_jwe*, char*, size_t)' {lws_jwe_render_compact} + + [A] 'function int lws_jwe_render_flattened(lws_jwe*, char*, size_t)' {lws_jwe_render_flattened} + + [A] 'function void lws_jwk_destroy(lws_jwk*)' {lws_jwk_destroy} + + [A] 'function int lws_jwk_dump(lws_jwk*)' {lws_jwk_dump} + + [A] 'function int lws_jwk_dup_oct(lws_jwk*, void*, int)' {lws_jwk_dup_oct} + + [A] 'function int lws_jwk_export(lws_jwk*, int, char*, int*)' {lws_jwk_export} + + [A] 'function int lws_jwk_generate(lws_context*, lws_jwk*, lws_gencrypto_kty, int, const char*)' {lws_jwk_generate} + + [A] 'function int lws_jwk_import(lws_jwk*, lws_jwk_key_import_callback, void*, const char*, size_t)' {lws_jwk_import} + + [A] 'function int lws_jwk_load(lws_jwk*, const char*, lws_jwk_key_import_callback, void*)' {lws_jwk_load} + + [A] 'function int lws_jwk_rfc7638_fingerprint(lws_jwk*, char*)' {lws_jwk_rfc7638_fingerprint} + + [A] 'function int lws_jwk_save(lws_jwk*, const char*)' {lws_jwk_save} + + [A] 'function int lws_jwk_strdup_meta(lws_jwk*, enum_jwk_meta_tok, const char*, int)' {lws_jwk_strdup_meta} + + [A] 'function int lws_jws_alloc_element(lws_jws_map*, int, char*, int*, size_t, size_t)' {lws_jws_alloc_element} + + [A] 'function int lws_jws_b64_compact_map(const char*, int, lws_jws_map*)' {lws_jws_b64_compact_map} + + [A] 'function int lws_jws_base64_enc(const char*, size_t, char*, size_t)' {lws_jws_base64_enc} + + [A] 'function int lws_jws_compact_decode(const char*, int, lws_jws_map*, lws_jws_map*, char*, int*)' {lws_jws_compact_decode} + + [A] 'function int lws_jws_compact_encode(lws_jws_map*, const lws_jws_map*, char*, int*)' {lws_jws_compact_encode} + + [A] 'function void lws_jws_destroy(lws_jws*)' {lws_jws_destroy} + + [A] 'function int lws_jws_dup_element(lws_jws_map*, int, char*, int*, void*, size_t, size_t)' {lws_jws_dup_element} + + [A] 'function int lws_jws_encode_b64_element(lws_jws_map*, int, char*, int*, void*, size_t)' {lws_jws_encode_b64_element} + + [A] 'function int lws_jws_encode_section(const char*, size_t, int, char**, char*)' {lws_jws_encode_section} + + [A] 'function void lws_jws_init(lws_jws*, lws_jwk*, lws_context*)' {lws_jws_init} + + [A] 'function int lws_jws_parse_jose(lws_jose*, const char*, int, char*, int*)' {lws_jws_parse_jose} + + [A] 'function int lws_jws_randomize_element(lws_context*, lws_jws_map*, int, char*, int*, size_t, size_t)' {lws_jws_randomize_element} + + [A] 'function int lws_jws_sig_confirm(lws_jws_map*, lws_jws_map*, lws_jwk*, lws_context*)' {lws_jws_sig_confirm} + + [A] 'function int lws_jws_sig_confirm_compact(lws_jws_map*, lws_jwk*, lws_context*, char*, int*)' {lws_jws_sig_confirm_compact} + + [A] 'function int lws_jws_sig_confirm_compact_b64(const char*, size_t, lws_jws_map*, lws_jwk*, lws_context*, char*, int*)' {lws_jws_sig_confirm_compact_b64} + + [A] 'function int lws_jws_sig_confirm_compact_b64_map(lws_jws_map*, lws_jwk*, lws_context*, char*, int*)' {lws_jws_sig_confirm_compact_b64_map} + + [A] 'function int lws_jws_sig_confirm_json(const char*, size_t, lws_jws*, lws_jwk*, lws_context*, char*, int*)' {lws_jws_sig_confirm_json} + + [A] 'function int lws_jws_sign_from_b64(lws_jose*, lws_jws*, char*, size_t)' {lws_jws_sign_from_b64} + + [A] 'function int lws_jws_write_compact(lws_jws*, char*, size_t)' {lws_jws_write_compact} + + [A] 'function int lws_jws_write_flattened_json(lws_jws*, char*, size_t)' {lws_jws_write_flattened_json} + + [A] 'function void lws_list_ptr_insert(lws_list_ptr*, lws_list_ptr*, lws_list_ptr_sort_func_t)' {lws_list_ptr_insert} + + [A] 'function lws_usec_t lws_now_usecs()' {lws_now_usecs} + + [A] 'function int lws_open(const char*, int, ...)' {lws_open} + + [A] 'function int lws_parse_numeric_address(const char*, uint8_t*, size_t)' {lws_parse_numeric_address} + + [A] 'function int lws_plat_read_file(const char*, void*, int)' {lws_plat_read_file} + + [A] 'function int lws_plat_recommended_rsa_bits()' {lws_plat_recommended_rsa_bits} + + [A] 'function int lws_plat_write_cert(lws_vhost*, int, int, void*, int)' {lws_plat_write_cert} + + [A] 'function int lws_plat_write_file(const char*, void*, int)' {lws_plat_write_file} + + [A] 'function int lws_pvo_get_str(void*, const char*, const char**)' {lws_pvo_get_str} + + [A] 'function const lws_protocol_vhost_options* lws_pvo_search(const lws_protocol_vhost_options*, const char*)' {lws_pvo_search} + + [A] 'function int lws_raw_transaction_completed(lws*)' {lws_raw_transaction_completed} + + [A] 'function unsigned int lws_retry_get_delay_ms(lws_context*, const lws_retry_bo_t*, uint16_t*, char*)' {lws_retry_get_delay_ms} + + [A] 'function int lws_retry_sul_schedule(lws_context*, int, lws_sorted_usec_list_t*, const lws_retry_bo_t*, sul_cb_t, uint16_t*)' {lws_retry_sul_schedule} + + [A] 'function int lws_retry_sul_schedule_retry_wsi(lws*, lws_sorted_usec_list_t*, sul_cb_t, uint16_t*)' {lws_retry_sul_schedule_retry_wsi} + + [A] 'function void lws_ring_dump(lws_ring*, uint32_t*)' {lws_ring_dump} + + [A] 'function int lws_sa46_compare_ads(const lws_sockaddr46*, const lws_sockaddr46*)' {lws_sa46_compare_ads} + + [A] 'function int lws_sa46_parse_numeric_address(const char*, lws_sockaddr46*)' {lws_sa46_parse_numeric_address} + + [A] 'function int lws_sa46_write_numeric_address(lws_sockaddr46*, char*, size_t)' {lws_sa46_write_numeric_address} + + [A] 'function int lws_seq_check_wsi(lws_seq_t*, lws*)' {lws_seq_check_wsi} + + [A] 'function lws_seq_t* lws_seq_create(lws_seq_info_t*)' {lws_seq_create} + + [A] 'function void lws_seq_destroy(lws_seq_t**)' {lws_seq_destroy} + + [A] 'function lws_seq_t* lws_seq_from_user(void*)' {lws_seq_from_user} + + [A] 'function lws_context* lws_seq_get_context(lws_seq_t*)' {lws_seq_get_context} + + [A] 'function const char* lws_seq_name(lws_seq_t*)' {lws_seq_name} + + [A] 'function int lws_seq_queue_event(lws_seq_t*, lws_seq_events_t, void*, void*)' {lws_seq_queue_event} + + [A] 'function int lws_seq_timeout_us(lws_seq_t*, lws_usec_t)' {lws_seq_timeout_us} + + [A] 'function lws_usec_t lws_seq_us_since_creation(lws_seq_t*)' {lws_seq_us_since_creation} + + [A] 'function uint16_t lws_ser_ru16be(const uint8_t*)' {lws_ser_ru16be} + + [A] 'function uint32_t lws_ser_ru32be(const uint8_t*)' {lws_ser_ru32be} + + [A] 'function uint64_t lws_ser_ru64be(const uint8_t*)' {lws_ser_ru64be} + + [A] 'function void lws_ser_wu16be(uint8_t*, uint16_t)' {lws_ser_wu16be} + + [A] 'function void lws_ser_wu32be(uint8_t*, uint32_t)' {lws_ser_wu32be} + + [A] 'function void lws_ser_wu64be(uint8_t*, uint64_t)' {lws_ser_wu64be} + + [A] 'function void lws_set_opaque_user_data(lws*, void*)' {lws_set_opaque_user_data} + + [A] 'function int lws_set_socks(lws_vhost*, const char*)' {lws_set_socks} + + [A] 'function void lws_set_timer_usecs(lws*, lws_usec_t)' {lws_set_timer_usecs} + + [A] 'function lws_spa* lws_spa_create_via_info(lws*, const lws_spa_create_info_t*)' {lws_spa_create_via_info} + + [A] 'function void lws_state_reg_deregister(lws_state_notify_link_t*)' {lws_state_reg_deregister} + + [A] 'function void lws_state_reg_notifier(lws_state_manager_t*, lws_state_notify_link_t*)' {lws_state_reg_notifier} + + [A] 'function void lws_state_reg_notifier_list(lws_state_manager_t*, lws_state_notify_link_t* const*)' {lws_state_reg_notifier_list} + + [A] 'function int lws_state_transition(lws_state_manager_t*, int)' {lws_state_transition} + + [A] 'function int lws_state_transition_steps(lws_state_manager_t*, int)' {lws_state_transition_steps} + + [A] 'function int lws_strexp_expand(lws_strexp_t*, const char*, size_t, size_t*, size_t*)' {lws_strexp_expand} + + [A] 'function void lws_strexp_init(lws_strexp_t*, void*, lws_strexp_expand_cb, char*, size_t)' {lws_strexp_init} + + [A] 'function void lws_strexp_reset_out(lws_strexp_t*, char*, size_t)' {lws_strexp_reset_out} + + [A] 'function char* lws_strncpy(char*, const char*, size_t)' {lws_strncpy} + + [A] 'function void lws_sul_schedule(lws_context*, int, lws_sorted_usec_list_t*, sul_cb_t, lws_usec_t)' {lws_sul_schedule} + + [A] 'function void lws_system_blob_destroy(lws_system_blob_t*)' {lws_system_blob_destroy} + + [A] 'function void lws_system_blob_direct_set(lws_system_blob_t*, const uint8_t*, size_t)' {lws_system_blob_direct_set} + + [A] 'function int lws_system_blob_get(lws_system_blob_t*, uint8_t*, size_t*, size_t)' {lws_system_blob_get} + + [A] 'function int lws_system_blob_get_single_ptr(lws_system_blob_t*, const uint8_t**)' {lws_system_blob_get_single_ptr} + + [A] 'function size_t lws_system_blob_get_size(lws_system_blob_t*)' {lws_system_blob_get_size} + + [A] 'function int lws_system_blob_heap_append(lws_system_blob_t*, const uint8_t*, size_t)' {lws_system_blob_heap_append} + + [A] 'function void lws_system_blob_heap_empty(lws_system_blob_t*)' {lws_system_blob_heap_empty} + + [A] 'function lws_context* lws_system_context_from_system_mgr(lws_state_manager_t*)' {lws_system_context_from_system_mgr} + + [A] 'function lws_system_blob_t* lws_system_get_blob(lws_context*, lws_system_blob_item_t, int)' {lws_system_get_blob} + + [A] 'function const lws_system_ops_t* lws_system_get_ops(lws_context*)' {lws_system_get_ops} + + [A] 'function lws_state_manager_t* lws_system_get_state_manager(lws_context*)' {lws_system_get_state_manager} + + [A] 'function lws_threadpool* lws_threadpool_create(lws_context*, const lws_threadpool_create_args*, const char*, ...)' {lws_threadpool_create} + + [A] 'function int lws_threadpool_dequeue(lws*)' {lws_threadpool_dequeue} + + [A] 'function void lws_threadpool_destroy(lws_threadpool*)' {lws_threadpool_destroy} + + [A] 'function void lws_threadpool_dump(lws_threadpool*)' {lws_threadpool_dump} + + [A] 'function lws_threadpool_task* lws_threadpool_enqueue(lws_threadpool*, const lws_threadpool_task_args*, const char*, ...)' {lws_threadpool_enqueue} + + [A] 'function void lws_threadpool_finish(lws_threadpool*)' {lws_threadpool_finish} + + [A] 'function lws_threadpool_task_status lws_threadpool_task_status_wsi(lws*, lws_threadpool_task**, void**)' {lws_threadpool_task_status_wsi} + + [A] 'function void lws_threadpool_task_sync(lws_threadpool_task*, int)' {lws_threadpool_task_sync} + + [A] 'function int lws_timed_callback_vh_protocol(lws_vhost*, const lws_protocols*, int, int)' {lws_timed_callback_vh_protocol} + + [A] 'function int lws_timed_callback_vh_protocol_us(lws_vhost*, const lws_protocols*, int, lws_usec_t)' {lws_timed_callback_vh_protocol_us} + + [A] 'function int lws_timingsafe_bcmp(void*, void*, uint32_t)' {lws_timingsafe_bcmp} + + [A] 'function int lws_tls_acme_sni_cert_create(lws_vhost*, const char*, const char*)' {lws_tls_acme_sni_cert_create} + + [A] 'function int lws_tls_acme_sni_csr_create(lws_context*, const char**, uint8_t*, size_t, char**, size_t*)' {lws_tls_acme_sni_csr_create} + + [A] 'function int lws_tls_cert_updated(lws_context*, const char*, const char*, const char*, size_t, const char*, size_t)' {lws_tls_cert_updated} + + [A] 'function int lws_tls_client_vhost_extra_cert_mem(lws_vhost*, const uint8_t*, size_t)' {lws_tls_client_vhost_extra_cert_mem} + + [A] 'function int lws_tls_peer_cert_info(lws*, lws_tls_cert_info, lws_tls_cert_info_results*, size_t)' {lws_tls_peer_cert_info} + + [A] 'function int lws_tls_vhost_cert_info(lws_vhost*, lws_tls_cert_info, lws_tls_cert_info_results*, size_t)' {lws_tls_vhost_cert_info} + + [A] 'function lws_tokenize_elem lws_tokenize(lws_tokenize*)' {lws_tokenize} + + [A] 'function int lws_tokenize_cstr(lws_tokenize*, char*, size_t)' {lws_tokenize_cstr} + + [A] 'function void lws_tokenize_init(lws_tokenize*, const char*, int)' {lws_tokenize_init} + + [A] 'function void lws_validity_confirmed(lws*)' {lws_validity_confirmed} + + [A] 'function int lws_vbi_decode(void*, uint64_t*, size_t)' {lws_vbi_decode} + + [A] 'function int lws_vbi_encode(uint64_t, void*)' {lws_vbi_encode} + + [A] 'function int lws_write_numeric_address(const uint8_t*, int, char*, size_t)' {lws_write_numeric_address} + + [A] 'function int lws_wsi_tx_credit(lws*, char, int)' {lws_wsi_tx_credit} + + [A] 'function int lws_x509_create(lws_x509_cert**)' {lws_x509_create} + + [A] 'function void lws_x509_destroy(lws_x509_cert**)' {lws_x509_destroy} + + [A] 'function int lws_x509_info(lws_x509_cert*, lws_tls_cert_info, lws_tls_cert_info_results*, size_t)' {lws_x509_info} + + [A] 'function int lws_x509_jwk_privkey_pem(lws_jwk*, void*, size_t, const char*)' {lws_x509_jwk_privkey_pem} + + [A] 'function int lws_x509_parse_from_pem(lws_x509_cert*, void*, size_t)' {lws_x509_parse_from_pem} + + [A] 'function int lws_x509_public_to_jwk(lws_jwk*, lws_x509_cert*, const char*, int)' {lws_x509_public_to_jwk} + + [A] 'function int lws_x509_verify(lws_x509_cert*, lws_x509_cert*, const char*)' {lws_x509_verify} + + [A] 'function size_t lwsac_align(size_t)' {lwsac_align} + + [A] 'function int lwsac_cached_file(const char*, lwsac_cached_file_t*, size_t*)' {lwsac_cached_file} + + [A] 'function void lwsac_detach(lwsac**)' {lwsac_detach} + + [A] 'function int lwsac_extend(lwsac*, int)' {lwsac_extend} + + [A] 'function void lwsac_free(lwsac**)' {lwsac_free} + + [A] 'function lwsac* lwsac_get_next(lwsac*)' {lwsac_get_next} + + [A] 'function size_t lwsac_get_tail_pos(lwsac*)' {lwsac_get_tail_pos} + + [A] 'function void lwsac_info(lwsac*)' {lwsac_info} + + [A] 'function void lwsac_reference(lwsac*)' {lwsac_reference} + + [A] 'function uint8_t* lwsac_scan_extant(lwsac*, uint8_t*, size_t, int)' {lwsac_scan_extant} + + [A] 'function size_t lwsac_sizeof(int)' {lwsac_sizeof} + + [A] 'function uint64_t lwsac_total_alloc(lwsac*)' {lwsac_total_alloc} + + [A] 'function uint64_t lwsac_total_overhead(lwsac*)' {lwsac_total_overhead} + + [A] 'function void lwsac_unreference(lwsac**)' {lwsac_unreference} + + [A] 'function void* lwsac_use(lwsac**, size_t, size_t)' {lwsac_use} + + [A] 'function void* lwsac_use_backfill(lwsac**, size_t, size_t)' {lwsac_use_backfill} + + [A] 'function void lwsac_use_cached_file_detach(lwsac_cached_file_t*)' {lwsac_use_cached_file_detach} + + [A] 'function void lwsac_use_cached_file_end(lwsac_cached_file_t*)' {lwsac_use_cached_file_end} + + [A] 'function void lwsac_use_cached_file_start(lwsac_cached_file_t)' {lwsac_use_cached_file_start} + + [A] 'function void* lwsac_use_zero(lwsac**, size_t, size_t)' {lwsac_use_zero} + + [A] 'function void lwsl_emit_stderr_notimestamp(int, const char*)' {lwsl_emit_stderr_notimestamp} + + [A] 'function int lwsws_get_config_globals(lws_context_creation_info*, const char*, char**, int*)' {lwsws_get_config_globals} + + [A] 'function int lwsws_get_config_vhosts(lws_context*, lws_context_creation_info*, const char*, char**, int*)' {lwsws_get_config_vhosts} + + + +19 functions with some indirect sub-type change: + + + + [C]'function int _lws_plat_service_tsi(lws_context*, int, int)' at unix-service.c:68:1 has some indirect sub-type changes: + + parameter 1 of type 'lws_context*' has sub-type changes: + + in pointed to type 'struct lws_context' at private-lib-core.h:303:1: + + type size changed from 46272 to 11392 (in bits) + + 9 data member deletions: + + 'time_t lws_context::last_timeout_check_s', at offset 0 (in bits) at private-libwebsockets.h:1017:1 + + + + 'unsigned int lws_context::ssl_gate_accepts', at offset 26 (in bits) at private-libwebsockets.h:1124:1 + + + + 'lws_conn_stats lws_context::conn_stats', at offset 42752 (in bits) at private-libwebsockets.h:1029:1 + + + + 'pthread_mutex_t lws_context::lock', at offset 43392 (in bits) at private-libwebsockets.h:1031:1 + + + + 'int lws_context::lock_depth', at offset 43776 (in bits) at private-libwebsockets.h:1032:1 + + + + 'lws_plugin* lws_context::plugin_list', at offset 44032 (in bits) at private-libwebsockets.h:1049:1 + + + + 'int lws_context::started_with_parent', at offset 45600 (in bits) at private-libwebsockets.h:1099:1 + + + + 'volatile int lws_context::service_tid', at offset 46080 (in bits) at private-libwebsockets.h:1132:1 + + + + 'int lws_context::service_tid_detected', at offset 46112 (in bits) at private-libwebsockets.h:1133:1 + + + + 26 data member insertions: + + 'unsigned int lws_context::policy_updated', at offset 20 (in bits) at private-lib-core.h:511:1 + + 'unsigned int lws_context::max_fds_unrelated_to_ulimit', at offset 21 (in bits) at private-lib-core.h:510:1 + + 'unsigned int lws_context::finalize_destroy_after_internal_loops_stopped', at offset 22 (in bits) at private-lib-core.h:509:1 + + 'unsigned int lws_context::done_protocol_destroy_cb', at offset 23 (in bits) at private-lib-core.h:508:1 + + 'unsigned int lws_context::being_destroyed2', at offset 27 (in bits) at private-lib-core.h:504:1 + + 'unsigned int lws_context::inside_context_destroy', at offset 30 (in bits) at private-lib-core.h:501:1 + + 'lws_system_blob_t lws_context::system_blobs[8]', at offset 2304 (in bits) at private-lib-core.h:316:1 + + 'lws_retry_bo_t lws_context::default_retry', at offset 6976 (in bits) at private-lib-core.h:320:1 + + 'lws_sorted_usec_list_t lws_context::sul_system_state', at offset 7168 (in bits) at private-lib-core.h:321:1 + + 'http2_settings lws_context::set', at offset 7488 (in bits) at private-lib-core.h:328:1 + + 'lws_context_tls lws_context::tls', at offset 7808 (in bits) at private-lib-core.h:353:1 + + 'lws_state_manager_t lws_context::mgr_system', at offset 8448 (in bits) at private-lib-core.h:368:1 + + 'lws_state_notify_link_t lws_context::protocols_notify', at offset 8896 (in bits) at private-lib-core.h:369:1 + + 'lws_vhost* lws_context::no_listener_vhost_list', at offset 9280 (in bits) at private-lib-core.h:378:1 + + 'lws_vhost* lws_context::vhost_system', at offset 9408 (in bits) at private-lib-core.h:380:1 + + 'lws_event_loop_ops* lws_context::event_loop_ops', at offset 9536 (in bits) at private-lib-core.h:386:1 + + 'const lws_tls_ops* lws_context::tls_ops', at offset 9600 (in bits) at private-lib-core.h:390:1 + + 'lws_context** lws_context::pcontext_finalize', at offset 9792 (in bits) at private-lib-core.h:417:1 + + 'const char* lws_context::username', at offset 9856 (in bits) at private-lib-core.h:418:1 + + 'const char* lws_context::groupname', at offset 9920 (in bits) at private-lib-core.h:418:1 + + 'lws_threadpool* lws_context::tp_list_head', at offset 10048 (in bits) at private-lib-core.h:431:1 + + 'const lws_system_ops_t* lws_context::system_ops', at offset 10112 (in bits) at private-lib-core.h:440:1 + + 'void (void*, int)* lws_context::eventlib_signal_cb', at offset 10496 (in bits) at private-lib-core.h:456:1 + + 'int lws_context::count_event_loop_static_asset_handles', at offset 10784 (in bits) at private-lib-core.h:475:1 + + 'uint8_t lws_context::udp_loss_sim_tx_pc', at offset 11320 (in bits) at private-lib-core.h:524:1 + + 'uint8_t lws_context::udp_loss_sim_rx_pc', at offset 11328 (in bits) at private-lib-core.h:525:1 + + 43 data member changes: + + 'unsigned int lws_context::protocol_init_done' offset changed from 27 to 25 (in bits) (by -2 bits) + + 'unsigned int lws_context::requested_kill' offset changed from 28 to 26 (in bits) (by -2 bits) + + 'unsigned int lws_context::being_destroyed1' offset changed from 29 to 28 (in bits) (by -1 bits) + + 'unsigned int lws_context::being_destroyed' offset changed from 30 to 29 (in bits) (by -1 bits) + + 'time_t lws_context::last_ws_ping_pong_check_s' offset changed from 64 to 10688 (in bits) (by +10624 bits) + + 'time_t lws_context::time_up' offset changed from 128 to 10560 (in bits) (by +10432 bits) + + 'const lws_plat_file_ops* lws_context::fops' offset changed from 192 to 9728 (in bits) (by +9536 bits) + + 'lws_plat_file_ops lws_context::fops_platform' offset changed from 256 to 768 (in bits) (by +512 bits) + + 'lws_plat_file_ops lws_context::fops_zip' offset changed from 1024 to 1536 (in bits) (by +512 bits) + + type of 'lws_context_per_thread lws_context::pt[32]' changed: + + array element type 'struct lws_context_per_thread' changed: + + type size changed from 1280 to 3136 (in bits) + + 9 data member deletions: + + 'lws* lws_context_per_thread::rx_draining_ext_list', at offset 448 (in bits) at private-libwebsockets.h:801:1 + + + + 'lws* lws_context_per_thread::tx_draining_ext_list', at offset 512 (in bits) at private-libwebsockets.h:802:1 + + + + 'void* lws_context_per_thread::http_header_data', at offset 640 (in bits) at private-libwebsockets.h:810:1 + + + + 'allocated_headers* lws_context_per_thread::ah_list', at offset 704 (in bits) at private-libwebsockets.h:811:1 + + + + 'int lws_context_per_thread::ah_wait_list_length', at offset 832 (in bits) at private-libwebsockets.h:813:1 + + + + 'lws* lws_context_per_thread::pending_read_list', at offset 896 (in bits) at private-libwebsockets.h:815:1 + + + + 'uint32_t lws_context_per_thread::ah_pool_length', at offset 1184 (in bits) at private-libwebsockets.h:850:1 + + + + 'short int lws_context_per_thread::ah_count_in_use', at offset 1216 (in bits) at private-libwebsockets.h:852:1 + + + + 'unsigned char lws_context_per_thread::lock_depth', at offset 1240 (in bits) at private-libwebsockets.h:854:1 + + + + 21 data member insertions: + + 'unsigned char lws_context_per_thread::is_destroyed', at offset 2 (in bits) at private-lib-core-net.h:479:1 + + 'unsigned char lws_context_per_thread::destroy_self', at offset 3 (in bits) at private-lib-core-net.h:478:1 + + 'unsigned char lws_context_per_thread::event_loop_destroy_processing_done', at offset 4 (in bits) at private-lib-core-net.h:477:1 + + 'unsigned char lws_context_per_thread::event_loop_foreign', at offset 5 (in bits) at private-lib-core-net.h:476:1 + + 'unsigned char lws_context_per_thread::inside_lws_service', at offset 6 (in bits) at private-lib-core-net.h:475:1 + + 'unsigned char lws_context_per_thread::inside_service', at offset 7 (in bits) at private-lib-core-net.h:474:1 + + 'lws_dll2_owner lws_context_per_thread::seq_owner', at offset 192 (in bits) at private-lib-core-net.h:359:1 + + 'lws_dll2_owner_t lws_context_per_thread::attach_owner', at offset 384 (in bits) at private-lib-core-net.h:360:1 + + 'lws_sorted_usec_list_t lws_context_per_thread::sul_ah_lifecheck', at offset 1088 (in bits) at private-lib-core-net.h:377:1 + + 'lws_sorted_usec_list_t lws_context_per_thread::sul_tls', at offset 1408 (in bits) at private-lib-core-net.h:380:1 + + 'lws_sorted_usec_list_t lws_context_per_thread::sul_plat', at offset 1728 (in bits) at private-lib-core-net.h:383:1 + + 'lws_pt_tls lws_context_per_thread::tls', at offset 2048 (in bits) at private-lib-core-net.h:398:1 + + 'lws* lws_context_per_thread::fake_wsi', at offset 2240 (in bits) at private-lib-core-net.h:400:1 + + 'lws_context* lws_context_per_thread::context', at offset 2304 (in bits) at private-lib-core-net.h:402:1 + + 'volatile lws_foreign_thread_pollfd* volatile lws_context_per_thread::foreign_pfd_list', at offset 2496 (in bits) at private-lib-core-net.h:412:1 + + 'lws* lws_context_per_thread::pipe_wsi', at offset 2624 (in bits) at private-lib-core-net.h:418:1 + + 'lws_pt_role_http lws_context_per_thread::http', at offset 2688 (in bits) at private-lib-core-net.h:426:1 + + 'volatile int lws_context_per_thread::service_tid', at offset 3040 (in bits) at private-lib-core-net.h:466:1 + + 'int lws_context_per_thread::service_tid_detected', at offset 3072 (in bits) at private-lib-core-net.h:467:1 + + 'volatile unsigned char lws_context_per_thread::inside_poll', at offset 3104 (in bits) at private-lib-core-net.h:469:1 + + 'volatile unsigned char lws_context_per_thread::foreign_spinlock', at offset 3112 (in bits) at private-lib-core-net.h:470:1 + + 6 data member changes: + + 'pollfd* lws_context_per_thread::fds' offset changed from 384 to 2432 (in bits) (by +2048 bits) + + 'unsigned long int lws_context_per_thread::count_conns' offset changed from 960 to 2944 (in bits) (by +1984 bits) + + 'unsigned char* lws_context_per_thread::serv_buf' offset changed from 1024 to 2368 (in bits) (by +1344 bits) + + 'lws_sockfd_type lws_context_per_thread::dummy_pipe_fds[2]' offset changed from 1088 to 2560 (in bits) (by +1472 bits) + + 'unsigned int lws_context_per_thread::fds_count' offset changed from 1152 to 3008 (in bits) (by +1856 bits) + + 'unsigned char lws_context_per_thread::tid' offset changed from 1232 to 3120 (in bits) (by +1888 bits) + + 3 data member changes: + + type of 'pthread_mutex_t lws_context_per_thread::lock' changed: + + entity changed from 'typedef pthread_mutex_t' to 'struct lws_dll2_owner' at lws-dll2.h:261:1 + + type size changed from 384 to 192 (in bits) + + and name of 'lws_context_per_thread::lock' changed to 'lws_context_per_thread::dll_buflist_owner' at private-lib-core-net.h:358:1 + + type of 'lws* lws_context_per_thread::timeout_list' changed: + + entity changed from 'lws*' to 'struct lws_dll2_owner' at lws-dll2.h:261:1 + + type size changed from 64 to 192 (in bits) + + and name of 'lws_context_per_thread::timeout_list' changed to 'lws_context_per_thread::pt_sul_owner' at private-lib-core-net.h:371:1 + + type of 'lws* lws_context_per_thread::ah_wait_list' changed: + + entity changed from 'lws*' to 'typedef lws_sorted_usec_list_t' at lws-timeout-timer.h:205:1 + + type size changed from 64 to 320 (in bits) + + and name of 'lws_context_per_thread::ah_wait_list' changed to 'lws_context_per_thread::sul_seq_heartbeat' at private-lib-core-net.h:374:1 + + type name changed from 'lws_context_per_thread[32]' to 'lws_context_per_thread[1]' + + array type size changed from 40960 to 3136 + + array type subrange 1 changed length from 32 to 1 + + and offset changed from 1792 to 3840 (in bits) (by +2048 bits) + + type of 'lws** lws_context::lws_lookup' changed: + + in pointed to type 'lws*': + + in pointed to type 'struct lws' at private-lib-core-net.h:642:1: + + type size changed from 4864 to 8256 (in bits) + + 19 data member deletions: + + 'unsigned int lws::extension_data_pending', at offset 2 (in bits) at private-libwebsockets.h:1960:1 + + + + 'time_t lws::pending_timeout_limit', at offset 2880 (in bits) at private-libwebsockets.h:1850:1 + + + + 'lws** lws::same_vh_protocol_prev', at offset 3328 (in bits) at private-libwebsockets.h:1863:1 + + + + 'lws* lws::same_vh_protocol_next', at offset 3392 (in bits) at private-libwebsockets.h:1863:1 + + + + 'unsigned char* lws::rxflow_buffer', at offset 3712 (in bits) at private-libwebsockets.h:1873:1 + + + + 'unsigned char* lws::trunc_alloc', at offset 3776 (in bits) at private-libwebsockets.h:1875:1 + + + + 'SSL* lws::ssl', at offset 4096 (in bits) at private-libwebsockets.h:1887:1 + + + + 'BIO* lws::client_bio', at offset 4160 (in bits) at private-libwebsockets.h:1888:1 + + + + 'lws* lws::pending_read_list_prev', at offset 4224 (in bits) at private-libwebsockets.h:1889:1 + + + + 'uint32_t lws::rxflow_len', at offset 4416 (in bits) at private-libwebsockets.h:1908:1 + + + + 'uint32_t lws::rxflow_pos', at offset 4448 (in bits) at private-libwebsockets.h:1909:1 + + + + 'unsigned int lws::trunc_alloc_len', at offset 4480 (in bits) at private-libwebsockets.h:1910:1 + + + + 'unsigned int lws::trunc_offset', at offset 4512 (in bits) at private-libwebsockets.h:1911:1 + + + + 'unsigned int lws::trunc_len', at offset 4544 (in bits) at private-libwebsockets.h:1912:1 + + + + 'unsigned char lws::count_act_ext', at offset 4704 (in bits) at private-libwebsockets.h:1982:1 + + + + 'uint8_t lws::ietf_spec_revision', at offset 4712 (in bits) at private-libwebsockets.h:1984:1 + + + + 'char lws::mode', at offset 4720 (in bits) at private-libwebsockets.h:1985:1 + + + + 'char lws::state', at offset 4728 (in bits) at private-libwebsockets.h:1986:1 + + + + 'char lws::state_pre_close', at offset 4736 (in bits) at private-libwebsockets.h:1987:1 + + + + 61 data member insertions: + + 'unsigned int lws::client_suppress_CONNECTION_ERROR', at offset 3 (in bits) at private-lib-core-net.h:825:1 + + 'unsigned int lws::client_no_follow_redirect', at offset 4 (in bits) at private-lib-core-net.h:824:1 + + 'unsigned int lws::client_subsequent_mime_part', at offset 5 (in bits) at private-lib-core-net.h:823:1 + + 'unsigned int lws::close_needs_ack', at offset 5 (in bits) at private-lib-core-net.h:785:1 + + 'unsigned int lws::client_mux_migrated', at offset 6 (in bits) at private-lib-core-net.h:822:1 + + 'unsigned int lws::client_mux_substream', at offset 7 (in bits) at private-lib-core-net.h:821:1 + + 'unsigned int lws::told_event_loop_closed', at offset 7 (in bits) at private-lib-core-net.h:783:1 + + 'unsigned int lws::client_h2_alpn', at offset 8 (in bits) at private-lib-core-net.h:820:1 + + 'unsigned int lws::client_pipeline', at offset 9 (in bits) at private-lib-core-net.h:819:1 + + 'unsigned int lws::interpreting', at offset 10 (in bits) at private-lib-core-net.h:780:1 + + 'unsigned int lws::redirected_to_get', at offset 10 (in bits) at private-lib-core-net.h:818:1 + + 'unsigned int lws::keepalive_active', at offset 12 (in bits) at private-lib-core-net.h:816:1 + + 'unsigned int lws::transaction_from_pipeline_queue', at offset 13 (in bits) at private-lib-core-net.h:815:1 + + 'unsigned int lws::shadow', at offset 18 (in bits) at private-lib-core-net.h:805:1 + + 'unsigned int lws::outer_will_close', at offset 19 (in bits) at private-lib-core-net.h:804:1 + + 'unsigned int lws::could_have_pending', at offset 20 (in bits) at private-lib-core-net.h:803:1 + + 'unsigned int lws::do_broadcast', at offset 21 (in bits) at private-lib-core-net.h:770:1 + + 'unsigned int lws::skip_fallback', at offset 21 (in bits) at private-lib-core-net.h:801:1 + + 'unsigned int lws::validity_hup', at offset 22 (in bits) at private-lib-core-net.h:800:1 + + 'unsigned int lws::oom4', at offset 23 (in bits) at private-lib-core-net.h:799:1 + + 'unsigned int lws::do_bind', at offset 24 (in bits) at private-lib-core-net.h:798:1 + + 'unsigned int lws::h2_acked_settings', at offset 25 (in bits) at private-lib-core-net.h:766:1 + + 'unsigned int lws::proxied_ws_parent', at offset 25 (in bits) at private-lib-core-net.h:797:1 + + 'unsigned int lws::h1_ws_proxied', at offset 26 (in bits) at private-lib-core-net.h:796:1 + + 'unsigned int lws::h2_stream_carries_sse', at offset 26 (in bits) at private-lib-core-net.h:765:1 + + 'unsigned int lws::close_when_buffered_out_drained', at offset 27 (in bits) at private-lib-core-net.h:795:1 + + 'unsigned int lws::unix_skt', at offset 28 (in bits) at private-lib-core-net.h:794:1 + + 'unsigned int lws::protocol_bind_balance', at offset 29 (in bits) at private-lib-core-net.h:793:1 + + 'unsigned int lws::mux_substream', at offset 30 (in bits) at private-lib-core-net.h:761:1 + + 'unsigned int lws::event_pipe', at offset 31 (in bits) at private-lib-core-net.h:791:1 + + '_lws_h2_related lws::h2', at offset 3264 (in bits) at private-lib-core-net.h:649:1 + + 'lws_sorted_usec_list_t lws::sul_validity', at offset 4608 (in bits) at private-lib-core-net.h:682:1 + + 'lws_dll2 lws::dll_buflist', at offset 4928 (in bits) at private-lib-core-net.h:684:1 + + 'lws_dll2 lws::same_vh_protocol', at offset 5120 (in bits) at private-lib-core-net.h:685:1 + + 'lws_dll2 lws::vh_awaiting_socket', at offset 5312 (in bits) at private-lib-core-net.h:686:1 + + 'lws_dll2 lws::dll_cli_active_conns', at offset 5504 (in bits) at private-lib-core-net.h:692:1 + + 'lws_dll2 lws::dll2_cli_txn_queue', at offset 5696 (in bits) at private-lib-core-net.h:693:1 + + 'lws_dll2_owner lws::dll2_cli_txn_queue_owner', at offset 5888 (in bits) at private-lib-core-net.h:694:1 + + 'const lws_role_ops* lws::role_ops', at offset 6400 (in bits) at private-lib-core-net.h:707:1 + + 'lws_sequencer* lws::seq', at offset 6528 (in bits) at private-lib-core-net.h:709:1 + + 'const lws_retry_bo_t* lws::retry_policy', at offset 6592 (in bits) at private-lib-core-net.h:710:1 + + 'lws_threadpool_task* lws::tp_task', at offset 6656 (in bits) at private-lib-core-net.h:713:1 + + 'lws_udp* lws::udp', at offset 6720 (in bits) at private-lib-core-net.h:721:1 + + 'client_info_stash* lws::stash', at offset 6784 (in bits) at private-lib-core-net.h:724:1 + + 'char* lws::cli_hostname_copy', at offset 6848 (in bits) at private-lib-core-net.h:725:1 + + 'const addrinfo* lws::dns_results', at offset 6912 (in bits) at private-lib-core-net.h:726:1 + + 'const addrinfo* lws::dns_results_next', at offset 6976 (in bits) at private-lib-core-net.h:727:1 + + 'void* lws::opaque_user_data', at offset 7168 (in bits) at private-lib-core-net.h:731:1 + + 'lws_buflist* lws::buflist', at offset 7232 (in bits) at private-lib-core-net.h:733:1 + + 'lws_buflist* lws::buflist_out', at offset 7296 (in bits) at private-lib-core-net.h:734:1 + + 'lws_lws_tls lws::tls', at offset 7360 (in bits) at private-lib-core-net.h:737:1 + + 'lws_wsi_state_t lws::wsistate', at offset 7776 (in bits) at private-lib-core-net.h:747:1 + + 'lws_wsi_state_t lws::wsistate_pre_close', at offset 7808 (in bits) at private-lib-core-net.h:748:1 + + 'int lws::flags', at offset 7904 (in bits) at private-lib-core-net.h:756:1 + + 'uint16_t lws::ocport', at offset 8032 (in bits) at private-lib-core-net.h:834:1 + + 'uint16_t lws::retry', at offset 8064 (in bits) at private-lib-core-net.h:835:1 + + 'uint8_t lws::bound_vhost_index', at offset 8136 (in bits) at private-lib-core-net.h:846:1 + + 'uint8_t lws::lsp_channel', at offset 8144 (in bits) at private-lib-core-net.h:847:1 + + 'uint8_t lws::addrinfo_idx', at offset 8160 (in bits) at private-lib-core-net.h:853:1 + + 'uint8_t lws::sys_tls_client_cert', at offset 8168 (in bits) at private-lib-core-net.h:854:1 + + 'uint8_t lws::immortal_substream_count', at offset 8184 (in bits) at private-lib-core-net.h:862:1 + + 47 data member changes: + + 'unsigned int lws::client_http_body_pending' offset changed from 3 to 14 (in bits) (by +11 bits) + + 'unsigned int lws::client_rx_avail' offset changed from 4 to 15 (in bits) (by +11 bits) + + 'unsigned int lws::chunked' offset changed from 5 to 16 (in bits) (by +11 bits) + + 'unsigned int lws::do_ws' offset changed from 6 to 17 (in bits) (by +11 bits) + + 'unsigned int lws::rxflow_will_be_applied' offset changed from 7 to 7968 (in bits) (by +7961 bits) + + 'unsigned int lws::seen_zero_length_recv' offset changed from 8 to 1 (in bits) (by -7 bits) + + 'unsigned int lws::cgi_stdout_zero_length' offset changed from 9 to 2 (in bits) (by -7 bits) + + 'unsigned int lws::parent_pending_cb_on_writable' offset changed from 10 to 3 (in bits) (by -7 bits) + + 'unsigned int lws::ipv6' offset changed from 12 to 4 (in bits) (by -8 bits) + + 'unsigned int lws::waiting_to_send_close_frame' offset changed from 13 to 6 (in bits) (by -7 bits) + + 'unsigned int lws::told_user_closed' offset changed from 14 to 8 (in bits) (by -6 bits) + + 'unsigned int lws::already_did_cce' offset changed from 15 to 9 (in bits) (by -6 bits) + + 'unsigned int lws::sending_chunked' offset changed from 16 to 11 (in bits) (by -5 bits) + + 'unsigned int lws::favoured_pollin' offset changed from 17 to 12 (in bits) (by -5 bits) + + 'unsigned int lws::cache_intermediaries' offset changed from 18 to 13 (in bits) (by -5 bits) + + 'unsigned int lws::cache_revalidate' offset changed from 19 to 14 (in bits) (by -5 bits) + + 'unsigned int lws::cache_reuse' offset changed from 20 to 15 (in bits) (by -5 bits) + + 'unsigned int lws::conn_stat_done' offset changed from 21 to 16 (in bits) (by -5 bits) + + 'unsigned int lws::rxflow_change_to' offset changed from 23 to 17 (in bits) (by -6 bits) + + type of 'volatile unsigned int lws::leave_pollout_active' changed: + + 'volatile unsigned int' changed to 'volatile char' + + and offset changed from 25 to 8200 (in bits) (by +8175 bits) + + 'unsigned int lws::socket_is_permanently_unusable' offset changed from 25 to 19 (in bits) (by -6 bits) + + type of 'volatile unsigned int lws::handling_pollout' changed: + + 'volatile unsigned int' changed to 'volatile char' + + and offset changed from 26 to 8192 (in bits) (by +8166 bits) + + 'unsigned int lws::user_space_externally_allocated' offset changed from 26 to 20 (in bits) (by -6 bits) + + 'unsigned int lws::listener' offset changed from 27 to 23 (in bits) (by -4 bits) + + 'unsigned int lws::seen_nonpseudoheader' offset changed from 28 to 24 (in bits) (by -4 bits) + + 'lws_context* lws::context' offset changed from 2944 to 6080 (in bits) (by +3136 bits) + + type of 'lws_vhost* lws::vhost' changed: + + in pointed to type 'struct lws_vhost' at private-lib-core-net.h:511:1: + + type size changed from 4160 to 8192 (in bits) + + 11 data member deletions: + + 'char lws_vhost::http_proxy_address[128]', at offset 0 (in bits) at private-libwebsockets.h:902:1 + + + + 'unsigned int lws_vhost::user_supplied_ssl_ctx', at offset 31 (in bits) at private-libwebsockets.h:964:1 + + + + 'lws_conn_stats lws_vhost::conn_stats', at offset 2048 (in bits) at private-libwebsockets.h:917:1 + + + + 'const lws_http_mount* lws_vhost::mount_list', at offset 2816 (in bits) at private-libwebsockets.h:920:1 + + + + 'lws** lws_vhost::same_vh_protocol_list', at offset 3392 (in bits) at private-libwebsockets.h:931:1 + + + + 'SSL_CTX* lws_vhost::ssl_ctx', at offset 3456 (in bits) at private-libwebsockets.h:933:1 + + + + 'SSL_CTX* lws_vhost::ssl_client_ctx', at offset 3520 (in bits) at private-libwebsockets.h:934:1 + + + + 'unsigned int lws_vhost::http_proxy_port', at offset 3744 (in bits) at private-libwebsockets.h:945:1 + + + + 'int lws_vhost::ssl_info_event_mask', at offset 4000 (in bits) at private-libwebsockets.h:956:1 + + + + 'int lws_vhost::use_ssl', at offset 4032 (in bits) at private-libwebsockets.h:962:1 + + + + 'int lws_vhost::allow_non_ssl_on_ssl_port', at offset 4064 (in bits) at private-libwebsockets.h:963:1 + + + + 21 data member insertions: + + 'uint8_t lws_vhost::from_ss_policy', at offset 4 (in bits) at private-lib-core-net.h:603:1 + + 'uint8_t lws_vhost::allocated_vhost_protocols', at offset 7 (in bits) at private-lib-core-net.h:600:1 + + 'lws_vhost_role_h2 lws_vhost::h2', at offset 1024 (in bits) at private-lib-core-net.h:521:1 + + 'lws_vhost_role_http lws_vhost::http', at offset 1344 (in bits) at private-lib-core-net.h:524:1 + + 'char lws_vhost::socks_proxy_address[128]', at offset 2560 (in bits) at private-lib-core-net.h:531:1 + + 'char lws_vhost::socks_password[96]', at offset 4352 (in bits) at private-lib-core-net.h:533:1 + + 'const lws_retry_bo_t* lws_vhost::retry_policy', at offset 5312 (in bits) at private-lib-core-net.h:547:1 + + 'const char* lws_vhost::listen_accept_role', at offset 5568 (in bits) at private-lib-core-net.h:552:1 + + 'const char* lws_vhost::listen_accept_protocol', at offset 5632 (in bits) at private-lib-core-net.h:553:1 + + 'const char* lws_vhost::unix_socket_perms', at offset 5696 (in bits) at private-lib-core-net.h:554:1 + + 'void (lws_vhost*, void*)* lws_vhost::finalize', at offset 5760 (in bits) at private-lib-core-net.h:556:1 + + 'void* lws_vhost::finalize_arg', at offset 5824 (in bits) at private-lib-core-net.h:557:1 + + 'lws_dll2_owner* lws_vhost::same_vh_protocol_owner', at offset 6144 (in bits) at private-lib-core-net.h:563:1 + + 'lws_vhost* lws_vhost::no_listener_vhost_list', at offset 6208 (in bits) at private-lib-core-net.h:564:1 + + 'lws_dll2_owner lws_vhost::abstract_instances_owner', at offset 6272 (in bits) at private-lib-core-net.h:565:1 + + 'lws_dll2_owner lws_vhost::dll_cli_active_conns_owner', at offset 6464 (in bits) at private-lib-core-net.h:568:1 + + 'lws_dll2_owner lws_vhost::vh_awaiting_socket_owner', at offset 6656 (in bits) at private-lib-core-net.h:570:1 + + 'lws_vhost_tls lws_vhost::tls', at offset 6848 (in bits) at private-lib-core-net.h:573:1 + + 'lws_timed_vh_protocol* lws_vhost::timed_vh_protocol_list', at offset 7680 (in bits) at private-lib-core-net.h:576:1 + + 'unsigned int lws_vhost::socks_proxy_port', at offset 7872 (in bits) at private-lib-core-net.h:585:1 + + 'int lws_vhost::count_bound_wsi', at offset 8096 (in bits) at private-lib-core-net.h:594:1 + + 24 data member changes: + + type of 'unsigned int lws_vhost::being_destroyed' changed: + + entity changed from 'unsigned int' to compatible type 'typedef uint8_t' at stdint-uintn.h:24:1 + + type name changed from 'unsigned int' to 'unsigned char' + + type size changed from 32 to 8 (in bits) + + and offset changed from 29 to 5 (in bits) (by -24 bits) + + type of 'unsigned int lws_vhost::created_vhost_protocols' changed: + + entity changed from 'unsigned int' to compatible type 'typedef uint8_t' at stdint-uintn.h:24:1 + + type name changed from 'unsigned int' to 'unsigned char' + + type size changed from 32 to 8 (in bits) + + and offset changed from 30 to 6 (in bits) (by -24 bits) + + 'char lws_vhost::proxy_basic_auth_token[128]' offset changed from 1024 to 0 (in bits) (by -1024 bits) + + 'lws_context* lws_vhost::context' offset changed from 2688 to 5184 (in bits) (by +2496 bits) + + 'lws_vhost* lws_vhost::vhost_next' offset changed from 2752 to 5248 (in bits) (by +2496 bits) + + 'lws* lws_vhost::lserv_wsi' offset changed from 2880 to 5376 (in bits) (by +2496 bits) + + 'const char* lws_vhost::name' offset changed from 2944 to 5440 (in bits) (by +2496 bits) + + 'const char* lws_vhost::iface' offset changed from 3008 to 5504 (in bits) (by +2496 bits) + + 'int lws_vhost::bind_iface' offset changed from 3072 to 7840 (in bits) (by +4768 bits) + + 'const lws_protocols* lws_vhost::protocols' offset changed from 3136 to 5888 (in bits) (by +2752 bits) + + 'void** lws_vhost::protocol_vh_privs' offset changed from 3200 to 5952 (in bits) (by +2752 bits) + + 'const lws_protocol_vhost_options* lws_vhost::pvo' offset changed from 3264 to 6016 (in bits) (by +2752 bits) + + 'const lws_protocol_vhost_options* lws_vhost::headers' offset changed from 3328 to 6080 (in bits) (by +2752 bits) + + 'void* lws_vhost::user' offset changed from 3648 to 7744 (in bits) (by +4096 bits) + + 'int lws_vhost::listen_port' offset changed from 3712 to 7808 (in bits) (by +4096 bits) + + type of 'unsigned int lws_vhost::options' changed: + + entity changed from 'unsigned int' to compatible type 'typedef uint64_t' at stdint-uintn.h:27:1 + + type name changed from 'unsigned int' to 'unsigned long int' + + type size changed from 32 to 64 (in bits) + + and offset changed from 3776 to 5120 (in bits) (by +1344 bits) + + 'int lws_vhost::count_protocols' offset changed from 3808 to 7904 (in bits) (by +4096 bits) + + 'int lws_vhost::ka_time' offset changed from 3840 to 7936 (in bits) (by +4096 bits) + + 'int lws_vhost::ka_probes' offset changed from 3872 to 7968 (in bits) (by +4096 bits) + + 'int lws_vhost::ka_interval' offset changed from 3904 to 8000 (in bits) (by +4096 bits) + + 'int lws_vhost::keepalive_timeout' offset changed from 3936 to 8032 (in bits) (by +4096 bits) + + 'int lws_vhost::timeout_secs_ah_idle' offset changed from 3968 to 8064 (in bits) (by +4096 bits) + + 'unsigned char lws_vhost::default_protocol_index' offset changed from 4104 to 8136 (in bits) (by +4032 bits) + + 'unsigned char lws_vhost::raw_protocol_index' offset changed from 4112 to 8144 (in bits) (by +4032 bits) + + 1 data member change: + + type of 'const lws_extension* lws_vhost::extensions' changed: + + entity changed from 'const lws_extension*' to 'char[96]' + + type size changed from 64 to 768 (in bits) + + and name of 'lws_vhost::extensions' changed to 'lws_vhost::socks_user' at private-lib-core-net.h:532:1 + + and offset changed from 3008 to 6144 (in bits) (by +3136 bits) + + 'lws* lws::parent' offset changed from 3072 to 6208 (in bits) (by +3136 bits) + + 'lws* lws::child_list' offset changed from 3136 to 6272 (in bits) (by +3136 bits) + + 'lws* lws::sibling_list' offset changed from 3200 to 6336 (in bits) (by +3136 bits) + + type of 'const lws_protocols* lws::protocol' changed: + + in pointed to type 'const lws_protocols': + + in unqualified underlying type 'struct lws_protocols' at lws-protocols-plugins.h:44:1: + + type size hasn't changed + + 1 data member change: + + type of 'lws_callback_function* lws_protocols::callback' changed: + + in pointed to type 'typedef lws_callback_function' at lws-callbacks.h:879:1: + + underlying type 'function type int (lws*, enum lws_callback_reasons, void*, void*, typedef size_t)' changed: + + parameter 2 of type 'enum lws_callback_reasons' has sub-type changes: + + type size hasn't changed + + 1 enumerator deletion: + + 'lws_callback_reasons::LWS_CALLBACK_CHILD_WRITE_VIA_PARENT' value '68' + + + + 42 enumerator insertions: + + 'lws_callback_reasons::LWS_CALLBACK_EVENT_WAIT_CANCELLED' value '71' + + 'lws_callback_reasons::LWS_CALLBACK_VHOST_CERT_AGING' value '72' + + 'lws_callback_reasons::LWS_CALLBACK_TIMER' value '73' + + 'lws_callback_reasons::LWS_CALLBACK_VHOST_CERT_UPDATE' value '74' + + 'lws_callback_reasons::LWS_CALLBACK_CLIENT_CLOSED' value '75' + + 'lws_callback_reasons::LWS_CALLBACK_CLIENT_HTTP_DROP_PROTOCOL' value '76' + + 'lws_callback_reasons::LWS_CALLBACK_WS_SERVER_BIND_PROTOCOL' value '77' + + 'lws_callback_reasons::LWS_CALLBACK_WS_SERVER_DROP_PROTOCOL' value '78' + + 'lws_callback_reasons::LWS_CALLBACK_WS_CLIENT_BIND_PROTOCOL' value '79' + + 'lws_callback_reasons::LWS_CALLBACK_WS_CLIENT_DROP_PROTOCOL' value '80' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_SKT_BIND_PROTOCOL' value '81' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_SKT_DROP_PROTOCOL' value '82' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_FILE_BIND_PROTOCOL' value '83' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_FILE_DROP_PROTOCOL' value '84' + + 'lws_callback_reasons::LWS_CALLBACK_CLIENT_HTTP_BIND_PROTOCOL' value '85' + + 'lws_callback_reasons::LWS_CALLBACK_HTTP_CONFIRM_UPGRADE' value '86' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_PROXY_CLI_RX' value '89' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_PROXY_SRV_RX' value '90' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_PROXY_CLI_CLOSE' value '91' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_PROXY_SRV_CLOSE' value '92' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_PROXY_CLI_WRITEABLE' value '93' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_PROXY_SRV_WRITEABLE' value '94' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_PROXY_CLI_ADOPT' value '95' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_PROXY_SRV_ADOPT' value '96' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_PROXY_CLI_BIND_PROTOCOL' value '97' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_PROXY_SRV_BIND_PROTOCOL' value '98' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_PROXY_CLI_DROP_PROTOCOL' value '99' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_PROXY_SRV_DROP_PROTOCOL' value '100' + + 'lws_callback_reasons::LWS_CALLBACK_RAW_CONNECTED' value '101' + + 'lws_callback_reasons::LWS_CALLBACK_VERIFY_BASIC_AUTHORIZATION' value '102' + + 'lws_callback_reasons::LWS_CALLBACK_WSI_TX_CREDIT_GET' value '103' + + 'lws_callback_reasons::LWS_CALLBACK_MQTT_NEW_CLIENT_INSTANTIATED' value '200' + + 'lws_callback_reasons::LWS_CALLBACK_MQTT_IDLE' value '201' + + 'lws_callback_reasons::LWS_CALLBACK_MQTT_CLIENT_ESTABLISHED' value '202' + + 'lws_callback_reasons::LWS_CALLBACK_MQTT_SUBSCRIBED' value '203' + + 'lws_callback_reasons::LWS_CALLBACK_MQTT_CLIENT_WRITEABLE' value '204' + + 'lws_callback_reasons::LWS_CALLBACK_MQTT_CLIENT_RX' value '205' + + 'lws_callback_reasons::LWS_CALLBACK_MQTT_UNSUBSCRIBED' value '206' + + 'lws_callback_reasons::LWS_CALLBACK_MQTT_DROP_PROTOCOL' value '207' + + 'lws_callback_reasons::LWS_CALLBACK_MQTT_CLIENT_CLOSED' value '208' + + 'lws_callback_reasons::LWS_CALLBACK_MQTT_ACK' value '209' + + 'lws_callback_reasons::LWS_CALLBACK_MQTT_RESEND' value '210' + + + + + + and offset changed from 3264 to 6464 (in bits) (by +3200 bits) + + 'void* lws::user_space' offset changed from 3584 to 7040 (in bits) (by +3456 bits) + + 'void* lws::opaque_parent_data' offset changed from 3648 to 7104 (in bits) (by +3456 bits) + + 'lws_sock_file_fd_type lws::desc' offset changed from 4352 to 7744 (in bits) (by +3392 bits) + + 'int lws::position_in_fds_table' offset changed from 4384 to 7840 (in bits) (by +3456 bits) + + 'int lws::chunk_remaining' offset changed from 4576 to 7872 (in bits) (by +3296 bits) + + 'unsigned int lws::cache_secs' offset changed from 4608 to 7936 (in bits) (by +3328 bits) + + 'unsigned short int lws::c_port' offset changed from 4688 to 8048 (in bits) (by +3360 bits) + + 'char lws::lws_rx_parse_state' offset changed from 4744 to 8080 (in bits) (by +3336 bits) + + 'char lws::rx_frame_type' offset changed from 4752 to 8088 (in bits) (by +3336 bits) + + 'char lws::pending_timeout' offset changed from 4760 to 8096 (in bits) (by +3336 bits) + + 'char lws::tsi' offset changed from 4768 to 8104 (in bits) (by +3336 bits) + + 'char lws::protocol_interpret_idx' offset changed from 4776 to 8112 (in bits) (by +3336 bits) + + 'char lws::redirects' offset changed from 4784 to 8120 (in bits) (by +3336 bits) + + 'uint8_t lws::rxflow_bitmap' offset changed from 4792 to 8128 (in bits) (by +3336 bits) + + 'char lws::chunk_parser' offset changed from 4800 to 8152 (in bits) (by +3352 bits) + + 'char lws::reason_bf' offset changed from 4808 to 8176 (in bits) (by +3368 bits) + + 6 data member changes (5 filtered): + + type of 'u lws::u' changed: + + entity changed from 'union u' to 'struct _lws_http_mode_related' at private-lib-roles-http.h:217:1 + + type size changed from 2880 to 3264 (in bits) + + and name of 'lws::u' changed to 'lws::http' at private-lib-core-net.h:646:1 + + type of 'lws* lws::timeout_list' changed: + + in pointed to type 'struct lws' at private-lib-roles-ws.h:90:1: + + type name changed from 'lws' to '_lws_websocket_related' + + type size changed from 4864 to 1920 (in bits) + + 62 data member deletions: + + 'unsigned int lws::extension_data_pending', at offset 2 (in bits) at private-libwebsockets.h:1960:1 + + + + 'unsigned int lws::client_http_body_pending', at offset 3 (in bits) at private-libwebsockets.h:1954:1 + + + + 'unsigned int lws::client_rx_avail', at offset 4 (in bits) at private-libwebsockets.h:1953:1 + + + + 'unsigned int lws::chunked', at offset 5 (in bits) at private-libwebsockets.h:1952:1 + + + + 'unsigned int lws::do_ws', at offset 6 (in bits) at private-libwebsockets.h:1951:1 + + + + 'unsigned int lws::rxflow_will_be_applied', at offset 7 (in bits) at private-libwebsockets.h:1941:1 + + + + 'volatile unsigned int lws::leave_pollout_active', at offset 25 (in bits) at private-libwebsockets.h:1974:1 + + + + 'unsigned int lws::socket_is_permanently_unusable', at offset 25 (in bits) at private-libwebsockets.h:1924:1 + + + + 'volatile unsigned int lws::handling_pollout', at offset 26 (in bits) at private-libwebsockets.h:1973:1 + + + + 'unsigned int lws::user_space_externally_allocated', at offset 26 (in bits) at private-libwebsockets.h:1923:1 + + + + 'unsigned int lws::listener', at offset 27 (in bits) at private-libwebsockets.h:1922:1 + + + + 'unsigned int lws::redirect_to_https', at offset 27 (in bits) at private-libwebsockets.h:1969:1 + + + + 'unsigned int lws::seen_nonpseudoheader', at offset 28 (in bits) at private-libwebsockets.h:1921:1 + + + + 'unsigned int lws::use_ssl', at offset 28 (in bits) at private-libwebsockets.h:1963:1 + + + + 'unsigned int lws::upgraded_to_http2', at offset 29 (in bits) at private-libwebsockets.h:1920:1 + + + + 'unsigned int lws::http2_substream', at offset 30 (in bits) at private-libwebsockets.h:1919:1 + + + + 'unsigned int lws::hdr_parsing_completed', at offset 31 (in bits) at private-libwebsockets.h:1918:1 + + + + 'time_t lws::pending_timeout_limit', at offset 2880 (in bits) at private-libwebsockets.h:1850:1 + + + + 'lws_context* lws::context', at offset 2944 (in bits) at private-libwebsockets.h:1854:1 + + + + 'lws_vhost* lws::vhost', at offset 3008 (in bits) at private-libwebsockets.h:1855:1 + + + + 'lws* lws::parent', at offset 3072 (in bits) at private-libwebsockets.h:1856:1 + + + + 'lws* lws::child_list', at offset 3136 (in bits) at private-libwebsockets.h:1857:1 + + + + 'lws* lws::sibling_list', at offset 3200 (in bits) at private-libwebsockets.h:1858:1 + + + + 'const lws_protocols* lws::protocol', at offset 3264 (in bits) at private-libwebsockets.h:1862:1 + + + + 'lws** lws::same_vh_protocol_prev', at offset 3328 (in bits) at private-libwebsockets.h:1863:1 + + + + 'lws* lws::same_vh_protocol_next', at offset 3392 (in bits) at private-libwebsockets.h:1863:1 + + + + 'lws* lws::timeout_list', at offset 3456 (in bits) at private-libwebsockets.h:1864:1 + + + + 'lws** lws::timeout_list_prev', at offset 3520 (in bits) at private-libwebsockets.h:1865:1 + + + + 'void* lws::user_space', at offset 3584 (in bits) at private-libwebsockets.h:1870:1 + + + + 'void* lws::opaque_parent_data', at offset 3648 (in bits) at private-libwebsockets.h:1871:1 + + + + 'unsigned char* lws::rxflow_buffer', at offset 3712 (in bits) at private-libwebsockets.h:1873:1 + + + + 'unsigned char* lws::trunc_alloc', at offset 3776 (in bits) at private-libwebsockets.h:1875:1 + + + + 'const lws_extension* lws::active_extensions[2]', at offset 3840 (in bits) at private-libwebsockets.h:1883:1 + + + + 'void* lws::act_ext_user[2]', at offset 3968 (in bits) at private-libwebsockets.h:1884:1 + + + + 'SSL* lws::ssl', at offset 4096 (in bits) at private-libwebsockets.h:1887:1 + + + + 'BIO* lws::client_bio', at offset 4160 (in bits) at private-libwebsockets.h:1888:1 + + + + 'lws* lws::pending_read_list_prev', at offset 4224 (in bits) at private-libwebsockets.h:1889:1 + + + + 'lws* lws::pending_read_list_next', at offset 4288 (in bits) at private-libwebsockets.h:1889:1 + + + + 'lws_sock_file_fd_type lws::desc', at offset 4352 (in bits) at private-libwebsockets.h:1902:1 + + + + 'int lws::position_in_fds_table', at offset 4384 (in bits) at private-libwebsockets.h:1907:1 + + + + 'uint32_t lws::rxflow_len', at offset 4416 (in bits) at private-libwebsockets.h:1908:1 + + + + 'uint32_t lws::rxflow_pos', at offset 4448 (in bits) at private-libwebsockets.h:1909:1 + + + + 'unsigned int lws::trunc_alloc_len', at offset 4480 (in bits) at private-libwebsockets.h:1910:1 + + + + 'unsigned int lws::trunc_offset', at offset 4512 (in bits) at private-libwebsockets.h:1911:1 + + + + 'unsigned int lws::trunc_len', at offset 4544 (in bits) at private-libwebsockets.h:1912:1 + + + + 'int lws::chunk_remaining', at offset 4576 (in bits) at private-libwebsockets.h:1914:1 + + + + 'unsigned int lws::cache_secs', at offset 4608 (in bits) at private-libwebsockets.h:1916:1 + + + + 'unsigned short int lws::c_port', at offset 4688 (in bits) at private-libwebsockets.h:1977:1 + + + + 'unsigned char lws::count_act_ext', at offset 4704 (in bits) at private-libwebsockets.h:1982:1 + + + + 'uint8_t lws::ietf_spec_revision', at offset 4712 (in bits) at private-libwebsockets.h:1984:1 + + + + 'char lws::mode', at offset 4720 (in bits) at private-libwebsockets.h:1985:1 + + + + 'char lws::state', at offset 4728 (in bits) at private-libwebsockets.h:1986:1 + + + + 'char lws::state_pre_close', at offset 4736 (in bits) at private-libwebsockets.h:1987:1 + + + + 'char lws::lws_rx_parse_state', at offset 4744 (in bits) at private-libwebsockets.h:1988:1 + + + + 'char lws::rx_frame_type', at offset 4752 (in bits) at private-libwebsockets.h:1989:1 + + + + 'char lws::pending_timeout', at offset 4760 (in bits) at private-libwebsockets.h:1990:1 + + + + 'char lws::tsi', at offset 4768 (in bits) at private-libwebsockets.h:1991:1 + + + + 'char lws::protocol_interpret_idx', at offset 4776 (in bits) at private-libwebsockets.h:1992:1 + + + + 'char lws::redirects', at offset 4784 (in bits) at private-libwebsockets.h:1993:1 + + + + 'uint8_t lws::rxflow_bitmap', at offset 4792 (in bits) at private-libwebsockets.h:1994:1 + + + + 'char lws::chunk_parser', at offset 4800 (in bits) at private-libwebsockets.h:2000:1 + + + + 'char lws::reason_bf', at offset 4808 (in bits) at private-libwebsockets.h:2003:1 + + + + 18 data member insertions: + + 'lws_dll2_owner _lws_websocket_related::proxy_owner', at offset 64 (in bits) at private-lib-roles-ws.h:100:1 + + 'char _lws_websocket_related::actual_protocol[16]', at offset 256 (in bits) at private-lib-roles-ws.h:101:1 + + 'size_t _lws_websocket_related::proxy_buffered', at offset 384 (in bits) at private-lib-roles-ws.h:102:1 + + 'uint8_t _lws_websocket_related::ping_payload_buf[141]', at offset 448 (in bits) at private-lib-roles-ws.h:106:1 + + 'uint8_t _lws_websocket_related::mask[4]', at offset 1592 (in bits) at private-lib-roles-ws.h:131:1 + + 'size_t _lws_websocket_related::rx_packet_length', at offset 1664 (in bits) at private-lib-roles-ws.h:133:1 + + 'uint32_t _lws_websocket_related::rx_ubuf_head', at offset 1728 (in bits) at private-lib-roles-ws.h:134:1 + + 'uint32_t _lws_websocket_related::rx_ubuf_alloc', at offset 1760 (in bits) at private-lib-roles-ws.h:135:1 + + 'uint8_t _lws_websocket_related::ping_payload_len', at offset 1792 (in bits) at private-lib-roles-ws.h:137:1 + + 'uint8_t _lws_websocket_related::mask_idx', at offset 1800 (in bits) at private-lib-roles-ws.h:138:1 + + 'uint8_t _lws_websocket_related::opcode', at offset 1808 (in bits) at private-lib-roles-ws.h:139:1 + + 'uint8_t _lws_websocket_related::rsv', at offset 1816 (in bits) at private-lib-roles-ws.h:140:1 + + 'uint8_t _lws_websocket_related::rsv_first_msg', at offset 1824 (in bits) at private-lib-roles-ws.h:141:1 + + 'uint8_t _lws_websocket_related::close_in_ping_buffer_len', at offset 1832 (in bits) at private-lib-roles-ws.h:143:1 + + 'uint8_t _lws_websocket_related::utf8', at offset 1840 (in bits) at private-lib-roles-ws.h:144:1 + + 'uint8_t _lws_websocket_related::stashed_write_type', at offset 1848 (in bits) at private-lib-roles-ws.h:145:1 + + 'uint8_t _lws_websocket_related::tx_draining_stashed_wp', at offset 1856 (in bits) at private-lib-roles-ws.h:146:1 + + 'uint8_t _lws_websocket_related::ietf_spec_revision', at offset 1864 (in bits) at private-lib-roles-ws.h:147:1 + + 1 data member changes (16 filtered): + + type of 'u lws::u' changed: + + entity changed from 'union u' to 'unsigned char*' + + type size changed from 2880 to 64 (in bits) + + and name of 'lws::u' changed to '_lws_websocket_related::rx_ubuf' at private-lib-roles-ws.h:91:1 + + and name of 'lws::timeout_list' changed to 'lws::ws' at private-lib-core-net.h:652:1 + + type of 'lws** lws::timeout_list_prev' changed: + + entity changed from 'lws**' to 'struct lws_muxable' at private-lib-core-net.h:36:1 + + type size changed from 64 to 320 (in bits) + + and name of 'lws::timeout_list_prev' changed to 'lws::mux' at private-lib-core-net.h:662:1 + + type of 'const lws_extension* lws::active_extensions[2]' changed: + + entity changed from 'const lws_extension*[2]' to 'struct lws_tx_credit' at private-lib-core.h:141:1 + + and name of 'lws::active_extensions' changed to 'lws::txc' at private-lib-core-net.h:663:1 + + type of 'void* lws::act_ext_user[2]' changed: + + entity changed from 'void*[2]' to 'typedef lws_sorted_usec_list_t' at lws-timeout-timer.h:205:1 + + type size changed from 128 to 320 (in bits) + + and name of 'lws::act_ext_user' changed to 'lws::sul_timeout' at private-lib-core-net.h:680:1 + + type of 'lws* lws::pending_read_list_next' changed: + + entity changed from 'lws*' to 'typedef lws_sorted_usec_list_t' at lws-timeout-timer.h:205:1 + + type size changed from 64 to 320 (in bits) + + and name of 'lws::pending_read_list_next' changed to 'lws::sul_hrtimer' at private-lib-core-net.h:681:1 + + and offset changed from 43840 to 9664 (in bits) (by -34176 bits) + + 'lws_vhost* lws_context::vhost_list' offset changed from 43904 to 9216 (in bits) (by -34688 bits) + + 'lws_vhost* lws_context::vhost_pending_destruction_list' offset changed from 43968 to 9344 (in bits) (by -34624 bits) + + 'lws_deferred_free* lws_context::deferred_free_list' offset changed from 44096 to 9984 (in bits) (by -34112 bits) + + 'void* lws_context::external_baggage_free_on_destroy' offset changed from 44160 to 10176 (in bits) (by -33984 bits) + + type of 'const lws_token_limits* lws_context::token_limits' changed: + + in pointed to type 'const lws_token_limits': + + in unqualified underlying type 'struct lws_token_limits' at lws-http.h:368:1: + + type size changed from 1456 to 1520 (in bits) + + 1 data member change: + + type of 'unsigned short int lws_token_limits::token_limit[91]' changed: + + type name changed from 'unsigned short int[91]' to 'unsigned short int[95]' + + array type size changed from 1456 to 1520 + + array type subrange 1 changed length from 91 to 95 + + + + and offset changed from 44224 to 10240 (in bits) (by -33984 bits) + + 'void* lws_context::user_space' offset changed from 44288 to 10304 (in bits) (by -33984 bits) + + 'const char* lws_context::server_string' offset changed from 44352 to 9472 (in bits) (by -34880 bits) + + 'const lws_protocol_vhost_options* lws_context::reject_service_keywords' offset changed from 44416 to 10368 (in bits) (by -34048 bits) + + 'lws_reload_func lws_context::deprecation_cb' offset changed from 44480 to 10432 (in bits) (by -34048 bits) + + type of 'char lws_context::canonical_hostname[128]' changed: + + type name changed from 'char[128]' to 'char[96]' + + array type size changed from 1024 to 768 + + array type subrange 1 changed length from 128 to 96 + + and offset changed from 44544 to 0 (in bits) (by -44544 bits) + + 'int lws_context::max_fds' offset changed from 45568 to 10752 (in bits) (by -34816 bits) + + 'int lws_context::uid' offset changed from 45632 to 10816 (in bits) (by -34816 bits) + + 'int lws_context::gid' offset changed from 45664 to 10848 (in bits) (by -34816 bits) + + 'int lws_context::fd_random' offset changed from 45696 to 10880 (in bits) (by -34816 bits) + + 'int lws_context::count_wsi_allocated' offset changed from 45728 to 10912 (in bits) (by -34816 bits) + + 'int lws_context::count_cgi_spawned' offset changed from 45760 to 10944 (in bits) (by -34816 bits) + + type of 'unsigned int lws_context::options' changed: + + entity changed from 'unsigned int' to compatible type 'typedef uint64_t' at stdint-uintn.h:27:1 + + type name changed from 'unsigned int' to 'unsigned long int' + + type size changed from 32 to 64 (in bits) + + and offset changed from 45792 to 10624 (in bits) (by -35168 bits) + + 'unsigned int lws_context::fd_limit_per_thread' offset changed from 45824 to 10976 (in bits) (by -34848 bits) + + 'unsigned int lws_context::timeout_secs' offset changed from 45856 to 11008 (in bits) (by -34848 bits) + + 'unsigned int lws_context::pt_serv_buf_size' offset changed from 45888 to 11040 (in bits) (by -34848 bits) + + 'int lws_context::max_http_header_data' offset changed from 45920 to 11072 (in bits) (by -34848 bits) + + 'int lws_context::simultaneous_ssl_restriction' offset changed from 45952 to 11136 (in bits) (by -34816 bits) + + 'int lws_context::simultaneous_ssl' offset changed from 45984 to 11168 (in bits) (by -34816 bits) + + 'unsigned int lws_context::doing_protocol_init' offset changed from 46048 to 24 (in bits) (by -46024 bits) + + type of 'short int lws_context::max_http_header_pool' changed: + + type name changed from 'short int' to 'int' + + type size changed from 16 to 32 (in bits) + + and offset changed from 46144 to 11104 (in bits) (by -35040 bits) + + 'short int lws_context::count_threads' offset changed from 46160 to 11216 (in bits) (by -34944 bits) + + 'short int lws_context::plugin_protocol_count' offset changed from 46176 to 11232 (in bits) (by -34944 bits) + + 'short int lws_context::plugin_extension_count' offset changed from 46192 to 11248 (in bits) (by -34944 bits) + + 'short int lws_context::server_string_len' offset changed from 46208 to 11264 (in bits) (by -34944 bits) + + 'unsigned short int lws_context::ws_ping_pong_interval' offset changed from 46224 to 11280 (in bits) (by -34944 bits) + + 'unsigned short int lws_context::deprecation_pending_listen_close_count' offset changed from 46240 to 11296 (in bits) (by -34944 bits) + + 'uint8_t lws_context::max_fi' offset changed from 46256 to 11312 (in bits) (by -34944 bits) + + + + [C]'function int lws_add_http_header_by_token(lws*, lws_token_indexes, const unsigned char*, int, unsigned char**, unsigned char*)' at header.c:108:1 has some indirect sub-type changes: + + parameter 2 of type 'enum lws_token_indexes' has sub-type changes: + + type size hasn't changed + + 5 enumerator insertions: + + 'lws_token_indexes::WSI_TOKEN_REPLAY_NONCE' value '84' + + 'lws_token_indexes::WSI_TOKEN_COLON_PROTOCOL' value '85' + + 'lws_token_indexes::WSI_TOKEN_X_AUTH_TOKEN' value '86' + + 'lws_token_indexes::_WSI_TOKEN_CLIENT_ALPN' value '94' + + 'lws_token_indexes::WSI_TOKEN_UNKNOWN_VALUE_PART' value '97' + + + + 13 enumerator changes: + + 'lws_token_indexes::_WSI_TOKEN_CLIENT_SENT_PROTOCOLS' from value '84' to '87' at lws-http.h:215:1 + + 'lws_token_indexes::_WSI_TOKEN_CLIENT_PEER_ADDRESS' from value '85' to '88' at lws-http.h:215:1 + + 'lws_token_indexes::_WSI_TOKEN_CLIENT_URI' from value '86' to '89' at lws-http.h:215:1 + + 'lws_token_indexes::_WSI_TOKEN_CLIENT_HOST' from value '87' to '90' at lws-http.h:215:1 + + 'lws_token_indexes::_WSI_TOKEN_CLIENT_ORIGIN' from value '88' to '91' at lws-http.h:215:1 + + 'lws_token_indexes::_WSI_TOKEN_CLIENT_METHOD' from value '89' to '92' at lws-http.h:215:1 + + 'lws_token_indexes::_WSI_TOKEN_CLIENT_IFACE' from value '90' to '93' at lws-http.h:215:1 + + 'lws_token_indexes::WSI_TOKEN_COUNT' from value '91' to '95' at lws-http.h:215:1 + + 'lws_token_indexes::WSI_TOKEN_NAME_PART' from value '92' to '96' at lws-http.h:215:1 + + 'lws_token_indexes::WSI_TOKEN_SKIPPING' from value '93' to '98' at lws-http.h:215:1 + + 'lws_token_indexes::WSI_TOKEN_SKIPPING_SAW_CR' from value '94' to '99' at lws-http.h:215:1 + + 'lws_token_indexes::WSI_PARSING_COMPLETE' from value '95' to '100' at lws-http.h:215:1 + + 'lws_token_indexes::WSI_INIT_TOKEN_MUXURL' from value '96' to '101' at lws-http.h:215:1 + + + + + + [C]'function lws* lws_adopt_descriptor_vhost(lws_vhost*, lws_adoption_type, lws_sock_file_fd_type, const char*, lws*)' at adopt.c:312:1 has some indirect sub-type changes: + + parameter 2 of type 'typedef lws_adoption_type' has sub-type changes: + + underlying type 'enum __anonymous_enum__' at libwebsockets.h:4484:1 changed: + + type size hasn't changed + + 1 enumerator deletion: + + '__anonymous_enum__::LWS_ADOPT_WS_PARENTIO' value '8' + + + + 3 enumerator insertions: + + '__anonymous_enum__::LWS_ADOPT_FLAG_UDP' value '16' + + '__anonymous_enum__::LWS_ADOPT_RAW_SOCKET_UDP' value '18' + + '__anonymous_enum__::LWS_ADOPT_FLAG_RAW_PROXY' value '32' + + + + + + [C]'function int lws_chunked_html_process(lws_process_html_args*, lws_process_html_state*)' at server.c:3066:1 has some indirect sub-type changes: + + parameter 1 of type 'lws_process_html_args*' has sub-type changes: + + in pointed to type 'struct lws_process_html_args' at lws-http.h:132:1: + + type size hasn't changed + + 1 data member insertion: + + 'int lws_process_html_args::chunked', at offset 160 (in bits) at lws-http.h:137:1 + + + + [C]'function lws* lws_client_connect_via_info(lws_client_connect_info*)' at connect.c:29:1 has some indirect sub-type changes: + + parameter 1 of type 'lws_client_connect_info*' changed: + + in pointed to type 'struct lws_client_connect_info': + + entity changed from 'struct lws_client_connect_info' to 'const lws_client_connect_info' + + type size changed from 1344 to 1792 (in bits) + + + + [C]'function lws* lws_client_reset(lws**, int, const char*, int, const char*, const char*)' at client-handshake.c:1043:1 has some indirect sub-type changes: + + parameter 7 of type 'char' was added + + + + + + [C]'function lws_context* lws_create_context(lws_context_creation_info*)' at context.c:194:1 has some indirect sub-type changes: + + parameter 1 of type 'lws_context_creation_info*' changed: + + in pointed to type 'struct lws_context_creation_info': + + entity changed from 'struct lws_context_creation_info' to 'const lws_context_creation_info' + + type size changed from 3584 to 5440 (in bits) + + + + [C]'function lws_vhost* lws_create_vhost(lws_context*, lws_context_creation_info*)' at vhost.c:466:1 has some indirect sub-type changes: + + parameter 2 of type 'lws_context_creation_info*' changed: + + in pointed to type 'struct lws_context_creation_info': + + entity changed from 'struct lws_context_creation_info' to 'const lws_context_creation_info' + + type size changed from 3584 to 5440 (in bits) + + + + [C]'function int lws_genhash_init(lws_genhash_ctx*, int)' at lws-genhash.c:35:1 has some indirect sub-type changes: + + parameter 2 of type 'int' changed: + + entity changed from 'int' to 'enum lws_genhash_types' at lws-genhash.h:36:1 + + type size hasn't changed + + type alignement changed from 0 to 32 + + + + [C]'function size_t lws_genhash_size(int)' at lws-gencrypto-common.c:630:1 has some indirect sub-type changes: + + parameter 1 of type 'int' changed: + + entity changed from 'int' to 'enum lws_genhash_types' at lws-genhash.h:36:1 + + type size hasn't changed + + type alignement changed from 0 to 32 + + + + [C]'function const char* lws_get_peer_simple(lws*, char*, int)' at network.c:132:1 has some indirect sub-type changes: + + parameter 3 of type 'int' changed: + + entity changed from 'int' to compatible type 'typedef size_t' at stddef.h:216:1 + + type name changed from 'int' to 'unsigned long int' + + type size changed from 32 to 64 (in bits) + + + + [C]'function size_t lws_get_peer_write_allowance(lws*)' at wsi.c:437:1 has some indirect sub-type changes: + + return type changed: + + typedef name changed from size_t to lws_fileofs_t at libwebsockets.h:514:1 + + underlying type 'unsigned long int' changed: + + type name changed from 'unsigned long int' to 'long long int' + + type size hasn't changed + + + + + + [C]'function int lws_get_random(lws_context*, void*, int)' at unix-misc.c:51:1 has some indirect sub-type changes: + + return type changed: + + entity changed from 'int' to compatible type 'typedef size_t' at stddef.h:216:1 + + type name changed from 'int' to 'unsigned long int' + + type size changed from 32 to 64 (in bits) + + + + [C]'function int lws_hdr_copy(lws*, char*, int, lws_token_indexes)' at parsers.c:539:1 has some indirect sub-type changes: + + parameter 4 of type 'enum lws_token_indexes' has sub-type changes: + + enum type 'enum lws_token_indexes' changed at libwebsockets.h:3313:1, as reported earlier + + + + [C]'function int lws_init_vhost_client_ssl(const lws_context_creation_info*, lws_vhost*)' at vhost.c:863:1 has some indirect sub-type changes: + + parameter 1 of type 'const lws_context_creation_info*' has sub-type changes: + + in pointed to type 'const lws_context_creation_info': + + in unqualified underlying type 'struct lws_context_creation_info' at lws-context-vhost.h:244:1: + + type size changed from 3584 to 5440 (in bits) + + 35 data member insertions: + + 'void* lws_context_creation_info::client_ssl_cert_mem', at offset 2368 (in bits) at lws-context-vhost.h:477:1 + + 'unsigned int lws_context_creation_info::client_ssl_cert_mem_len', at offset 2432 (in bits) at lws-context-vhost.h:480:1 + + 'void* lws_context_creation_info::client_ssl_ca_mem', at offset 2624 (in bits) at lws-context-vhost.h:491:1 + + 'unsigned int lws_context_creation_info::client_ssl_ca_mem_len', at offset 2688 (in bits) at lws-context-vhost.h:494:1 + + 'const char* lws_context_creation_info::error_document_404', at offset 3392 (in bits) at lws-context-vhost.h:574:1 + + 'const char* lws_context_creation_info::alpn', at offset 3456 (in bits) at lws-context-vhost.h:578:1 + + 'void** lws_context_creation_info::foreign_loops', at offset 3520 (in bits) at lws-context-vhost.h:585:1 + + 'void (void*, int)* lws_context_creation_info::signal_cb', at offset 3584 (in bits) at lws-context-vhost.h:599:1 + + 'lws_context** lws_context_creation_info::pcontext', at offset 3648 (in bits) at lws-context-vhost.h:605:1 + + 'void (lws_vhost*, void*)* lws_context_creation_info::finalize', at offset 3712 (in bits) at lws-context-vhost.h:611:1 + + 'void* lws_context_creation_info::finalize_arg', at offset 3776 (in bits) at lws-context-vhost.h:616:1 + + 'unsigned int lws_context_creation_info::max_http_header_pool2', at offset 3840 (in bits) at lws-context-vhost.h:620:1 + + 'long int lws_context_creation_info::ssl_client_options_set', at offset 3904 (in bits) at lws-context-vhost.h:626:1 + + 'long int lws_context_creation_info::ssl_client_options_clear', at offset 3968 (in bits) at lws-context-vhost.h:628:1 + + 'const char* lws_context_creation_info::tls1_3_plus_cipher_list', at offset 4032 (in bits) at lws-context-vhost.h:631:1 + + 'const char* lws_context_creation_info::client_tls_1_3_plus_cipher_list', at offset 4096 (in bits) at lws-context-vhost.h:638:1 + + 'const char* lws_context_creation_info::listen_accept_role', at offset 4160 (in bits) at lws-context-vhost.h:644:1 + + 'const char* lws_context_creation_info::listen_accept_protocol', at offset 4224 (in bits) at lws-context-vhost.h:649:1 + + 'const lws_protocols** lws_context_creation_info::pprotocols', at offset 4288 (in bits) at lws-context-vhost.h:653:1 + + 'void* lws_context_creation_info::server_ssl_cert_mem', at offset 4352 (in bits) at lws-context-vhost.h:664:1 + + 'unsigned int lws_context_creation_info::server_ssl_cert_mem_len', at offset 4416 (in bits) at lws-context-vhost.h:668:1 + + 'void* lws_context_creation_info::server_ssl_private_key_mem', at offset 4480 (in bits) at lws-context-vhost.h:671:1 + + 'unsigned int lws_context_creation_info::server_ssl_private_key_mem_len', at offset 4544 (in bits) at lws-context-vhost.h:676:1 + + 'void* lws_context_creation_info::server_ssl_ca_mem', at offset 4608 (in bits) at lws-context-vhost.h:678:1 + + 'unsigned int lws_context_creation_info::server_ssl_ca_mem_len', at offset 4672 (in bits) at lws-context-vhost.h:682:1 + + 'const char* lws_context_creation_info::username', at offset 4736 (in bits) at lws-context-vhost.h:684:1 + + 'const char* lws_context_creation_info::groupname', at offset 4800 (in bits) at lws-context-vhost.h:686:1 + + 'const char* lws_context_creation_info::unix_socket_perms', at offset 4864 (in bits) at lws-context-vhost.h:688:1 + + 'const lws_system_ops_t* lws_context_creation_info::system_ops', at offset 4928 (in bits) at lws-context-vhost.h:692:1 + + 'det_lat_buf_cb_t lws_context_creation_info::detailed_latency_cb', at offset 4992 (in bits) at lws-context-vhost.h:695:1 + + 'const char* lws_context_creation_info::detailed_latency_filepath', at offset 5056 (in bits) at lws-context-vhost.h:698:1 + + 'const lws_retry_bo_t* lws_context_creation_info::retry_and_idle_policy', at offset 5120 (in bits) at lws-context-vhost.h:700:1 + + 'lws_state_notify_link_t* const* lws_context_creation_info::register_notifier_list', at offset 5184 (in bits) at lws-context-vhost.h:704:1 + + 'uint8_t lws_context_creation_info::udp_loss_sim_tx_pc', at offset 5248 (in bits) at lws-context-vhost.h:708:1 + + 'uint8_t lws_context_creation_info::udp_loss_sim_rx_pc', at offset 5256 (in bits) at lws-context-vhost.h:711:1 + + 44 data member changes (2 filtered): + + type of 'const lws_extension* lws_context_creation_info::extensions' changed: + + in pointed to type 'const lws_extension': + + in unqualified underlying type 'struct lws_extension' at lws-ws-ext.h:139:1: + + type size hasn't changed + + 1 data member change: + + type of 'lws_extension_callback_function* lws_extension::callback' changed: + + in pointed to type 'typedef lws_extension_callback_function' at lws-ws-ext.h:133:1: + + underlying type 'function type int (lws_context*, const lws_extension*, lws*, enum lws_extension_callback_reasons, void*, void*, typedef size_t)' changed: + + parameter 4 of type 'enum lws_extension_callback_reasons' has sub-type changes: + + type size hasn't changed + + 17 enumerator deletions: + + 'lws_extension_callback_reasons::LWS_EXT_CB_SERVER_CONTEXT_CONSTRUCT' value '0' + + 'lws_extension_callback_reasons::LWS_EXT_CB_CLIENT_CONTEXT_CONSTRUCT' value '1' + + 'lws_extension_callback_reasons::LWS_EXT_CB_SERVER_CONTEXT_DESTRUCT' value '2' + + 'lws_extension_callback_reasons::LWS_EXT_CB_CLIENT_CONTEXT_DESTRUCT' value '3' + + 'lws_extension_callback_reasons::LWS_EXT_CB_CHECK_OK_TO_REALLY_CLOSE' value '6' + + 'lws_extension_callback_reasons::LWS_EXT_CB_CHECK_OK_TO_PROPOSE_EXTENSION' value '7' + + 'lws_extension_callback_reasons::LWS_EXT_CB_DESTROY_ANY_WSI_CLOSING' value '9' + + 'lws_extension_callback_reasons::LWS_EXT_CB_ANY_WSI_ESTABLISHED' value '10' + + 'lws_extension_callback_reasons::LWS_EXT_CB_PACKET_RX_PREPARSE' value '11' + + 'lws_extension_callback_reasons::LWS_EXT_CB_PACKET_TX_DO_SEND' value '13' + + 'lws_extension_callback_reasons::LWS_EXT_CB_HANDSHAKE_REPLY_TX' value '14' + + 'lws_extension_callback_reasons::LWS_EXT_CB_FLUSH_PENDING_TX' value '15' + + 'lws_extension_callback_reasons::LWS_EXT_CB_EXTENDED_PAYLOAD_RX' value '16' + + 'lws_extension_callback_reasons::LWS_EXT_CB_CAN_PROXY_CLIENT_CONNECTION' value '17' + + 'lws_extension_callback_reasons::LWS_EXT_CB_1HZ' value '18' + + 'lws_extension_callback_reasons::LWS_EXT_CB_REQUEST_ON_WRITEABLE' value '19' + + 'lws_extension_callback_reasons::LWS_EXT_CB_IS_WRITEABLE' value '20' + + + + + + + + type of 'unsigned int lws_context_creation_info::options' changed: + + entity changed from 'unsigned int' to compatible type 'typedef uint64_t' at stdint-uintn.h:27:1 + + type name changed from 'unsigned int' to 'unsigned long int' + + type size changed from 32 to 64 (in bits) + + and offset changed from 800 to 832 (in bits) (by +32 bits) + + 'void* lws_context_creation_info::user' offset changed from 832 to 896 (in bits) (by +64 bits) + + 'int lws_context_creation_info::ka_time' offset changed from 896 to 960 (in bits) (by +64 bits) + + 'int lws_context_creation_info::ka_probes' offset changed from 928 to 992 (in bits) (by +64 bits) + + 'int lws_context_creation_info::ka_interval' offset changed from 960 to 1024 (in bits) (by +64 bits) + + 'SSL_CTX* lws_context_creation_info::provided_client_ssl_ctx' offset changed from 1024 to 1088 (in bits) (by +64 bits) + + type of 'short int lws_context_creation_info::max_http_header_data' changed: + + type name changed from 'short int' to 'unsigned short int' + + type size hasn't changed + + + + and offset changed from 1088 to 1152 (in bits) (by +64 bits) + + type of 'short int lws_context_creation_info::max_http_header_pool' changed: + + type name changed from 'short int' to 'unsigned short int' + + type size hasn't changed + + + + and offset changed from 1104 to 1168 (in bits) (by +64 bits) + + 'unsigned int lws_context_creation_info::count_threads' offset changed from 1120 to 1184 (in bits) (by +64 bits) + + 'unsigned int lws_context_creation_info::fd_limit_per_thread' offset changed from 1152 to 1216 (in bits) (by +64 bits) + + 'unsigned int lws_context_creation_info::timeout_secs' offset changed from 1184 to 1248 (in bits) (by +64 bits) + + 'const char* lws_context_creation_info::ecdh_curve' offset changed from 1216 to 1280 (in bits) (by +64 bits) + + 'const char* lws_context_creation_info::vhost_name' offset changed from 1280 to 1344 (in bits) (by +64 bits) + + 'const char* const* lws_context_creation_info::plugin_dirs' offset changed from 1344 to 1408 (in bits) (by +64 bits) + + 'const lws_protocol_vhost_options* lws_context_creation_info::pvo' offset changed from 1408 to 1472 (in bits) (by +64 bits) + + 'int lws_context_creation_info::keepalive_timeout' offset changed from 1472 to 1536 (in bits) (by +64 bits) + + 'const char* lws_context_creation_info::log_filepath' offset changed from 1536 to 1600 (in bits) (by +64 bits) + + 'const lws_http_mount* lws_context_creation_info::mounts' offset changed from 1600 to 1664 (in bits) (by +64 bits) + + 'const char* lws_context_creation_info::server_string' offset changed from 1664 to 1728 (in bits) (by +64 bits) + + 'unsigned int lws_context_creation_info::pt_serv_buf_size' offset changed from 1728 to 1792 (in bits) (by +64 bits) + + 'unsigned int lws_context_creation_info::max_http_header_data2' offset changed from 1760 to 1824 (in bits) (by +64 bits) + + 'long int lws_context_creation_info::ssl_options_set' offset changed from 1792 to 1856 (in bits) (by +64 bits) + + 'long int lws_context_creation_info::ssl_options_clear' offset changed from 1856 to 1920 (in bits) (by +64 bits) + + 'unsigned short int lws_context_creation_info::ws_ping_pong_interval' offset changed from 1920 to 1984 (in bits) (by +64 bits) + + 'const lws_protocol_vhost_options* lws_context_creation_info::headers' offset changed from 1984 to 2048 (in bits) (by +64 bits) + + 'const lws_protocol_vhost_options* lws_context_creation_info::reject_service_keywords' offset changed from 2048 to 2112 (in bits) (by +64 bits) + + 'void* lws_context_creation_info::external_baggage_free_on_destroy' offset changed from 2112 to 2176 (in bits) (by +64 bits) + + 'const char* lws_context_creation_info::client_ssl_private_key_password' offset changed from 2176 to 2240 (in bits) (by +64 bits) + + 'const char* lws_context_creation_info::client_ssl_cert_filepath' offset changed from 2240 to 2304 (in bits) (by +64 bits) + + 'const char* lws_context_creation_info::client_ssl_private_key_filepath' offset changed from 2304 to 2496 (in bits) (by +192 bits) + + 'const char* lws_context_creation_info::client_ssl_ca_filepath' offset changed from 2368 to 2560 (in bits) (by +192 bits) + + 'const char* lws_context_creation_info::client_ssl_cipher_list' offset changed from 2432 to 2752 (in bits) (by +320 bits) + + 'const lws_plat_file_ops* lws_context_creation_info::fops' offset changed from 2496 to 2816 (in bits) (by +320 bits) + + 'int lws_context_creation_info::simultaneous_ssl_restriction' offset changed from 2560 to 2880 (in bits) (by +320 bits) + + 'const char* lws_context_creation_info::socks_proxy_address' offset changed from 2624 to 2944 (in bits) (by +320 bits) + + 'unsigned int lws_context_creation_info::socks_proxy_port' offset changed from 2688 to 3008 (in bits) (by +320 bits) + + 'int lws_context_creation_info::bind_iface' offset changed from 2720 to 3040 (in bits) (by +320 bits) + + 'int lws_context_creation_info::ssl_info_event_mask' offset changed from 2752 to 3072 (in bits) (by +320 bits) + + 'unsigned int lws_context_creation_info::timeout_secs_ah_idle' offset changed from 2784 to 3104 (in bits) (by +320 bits) + + 'unsigned short int lws_context_creation_info::ip_limit_ah' offset changed from 2816 to 3136 (in bits) (by +320 bits) + + 'unsigned short int lws_context_creation_info::ip_limit_wsi' offset changed from 2832 to 3152 (in bits) (by +320 bits) + + 'uint32_t lws_context_creation_info::http2_settings[7]' offset changed from 2848 to 3168 (in bits) (by +320 bits) + + type of 'void* lws_context_creation_info::_unused[8]' changed: + + type name changed from 'void*[8]' to 'void*[2]' + + array type size changed from 512 to 128 + + array type subrange 1 changed length from 8 to 2 + + and offset changed from 3072 to 5312 (in bits) (by +2240 bits) + + + + [C]'function void lws_ring_bump_head(lws_ring*, size_t)' at lws-ring.c:152:1 has some indirect sub-type changes: + + parameter 1 of type 'lws_ring*' has sub-type changes: + + in pointed to type 'struct lws_ring' at private-lib-core.h:185:1: + + type size changed from 320 to 256 (in bits) + + 4 data member changes: + + type of 'size_t lws_ring::buflen' changed: + + typedef name changed from size_t to uint32_t at stdint-uintn.h:26:1 + + underlying type 'unsigned long int' changed: + + entity changed from 'unsigned long int' to compatible type 'typedef __uint32_t' at types.h:41:1 + + type name changed from 'unsigned long int' to 'unsigned int' + + type size changed from 64 to 32 (in bits) + + + + 'size_t lws_ring::element_len' offset changed from 192 to 160 (in bits) (by -32 bits) + + 'uint32_t lws_ring::head' offset changed from 256 to 192 (in bits) (by -64 bits) + + 'uint32_t lws_ring::oldest_tail' offset changed from 288 to 224 (in bits) (by -64 bits) + + + + [C]'function void lws_set_timeout(lws*, pending_timeout, int)' at wsi-timeout.c:138:1 has some indirect sub-type changes: + + parameter 2 of type 'enum pending_timeout' has sub-type changes: + + type size hasn't changed + + 1 enumerator deletion: + + 'pending_timeout::PENDING_TIMEOUT_AWAITING_EXTENSION_CONNECT_RESPONSE' value '7' + + + + 8 enumerator insertions: + + 'pending_timeout::PENDING_TIMEOUT_UNUSED1' value '7' + + 'pending_timeout::PENDING_TIMEOUT_UDP_IDLE' value '26' + + 'pending_timeout::PENDING_TIMEOUT_CLIENT_CONN_IDLE' value '27' + + 'pending_timeout::PENDING_TIMEOUT_LAGGING' value '28' + + 'pending_timeout::PENDING_TIMEOUT_THREADPOOL' value '29' + + 'pending_timeout::PENDING_TIMEOUT_THREADPOOL_TASK' value '30' + + 'pending_timeout::PENDING_TIMEOUT_KILLED_BY_PROXY_CLIENT_CLOSE' value '31' + + 'pending_timeout::PENDING_TIMEOUT_USER_OK' value '32' + + + + + + [C]'function lws_spa* lws_spa_create(lws*, const char* const*, int, int, lws_spa_fileupload_cb, void*)' at lws-spa.c:624:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'struct lws_spa' at lws-spa.c:87:1: + + type size changed from 640 to 832 (in bits) + + 4 data member deletions: + + 'const char* const* lws_spa::param_names', at offset 128 (in bits) at lws-spa.c:401:1 + + + + 'int lws_spa::count_params', at offset 192 (in bits) at lws-spa.c:402:1 + + + + 'void* lws_spa::opt_data', at offset 384 (in bits) at lws-spa.c:405:1 + + + + 'int lws_spa::max_storage', at offset 576 (in bits) at lws-spa.c:409:1 + + + + 6 data member changes: + + type of 'lws_urldecode_stateful* lws_spa::s' changed: + + in pointed to type 'struct lws_urldecode_stateful' at lws-spa.c:59:1: + + type size changed from 4544 to 4608 (in bits) + + 2 data member insertions: + + 'lws* lws_urldecode_stateful::wsi', at offset 128 (in bits) at lws-spa.c:62:1 + + 'uint8_t lws_urldecode_stateful::matchable', at offset 4448 (in bits) at lws-spa.c:75:1 + + 17 data member changes (1 filtered): + + type of 'unsigned int lws_urldecode_stateful::boundary_real_crlf' changed: + + entity changed from 'unsigned int' to compatible type 'typedef uint8_t' at stdint-uintn.h:24:1 + + type name changed from 'unsigned int' to 'unsigned char' + + type size changed from 32 to 8 (in bits) + + and offset changed from 28 to 4 (in bits) (by -24 bits) + + type of 'unsigned int lws_urldecode_stateful::subname' changed: + + entity changed from 'unsigned int' to compatible type 'typedef uint8_t' at stdint-uintn.h:24:1 + + type name changed from 'unsigned int' to 'unsigned char' + + type size changed from 32 to 8 (in bits) + + and offset changed from 29 to 5 (in bits) (by -24 bits) + + type of 'unsigned int lws_urldecode_stateful::inside_quote' changed: + + entity changed from 'unsigned int' to compatible type 'typedef uint8_t' at stdint-uintn.h:24:1 + + type name changed from 'unsigned int' to 'unsigned char' + + type size changed from 32 to 8 (in bits) + + and offset changed from 30 to 6 (in bits) (by -24 bits) + + type of 'unsigned int lws_urldecode_stateful::multipart_form_data' changed: + + entity changed from 'unsigned int' to compatible type 'typedef uint8_t' at stdint-uintn.h:24:1 + + type name changed from 'unsigned int' to 'unsigned char' + + type size changed from 32 to 8 (in bits) + + and offset changed from 31 to 7 (in bits) (by -24 bits) + + 'char lws_urldecode_stateful::name[32]' offset changed from 128 to 192 (in bits) (by +64 bits) + + 'char lws_urldecode_stateful::temp[32]' offset changed from 384 to 448 (in bits) (by +64 bits) + + 'char lws_urldecode_stateful::content_type[32]' offset changed from 640 to 704 (in bits) (by +64 bits) + + 'char lws_urldecode_stateful::content_disp[32]' offset changed from 896 to 960 (in bits) (by +64 bits) + + 'char lws_urldecode_stateful::content_disp_filename[256]' offset changed from 1152 to 1216 (in bits) (by +64 bits) + + 'char lws_urldecode_stateful::mime_boundary[128]' offset changed from 3200 to 3264 (in bits) (by +64 bits) + + 'int lws_urldecode_stateful::out_len' offset changed from 4224 to 4288 (in bits) (by +64 bits) + + 'int lws_urldecode_stateful::pos' offset changed from 4256 to 4320 (in bits) (by +64 bits) + + 'int lws_urldecode_stateful::hdr_idx' offset changed from 4288 to 4352 (in bits) (by +64 bits) + + 'int lws_urldecode_stateful::mp' offset changed from 4320 to 4384 (in bits) (by +64 bits) + + 'int lws_urldecode_stateful::sum' offset changed from 4352 to 4416 (in bits) (by +64 bits) + + 'urldecode_stateful lws_urldecode_stateful::state' offset changed from 4416 to 4480 (in bits) (by +64 bits) + + 'lws_urldecode_stateful_cb lws_urldecode_stateful::output' offset changed from 4480 to 4544 (in bits) (by +64 bits) + + + + 'char** lws_spa::params' offset changed from 256 to 640 (in bits) (by +384 bits) + + 'int* lws_spa::param_length' offset changed from 320 to 512 (in bits) (by +192 bits) + + 'char* lws_spa::storage' offset changed from 448 to 704 (in bits) (by +256 bits) + + 'char* lws_spa::end' offset changed from 512 to 768 (in bits) (by +256 bits) + + 'char lws_spa::finalized' offset changed from 608 to 576 (in bits) (by -32 bits) + + 1 data member change: + + type of 'lws_spa_fileupload_cb lws_spa::opt_cb' changed: + + typedef name changed from lws_spa_fileupload_cb to lws_spa_create_info_t at lws-spa.h:115:1 + + underlying type 'int (void*, const char*, const char*, char*, int, enum lws_spa_fileupload_states)*' changed: + + entity changed from 'int (void*, const char*, const char*, char*, int, enum lws_spa_fileupload_states)*' to 'struct lws_spa_create_info' at lws-spa.h:104:1 + + type size changed from 64 to 448 (in bits) + + and name of 'lws_spa::opt_cb' changed to 'lws_spa::i' at lws-spa.c:89:1 + + + + [C]'function const unsigned char* lws_token_to_string(lws_token_indexes)' at header.c:30:1 has some indirect sub-type changes: + + parameter 1 of type 'enum lws_token_indexes' has sub-type changes: + + enum type 'enum lws_token_indexes' changed at libwebsockets.h:3313:1, as reported earlier + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libxslt_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libxslt_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..a982d01c742c7699033936736ae7a640fd22d87e --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/libxslt_all_result.md @@ -0,0 +1,402 @@ +# Functions changed info + +---------------diffs in libxslt_libexslt.so.0.8.20_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed (3 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +1 function with some indirect sub-type change: + + + + [C]'function int exsltDateXpathCtxtRegister(xmlXPathContextPtr, const xmlChar*)' at date.c:3852:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef xmlXPathContextPtr' has sub-type changes: + + underlying type 'xmlXPathContext*' changed: + + in pointed to type 'typedef xmlXPathContext' at xpath.h:39:1: + + underlying type 'struct _xmlXPathContext' at xpath.h:288:1 changed: + + type size changed from 2816 to 3072 (in bits) + + 5 data member insertions: + + 'unsigned long int _xmlXPathContext::opLimit', at offset 2816 (in bits) at xpath.h:359:1 + + 'unsigned long int _xmlXPathContext::opCount', at offset 2880 (in bits) at xpath.h:360:1 + + 'int _xmlXPathContext::depth', at offset 2944 (in bits) at xpath.h:361:1 + + 'int _xmlXPathContext::maxDepth', at offset 2976 (in bits) at xpath.h:362:1 + + 'int _xmlXPathContext::maxParserDepth', at offset 3008 (in bits) at xpath.h:363:1 + + no data member changes (2 filtered); + + + + + +---------------diffs in libxslt_libxslt.so.1.1.34_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 20 Changed (175 filtered out), 2 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +2 Added functions: + + + + 'function void xsltCompMatchClearCache(xsltTransformContextPtr, xsltCompMatchPtr)' {xsltCompMatchClearCache@@LIBXML2_1.1.34} + + 'function int xsltParseStylesheetUser(xsltStylesheetPtr, xmlDocPtr)' {xsltParseStylesheetUser@@LIBXML2_1.1.34} + + + +20 functions with some indirect sub-type change: + + + + [C]'function int xslAddCall(xsltTemplatePtr, xmlNodePtr)' at xsltutils.c:2457:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef xsltTemplatePtr' has sub-type changes: + + underlying type 'xsltTemplate*' changed: + + in pointed to type 'typedef xsltTemplate' at xsltInternals.h:264:1: + + underlying type 'struct _xsltTemplate' at xsltInternals.h:274:1 changed: + + type size hasn't changed + + 1 data member changes (2 filtered): + + type of '_xsltStylesheet* _xsltTemplate::style' changed: + + in pointed to type 'struct _xsltStylesheet' at xsltInternals.h:1476:1: + + type size changed from 3328 to 3392 (in bits) + + 1 data member insertion: + + 'xmlXPathContextPtr _xsltStylesheet::xpathCtxt', at offset 3328 (in bits) at xsltInternals.h:1635:1 + + 1 data member changes (6 filtered): + + type of 'xsltElemPreCompPtr _xsltStylesheet::preComps' changed: + + underlying type 'xsltElemPreComp*' changed: + + in pointed to type 'typedef xsltElemPreComp' at xsltInternals.h:391:1: + + underlying type 'struct _xsltElemPreComp' at xsltInternals.h:479:1 changed: + + type size hasn't changed + + 1 data member changes (2 filtered): + + type of 'xsltTransformFunction _xsltElemPreComp::func' changed: + + underlying type 'void (typedef xsltTransformContextPtr, typedef xmlNodePtr, typedef xmlNodePtr, typedef xsltElemPreCompPtr)*' changed: + + in pointed to type 'function type void (typedef xsltTransformContextPtr, typedef xmlNodePtr, typedef xmlNodePtr, typedef xsltElemPreCompPtr)': + + parameter 1 of type 'typedef xsltTransformContextPtr' has sub-type changes: + + underlying type 'xsltTransformContext*' changed: + + in pointed to type 'typedef xsltTransformContext' at xsltInternals.h:382:1: + + underlying type 'struct _xsltTransformContext' at xsltInternals.h:1677:1 changed: + + type size changed from 3776 to 3904 (in bits) + + 2 data member insertions: + + 'unsigned long int _xsltTransformContext::opLimit', at offset 3776 (in bits) at xsltInternals.h:1783:1 + + 'unsigned long int _xsltTransformContext::opCount', at offset 3840 (in bits) at xsltInternals.h:1784:1 + + 1 data member changes (8 filtered): + + type of 'xmlXPathContextPtr _xsltTransformContext::xpathCtxt' changed: + + underlying type 'xmlXPathContext*' changed: + + in pointed to type 'typedef xmlXPathContext' at xpath.h:39:1: + + underlying type 'struct _xmlXPathContext' at xpath.h:288:1 changed: + + type size changed from 2816 to 3072 (in bits) + + 5 data member insertions: + + 'unsigned long int _xmlXPathContext::opLimit', at offset 2816 (in bits) at xpath.h:359:1 + + 'unsigned long int _xmlXPathContext::opCount', at offset 2880 (in bits) at xpath.h:360:1 + + 'int _xmlXPathContext::depth', at offset 2944 (in bits) at xpath.h:361:1 + + 'int _xmlXPathContext::maxDepth', at offset 2976 (in bits) at xpath.h:362:1 + + 'int _xmlXPathContext::maxParserDepth', at offset 3008 (in bits) at xpath.h:363:1 + + no data member changes (2 filtered); + + + + + + + + + + + + [C]'function void xsltApplyImports(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:4685:1 has some indirect sub-type changes: + + parameter 4 of type 'typedef xsltStylePreCompPtr' changed: + + typedef name changed from xsltStylePreCompPtr to xsltElemPreCompPtr at xsltInternals.h:392:1 + + underlying type 'xsltStylePreComp*' changed: + + in pointed to type 'typedef xsltStylePreComp' at xsltInternals.h:391:1: + + typedef name changed from xsltStylePreComp to xsltElemPreComp at xsltInternals.h:391:1 + + underlying type 'struct _xsltStylePreComp' at xsltInternals.h:1370:1 changed: + + type name changed from '_xsltStylePreComp' to '_xsltElemPreComp' + + type size changed from 2624 to 320 (in bits) + + 29 data member deletions: + + 'int _xsltStylePreComp::has_stype', at offset 320 (in bits) at xsltInternals.h:1381:1 + + + + 'int _xsltStylePreComp::number', at offset 352 (in bits) at xsltInternals.h:1382:1 + + + + 'const xmlChar* _xsltStylePreComp::order', at offset 384 (in bits) at xsltInternals.h:1383:1 + + + + 'int _xsltStylePreComp::has_order', at offset 448 (in bits) at xsltInternals.h:1384:1 + + + + 'int _xsltStylePreComp::descending', at offset 480 (in bits) at xsltInternals.h:1385:1 + + + + 'const xmlChar* _xsltStylePreComp::lang', at offset 512 (in bits) at xsltInternals.h:1386:1 + + + + 'int _xsltStylePreComp::has_lang', at offset 576 (in bits) at xsltInternals.h:1387:1 + + + + 'xsltLocale _xsltStylePreComp::locale', at offset 640 (in bits) at xsltInternals.h:1388:1 + + + + 'const xmlChar* _xsltStylePreComp::case_order', at offset 704 (in bits) at xsltInternals.h:1389:1 + + + + 'int _xsltStylePreComp::lower_first', at offset 768 (in bits) at xsltInternals.h:1390:1 + + + + 'const xmlChar* _xsltStylePreComp::use', at offset 832 (in bits) at xsltInternals.h:1392:1 + + + + 'int _xsltStylePreComp::has_use', at offset 896 (in bits) at xsltInternals.h:1393:1 + + + + 'int _xsltStylePreComp::noescape', at offset 928 (in bits) at xsltInternals.h:1395:1 + + + + 'const xmlChar* _xsltStylePreComp::name', at offset 960 (in bits) at xsltInternals.h:1397:1 + + + + 'int _xsltStylePreComp::has_name', at offset 1024 (in bits) at xsltInternals.h:1398:1 + + + + 'const xmlChar* _xsltStylePreComp::ns', at offset 1088 (in bits) at xsltInternals.h:1399:1 + + + + 'int _xsltStylePreComp::has_ns', at offset 1152 (in bits) at xsltInternals.h:1400:1 + + + + 'const xmlChar* _xsltStylePreComp::mode', at offset 1216 (in bits) at xsltInternals.h:1402:1 + + + + 'const xmlChar* _xsltStylePreComp::modeURI', at offset 1280 (in bits) at xsltInternals.h:1403:1 + + + + 'const xmlChar* _xsltStylePreComp::test', at offset 1344 (in bits) at xsltInternals.h:1405:1 + + + + 'xsltTemplatePtr _xsltStylePreComp::templ', at offset 1408 (in bits) at xsltInternals.h:1407:1 + + + + 'const xmlChar* _xsltStylePreComp::select', at offset 1472 (in bits) at xsltInternals.h:1409:1 + + + + 'int _xsltStylePreComp::ver11', at offset 1536 (in bits) at xsltInternals.h:1411:1 + + + + 'const xmlChar* _xsltStylePreComp::filename', at offset 1600 (in bits) at xsltInternals.h:1412:1 + + + + 'int _xsltStylePreComp::has_filename', at offset 1664 (in bits) at xsltInternals.h:1413:1 + + + + 'xsltNumberData _xsltStylePreComp::numdata', at offset 1728 (in bits) at xsltInternals.h:1415:1 + + + + 'xmlXPathCompExprPtr _xsltStylePreComp::comp', at offset 2432 (in bits) at xsltInternals.h:1417:1 + + + + 'xmlNsPtr* _xsltStylePreComp::nsList', at offset 2496 (in bits) at xsltInternals.h:1418:1 + + + + 'int _xsltStylePreComp::nsNr', at offset 2560 (in bits) at xsltInternals.h:1419:1 + + + + 3 data member changes (2 filtered): + + name of '_xsltStylePreComp::next' changed to '_xsltElemPreComp::next' at xsltInternals.h:472:1 + + name of '_xsltStylePreComp::func' changed to '_xsltElemPreComp::func' at xsltInternals.h:475:1 + + type of 'const xmlChar* _xsltStylePreComp::stype' changed: + + entity changed from 'const xmlChar*' to compatible type 'typedef xsltElemPreCompDeallocator' at xsltInternals.h:461:1 + + in pointed to type 'const unsigned char': + + entity changed from 'const unsigned char' to 'function type void (_xsltElemPreComp*)' + + type size changed from 8 to 64 (in bits) + + and name of '_xsltStylePreComp::stype' changed to '_xsltElemPreComp::free' at xsltInternals.h:480:1 + + + + [C]'function void xsltApplyTemplates(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:4857:1 has some indirect sub-type changes: + + + + [C]'function void xsltAttribute(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at attributes.c:754:1 has some indirect sub-type changes: + + + + [C]'function void xsltCallTemplate(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:4754:1 has some indirect sub-type changes: + + + + [C]'function void xsltChoose(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:5234:1 has some indirect sub-type changes: + + + + [C]'function void xsltComment(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:4300:1 has some indirect sub-type changes: + + + + [C]'function void xsltCopy(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:3936:1 has some indirect sub-type changes: + + + + [C]'function void xsltCopyOf(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:4410:1 has some indirect sub-type changes: + + + + [C]'function void xsltDebug(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at extra.c:55:1 has some indirect sub-type changes: + + + + [C]'function void xsltDocumentElem(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:3400:1 has some indirect sub-type changes: + + + + [C]'function void xsltElement(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:4092:1 has some indirect sub-type changes: + + + + [C]'function void xsltForEach(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:5499:1 has some indirect sub-type changes: + + + + [C]'function void xsltIf(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:5393:1 has some indirect sub-type changes: + + + + [C]'function void xsltNumber(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:4628:1 has some indirect sub-type changes: + + + + [C]'function void xsltProcessingInstruction(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:4344:1 has some indirect sub-type changes: + + + + [C]'function void xsltSort(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:3914:1 has some indirect sub-type changes: + + + + [C]'function void xsltText(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:4055:1 has some indirect sub-type changes: + + + + [C]'function void xsltValueOf(xsltTransformContextPtr, xmlNodePtr, xmlNodePtr, xsltStylePreCompPtr)' at transform.c:4554:1 has some indirect sub-type changes: + + + + [C]'function xmlXPathFunction xsltXPathFunctionLookup(xmlXPathContextPtr, const xmlChar*, const xmlChar*)' at functions.c:68:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef xmlXPathContextPtr' changed: + + entity changed from 'typedef xmlXPathContextPtr' to compatible type 'void*' + + in pointed to type 'struct _xmlXPathContext': + + entity changed from 'struct _xmlXPathContext' to 'void' + + type size changed from 2816 to 0 (in bits) + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/lm_sensors_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/lm_sensors_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..d36adffc250661391de4118f7e758c95d40ceed3 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/lm_sensors_all_result.md @@ -0,0 +1,16 @@ +# Functions changed info + +---------------diffs in lm_sensors_libsensors.so.5.0.0_abidiff.out:---------------- + +ELF SONAME changed + +Functions changes summary: 0 Removed, 0 Changed (2 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +SONAME changed from 'libsensors.so.4' to 'libsensors.so.5' + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/nftables_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/nftables_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..c1ce8a1f2cd8c91c6e373d9ae4f17c60dd232187 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/nftables_all_result.md @@ -0,0 +1,1046 @@ +# Functions changed info + +---------------diffs in nftables_libnftables.so.1.0.0_abidiff.out:---------------- + +ELF SONAME changed + +Functions changes summary: 409 Removed, 2 Changed (16 filtered out), 2 Added functions + +Variables changes summary: 0 Removed (87 filtered out), 0 Changed, 0 Added variables + +Function symbols changes summary: 2 Removed, 0 Added function symbols not referenced by debug info + +Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info + + + +SONAME changed from 'libnftables.so.0' to 'libnftables.so.1' + + + +409 Removed functions: + + + + [D] 'function void __memory_allocation_error(const char*, uint32_t)' {__memory_allocation_error} + + [D] 'function void __netlink_abi_error(const char*, int, const char*)' {__netlink_abi_error} + + [D] 'function void __netlink_init_error(const char*, int, const char*)' {__netlink_init_error} + + [D] 'function int __stmt_binary_error(eval_ctx*, const location*, const location*, const char*, ...)' {__stmt_binary_error} + + [D] 'function nftnl_expr* alloc_nft_expr(const char*)' {alloc_nft_expr} + + [D] 'function nftnl_chain* alloc_nftnl_chain(const handle*)' {alloc_nftnl_chain} + + [D] 'function nftnl_rule* alloc_nftnl_rule(const handle*)' {alloc_nftnl_rule} + + [D] 'function nftnl_set* alloc_nftnl_set(const handle*)' {alloc_nftnl_set} + + [D] 'function nftnl_table* alloc_nftnl_table(const handle*)' {alloc_nftnl_table} + + [D] 'function expr* binop_expr_alloc(const location*, ops, expr*, expr*)' {binop_expr_alloc} + + [D] 'function expr* bitmask_expr_to_binops(expr*)' {bitmask_expr_to_binops} + + [D] 'function void cache_flush(mnl_socket*, nft_cache*, cmd_ops, list_head*, unsigned int, output_ctx*)' {cache_flush} + + [D] 'function void cache_release(nft_cache*)' {cache_release} + + [D] 'function int cache_update(mnl_socket*, nft_cache*, cmd_ops, list_head*, unsigned int, output_ctx*)' {cache_update} + + [D] 'function void chain_add_hash(chain*, table*)' {chain_add_hash} + + [D] 'function chain* chain_alloc(const char*)' {chain_alloc} + + [D] 'function void chain_free(chain*)' {chain_free} + + [D] 'function chain* chain_get(chain*)' {chain_get} + + [D] 'function const char* chain_hookname_lookup(const char*)' {chain_hookname_lookup} + + [D] 'function chain* chain_lookup(const table*, const handle*)' {chain_lookup} + + [D] 'function const char* chain_policy2str(uint32_t)' {chain_policy2str} + + [D] 'function void chain_print_plain(const chain*, output_ctx*)' {chain_print_plain} + + [D] 'function const char* chain_type_name_lookup(const char*)' {chain_type_name_lookup} + + [D] 'function cmd* cmd_alloc(cmd_ops, cmd_obj, const handle*, const location*, void*)' {cmd_alloc} + + [D] 'function cmd* cmd_alloc_obj_ct(cmd_ops, int, const handle*, const location*, obj*)' {cmd_alloc_obj_ct} + + [D] 'function int cmd_evaluate(eval_ctx*, cmd*)' {cmd_evaluate} + + [D] 'function void cmd_free(cmd*)' {cmd_free} + + [D] 'function void compound_expr_add(expr*, expr*)' {compound_expr_add} + + [D] 'function expr* compound_expr_alloc(const location*, const expr_ops*)' {compound_expr_alloc} + + [D] 'function void compound_expr_remove(expr*, expr*)' {compound_expr_remove} + + [D] 'function expr* concat_expr_alloc(const location*)' {concat_expr_alloc} + + [D] 'function const datatype* concat_type_alloc(uint32_t)' {concat_type_alloc} + + [D] 'function void concat_type_destroy(const datatype*)' {concat_type_destroy} + + [D] 'function stmt* connlimit_stmt_alloc(const location*)' {connlimit_stmt_alloc} + + [D] 'function expr* constant_expr_alloc(const location*, const datatype*, byteorder, unsigned int, void*)' {constant_expr_alloc} + + [D] 'function expr* constant_expr_join(const expr*, const expr*)' {constant_expr_join} + + [D] 'function expr* constant_expr_splice(expr*, unsigned int)' {constant_expr_splice} + + [D] 'function stmt* counter_stmt_alloc(const location*)' {counter_stmt_alloc} + + [D] 'function const char* ct_dir2str(int)' {ct_dir2str} + + [D] 'function expr* ct_expr_alloc(const location*, nft_ct_keys, int8_t, uint8_t)' {ct_expr_alloc} + + [D] 'function void ct_expr_update_type(proto_ctx*, expr*)' {ct_expr_update_type} + + [D] 'function const char* ct_label2str(unsigned long int)' {ct_label2str} + + [D] 'function void ct_label_table_exit()' {ct_label_table_exit} + + [D] 'function void ct_label_table_init()' {ct_label_table_init} + + [D] 'function stmt* ct_stmt_alloc(const location*, nft_ct_keys, int8_t, expr*)' {ct_stmt_alloc} + + [D] 'function error_record* data_unit_parse(const location*, const char*, uint64_t*)' {data_unit_parse} + + [D] 'function const datatype* datatype_lookup(datatypes)' {datatype_lookup} + + [D] 'function const datatype* datatype_lookup_byname(const char*)' {datatype_lookup_byname} + + [D] 'function void datatype_print(const expr*, output_ctx*)' {datatype_print} + + [D] 'function void devgroup_table_exit()' {devgroup_table_exit} + + [D] 'function void devgroup_table_init()' {devgroup_table_init} + + [D] 'function int do_command(netlink_ctx*, cmd*)' {do_command} + + [D] 'function stmt* dup_stmt_alloc(const location*)' {dup_stmt_alloc} + + [D] 'function void erec_add_location(error_record*, const location*)' {erec_add_location} + + [D] 'function error_record* erec_create(error_record_types, const location*, const char*, ...)' {erec_create} + + [D] 'function void erec_destroy(error_record*)' {erec_destroy} + + [D] 'function void erec_print(output_ctx*, const error_record*, unsigned int)' {erec_print} + + [D] 'function void erec_print_list(output_ctx*, list_head*, unsigned int)' {erec_print_list} + + [D] 'function error_record* erec_vcreate(error_record_types, const location*, const char*, va_list)' {erec_vcreate} + + [D] 'function expr* expr_alloc(const location*, const expr_ops*, const datatype*, byteorder, unsigned int)' {expr_alloc} + + [D] 'function const datatype* expr_basetype(const expr*)' {expr_basetype} + + [D] 'function int expr_binary_error(list_head*, const expr*, const expr*, const char*, ...)' {expr_binary_error} + + [D] 'function expr* expr_clone(const expr*)' {expr_clone} + + [D] 'function bool expr_cmp(const expr*, const expr*)' {expr_cmp} + + [D] 'function void expr_describe(const expr*, output_ctx*)' {expr_describe} + + [D] 'function void expr_free(expr*)' {expr_free} + + [D] 'function expr* expr_get(expr*)' {expr_get} + + [D] 'function void expr_print(const expr*, output_ctx*)' {expr_print} + + [D] 'function void expr_set_type(expr*, const datatype*, byteorder)' {expr_set_type} + + [D] 'function stmt* expr_stmt_alloc(const location*, expr*)' {expr_stmt_alloc} + + [D] 'function void exthdr_dependency_kill(payload_dep_ctx*, expr*, unsigned int)' {exthdr_dependency_kill} + + [D] 'function expr* exthdr_expr_alloc(const location*, const exthdr_desc*, uint8_t)' {exthdr_expr_alloc} + + [D] 'function const exthdr_desc* exthdr_find_proto(uint8_t)' {exthdr_find_proto} + + [D] 'function bool exthdr_find_template(expr*, const expr*, unsigned int*)' {exthdr_find_template} + + [D] 'function int exthdr_gen_dependency(eval_ctx*, const expr*, const proto_desc*, proto_bases, stmt**)' {exthdr_gen_dependency} + + [D] 'function void exthdr_init_raw(expr*, uint8_t, unsigned int, unsigned int, nft_exthdr_op, uint32_t)' {exthdr_init_raw} + + [D] 'function stmt* exthdr_stmt_alloc(const location*, expr*, expr*)' {exthdr_stmt_alloc} + + [D] 'function const char* family2str(unsigned int)' {family2str} + + [D] 'function expr* fib_expr_alloc(const location*, unsigned int, unsigned int)' {fib_expr_alloc} + + [D] 'function const char* fib_result_str(nft_fib_result)' {fib_result_str} + + [D] 'function expr* flag_expr_alloc(const location*, const datatype*, byteorder, unsigned int, unsigned long int)' {flag_expr_alloc} + + [D] 'function stmt* flow_offload_stmt_alloc(const location*, const char*)' {flow_offload_stmt_alloc} + + [D] 'function void flowtable_add_hash(flowtable*, table*)' {flowtable_add_hash} + + [D] 'function flowtable* flowtable_alloc(const location*)' {flowtable_alloc} + + [D] 'function void flowtable_free(flowtable*)' {flowtable_free} + + [D] 'function flowtable* flowtable_get(flowtable*)' {flowtable_get} + + [D] 'function void flowtable_print(const flowtable*, output_ctx*)' {flowtable_print} + + [D] 'function stmt* fwd_stmt_alloc(const location*)' {fwd_stmt_alloc} + + [D] 'function const char* get_rate(uint64_t, uint64_t*)' {get_rate} + + [D] 'function void get_set_decompose(table*, set*)' {get_set_decompose} + + [D] 'function expr* get_set_intervals(const set*, const expr*)' {get_set_intervals} + + [D] 'function const char* get_unit(uint64_t)' {get_unit} + + [D] 'function void gmp_init()' {gmp_init} + + [D] 'function void handle_free(handle*)' {handle_free} + + [D] 'function void handle_merge(handle*, const handle*)' {handle_merge} + + [D] 'function expr* hash_expr_alloc(const location*, uint32_t, bool, uint32_t, uint32_t, nft_hash_types)' {hash_expr_alloc} + + [D] 'function const char* hooknum2str(unsigned int, unsigned int)' {hooknum2str} + + [D] 'function void iface_cache_release()' {iface_cache_release} + + [D] 'function void iface_cache_update()' {iface_cache_update} + + [D] 'function void interval_map_decompose(expr*)' {interval_map_decompose} + + [D] 'function stmt* limit_stmt_alloc(const location*)' {limit_stmt_alloc} + + [D] 'function expr* list_expr_alloc(const location*)' {list_expr_alloc} + + [D] 'function void list_expr_sort(list_head*)' {list_expr_sort} + + [D] 'function const char* log_level(uint32_t)' {log_level} + + [D] 'function int log_level_parse(const char*)' {log_level_parse} + + [D] 'function stmt* log_stmt_alloc(const location*)' {log_stmt_alloc} + + [D] 'function expr* map_expr_alloc(const location*, expr*, expr*)' {map_expr_alloc} + + [D] 'function stmt* map_stmt_alloc(const location*)' {map_stmt_alloc} + + [D] 'function expr* mapping_expr_alloc(const location*, expr*, expr*)' {mapping_expr_alloc} + + [D] 'function void mark_table_exit()' {mark_table_exit} + + [D] 'function void mark_table_init()' {mark_table_init} + + [D] 'function markup* markup_alloc(uint32_t)' {markup_alloc} + + [D] 'function void markup_free(markup*)' {markup_free} + + [D] 'function expr* meta_expr_alloc(const location*, nft_meta_keys)' {meta_expr_alloc} + + [D] 'function error_record* meta_key_parse(const location*, const char*, unsigned int*)' {meta_key_parse} + + [D] 'function stmt* meta_stmt_alloc(const location*, nft_meta_keys, expr*)' {meta_stmt_alloc} + + [D] 'function stmt* meta_stmt_meta_iiftype(const location*, uint16_t)' {meta_stmt_meta_iiftype} + + [D] 'function stmt* meter_stmt_alloc(const location*)' {meter_stmt_alloc} + + [D] 'function uint32_t mnl_batch_begin(nftnl_batch*, uint32_t)' {mnl_batch_begin} + + [D] 'function void mnl_batch_end(nftnl_batch*, uint32_t)' {mnl_batch_end} + + [D] 'function nftnl_batch* mnl_batch_init()' {mnl_batch_init} + + [D] 'function bool mnl_batch_ready(nftnl_batch*)' {mnl_batch_ready} + + [D] 'function void mnl_batch_reset(nftnl_batch*)' {mnl_batch_reset} + + [D] 'function int mnl_batch_talk(netlink_ctx*, list_head*)' {mnl_batch_talk} + + [D] 'function void mnl_err_list_free(mnl_err*)' {mnl_err_list_free} + + [D] 'function uint16_t mnl_genid_get(netlink_ctx*)' {mnl_genid_get} + + [D] 'function int mnl_nft_chain_batch_add(nftnl_chain*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_chain_batch_add} + + [D] 'function int mnl_nft_chain_batch_del(nftnl_chain*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_chain_batch_del} + + [D] 'function nftnl_chain_list* mnl_nft_chain_dump(netlink_ctx*, int)' {mnl_nft_chain_dump} + + [D] 'function int mnl_nft_event_listener(mnl_socket*, unsigned int, output_ctx*, int (const nlmsghdr*, void*)*, void*)' {mnl_nft_event_listener} + + [D] 'function int mnl_nft_flowtable_batch_add(nftnl_flowtable*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_flowtable_batch_add} + + [D] 'function int mnl_nft_flowtable_batch_del(nftnl_flowtable*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_flowtable_batch_del} + + [D] 'function nftnl_flowtable_list* mnl_nft_flowtable_dump(netlink_ctx*, int, const char*)' {mnl_nft_flowtable_dump} + + [D] 'function int mnl_nft_obj_batch_add(nftnl_obj*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_obj_batch_add} + + [D] 'function int mnl_nft_obj_batch_del(nftnl_obj*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_obj_batch_del} + + [D] 'function nftnl_obj_list* mnl_nft_obj_dump(netlink_ctx*, int, const char*, const char*, uint32_t, bool, bool)' {mnl_nft_obj_dump} + + [D] 'function int mnl_nft_rule_batch_add(nftnl_rule*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_rule_batch_add} + + [D] 'function int mnl_nft_rule_batch_del(nftnl_rule*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_rule_batch_del} + + [D] 'function int mnl_nft_rule_batch_replace(nftnl_rule*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_rule_batch_replace} + + [D] 'function nftnl_rule_list* mnl_nft_rule_dump(netlink_ctx*, int)' {mnl_nft_rule_dump} + + [D] 'function nftnl_ruleset* mnl_nft_ruleset_dump(netlink_ctx*, uint32_t)' {mnl_nft_ruleset_dump} + + [D] 'function int mnl_nft_set_batch_add(nftnl_set*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_set_batch_add} + + [D] 'function int mnl_nft_set_batch_del(nftnl_set*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_set_batch_del} + + [D] 'function nftnl_set_list* mnl_nft_set_dump(netlink_ctx*, int, const char*)' {mnl_nft_set_dump} + + [D] 'function int mnl_nft_setelem_batch_add(nftnl_set*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_setelem_batch_add} + + [D] 'function int mnl_nft_setelem_batch_del(nftnl_set*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_setelem_batch_del} + + [D] 'function int mnl_nft_setelem_batch_flush(nftnl_set*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_setelem_batch_flush} + + [D] 'function int mnl_nft_setelem_get(netlink_ctx*, nftnl_set*)' {mnl_nft_setelem_get} + + [D] 'function nftnl_set* mnl_nft_setelem_get_one(netlink_ctx*, nftnl_set*)' {mnl_nft_setelem_get_one} + + [D] 'function int mnl_nft_table_batch_add(nftnl_table*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_table_batch_add} + + [D] 'function int mnl_nft_table_batch_del(nftnl_table*, nftnl_batch*, unsigned int, uint32_t)' {mnl_nft_table_batch_del} + + [D] 'function nftnl_table_list* mnl_nft_table_dump(netlink_ctx*, int)' {mnl_nft_table_dump} + + [D] 'function uint32_t mnl_seqnum_alloc(unsigned int*)' {mnl_seqnum_alloc} + + [D] 'function monitor* monitor_alloc(uint32_t, uint32_t, const char*)' {monitor_alloc} + + [D] 'function void monitor_free(monitor*)' {monitor_free} + + [D] 'function void mpz_bitmask(__mpz_struct*, unsigned int)' {mpz_bitmask} + + [D] 'function void* mpz_export_data(void*, const __mpz_struct*, byteorder, unsigned int)' {mpz_export_data} + + [D] 'function uint16_t mpz_get_be16(const __mpz_struct*)' {mpz_get_be16} + + [D] 'function uint32_t mpz_get_be32(const __mpz_struct*)' {mpz_get_be32} + + [D] 'function uint16_t mpz_get_uint16(const __mpz_struct*)' {mpz_get_uint16} + + [D] 'function uint32_t mpz_get_uint32(const __mpz_struct*)' {mpz_get_uint32} + + [D] 'function uint64_t mpz_get_uint64(const __mpz_struct*)' {mpz_get_uint64} + + [D] 'function uint8_t mpz_get_uint8(const __mpz_struct*)' {mpz_get_uint8} + + [D] 'function void mpz_import_data(__mpz_struct*, void*, byteorder, unsigned int)' {mpz_import_data} + + [D] 'function void mpz_init_bitmask(__mpz_struct*, unsigned int)' {mpz_init_bitmask} + + [D] 'function void mpz_lshift_ui(__mpz_struct*, unsigned int)' {mpz_lshift_ui} + + [D] 'function void mpz_prefixmask(__mpz_struct*, unsigned int, unsigned int)' {mpz_prefixmask} + + [D] 'function void mpz_rshift_ui(__mpz_struct*, unsigned int)' {mpz_rshift_ui} + + [D] 'function void mpz_switch_byteorder(__mpz_struct*, unsigned int)' {mpz_switch_byteorder} + + [D] 'function bool must_print_eq_op(const expr*)' {must_print_eq_op} + + [D] 'function const char* nat_etype2str(nft_nat_etypes)' {nat_etype2str} + + [D] 'function stmt* nat_stmt_alloc(const location*, nft_nat_etypes)' {nat_stmt_alloc} + + [D] 'function int netlink_add_chain_batch(netlink_ctx*, const cmd*, uint32_t)' {netlink_add_chain_batch} + + [D] 'function int netlink_add_flowtable(netlink_ctx*, const cmd*, uint32_t)' {netlink_add_flowtable} + + [D] 'function int netlink_add_obj(netlink_ctx*, const cmd*, uint32_t)' {netlink_add_obj} + + [D] 'function int netlink_add_rule_batch(netlink_ctx*, const cmd*, uint32_t)' {netlink_add_rule_batch} + + [D] 'function int netlink_add_set_batch(netlink_ctx*, const cmd*, uint32_t)' {netlink_add_set_batch} + + [D] 'function int netlink_add_setelems_batch(netlink_ctx*, const handle*, const expr*, uint32_t)' {netlink_add_setelems_batch} + + [D] 'function int netlink_add_table_batch(netlink_ctx*, const cmd*, uint32_t)' {netlink_add_table_batch} + + [D] 'function expr* netlink_alloc_data(const location*, const nft_data_delinearize*, nft_registers)' {netlink_alloc_data} + + [D] 'function expr* netlink_alloc_value(const location*, const nft_data_delinearize*)' {netlink_alloc_value} + + [D] 'function int netlink_batch_send(netlink_ctx*, list_head*)' {netlink_batch_send} + + [D] 'function void netlink_close_sock(mnl_socket*)' {netlink_close_sock} + + [D] 'function int netlink_del_rule_batch(netlink_ctx*, const cmd*)' {netlink_del_rule_batch} + + [D] 'function int netlink_delete_chain_batch(netlink_ctx*, const cmd*)' {netlink_delete_chain_batch} + + [D] 'function int netlink_delete_flowtable(netlink_ctx*, const cmd*)' {netlink_delete_flowtable} + + [D] 'function int netlink_delete_obj(netlink_ctx*, const cmd*, uint32_t)' {netlink_delete_obj} + + [D] 'function int netlink_delete_set_batch(netlink_ctx*, const cmd*)' {netlink_delete_set_batch} + + [D] 'function int netlink_delete_setelems_batch(netlink_ctx*, const cmd*)' {netlink_delete_setelems_batch} + + [D] 'function int netlink_delete_table_batch(netlink_ctx*, const cmd*)' {netlink_delete_table_batch} + + [D] 'function chain* netlink_delinearize_chain(netlink_ctx*, const nftnl_chain*)' {netlink_delinearize_chain} + + [D] 'function obj* netlink_delinearize_obj(netlink_ctx*, nftnl_obj*)' {netlink_delinearize_obj} + + [D] 'function rule* netlink_delinearize_rule(netlink_ctx*, nftnl_rule*)' {netlink_delinearize_rule} + + [D] 'function set* netlink_delinearize_set(netlink_ctx*, const nftnl_set*)' {netlink_delinearize_set} + + [D] 'function int netlink_delinearize_setelem(nftnl_set_elem*, const set*, nft_cache*)' {netlink_delinearize_setelem} + + [D] 'function table* netlink_delinearize_table(netlink_ctx*, const nftnl_table*)' {netlink_delinearize_table} + + [D] 'function void netlink_dump_chain(const nftnl_chain*, netlink_ctx*)' {netlink_dump_chain} + + [D] 'function void netlink_dump_expr(const nftnl_expr*, FILE*, unsigned int)' {netlink_dump_expr} + + [D] 'function void netlink_dump_obj(nftnl_obj*, netlink_ctx*)' {netlink_dump_obj} + + [D] 'function void netlink_dump_rule(const nftnl_rule*, netlink_ctx*)' {netlink_dump_rule} + + [D] 'function nftnl_ruleset* netlink_dump_ruleset(netlink_ctx*, const handle*, const location*)' {netlink_dump_ruleset} + + [D] 'function void netlink_dump_set(const nftnl_set*, netlink_ctx*)' {netlink_dump_set} + + [D] 'function int netlink_echo_callback(const nlmsghdr*, void*)' {netlink_echo_callback} + + [D] 'function int netlink_events_trace_cb(const nlmsghdr*, int, netlink_mon_handler*)' {netlink_events_trace_cb} + + [D] 'function int netlink_flush_chain(netlink_ctx*, const cmd*)' {netlink_flush_chain} + + [D] 'function int netlink_flush_setelems(netlink_ctx*, const cmd*)' {netlink_flush_setelems} + + [D] 'function void netlink_gen_data(const expr*, nft_data_linearize*)' {netlink_gen_data} + + [D] 'function void netlink_gen_raw_data(const __mpz_struct*, byteorder, unsigned int, nft_data_linearize*)' {netlink_gen_raw_data} + + [D] 'function uint16_t netlink_genid_get(netlink_ctx*)' {netlink_genid_get} + + [D] 'function int netlink_get_setelem(netlink_ctx*, const handle*, const location*, table*, set*, expr*)' {netlink_get_setelem} + + [D] 'function int netlink_io_error(netlink_ctx*, const location*, const char*, ...)' {netlink_io_error} + + [D] 'function void netlink_linearize_rule(netlink_ctx*, nftnl_rule*, const rule*)' {netlink_linearize_rule} + + [D] 'function int netlink_list_chains(netlink_ctx*, const handle*)' {netlink_list_chains} + + [D] 'function int netlink_list_flowtables(netlink_ctx*, const handle*)' {netlink_list_flowtables} + + [D] 'function int netlink_list_objs(netlink_ctx*, const handle*)' {netlink_list_objs} + + [D] 'function int netlink_list_setelems(netlink_ctx*, const handle*, set*)' {netlink_list_setelems} + + [D] 'function int netlink_list_sets(netlink_ctx*, const handle*)' {netlink_list_sets} + + [D] 'function int netlink_list_table(netlink_ctx*, const handle*)' {netlink_list_table} + + [D] 'function int netlink_list_tables(netlink_ctx*, const handle*)' {netlink_list_tables} + + [D] 'function int netlink_markup_parse_cb(const nftnl_parse_ctx*)' {netlink_markup_parse_cb} + + [D] 'function int netlink_monitor(netlink_mon_handler*, mnl_socket*)' {netlink_monitor} + + [D] 'function mnl_socket* netlink_open_sock()' {netlink_open_sock} + + [D] 'function stmt* netlink_parse_set_expr(const set*, const nft_cache*, const nftnl_expr*)' {netlink_parse_set_expr} + + [D] 'function int netlink_rename_chain_batch(netlink_ctx*, const handle*, const cmd*)' {netlink_rename_chain_batch} + + [D] 'function int netlink_replace_rule_batch(netlink_ctx*, const cmd*)' {netlink_replace_rule_batch} + + [D] 'function int netlink_reset_objs(netlink_ctx*, const cmd*, uint32_t, bool)' {netlink_reset_objs} + + [D] 'function void netlink_restart(mnl_socket*)' {netlink_restart} + + [D] 'function YY_BUFFER_STATE nft__create_buffer(FILE*, int, yyscan_t)' {nft__create_buffer} + + [D] 'function void nft__delete_buffer(YY_BUFFER_STATE, yyscan_t)' {nft__delete_buffer} + + [D] 'function void nft__flush_buffer(YY_BUFFER_STATE, yyscan_t)' {nft__flush_buffer} + + [D] 'function YY_BUFFER_STATE nft__scan_buffer(char*, yy_size_t, yyscan_t)' {nft__scan_buffer} + + [D] 'function YY_BUFFER_STATE nft__scan_bytes(const char*, int, yyscan_t)' {nft__scan_bytes} + + [D] 'function YY_BUFFER_STATE nft__scan_string(const char*, yyscan_t)' {nft__scan_string} + + [D] 'function void nft__switch_to_buffer(YY_BUFFER_STATE, yyscan_t)' {nft__switch_to_buffer} + + [D] 'function void* nft_alloc(yy_size_t, yyscan_t)' {nft_alloc} + + [D] 'function void nft_cmd_expand(cmd*)' {nft_cmd_expand} + + [D] 'function bool nft_ctx_output_get_echo(nft_ctx*)' {nft_ctx_output_get_echo} + + [D] 'function bool nft_ctx_output_get_handle(nft_ctx*)' {nft_ctx_output_get_handle} + + [D] 'function bool nft_ctx_output_get_ip2name(nft_ctx*)' {nft_ctx_output_get_ip2name} + + [D] 'function bool nft_ctx_output_get_json(nft_ctx*)' {nft_ctx_output_get_json} + + [D] 'function nft_numeric_level nft_ctx_output_get_numeric(nft_ctx*)' {nft_ctx_output_get_numeric} + + [D] 'function bool nft_ctx_output_get_stateless(nft_ctx*)' {nft_ctx_output_get_stateless} + + [D] 'function void nft_ctx_output_set_echo(nft_ctx*, bool)' {nft_ctx_output_set_echo} + + [D] 'function void nft_ctx_output_set_handle(nft_ctx*, bool)' {nft_ctx_output_set_handle} + + [D] 'function void nft_ctx_output_set_ip2name(nft_ctx*, bool)' {nft_ctx_output_set_ip2name} + + [D] 'function void nft_ctx_output_set_json(nft_ctx*, bool)' {nft_ctx_output_set_json} + + [D] 'function void nft_ctx_output_set_numeric(nft_ctx*, nft_numeric_level)' {nft_ctx_output_set_numeric} + + [D] 'function void nft_ctx_output_set_stateless(nft_ctx*, bool)' {nft_ctx_output_set_stateless} + + [D] 'function void nft_free(void*, yyscan_t)' {nft_free} + + [D] 'function int nft_get_column(yyscan_t)' {nft_get_column} + + [D] 'function int nft_get_debug(yyscan_t)' {nft_get_debug} + + [D] 'function void* nft_get_extra(yyscan_t)' {nft_get_extra} + + [D] 'function FILE* nft_get_in(yyscan_t)' {nft_get_in} + + [D] 'function int nft_get_leng(yyscan_t)' {nft_get_leng} + + [D] 'function int nft_get_lineno(yyscan_t)' {nft_get_lineno} + + [D] 'function location* nft_get_lloc(yyscan_t)' {nft_get_lloc} + + [D] 'function YYSTYPE* nft_get_lval(yyscan_t)' {nft_get_lval} + + [D] 'function FILE* nft_get_out(yyscan_t)' {nft_get_out} + + [D] 'function char* nft_get_text(yyscan_t)' {nft_get_text} + + [D] 'function int nft_gmp_print(output_ctx*, const char*, ...)' {nft_gmp_print} + + [D] 'function char* nft_if_indextoname(unsigned int, char*)' {nft_if_indextoname} + + [D] 'function unsigned int nft_if_nametoindex(const char*)' {nft_if_nametoindex} + + [D] 'function int nft_lex(YYSTYPE*, location*, yyscan_t)' {nft_lex} + + [D] 'function int nft_lex_destroy(yyscan_t)' {nft_lex_destroy} + + [D] 'function int nft_lex_init(yyscan_t*)' {nft_lex_init} + + [D] 'function int nft_lex_init_extra(void*, yyscan_t*)' {nft_lex_init_extra} + + [D] 'function int nft_parse(nft_ctx*, void*, parser_state*)' {nft_parse} + + [D] 'function void nft_pop_buffer_state(yyscan_t)' {nft_pop_buffer_state} + + [D] 'function int nft_print(output_ctx*, const char*, ...)' {nft_print} + + [D] 'function void nft_push_buffer_state(YY_BUFFER_STATE, yyscan_t)' {nft_push_buffer_state} + + [D] 'function void* nft_realloc(void*, yy_size_t, yyscan_t)' {nft_realloc} + + [D] 'function void nft_restart(FILE*, yyscan_t)' {nft_restart} + + [D] 'function void nft_set_column(int, yyscan_t)' {nft_set_column} + + [D] 'function void nft_set_debug(int, yyscan_t)' {nft_set_debug} + + [D] 'function void nft_set_extra(void*, yyscan_t)' {nft_set_extra} + + [D] 'function void nft_set_in(FILE*, yyscan_t)' {nft_set_in} + + [D] 'function void nft_set_lineno(int, yyscan_t)' {nft_set_lineno} + + [D] 'function void nft_set_lloc(location*, yyscan_t)' {nft_set_lloc} + + [D] 'function void nft_set_lval(YYSTYPE*, yyscan_t)' {nft_set_lval} + + [D] 'function void nft_set_out(FILE*, yyscan_t)' {nft_set_out} + + [D] 'function stmt* notrack_stmt_alloc(const location*)' {notrack_stmt_alloc} + + [D] 'function expr* numgen_expr_alloc(const location*, nft_ng_types, uint32_t, uint32_t)' {numgen_expr_alloc} + + [D] 'function void obj_add_hash(obj*, table*)' {obj_add_hash} + + [D] 'function obj* obj_alloc(const location*)' {obj_alloc} + + [D] 'function void obj_free(obj*)' {obj_free} + + [D] 'function obj* obj_get(obj*)' {obj_get} + + [D] 'function obj* obj_lookup(const table*, const char*, uint32_t)' {obj_lookup} + + [D] 'function void obj_print(const obj*, output_ctx*)' {obj_print} + + [D] 'function void obj_print_plain(const obj*, output_ctx*)' {obj_print_plain} + + [D] 'function const char* obj_type_name(stmt_types)' {obj_type_name} + + [D] 'function uint32_t obj_type_to_cmd(uint32_t)' {obj_type_to_cmd} + + [D] 'function stmt* objref_stmt_alloc(const location*)' {objref_stmt_alloc} + + [D] 'function const char* objref_type_name(uint32_t)' {objref_type_name} + + [D] 'function void parser_init(nft_ctx*, parser_state*, list_head*, list_head*)' {parser_init} + + [D] 'function bool payload_can_merge(const expr*, const expr*)' {payload_can_merge} + + [D] 'function bool payload_dependency_exists(const payload_dep_ctx*, proto_bases)' {payload_dependency_exists} + + [D] 'function void payload_dependency_kill(payload_dep_ctx*, expr*, unsigned int)' {payload_dependency_kill} + + [D] 'function void payload_dependency_release(payload_dep_ctx*)' {payload_dependency_release} + + [D] 'function void payload_dependency_reset(payload_dep_ctx*)' {payload_dependency_reset} + + [D] 'function void payload_dependency_store(payload_dep_ctx*, stmt*, proto_bases)' {payload_dependency_store} + + [D] 'function expr* payload_expr_alloc(const location*, const proto_desc*, unsigned int)' {payload_expr_alloc} + + [D] 'function void payload_expr_complete(expr*, const proto_ctx*)' {payload_expr_complete} + + [D] 'function void payload_expr_expand(list_head*, expr*, const proto_ctx*)' {payload_expr_expand} + + [D] 'function expr* payload_expr_join(const expr*, const expr*)' {payload_expr_join} + + [D] 'function bool payload_expr_trim(expr*, expr*, const proto_ctx*, unsigned int*)' {payload_expr_trim} + + [D] 'function int payload_gen_dependency(eval_ctx*, const expr*, stmt**)' {payload_gen_dependency} + + [D] 'function unsigned int payload_hdr_field(const expr*)' {payload_hdr_field} + + [D] 'function void payload_init_raw(expr*, proto_bases, unsigned int, unsigned int)' {payload_init_raw} + + [D] 'function bool payload_is_known(const expr*)' {payload_is_known} + + [D] 'function bool payload_is_stacked(const proto_desc*, const expr*)' {payload_is_stacked} + + [D] 'function stmt* payload_stmt_alloc(const location*, expr*, expr*)' {payload_stmt_alloc} + + [D] 'function expr* prefix_expr_alloc(const location*, expr*, unsigned int)' {prefix_expr_alloc} + + [D] 'function void proto_ctx_init(proto_ctx*, unsigned int, unsigned int)' {proto_ctx_init} + + [D] 'function void proto_ctx_update(proto_ctx*, proto_bases, const location*, const proto_desc*)' {proto_ctx_update} + + [D] 'function const proto_desc* proto_dev_desc(uint16_t)' {proto_dev_desc} + + [D] 'function int proto_dev_type(const proto_desc*, uint16_t*)' {proto_dev_type} + + [D] 'function int proto_find_num(const proto_desc*, const proto_desc*)' {proto_find_num} + + [D] 'function const proto_desc* proto_find_upper(const proto_desc*, unsigned int)' {proto_find_upper} + + [D] 'function stmt* queue_stmt_alloc(const location*)' {queue_stmt_alloc} + + [D] 'function stmt* quota_stmt_alloc(const location*)' {quota_stmt_alloc} + + [D] 'function expr* range_expr_alloc(const location*, expr*, expr*)' {range_expr_alloc} + + [D] 'function void range_expr_value_high(__mpz_struct*, const expr*)' {range_expr_value_high} + + [D] 'function void range_expr_value_low(__mpz_struct*, const expr*)' {range_expr_value_low} + + [D] 'function error_record* rate_parse(const location*, const char*, uint64_t*, uint64_t*)' {rate_parse} + + [D] 'function void rb_erase(rb_node*, rb_root*)' {rb_erase} + + [D] 'function rb_node* rb_first(rb_root*)' {rb_first} + + [D] 'function void rb_insert_color(rb_node*, rb_root*)' {rb_insert_color} + + [D] 'function rb_node* rb_last(rb_root*)' {rb_last} + + [D] 'function rb_node* rb_next(rb_node*)' {rb_next} + + [D] 'function rb_node* rb_prev(rb_node*)' {rb_prev} + + [D] 'function void rb_replace_node(rb_node*, rb_node*, rb_root*)' {rb_replace_node} + + [D] 'function void realm_table_meta_exit()' {realm_table_meta_exit} + + [D] 'function void realm_table_meta_init()' {realm_table_meta_init} + + [D] 'function void realm_table_rt_exit()' {realm_table_rt_exit} + + [D] 'function void realm_table_rt_init()' {realm_table_rt_init} + + [D] 'function stmt* reject_stmt_alloc(const location*)' {reject_stmt_alloc} + + [D] 'function expr* relational_expr_alloc(const location*, ops, expr*, expr*)' {relational_expr_alloc} + + [D] 'function void relational_expr_pctx_update(proto_ctx*, const expr*)' {relational_expr_pctx_update} + + [D] 'function expr* rt_expr_alloc(const location*, nft_rt_keys, bool)' {rt_expr_alloc} + + [D] 'function void rt_expr_update_type(proto_ctx*, expr*)' {rt_expr_update_type} + + [D] 'function void rt_symbol_table_free(symbol_table*)' {rt_symbol_table_free} + + [D] 'function symbol_table* rt_symbol_table_init(const char*)' {rt_symbol_table_init} + + [D] 'function rule* rule_alloc(const location*, const handle*)' {rule_alloc} + + [D] 'function void rule_free(rule*)' {rule_free} + + [D] 'function rule* rule_get(rule*)' {rule_get} + + [D] 'function rule* rule_lookup(const chain*, uint64_t)' {rule_lookup} + + [D] 'function error_record* rule_postprocess(rule*)' {rule_postprocess} + + [D] 'function void rule_print(const rule*, output_ctx*)' {rule_print} + + [D] 'function void scanner_destroy(void*)' {scanner_destroy} + + [D] 'function int scanner_include_file(nft_ctx*, void*, const char*, const location*)' {scanner_include_file} + + [D] 'function void* scanner_init(parser_state*)' {scanner_init} + + [D] 'function void scanner_push_buffer(void*, const input_descriptor*, const char*)' {scanner_push_buffer} + + [D] 'function int scanner_read_file(void*, const char*, const location*)' {scanner_read_file} + + [D] 'function scope* scope_init(scope*, const scope*)' {scope_init} + + [D] 'function void scope_release(const scope*)' {scope_release} + + [D] 'function void set_add_hash(set*, table*)' {set_add_hash} + + [D] 'function set* set_alloc(const location*)' {set_alloc} + + [D] 'function set* set_clone(const set*)' {set_clone} + + [D] 'function const datatype* set_datatype_alloc(const datatype*, unsigned int)' {set_datatype_alloc} + + [D] 'function void set_datatype_destroy(const datatype*)' {set_datatype_destroy} + + [D] 'function expr* set_elem_expr_alloc(const location*, expr*)' {set_elem_expr_alloc} + + [D] 'function expr* set_expr_alloc(const location*, const set*)' {set_expr_alloc} + + [D] 'function void set_free(set*)' {set_free} + + [D] 'function set* set_get(set*)' {set_get} + + [D] 'function set* set_lookup(const table*, const char*)' {set_lookup} + + [D] 'function set* set_lookup_global(uint32_t, const char*, const char*, nft_cache*)' {set_lookup_global} + + [D] 'function const char* set_policy2str(uint32_t)' {set_policy2str} + + [D] 'function void set_print(const set*, output_ctx*)' {set_print} + + [D] 'function void set_print_plain(const set*, output_ctx*)' {set_print_plain} + + [D] 'function expr* set_ref_expr_alloc(const location*, set*)' {set_ref_expr_alloc} + + [D] 'function stmt* set_stmt_alloc(const location*)' {set_stmt_alloc} + + [D] 'function int set_to_intervals(list_head*, set*, expr*, bool, unsigned int, bool)' {set_to_intervals} + + [D] 'function expr* socket_expr_alloc(const location*, nft_socket_keys)' {socket_expr_alloc} + + [D] 'function stmt* stmt_alloc(const location*, const stmt_ops*)' {stmt_alloc} + + [D] 'function int stmt_evaluate(eval_ctx*, stmt*)' {stmt_evaluate} + + [D] 'function void stmt_free(stmt*)' {stmt_free} + + [D] 'function void stmt_list_free(list_head*)' {stmt_list_free} + + [D] 'function void stmt_print(const stmt*, output_ctx*)' {stmt_print} + + [D] 'function void symbol_bind(scope*, const char*, expr*)' {symbol_bind} + + [D] 'function expr* symbol_expr_alloc(const location*, symbol_types, scope*, const char*)' {symbol_expr_alloc} + + [D] 'function symbol* symbol_get(const scope*, const char*)' {symbol_get} + + [D] 'function symbol* symbol_lookup(const scope*, const char*)' {symbol_lookup} + + [D] 'function error_record* symbol_parse(const expr*, expr**)' {symbol_parse} + + [D] 'function void symbol_table_print(const symbol_table*, const datatype*, byteorder, output_ctx*)' {symbol_table_print} + + [D] 'function int symbol_unbind(const scope*, const char*)' {symbol_unbind} + + [D] 'function error_record* symbolic_constant_parse(const expr*, const symbol_table*, expr**)' {symbolic_constant_parse} + + [D] 'function void symbolic_constant_print(const symbol_table*, const expr*, bool, output_ctx*)' {symbolic_constant_print} + + [D] 'function void table_add_hash(table*, nft_cache*)' {table_add_hash} + + [D] 'function table* table_alloc()' {table_alloc} + + [D] 'function void table_free(table*)' {table_free} + + [D] 'function table* table_get(table*)' {table_get} + + [D] 'function table* table_lookup(const handle*, const nft_cache*)' {table_lookup} + + [D] 'function expr* tcpopt_expr_alloc(const location*, uint8_t, uint8_t)' {tcpopt_expr_alloc} + + [D] 'function bool tcpopt_find_template(expr*, const expr*, unsigned int*)' {tcpopt_find_template} + + [D] 'function void tcpopt_init_raw(expr*, uint8_t, unsigned int, unsigned int, uint32_t)' {tcpopt_init_raw} + + [D] 'function error_record* time_parse(const location*, const char*, uint64_t*)' {time_parse} + + [D] 'function void time_print(uint64_t, output_ctx*)' {time_print} + + [D] 'function expr* unary_expr_alloc(const location*, ops, expr*)' {unary_expr_alloc} + + [D] 'function expr* variable_expr_alloc(const location*, scope*, symbol*)' {variable_expr_alloc} + + [D] 'function expr* verdict_expr_alloc(const location*, int, const char*)' {verdict_expr_alloc} + + [D] 'function stmt* verdict_stmt_alloc(const location*, expr*)' {verdict_stmt_alloc} + + [D] 'function void xfree(void*)' {xfree} + + [D] 'function void* xmalloc(size_t)' {xmalloc} + + [D] 'function void* xmalloc_array(size_t, size_t)' {xmalloc_array} + + [D] 'function void* xrealloc(void*, size_t)' {xrealloc} + + [D] 'function char* xstrdup(const char*)' {xstrdup} + + [D] 'function void xstrunescape(const char*, char*)' {xstrunescape} + + [D] 'function stmt* xt_stmt_alloc(const location*)' {xt_stmt_alloc} + + [D] 'function void* xzalloc(size_t)' {xzalloc} + + + +2 Added functions: + + + + [A] 'function unsigned int nft_ctx_output_get_flags(nft_ctx*)' {nft_ctx_output_get_flags} + + [A] 'function void nft_ctx_output_set_flags(nft_ctx*, unsigned int)' {nft_ctx_output_set_flags} + + + +2 functions with some indirect sub-type change: + + + + [C]'function int nft_ctx_add_include_path(nft_ctx*, const char*)' at libnftables.c:102:1 has some indirect sub-type changes: + + parameter 1 of type 'nft_ctx*' has sub-type changes: + + in pointed to type 'struct nft_ctx' at nftables.h:111:1: + + type size changed from 1600 to 1856 (in bits) + + 2 data member insertions: + + 'scope* nft_ctx::top_scope', at offset 1728 (in bits) at nftables.h:123:1 + + 'void* nft_ctx::json_root', at offset 1792 (in bits) at nftables.h:124:1 + + 6 data member changes: + + type of 'output_ctx nft_ctx::output' changed: + + type size changed from 832 to 960 (in bits) + + 5 data member deletions: + + 'unsigned int output_ctx::stateless', at offset 32 (in bits) at nftables.h:20:1 + + + + 'unsigned int output_ctx::ip2name', at offset 64 (in bits) at nftables.h:21:1 + + + + 'unsigned int output_ctx::handle', at offset 96 (in bits) at nftables.h:22:1 + + + + 'unsigned int output_ctx::echo', at offset 128 (in bits) at nftables.h:23:1 + + + + 'unsigned int output_ctx::json', at offset 160 (in bits) at nftables.h:24:1 + + + + 1 data member insertion: + + 'symbol_tables output_ctx::tbl', at offset 704 (in bits) at nftables.h:35:1 + + 1 data member change: + + offset changed from 192 to 64 (in bits) (by -128 bits) + + no data member change (1 filtered); + + + + 'bool nft_ctx::check' offset changed from 1088 to 1216 (in bits) (by +128 bits) + + type of 'nft_cache nft_ctx::cache' changed: + + type size hasn't changed + + 1 data member insertion: + + 'uint32_t nft_cache::flags', at offset 224 (in bits) at nftables.h:102:1 + + 1 data member change: + + type of 'uint16_t nft_cache::genid' changed: + + typedef name changed from uint16_t to uint32_t at stdint-uintn.h:26:1 + + underlying type 'typedef __uint16_t' at types.h:39:1 changed: + + typedef name changed from __uint16_t to __uint32_t at types.h:41:1 + + underlying type 'unsigned short int' changed: + + type name changed from 'unsigned short int' to 'unsigned int' + + type size changed from 16 to 32 (in bits) + + + + and offset changed from 1152 to 1280 (in bits) (by +128 bits) + + 'uint32_t nft_ctx::flags' offset changed from 1408 to 1536 (in bits) (by +128 bits) + + type of 'parser_state* nft_ctx::state' changed: + + in pointed to type 'struct parser_state' at parser.h:16:1: + + type size changed from 14720 to 640 (in bits) + + 3 data member deletions: + + 'unsigned int parser_state::indesc_idx', at offset 11328 (in bits) at parser.h:19:1 + + + + 'scope parser_state::top_scope', at offset 11520 (in bits) at parser.h:24:1 + + + + 'eval_ctx parser_state::ectx', at offset 12032 (in bits) at parser.h:29:1 + + + + 6 data member changes: + + type of 'input_descriptor* parser_state::indesc' changed: + + in pointed to type 'struct input_descriptor' at nftables.h:188:1: + + type size changed from 704 to 960 (in bits) + + 3 data member insertions: + + 'list_head input_descriptor::list', at offset 0 (in bits) at nftables.h:189:1 + + 'FILE* input_descriptor::f', at offset 128 (in bits) at nftables.h:190:1 + + 'unsigned int input_descriptor::depth', at offset 192 (in bits) at nftables.h:191:1 + + 8 data member changes: + + 'location input_descriptor::location' offset changed from 0 to 256 (in bits) (by +256 bits) + + 'input_descriptor_types input_descriptor::type' offset changed from 320 to 576 (in bits) (by +256 bits) + + 'const char* input_descriptor::name' offset changed from 384 to 640 (in bits) (by +256 bits) + + 'const char* input_descriptor::data' offset changed from 448 to 704 (in bits) (by +256 bits) + + 'unsigned int input_descriptor::lineno' offset changed from 512 to 768 (in bits) (by +256 bits) + + 'unsigned int input_descriptor::column' offset changed from 544 to 800 (in bits) (by +256 bits) + + 'off_t input_descriptor::token_offset' offset changed from 576 to 832 (in bits) (by +256 bits) + + 'off_t input_descriptor::line_offset' offset changed from 640 to 896 (in bits) (by +256 bits) + + + + 'list_head* parser_state::msgs' offset changed from 11392 to 192 (in bits) (by -11200 bits) + + 'unsigned int parser_state::nerrs' offset changed from 11456 to 256 (in bits) (by -11200 bits) + + 'scope* parser_state::scopes[3]' offset changed from 11712 to 320 (in bits) (by -11392 bits) + + 'unsigned int parser_state::scope' offset changed from 11904 to 512 (in bits) (by -11392 bits) + + 'list_head* parser_state::cmds' offset changed from 11968 to 576 (in bits) (by -11392 bits) + + 1 data member change: + + type of 'input_descriptor parser_state::indescs[16]' changed: + + entity changed from 'input_descriptor[16]' to 'struct list_head' at list.h:21:1 + + type size changed from 11264 to 128 (in bits) + + and name of 'parser_state::indescs' changed to 'parser_state::indesc_list' at parser.h:18:1 + + and offset changed from 1472 to 1600 (in bits) (by +128 bits) + + 'void* nft_ctx::scanner' offset changed from 1536 to 1664 (in bits) (by +128 bits) + + + + [C]'function int nft_run_cmd_from_buffer(nft_ctx*, char*, size_t)' at libnftables.c:433:1 has some indirect sub-type changes: + + parameter 3 of type 'typedef size_t' was removed + + + + + + + +2 Removed function symbols not referenced by debug info: + + + + netlink_flush_ruleset + + netlink_flush_table + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/openhpi_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/openhpi_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..52b657ec772ee7c7ea5b7aac5e03ae6cc41022b5 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/openhpi_all_result.md @@ -0,0 +1,84 @@ +# Functions changed info + +---------------diffs in openhpi_libopenhpi.so.3.8.0_abidiff.out:---------------- + +---------------diffs in openhpi_libopenhpiutils.so.3.8.0_abidiff.out:---------------- + +---------------diffs in openhpi_libopenhpimarshal.so.3.8.0_abidiff.out:---------------- + +---------------diffs in openhpi_liboa_soap.so.3.8.0_abidiff.out:---------------- + +---------------diffs in openhpi_libopenhpitransport.so.3.8.0_abidiff.out:---------------- + +---------------diffs in openhpi_libilo2_ribcl.so.3.8.0_abidiff.out:---------------- + +---------------diffs in openhpi_libtest_agent.so.3.8.0_abidiff.out:---------------- + +---------------diffs in openhpi_libov_rest.so.3.8.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +1 function with some indirect sub-type change: + + + + [C]'function SaErrorT curlerr_to_ov_rest_err(CURLcode)' at ov_rest_callsupport.c:82:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef CURLcode' has sub-type changes: + + underlying type 'enum __anonymous_enum__' at curl.h:475:1 changed: + + type size hasn't changed + + 2 enumerator insertions: + + '__anonymous_enum__::CURLE_HTTP3' value '95' + + '__anonymous_enum__::CURLE_QUIC_CONNECT_ERROR' value '96' + + + + 1 enumerator change: + + '__anonymous_enum__::CURL_LAST' from value '95' to '97' at curl.h:481:1 + + + + + + + +---------------diffs in openhpi_libsimulator.so.3.8.0_abidiff.out:---------------- + +---------------diffs in openhpi_libipmidirect.so.3.8.0_abidiff.out:---------------- + +---------------diffs in openhpi_libslave.so.3.8.0_abidiff.out:---------------- + +---------------diffs in openhpi_libopenhpi_snmp.so.3.8.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed (4 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +---------------diffs in openhpi_libsnmp_bc.so.3.8.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed (11 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +---------------diffs in openhpi_libsysfs2hpi.so.3.8.0_abidiff.out:---------------- + +---------------diffs in openhpi_libdyn_simulator.so.3.8.0_abidiff.out:---------------- + +---------------diffs in openhpi_libopenhpi_ssl.so.3.8.0_abidiff.out:---------------- + +---------------diffs in openhpi_libwatchdog.so.3.8.0_abidiff.out:---------------- + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/openldap_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/openldap_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..7fea97b240b91b23b8ed2d44edfeba5f0321f01a --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/openldap_all_result.md @@ -0,0 +1,224 @@ +# Functions changed info + +---------------diffs in openldap_libldap-2.4.so.2.10.13_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 4 Changed (188 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 2 Changed, 0 Added variables + + + +4 functions with some indirect sub-type change: + + + + [C]'function int ldap_abandon(LDAP*, int)' at abandon.c:99:1 has some indirect sub-type changes: + + parameter 1 of type 'LDAP*' has sub-type changes: + + in pointed to type 'typedef LDAP' at ldap.h:754:1: + + underlying type 'struct ldap' at ldap-int.h:477:1 changed: + + type size hasn't changed + + 1 data member change: + + type of 'ldap_common* ldap::ldc' changed: + + in pointed to type 'struct ldap_common' at ldap-int.h:389:1: + + type size changed from 3840 to 3904 (in bits) + + 1 data member change: + + type of 'ldapoptions ldap_common::ldc_options' changed: + + type size changed from 3072 to 3136 (in bits) + + 10 data member changes (4 filtered): + + type of 'ldaptls ldapoptions::ldo_tls_info' changed: + + type size changed from 576 to 640 (in bits) + + 1 data member insertion: + + 'char* ldaptls::lt_ecname', at offset 512 (in bits) at ldap-int.h:168:1 + + 1 data member change: + + 'int ldaptls::lt_protocol_min' offset changed from 512 to 576 (in bits) (by +64 bits) + + + + 'int ldapoptions::ldo_tls_mode' offset changed from 2432 to 2496 (in bits) (by +64 bits) + + 'int ldapoptions::ldo_tls_require_cert' offset changed from 2464 to 2528 (in bits) (by +64 bits) + + 'int ldapoptions::ldo_tls_impl' offset changed from 2496 to 2560 (in bits) (by +64 bits) + + 'int ldapoptions::ldo_tls_crlcheck' offset changed from 2528 to 2592 (in bits) (by +64 bits) + + 'char* ldapoptions::ldo_def_sasl_mech' offset changed from 2560 to 2624 (in bits) (by +64 bits) + + 'char* ldapoptions::ldo_def_sasl_realm' offset changed from 2624 to 2688 (in bits) (by +64 bits) + + 'char* ldapoptions::ldo_def_sasl_authcid' offset changed from 2688 to 2752 (in bits) (by +64 bits) + + 'char* ldapoptions::ldo_def_sasl_authzid' offset changed from 2752 to 2816 (in bits) (by +64 bits) + + 'sasl_security_properties ldapoptions::ldo_sasl_secprops' offset changed from 2816 to 2880 (in bits) (by +64 bits) + + + + + + + + [C]'function void ldap_int_initialize_global_options(ldapoptions*, int*)' at init.c:517:1 has some indirect sub-type changes: + + parameter 1 of type 'ldapoptions*' has sub-type changes: + + pointed to type 'struct ldapoptions' changed at ldap-int.h:183:1, as reported earlier + + + + [C]'function int ldap_int_sasl_config(ldapoptions*, int, const char*)' at cyrus.c:909:1 has some indirect sub-type changes: + + parameter 1 of type 'ldapoptions*' has sub-type changes: + + pointed to type 'struct ldapoptions' changed at ldap-int.h:183:1, as reported earlier + + + + [C]'function void ldap_int_tls_destroy(ldapoptions*)' at tls2.c:102:1 has some indirect sub-type changes: + + parameter 1 of type 'ldapoptions*' has sub-type changes: + + pointed to type 'struct ldapoptions' changed at ldap-int.h:183:1, as reported earlier + + + + + +---------------diffs in openldap_libslapi-2.4.so.2.10.13_abidiff.out:---------------- + +---------------diffs in openldap_libldap_r-2.4.so.2.10.13_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 4 Changed (188 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 2 Changed, 0 Added variables + + + +4 functions with some indirect sub-type change: + + + + [C]'function int ldap_abandon(LDAP*, int)' at abandon.c:99:1 has some indirect sub-type changes: + + parameter 1 of type 'LDAP*' has sub-type changes: + + in pointed to type 'typedef LDAP' at ldap.h:754:1: + + underlying type 'struct ldap' at ldap-int.h:477:1 changed: + + type size hasn't changed + + 1 data member change: + + type of 'ldap_common* ldap::ldc' changed: + + in pointed to type 'struct ldap_common' at ldap-int.h:389:1: + + type size changed from 6528 to 6592 (in bits) + + 7 data member changes: + + type of 'ldapoptions ldap_common::ldc_options' changed: + + type size changed from 3456 to 3520 (in bits) + + 11 data member changes (4 filtered): + + type of 'ldaptls ldapoptions::ldo_tls_info' changed: + + type size changed from 576 to 640 (in bits) + + 1 data member insertion: + + 'char* ldaptls::lt_ecname', at offset 512 (in bits) at ldap-int.h:168:1 + + 1 data member change: + + 'int ldaptls::lt_protocol_min' offset changed from 512 to 576 (in bits) (by +64 bits) + + + + 'int ldapoptions::ldo_tls_mode' offset changed from 2432 to 2496 (in bits) (by +64 bits) + + 'int ldapoptions::ldo_tls_require_cert' offset changed from 2464 to 2528 (in bits) (by +64 bits) + + 'int ldapoptions::ldo_tls_impl' offset changed from 2496 to 2560 (in bits) (by +64 bits) + + 'int ldapoptions::ldo_tls_crlcheck' offset changed from 2528 to 2592 (in bits) (by +64 bits) + + 'char* ldapoptions::ldo_def_sasl_mech' offset changed from 2560 to 2624 (in bits) (by +64 bits) + + 'char* ldapoptions::ldo_def_sasl_realm' offset changed from 2624 to 2688 (in bits) (by +64 bits) + + 'char* ldapoptions::ldo_def_sasl_authcid' offset changed from 2688 to 2752 (in bits) (by +64 bits) + + 'char* ldapoptions::ldo_def_sasl_authzid' offset changed from 2752 to 2816 (in bits) (by +64 bits) + + 'sasl_security_properties ldapoptions::ldo_sasl_secprops' offset changed from 2816 to 2880 (in bits) (by +64 bits) + + 'ldap_pvt_thread_mutex_t ldapoptions::ldo_mutex' offset changed from 3072 to 3136 (in bits) (by +64 bits) + + + + 'ldap_pvt_thread_mutex_t ldap_common::ldc_mutex' offset changed from 4224 to 4288 (in bits) (by +64 bits) + + 'ldap_pvt_thread_mutex_t ldap_common::ldc_msgid_mutex' offset changed from 4608 to 4672 (in bits) (by +64 bits) + + 'ldap_pvt_thread_mutex_t ldap_common::ldc_conn_mutex' offset changed from 4992 to 5056 (in bits) (by +64 bits) + + 'ldap_pvt_thread_mutex_t ldap_common::ldc_req_mutex' offset changed from 5376 to 5440 (in bits) (by +64 bits) + + 'ldap_pvt_thread_mutex_t ldap_common::ldc_res_mutex' offset changed from 5760 to 5824 (in bits) (by +64 bits) + + 'ldap_pvt_thread_mutex_t ldap_common::ldc_abandon_mutex' offset changed from 6144 to 6208 (in bits) (by +64 bits) + + + + + + [C]'function void ldap_int_initialize_global_options(ldapoptions*, int*)' at init.c:517:1 has some indirect sub-type changes: + + parameter 1 of type 'ldapoptions*' has sub-type changes: + + pointed to type 'struct ldapoptions' changed at ldap-int.h:183:1, as reported earlier + + + + [C]'function int ldap_int_sasl_config(ldapoptions*, int, const char*)' at cyrus.c:909:1 has some indirect sub-type changes: + + parameter 1 of type 'ldapoptions*' has sub-type changes: + + pointed to type 'struct ldapoptions' changed at ldap-int.h:183:1, as reported earlier + + + + [C]'function void ldap_int_tls_destroy(ldapoptions*)' at tls2.c:102:1 has some indirect sub-type changes: + + parameter 1 of type 'ldapoptions*' has sub-type changes: + + pointed to type 'struct ldapoptions' changed at ldap-int.h:183:1, as reported earlier + + + + + +---------------diffs in openldap_liblber-2.4.so.2.10.13_abidiff.out:---------------- + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/pam_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/pam_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..49e36c7856c479c98b624ef9192857ea0e054b8b --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/pam_all_result.md @@ -0,0 +1,170 @@ +# Functions changed info + +---------------diffs in pam_pam_timestamp.so_abidiff.out:---------------- + +---------------diffs in pam_pam_filter.so_abidiff.out:---------------- + +---------------diffs in pam_pam_issue.so_abidiff.out:---------------- + +---------------diffs in pam_pam_debug.so_abidiff.out:---------------- + +---------------diffs in pam_pam_userdb.so_abidiff.out:---------------- + +---------------diffs in pam_pam_mkhomedir.so_abidiff.out:---------------- + +---------------diffs in pam_pam_loginuid.so_abidiff.out:---------------- + +---------------diffs in pam_pam_echo.so_abidiff.out:---------------- + +---------------diffs in pam_pam_securetty.so_abidiff.out:---------------- + +---------------diffs in pam_pam_group.so_abidiff.out:---------------- + +---------------diffs in pam_pam_limits.so_abidiff.out:---------------- + +---------------diffs in pam_pam_tty_audit.so_abidiff.out:---------------- + +---------------diffs in pam_pam_motd.so_abidiff.out:---------------- + +---------------diffs in pam_pam_rhosts.so_abidiff.out:---------------- + +---------------diffs in pam_pam_selinux.so_abidiff.out:---------------- + +---------------diffs in pam_libpam.so.0.85.1_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed (38 filtered out), 3 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +3 Added functions: + + + + 'function int pam_modutil_check_user_in_passwd(pam_handle_t*, const char*, const char*)' {pam_modutil_check_user_in_passwd@@LIBPAM_MODUTIL_1.4.1} + + 'function char* pam_modutil_search_key(pam_handle_t*, const char*, const char*)' {pam_modutil_search_key@@LIBPAM_MODUTIL_1.3.2} + + 'function int pam_start_confdir(const char*, const char*, const pam_conv*, const char*, pam_handle_t**)' {pam_start_confdir@@LIBPAM_1.4} + + + +1 function with some indirect sub-type change: + + + + [C]'function int pam_acct_mgmt(pam_handle_t*, int)' at pam_account.c:7:1 has some indirect sub-type changes: + + parameter 1 of type 'pam_handle_t*' has sub-type changes: + + in pointed to type 'typedef pam_handle_t' at _pam_types.h:18:1: + + underlying type 'struct pam_handle' at pam_private.h:147:1 changed: + + type size changed from 2944 to 3072 (in bits) + + 2 data member insertions: + + 'int pam_handle::authtok_verified', at offset 2944 (in bits) at pam_private.h:180:1 + + 'char* pam_handle::confdir', at offset 3008 (in bits) at pam_private.h:181:1 + + no data member changes (2 filtered); + + + + + +---------------diffs in pam_pam_access.so_abidiff.out:---------------- + +---------------diffs in pam_pam_sepermit.so_abidiff.out:---------------- + +---------------diffs in pam_pam_pwhistory.so_abidiff.out:---------------- + +---------------diffs in pam_pam_rootok.so_abidiff.out:---------------- + +---------------diffs in pam_pam_cracklib.so_abidiff.out:---------------- + +---------------diffs in pam_pam_ftp.so_abidiff.out:---------------- + +---------------diffs in pam_libpam_misc.so.0.82.1_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed (2 filtered out), 0 Added variables + + + +---------------diffs in pam_pam_keyinit.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 2 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +2 Added functions: + + + + 'function int pam_sm_authenticate(pam_handle_t*, int, int, const char**)' {pam_sm_authenticate} + + 'function int pam_sm_setcred(pam_handle_t*, int, int, const char**)' {pam_sm_setcred} + + + +---------------diffs in pam_pam_mail.so_abidiff.out:---------------- + +---------------diffs in pam_pam_nologin.so_abidiff.out:---------------- + +---------------diffs in pam_pam_tally2.so_abidiff.out:---------------- + +---------------diffs in pam_pam_xauth.so_abidiff.out:---------------- + +---------------diffs in pam_pam_warn.so_abidiff.out:---------------- + +---------------diffs in pam_pam_exec.so_abidiff.out:---------------- + +---------------diffs in pam_pam_umask.so_abidiff.out:---------------- + +---------------diffs in pam_pam_stress.so_abidiff.out:---------------- + +---------------diffs in pam_pam_wheel.so_abidiff.out:---------------- + +---------------diffs in pam_pam_localuser.so_abidiff.out:---------------- + +---------------diffs in pam_pam_lastlog.so_abidiff.out:---------------- + +---------------diffs in pam_pam_faillock.so_abidiff.out:---------------- + +---------------diffs in pam_pam_time.so_abidiff.out:---------------- + +---------------diffs in pam_pam_tally.so_abidiff.out:---------------- + +---------------diffs in pam_pam_permit.so_abidiff.out:---------------- + +---------------diffs in pam_pam_unix.so_abidiff.out:---------------- + +---------------diffs in pam_pam_shells.so_abidiff.out:---------------- + +---------------diffs in pam_pam_faildelay.so_abidiff.out:---------------- + +---------------diffs in pam_pam_env.so_abidiff.out:---------------- + +---------------diffs in pam_pam_listfile.so_abidiff.out:---------------- + +---------------diffs in pam_libpamc.so.0.82.1_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +---------------diffs in pam_pam_namespace.so_abidiff.out:---------------- + +---------------diffs in pam_pam_deny.so_abidiff.out:---------------- + +---------------diffs in pam_pam_succeed_if.so_abidiff.out:---------------- + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/pkgconf_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/pkgconf_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..a000f470df9d192ea9ae153aa99b68a6f680afee --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/pkgconf_all_result.md @@ -0,0 +1,34 @@ +# Functions changed info + +---------------diffs in pkgconf_libpkgconf.so.3.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed (4 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +1 function with some indirect sub-type change: + + + + [C]'function void pkgconf_client_dir_list_build(pkgconf_client_t*, const pkgconf_cross_personality_t*)' at client.c:61:1 has some indirect sub-type changes: + + parameter 2 of type 'const pkgconf_cross_personality_t*' has sub-type changes: + + in pointed to type 'const pkgconf_cross_personality_t': + + in unqualified underlying type 'typedef pkgconf_cross_personality_t' at libpkgconf.h:68:1: + + underlying type 'struct pkgconf_cross_personality_' at libpkgconf.h:196:1 changed: + + type size changed from 704 to 768 (in bits) + + 1 data member insertion: + + 'bool pkgconf_cross_personality_::want_default_static', at offset 704 (in bits) at libpkgconf.h:206:1 + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/plymouth_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/plymouth_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..43ade02c4fc79aecb97402752c4e6c5411bbca30 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/plymouth_all_result.md @@ -0,0 +1,294 @@ +# Functions changed info + +---------------diffs in plymouth_details.so_abidiff.out:---------------- + +---------------diffs in plymouth_libply-splash-core.so.5.0.0_abidiff.out:---------------- + +Functions changes summary: 4 Removed, 0 Changed (14 filtered out), 4 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +4 Removed functions: + + + + 'function double ply_text_progress_bar_get_percent_done(ply_text_progress_bar_t*)' {ply_text_progress_bar_get_percent_done} + + 'function void ply_text_progress_bar_set_percent_done(ply_text_progress_bar_t*, double)' {ply_text_progress_bar_set_percent_done} + + 'function double ply_text_step_bar_get_percent_done(ply_text_step_bar_t*)' {ply_text_step_bar_get_percent_done} + + 'function void ply_text_step_bar_set_percent_done(ply_text_step_bar_t*, double)' {ply_text_step_bar_set_percent_done} + + + +4 Added functions: + + + + 'function double ply_text_progress_bar_get_fraction_done(ply_text_progress_bar_t*)' {ply_text_progress_bar_get_fraction_done} + + 'function void ply_text_progress_bar_set_fraction_done(ply_text_progress_bar_t*, double)' {ply_text_progress_bar_set_fraction_done} + + 'function double ply_text_step_bar_get_fraction_done(ply_text_step_bar_t*)' {ply_text_step_bar_get_fraction_done} + + 'function void ply_text_step_bar_set_fraction_done(ply_text_step_bar_t*, double)' {ply_text_step_bar_set_fraction_done} + + + +---------------diffs in plymouth_label.so_abidiff.out:---------------- + +---------------diffs in plymouth_frame-buffer.so_abidiff.out:---------------- + +---------------diffs in plymouth_drm.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +1 function with some indirect sub-type change: + + + + [C]'function ply_renderer_plugin_interface_t* ply_renderer_backend_get_interface()' at plugin.c:1847:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'typedef ply_renderer_plugin_interface_t' at ply-renderer-plugin.h:79:1: + + underlying type 'struct {ply_renderer_backend_t* (const char*, ply_terminal_t*)* create_backend; void (ply_renderer_backend_t*)* destroy_backend; bool (ply_renderer_backend_t*)* open_device; void (ply_renderer_backend_t*)* close_device; bool (ply_renderer_backend_t*)* query_device; bool (ply_renderer_backend_t*)* handle_change_event; bool (ply_renderer_backend_t*)* map_to_device; void (ply_renderer_backend_t*)* unmap_from_device; void (ply_renderer_backend_t*)* activate; void (ply_renderer_backend_t*)* deactivate; void (ply_renderer_backend_t*, ply_renderer_head_t*)* flush_head; ply_list_t* (ply_renderer_backend_t*)* get_heads; ply_pixel_buffer_t* (ply_renderer_backend_t*, ply_renderer_head_t*)* get_buffer_for_head; ply_renderer_input_source_t* (ply_renderer_backend_t*)* get_input_source; bool (ply_renderer_backend_t*, ply_renderer_input_source_t*)* open_input_source; void (ply_renderer_backend_t*, ply_renderer_input_source_t*, typedef ply_renderer_input_source_handler_t, void*)* set_handler_for_input_source; void (ply_renderer_backend_t*, ply_renderer_input_source_t*)* close_input_source; const char* (ply_renderer_backend_t*)* get_device_name; bool (ply_renderer_backend_t*, int*, int*, ply_pixel_buffer_rotation_t*, int*)* get_panel_properties; bool (ply_renderer_backend_t*)* get_capslock_state; const char* (ply_renderer_backend_t*)* get_keymap;}' at ply-renderer-plugin.h:38:1 changed: + + type size hasn't changed + + 2 data member changes (19 filtered): + + type of 'void (ply_renderer_backend_t*)* activate' changed: + + in pointed to type 'function type void (ply_renderer_backend_t*)': + + parameter 1 of type 'ply_renderer_backend_t*' has sub-type changes: + + in pointed to type 'typedef ply_renderer_backend_t' at ply-renderer-plugin.h:36:1: + + underlying type 'struct _ply_renderer_backend' at plugin.c:132:1 changed: + + type size hasn't changed + + 1 data member change: + + type of 'ply_output_t* _ply_renderer_backend::outputs' changed: + + in pointed to type 'typedef ply_output_t' at plugin.c:133:1: + + underlying type 'struct {drmModeModeInfo mode; uint32_t connector_id; uint32_t connector_type; uint32_t controller_id; uint32_t possible_controllers; int device_scale; int link_status; ply_pixel_buffer_rotation_t rotation; bool tiled; bool connected;}' at plugin.c:118:1 changed: + + type size hasn't changed + + 1 data member insertion: + + 'bool uses_hw_rotation', at offset 784 (in bits) at plugin.c:132:1 + + + + + + type of 'void (ply_renderer_backend_t*, ply_renderer_head_t*)* flush_head' changed: + + in pointed to type 'function type void (ply_renderer_backend_t*, ply_renderer_head_t*)': + + parameter 2 of type 'ply_renderer_head_t*' has sub-type changes: + + in pointed to type 'typedef ply_renderer_head_t' at ply-renderer.h:35:1: + + underlying type 'struct _ply_renderer_head' at plugin.c:71:1 changed: + + type size hasn't changed + + 1 data member insertion: + + 'bool _ply_renderer_head::uses_hw_rotation', at offset 1160 (in bits) at plugin.c:87:1 + + no data member change (1 filtered); + + + + + + + +---------------diffs in plymouth_libply-boot-client.so.5.0.0_abidiff.out:---------------- + +---------------diffs in plymouth_text.so_abidiff.out:---------------- + +---------------diffs in plymouth_tribar.so_abidiff.out:---------------- + +---------------diffs in plymouth_space-flares.so_abidiff.out:---------------- + +---------------diffs in plymouth_fade-throbber.so_abidiff.out:---------------- + +---------------diffs in plymouth_libply.so.5.0.0_abidiff.out:---------------- + +---------------diffs in plymouth_libply-splash-graphics.so.5.0.0_abidiff.out:---------------- + +Functions changes summary: 4 Removed, 0 Changed (21 filtered out), 4 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +4 Removed functions: + + + + 'function double ply_progress_animation_get_percent_done(ply_progress_animation_t*)' {ply_progress_animation_get_percent_done} + + 'function void ply_progress_animation_set_percent_done(ply_progress_animation_t*, double)' {ply_progress_animation_set_percent_done} + + 'function double ply_progress_bar_get_percent_done(ply_progress_bar_t*)' {ply_progress_bar_get_percent_done} + + 'function void ply_progress_bar_set_percent_done(ply_progress_bar_t*, double)' {ply_progress_bar_set_percent_done} + + + +4 Added functions: + + + + 'function double ply_progress_animation_get_fraction_done(ply_progress_animation_t*)' {ply_progress_animation_get_fraction_done} + + 'function void ply_progress_animation_set_fraction_done(ply_progress_animation_t*, double)' {ply_progress_animation_set_fraction_done} + + 'function double ply_progress_bar_get_fraction_done(ply_progress_bar_t*)' {ply_progress_bar_get_fraction_done} + + 'function void ply_progress_bar_set_fraction_done(ply_progress_bar_t*, double)' {ply_progress_bar_set_fraction_done} + + + +---------------diffs in plymouth_two-step.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +1 function with some indirect sub-type change: + + + + [C]'function ply_boot_splash_plugin_interface_t* ply_boot_splash_plugin_get_interface()' at plugin.c:1982:1 has some indirect sub-type changes: + + return type changed: + + in pointed to type 'typedef ply_boot_splash_plugin_interface_t' at ply-boot-splash-plugin.h:98:1: + + underlying type 'struct {ply_boot_splash_plugin_t* (ply_key_file_t*)* create_plugin; void (ply_boot_splash_plugin_t*)* destroy_plugin; void (ply_boot_splash_plugin_t*, ply_keyboard_t*)* set_keyboard; void (ply_boot_splash_plugin_t*, ply_keyboard_t*)* unset_keyboard; void (ply_boot_splash_plugin_t*, ply_pixel_display_t*)* add_pixel_display; void (ply_boot_splash_plugin_t*, ply_pixel_display_t*)* remove_pixel_display; void (ply_boot_splash_plugin_t*, ply_text_display_t*)* add_text_display; void (ply_boot_splash_plugin_t*, ply_text_display_t*)* remove_text_display; bool (ply_boot_splash_plugin_t*, ply_event_loop_t*, ply_buffer_t*, typedef ply_boot_splash_mode_t)* show_splash_screen; void (ply_boot_splash_plugin_t*, int)* system_update; void (ply_boot_splash_plugin_t*, const char*)* update_status; void (ply_boot_splash_plugin_t*, const char*, typedef size_t)* on_boot_output; void (ply_boot_splash_plugin_t*, double, double)* on_boot_progress; void (ply_boot_splash_plugin_t*)* on_root_mounted; void (ply_boot_splash_plugin_t*, ply_event_loop_t*)* hide_splash_screen; void (ply_boot_splash_plugin_t*, const char*)* display_message; void (ply_boot_splash_plugin_t*, const char*)* hide_message; void (ply_boot_splash_plugin_t*)* display_normal; void (ply_boot_splash_plugin_t*, const char*, int)* display_password; void (ply_boot_splash_plugin_t*, const char*, const char*)* display_question; void (ply_boot_splash_plugin_t*, ply_trigger_t*)* become_idle;}' at ply-boot-splash-plugin.h:51:1 changed: + + type size hasn't changed + + 1 data member changes (20 filtered): + + type of 'void (ply_boot_splash_plugin_t*, ply_pixel_display_t*)* add_pixel_display' changed: + + in pointed to type 'function type void (ply_boot_splash_plugin_t*, ply_pixel_display_t*)': + + parameter 1 of type 'ply_boot_splash_plugin_t*' has sub-type changes: + + in pointed to type 'typedef ply_boot_splash_plugin_t' at ply-boot-splash-plugin.h:49:1: + + underlying type 'struct _ply_boot_splash_plugin' at plugin.c:129:1 changed: + + type size changed from 3520 to 3392 (in bits) + + 2 data member deletions: + + 'double _ply_boot_splash_plugin::keyboard_indicator_horizontal_alignment', at offset 2048 (in bits) at plugin.c:149:1 + + + + 'double _ply_boot_splash_plugin::keyboard_indicator_vertical_alignment', at offset 2112 (in bits) at plugin.c:150:1 + + + + 1 data member insertion: + + 'int _ply_boot_splash_plugin::background_bgrt_raw_height', at offset 2784 (in bits) at plugin.c:167:1 + + 23 data member changes: + + type of 'mode_settings_t _ply_boot_splash_plugin::mode_settings[6]' changed: + + array element type 'typedef mode_settings_t' changed: + + underlying type 'struct {bool suppress_messages; bool progress_bar_show_percent_complete; bool use_progress_bar; bool use_animation; bool use_firmware_background; char* title; char* subtitle;}' at plugin.c:118:1 changed: + + type size hasn't changed + + 1 data member insertion: + + 'bool use_end_animation', at offset 32 (in bits) at plugin.c:124:1 + + 1 data member change: + + 'bool use_firmware_background' offset changed from 32 to 40 (in bits) (by +8 bits) + + type size hasn't changed + + + + 'double _ply_boot_splash_plugin::title_horizontal_alignment' offset changed from 2176 to 2048 (in bits) (by -128 bits) + + 'double _ply_boot_splash_plugin::title_vertical_alignment' offset changed from 2240 to 2112 (in bits) (by -128 bits) + + 'char* _ply_boot_splash_plugin::title_font' offset changed from 2304 to 2176 (in bits) (by -128 bits) + + 'double _ply_boot_splash_plugin::watermark_horizontal_alignment' offset changed from 2368 to 2240 (in bits) (by -128 bits) + + 'double _ply_boot_splash_plugin::watermark_vertical_alignment' offset changed from 2432 to 2304 (in bits) (by -128 bits) + + 'double _ply_boot_splash_plugin::animation_horizontal_alignment' offset changed from 2496 to 2368 (in bits) (by -128 bits) + + 'double _ply_boot_splash_plugin::animation_vertical_alignment' offset changed from 2560 to 2432 (in bits) (by -128 bits) + + 'char* _ply_boot_splash_plugin::animation_dir' offset changed from 2624 to 2496 (in bits) (by -128 bits) + + 'ply_progress_animation_transition_t _ply_boot_splash_plugin::transition' offset changed from 2688 to 2560 (in bits) (by -128 bits) + + 'double _ply_boot_splash_plugin::transition_duration' offset changed from 2752 to 2624 (in bits) (by -128 bits) + + 'uint32_t _ply_boot_splash_plugin::background_start_color' offset changed from 2816 to 2688 (in bits) (by -128 bits) + + 'uint32_t _ply_boot_splash_plugin::background_end_color' offset changed from 2848 to 2720 (in bits) (by -128 bits) + + 'int _ply_boot_splash_plugin::background_bgrt_raw_width' offset changed from 2880 to 2752 (in bits) (by -128 bits) + + 'double _ply_boot_splash_plugin::progress_bar_horizontal_alignment' offset changed from 2944 to 2816 (in bits) (by -128 bits) + + 'double _ply_boot_splash_plugin::progress_bar_vertical_alignment' offset changed from 3008 to 2880 (in bits) (by -128 bits) + + 'long int _ply_boot_splash_plugin::progress_bar_width' offset changed from 3072 to 2944 (in bits) (by -128 bits) + + 'long int _ply_boot_splash_plugin::progress_bar_height' offset changed from 3136 to 3008 (in bits) (by -128 bits) + + 'uint32_t _ply_boot_splash_plugin::progress_bar_bg_color' offset changed from 3200 to 3072 (in bits) (by -128 bits) + + 'uint32_t _ply_boot_splash_plugin::progress_bar_fg_color' offset changed from 3232 to 3104 (in bits) (by -128 bits) + + 'progress_function_t _ply_boot_splash_plugin::progress_function' offset changed from 3264 to 3136 (in bits) (by -128 bits) + + 'ply_trigger_t* _ply_boot_splash_plugin::idle_trigger' offset changed from 3328 to 3200 (in bits) (by -128 bits) + + 'ply_trigger_t* _ply_boot_splash_plugin::stop_trigger' offset changed from 3392 to 3264 (in bits) (by -128 bits) + + + + + + + +---------------diffs in plymouth_script.so_abidiff.out:---------------- + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/readline_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/readline_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..44c52f3df09e3babd8fccea5f17e98057ff6f0fd --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/readline_all_result.md @@ -0,0 +1,28 @@ +# Functions changed info + +---------------diffs in readline_libreadline.so.7.0_abidiff.out:---------------- + +---------------diffs in readline_libhistory.so.8.0_abidiff.out:---------------- + +ELF SONAME changed + +Functions changes summary: 0 Removed, 0 Changed, 2 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added (1 filtered out) variable + + + +SONAME changed from 'libhistory.so.7' to 'libhistory.so.8' + + + +2 Added functions: + + + + 'function int _hs_history_patsearch(const char*, int, int)' {_hs_history_patsearch} + + 'function HIST_ENTRY** remove_history_range(int, int)' {remove_history_range} + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/rhash_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/rhash_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..43ae1d91a7af8377386e9543f956db463ddbae87 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/rhash_all_result.md @@ -0,0 +1,72 @@ +# Functions changed info + +---------------diffs in rhash_librhash.so.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 3 Changed, 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +3 functions with some indirect sub-type change: + + + + [C]'function int rhash_torrent_add_file(rhash, const char*, uint64_t)' at rhash_torrent.c:30:1 has some indirect sub-type changes: + + parameter 3 of type 'typedef uint64_t' changed: + + entity changed from 'typedef uint64_t' to compatible type 'long long unsigned int' + + type name changed from 'unsigned long int' to 'long long unsigned int' + + type size hasn't changed + + + + + + [C]'function size_t rhash_torrent_get_default_piece_length(uint64_t)' at rhash_torrent.c:60:1 has some indirect sub-type changes: + + parameter 1 of type 'typedef uint64_t' changed: + + entity changed from 'typedef uint64_t' to compatible type 'long long unsigned int' + + type name changed from 'unsigned long int' to 'long long unsigned int' + + type size hasn't changed + + + + + + [C]'function rhash_uptr_t rhash_transmit(unsigned int, void*, rhash_uptr_t, rhash_uptr_t)' at rhash.c:695:1 has some indirect sub-type changes: + + parameter 3 of type 'typedef rhash_uptr_t' changed: + + underlying type 'typedef uintptr_t' at stdint.h:90:1 changed: + + entity changed from 'typedef uintptr_t' to compatible type 'long long unsigned int' + + type name changed from 'unsigned long int' to 'long long unsigned int' + + type size hasn't changed + + + + parameter 4 of type 'typedef rhash_uptr_t' changed: + + underlying type 'typedef uintptr_t' at stdint.h:90:1 changed: + + entity changed from 'typedef uintptr_t' to compatible type 'long long unsigned int' + + type name changed from 'unsigned long int' to 'long long unsigned int' + + type size hasn't changed + + + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/subversion_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/subversion_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..d7905606bb98cca2341410c7ffa8394601eb0559 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/subversion_all_result.md @@ -0,0 +1,668 @@ +# Functions changed info + +---------------diffs in subversion_libsvn_fs_base-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed (163 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +---------------diffs in subversion_mod_authz_svn.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added variable + + + +---------------diffs in subversion_libsvn_ra_svn-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed (127 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +---------------diffs in subversion_libsvn_repos-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed (48 filtered out), 5 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +5 Added functions: + + + + 'function svn_error_t* svn_repos__dump_magic_header_record(svn_stream_t*, int, apr_pool_t*)' {svn_repos__dump_magic_header_record} + + 'function svn_error_t* svn_repos__dump_uuid_header_record(svn_stream_t*, const char*, apr_pool_t*)' {svn_repos__dump_uuid_header_record} + + 'function svn_error_t* svn_repos__get_dump_editor(const svn_delta_editor_t**, void**, svn_stream_t*, const char*, apr_pool_t*)' {svn_repos__get_dump_editor} + + 'function svn_error_t* svn_repos_authz_parse2(svn_authz_t**, svn_stream_t*, svn_stream_t*, svn_repos_authz_warning_func_t, void*, apr_pool_t*, apr_pool_t*)' {svn_repos_authz_parse2} + + 'function svn_error_t* svn_repos_authz_read4(svn_authz_t**, const char*, const char*, svn_boolean_t, svn_repos_t*, svn_repos_authz_warning_func_t, void*, apr_pool_t*, apr_pool_t*)' {svn_repos_authz_read4} + + + +1 function with some indirect sub-type change: + + + + [C]'function svn_error_t* svn_authz__parse(authz_full_t**, svn_stream_t*, svn_stream_t*, apr_pool_t*, apr_pool_t*)' at authz_parse.c:1369:1 has some indirect sub-type changes: + + parameter 4 of type 'apr_pool_t*' changed: + + entity changed from 'apr_pool_t*' to compatible type 'typedef svn_repos_authz_warning_func_t' at svn_repos.h:4158:1 + + in pointed to type 'struct apr_pool_t': + + entity changed from 'struct apr_pool_t' to 'function type void (void*, const svn_error_t*, apr_pool_t*)' + + type size changed from 0 to 64 (in bits) + + parameter 5 of type 'apr_pool_t*' changed: + + in pointed to type 'typedef apr_pool_t': + + entity changed from 'typedef apr_pool_t' to 'void' + + type size hasn't changed + + parameter 6 of type 'apr_pool_t*' was added + + parameter 7 of type 'apr_pool_t*' was added + + + + + + + +---------------diffs in subversion_libsvn_client-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 8 Removed, 1 Changed (264 filtered out), 41 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +8 Removed functions: + + + + 'function svn_error_t* svn_client__copy_foreign(const char*, const char*, svn_opt_revision_t*, svn_opt_revision_t*, svn_depth_t, svn_boolean_t, svn_boolean_t, svn_client_ctx_t*, apr_pool_t*)' {svn_client__copy_foreign} + + 'function svn_error_t* svn_client_shelf_get_paths(apr_hash_t**, const char*, const char*, svn_client_ctx_t*, apr_pool_t*, apr_pool_t*)' {svn_client_shelf_get_paths} + + 'function svn_error_t* svn_client_shelf_has_changes(svn_boolean_t*, const char*, const char*, svn_client_ctx_t*, apr_pool_t*)' {svn_client_shelf_has_changes} + + 'function svn_error_t* svn_client_shelve(const char*, const apr_array_header_t*, svn_depth_t, const apr_array_header_t*, svn_boolean_t, svn_boolean_t, svn_client_ctx_t*, apr_pool_t*)' {svn_client_shelve} + + 'function svn_error_t* svn_client_shelves_any(svn_boolean_t*, const char*, svn_client_ctx_t*, apr_pool_t*)' {svn_client_shelves_any} + + 'function svn_error_t* svn_client_shelves_delete(const char*, const char*, svn_boolean_t, svn_client_ctx_t*, apr_pool_t*)' {svn_client_shelves_delete} + + 'function svn_error_t* svn_client_shelves_list(apr_hash_t**, const char*, svn_client_ctx_t*, apr_pool_t*, apr_pool_t*)' {svn_client_shelves_list} + + 'function svn_error_t* svn_client_unshelve(const char*, const char*, svn_boolean_t, svn_boolean_t, svn_client_ctx_t*, apr_pool_t*)' {svn_client_unshelve} + + + +41 Added functions: + + + + 'function svn_error_t* svn_client__condense_commit_items2(const char*, apr_array_header_t*, apr_pool_t*)' {svn_client__condense_commit_items2} + + 'function svn_error_t* svn_client__get_diff_writer_svn(svn_diff_tree_processor_t**, const char*, const char*, const char*, const apr_array_header_t*, const char*, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, const char*, svn_stream_t*, svn_stream_t*, svn_client_ctx_t*, apr_pool_t*)' {svn_client__get_diff_writer_svn} + + 'function svn_error_t* svn_client__layout_list(const char*, svn_client__layout_func_t, void*, svn_client_ctx_t*, apr_pool_t*)' {svn_client__layout_list} + + 'function svn_error_t* svn_client__repos_to_wc_copy_by_editor(svn_boolean_t*, svn_node_kind_t, const char*, svn_revnum_t, const char*, svn_ra_session_t*, svn_client_ctx_t*, apr_pool_t*)' {svn_client__repos_to_wc_copy_by_editor} + + 'function svn_error_t* svn_client__repos_to_wc_copy_internal(svn_boolean_t*, svn_node_kind_t, const char*, svn_revnum_t, const char*, svn_ra_session_t*, svn_client_ctx_t*, apr_pool_t*)' {svn_client__repos_to_wc_copy_internal} + + 'function svn_error_t* svn_client__shelf_apply(svn_client__shelf_version_t*, svn_boolean_t, apr_pool_t*)' {svn_client__shelf_apply} + + 'function svn_error_t* svn_client__shelf_close(svn_client__shelf_t*, apr_pool_t*)' {svn_client__shelf_close} + + 'function svn_error_t* svn_client__shelf_delete(const char*, const char*, svn_boolean_t, svn_client_ctx_t*, apr_pool_t*)' {svn_client__shelf_delete} + + 'function svn_error_t* svn_client__shelf_delete_newer_versions(svn_client__shelf_t*, svn_client__shelf_version_t*, apr_pool_t*)' {svn_client__shelf_delete_newer_versions} + + 'function svn_error_t* svn_client__shelf_diff(svn_client__shelf_version_t*, const char*, svn_depth_t, svn_boolean_t, const svn_diff_tree_processor_t*, apr_pool_t*)' {svn_client__shelf_diff} + + 'function svn_error_t* svn_client__shelf_get_all_versions(apr_array_header_t**, svn_client__shelf_t*, apr_pool_t*, apr_pool_t*)' {svn_client__shelf_get_all_versions} + + 'function svn_error_t* svn_client__shelf_get_log_message(char**, svn_client__shelf_t*, apr_pool_t*)' {svn_client__shelf_get_log_message} + + 'function svn_error_t* svn_client__shelf_get_newest_version(svn_client__shelf_version_t**, svn_client__shelf_t*, apr_pool_t*, apr_pool_t*)' {svn_client__shelf_get_newest_version} + + 'function svn_error_t* svn_client__shelf_list(apr_hash_t**, const char*, svn_client_ctx_t*, apr_pool_t*, apr_pool_t*)' {svn_client__shelf_list} + + 'function svn_error_t* svn_client__shelf_mods_editor(const svn_delta_editor_t**, void**, svn_client__shelf_version_t*, svn_wc_notify_func2_t, void*, svn_client_ctx_t*, apr_pool_t*)' {svn_client__shelf_mods_editor} + + 'function svn_error_t* svn_client__shelf_open_existing(svn_client__shelf_t**, const char*, const char*, svn_client_ctx_t*, apr_pool_t*)' {svn_client__shelf_open_existing} + + 'function svn_error_t* svn_client__shelf_open_or_create(svn_client__shelf_t**, const char*, const char*, svn_client_ctx_t*, apr_pool_t*)' {svn_client__shelf_open_or_create} + + 'function svn_error_t* svn_client__shelf_paths_changed(apr_hash_t**, svn_client__shelf_version_t*, apr_pool_t*, apr_pool_t*)' {svn_client__shelf_paths_changed} + + 'function svn_error_t* svn_client__shelf_replay(svn_client__shelf_version_t*, const char*, const svn_delta_editor_t*, void*, svn_wc_notify_func2_t, void*, apr_pool_t*)' {svn_client__shelf_replay} + + 'function svn_error_t* svn_client__shelf_revprop_get(svn_string_t**, svn_client__shelf_t*, const char*, apr_pool_t*)' {svn_client__shelf_revprop_get} + + 'function svn_error_t* svn_client__shelf_revprop_list(apr_hash_t**, svn_client__shelf_t*, apr_pool_t*)' {svn_client__shelf_revprop_list} + + 'function svn_error_t* svn_client__shelf_revprop_set(svn_client__shelf_t*, const char*, const svn_string_t*, apr_pool_t*)' {svn_client__shelf_revprop_set} + + 'function svn_error_t* svn_client__shelf_revprop_set_all(svn_client__shelf_t*, apr_hash_t*, apr_pool_t*)' {svn_client__shelf_revprop_set_all} + + 'function svn_error_t* svn_client__shelf_save_new_version3(svn_client__shelf_version_t**, svn_client__shelf_t*, const apr_array_header_t*, svn_depth_t, const apr_array_header_t*, svn_client_status_func_t, void*, svn_client_status_func_t, void*, apr_pool_t*)' {svn_client__shelf_save_new_version3} + + 'function svn_error_t* svn_client__shelf_set_log_message(svn_client__shelf_t*, const char*, apr_pool_t*)' {svn_client__shelf_set_log_message} + + 'function svn_error_t* svn_client__shelf_test_apply_file(svn_boolean_t*, svn_client__shelf_version_t*, const char*, apr_pool_t*)' {svn_client__shelf_test_apply_file} + + 'function svn_error_t* svn_client__shelf_unapply(svn_client__shelf_version_t*, svn_boolean_t, apr_pool_t*)' {svn_client__shelf_unapply} + + 'function svn_error_t* svn_client__shelf_version_open(svn_client__shelf_version_t**, svn_client__shelf_t*, int, apr_pool_t*, apr_pool_t*)' {svn_client__shelf_version_open} + + 'function svn_error_t* svn_client__shelf_version_status_walk(svn_client__shelf_version_t*, const char*, svn_wc_status_func4_t, void*, apr_pool_t*)' {svn_client__shelf_version_status_walk} + + 'function svn_error_t* svn_client__wc_copy_mods(const char*, const char*, svn_wc_notify_func2_t, void*, svn_client_ctx_t*, apr_pool_t*)' {svn_client__wc_copy_mods} + + 'function svn_error_t* svn_client__wc_editor(const svn_delta_editor_t**, void**, const char*, svn_wc_notify_func2_t, void*, svn_ra_session_t*, svn_client_ctx_t*, apr_pool_t*)' {svn_client__wc_editor} + + 'function svn_error_t* svn_client__wc_editor_internal(const svn_delta_editor_t**, void**, const char*, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_wc_notify_func2_t, void*, svn_ra_session_t*, svn_client_ctx_t*, apr_pool_t*)' {svn_client__wc_editor_internal} + + 'function svn_error_t* svn_client__wc_replay(const char*, const apr_array_header_t*, svn_depth_t, const apr_array_header_t*, const svn_delta_editor_t*, void*, svn_wc_notify_func2_t, void*, svn_client_ctx_t*, apr_pool_t*)' {svn_client__wc_replay} + + 'function svn_error_t* svn_client_blame6(svn_revnum_t*, svn_revnum_t*, const char*, const svn_opt_revision_t*, const svn_opt_revision_t*, const svn_opt_revision_t*, const svn_diff_file_options_t*, svn_boolean_t, svn_boolean_t, svn_client_blame_receiver4_t, void*, svn_client_ctx_t*, apr_pool_t*)' {svn_client_blame6} + + 'function svn_error_t* svn_client_conflict_option_get_moved_to_abspath_candidates2(apr_array_header_t**, svn_client_conflict_option_t*, apr_pool_t*, apr_pool_t*)' {svn_client_conflict_option_get_moved_to_abspath_candidates2} + + 'function svn_error_t* svn_client_conflict_option_get_moved_to_repos_relpath_candidates2(apr_array_header_t**, svn_client_conflict_option_t*, apr_pool_t*, apr_pool_t*)' {svn_client_conflict_option_get_moved_to_repos_relpath_candidates2} + + 'function svn_error_t* svn_client_conflict_option_set_moved_to_abspath2(svn_client_conflict_option_t*, int, svn_client_ctx_t*, apr_pool_t*)' {svn_client_conflict_option_set_moved_to_abspath2} + + 'function svn_error_t* svn_client_conflict_option_set_moved_to_repos_relpath2(svn_client_conflict_option_t*, int, svn_client_ctx_t*, apr_pool_t*)' {svn_client_conflict_option_set_moved_to_repos_relpath2} + + 'function svn_error_t* svn_client_diff7(const apr_array_header_t*, const char*, const svn_opt_revision_t*, const char*, const svn_opt_revision_t*, const char*, svn_depth_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, const char*, svn_stream_t*, svn_stream_t*, const apr_array_header_t*, svn_client_ctx_t*, apr_pool_t*)' {svn_client_diff7} + + 'function svn_error_t* svn_client_diff_peg7(const apr_array_header_t*, const char*, const svn_opt_revision_t*, const svn_opt_revision_t*, const svn_opt_revision_t*, const char*, svn_depth_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_boolean_t, const char*, svn_stream_t*, svn_stream_t*, const apr_array_header_t*, svn_client_ctx_t*, apr_pool_t*)' {svn_client_diff_peg7} + + 'function svn_error_t* svn_client_revert4(const apr_array_header_t*, svn_depth_t, const apr_array_header_t*, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_client_ctx_t*, apr_pool_t*)' {svn_client_revert4} + + + +1 function with some indirect sub-type change: + + + + [C]'function svn_error_t* svn_client__arbitrary_nodes_diff(const char**, svn_boolean_t*, const char*, const char*, svn_depth_t, const svn_diff_tree_processor_t*, svn_client_ctx_t*, apr_pool_t*, apr_pool_t*)' at diff_local.c:650:1 has some indirect sub-type changes: + + parameter 1 of type 'const char**' changed: + + in pointed to type 'const char*': + + entity changed from 'const char*' to 'const char' + + type size changed from 64 to 8 (in bits) + + parameter 2 of type 'svn_boolean_t*' changed: + + in pointed to type 'typedef svn_boolean_t': + + entity changed from 'typedef svn_boolean_t' to 'const char' + + type size changed from 32 to 8 (in bits) + + parameter 3 of type 'const char*' changed: + + entity changed from 'const char*' to 'typedef svn_depth_t' at svn_types_impl.h:151:1 + + type size changed from 64 to 32 (in bits) + + type alignement changed from 0 to 32 + + parameter 4 of type 'const char*' changed: + + in pointed to type 'const char': + + 'const char' changed to 'const svn_diff_tree_processor_t' + + parameter 5 of type 'typedef svn_depth_t' changed: + + entity changed from 'typedef svn_depth_t' to 'svn_client_ctx_t*' + + type size changed from 32 to 64 (in bits) + + type alignement changed from 32 to 0 + + parameter 6 of type 'const svn_diff_tree_processor_t*' changed: + + in pointed to type 'const svn_diff_tree_processor_t' at apr_pools.h:60:1: + + entity changed from 'const svn_diff_tree_processor_t' to 'typedef apr_pool_t' at apr_pools.h:60:1 + + type size changed from 768 to 0 (in bits) + + parameter 7 of type 'svn_client_ctx_t*' was removed + + parameter 8 of type 'apr_pool_t*' was removed + + parameter 9 of type 'apr_pool_t*' was removed + + + + + + + +---------------diffs in subversion_libsvn_diff-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed (18 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +1 function with some indirect sub-type change: + + + + [C]'function svn_error_t* svn_diff_hunk__create_adds_single_line(svn_diff_hunk_t**, const char*, const svn_patch_t*, apr_pool_t*, apr_pool_t*)' at parse-diff.c:212:1 has some indirect sub-type changes: + + parameter 1 of type 'svn_diff_hunk_t**' has sub-type changes: + + in pointed to type 'svn_diff_hunk_t*': + + in pointed to type 'typedef svn_diff_hunk_t' at svn_diff.h:1077:1: + + underlying type 'struct svn_diff_hunk_t' at parse-diff.c:65:1 changed: + + type size changed from 1280 to 1344 (in bits) + + 1 data member insertion: + + 'svn_boolean_t svn_diff_hunk_t::is_pretty_print_mergeinfo', at offset 128 (in bits) at parse-diff.c:75:1 + + 13 data member changes (1 filtered): + + 'svn_diff__hunk_range svn_diff_hunk_t::diff_text_range' offset changed from 128 to 192 (in bits) (by +64 bits) + + 'svn_diff__hunk_range svn_diff_hunk_t::original_text_range' offset changed from 320 to 384 (in bits) (by +64 bits) + + 'svn_diff__hunk_range svn_diff_hunk_t::modified_text_range' offset changed from 512 to 576 (in bits) (by +64 bits) + + 'svn_linenum_t svn_diff_hunk_t::original_start' offset changed from 704 to 768 (in bits) (by +64 bits) + + 'svn_linenum_t svn_diff_hunk_t::original_length' offset changed from 768 to 832 (in bits) (by +64 bits) + + 'svn_linenum_t svn_diff_hunk_t::modified_start' offset changed from 832 to 896 (in bits) (by +64 bits) + + 'svn_linenum_t svn_diff_hunk_t::modified_length' offset changed from 896 to 960 (in bits) (by +64 bits) + + 'svn_linenum_t svn_diff_hunk_t::leading_context' offset changed from 960 to 1024 (in bits) (by +64 bits) + + 'svn_linenum_t svn_diff_hunk_t::trailing_context' offset changed from 1024 to 1088 (in bits) (by +64 bits) + + 'svn_boolean_t svn_diff_hunk_t::original_no_final_eol' offset changed from 1088 to 1152 (in bits) (by +64 bits) + + 'svn_boolean_t svn_diff_hunk_t::modified_no_final_eol' offset changed from 1120 to 1184 (in bits) (by +64 bits) + + 'svn_linenum_t svn_diff_hunk_t::original_fuzz' offset changed from 1152 to 1216 (in bits) (by +64 bits) + + 'svn_linenum_t svn_diff_hunk_t::modified_fuzz' offset changed from 1216 to 1280 (in bits) (by +64 bits) + + + + + +---------------diffs in subversion_libsvn_fs_x-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed (250 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +---------------diffs in subversion_libsvn_fs_util-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +---------------diffs in subversion_mod_dav_svn.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed (76 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed (6 filtered out), 0 Added variables + + + +---------------diffs in subversion_libsvn_swig_py-1.so.0.0.0_abidiff.out:---------------- + +---------------diffs in subversion_libsvn_auth_gnome_keyring-1.so.0.0.0_abidiff.out:---------------- + +---------------diffs in subversion_libsvn_ra_local-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +---------------diffs in subversion_libsvn_ra-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed (72 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +---------------diffs in subversion_libsvn_fs-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed (108 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +---------------diffs in subversion_libsvn_ra_serf-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed (58 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +---------------diffs in subversion_libsvn_subr-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 1 Removed, 0 Changed (122 filtered out), 11 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +1 Removed function: + + + + 'function const char* svn_relpath__internal_style(const char*, apr_pool_t*)' {svn_relpath__internal_style} + + + +11 Added functions: + + + + 'function svn_error_t* svn_dirent_canonicalize_safe(const char**, const char**, const char*, apr_pool_t*, apr_pool_t*)' {svn_dirent_canonicalize_safe} + + 'function svn_error_t* svn_dirent_internal_style_safe(const char**, const char**, const char*, apr_pool_t*, apr_pool_t*)' {svn_dirent_internal_style_safe} + + 'function const svn_opt_subcommand_desc3_t* svn_opt_get_canonical_subcommand3(const svn_opt_subcommand_desc3_t*, const char*)' {svn_opt_get_canonical_subcommand3} + + 'function const apr_getopt_option_t* svn_opt_get_option_from_code3(int, const apr_getopt_option_t*, const svn_opt_subcommand_desc3_t*, apr_pool_t*)' {svn_opt_get_option_from_code3} + + 'function void svn_opt_print_generic_help3(const char*, const svn_opt_subcommand_desc3_t*, const apr_getopt_option_t*, const char*, apr_pool_t*, FILE*)' {svn_opt_print_generic_help3} + + 'function svn_error_t* svn_opt_print_help5(apr_getopt_t*, const char*, svn_boolean_t, svn_boolean_t, svn_boolean_t, const char*, const char*, const svn_opt_subcommand_desc3_t*, const apr_getopt_option_t*, const int*, const char*, apr_pool_t*)' {svn_opt_print_help5} + + 'function void svn_opt_subcommand_help4(const char*, const svn_opt_subcommand_desc3_t*, const apr_getopt_option_t*, const int*, apr_pool_t*)' {svn_opt_subcommand_help4} + + 'function svn_boolean_t svn_opt_subcommand_takes_option4(const svn_opt_subcommand_desc3_t*, int, const int*)' {svn_opt_subcommand_takes_option4} + + 'function svn_error_t* svn_relpath__make_internal(const char**, const char*, apr_pool_t*, apr_pool_t*)' {svn_relpath__make_internal} + + 'function svn_error_t* svn_relpath_canonicalize_safe(const char**, const char**, const char*, apr_pool_t*, apr_pool_t*)' {svn_relpath_canonicalize_safe} + + 'function svn_error_t* svn_uri_canonicalize_safe(const char**, const char**, const char*, apr_pool_t*, apr_pool_t*)' {svn_uri_canonicalize_safe} + + + +---------------diffs in subversion_mod_dontdothat.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 0 Added function + +Variables changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added variable + + + +---------------diffs in subversion_libsvn_delta-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 1 Changed (37 filtered out), 4 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +4 Added functions: + + + + 'function svn_error_t* svn_delta_path_driver3(const svn_delta_editor_t*, void*, const apr_array_header_t*, svn_boolean_t, svn_delta_path_driver_cb_func2_t, void*, apr_pool_t*)' {svn_delta_path_driver3} + + 'function svn_error_t* svn_delta_path_driver_finish(svn_delta_path_driver_state_t*, apr_pool_t*)' {svn_delta_path_driver_finish} + + 'function svn_error_t* svn_delta_path_driver_start(svn_delta_path_driver_state_t**, const svn_delta_editor_t*, void*, svn_delta_path_driver_cb_func2_t, void*, apr_pool_t*)' {svn_delta_path_driver_start} + + 'function svn_error_t* svn_delta_path_driver_step(svn_delta_path_driver_state_t*, const char*, apr_pool_t*)' {svn_delta_path_driver_step} + + + +1 function with some indirect sub-type change: + + + + [C]'function svn_error_t* svn_element__tree_set(svn_element__tree_t*, int, const svn_element__content_t*)' at element.c:379:1 has some indirect sub-type changes: + + return type changed: + + entity changed from 'svn_error_t*' to 'void' + + type size changed from 64 to 0 (in bits) + + + + + +---------------diffs in subversion_libsvn_wc-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 2 Removed, 3 Changed (173 filtered out), 7 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +2 Removed functions: + + + + 'function svn_error_t* svn_wc__find_repos_node_in_wc(apr_array_header_t**, svn_wc__db_t*, const char*, const char*, apr_pool_t*, apr_pool_t*)' {svn_wc__find_repos_node_in_wc} + + 'function svn_error_t* svn_wc__get_shelves_dir(char**, svn_wc_context_t*, const char*, apr_pool_t*, apr_pool_t*)' {svn_wc__get_shelves_dir} + + + +7 Added functions: + + + + 'function svn_error_t* svn_wc__db_find_copies_of_repos_path(apr_array_header_t**, svn_wc__db_t*, const char*, const char*, svn_node_kind_t, apr_pool_t*, apr_pool_t*)' {svn_wc__db_find_copies_of_repos_path} + + 'function svn_error_t* svn_wc__db_find_repos_node_in_wc(apr_array_header_t**, svn_wc__db_t*, const char*, const char*, apr_pool_t*, apr_pool_t*)' {svn_wc__db_find_repos_node_in_wc} + + 'function svn_error_t* svn_wc__db_find_working_nodes_with_basename(apr_array_header_t**, svn_wc__db_t*, const char*, const char*, svn_node_kind_t, apr_pool_t*, apr_pool_t*)' {svn_wc__db_find_working_nodes_with_basename} + + 'function svn_error_t* svn_wc__find_copies_of_repos_path(apr_array_header_t**, const char*, const char*, svn_node_kind_t, svn_wc_context_t*, apr_pool_t*, apr_pool_t*)' {svn_wc__find_copies_of_repos_path} + + 'function svn_error_t* svn_wc__find_working_nodes_with_basename(apr_array_header_t**, const char*, const char*, svn_node_kind_t, svn_wc_context_t*, apr_pool_t*, apr_pool_t*)' {svn_wc__find_working_nodes_with_basename} + + 'function svn_error_t* svn_wc__get_experimental_dir(char**, svn_wc_context_t*, const char*, apr_pool_t*, apr_pool_t*)' {svn_wc__get_experimental_dir} + + 'function svn_error_t* svn_wc_revert6(svn_wc_context_t*, const char*, svn_depth_t, svn_boolean_t, const apr_array_header_t*, svn_boolean_t, svn_boolean_t, svn_boolean_t, svn_cancel_func_t, void*, svn_wc_notify_func2_t, void*, apr_pool_t*)' {svn_wc_revert6} + + + +3 functions with some indirect sub-type change: + + + + [C]'function svn_error_t* svn_wc__conflict_read_tree_conflict(svn_wc_conflict_reason_t*, svn_wc_conflict_action_t*, const char**, svn_wc__db_t*, const char*, const svn_skel_t*, apr_pool_t*, apr_pool_t*)' at conflicts.c:948:1 has some indirect sub-type changes: + + parameter 4 of type 'svn_wc__db_t*' changed: + + in pointed to type 'typedef svn_wc__db_t': + + entity changed from 'typedef svn_wc__db_t' to 'const char*' + + type size changed from 448 to 64 (in bits) + + parameter 5 of type 'const char*' changed: + + in pointed to type 'const char' at wc_db.h:128:1: + + entity changed from 'const char' to 'typedef svn_wc__db_t' at wc_db.h:128:1 + + type size changed from 8 to 448 (in bits) + + parameter 6 of type 'const svn_skel_t*' changed: + + in pointed to type 'const svn_skel_t': + + 'const svn_skel_t' changed to 'const char' + + parameter 7 of type 'apr_pool_t*' changed: + + in pointed to type 'typedef apr_pool_t': + + entity changed from 'typedef apr_pool_t' to 'const svn_skel_t' + + type size changed from 0 to 320 (in bits) + + parameter 9 of type 'apr_pool_t*' was added + + + + + + [C]'function svn_error_t* svn_wc__conflict_skel_add_tree_conflict(svn_skel_t*, svn_wc__db_t*, const char*, svn_wc_conflict_reason_t, svn_wc_conflict_action_t, const char*, apr_pool_t*, apr_pool_t*)' at conflicts.c:536:1 has some indirect sub-type changes: + + parameter 7 of type 'apr_pool_t*' changed: + + in pointed to type 'typedef apr_pool_t': + + entity changed from 'typedef apr_pool_t' to 'const char' + + type size changed from 0 to 8 (in bits) + + parameter 9 of type 'apr_pool_t*' was added + + + + + + [C]'function svn_error_t* svn_wc__diff7(const char**, svn_boolean_t*, svn_wc_context_t*, const char*, svn_depth_t, svn_boolean_t, const apr_array_header_t*, const svn_diff_tree_processor_t*, svn_cancel_func_t, void*, apr_pool_t*, apr_pool_t*)' at diff_local.c:436:1 has some indirect sub-type changes: + + parameter 1 of type 'const char**' changed: + + entity changed from 'const char**' to 'typedef svn_boolean_t' at svn_types.h:141:1 + + type size changed from 64 to 32 (in bits) + + parameter 2 of type 'svn_boolean_t*' changed: + + in pointed to type 'typedef svn_boolean_t' at svn_wc.h:179:1: + + typedef name changed from svn_boolean_t to svn_wc_context_t at svn_wc.h:179:1 + + underlying type 'int' changed: + + entity changed from 'int' to 'struct svn_wc_context_t' at wc.h:220:1 + + type size changed from 32 to 192 (in bits) + + parameter 3 of type 'svn_wc_context_t*' changed: + + in pointed to type 'typedef svn_wc_context_t': + + entity changed from 'typedef svn_wc_context_t' to 'const char' + + type size changed from 192 to 8 (in bits) + + parameter 4 of type 'const char*' changed: + + entity changed from 'const char*' to 'typedef svn_depth_t' at svn_types_impl.h:151:1 + + type size changed from 64 to 32 (in bits) + + type alignement changed from 0 to 32 + + parameter 5 of type 'typedef svn_depth_t' changed: + + typedef name changed from svn_depth_t to svn_boolean_t at svn_types.h:141:1 + + underlying type 'enum svn_depth_t' at svn_types.h:504:1 changed: + + entity changed from 'enum svn_depth_t' to 'int' + + type size hasn't changed + + type alignement changed from 32 to 0 + + parameter 6 of type 'typedef svn_boolean_t' changed: + + entity changed from 'typedef svn_boolean_t' to 'const apr_array_header_t*' + + type size changed from 32 to 64 (in bits) + + parameter 7 of type 'const apr_array_header_t*' changed: + + in pointed to type 'const apr_array_header_t': + + 'const apr_array_header_t' changed to 'const svn_diff_tree_processor_t' + + parameter 8 of type 'const svn_diff_tree_processor_t*' changed: + + entity changed from 'const svn_diff_tree_processor_t*' to compatible type 'typedef svn_cancel_func_t' at svn_types.h:1085:1 + + in pointed to type 'const svn_diff_tree_processor_t': + + entity changed from 'const svn_diff_tree_processor_t' to 'function type svn_error_t* (void*)' + + type size changed from 768 to 64 (in bits) + + parameter 9 of type 'typedef svn_cancel_func_t' changed: + + entity changed from 'typedef svn_cancel_func_t' to compatible type 'void*' + + in pointed to type 'function type svn_error_t* (void*)': + + entity changed from 'function type svn_error_t* (void*)' to 'void' + + type size changed from 64 to 0 (in bits) + + parameter 12 of type 'apr_pool_t*' was removed + + + + + + + +---------------diffs in subversion_libsvn_fs_fs-1.so.0.0.0_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed (234 filtered out), 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/tcl_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/tcl_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..3a24b09015a3610184b9c86d2443c7fe5be02e9b --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/tcl_all_result.md @@ -0,0 +1,230 @@ +# Functions changed info + +---------------diffs in tcl_libtcl8.6.so_abidiff.out:---------------- + +Functions changes summary: 4 Removed, 2 Changed (95 filtered out), 6 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added (3 filtered out) variables + + + +4 Removed functions: + + + + 'function int TclOODefineMixinObjCmd(ClientData, Tcl_Interp*, const int, Tcl_Obj* const*)' {TclOODefineMixinObjCmd} + + 'function int TclSkipUnlink(Tcl_Obj*)' {TclSkipUnlink} + + 'function int Tcl_EncodingObjCmd(ClientData, Tcl_Interp*, int, Tcl_Obj* const*)' {Tcl_EncodingObjCmd} + + 'function void TclpUnloadFile(Tcl_LoadHandle)' {TclpUnloadFile} + + + +6 Added functions: + + + + 'function mp_err TclBN_mp_balance_mul(const mp_int*, const mp_int*, mp_int*)' {TclBN_mp_balance_mul} + + 'function int TclBN_mp_expt_d_ex(const mp_int*, mp_digit, mp_int*, int)' {TclBN_mp_expt_d_ex} + + 'function void TclBN_mp_set_ull(mp_int*, Tcl_WideUInt)' {TclBN_mp_set_ull} + + 'function mp_err TclBN_mp_signed_rsh(const mp_int*, int, mp_int*)' {TclBN_mp_signed_rsh} + + 'function mp_err TclBN_mp_to_radix(const mp_int*, char*, size_t, size_t*, int)' {TclBN_mp_to_radix} + + 'function mp_err TclBN_mp_to_ubin(const mp_int*, unsigned char*, size_t, size_t*)' {TclBN_mp_to_ubin} + + + +2 functions with some indirect sub-type change: + + + + [C]'function int TclAddLiteralObj(CompileEnv*, Tcl_Obj*, LiteralEntry**)' at tclLiteral.c:601:1 has some indirect sub-type changes: + + parameter 1 of type 'CompileEnv*' has sub-type changes: + + in pointed to type 'typedef CompileEnv' at tclCompile.h:388:1: + + underlying type 'struct CompileEnv' at tclCompile.h:284:1 changed: + + type size hasn't changed + + 1 data member changes (3 filtered): + + type of 'AuxData* CompileEnv::auxDataArrayPtr' changed: + + in pointed to type 'typedef AuxData' at tclCompile.h:270:1: + + underlying type 'struct AuxData' at tclCompile.h:266:1 changed: + + type size hasn't changed + + 1 data member change: + + type of 'const AuxDataType* AuxData::type' changed: + + in pointed to type 'const AuxDataType': + + in unqualified underlying type 'typedef AuxDataType' at tclCompile.h:258:1: + + underlying type 'struct AuxDataType' at tclCompile.h:233:1 changed: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'AuxDataPrintProc* AuxDataType::disassembleProc' changed: + + in pointed to type 'typedef AuxDataPrintProc' at tclCompile.h:222:1: + + underlying type 'function type void (typedef ClientData, Tcl_Obj*, ByteCode*, unsigned int)' changed: + + parameter 3 of type 'ByteCode*' has sub-type changes: + + in pointed to type 'struct ByteCode' at tclCompile.h:414:1: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'Proc* ByteCode::procPtr' changed: + + in pointed to type 'typedef Proc' at tclInt.h:963:1: + + underlying type 'struct Proc' at tclInt.h:937:1 changed: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'Interp* Proc::iPtr' changed: + + in pointed to type 'typedef Interp' at tclInt.h:2145:1: + + underlying type 'struct Interp' at tclInt.h:1761:1 changed: + + type size hasn't changed + + 1 data member changes (8 filtered): + + type of 'const TclStubs* Interp::stubTable' changed: + + in pointed to type 'const TclStubs': + + in unqualified underlying type 'struct TclStubs' at tclDecls.h:1845:1: + + type size changed from 40512 to 41664 (in bits) + + 18 data member insertions: + + 'void ()* TclStubs::reserved631', at offset 40512 (in bits) at tclDecls.h:2504:1 + + 'void ()* TclStubs::reserved632', at offset 40576 (in bits) at tclDecls.h:2505:1 + + 'void ()* TclStubs::reserved633', at offset 40640 (in bits) at tclDecls.h:2506:1 + + 'void ()* TclStubs::reserved634', at offset 40704 (in bits) at tclDecls.h:2507:1 + + 'void ()* TclStubs::reserved635', at offset 40768 (in bits) at tclDecls.h:2508:1 + + 'void ()* TclStubs::reserved636', at offset 40832 (in bits) at tclDecls.h:2509:1 + + 'void ()* TclStubs::reserved637', at offset 40896 (in bits) at tclDecls.h:2510:1 + + 'void ()* TclStubs::reserved638', at offset 40960 (in bits) at tclDecls.h:2511:1 + + 'void ()* TclStubs::reserved639', at offset 41024 (in bits) at tclDecls.h:2512:1 + + 'void ()* TclStubs::reserved640', at offset 41088 (in bits) at tclDecls.h:2513:1 + + 'void ()* TclStubs::reserved641', at offset 41152 (in bits) at tclDecls.h:2514:1 + + 'void ()* TclStubs::reserved642', at offset 41216 (in bits) at tclDecls.h:2515:1 + + 'void ()* TclStubs::reserved643', at offset 41280 (in bits) at tclDecls.h:2516:1 + + 'void ()* TclStubs::reserved644', at offset 41344 (in bits) at tclDecls.h:2517:1 + + 'void ()* TclStubs::reserved645', at offset 41408 (in bits) at tclDecls.h:2518:1 + + 'void ()* TclStubs::reserved646', at offset 41472 (in bits) at tclDecls.h:2519:1 + + 'void ()* TclStubs::reserved647', at offset 41536 (in bits) at tclDecls.h:2520:1 + + 'void ()* TclStubs::tclUnusedStubEntry', at offset 41600 (in bits) at tclDecls.h:2521:1 + + 1 data member changes (6 filtered): + + type of 'const TclStubHooks* TclStubs::hooks' changed: + + in pointed to type 'const TclStubHooks': + + in unqualified underlying type 'typedef TclStubHooks' at tclDecls.h:1843:1: + + underlying type 'struct {const TclPlatStubs* tclPlatStubs; const TclIntStubs* tclIntStubs; const TclIntPlatStubs* tclIntPlatStubs;}' at tclDecls.h:1820:1 changed: + + type size hasn't changed + + 1 data member changes (1 filtered): + + type of 'const TclIntStubs* tclIntStubs' changed: + + in pointed to type 'const TclIntStubs': + + in unqualified underlying type 'struct TclIntStubs' at tclIntDecls.h:645:1: + + type size changed from 16576 to 16704 (in bits) + + 2 data member insertions: + + 'void ()* TclIntStubs::reserved257', at offset 16576 (in bits) at tclIntDecls.h:906:1 + + 'void ()* TclIntStubs::tclUnusedStubEntry', at offset 16640 (in bits) at tclIntDecls.h:907:1 + + no data member changes (26 filtered); + + + + + + + + + + + + + + + + + + + + [C]'function int TclBN_mp_unsigned_bin_size(mp_int*)' at bn_mp_ubin_size.c:7:1 has some indirect sub-type changes: + + return type changed: + + entity changed from 'int' to compatible type 'typedef size_t' at stddef.h:216:1 + + type name changed from 'int' to 'unsigned long int' + + type size changed from 32 to 64 (in bits) + + parameter 1 of type 'mp_int*' changed: + + in pointed to type 'typedef mp_int': + + entity changed from 'typedef mp_int' to 'const mp_int' + + type size hasn't changed + + + + + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/xorg-x11-server_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/xorg-x11-server_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..50f5a71b4bccc7ec1e5565dab926223829ddc0d7 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/xorg-x11-server_all_result.md @@ -0,0 +1,38 @@ +# Functions changed info + +---------------diffs in xorg-x11-server_libshadow.so_abidiff.out:---------------- + +---------------diffs in xorg-x11-server_libfb.so_abidiff.out:---------------- + +---------------diffs in xorg-x11-server_libwfb.so_abidiff.out:---------------- + +---------------diffs in xorg-x11-server_libglamoregl.so_abidiff.out:---------------- + +Functions changes summary: 0 Removed, 0 Changed, 2 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + + + +2 Added functions: + + + + 'function void glamor_clear_pixmap(PixmapPtr)' {glamor_clear_pixmap} + + 'function const char* glamor_egl_get_driver_name(ScreenPtr)' {glamor_egl_get_driver_name} + + + +---------------diffs in xorg-x11-server_modesetting_drv.so_abidiff.out:---------------- + +---------------diffs in xorg-x11-server_libshadowfb.so_abidiff.out:---------------- + +---------------diffs in xorg-x11-server_libfbdevhw.so_abidiff.out:---------------- + +---------------diffs in xorg-x11-server_libexa.so_abidiff.out:---------------- + +---------------diffs in xorg-x11-server_libglx.so_abidiff.out:---------------- + +---------------diffs in xorg-x11-server_libvgahw.so_abidiff.out:---------------- + diff --git a/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/zstd_all_result.md b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/zstd_all_result.md new file mode 100644 index 0000000000000000000000000000000000000000..73c2fb1b09be6b17c037cfd679feef43d123fff3 --- /dev/null +++ b/docs/zh/docs/Releasenotes/LTS_to_SP1_changed_abi_detail/zstd_all_result.md @@ -0,0 +1,98 @@ +# Functions changed info + +---------------diffs in zstd_libzstd.so.1.4.5_abidiff.out:---------------- + +Functions changes summary: 24 Removed, 0 Changed, 0 Added functions + +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + +Function symbols changes summary: 0 Removed, 12 Added function symbols not referenced by debug info + +Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info + + + +24 Removed functions: + + + + 'function size_t ZSTDMT_compressCCtx(ZSTDMT_CCtx*, void*, size_t, void*, size_t, int)' {ZSTDMT_compressCCtx} + + 'function size_t ZSTDMT_compressStream(ZSTDMT_CCtx*, ZSTD_outBuffer*, ZSTD_inBuffer*)' {ZSTDMT_compressStream} + + 'function size_t ZSTDMT_compressStream_generic(ZSTDMT_CCtx*, ZSTD_outBuffer*, ZSTD_inBuffer*, ZSTD_EndDirective)' {ZSTDMT_compressStream_generic} + + 'function size_t ZSTDMT_compress_advanced(ZSTDMT_CCtx*, void*, size_t, void*, size_t, const ZSTD_CDict*, ZSTD_parameters, unsigned int)' {ZSTDMT_compress_advanced} + + 'function ZSTDMT_CCtx* ZSTDMT_createCCtx(unsigned int)' {ZSTDMT_createCCtx} + + 'function ZSTDMT_CCtx* ZSTDMT_createCCtx_advanced(unsigned int, ZSTD_customMem)' {ZSTDMT_createCCtx_advanced} + + 'function size_t ZSTDMT_endStream(ZSTDMT_CCtx*, ZSTD_outBuffer*)' {ZSTDMT_endStream} + + 'function size_t ZSTDMT_flushStream(ZSTDMT_CCtx*, ZSTD_outBuffer*)' {ZSTDMT_flushStream} + + 'function size_t ZSTDMT_freeCCtx(ZSTDMT_CCtx*)' {ZSTDMT_freeCCtx} + + 'function size_t ZSTDMT_getMTCtxParameter(ZSTDMT_CCtx*, ZSTDMT_parameter, unsigned int*)' {ZSTDMT_getMTCtxParameter} + + 'function size_t ZSTDMT_initCStream(ZSTDMT_CCtx*, int)' {ZSTDMT_initCStream} + + 'function size_t ZSTDMT_initCStream_advanced(ZSTDMT_CCtx*, void*, size_t, ZSTD_parameters, long long unsigned int)' {ZSTDMT_initCStream_advanced} + + 'function size_t ZSTDMT_initCStream_usingCDict(ZSTDMT_CCtx*, const ZSTD_CDict*, ZSTD_frameParameters, long long unsigned int)' {ZSTDMT_initCStream_usingCDict} + + 'function size_t ZSTDMT_resetCStream(ZSTDMT_CCtx*, long long unsigned int)' {ZSTDMT_resetCStream} + + 'function size_t ZSTDMT_setMTCtxParameter(ZSTDMT_CCtx*, ZSTDMT_parameter, unsigned int)' {ZSTDMT_setMTCtxParameter} + + 'function size_t ZSTDMT_sizeof_CCtx(ZSTDMT_CCtx*)' {ZSTDMT_sizeof_CCtx} + + 'function size_t ZSTD_CCtxParam_getParameter(ZSTD_CCtx_params*, ZSTD_cParameter, unsigned int*)' {ZSTD_CCtxParam_getParameter} + + 'function size_t ZSTD_CCtxParam_setParameter(ZSTD_CCtx_params*, ZSTD_cParameter, unsigned int)' {ZSTD_CCtxParam_setParameter} + + 'function size_t ZSTD_CCtx_resetParameters(ZSTD_CCtx*)' {ZSTD_CCtx_resetParameters} + + 'function size_t ZSTD_compress_generic(ZSTD_CCtx*, ZSTD_outBuffer*, ZSTD_inBuffer*, ZSTD_EndDirective)' {ZSTD_compress_generic} + + 'function size_t ZSTD_compress_generic_simpleArgs(ZSTD_CCtx*, void*, size_t, size_t*, void*, size_t, size_t*, ZSTD_EndDirective)' {ZSTD_compress_generic_simpleArgs} + + 'function size_t ZSTD_decompress_generic(ZSTD_DCtx*, ZSTD_outBuffer*, ZSTD_inBuffer*)' {ZSTD_decompress_generic} + + 'function size_t ZSTD_decompress_generic_simpleArgs(ZSTD_DCtx*, void*, size_t, size_t*, void*, size_t, size_t*)' {ZSTD_decompress_generic_simpleArgs} + + 'function size_t ZSTD_setDStreamParameter(ZSTD_DStream*, ZSTD_DStreamParameter_e, unsigned int)' {ZSTD_setDStreamParameter} + + + +12 Added function symbols not referenced by debug info: + + + + ZDICT_getDictHeaderSize + + ZSTD_CCtxParams_getParameter + + ZSTD_CCtxParams_setParameter + + ZSTD_DCtx_setParameter + + ZSTD_cParam_getBounds + + ZSTD_compress2 + + ZSTD_compressStream2 + + ZSTD_compressStream2_simpleArgs + + ZSTD_dParam_getBounds + + ZSTD_decompressBound + + ZSTD_decompressStream_simpleArgs + + ZSTD_getSequences + + + diff --git a/docs/zh/docs/Releasenotes/public_sys-resources/icon-caution.gif b/docs/zh/docs/Releasenotes/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/docs/Releasenotes/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/docs/Releasenotes/public_sys-resources/icon-danger.gif b/docs/zh/docs/Releasenotes/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/docs/Releasenotes/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/docs/Releasenotes/public_sys-resources/icon-note.gif b/docs/zh/docs/Releasenotes/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/docs/Releasenotes/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/docs/Releasenotes/public_sys-resources/icon-notice.gif b/docs/zh/docs/Releasenotes/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/docs/Releasenotes/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/docs/Releasenotes/public_sys-resources/icon-tip.gif b/docs/zh/docs/Releasenotes/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/docs/Releasenotes/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/docs/Releasenotes/public_sys-resources/icon-warning.gif b/docs/zh/docs/Releasenotes/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/docs/Releasenotes/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/docs/Releasenotes/release_notes.md b/docs/zh/docs/Releasenotes/release_notes.md new file mode 100644 index 0000000000000000000000000000000000000000..3c44c3e87783ea72f6518b5a1f6ac9b05b7aee31 --- /dev/null +++ b/docs/zh/docs/Releasenotes/release_notes.md @@ -0,0 +1 @@ +本文是 openEuler 20.03 LTS SP3版本的发行说明。 \ No newline at end of file diff --git a/docs/zh/docs/Releasenotes/zh-cn_bookmap_0225720059.md b/docs/zh/docs/Releasenotes/zh-cn_bookmap_0225720059.md new file mode 100644 index 0000000000000000000000000000000000000000..5d775e30182a7156ece2c9bb4a4e0f4afa6fe288 --- /dev/null +++ b/docs/zh/docs/Releasenotes/zh-cn_bookmap_0225720059.md @@ -0,0 +1,14 @@ +# 版本发行说明 + +- [法律声明](./法律声明.md) +- [用户须知](./用户须知.md) +- [简介](./简介.md) +- [系统安装](./系统安装.md) +- [关键特性](./关键特性.md) +- [已知问题](./已知问题.md) +- [已修复问题](./已修复问题.md) +- [CVE漏洞](./CVE漏洞.md) +- [源代码](./源代码.md) +- [参与贡献](./参与贡献.md) +- [致谢](./致谢.md) + diff --git "a/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" "b/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" new file mode 100644 index 0000000000000000000000000000000000000000..82efc0301b5eb741b3f536000650efecbf1a0b91 --- /dev/null +++ "b/docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" @@ -0,0 +1,46 @@ +# 关键特性 + + +## 内存分级扩展 +当前内存制造工艺已经达到瓶颈,Arm 生态发展让每个 CPU 核的成本越来越低。数据库、虚拟机、大数据、人工智能、深度学习场景同时需要算力和内存的支持。内存容量成为了制约业务和算力的问题 +内存分扩展通过 DRAM 和低速内存介质,如 SCM、AEP ,以及RDMA远端内存等形成多级内存,通过内存自动调度让热数据在 DRAM 高速 内存区中运行,让冷数据交换到低速内存区,从而增加内存容量,保证核心业务高效平稳运行。该特性适用于内存缓存多,且随机访问模型的业务,实测等成本条件下MySQL性能提升40%。针对用户态存储框架和用户需求,新增用户态的内存交换机制 + +- **进程级控制**,etmem 支持通过配置文件来进行内存扩展的进程,相比于操作系统原生的基于 LRU 淘汰的 kswap 机制,更加灵活和精准。 +- **冷热分级**,用户态触发对指定进程进行内存访问扫描,根据分级策略配置文件,对内存访问结果进行分级,区分出热内存和冷内存。 +- **淘汰策略**,根据配置文件和系统环境配置,对冷内存进行淘汰,淘汰流程使用内核原生能力,安全可靠,用户无感知。 +- **多介质扩展支持**,支持SCM、XL Flash、NVMe SSD等多种介质作为扩展内存,根据介质自身访问速度指定内存冷热分层方案,达到扩展内存并减少性能损失的目的。 + +**应用场景**:节点内业务进程内存分级扩展 +适用于对内存使用较多,且访问相对不频繁的业务软件,扩展效果较好,比如 MySQL、Redis、Nginx 等,内存扩展操作均在节点内部,不涉及跨节点远端操作 +在用户态存储框架的场景中,可通过策略框架的用户态userswap功能,使用用户态存储作为交换设备 + +## KubeOS容器操作系统 +云原生是云计算发展的下一跳、k8s事实上已经成为云原生软件基础设施的底座。业界主流操作系统厂商都推出了针对云原生场景的OS,如Rehat RCHOS,AWS BottleRocket等,实现OS容器化部署、运维,提供与业务容器一致的管理和运维体验 +openEuler适应云原生发展趋势,推出容器化操作系统KubeOS,实现云原生集群OS的统一容器化管理,具备如下特点: +- OS容器化管理、对接K8S,原子化的生命周期管理; +- OS轻量化裁剪,减少不必要的冗余包,可实现快速升级、替换等。 + +**应用场景**:基于K8S容器云平台的业务节点服务器主机OS的容器化管理,提供容器业务相同的生命周期管理和运维体验; + +## Eggo K8s部署工具 +Eggo是openEuler云原生Sig组K8S集群部署管理项目,提供高效稳定的集群部署集群的能力。支持单集群多架构、支持在线和离线部署模式多种部署模式,结合GitOps管理能力、感知集群配置变化,驱动集群OS统一高效部署。 + +- **集群配置版本化管理**,配置统一Git repo版本化管理,使用仓库汇总和跟踪集群的配置信息 +- **配置感知**, GitOps会感知git配置库中集群配置信息的变化,给部署引擎发起集群相应的操作请求 +- **部署引擎**,部署引擎负责下发任务给业务集群,触发部署业务集群、销毁业务集群、新增节点和删除节点等任务 + +**应用场景**:X86/ARM双平面云基础设施,基于K8S云原生框架,实现OS统一集群化部署、监控、审计等场景 + +## OpenStack Train支持 +OpenStack Train是一款简单、可大规模扩展、丰富、标准统一的云管理操作系统,更多特性请参考OpenStack Train官方发行说明。 +- **集成openStack Queens/Rocky版本**,使能基础设施即服务(IaaS)解决方案。 +- **增强块存储服务能力**,增加容量扩展、快照和虚拟机镜像克隆等高级功能。 +- **增强容器化部署和网络能力**,与容器能更好的集成。 +- **增加扩展服务支持**,支持控制面板管理、裸机部署、云资源追踪等扩展服务。 + +## 桌面支持 +- Kiran麒麟信安桌面系统:是一款以用户和市场需求为主导的稳定、高效、易用的桌面环境,主要包括了桌面、任务栏、托盘、控制中心和窗口管理等组件。 + +## 兼容性清单 +- 上线[北向兼容性清单](https://www.openeuler.org/zh/compatibility/) +- 支持intel ice lake \ No newline at end of file diff --git "a/content/zh/docs/Releasenotes/\345\217\202\344\270\216\350\264\241\347\214\256.md" "b/docs/zh/docs/Releasenotes/\345\217\202\344\270\216\350\264\241\347\214\256.md" similarity index 61% rename from "content/zh/docs/Releasenotes/\345\217\202\344\270\216\350\264\241\347\214\256.md" rename to "docs/zh/docs/Releasenotes/\345\217\202\344\270\216\350\264\241\347\214\256.md" index e14ad24e2bf3f670106ed94079d8af84e65fb389..e26a9abe6d3d578e3804926b9cccc9253bbbb07c 100644 --- "a/content/zh/docs/Releasenotes/\345\217\202\344\270\216\350\264\241\347\214\256.md" +++ "b/docs/zh/docs/Releasenotes/\345\217\202\344\270\216\350\264\241\347\214\256.md" @@ -1,16 +1,16 @@ # 参与贡献 -作为openEuler用户,你可以通过多种方式协助openEuler社区。参与社区贡献的方法请参见[社区贡献](https://openeuler.org/zh/developer.html),这里简单列出部分方式供参考。 +作为openEuler用户,你可以通过多种方式协助openEuler社区。参与社区贡献的方法请参见[贡献攻略](https://openeuler.org/zh/community/contribution/),这里简单列出部分方式供参考。 ## 特别兴趣小组 -openEuler将拥有共同兴趣的人们聚在一起,组成了不同的特别兴趣小组(SIG)。当前已有的SIG请参见[SIG列表](https://openeuler.org/zh/sig.html)。 +openEuler将拥有共同兴趣的人们聚在一起,组成了不同的特别兴趣小组(SIG)。当前已有的SIG请参见[SIG列表](https://openeuler.org/zh/sig/sig-list/)。 -我们欢迎并鼓励你加入已有的SIG或创建新的SIG,创建方法请参见[SIG管理指南](https://gitee.com/openeuler/community/blob/master/zh/technical-committee/governance/README.md)。 +我们欢迎并鼓励你加入已有的SIG或创建新的SIG,创建方法请参见[SIG管理指南](https://gitee.com/openeuler/community/blob/master/zh/technical-committee/governance/README.md\)。 ## 邮件列表和任务 -欢迎你积极地帮助用户解决在[邮件列表](https://openeuler.org/zh/community/mails.html)和issue任务(包括[代码仓任务](https://gitee.com/organizations/openeuler/issues)和[软件包仓任务](https://gitee.com/organizations/src-openeuler/issues)) 中提出的问题。另外,我们也欢迎你提出问题。这些都将帮助openEuler社区更好地发展。 +欢迎你积极地帮助用户解决在[邮件列表](https://openeuler.org/zh/community/mailing-list/)和issue任务(包括[代码仓任务](https://gitee.com/organizations/openeuler/issues)和[软件包仓任务](https://gitee.com/organizations/src-openeuler/issues)) 中提出的问题。另外,我们也欢迎你提出问题。这些都将帮助openEuler社区更好地发展。 ## 文档 @@ -18,5 +18,5 @@ openEuler将拥有共同兴趣的人们聚在一起,组成了不同的特别 ## IRC -openEuler也在IRC开辟了频道,作为提供社区支持和交互的额外渠道。详情请参见[openEuler IRC](https://openeuler.org/zh/community/irc.html)。 +openEuler也在IRC开辟了频道,作为提供社区支持和交互的额外渠道。详情请参见[openEuler IRC](https://gitee.com/openeuler/community/blob/master/zh/communication/IRCs.md\)。 diff --git "a/docs/zh/docs/Releasenotes/\345\267\262\344\277\256\345\244\215\351\227\256\351\242\230.md" "b/docs/zh/docs/Releasenotes/\345\267\262\344\277\256\345\244\215\351\227\256\351\242\230.md" new file mode 100644 index 0000000000000000000000000000000000000000..d650ab0c32587e435be457ed675532663ef250b8 --- /dev/null +++ "b/docs/zh/docs/Releasenotes/\345\267\262\344\277\256\345\244\215\351\227\256\351\242\230.md" @@ -0,0 +1,132 @@ +# 已修复问题 + +已修复问题请参见[表1](#table249714911433)。 + +**表 1** 修复问题列表 + +| ISSUE |问题描述 | +|:--- |:---- | +| [I4JB57](https://gitee.com/src-openEuler/iSulad/issues/I4JB57) | 【20.03 SP3】isulad安装失败,报错because a fatal signal was delivered causing the control process to dump core | +| [I4JH6S](https://gitee.com/openEuler/openstack/issues/I4JH6S) | [20.03 LTS SP3][Train]openstack-neutron缺少依赖dibbler-client | +| [I4JNRA](https://gitee.com/openEuler/openstack/issues/I4JNRA) | [20.03 LTS SP3][Train]openstack-nova缺少python-monotonic依赖 | +| [I4JNT7](https://gitee.com/openEuler/openstack/issues/I4JNT7) | [20.03 LTS SP3][Train]openstack-neutron缺少python-os-xenapi | +| [I4JOTA](https://gitee.com/src-openEuler/iSulad/issues/I4JOTA) | iSulad从sp2升级到sp3有告警日志 | +| [I4JQEQ](https://gitee.com/src-openEuler/linux-sgx/issues/I4JQEQ) | 【x86】sp2升级到sp3时sgx-pck-id-retrieval-tool有告警信息 | +| [I4JQOB](https://gitee.com/src-openEuler/rubygem-sinatra/issues/I4JQOB) | SP3分支rubygem-sinatra代码构建失败 | +| [I4JQOD](https://gitee.com/src-openEuler/rubygem-rack-test/issues/I4JQOD) | SP3分支rubygem-rack-test代码构建失败 | +| [I4JQOG](https://gitee.com/src-openEuler/rubygem-rack-protection/issues/I4JQOG) | SP3分支rubygem-rack-protection代码构建失败 | +| [I4JQPB](https://gitee.com/src-openEuler/cyrus-sasl/issues/I4JQPB) | 【x86】sp3降级到sp2时cyrus-sasl-gssapi与cyrus-sasl报冲突 | +| [I4JQPH](https://gitee.com/src-openEuler/libxml2/issues/I4JQPH) | openEuler 20.03 SP3中libxml2-2.9.10-22版本库存在问题,导致clufter软件包编译失败 | +| [I4JQPU](https://gitee.com/src-openEuler/groff/issues/I4JQPU) | 【x86】sp3降级到sp2时groff与groff-base报文件冲突 | +| [I4JQRC](https://gitee.com/src-openEuler/abseil-cpp/issues/I4JQRC) | 【x86】sp3降级到sp2时abseil-cpp与grpc冲突 | +| [I4JQZJ](https://gitee.com/src-openEuler/linux-sgx/issues/I4JQZJ) | [x86]sgxsdk从sp3降级到sp2告警 | +| [I4JR0U](https://gitee.com/src-openEuler/rdma-core/issues/I4JR0U) | 【x86】rdma-core从sp3降级到sp2告警 | +| [I4JRT9](https://gitee.com/openEuler/openstack/issues/I4JRT9) | [20.03 LTS SP3][Train]Glance缺少glance-registry服务 | +| [I4JS4I](https://gitee.com/src-openEuler/tog-pegasus/issues/I4JS4I) | [x86] tog-pegasus-help从sp3降级到sp2时有告警信息 | +| [I4JSLU](https://gitee.com/src-openEuler/cups/issues/I4JSLU) | 【arm】cups从sp3降级到sp2告警 | +| [I4JSMI](https://gitee.com/src-openEuler/jack-audio-connection-kit/issues/I4JSMI) | 【arm/x86】jack-audio-connection-kit从sp3降级到sp2告警 | +| [I4JSOA](https://gitee.com/src-openEuler/bind/issues/I4JSOA) | 【arm/x86】bind-chroot从sp3降级到sp2告警 | +| [I4JVIE](https://gitee.com/openEuler/kernel/issues/I4JVIE) | 【20.03 SP3】【arm物理机】最小化安装,手动配置ipv4/ipv6,有告警信息:random: 7 urandom warning(s) missed due to ratelimiting | +| [I4JWWO](https://gitee.com/openEuler/openstack/issues/I4JWWO) | [20.03 LTS SP3][Train]Ironic缺少sendfile模块 | +| [I4JXOF](https://gitee.com/openEuler/kernel/issues/I4JXOF) | 【20.03 SP3】【arm物理机】最小化安装选择部分插件(容器管理 、开发工具),日志中有告警 | +| [I4JYR6](https://gitee.com/src-openEuler/iSulad/issues/I4JYR6) | [20.03 SP3][iSulad] isulad -h命令执行失败 | +| [I4JZYD](https://gitee.com/src-openEuler/fastdfs/issues/I4JZYD) | [20.03-LTS-SP3]arm上fastdfs包下fdfs_storaged /etc/fdfs/storage.conf start启动失败 | +| [I4K00Q](https://gitee.com/src-openEuler/isula-transform/issues/I4K00Q) | isula-transform 编译报错:/usr/bin/ld: /usr/lib/gcc/aarch64-linux-gnu/7.3.0/../../../../lib64/libisulad_img.so: undefined reference to `get_isulad_daemon_constants | +| [I4K0GO](https://gitee.com/src-openEuler/openssh/issues/I4K0GO) | 【SP3_虚拟镜像arm/x86】qcow2镜像安装系统后,向外部主机scp文件提示:-gt需要一元表达式 | +| [I4K0J8](https://gitee.com/src-openEuler/resource-agents/issues/I4K0J8) | 【20.03-LTS-SP3】【x86】ldirectord服务启动后有错误Failed to parse PID from file /run/ldirectord.ldirectord.pid | +| [I4K0O9](https://gitee.com/src-openEuler/iSulad/issues/I4K0O9) | [20.03 SP3][iSulad] 转测Repo源里的iSulad版本和lcr不匹配,无法启动容器 | +| [I4K0Z9](https://gitee.com/src-openEuler/rrdtool/issues/I4K0Z9) | 【20.03 LTS SP3】【arm/x86】rrdcached.socket服务stop之后未删除/tmp/rrdcached.sock文件 | +| [I4K1H8](https://gitee.com/src-openEuler/cyrus-sasl/issues/I4K1H8) | 【LTS-SP3-RC1】【arm/x86】用memcached+sasl的方式给memcached增加认证,客户端访问失败 | +| [I4K257](https://gitee.com/src-openEuler/iavf/issues/I4K257) | 【SP3-arm/x86】安装iavf有错误信息 | +| [I4K267](https://gitee.com/src-openEuler/rdma-core/issues/I4K267) | 【20.03 SP3】【x86 物理机】虚拟化安装不勾选插件,组raid盘安装系统,报错:Failed to get current device name and index | +| [I4K2AY](https://gitee.com/src-openEuler/linux-sgx/issues/I4K2AY) | 【sp3-x86】安装子包sgx-dcap-pccs出现告警信息 | +| [I4K2NC](https://gitee.com/openEuler/kernel/issues/I4K2NC) | 【20.03 SP3】【arm 物理机】net镜像虚拟化安装(选择全部插件),安装好物理机后组raid盘安装虚拟机,虚拟机messages有GPT报错 | +| [I4K34Z](https://gitee.com/src-openEuler/systemd/issues/I4K34Z) | 【20.03 SP3】【x86 物理机】使用net镜像配置anaconda-ks.cfg进行半自动化安装,日志中有 | +| [I4K36H](https://gitee.com/src-openEuler/perl-Crypt-OpenSSL-Random/issues/I4K36H) | 【20.03-LTS-SP3】【x86/arm】perl-Crypt-OpenSSL-Random源码包本地自编译失败 | +| [I4K36R](https://gitee.com/src-openEuler/abrt/issues/I4K36R) | 【SP3】卸载abrt-addon-ccpp有错误信息 | +| [I4K38E](https://gitee.com/src-openEuler/openal-soft/issues/I4K38E) | 【20.03-LTS-SP3】【x86/arm】openal-soft源码包本地自编译失败 | +| [I4K39F](https://gitee.com/src-openEuler/libffado/issues/I4K39F) | 【20.03-LTS-SP3】【x86/arm】libffado源码包本地自编译失败 | +| [I4K3EI](https://gitee.com/src-openEuler/nfs-utils/issues/I4K3EI) | 【20.03-LTS-SP3】【x86】nfs-blkmap服务停止状态failed.【arm】nfs-blkmap服务启动后状态failed | +| [I4K44V](https://gitee.com/src-openEuler/hibernate-validator/issues/I4K44V) | 【20.03-LTS-SP3】【x86/arm】hibernate-validator 源码包本地自编译失败 | +| [I4K46G](https://gitee.com/src-openEuler/mysql5/issues/I4K46G) | 【20.03-LTS-SP3】【x86/arm】mysql5 源码包本地自编译失败 | +| [I4K47B](https://gitee.com/src-openEuler/infinispan/issues/I4K47B) | 【20.03-LTS-SP3】【x86/arm】infinispan源码包本地自编译失败 | +| [I4K4LB](https://gitee.com/src-openEuler/python-urwid/issues/I4K4LB) | 【20.03-LTS-SP3】【x86/arm】python-urwid源码包本地自编译失败 | +| [I4K4M0](https://gitee.com/src-openEuler/hivex/issues/I4K4M0) | 【20.03-LTS-SP3】【x86/arm】hivex源码包本地自编译失败 | +| [I4K4M3](https://gitee.com/src-openEuler/python-execnet/issues/I4K4M3) | 【20.03-LTS-SP3】【x86/arm】python-execnet源码包本地自编译失败 | +| [I4K6ZX](https://gitee.com/src-openEuler/initial-setup/issues/I4K6ZX) | 【20.03 LTS SP3】【arm/x86】initial-setup.service启动失败 | +| [I4K7KS](https://gitee.com/src-openEuler/subscription-manager/issues/I4K7KS) | 【20.03 LTS SP3】【arm/x86】rhsm.service启动失败,rhsm-facts.service启动之后日志中报错:cannot watch /etc/rhsm/syspurpose | +| [I4K7LV](https://gitee.com/src-openEuler/jersey/issues/I4K7LV) | 【20.03-LTS-SP3】【x86/arm】jersey源码包本地自编译失败 | +| [I4K8JU](https://gitee.com/src-openEuler/sos/issues/I4K8JU) | [20.03-LTS-SP3-round-1]arm/x86上sos包下命令行执行报错 | +| [I4K97V](https://gitee.com/src-openEuler/flink/issues/I4K97V) | 【20.03-LTS-SP3】【x86/arm】flink源码包本地自编译失败 | +| [I4K9WR](https://gitee.com/src-openEuler/util-linux/issues/I4K9WR) | [SP3 util-linux] mount命令挂载提示:unable to apply new capability set | +| [I4KD1B](https://gitee.com/src-openEuler/dovecot/issues/I4KD1B) | 【20.03 LTS SP3】【arm/x86】执行dovecot-sysreport命令报错 | +| [I4KD51](https://gitee.com/src-openEuler/openvswitch/issues/I4KD51) | 【20.03-LTS-SP3】【arm/x86】openvswitch-ipsec.service启动失败;ovn-controller-vtep.service停止有错误日志ovn-ctl[12958]: [FAILED] | +| [I4KF89](https://gitee.com/src-openEuler/perl-Net-DNS/issues/I4KF89) | 【20.03-LTS-SP3】【x86/arm】perl-Net-DNS源码包本地自编译失败 | +| [I4KFG6](https://gitee.com/src-openEuler/obs-server/issues/I4KFG6) | 【20.03 LTS SP3】【arm/x86】obsapisetup服务启动失败 | +| [I4KFOU](https://gitee.com/src-openEuler/edac-utils/issues/I4KFOU) | 【20.03-LTS-SP3】【arm/x86】edac.service stop的命令使用方式错误 | +| [I4KH5Z](https://gitee.com/src-openEuler/clamav/issues/I4KH5Z) | 【20.03 LTS SP3】【arm/x86】执行clamonacc -w命令报错 | +| [I4KI3Q](https://gitee.com/openEuler/openstack/issues/I4KI3Q) | [20.03 LTS SP3][Train]openstack-heat-engine服务启动失败 | +| [I4KIA8](https://gitee.com/src-openEuler/hbase/issues/I4KIA8) | 【20.03 LTS SP3】【arm/x86】hbase-master.service服务启动之后没多久状态变为inactive | +| [I4KIFU](https://gitee.com/src-openEuler/avahi/issues/I4KIFU) | 【20.03 SP3】【arm 物理机】SP1向SP3全量升级,出现avahi子包冲突问题 | +| [I4KJFO](https://gitee.com/src-openEuler/openEuler-release/issues/I4KJFO) | 【20.03 SP3】【20.03 SP1】【arm 物理机】进行全量安装或scp,有报错:/etc/profile.d/system-info.sh: 第 17 行:[: -gt:需要一元表达式 | +| [I4KJZ0](https://gitee.com/openEuler/openstack/issues/I4KJZ0) | [20.03 LTS SP3][Queens][Rocky] Kolla-plugin缺少python2依赖 | +| [I4KKHH](https://gitee.com/src-openEuler/libdnf/issues/I4KKHH) | 【libdnf-arm/x86】降级fuse包出现校验报错 | +| [I4KQOC](https://gitee.com/src-openEuler/rpm/issues/I4KQOC) | 【plugin selinux-arm/x86】卸载selinux-policy包出现报错:plugin selinux:hook fsm_file_prepare failed | +| [I4KR8A](https://gitee.com/src-openEuler/selinux-policy/issues/I4KR8A) | 【SP3-arm/x86】全量操作中bind包调用selinx-policy导致升级、降级报错 | +| [I4MKK7](https://gitee.com/openEuler/kernel/issues/I4MKK7) | secGear特性arm部署trustzone时需要调用sfc这个driver | +| [I4KWHY](https://gitee.com/openEuler/openstack/issues/I4KWHY) | [20.03 LTS SP3][Train] python-lz4构建失败 | +| [I4KWWM](https://gitee.com/src-openEuler/ibus/issues/I4KWWM) | 【20.03 SP3】ibus从SP1向SP3升级异常 | +| [I4L2LL](https://gitee.com/src-openEuler/redis5/issues/I4L2LL) | [SP3 round2] 修改redis配置文件,appendonly no 修改为appendonly yes,重新启动,redis启动失败 | +| [I4L2P5](https://gitee.com/src-openEuler/redis5/issues/I4L2P5) | 【20.03 LTS SP3】redis-sentinel命令提示需要sentinel.conf与实际不符 | +| [I4L3G5](https://gitee.com/src-openEuler/abrt/issues/I4L3G5) | 【SP3-arm/x86】abrt-addon-ccpp从SP2升级到SP3有异常信息 | +| [I4L3J0](https://gitee.com/src-openEuler/zlib/issues/I4L3J0) | 【20.03-LTS-SP3】【x86/arm】zlib源码包本地自编译失败 | +| [I4L3KW](https://gitee.com/src-openEuler/iSulad/issues/I4L3KW) | 【iSulad-arm/x86】iSulad从SP2升级到SP3报错 | +| [I4L3Y3](https://gitee.com/src-openEuler/fakeroot/issues/I4L3Y3) | 【20.03 SP3】【arm/x86】fakeroot-help从sp3向sp1降级有失败信息 | +| [I4L40H](https://gitee.com/src-openEuler/ndctl/issues/I4L40H) | [20.03-LTS-SP3][arm物理机]安装最小化加标准插件,message日志报错:/usr/bin/ndctl: No such file or directory | +| [I4L435](https://gitee.com/src-openEuler/glibc/issues/I4L435) | 【20.03 SP3】【arm物理机】SP3全量降级时在进行glibc-common的降级时,全量降级进程突然中断,glibc-common单包降级有报错 | +| [I4L7H0](https://gitee.com/src-openEuler/jffi/issues/I4L7H0) | 【20.03-LTS-SP3】【x86/arm】jffi源码包本地自编译失败 | +| [I4L9F3](https://gitee.com/src-openEuler/dde/issues/I4L9F3) | 【openEuler 20.03 SP3 Test round 2 】【x86/arm】帮助手册内容显示异常 | +| [I4LCPM](https://gitee.com/src-openEuler/obs-server/issues/I4LCPM) | 【20.03 LTS SP3】【arm/x86】obsnotifyforward.service服务stop失败 | +| [I4LD5U](https://gitee.com/openEuler/kernel/issues/I4LD5U) | 【openEuler20.03 LTS SP3 RC2】【ARM】执行长稳sysfs用例中断,产生core文件。 | +| [I4LGFY](https://gitee.com/src-openEuler/python-pyasn1-modules/issues/I4LGFY) | 【20.03-LTS-SP3】【x86/arm】python-pyasn1-modules源码包本地自编译失败 | +| [I4LGLK](https://gitee.com/src-openEuler/python-SecretStorage/issues/I4LGLK) | [20.03-LTS-SP3-round-2]x86上执行keyring --list-backend命令 python-SecretStorage包下文件告警 | +| [I4LGW9](https://gitee.com/src-openEuler/openvswitch/issues/I4LGW9) | 【20.03-LTS-SP3】【arm/x86】openvswitch包中服务需明确前提selinux关闭 | +| [I4LH0S](https://gitee.com/src-openEuler/openvswitch/issues/I4LH0S) | 【20.03-LTS-SP3】【arm/x86】ovn-controller-vtep.service服务普通用户下操作,需添加相关说明;openvswitch相关服务需要使用service方式 | +| [I4LI21](https://gitee.com/src-openEuler/thrift/issues/I4LI21) | 【20.03-LTS-SP3】【x86/arm】thrift源码包本地自编译失败 | +| [I4LINP](https://gitee.com/src-openEuler/nbdkit/issues/I4LINP) | 【20.03-LTS-SP3】【x86/arm】nbdkit源码包本地自编译失败 | +| [I4LKO5](https://gitee.com/src-openEuler/anaconda/issues/I4LKO5) | [20.03-LTS-SP3]安装OS时主机名设置64字符保存成功,自定义磁盘分区时报主机名无效的错误 | +| [I4LMGH](https://gitee.com/openEuler/kernel/issues/I4LMGH) | [20.03-LTS-SP3]arm物理机u盘安装后,message报错arm-smmu-v3 arm-smmu-v3.0.auto: enable smmu mpam failed | +| [I4LNIU](https://gitee.com/src-openEuler/cockpit/issues/I4LNIU) | 【20.03 SP3】【arm/x86 物理机/虚拟机】SP3全量降级到SP1过程中,环境无法ssh连接 | +| [I4LQBP](https://gitee.com/src-openEuler/libvirt/issues/I4LQBP) | 20.03-LTS-SP3测试环境openstack的虚拟机创建失败 | +| [I4LU6M](https://gitee.com/src-openEuler/openEuler-release/issues/I4LU6M) | 【20.03-LTS-SP3】【arm】安装多国语言包并配置语言中文,ssh登录报错 | +| [I4LWI8](https://gitee.com/openEuler/kernel/issues/I4LWI8) | 【openEuler20.03 LTS SP3】【ARM/X86】KASAN模式执行syskaller用例,产生一些问题。 | +| [I4M1Y9](https://gitee.com/src-openEuler/findbugs/issues/I4M1Y9) | 【20.03-LTS-SP3】【x86/arm】findbugs源码包本地自编译失败 | +| [I4M1YJ](https://gitee.com/src-openEuler/narayana/issues/I4M1YJ) | 【20.03-LTS-SP3】【x86/arm】narayana源码包本地自编译失败 | +| [I4MJUD](https://gitee.com/src-openEuler/findutils/issues/I4MJUD) | 【20.03-LTS-SP3】【arm】findutils源码包本地自编译失败 | +| [I4MK2M](https://gitee.com/src-openEuler/grep/issues/I4MK2M) | 【20.03-LTS-SP3】【arm】grep源码包本地自编译失败 | +| [I4MN7Z](https://gitee.com/src-openEuler/glib2/issues/I4MN7Z) | 【20.03-LTS-SP3】【x86/arm】glib2源码包本地自编译失败 | +| [I4MOLU](https://gitee.com/src-openEuler/qpdf/issues/I4MOLU) | 【20.03-LTS-SP3】【arm】qpdf源码包本地自编译失败 | +| [I4MPHV](https://gitee.com/src-openEuler/m4/issues/I4MPHV) | 【20.03-LTS-SP3】【arm】m4源码包本地自编译失败 | +| [I4MPLF](https://gitee.com/src-openEuler/mozjs78/issues/I4MPLF) | 【20.03-LTS-SP3】【x86/arm】mozjs78源码包本地自编译失败 | +| [I4G5Y3](https://gitee.com/src-openEuler/hiredis/issues/I4G5Y3) | mem_size overflow in sdsMakeRoomFor | +| [I4JH3K](https://gitee.com/src-openEuler/opusfile/issues/I4JH3K) | Abort in op_pcm_seek_page | +| [I4JH69](https://gitee.com/src-openEuler/opusfile/issues/I4JH69) | Unexpect-shift in op_rescale64 | +| [I4JH8T](https://gitee.com/src-openEuler/opusfile/issues/I4JH8T) | integer overflow in op_pcm_total | +| [I4M2YM](https://gitee.com/src-openEuler/tuned/issues/I4M2YM) | [20.03-lts-Sp3 round3-X86] powertop2tuned提示版本过低 | +| [I4M3MM](https://gitee.com/src-openEuler/sleuthkit/issues/I4M3MM) | 【fuzz测试】堆溢出 | +| [I4M5DO](https://gitee.com/openEuler/kernel/issues/I4M5DO) | 【openEuler20.03 LTS SP3】【ARM/X86】UBSAN模式执行syskaller用例,产生一些问题。 | +| [I4M8FM](https://gitee.com/src-openEuler/openvswitch/issues/I4M8FM) | 【20.03-LTS-SP3】【arm/x86】openvswitch-ipsec.service启动日志中存在ipsec.service启动失败信息,且导致ipsec.service无法成功启动 | +| [I4M92Z](https://gitee.com/src-openEuler/openEuler-latest-release/issues/I4M92Z) | sp3版本中openEuler-latest内容与实际不符 | +| [I4MC30](https://gitee.com/src-openEuler/libdb/issues/I4MC30) | 【20.03 SP3】【x86物理机】sp1升级到sp1 update,然后升级到sp3,reboot后有报错:Error: rpmdb open failed | +| [I4MC4O](https://gitee.com/src-openEuler/ncurses/issues/I4MC4O) | 【20.03 SP3】LTS全量升级到SP3,reboot后执行全量降级,降级结束后一段时间后有报错打印:awk: error while loading shared libraries: libtinfo.so.6: cannot open shared object file: No such file or directory,机器无法ssh连接 | +| [I4MCP6](https://gitee.com/src-openEuler/initial-setup/issues/I4MCP6) | 【20.03 LTS SP3】【arm/x86】initial-setup从SP2到SP3及从SP2到SP2_update最新版到SP3升级有错误 | +| [I4MFP9](https://gitee.com/openEuler/nvwa/issues/I4MFP9) | nvwa配置服务热迁移,需要systremd接管进程,nvwa文档请补充systemd相关约束说明 | +| [I4MGLC](https://gitee.com/src-openEuler/sleuthkit/issues/I4MGLC) | 【fuzz】sleuthkit_fls_ntfs_fuzzer heap-buffer-overflow | +| [I4MIF3](https://gitee.com/src-openEuler/etmem/issues/I4MIF3) | memRouter策略+uswap无法按照预期将进程内存交换出去 | +| [I4ML4S](https://gitee.com/src-openEuler/booth/issues/I4ML4S) | 【LTS-SP3-RC3】【arm/x86】卸载booth-arbitrator包时提示booth@.service服务停止失败 | +| [I4MNHQ](https://gitee.com/openEuler/oemaker/issues/I4MNHQ) | 执行oemaker -s ${yum_repo} -r abc_123_flag -v R888C00 -p all_is_new999 失败后,执行oemaker -s ${yum_repo} -r abc -v R8 -p all,有mv报错 | +| [I4MNLZ](https://gitee.com/openEuler/oemaker/issues/I4MNLZ) | 直接执行oemaker构建,当repo源访问不了时,会多次提示“Cannot download repomd.xml: Cannot download repodata/repomd.xml” | +| [I4N1TO](https://gitee.com/openEuler/kernel/issues/I4N1TO) | 【openEuler 20.03 LTS SP3】【Arm/x86】ltp执行finit_module02用例失败 | +| [I4NFMS](https://gitee.com/openEuler/openstack/issues/I4NFMS) | [20.03 LTS SP3][Train] openstack-swift多个服务无法启动 | +| [I4NKIO](https://gitee.com/src-openEuler/trafficserver/issues/I4NKIO) | [20.03-LTS-SP3][arm/x86]trafficserver.service服务stop后状态显示为failed | +| [I4OH8P](https://gitee.com/src-openEuler/gcc/issues/I4OH8P) | 【20.03-LTS-SP3】【arm/x86】gcc源码包本地自编译失败 | \ No newline at end of file diff --git "a/docs/zh/docs/Releasenotes/\345\267\262\347\237\245\351\227\256\351\242\230.md" "b/docs/zh/docs/Releasenotes/\345\267\262\347\237\245\351\227\256\351\242\230.md" new file mode 100644 index 0000000000000000000000000000000000000000..c7d6b611d4d67866b60392dd47c9794b661f7f0d --- /dev/null +++ "b/docs/zh/docs/Releasenotes/\345\267\262\347\237\245\351\227\256\351\242\230.md" @@ -0,0 +1,6 @@ +# 已知问题 + +| ISSUE |问题描述 | +|:--- |:---- | +| [I4JWN5](https://gitee.com/src-openEuler/network-manager-applet/issues/I4JWN5) | 【20.03 SP3】【arm/x86 物理机】选择中文安装未完全生效,有一部分英文一部分中文的情况 | +| [I4LFHI](https://gitee.com/src-openEuler/dde/issues/I4LFHI) | 【openEuler 20.03 SP3 Test round 2 】【x86/arm】【日历】节日信息显示异常 | \ No newline at end of file diff --git "a/docs/zh/docs/Releasenotes/\346\216\245\345\217\243\345\217\230\346\233\264.md" "b/docs/zh/docs/Releasenotes/\346\216\245\345\217\243\345\217\230\346\233\264.md" new file mode 100644 index 0000000000000000000000000000000000000000..5ee2fabd880fe9ce78d6cdbc4e2ab78ea8090699 --- /dev/null +++ "b/docs/zh/docs/Releasenotes/\346\216\245\345\217\243\345\217\230\346\233\264.md" @@ -0,0 +1,2265 @@ +# 接口变更 + +以下是 C/C++ 接口变更说明。 + +## alsa-lib + +详见 [alsa-lib](./LTS_to_SP2_changed_abi_detail/alsa-lib_all_result.md\) + +| function | type | +|:---- |:-- | +| snd_tplg_add_object | remove | +| snd_tplg_build | remove | +| snd_tplg_build_file | remove | +| snd_tplg_free | remove | +| snd_tplg_new | remove | +| snd_tplg_set_manifest_data | remove | +| snd_tplg_set_version | remove | +| snd_tplg_verbose | remove | +| snd_config_add_after | add | +| snd_config_add_before | add | +| snd_config_is_array | add | +| snd_dlpath | add | +| snd_mixer_selem_id_parse | add | +| snd_pcm_extplug_set_param_link | add | +| snd_pcm_ioplug_avail | add | +| snd_strlcpy | add | +| snd_use_case_parse_ctl_elem_id | add | +| snd_use_case_parse_selem_id | add | +| __old_snd_pcm_hw_params_set_access_first | change | +| __snd_ctl_elem_info_get_dimension | change | +| _snd_ctl_hw_open | change | +| _snd_rawmidi_hw_open | change | +| snd_midi_event_decode | change | +| snd_pcm_direct_client_chk_xrun | change | +| snd_pcm_dmix_open | change | +| snd_use_case_get | change | + +## atk + +详见 [atk](./LTS_to_SP2_changed_abi_detail/atk_all_result.md\) + +| function | type | +|:---- |:-- | +| atk_object_get_accessible_id | add | +| atk_object_set_accessible_id | add | +| atk_plug_set_child | add | +| atk_text_scroll_substring_to | add | +| atk_text_scroll_substring_to_point | add | +| atk_add_focus_tracker | change | +| atk_text_attribute_for_name | change | + +## brltty + +详见 [brltty](./LTS_to_SP2_changed_abi_detail/brltty_all_result.md\) + +| function | type | +|:---- |:-- | +| lxBrailleOfflineListener | remove | +| lxBrailleDeviceOfflineListener | add | + +## c-ares + +详见 [c-ares](./LTS_to_SP2_changed_abi_detail/c-ares_all_result.md\) + +| function | type | +|:---- |:-- | +| ares_freeaddrinfo | add | +| ares_getaddrinfo | add | + +## e2fsprogs + +详见 [e2fsprogs](./LTS_to_SP2_changed_abi_detail/e2fsprogs_all_result.md\) + +| function | type | +|:---- |:-- | +| e2p_feature_to_string | add | +| list_super | change | +| ext2fs_dirent_swab_in | add | +| ext2fs_dirent_swab_in2 | add | +| ext2fs_dirent_swab_out | add | +| ext2fs_dirent_swab_out2 | add | +| ext2fs_get_stat_i_blocks | add | +| ext2fs_resize_array | add | +| ext2fs_swap_ext_attr | add | +| ext2fs_swap_ext_attr_entry | add | +| ext2fs_swap_ext_attr_header | add | +| ext2fs_swap_group_desc | add | +| ext2fs_swap_group_desc2 | add | +| ext2fs_swap_inode | add | +| ext2fs_swap_inode_full | add | +| ext2fs_swap_mmp | add | +| ext2fs_swap_super | add | +| ext2fs_add_journal_device | change | +| ext2fs_file_get_size | change | +| ext2fs_file_lseek | change | +| ext2fs_file_set_size | change | +| ext2fs_file_set_size2 | change | +| ext2fs_inode_size_set | change | +| ext2fs_mmp_csum_set | change | + +## exiv2 + +详见 [exiv2](./LTS_to_SP2_changed_abi_detail/exiv2_all_result.md\) + +| function | type | +|:---- |:-- | +| None | None | + +## fontconfig + +详见 [fontconfig](./LTS_to_SP2_changed_abi_detail/fontconfig_all_result.md\) + +| function | type | +|:---- |:-- | +| IA__FcConfigGetFilename | add | +| IA__FcStrBuildFilename | add | +| FcConfigAddRule | change | +| IA__FcCacheCreateTagFile | change | +| IA__FcConfigGetCacheDirs | change | + +## glib2 + +详见 [glib2](./LTS_to_SP2_changed_abi_detail/glib2_all_result.md\) + +| function | type | +|:---- |:-- | +| g_file_monitor_source_handle_event | change | + +### gnutls + +详见 [gnutls](./LTS_to_SP2_changed_abi_detail/gnutls_all_result.md\) + +| function | type | +|:---- |:-- | +| gnutls::certificate_credentials::set_retrieve_function | change | +| _gnutls_buffer_clear | add | +| _gnutls_buffer_pop_datum | add | +| _gnutls_buffer_unescape | add | +| _gnutls_iov_iter_init | add | +| _gnutls_iov_iter_next | add | +| _gnutls_iov_iter_sync | add | +| gnutls_aead_cipher_decryptv2 | add | +| gnutls_aead_cipher_encryptv2 | add | +| gnutls_certificate_verification_profile_get_id | add | +| gnutls_certificate_verification_profile_get_name | add | +| gnutls_ext_get_name2 | add | +| gnutls_hkdf_expand | add | +| gnutls_hkdf_extract | add | +| gnutls_hmac_get_key_size | add | +| gnutls_pbkdf2 | add | +| gnutls_pkcs7_print_signature_info | add | +| gnutls_prf_hash_get | add | +| gnutls_psk_server_get_username2 | add | +| gnutls_psk_set_client_credentials2 | add | +| gnutls_psk_set_client_credentials_function2 | add | +| gnutls_psk_set_server_credentials_function2 | add | +| gnutls_session_get_keylog_function | add | +| gnutls_session_set_keylog_function | add | +| _gnutls13_psk_ext_iter_next_binder | change | +| _gnutls_cipher_get_iv | change | +| _gnutls_ecc_curve_is_supported | change | +| _gnutls_hello_set_default_version | change | +| gnutls_ocsp_req_export | change | +| gnutls_ocsp_req_get_extension | change | +| gnutls_ocsp_req_get_nonce | change | +| gnutls_ocsp_req_get_version | change | +| gnutls_ocsp_req_print | change | +| gnutls_ocsp_resp_check_crt | change | +| gnutls_ocsp_resp_export | change | +| gnutls_ocsp_resp_export2 | change | +| gnutls_ocsp_resp_get_certs | change | +| gnutls_ocsp_resp_get_extension | change | +| gnutls_ocsp_resp_get_nonce | change | +| gnutls_ocsp_resp_get_produced | change | +| gnutls_ocsp_resp_get_responder2 | change | +| gnutls_ocsp_resp_get_responder_raw_id | change | +| gnutls_ocsp_resp_get_response | change | +| gnutls_ocsp_resp_get_signature_algorithm | change | +| gnutls_ocsp_resp_print | change | +| gnutls_ocsp_resp_verify | change | +| gnutls_ocsp_resp_verify_direct | change | +| gnutls_ocsp_status_request_is_checked | change | +| gnutls_privkey_set_spki | change | +| gnutls_psk_allocate_client_credentials | change | +| gnutls_psk_allocate_server_credentials | change | +| gnutls_pubkey_get_spki | change | +| gnutls_x509_crq_get_spki | change | +| gnutls_x509_crq_get_tlsfeatures | change | +| gnutls_x509_crt_get_spki | change | +| gnutls_x509_privkey_get_spki | change | +| gnutls_x509_spki_deinit | change | +| gnutls_x509_spki_init | change | +| dane_query_data | change | +| dane_verify_session_crt | change | + +## grpc + +详见 [grpc](./LTS_to_SP2_changed_abi_detail/grpc_all_result.md\) + +| function | type | +|:---- |:-- | +| None | None | + +## haveged + +详见 [haveged](./LTS_to_SP2_changed_abi_detail/haveged_all_result.md\) + +| function | type | +|:---- |:-- | +| havege_reparent | add | + +## libcap-ng + +详见 [libcap-ng](./LTS_to_SP2_changed_abi_detail/libcap-ng_all_result.md\) + +| function | type | +|:---- |:-- | +| capng_have_permitted_capabilities | add | + +## libcomps + +详见 [libcomps](./LTS_to_SP2_changed_abi_detail/libcomps_all_result.md\) + +| function | type | +|:---- |:-- | +| None | None | + +## libdnf + +详见 [libdnf](./LTS_to_SP2_changed_abi_detail/libdnf_all_result.md\) + +| function | type | +|:---- |:-- | +| libdnf::DependencyContainer::DependencyContainer | remove | +| libdnf::File::OpenException::OpenException | remove | +| libdnf::ModuleDefaultsContainer::ModuleDefaultsContainer | remove | +| libdnf::ModuleDefaultsContainer::fromString | remove | +| libdnf::ModuleDefaultsContainer::getDefaultProfiles | remove | +| libdnf::ModuleDefaultsContainer::getDefaultStreamFor | remove | +| libdnf::ModuleDefaultsContainer::getDefaultStreams | remove | +| libdnf::ModuleDefaultsContainer::reportFailures | remove | +| libdnf::ModuleDefaultsContainer::resolve | remove | +| libdnf::ModuleDefaultsContainer::saveDefaults | remove | +| libdnf::ModuleDefaultsContainer::~ModuleDefaultsContainer | remove | +| libdnf::ModuleDependencies::getRequirements | remove | +| libdnf::ModuleDependencies::wrapModuleDependencies | remove | +| libdnf::ModuleMetadata::ModuleMetadata | remove | +| libdnf::ModuleMetadata::getArchitecture | remove | +| libdnf::ModuleMetadata::getArtifacts | remove | +| libdnf::ModuleMetadata::getContext | remove | +| libdnf::ModuleMetadata::getDependencies | remove | +| libdnf::ModuleMetadata::getDescription | remove | +| libdnf::ModuleMetadata::getName | remove | +| libdnf::ModuleMetadata::getProfiles | remove | +| libdnf::ModuleMetadata::getStream | remove | +| libdnf::ModuleMetadata::getSummary | remove | +| libdnf::ModuleMetadata::getVersion | remove | +| libdnf::ModuleMetadata::getYaml | remove | +| libdnf::ModuleMetadata::metadataFromString | remove | +| libdnf::ModuleMetadata::wrapModulemdModule | remove | +| libdnf::ModuleMetadata::~ModuleMetadata | remove | +| libdnf::ModulePackage::ModulePackage | remove | +| libdnf::Repo::Impl::lrHandleInitRemote | remove | +| libdnf::Swdb::beginTransaction | remove | + +## libdrm + +详见 [libdrm](./LTS_to_SP2_changed_abi_detail/libdrm_all_result.md\) + +| function | type | +|:---- |:-- | +| drmIsMaster | add | +| drmModeFreeFB2 | add | +| drmModeGetFB2 | add | +| drmSyncobjQuery | add | +| drmSyncobjQuery2 | add | +| drmSyncobjTimelineSignal | add | +| drmSyncobjTimelineWait | add | +| drmSyncobjTransfer | add | +| amdgpu_bo_list_create_raw | add | +| amdgpu_bo_list_destroy_raw | add | +| amdgpu_cs_ctx_override_priority | add | +| amdgpu_cs_query_reset_state2 | add | +| amdgpu_cs_submit_raw2 | add | +| amdgpu_cs_syncobj_export_sync_file2 | add | +| amdgpu_cs_syncobj_import_sync_file2 | add | +| amdgpu_cs_syncobj_query | add | +| amdgpu_cs_syncobj_query2 | add | +| amdgpu_cs_syncobj_timeline_signal | add | +| amdgpu_cs_syncobj_timeline_wait | add | +| amdgpu_cs_syncobj_transfer | add | +| amdgpu_bo_alloc | change | +| amdgpu_bo_import | change | +| amdgpu_bo_list_create | change | +| amdgpu_bo_va_op_raw | change | +| amdgpu_create_bo_from_user_mem | change | +| amdgpu_cs_chunk_fence_to_dep | change | +| amdgpu_cs_create_syncobj | change | +| amdgpu_cs_create_syncobj2 | change | +| amdgpu_cs_ctx_create | change | +| amdgpu_cs_ctx_create2 | change | +| amdgpu_cs_destroy_syncobj | change | +| amdgpu_cs_export_syncobj | change | +| amdgpu_cs_fence_to_handle | change | +| amdgpu_cs_import_syncobj | change | +| amdgpu_cs_submit_raw | change | +| amdgpu_cs_syncobj_import_sync_file | change | +| amdgpu_cs_syncobj_reset | change | +| amdgpu_cs_syncobj_wait | change | +| amdgpu_device_deinitialize | change | +| amdgpu_device_initialize | change | +| amdgpu_find_bo_by_cpu_mapping | change | +| amdgpu_get_marketing_name | change | +| amdgpu_query_buffer_size_alignment | change | +| amdgpu_query_crtc_from_id | change | +| amdgpu_query_firmware_version | change | +| amdgpu_query_gds_info | change | +| amdgpu_query_gpu_info | change | +| amdgpu_query_heap_info | change | +| amdgpu_query_hw_ip_count | change | +| amdgpu_query_hw_ip_info | change | +| amdgpu_query_info | change | +| amdgpu_query_sw_info | change | +| amdgpu_read_mm_registers | change | +| amdgpu_va_range_alloc | change | +| amdgpu_va_range_query | change | +| fd_ringbuffer_emit_reloc_ring | remove | +| fd_ringmarker_del | remove | +| fd_ringmarker_dwords | remove | +| fd_ringmarker_flush | remove | +| fd_ringmarker_mark | remove | +| fd_ringmarker_new | remove | +| fd_ringbuffer_new_flags | add | +| fd_ringbuffer_ref | add | +| fd_bo_cpu_fini | change | + +## libell + +详见 [libell](./LTS_to_SP2_changed_abi_detail/libell_all_result.md\) + +| function | type | +|:---- |:-- | +| l_fswatch_destroy | remove | +| l_fswatch_new | remove | +| l_genl_family_can_dump | remove | +| l_genl_family_can_send | remove | +| l_genl_family_get_version | remove | +| l_genl_family_has_group | remove | +| l_genl_family_ref | remove | +| l_genl_family_set_watches | remove | +| l_genl_family_unref | remove | +| l_genl_new_default | remove | +| l_genl_set_close_on_unref | remove | +| l_genl_set_unicast_handler | remove | +| l_pem_load_certificate | remove | +| l_aead_cipher_is_supported | add | +| l_cert_free | add | +| l_cert_get_der_data | add | +| l_cert_get_dn | add | +| l_cert_get_pubkey | add | +| l_cert_get_pubkey_type | add | +| l_cert_new_from_der | add | +| l_certchain_free | add | +| l_certchain_get_leaf | add | +| l_certchain_verify | add | +| l_certchain_walk_from_ca | add | +| l_certchain_walk_from_leaf | add | +| l_checksum_digest_length | add | +| l_cipher_is_supported | add | +| l_dbus_object_get_data | add | +| l_dhcp_client_set_debug | add | +| l_dhcp_lease_get_dns | add | +| l_dhcp_lease_get_domain_name | add | +| l_dir_watch_destroy | add | +| l_dir_watch_new | add | +| l_ecc_curve_get | add | +| l_ecc_curve_get_ike_group | add | +| l_ecc_curve_get_name | add | +| l_ecc_curve_get_order | add | +| l_ecc_curve_get_prime | add | +| l_ecc_curve_get_scalar_bytes | add | +| l_ecc_curve_get_supported_ike_groups | add | +| l_ecc_curve_get_supported_tls_groups | add | +| l_ecc_curve_get_tls_group | add | +| l_ecc_point_add | add | +| l_ecc_point_free | add | +| l_ecc_point_from_data | add | +| l_ecc_point_get_data | add | +| l_ecc_point_get_x | add | +| l_ecc_point_inverse | add | +| l_ecc_point_multiply | add | +| l_ecc_point_new | add | +| l_ecc_points_are_equal | add | +| l_ecc_scalar_add | add | +| l_ecc_scalar_free | add | +| l_ecc_scalar_get_data | add | +| l_ecc_scalar_legendre | add | +| l_ecc_scalar_multiply | add | +| l_ecc_scalar_new | add | +| l_ecc_scalar_new_random | add | +| l_ecc_scalar_sum_x | add | +| l_ecc_scalars_are_equal | add | +| l_ecdh_generate_key_pair | add | +| l_ecdh_generate_shared_secret | add | +| l_genl_add_family_watch | add | +| l_genl_add_unicast_watch | add | +| l_genl_discover_families | add | +| l_genl_family_free | add | +| l_genl_family_get_info | add | +| l_genl_family_info_can_dump | add | +| l_genl_family_info_can_send | add | +| l_genl_family_info_get_groups | add | +| l_genl_family_info_get_id | add | +| l_genl_family_info_get_name | add | +| l_genl_family_info_get_version | add | +| l_genl_family_info_has_group | add | +| l_genl_msg_get_extended_error | add | +| l_genl_msg_new_from_data | add | +| l_genl_msg_to_data | add | +| l_genl_remove_family_watch | add | +| l_genl_remove_unicast_watch | add | +| l_genl_request_family | add | +| l_getrandom_uint32 | add | +| l_gpio_chip_find_line_offset | add | +| l_gpio_chip_free | add | +| l_gpio_chip_get_label | add | +| l_gpio_chip_get_line_consumer | add | +| l_gpio_chip_get_line_label | add | +| l_gpio_chip_get_name | add | +| l_gpio_chip_get_num_lines | add | +| l_gpio_chip_new | add | +| l_gpio_chips_with_line_label | add | +| l_gpio_reader_free | add | +| l_gpio_reader_get | add | +| l_gpio_reader_new | add | +| l_gpio_writer_free | add | +| l_gpio_writer_new | add | +| l_gpio_writer_set | add | +| l_key_generate_dh_private | add | +| l_key_get_info | add | +| l_key_is_supported | add | +| l_key_validate_dh_payload | add | +| l_keyring_link | add | +| l_keyring_link_nested | add | +| l_keyring_unlink | add | +| l_keyring_unlink_nested | add | +| l_net_hostname_is_localhost | add | +| l_net_hostname_is_root | add | +| l_path_find | add | +| l_path_get_mtime | add | +| l_path_next | add | +| l_path_touch | add | +| l_pem_load_certificate_chain | add | +| l_pem_load_certificate_chain_from_data | add | +| l_pem_load_certificate_list | add | +| l_pem_load_certificate_list_from_data | add | +| l_pem_load_private_key_from_data | add | +| l_ringbuf_append | add | +| l_rtnl_ifaddr4_add | add | +| l_rtnl_ifaddr4_delete | add | +| l_rtnl_ifaddr4_dump | add | +| l_rtnl_ifaddr4_extract | add | +| l_rtnl_ifaddr6_add | add | +| l_rtnl_ifaddr6_delete | add | +| l_rtnl_ifaddr6_dump | add | +| l_rtnl_ifaddr6_extract | add | +| l_rtnl_route4_add_connected | add | +| l_rtnl_route4_add_gateway | add | +| l_rtnl_route4_dump | add | +| l_rtnl_route4_extract | add | +| l_rtnl_route6_add_gateway | add | +| l_rtnl_route6_delete_gateway | add | +| l_rtnl_route6_dump | add | +| l_rtnl_route6_extract | add | +| l_rtnl_set_linkmode_and_operstate | add | +| l_rtnl_set_mac | add | +| l_rtnl_set_powered | add | +| l_settings_get_embedded_groups | add | +| l_settings_get_embedded_value | add | +| l_settings_has_embedded_group | add | +| l_strv_append | add | +| l_strv_append_printf | add | +| l_strv_append_vprintf | add | +| l_strv_copy | add | +| l_strv_free | add | +| l_strv_new | add | +| l_time_now | add | +| l_timeout_set_callback | add | +| l_tls_prf_get_bytes | add | +| l_tls_set_debug | add | +| l_tls_set_domain_mask | add | +| l_tls_set_version_range | add | +| l_tls_start | add | +| l_uintset_find_unused | add | +| l_uintset_foreach | add | +| l_uintset_intersect | add | +| l_uintset_isempty | add | +| l_utf8_from_ucs2be | add | +| l_utf8_from_wchar | add | +| l_utf8_to_ucs2be | add | +| l_util_hexstring_upper | add | +| l_uuid_from_string | add | +| l_uuid_v4 | add | + +## libgusb + +详见 [libgusb](./LTS_to_SP2_changed_abi_detail/libgusb_all_result.md\) + +| function | type | +|:---- |:-- | +| g_usb_interface_get_type | remove | +| g_usb_source_set_callback | remove | +| g_usb_device_get_spec | add | +| g_usb_endpoint_get_address | add | +| g_usb_endpoint_get_direction | add | +| g_usb_endpoint_get_extra | add | +| g_usb_endpoint_get_kind | add | +| g_usb_endpoint_get_maximum_packet_size | add | +| g_usb_endpoint_get_number | add | +| g_usb_endpoint_get_polling_interval | add | +| g_usb_endpoint_get_refresh | add | +| g_usb_endpoint_get_synch_address | add | +| g_usb_endpoint_get_type | add | +| g_usb_interface_get_endpoints | add | +| g_usb_version_string | add | +| g_usb_device_get_interface | change | + +## libical + +详见 [libical](./LTS_to_SP2_changed_abi_detail/libical_all_result.md\) + +| function | type | +|:---- |:-- | +| icalproperty_get_datetime_with_component | add | +| icaltimezone_truncate_vtimezone | add | +| icalattach_new_from_data | change | +| i_cal_array_append | remove | +| i_cal_array_element_at | remove | +| i_cal_array_new | remove | +| i_cal_component_as_ical_string_r | remove | +| i_cal_component_new_clone | remove | +| i_cal_component_string_to_kind | remove | +| i_cal_datetimeperiod_type_get_period | remove | +| i_cal_datetimeperiod_type_get_time | remove | +| i_cal_datetimeperiod_type_get_type | remove | +| i_cal_datetimeperiod_type_set_period | remove | +| i_cal_datetimeperiod_type_set_time | remove | +| i_cal_duration_type_as_ical_string_r | remove | +| i_cal_duration_type_as_int | remove | +| i_cal_duration_type_bad_duration | remove | +| i_cal_duration_type_from_int | remove | +| i_cal_duration_type_from_string | remove | +| i_cal_duration_type_get_days | remove | +| i_cal_duration_type_get_hours | remove | +| i_cal_duration_type_get_minutes | remove | +| i_cal_duration_type_get_seconds | remove | +| i_cal_duration_type_get_type | remove | +| i_cal_duration_type_get_weeks | remove | +| i_cal_duration_type_is_bad_duration | remove | +| i_cal_duration_type_is_neg | remove | +| i_cal_duration_type_is_null_duration | remove | +| i_cal_duration_type_null_duration | remove | +| i_cal_duration_type_set_days | remove | +| i_cal_duration_type_set_hours | remove | +| i_cal_duration_type_set_is_neg | remove | +| i_cal_duration_type_set_minutes | remove | +| i_cal_duration_type_set_seconds | remove | +| i_cal_duration_type_set_weeks | remove | +| i_cal_enum_num_to_reqstat | remove | +| i_cal_enum_reqstat_code_r | remove | +| i_cal_enum_reqstat_desc | remove | +| i_cal_enum_reqstat_major | remove | +| i_cal_enum_reqstat_minor | remove | +| i_cal_geo_type_get_lat | remove | +| i_cal_geo_type_get_lon | remove | +| i_cal_geo_type_get_type | remove | +| i_cal_geo_type_new_default | remove | +| i_cal_geo_type_set_lat | remove | +| i_cal_geo_type_set_lon | remove | +| i_cal_langbind_access_array | remove | +| i_cal_langbind_free_array | remove | +| i_cal_langbind_get_first_component | remove | +| i_cal_langbind_get_first_parameter | remove | +| i_cal_langbind_get_first_property | remove | +| i_cal_langbind_get_next_component | remove | +| i_cal_langbind_get_next_parameter | remove | +| i_cal_langbind_get_next_property | remove | +| i_cal_langbind_new_array | remove | +| i_cal_langbind_property_eval_string_r | remove | +| i_cal_langbind_quote_as_ical_r | remove | +| i_cal_langbind_string_to_open_flag | remove | +| i_cal_parameter_as_ical_string_r | remove | +| i_cal_parameter_new_clone | remove | +| i_cal_parameter_string_to_kind | remove | +| i_cal_parser_set_gen_data | remove | +| i_cal_parser_string_line_generator | remove | +| i_cal_period_type_as_ical_string_r | remove | +| i_cal_period_type_from_string | remove | +| i_cal_period_type_get_duration | remove | +| i_cal_period_type_get_end | remove | +| i_cal_period_type_get_start | remove | +| i_cal_period_type_get_type | remove | +| i_cal_period_type_is_null_period | remove | +| i_cal_period_type_is_valid_period | remove | +| i_cal_period_type_null_period | remove | +| i_cal_period_type_set_duration | remove | +| i_cal_period_type_set_end | remove | +| i_cal_period_type_set_start | remove | +| i_cal_property_as_ical_string_r | remove | +| i_cal_property_enum_belongs_to_property | remove | +| i_cal_property_enum_to_string_r | remove | +| i_cal_property_get_parameter_as_string_r | remove | +| i_cal_property_get_property_name_r | remove | +| i_cal_property_get_value_as_string_r | remove | +| i_cal_property_new_clone | remove | +| i_cal_property_string_to_kind | remove | +| i_cal_property_string_to_method | remove | +| i_cal_property_string_to_status | remove | +| i_cal_property_value_kind_to_kind | remove | +| i_cal_recur_freq_to_string | remove | +| i_cal_recur_skip_to_string | remove | +| i_cal_recur_string_to_freq | remove | +| i_cal_recur_string_to_skip | remove | +| i_cal_recur_string_to_weekday | remove | +| i_cal_recur_weekday_to_string | remove | +| i_cal_recurrence_type_as_string_r | remove | +| i_cal_recurrence_type_clear | remove | +| i_cal_recurrence_type_day_day_of_week | remove | +| i_cal_recurrence_type_day_position | remove | +| i_cal_recurrence_type_from_string | remove | +| i_cal_recurrence_type_get_by_day | remove | +| i_cal_recurrence_type_get_by_hour | remove | +| i_cal_recurrence_type_get_by_minute | remove | +| i_cal_recurrence_type_get_by_month | remove | +| i_cal_recurrence_type_get_by_month_day | remove | +| i_cal_recurrence_type_get_by_second | remove | +| i_cal_recurrence_type_get_by_set_pos | remove | +| i_cal_recurrence_type_get_by_week_no | remove | +| i_cal_recurrence_type_get_by_year_day | remove | +| i_cal_recurrence_type_get_count | remove | +| i_cal_recurrence_type_get_freq | remove | +| i_cal_recurrence_type_get_interval | remove | +| i_cal_recurrence_type_get_type | remove | +| i_cal_recurrence_type_get_until | remove | +| i_cal_recurrence_type_get_week_start | remove | +| i_cal_recurrence_type_month_is_leap | remove | +| i_cal_recurrence_type_month_month | remove | +| i_cal_recurrence_type_rscale_is_supported | remove | +| i_cal_recurrence_type_rscale_supported_calendars | remove | +| i_cal_recurrence_type_set_by_day | remove | +| i_cal_recurrence_type_set_by_hour | remove | +| i_cal_recurrence_type_set_by_minute | remove | +| i_cal_recurrence_type_set_by_month | remove | +| i_cal_recurrence_type_set_by_month_day | remove | +| i_cal_recurrence_type_set_by_second | remove | +| i_cal_recurrence_type_set_by_set_pos | remove | +| i_cal_recurrence_type_set_by_week_no | remove | +| i_cal_recurrence_type_set_by_year_day | remove | +| i_cal_recurrence_type_set_count | remove | +| i_cal_recurrence_type_set_freq | remove | +| i_cal_recurrence_type_set_interval | remove | +| i_cal_recurrence_type_set_until | remove | +| i_cal_recurrence_type_set_week_start | remove | +| i_cal_reqstat_type_as_string_r | remove | +| i_cal_reqstat_type_from_string | remove | +| i_cal_reqstat_type_get_code | remove | +| i_cal_reqstat_type_get_debug | remove | +| i_cal_reqstat_type_get_desc | remove | +| i_cal_reqstat_type_get_type | remove | +| i_cal_reqstat_type_set_code | remove | +| i_cal_time_as_ical_string_r | remove | +| i_cal_time_current_time_with_zone | remove | +| i_cal_time_from_day_of_year | remove | +| i_cal_time_from_string | remove | +| i_cal_time_from_timet_with_zone | remove | +| i_cal_time_null_date | remove | +| i_cal_time_null_time | remove | +| i_cal_time_span_is_busy | remove | +| i_cal_time_tiemzone_expand_vtimezone | remove | +| i_cal_time_today | remove | +| i_cal_timetype_get_day | remove | +| i_cal_timetype_get_hour | remove | +| i_cal_timetype_get_minute | remove | +| i_cal_timetype_get_month | remove | +| i_cal_timetype_get_second | remove | +| i_cal_timetype_get_type | remove | +| i_cal_timetype_get_year | remove | +| i_cal_timetype_get_zone | remove | +| i_cal_timetype_is_date | remove | +| i_cal_timetype_is_daylight | remove | +| i_cal_timetype_is_utc | remove | +| i_cal_timetype_new | remove | +| i_cal_timetype_set_day | remove | +| i_cal_timetype_set_hour | remove | +| i_cal_timetype_set_is_date | remove | +| i_cal_timetype_set_is_daylight | remove | +| i_cal_timetype_set_minute | remove | +| i_cal_timetype_set_month | remove | +| i_cal_timetype_set_second | remove | +| i_cal_timetype_set_year | remove | +| i_cal_timezone_convert_time | remove | +| i_cal_timezone_phase_get_comment | remove | +| i_cal_timezone_phase_get_dtstart | remove | +| i_cal_timezone_phase_get_offsetto | remove | +| i_cal_timezone_phase_get_rdate | remove | +| i_cal_timezone_phase_get_rrule | remove | +| i_cal_timezone_phase_get_type | remove | +| i_cal_timezone_phase_get_tzname | remove | +| i_cal_timezone_phase_get_tzoffsetfrom | remove | +| i_cal_timezone_phase_is_stdandard | remove | +| i_cal_timezone_phase_set_dtstart | remove | +| i_cal_timezone_phase_set_is_stdandard | remove | +| i_cal_timezone_phase_set_offsetto | remove | +| i_cal_timezone_phase_set_rdate | remove | +| i_cal_timezone_phase_set_tzoffsetfrom | remove | +| i_cal_timezonetype_get_last_mod | remove | +| i_cal_timezonetype_get_type | remove | +| i_cal_timezonetype_get_tzid | remove | +| i_cal_timezonetype_get_tzurl | remove | +| i_cal_timezonetype_set_last_mod | remove | +| i_cal_trigger_type_from_int | remove | +| i_cal_trigger_type_from_string | remove | +| i_cal_trigger_type_get_duration | remove | +| i_cal_trigger_type_get_time | remove | +| i_cal_trigger_type_get_type | remove | +| i_cal_trigger_type_is_bad_trigger | remove | +| i_cal_trigger_type_is_null_trigger | remove | +| i_cal_trigger_type_set_duration | remove | +| i_cal_trigger_type_set_time | remove | +| i_cal_value_as_ical_string_r | remove | +| i_cal_value_new_clone | remove | +| i_cal_value_string_to_kind | remove | +| i_cal_attach_new_from_bytes | add | +| i_cal_component_as_ical_string | add | +| i_cal_component_clone | add | +| i_cal_component_foreach_recurrence | add | +| i_cal_component_get_parent | add | +| i_cal_component_kind_from_string | add | +| i_cal_component_set_parent | add | +| i_cal_component_take_component | add | +| i_cal_component_take_property | add | +| i_cal_datetimeperiod_get_period | add | +| i_cal_datetimeperiod_get_time | add | +| i_cal_datetimeperiod_get_type | add | +| i_cal_datetimeperiod_new | add | +| i_cal_datetimeperiod_set_period | add | +| i_cal_datetimeperiod_set_time | add | +| i_cal_duration_as_ical_string | add | +| i_cal_duration_as_int | add | +| i_cal_duration_get_days | add | +| i_cal_duration_get_hours | add | +| i_cal_duration_get_minutes | add | +| i_cal_duration_get_seconds | add | +| i_cal_duration_get_type | add | +| i_cal_duration_get_weeks | add | +| i_cal_duration_is_bad_duration | add | +| i_cal_duration_is_neg | add | +| i_cal_duration_is_null_duration | add | +| i_cal_duration_new_bad_duration | add | +| i_cal_duration_new_from_int | add | +| i_cal_duration_new_from_string | add | +| i_cal_duration_new_null_duration | add | +| i_cal_duration_set_days | add | +| i_cal_duration_set_hours | add | +| i_cal_duration_set_is_neg | add | +| i_cal_duration_set_minutes | add | +| i_cal_duration_set_seconds | add | +| i_cal_duration_set_weeks | add | +| i_cal_geo_clone | add | +| i_cal_geo_get_lat | add | +| i_cal_geo_get_lon | add | +| i_cal_geo_get_type | add | +| i_cal_geo_new | add | +| i_cal_geo_set_lat | add | +| i_cal_geo_set_lon | add | +| i_cal_object_free_global_objects | add | +| i_cal_parameter_as_ical_string | add | +| i_cal_parameter_clone | add | +| i_cal_parameter_kind_from_string | add | +| i_cal_period_as_ical_string | add | +| i_cal_period_get_duration | add | +| i_cal_period_get_end | add | +| i_cal_period_get_start | add | +| i_cal_period_get_type | add | +| i_cal_period_is_null_period | add | +| i_cal_period_is_valid_period | add | +| i_cal_period_new_from_string | add | +| i_cal_period_new_null_period | add | +| i_cal_period_set_duration | add | +| i_cal_period_set_end | add | +| i_cal_period_set_start | add | +| i_cal_property_as_ical_string | add | +| i_cal_property_clone | add | +| i_cal_property_enum_to_string | add | +| i_cal_property_get_color | add | +| i_cal_property_get_datetime_with_component | add | +| i_cal_property_get_parameter_as_string | add | +| i_cal_property_get_property_name | add | +| i_cal_property_get_value_as_string | add | +| i_cal_property_kind_from_string | add | +| i_cal_property_kind_has_property | add | +| i_cal_property_method_from_string | add | +| i_cal_property_new_color | add | +| i_cal_property_set_color | add | +| i_cal_property_status_from_string | add | +| i_cal_property_take_parameter | add | +| i_cal_property_take_value | add | +| i_cal_recurrence_clear | add | +| i_cal_recurrence_day_day_of_week | add | +| i_cal_recurrence_day_position | add | +| i_cal_recurrence_frequency_from_string | add | +| i_cal_recurrence_frequency_to_string | add | +| i_cal_recurrence_get_by_day | add | +| i_cal_recurrence_get_by_day_array | add | +| i_cal_recurrence_get_by_hour | add | +| i_cal_recurrence_get_by_hour_array | add | +| i_cal_recurrence_get_by_minute | add | +| i_cal_recurrence_get_by_minute_array | add | +| i_cal_recurrence_get_by_month | add | +| i_cal_recurrence_get_by_month_array | add | +| i_cal_recurrence_get_by_month_day | add | +| i_cal_recurrence_get_by_month_day_array | add | +| i_cal_recurrence_get_by_second | add | +| i_cal_recurrence_get_by_second_array | add | +| i_cal_recurrence_get_by_set_pos | add | +| i_cal_recurrence_get_by_set_pos_array | add | +| i_cal_recurrence_get_by_week_no | add | +| i_cal_recurrence_get_by_week_no_array | add | +| i_cal_recurrence_get_by_year_day | add | +| i_cal_recurrence_get_by_year_day_array | add | +| i_cal_recurrence_get_count | add | +| i_cal_recurrence_get_freq | add | +| i_cal_recurrence_get_interval | add | +| i_cal_recurrence_get_type | add | +| i_cal_recurrence_get_until | add | +| i_cal_recurrence_get_week_start | add | +| i_cal_recurrence_month_is_leap | add | +| i_cal_recurrence_month_month | add | +| i_cal_recurrence_new | add | +| i_cal_recurrence_new_from_string | add | +| i_cal_recurrence_rscale_is_supported | add | +| i_cal_recurrence_rscale_supported_calendars | add | +| i_cal_recurrence_set_by_day | add | +| i_cal_recurrence_set_by_day_array | add | +| i_cal_recurrence_set_by_hour | add | +| i_cal_recurrence_set_by_hour_array | add | +| i_cal_recurrence_set_by_minute | add | +| i_cal_recurrence_set_by_minute_array | add | +| i_cal_recurrence_set_by_month | add | +| i_cal_recurrence_set_by_month_array | add | +| i_cal_recurrence_set_by_month_day | add | +| i_cal_recurrence_set_by_month_day_array | add | +| i_cal_recurrence_set_by_second | add | +| i_cal_recurrence_set_by_second_array | add | +| i_cal_recurrence_set_by_set_pos | add | +| i_cal_recurrence_set_by_set_pos_array | add | +| i_cal_recurrence_set_by_week_no | add | +| i_cal_recurrence_set_by_week_no_array | add | +| i_cal_recurrence_set_by_year_day | add | +| i_cal_recurrence_set_by_year_day_array | add | +| i_cal_recurrence_set_count | add | +| i_cal_recurrence_set_freq | add | +| i_cal_recurrence_set_interval | add | +| i_cal_recurrence_set_until | add | +| i_cal_recurrence_set_week_start | add | +| i_cal_recurrence_skip_from_string | add | +| i_cal_recurrence_skip_to_string | add | +| i_cal_recurrence_to_string | add | +| i_cal_recurrence_weekday_from_string | add | +| i_cal_recurrence_weekday_to_string | add | +| i_cal_reqstat_get_code | add | +| i_cal_reqstat_get_debug | add | +| i_cal_reqstat_get_desc | add | +| i_cal_reqstat_get_type | add | +| i_cal_reqstat_new_from_string | add | +| i_cal_reqstat_set_code | add | +| i_cal_reqstat_to_string | add | +| i_cal_request_status_code | add | +| i_cal_request_status_desc | add | +| i_cal_request_status_from_num | add | +| i_cal_request_status_major | add | +| i_cal_request_status_minor | add | +| i_cal_time_as_ical_string | add | +| i_cal_time_clone | add | +| i_cal_time_convert_timezone | add | +| i_cal_time_convert_to_zone_inplace | add | +| i_cal_time_get_date | add | +| i_cal_time_get_day | add | +| i_cal_time_get_hour | add | +| i_cal_time_get_minute | add | +| i_cal_time_get_month | add | +| i_cal_time_get_second | add | +| i_cal_time_get_time | add | +| i_cal_time_get_type | add | +| i_cal_time_get_year | add | +| i_cal_time_is_daylight | add | +| i_cal_time_new | add | +| i_cal_time_new_current_with_zone | add | +| i_cal_time_new_from_day_of_year | add | +| i_cal_time_new_from_string | add | +| i_cal_time_new_from_timet_with_zone | add | +| i_cal_time_new_null_date | add | +| i_cal_time_new_today | add | +| i_cal_time_normalize_inplace | add | +| i_cal_time_set_date | add | +| i_cal_time_set_day | add | +| i_cal_time_set_hour | add | +| i_cal_time_set_is_date | add | +| i_cal_time_set_is_daylight | add | +| i_cal_time_set_minute | add | +| i_cal_time_set_month | add | +| i_cal_time_set_second | add | +| i_cal_time_set_time | add | +| i_cal_time_set_year | add | +| i_cal_time_span_clone | add | +| i_cal_time_span_get_is_busy | add | +| i_cal_time_span_new_timet | add | +| i_cal_time_timezone_expand_vtimezone | add | +| i_cal_trigger_get_duration | add | +| i_cal_trigger_get_time | add | +| i_cal_trigger_get_type | add | +| i_cal_trigger_is_bad_trigger | add | +| i_cal_trigger_is_null_trigger | add | +| i_cal_trigger_new_from_int | add | +| i_cal_trigger_new_from_string | add | +| i_cal_trigger_set_duration | add | +| i_cal_trigger_set_time | add | +| i_cal_value_as_ical_string | add | +| i_cal_value_clone | add | +| i_cal_value_kind_from_string | add | +| i_cal_value_kind_to_property_kind | add | +| i_cal_attach_get_data | change | +| i_cal_component_get_dtend | change | +| i_cal_component_get_dtstamp | change | +| i_cal_component_get_dtstart | change | +| i_cal_component_get_due | change | +| i_cal_component_get_duration | change | +| i_cal_component_get_recurrenceid | change | +| i_cal_component_set_dtend | change | +| i_cal_component_set_dtstamp | change | +| i_cal_component_set_dtstart | change | +| i_cal_component_set_due | change | +| i_cal_component_set_duration | change | +| i_cal_component_set_recurrenceid | change | +| i_cal_object_construct | change | +| i_cal_parser_get_line | change | +| i_cal_parser_parse | change | +| i_cal_property_get_acknowledged | change | +| i_cal_property_get_completed | change | +| i_cal_property_get_created | change | +| i_cal_property_get_datemax | change | +| i_cal_property_get_datemin | change | +| i_cal_property_get_dtend | change | +| i_cal_property_get_dtstamp | change | +| i_cal_property_get_dtstart | change | +| i_cal_property_get_due | change | +| i_cal_property_get_duration | change | +| i_cal_property_get_estimatedduration | change | +| i_cal_property_get_exdate | change | +| i_cal_property_get_exrule | change | +| i_cal_property_get_freebusy | change | +| i_cal_property_get_geo | change | +| i_cal_property_get_lastmodified | change | +| i_cal_property_get_maxdate | change | +| i_cal_property_get_mindate | change | +| i_cal_property_get_rdate | change | +| i_cal_property_get_recurrenceid | change | +| i_cal_property_get_requeststatus | change | +| i_cal_property_get_rrule | change | +| i_cal_property_get_trigger | change | +| i_cal_property_get_tzuntil | change | +| i_cal_property_new_acknowledged | change | +| i_cal_property_new_completed | change | +| i_cal_property_new_created | change | +| i_cal_property_new_datemax | change | +| i_cal_property_new_datemin | change | +| i_cal_property_new_dtend | change | +| i_cal_property_new_dtstamp | change | +| i_cal_property_new_dtstart | change | +| i_cal_property_new_due | change | +| i_cal_property_new_duration | change | +| i_cal_property_new_estimatedduration | change | +| i_cal_property_new_exdate | change | +| i_cal_property_new_exrule | change | +| i_cal_property_new_freebusy | change | +| i_cal_property_new_geo | change | +| i_cal_property_new_lastmodified | change | +| i_cal_property_new_maxdate | change | +| i_cal_property_new_mindate | change | +| i_cal_property_new_rdate | change | +| i_cal_property_new_recurrenceid | change | +| i_cal_property_new_requeststatus | change | +| i_cal_property_new_rrule | change | +| i_cal_property_new_trigger | change | +| i_cal_property_new_tzuntil | change | +| i_cal_property_set_acknowledged | change | +| i_cal_property_set_completed | change | +| i_cal_property_set_created | change | +| i_cal_property_set_datemax | change | +| i_cal_property_set_datemin | change | +| i_cal_property_set_dtend | change | +| i_cal_property_set_dtstamp | change | +| i_cal_property_set_dtstart | change | +| i_cal_property_set_due | change | +| i_cal_property_set_duration | change | +| i_cal_property_set_estimatedduration | change | +| i_cal_property_set_exdate | change | +| i_cal_property_set_exrule | change | +| i_cal_property_set_freebusy | change | +| i_cal_property_set_geo | change | +| i_cal_property_set_lastmodified | change | +| i_cal_property_set_maxdate | change | +| i_cal_property_set_mindate | change | +| i_cal_property_set_rdate | change | +| i_cal_property_set_recurrenceid | change | +| i_cal_property_set_requeststatus | change | +| i_cal_property_set_rrule | change | +| i_cal_property_set_trigger | change | +| i_cal_property_set_tzuntil | change | +| i_cal_recur_iterator_new | change | +| i_cal_recur_iterator_next | change | +| i_cal_recur_iterator_set_start | change | +| i_cal_time_add | change | +| i_cal_time_adjust | change | +| i_cal_time_as_timet | change | +| i_cal_time_compare | change | +| i_cal_time_compare_date_only | change | +| i_cal_time_compare_date_only_tz | change | +| i_cal_time_convert_to_zone | change | +| i_cal_time_day_of_week | change | +| i_cal_time_day_of_year | change | +| i_cal_time_normalize | change | +| i_cal_time_span_new | change | +| i_cal_time_start_doy_week | change | +| i_cal_time_subtract | change | +| i_cal_time_week_number | change | +| i_cal_timezone_get_utc_offset | change | +| i_cal_timezone_get_utc_offset_of_utc_time | change | +| i_cal_value_get_date | change | +| i_cal_value_get_datetime | change | +| i_cal_value_get_datetimedate | change | +| i_cal_value_get_datetimeperiod | change | +| i_cal_value_get_duration | change | +| i_cal_value_get_geo | change | +| i_cal_value_get_period | change | +| i_cal_value_get_recur | change | +| i_cal_value_get_requeststatus | change | +| i_cal_value_get_trigger | change | +| i_cal_value_new_date | change | +| i_cal_value_new_datetime | change | +| i_cal_value_new_datetimedate | change | +| i_cal_value_new_datetimeperiod | change | +| i_cal_value_new_duration | change | +| i_cal_value_new_geo | change | +| i_cal_value_new_period | change | +| i_cal_value_new_recur | change | +| i_cal_value_new_requeststatus | change | +| i_cal_value_new_trigger | change | +| i_cal_value_set_date | change | +| i_cal_value_set_datetime | change | +| i_cal_value_set_datetimedate | change | +| i_cal_value_set_datetimeperiod | change | +| i_cal_value_set_duration | change | +| i_cal_value_set_geo | change | +| i_cal_value_set_period | change | +| i_cal_value_set_recur | change | +| i_cal_value_set_requeststatus | change | +| i_cal_value_set_trigger | change | + +## libid3tag + +详见 [libid3tag](./LTS_to_SP2_changed_abi_detail/libid3tag_all_result.md\) + +| function | type | +|:---- |:-- | +| id3_compat_fixup | add | +| id3_compat_lookup | add | +| id3_frametype_lookup | change | + +## libiscsi + +详见 [libiscsi](./LTS_to_SP2_changed_abi_detail/libiscsi_all_result.md\) + +| function | type | +|:---- |:-- | +| iscsi_extended_copy_sync | add | +| iscsi_extended_copy_task | add | +| iscsi_receive_copy_results_sync | add | +| iscsi_receive_copy_results_task | add | +| iscsi_compareandwrite_iov_sync | change | + +## libksba + +详见 [libksba](./LTS_to_SP2_changed_abi_detail/libksba_all_result.md\) + +| function | type | +|:---- |:-- | +| ksba_der_add_bts | add | +| ksba_der_add_der | add | +| ksba_der_add_end | add | +| ksba_der_add_int | add | +| ksba_der_add_oid | add | +| ksba_der_add_ptr | add | +| ksba_der_add_tag | add | +| ksba_der_add_val | add | +| ksba_der_builder_get | add | +| ksba_der_builder_new | add | +| ksba_der_builder_reset | add | +| ksba_der_release | add | +| _ksba_keyinfo_from_sexp | change | + +## libmpc + +详见 [libmpc](./LTS_to_SP2_changed_abi_detail/libmpc_all_result.md\) + +| function | type | +|:---- |:-- | +| mpc_dot | add | +| mpc_sum | add | + +## libnet + +详见 [libnet](./LTS_to_SP2_changed_abi_detail/libnet_all_result.md\) + +| function | type | +|:---- |:-- | +| __libnet_print_vers | remove | +| libnet_build_ospfv2_hello_neighbor | add | +| libnet_adv_cull_header | change | + +## libpsl + +详见 [libpsl](./LTS_to_SP2_changed_abi_detail/libpsl_all_result.md\) + +| function | type | +|:---- |:-- | +| psl_builtin | change | +| psl_free | change | +| psl_is_cookie_domain_acceptable | change | +| psl_is_public_suffix | change | +| psl_is_public_suffix2 | change | +| psl_latest | change | +| psl_load_file | change | +| psl_load_fp | change | +| psl_suffix_count | change | +| psl_suffix_exception_count | change | +| psl_suffix_wildcard_count | change | + +## librepo + +详见 [librepo](./LTS_to_SP2_changed_abi_detail/librepo_all_result.md\) + +| function | type | +|:---- |:-- | +| ensure_socket_dir_exists | add | + +## libsecret + +详见 [libsecret](./LTS_to_SP2_changed_abi_detail/libsecret_all_result.md\) + +| function | type | +|:---- |:-- | +| secret_backend_flags_get_type | add | +| secret_backend_get | add | +| secret_backend_get_finish | add | +| secret_backend_get_type | add | +| secret_file_backend_get_type | add | +| secret_file_collection_clear | add | +| secret_file_collection_get_type | add | +| secret_file_collection_replace | add | +| secret_file_collection_search | add | +| secret_file_collection_write | add | +| secret_file_collection_write_finish | add | +| secret_file_item_deserialize | add | +| secret_file_item_get_type | add | +| secret_file_item_serialize | add | +| secret_password_lookup_binary_finish | add | +| secret_password_lookup_binary_sync | add | +| secret_password_lookupv_binary_sync | add | +| secret_password_search | add | +| secret_password_search_finish | add | +| secret_password_search_sync | add | +| secret_password_searchv | add | +| secret_password_searchv_sync | add | +| secret_password_store_binary | add | +| secret_password_store_binary_sync | add | +| secret_password_storev_binary | add | +| secret_password_storev_binary_sync | add | +| secret_retrievable_get_attributes | add | +| secret_retrievable_get_created | add | +| secret_retrievable_get_label | add | +| secret_retrievable_get_modified | add | +| secret_retrievable_get_type | add | +| secret_retrievable_retrieve_secret | add | +| secret_retrievable_retrieve_secret_finish | add | +| secret_retrievable_retrieve_secret_sync | add | +| secret_value_unref_to_password | add | + +## libvma + +详见 [libvma](./LTS_to_SP2_changed_abi_detail/libvma_all_result.md\) + +| function | type | +|:---- |:-- | +| Floyd_LogCircleInfo | change | +| buffer_pool::find_lkey_by_ib_ctx_thread_safe | change | +| cq_mgr::add_qp_rx | change | +| sockinfo_tcp::accept_clone | change | +| vma_ib_mlx5dv_init_obj | change | + +## libwebsockets + +详见 [libwebsockets](./LTS_to_SP2_changed_abi_detail/libwebsockets_all_result.md\) + +| function | type | +|:---- |:-- | +| interface_to_sa | remove | +| lws_alloc_vfs_file | remove | +| lws_client_connect | remove | +| lws_client_connect_extended | remove | +| lws_context_destroy2 | remove | +| lws_context_init_extensions | remove | +| lws_context_init_server_ssl | remove | +| lws_ext_parse_options | remove | +| lws_extension_callback_pm_deflate | remove | +| lws_plat_change_pollfd | remove | +| lws_plat_check_connection_error | remove | +| lws_plat_context_early_destroy | remove | +| lws_plat_context_early_init | remove | +| lws_plat_context_late_destroy | remove | +| lws_plat_delete_socket_from_fds | remove | +| lws_plat_drop_app_privileges | remove | +| lws_plat_inet_ntop | remove | +| lws_plat_inet_pton | remove | +| lws_plat_init | remove | +| lws_plat_insert_socket_into_fds | remove | +| lws_plat_service | remove | +| lws_plat_service_periodic | remove | +| lws_plat_set_socket_options | remove | +| lws_poll_listen_fd | remove | +| lws_read | remove | +| lws_server_get_canonical_hostname | remove | +| lws_server_socket_service | remove | +| lws_server_socket_service_ssl | remove | +| lws_set_parent_carries_io | remove | +| lws_ssl_capable_read | remove | +| lws_ssl_capable_read_no_ssl | remove | +| lws_ssl_capable_write | remove | +| lws_ssl_capable_write_no_ssl | remove | +| lws_ssl_close | remove | +| lws_ssl_destroy | remove | +| lws_ssl_pending | remove | +| lws_ssl_pending_no_ssl | remove | +| lws_union_transition | remove | +| lws_vhost_get | remove | +| __lws_sul_insert | add | +| __lws_sul_service_ripe | add | +| __lws_system_attach | add | +| lejp_change_callback | add | +| lejp_check_path_match | add | +| lejp_construct | add | +| lejp_destruct | add | +| lejp_error_to_string | add | +| lejp_get_wildcard | add | +| lejp_parse | add | +| lejp_parser_pop | add | +| lejp_parser_push | add | +| lws_add_http_common_headers | add | +| lws_adopt_descriptor_vhost_via_info | add | +| lws_b64_decode_state_init | add | +| lws_b64_decode_stateful | add | +| lws_b64_decode_string_len | add | +| lws_b64_encode_string_url | add | +| lws_base64_size | add | +| lws_buflist_append_segment | add | +| lws_buflist_describe | add | +| lws_buflist_destroy_all_segments | add | +| lws_buflist_linear_copy | add | +| lws_buflist_next_segment_len | add | +| lws_buflist_total_len | add | +| lws_buflist_use_segment | add | +| lws_callback_vhost_protocols_vhost | add | +| lws_client_http_multipart | add | +| lws_cmdline_option | add | +| lws_cmdline_option_handle_builtin | add | +| lws_create_adopt_udp | add | +| lws_dir | add | +| lws_diskcache_create | add | +| lws_diskcache_destroy | add | +| lws_diskcache_finalize_name | add | +| lws_diskcache_prepare | add | +| lws_diskcache_query | add | +| lws_diskcache_secs_to_idle | add | +| lws_diskcache_trim | add | +| lws_dll2_add_before | add | +| lws_dll2_add_head | add | +| lws_dll2_add_sorted | add | +| lws_dll2_add_tail | add | +| lws_dll2_clear | add | +| lws_dll2_foreach_safe | add | +| lws_dll2_owner_clear | add | +| lws_dll2_remove | add | +| lws_explicit_bzero | add | +| lws_filename_purify_inplace | add | +| lws_finalize_write_http_header | add | +| lws_fts_close | add | +| lws_fts_create | add | +| lws_fts_destroy | add | +| lws_fts_file_index | add | +| lws_fts_fill | add | +| lws_fts_open | add | +| lws_fts_search | add | +| lws_fts_serialize | add | +| lws_genaes_create | add | +| lws_genaes_crypt | add | +| lws_genaes_destroy | add | +| lws_gencrypto_bits_to_bytes | add | +| lws_gencrypto_jwe_alg_to_definition | add | +| lws_gencrypto_jwe_enc_to_definition | add | +| lws_gencrypto_jws_alg_to_definition | add | +| lws_gencrypto_padded_length | add | +| lws_genec_destroy | add | +| lws_genec_destroy_elements | add | +| lws_genec_dump | add | +| lws_genecdh_compute_shared_secret | add | +| lws_genecdh_create | add | +| lws_genecdh_new_keypair | add | +| lws_genecdh_set_key | add | +| lws_genecdsa_create | add | +| lws_genecdsa_hash_sig_verify_jws | add | +| lws_genecdsa_hash_sign_jws | add | +| lws_genecdsa_new_keypair | add | +| lws_genecdsa_set_key | add | +| lws_genhmac_destroy | add | +| lws_genhmac_init | add | +| lws_genhmac_size | add | +| lws_genhmac_update | add | +| lws_genrsa_create | add | +| lws_genrsa_destroy | add | +| lws_genrsa_destroy_elements | add | +| lws_genrsa_hash_sig_verify | add | +| lws_genrsa_hash_sign | add | +| lws_genrsa_new_keypair | add | +| lws_genrsa_private_decrypt | add | +| lws_genrsa_private_encrypt | add | +| lws_genrsa_public_decrypt | add | +| lws_genrsa_public_encrypt | add | +| lws_get_effective_uid_gid | add | +| lws_get_opaque_user_data | add | +| lws_get_peer_simple_fd | add | +| lws_get_tsi | add | +| lws_get_udp | add | +| lws_get_vhost_by_name | add | +| lws_get_vhost_iface | add | +| lws_get_vhost_listen_port | add | +| lws_get_vhost_name | add | +| lws_get_vhost_port | add | +| lws_get_vhost_user | add | +| lws_h2_client_stream_long_poll_rxonly | add | +| lws_h2_get_peer_txcredit_estimate | add | +| lws_h2_update_peer_txcredit | add | +| lws_hdr_custom_copy | add | +| lws_hdr_custom_length | add | +| lws_hex_to_byte_array | add | +| lws_http_basic_auth_gen | add | +| lws_http_compression_apply | add | +| lws_http_get_uri_and_method | add | +| lws_http_headers_detach | add | +| lws_http_is_redirected_to_get | add | +| lws_http_mark_sse | add | +| lws_humanize | add | +| lws_jose_destroy | add | +| lws_jose_init | add | +| lws_json_purify_len | add | +| lws_jwa_concat_kdf | add | +| lws_jwe_auth_and_decrypt | add | +| lws_jwe_auth_and_decrypt_cbc_hs | add | +| lws_jwe_be64 | add | +| lws_jwe_create_packet | add | +| lws_jwe_destroy | add | +| lws_jwe_encrypt | add | +| lws_jwe_init | add | +| lws_jwe_json_parse | add | +| lws_jwe_parse_jose | add | +| lws_jwe_render_compact | add | +| lws_jwe_render_flattened | add | +| lws_jwk_destroy | add | +| lws_jwk_dump | add | +| lws_jwk_dup_oct | add | +| lws_jwk_export | add | +| lws_jwk_generate | add | +| lws_jwk_import | add | +| lws_jwk_load | add | +| lws_jwk_rfc7638_fingerprint | add | +| lws_jwk_save | add | +| lws_jwk_strdup_meta | add | +| lws_jws_alloc_element | add | +| lws_jws_b64_compact_map | add | +| lws_jws_base64_enc | add | +| lws_jws_compact_decode | add | +| lws_jws_compact_encode | add | +| lws_jws_destroy | add | +| lws_jws_dup_element | add | +| lws_jws_encode_b64_element | add | +| lws_jws_encode_section | add | +| lws_jws_init | add | +| lws_jws_parse_jose | add | +| lws_jws_randomize_element | add | +| lws_jws_sig_confirm | add | +| lws_jws_sig_confirm_compact | add | +| lws_jws_sig_confirm_compact_b64 | add | +| lws_jws_sig_confirm_compact_b64_map | add | +| lws_jws_sig_confirm_json | add | +| lws_jws_sign_from_b64 | add | +| lws_jws_write_compact | add | +| lws_jws_write_flattened_json | add | +| lws_list_ptr_insert | add | +| lws_now_usecs | add | +| lws_open | add | +| lws_parse_numeric_address | add | +| lws_plat_read_file | add | +| lws_plat_recommended_rsa_bits | add | +| lws_plat_write_cert | add | +| lws_plat_write_file | add | +| lws_pvo_get_str | add | +| lws_pvo_search | add | +| lws_raw_transaction_completed | add | +| lws_retry_get_delay_ms | add | +| lws_retry_sul_schedule | add | +| lws_retry_sul_schedule_retry_wsi | add | +| lws_ring_dump | add | +| lws_sa46_compare_ads | add | +| lws_sa46_parse_numeric_address | add | +| lws_sa46_write_numeric_address | add | +| lws_seq_check_wsi | add | +| lws_seq_create | add | +| lws_seq_destroy | add | +| lws_seq_from_user | add | +| lws_seq_get_context | add | +| lws_seq_name | add | +| lws_seq_queue_event | add | +| lws_seq_timeout_us | add | +| lws_seq_us_since_creation | add | +| lws_ser_ru16be | add | +| lws_ser_ru32be | add | +| lws_ser_ru64be | add | +| lws_ser_wu16be | add | +| lws_ser_wu32be | add | +| lws_ser_wu64be | add | +| lws_set_opaque_user_data | add | +| lws_set_socks | add | +| lws_set_timer_usecs | add | +| lws_spa_create_via_info | add | +| lws_state_reg_deregister | add | +| lws_state_reg_notifier | add | +| lws_state_reg_notifier_list | add | +| lws_state_transition | add | +| lws_state_transition_steps | add | +| lws_strexp_expand | add | +| lws_strexp_init | add | +| lws_strexp_reset_out | add | +| lws_strncpy | add | +| lws_sul_schedule | add | +| lws_system_blob_destroy | add | +| lws_system_blob_direct_set | add | +| lws_system_blob_get | add | +| lws_system_blob_get_single_ptr | add | +| lws_system_blob_get_size | add | +| lws_system_blob_heap_append | add | +| lws_system_blob_heap_empty | add | +| lws_system_context_from_system_mgr | add | +| lws_system_get_blob | add | +| lws_system_get_ops | add | +| lws_system_get_state_manager | add | +| lws_threadpool_create | add | +| lws_threadpool_dequeue | add | +| lws_threadpool_destroy | add | +| lws_threadpool_dump | add | +| lws_threadpool_enqueue | add | +| lws_threadpool_finish | add | +| lws_threadpool_task_status_wsi | add | +| lws_threadpool_task_sync | add | +| lws_timed_callback_vh_protocol | add | +| lws_timed_callback_vh_protocol_us | add | +| lws_timingsafe_bcmp | add | +| lws_tls_acme_sni_cert_create | add | +| lws_tls_acme_sni_csr_create | add | +| lws_tls_cert_updated | add | +| lws_tls_client_vhost_extra_cert_mem | add | +| lws_tls_peer_cert_info | add | +| lws_tls_vhost_cert_info | add | +| lws_tokenize | add | +| lws_tokenize_cstr | add | +| lws_tokenize_init | add | +| lws_validity_confirmed | add | +| lws_vbi_decode | add | +| lws_vbi_encode | add | +| lws_write_numeric_address | add | +| lws_wsi_tx_credit | add | +| lws_x509_create | add | +| lws_x509_destroy | add | +| lws_x509_info | add | +| lws_x509_jwk_privkey_pem | add | +| lws_x509_parse_from_pem | add | +| lws_x509_public_to_jwk | add | +| lws_x509_verify | add | +| lwsac_align | add | +| lwsac_cached_file | add | +| lwsac_detach | add | +| lwsac_extend | add | +| lwsac_free | add | +| lwsac_get_next | add | +| lwsac_get_tail_pos | add | +| lwsac_info | add | +| lwsac_reference | add | +| lwsac_scan_extant | add | +| lwsac_sizeof | add | +| lwsac_total_alloc | add | +| lwsac_total_overhead | add | +| lwsac_unreference | add | +| lwsac_use | add | +| lwsac_use_backfill | add | +| lwsac_use_cached_file_detach | add | +| lwsac_use_cached_file_end | add | +| lwsac_use_cached_file_start | add | +| lwsac_use_zero | add | +| lwsl_emit_stderr_notimestamp | add | +| lwsws_get_config_globals | add | +| lwsws_get_config_vhosts | add | +| _lws_plat_service_tsi | change | +| lws_add_http_header_by_token | change | +| lws_adopt_descriptor_vhost | change | +| lws_chunked_html_process | change | +| lws_client_connect_via_info | change | +| lws_client_reset | change | +| lws_create_context | change | +| lws_create_vhost | change | +| lws_genhash_init | change | +| lws_genhash_size | change | +| lws_get_peer_simple | change | +| lws_get_peer_write_allowance | change | +| lws_get_random | change | +| lws_hdr_copy | change | +| lws_init_vhost_client_ssl | change | +| lws_ring_bump_head | change | +| lws_set_timeout | change | +| lws_spa_create | change | +| lws_token_to_string | change | + +## libxslt + +详见 [libxslt](./LTS_to_SP2_changed_abi_detail/libxslt_all_result.md\) + +| function | type | +|:---- |:-- | +| exsltDateXpathCtxtRegister | change | +| xsltCompMatchClearCache | add | +| xsltParseStylesheetUser | add | +| xslAddCall | change | +| xsltApplyImports | change | +| xsltApplyTemplates | change | +| xsltAttribute | change | +| xsltCallTemplate | change | +| xsltChoose | change | +| xsltComment | change | +| xsltCopy | change | +| xsltCopyOf | change | +| xsltDebug | change | +| xsltDocumentElem | change | +| xsltElement | change | +| xsltForEach | change | +| xsltIf | change | +| xsltNumber | change | +| xsltProcessingInstruction | change | +| xsltSort | change | +| xsltText | change | +| xsltValueOf | change | +| xsltXPathFunctionLookup | change | + +## lm_sensors + +详见 [lm_sensors](./LTS_to_SP2_changed_abi_detail/lm_sensors_all_result.md\) + +| function | type | +|:---- |:-- | +| None | None | + +## nftables + +详见 [nftables](./LTS_to_SP2_changed_abi_detail/nftables_all_result.md\) + +| function | type | +|:---- |:-- | +| __memory_allocation_error | remove | +| __netlink_abi_error | remove | +| __netlink_init_error | remove | +| __stmt_binary_error | remove | +| alloc_nft_expr | remove | +| alloc_nftnl_chain | remove | +| alloc_nftnl_rule | remove | +| alloc_nftnl_set | remove | +| alloc_nftnl_table | remove | +| binop_expr_alloc | remove | +| bitmask_expr_to_binops | remove | +| cache_flush | remove | +| cache_release | remove | +| cache_update | remove | +| chain_add_hash | remove | +| chain_alloc | remove | +| chain_free | remove | +| chain_get | remove | +| chain_hookname_lookup | remove | +| chain_lookup | remove | +| chain_policy2str | remove | +| chain_print_plain | remove | +| chain_type_name_lookup | remove | +| cmd_alloc | remove | +| cmd_alloc_obj_ct | remove | +| cmd_evaluate | remove | +| cmd_free | remove | +| compound_expr_add | remove | +| compound_expr_alloc | remove | +| compound_expr_remove | remove | +| concat_expr_alloc | remove | +| concat_type_alloc | remove | +| concat_type_destroy | remove | +| connlimit_stmt_alloc | remove | +| constant_expr_alloc | remove | +| constant_expr_join | remove | +| constant_expr_splice | remove | +| counter_stmt_alloc | remove | +| ct_dir2str | remove | +| ct_expr_alloc | remove | +| ct_expr_update_type | remove | +| ct_label2str | remove | +| ct_label_table_exit | remove | +| ct_label_table_init | remove | +| ct_stmt_alloc | remove | +| data_unit_parse | remove | +| datatype_lookup | remove | +| datatype_lookup_byname | remove | +| datatype_print | remove | +| devgroup_table_exit | remove | +| devgroup_table_init | remove | +| do_command | remove | +| dup_stmt_alloc | remove | +| erec_add_location | remove | +| erec_create | remove | +| erec_destroy | remove | +| erec_print | remove | +| erec_print_list | remove | +| erec_vcreate | remove | +| expr_alloc | remove | +| expr_basetype | remove | +| expr_binary_error | remove | +| expr_clone | remove | +| expr_cmp | remove | +| expr_describe | remove | +| expr_free | remove | +| expr_get | remove | +| expr_print | remove | +| expr_set_type | remove | +| expr_stmt_alloc | remove | +| exthdr_dependency_kill | remove | +| exthdr_expr_alloc | remove | +| exthdr_find_proto | remove | +| exthdr_find_template | remove | +| exthdr_gen_dependency | remove | +| exthdr_init_raw | remove | +| exthdr_stmt_alloc | remove | +| family2str | remove | +| fib_expr_alloc | remove | +| fib_result_str | remove | +| flag_expr_alloc | remove | +| flow_offload_stmt_alloc | remove | +| flowtable_add_hash | remove | +| flowtable_alloc | remove | +| flowtable_free | remove | +| flowtable_get | remove | +| flowtable_print | remove | +| fwd_stmt_alloc | remove | +| get_rate | remove | +| get_set_decompose | remove | +| get_set_intervals | remove | +| get_unit | remove | +| gmp_init | remove | +| handle_free | remove | +| handle_merge | remove | +| hash_expr_alloc | remove | +| hooknum2str | remove | +| iface_cache_release | remove | +| iface_cache_update | remove | +| interval_map_decompose | remove | +| limit_stmt_alloc | remove | +| list_expr_alloc | remove | +| list_expr_sort | remove | +| log_level | remove | +| log_level_parse | remove | +| log_stmt_alloc | remove | +| map_expr_alloc | remove | +| map_stmt_alloc | remove | +| mapping_expr_alloc | remove | +| mark_table_exit | remove | +| mark_table_init | remove | +| markup_alloc | remove | +| markup_free | remove | +| meta_expr_alloc | remove | +| meta_key_parse | remove | +| meta_stmt_alloc | remove | +| meta_stmt_meta_iiftype | remove | +| meter_stmt_alloc | remove | +| mnl_batch_begin | remove | +| mnl_batch_end | remove | +| mnl_batch_init | remove | +| mnl_batch_ready | remove | +| mnl_batch_reset | remove | +| mnl_batch_talk | remove | +| mnl_err_list_free | remove | +| mnl_genid_get | remove | +| mnl_nft_chain_batch_add | remove | +| mnl_nft_chain_batch_del | remove | +| mnl_nft_chain_dump | remove | +| mnl_nft_event_listener | remove | +| mnl_nft_flowtable_batch_add | remove | +| mnl_nft_flowtable_batch_del | remove | +| mnl_nft_flowtable_dump | remove | +| mnl_nft_obj_batch_add | remove | +| mnl_nft_obj_batch_del | remove | +| mnl_nft_obj_dump | remove | +| mnl_nft_rule_batch_add | remove | +| mnl_nft_rule_batch_del | remove | +| mnl_nft_rule_batch_replace | remove | +| mnl_nft_rule_dump | remove | +| mnl_nft_ruleset_dump | remove | +| mnl_nft_set_batch_add | remove | +| mnl_nft_set_batch_del | remove | +| mnl_nft_set_dump | remove | +| mnl_nft_setelem_batch_add | remove | +| mnl_nft_setelem_batch_del | remove | +| mnl_nft_setelem_batch_flush | remove | +| mnl_nft_setelem_get | remove | +| mnl_nft_setelem_get_one | remove | +| mnl_nft_table_batch_add | remove | +| mnl_nft_table_batch_del | remove | +| mnl_nft_table_dump | remove | +| mnl_seqnum_alloc | remove | +| monitor_alloc | remove | +| monitor_free | remove | +| mpz_bitmask | remove | +| mpz_export_data | remove | +| mpz_get_be16 | remove | +| mpz_get_be32 | remove | +| mpz_get_uint16 | remove | +| mpz_get_uint32 | remove | +| mpz_get_uint64 | remove | +| mpz_get_uint8 | remove | +| mpz_import_data | remove | +| mpz_init_bitmask | remove | +| mpz_lshift_ui | remove | +| mpz_prefixmask | remove | +| mpz_rshift_ui | remove | +| mpz_switch_byteorder | remove | +| must_print_eq_op | remove | +| nat_etype2str | remove | +| nat_stmt_alloc | remove | +| netlink_add_chain_batch | remove | +| netlink_add_flowtable | remove | +| netlink_add_obj | remove | +| netlink_add_rule_batch | remove | +| netlink_add_set_batch | remove | +| netlink_add_setelems_batch | remove | +| netlink_add_table_batch | remove | +| netlink_alloc_data | remove | +| netlink_alloc_value | remove | +| netlink_batch_send | remove | +| netlink_close_sock | remove | +| netlink_del_rule_batch | remove | +| netlink_delete_chain_batch | remove | +| netlink_delete_flowtable | remove | +| netlink_delete_obj | remove | +| netlink_delete_set_batch | remove | +| netlink_delete_setelems_batch | remove | +| netlink_delete_table_batch | remove | +| netlink_delinearize_chain | remove | +| netlink_delinearize_obj | remove | +| netlink_delinearize_rule | remove | +| netlink_delinearize_set | remove | +| netlink_delinearize_setelem | remove | +| netlink_delinearize_table | remove | +| netlink_dump_chain | remove | +| netlink_dump_expr | remove | +| netlink_dump_obj | remove | +| netlink_dump_rule | remove | +| netlink_dump_ruleset | remove | +| netlink_dump_set | remove | +| netlink_echo_callback | remove | +| netlink_events_trace_cb | remove | +| netlink_flush_chain | remove | +| netlink_flush_setelems | remove | +| netlink_gen_data | remove | +| netlink_gen_raw_data | remove | +| netlink_genid_get | remove | +| netlink_get_setelem | remove | +| netlink_io_error | remove | +| netlink_linearize_rule | remove | +| netlink_list_chains | remove | +| netlink_list_flowtables | remove | +| netlink_list_objs | remove | +| netlink_list_setelems | remove | +| netlink_list_sets | remove | +| netlink_list_table | remove | +| netlink_list_tables | remove | +| netlink_markup_parse_cb | remove | +| netlink_monitor | remove | +| netlink_open_sock | remove | +| netlink_parse_set_expr | remove | +| netlink_rename_chain_batch | remove | +| netlink_replace_rule_batch | remove | +| netlink_reset_objs | remove | +| netlink_restart | remove | +| nft__create_buffer | remove | +| nft__delete_buffer | remove | +| nft__flush_buffer | remove | +| nft__scan_buffer | remove | +| nft__scan_bytes | remove | +| nft__scan_string | remove | +| nft__switch_to_buffer | remove | +| nft_alloc | remove | +| nft_cmd_expand | remove | +| nft_ctx_output_get_echo | remove | +| nft_ctx_output_get_handle | remove | +| nft_ctx_output_get_ip2name | remove | +| nft_ctx_output_get_json | remove | +| nft_ctx_output_get_numeric | remove | +| nft_ctx_output_get_stateless | remove | +| nft_ctx_output_set_echo | remove | +| nft_ctx_output_set_handle | remove | +| nft_ctx_output_set_ip2name | remove | +| nft_ctx_output_set_json | remove | +| nft_ctx_output_set_numeric | remove | +| nft_ctx_output_set_stateless | remove | +| nft_free | remove | +| nft_get_column | remove | +| nft_get_debug | remove | +| nft_get_extra | remove | +| nft_get_in | remove | +| nft_get_leng | remove | +| nft_get_lineno | remove | +| nft_get_lloc | remove | +| nft_get_lval | remove | +| nft_get_out | remove | +| nft_get_text | remove | +| nft_gmp_print | remove | +| nft_if_indextoname | remove | +| nft_if_nametoindex | remove | +| nft_lex | remove | +| nft_lex_destroy | remove | +| nft_lex_init | remove | +| nft_lex_init_extra | remove | +| nft_parse | remove | +| nft_pop_buffer_state | remove | +| nft_print | remove | +| nft_push_buffer_state | remove | +| nft_realloc | remove | +| nft_restart | remove | +| nft_set_column | remove | +| nft_set_debug | remove | +| nft_set_extra | remove | +| nft_set_in | remove | +| nft_set_lineno | remove | +| nft_set_lloc | remove | +| nft_set_lval | remove | +| nft_set_out | remove | +| notrack_stmt_alloc | remove | +| numgen_expr_alloc | remove | +| obj_add_hash | remove | +| obj_alloc | remove | +| obj_free | remove | +| obj_get | remove | +| obj_lookup | remove | +| obj_print | remove | +| obj_print_plain | remove | +| obj_type_name | remove | +| obj_type_to_cmd | remove | +| objref_stmt_alloc | remove | +| objref_type_name | remove | +| parser_init | remove | +| payload_can_merge | remove | +| payload_dependency_exists | remove | +| payload_dependency_kill | remove | +| payload_dependency_release | remove | +| payload_dependency_reset | remove | +| payload_dependency_store | remove | +| payload_expr_alloc | remove | +| payload_expr_complete | remove | +| payload_expr_expand | remove | +| payload_expr_join | remove | +| payload_expr_trim | remove | +| payload_gen_dependency | remove | +| payload_hdr_field | remove | +| payload_init_raw | remove | +| payload_is_known | remove | +| payload_is_stacked | remove | +| payload_stmt_alloc | remove | +| prefix_expr_alloc | remove | +| proto_ctx_init | remove | +| proto_ctx_update | remove | +| proto_dev_desc | remove | +| proto_dev_type | remove | +| proto_find_num | remove | +| proto_find_upper | remove | +| queue_stmt_alloc | remove | +| quota_stmt_alloc | remove | +| range_expr_alloc | remove | +| range_expr_value_high | remove | +| range_expr_value_low | remove | +| rate_parse | remove | +| rb_erase | remove | +| rb_first | remove | +| rb_insert_color | remove | +| rb_last | remove | +| rb_next | remove | +| rb_prev | remove | +| rb_replace_node | remove | +| realm_table_meta_exit | remove | +| realm_table_meta_init | remove | +| realm_table_rt_exit | remove | +| realm_table_rt_init | remove | +| reject_stmt_alloc | remove | +| relational_expr_alloc | remove | +| relational_expr_pctx_update | remove | +| rt_expr_alloc | remove | +| rt_expr_update_type | remove | +| rt_symbol_table_free | remove | +| rt_symbol_table_init | remove | +| rule_alloc | remove | +| rule_free | remove | +| rule_get | remove | +| rule_lookup | remove | +| rule_postprocess | remove | +| rule_print | remove | +| scanner_destroy | remove | +| scanner_include_file | remove | +| scanner_init | remove | +| scanner_push_buffer | remove | +| scanner_read_file | remove | +| scope_init | remove | +| scope_release | remove | +| set_add_hash | remove | +| set_alloc | remove | +| set_clone | remove | +| set_datatype_alloc | remove | +| set_datatype_destroy | remove | +| set_elem_expr_alloc | remove | +| set_expr_alloc | remove | +| set_free | remove | +| set_get | remove | +| set_lookup | remove | +| set_lookup_global | remove | +| set_policy2str | remove | +| set_print | remove | +| set_print_plain | remove | +| set_ref_expr_alloc | remove | +| set_stmt_alloc | remove | +| set_to_intervals | remove | +| socket_expr_alloc | remove | +| stmt_alloc | remove | +| stmt_evaluate | remove | +| stmt_free | remove | +| stmt_list_free | remove | +| stmt_print | remove | +| symbol_bind | remove | +| symbol_expr_alloc | remove | +| symbol_get | remove | +| symbol_lookup | remove | +| symbol_parse | remove | +| symbol_table_print | remove | +| symbol_unbind | remove | +| symbolic_constant_parse | remove | +| symbolic_constant_print | remove | +| table_add_hash | remove | +| table_alloc | remove | +| table_free | remove | +| table_get | remove | +| table_lookup | remove | +| tcpopt_expr_alloc | remove | +| tcpopt_find_template | remove | +| tcpopt_init_raw | remove | +| time_parse | remove | +| time_print | remove | +| unary_expr_alloc | remove | +| variable_expr_alloc | remove | +| verdict_expr_alloc | remove | +| verdict_stmt_alloc | remove | +| xfree | remove | +| xmalloc | remove | +| xmalloc_array | remove | +| xrealloc | remove | +| xstrdup | remove | +| xstrunescape | remove | +| xt_stmt_alloc | remove | +| xzalloc | remove | +| nft_ctx_output_get_flags | add | +| nft_ctx_output_set_flags | add | +| nft_ctx_add_include_path | change | +| nft_run_cmd_from_buffer | change | + +## openhpi + +详见 [openhpi](./LTS_to_SP2_changed_abi_detail/openhpi_all_result.md\) + +| function | type | +|:---- |:-- | +| curlerr_to_ov_rest_err | change | + +## OpenIPMI + +详见 [OpenIPMI](./LTS_to_SP2_changed_abi_detail/OpenIPMI_all_result.md\) + +| function | type | +|:---- |:-- | +| sel_select_intr_sigmask | add | +| sel_setup_forked_process | add | +| sel_select_intr_sigmask | add | +| sel_setup_forked_process | add | +| ipmbserv_handle_data | add | +| ipmbserv_init | add | +| ipmbserv_read_config | add | +| chan_init | change | +| debug_log_raw_msg | change | +| handle_asf | change | +| ra_setup | change | + +## openldap + +详见 [openldap](./LTS_to_SP2_changed_abi_detail/openldap_all_result.md\) + +| function | type | +|:---- |:-- | +| ldap_abandon | change | +| ldap_int_initialize_global_options | change | +| ldap_int_sasl_config | change | +| ldap_int_tls_destroy | change | +| ldap_abandon | change | +| ldap_int_initialize_global_options | change | +| ldap_int_sasl_config | change | +| ldap_int_tls_destroy | change | + +## pam + +详见 [pam](./LTS_to_SP2_changed_abi_detail/pam_all_result.md\) + +| function | type | +|:---- |:-- | +| pam_modutil_check_user_in_passwd | add | +| pam_modutil_search_key | add | +| pam_start_confdir | add | +| pam_acct_mgmt | change | +| pam_sm_authenticate | add | +| pam_sm_setcred | add | + +## pkgconf + +详见 [pkgconf](./LTS_to_SP2_changed_abi_detail/pkgconf_all_result.md\) + +| function | type | +|:---- |:-- | +| pkgconf_client_dir_list_build | change | + +## plymouth + +详见 [plymouth](./LTS_to_SP2_changed_abi_detail/plymouth_all_result.md\) + +| function | type | +|:---- |:-- | +| ply_text_progress_bar_get_percent_done | remove | +| ply_text_progress_bar_set_percent_done | remove | +| ply_text_step_bar_get_percent_done | remove | +| ply_text_step_bar_set_percent_done | remove | +| ply_text_progress_bar_get_fraction_done | add | +| ply_text_progress_bar_set_fraction_done | add | +| ply_text_step_bar_get_fraction_done | add | +| ply_text_step_bar_set_fraction_done | add | +| ply_renderer_backend_get_interface | change | +| ply_progress_animation_get_percent_done | remove | +| ply_progress_animation_set_percent_done | remove | +| ply_progress_bar_get_percent_done | remove | +| ply_progress_bar_set_percent_done | remove | +| ply_progress_animation_get_fraction_done | add | +| ply_progress_animation_set_fraction_done | add | +| ply_progress_bar_get_fraction_done | add | +| ply_progress_bar_set_fraction_done | add | +| ply_boot_splash_plugin_get_interface | change | + +## readline + +详见 [readline](./LTS_to_SP2_changed_abi_detail/readline_all_result.md\) + +| function | type | +|:---- |:-- | +| _hs_history_patsearch | add | +| remove_history_range | add | + +## rhash + +详见 [rhash](./LTS_to_SP2_changed_abi_detail/rhash_all_result.md\) + +| function | type | +|:---- |:-- | +| rhash_torrent_add_file | change | +| rhash_torrent_get_default_piece_length | change | +| rhash_transmit | change | + +## subversion + +详见 [subversion](./LTS_to_SP2_changed_abi_detail/subversion_all_result.md\) + +| function | type | +|:---- |:-- | +| svn_repos__dump_magic_header_record | add | +| svn_repos__dump_uuid_header_record | add | +| svn_repos__get_dump_editor | add | +| svn_repos_authz_parse2 | add | +| svn_repos_authz_read4 | add | +| svn_authz__parse | change | +| svn_client__copy_foreign | remove | +| svn_client_shelf_get_paths | remove | +| svn_client_shelf_has_changes | remove | +| svn_client_shelve | remove | +| svn_client_shelves_any | remove | +| svn_client_shelves_delete | remove | +| svn_client_shelves_list | remove | +| svn_client_unshelve | remove | +| svn_client__condense_commit_items2 | add | +| svn_client__get_diff_writer_svn | add | +| svn_client__layout_list | add | +| svn_client__repos_to_wc_copy_by_editor | add | +| svn_client__repos_to_wc_copy_internal | add | +| svn_client__shelf_apply | add | +| svn_client__shelf_close | add | +| svn_client__shelf_delete | add | +| svn_client__shelf_delete_newer_versions | add | +| svn_client__shelf_diff | add | +| svn_client__shelf_get_all_versions | add | +| svn_client__shelf_get_log_message | add | +| svn_client__shelf_get_newest_version | add | +| svn_client__shelf_list | add | +| svn_client__shelf_mods_editor | add | +| svn_client__shelf_open_existing | add | +| svn_client__shelf_open_or_create | add | +| svn_client__shelf_paths_changed | add | +| svn_client__shelf_replay | add | +| svn_client__shelf_revprop_get | add | +| svn_client__shelf_revprop_list | add | +| svn_client__shelf_revprop_set | add | +| svn_client__shelf_revprop_set_all | add | +| svn_client__shelf_save_new_version3 | add | +| svn_client__shelf_set_log_message | add | +| svn_client__shelf_test_apply_file | add | +| svn_client__shelf_unapply | add | +| svn_client__shelf_version_open | add | +| svn_client__shelf_version_status_walk | add | +| svn_client__wc_copy_mods | add | +| svn_client__wc_editor | add | +| svn_client__wc_editor_internal | add | +| svn_client__wc_replay | add | +| svn_client_blame6 | add | +| svn_client_conflict_option_get_moved_to_abspath_candidates2 | add | +| svn_client_conflict_option_get_moved_to_repos_relpath_candidates2 | add | +| svn_client_conflict_option_set_moved_to_abspath2 | add | +| svn_client_conflict_option_set_moved_to_repos_relpath2 | add | +| svn_client_diff7 | add | +| svn_client_diff_peg7 | add | +| svn_client_revert4 | add | +| svn_client__arbitrary_nodes_diff | change | +| svn_diff_hunk__create_adds_single_line | change | +| svn_relpath__internal_style | remove | +| svn_dirent_canonicalize_safe | add | +| svn_dirent_internal_style_safe | add | +| svn_opt_get_canonical_subcommand3 | add | +| svn_opt_get_option_from_code3 | add | +| svn_opt_print_generic_help3 | add | +| svn_opt_print_help5 | add | +| svn_opt_subcommand_help4 | add | +| svn_opt_subcommand_takes_option4 | add | +| svn_relpath__make_internal | add | +| svn_relpath_canonicalize_safe | add | +| svn_uri_canonicalize_safe | add | +| svn_delta_path_driver3 | add | +| svn_delta_path_driver_finish | add | +| svn_delta_path_driver_start | add | +| svn_delta_path_driver_step | add | +| svn_element__tree_set | change | +| svn_wc__find_repos_node_in_wc | remove | +| svn_wc__get_shelves_dir | remove | +| svn_wc__db_find_copies_of_repos_path | add | +| svn_wc__db_find_repos_node_in_wc | add | +| svn_wc__db_find_working_nodes_with_basename | add | +| svn_wc__find_copies_of_repos_path | add | +| svn_wc__find_working_nodes_with_basename | add | +| svn_wc__get_experimental_dir | add | +| svn_wc_revert6 | add | +| svn_wc__conflict_read_tree_conflict | change | +| svn_wc__conflict_skel_add_tree_conflict | change | +| svn_wc__diff7 | change | + +## tcl + +详见 [tcl](./LTS_to_SP2_changed_abi_detail/tcl_all_result.md\) + +| function | type | +|:---- |:-- | +| TclOODefineMixinObjCmd | remove | +| TclSkipUnlink | remove | +| Tcl_EncodingObjCmd | remove | +| TclpUnloadFile | remove | +| TclBN_mp_balance_mul | add | +| TclBN_mp_expt_d_ex | add | +| TclBN_mp_set_ull | add | +| TclBN_mp_signed_rsh | add | +| TclBN_mp_to_radix | add | +| TclBN_mp_to_ubin | add | +| TclAddLiteralObj | change | +| TclBN_mp_unsigned_bin_size | change | + +## xorg-x11-server + +详见 [xorg-x11-server](./LTS_to_SP2_changed_abi_detail/xorg-x11-server_all_result.md\) + +| function | type | +|:---- |:-- | +| glamor_clear_pixmap | add | +| glamor_egl_get_driver_name | add | + +## zstd + +详见 [zstd](./LTS_to_SP2_changed_abi_detail/zstd_all_result.md\) + +| function | type | +|:---- |:-- | +| ZSTDMT_compressCCtx | remove | +| ZSTDMT_compressStream | remove | +| ZSTDMT_compressStream_generic | remove | +| ZSTDMT_compress_advanced | remove | +| ZSTDMT_createCCtx | remove | +| ZSTDMT_createCCtx_advanced | remove | +| ZSTDMT_endStream | remove | +| ZSTDMT_flushStream | remove | +| ZSTDMT_freeCCtx | remove | +| ZSTDMT_getMTCtxParameter | remove | +| ZSTDMT_initCStream | remove | +| ZSTDMT_initCStream_advanced | remove | +| ZSTDMT_initCStream_usingCDict | remove | +| ZSTDMT_resetCStream | remove | +| ZSTDMT_setMTCtxParameter | remove | +| ZSTDMT_sizeof_CCtx | remove | +| ZSTD_CCtxParam_getParameter | remove | +| ZSTD_CCtxParam_setParameter | remove | +| ZSTD_CCtx_resetParameters | remove | +| ZSTD_compress_generic | remove | +| ZSTD_compress_generic_simpleArgs | remove | +| ZSTD_decompress_generic | remove | +| ZSTD_decompress_generic_simpleArgs | remove | +| ZSTD_setDStreamParameter | remove | + diff --git "a/content/zh/docs/Releasenotes/\346\263\225\345\276\213\345\243\260\346\230\216.md" "b/docs/zh/docs/Releasenotes/\346\263\225\345\276\213\345\243\260\346\230\216.md" similarity index 64% rename from "content/zh/docs/Releasenotes/\346\263\225\345\276\213\345\243\260\346\230\216.md" rename to "docs/zh/docs/Releasenotes/\346\263\225\345\276\213\345\243\260\346\230\216.md" index 9769a3f5cfcd23d6e98b030f9b933935330b23b4..1ebe5f5db47f58b2df8e45f487545d4adace12ab 100644 --- "a/content/zh/docs/Releasenotes/\346\263\225\345\276\213\345\243\260\346\230\216.md" +++ "b/docs/zh/docs/Releasenotes/\346\263\225\345\276\213\345\243\260\346\230\216.md" @@ -1,14 +1,14 @@ # 法律声明 -**版权所有 © 2020 openEuler社区。** +**版权所有 © 2021 openEuler 社区。** 您对“本文档”的复制、使用、修改及分发受知识共享\(Creative Commons\)署名—相同方式共享4.0国际公共许可协议\(以下简称“CC BY-SA 4.0”\)的约束。为了方便用户理解,您可以通过访问[https://creativecommons.org/licenses/by-sa/4.0/](https://creativecommons.org/licenses/by-sa/4.0/) 了解CC BY-SA 4.0的概要 \(但不是替代\)。CC BY-SA 4.0的完整协议内容您可以访问如下网址获取:[https://creativecommons.org/licenses/by-sa/4.0/legalcode](https://creativecommons.org/licenses/by-sa/4.0/legalcode)。 **商标声明** -openEuler为openEuler社区的商标。本文档提及的其他所有商标或注册商标,由各自的所有人拥有。 +openEuler为华为技术有限公司的商标。本文档提及的其他所有商标或注册商标,由各自的所有人拥有。 **免责声明** -本文档仅作为使用指导,除非适用法强制规定或者双方有明确书面约定, openEuler社区对本文档中的所有陈述、信息和建议不做任何明示或默示的声明或保证,包括但不限于不侵权,时效性或满足特定目的的担保。 +本文档仅作为使用指导,除非适用法强制规定或者双方有明确书面约定, 华为技术有限公司对本文档中的所有陈述、信息和建议不做任何明示或默示的声明或保证,包括但不限于不侵权,时效性或满足特定目的的担保。 diff --git "a/content/zh/docs/Releasenotes/\346\272\220\344\273\243\347\240\201.md" "b/docs/zh/docs/Releasenotes/\346\272\220\344\273\243\347\240\201.md" similarity index 100% rename from "content/zh/docs/Releasenotes/\346\272\220\344\273\243\347\240\201.md" rename to "docs/zh/docs/Releasenotes/\346\272\220\344\273\243\347\240\201.md" diff --git "a/content/zh/docs/Releasenotes/\347\224\250\346\210\267\351\241\273\347\237\245.md" "b/docs/zh/docs/Releasenotes/\347\224\250\346\210\267\351\241\273\347\237\245.md" similarity index 32% rename from "content/zh/docs/Releasenotes/\347\224\250\346\210\267\351\241\273\347\237\245.md" rename to "docs/zh/docs/Releasenotes/\347\224\250\346\210\267\351\241\273\347\237\245.md" index f612df3f64d1e43279f0a7cbbb27b04128bcff22..a87837b5b35b65b6a8dd73231815288300374152 100644 --- "a/content/zh/docs/Releasenotes/\347\224\250\346\210\267\351\241\273\347\237\245.md" +++ "b/docs/zh/docs/Releasenotes/\347\224\250\346\210\267\351\241\273\347\237\245.md" @@ -1,6 +1,5 @@ # 用户须知 -- openEuler版本号计数规则由openEuler x.x变更为以年月为版本号,以便用户了解版本发布时间,例如openEuler 20.09表示发布时间为2020年9月。 -- [Python核心团队](https://www.python.org/dev/peps/pep-0373/#update)已经于2020年1月停止对Python 2的维护。2020年,openEuler 20.09 LTS仅修复Python 2的致命CVE,并将于2020年12月31日全面停止维护。请您尽快切换到Python 3。 +- openEuler版本号计数规则由openEuler x.x变更为以年月为版本号,以便用户了解版本发布时间,例如openEuler 20.03表示发布时间为2020年3月。 +- [Python核心团队](https://www.python.org/dev/peps/pep-0373/#update)已经于2020年1月停止对Python 2的维护。openEuler社区于2020年12月31日全面停止维护,openEuler 20.03 LTS SP3仅修复Python 2的致命CVE,请您切换到Python 3。 -* [Python核心团队](https://www.python.org/dev/peps/pep-0373/#update)已经于2020年1月停止对Python 2的维护。2020年,openEuler 20.03 LTS仅修复Python 2的致命CVE,并将于2020年12月31日全面停止维护。请您尽快切换到Python 3。 \ No newline at end of file diff --git "a/docs/zh/docs/Releasenotes/\347\256\200\344\273\213.md" "b/docs/zh/docs/Releasenotes/\347\256\200\344\273\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..7cf6567ef6f195d6edb52f5966f35f482bd6bc0b --- /dev/null +++ "b/docs/zh/docs/Releasenotes/\347\256\200\344\273\213.md" @@ -0,0 +1,4 @@ +# 简介 + +openEuler是一款开源操作系统。当前openEuler内核源于Linux,支持服务器、云计算、边缘计算、嵌入式等应用场景,支持多样性计算,致力于提供安全、稳定、易用的操作系统,是由全球开源贡献者构建的高效、稳定、安全的开源操作系统,适用于数据库、大数据、云计算、人工智能等应用场景。同时,openEuler是一个面向全球的操作系统开源社区,通过社区合作,打造创新平台,构建支持多处理器架构、统一和开放的操作系统,推动软硬件应用生态繁荣发展。 + diff --git "a/docs/zh/docs/Releasenotes/\347\263\273\347\273\237\345\256\211\350\243\205.md" "b/docs/zh/docs/Releasenotes/\347\263\273\347\273\237\345\256\211\350\243\205.md" new file mode 100644 index 0000000000000000000000000000000000000000..5a63718ae8102be3020be74925e7bc83c79299b4 --- /dev/null +++ "b/docs/zh/docs/Releasenotes/\347\263\273\347\273\237\345\256\211\350\243\205.md" @@ -0,0 +1,130 @@ +# 系统安装 + +## 发布件 + +openEuler发布件包括[ISO发布包](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/ISO/)、[虚拟机镜像](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/virtual_machine_img/)、[容器镜像](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/docker_img/)和[repo源](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/)。ISO发布包请参见[表1](#table8396719144315)。容器清单参见[表3](#table1276911538154)。repo源方便在线使用,repo源目录请参见[表4](#table953512211576)。 + +**表 1** 发布ISO列表 + +| 名称 | 描述 | +| :---- | :---- | +| openEuler-20.03-LTS-SP3-aarch64-dvd.iso | AArch64 架构的基础安装 ISO,包含了运行最小系统的核心组件 | +| openEuler-20.03-LTS-SP3-everything-aarch64-dvd.iso | AArch64 架构的全量安装 ISO,包含了运行完整系统所需的全部组件 | +| openEuler-20.03-LTS-SP3-debuginfo-aarch64-dvd.iso | AArch64 架构下 openEuler 的调试 ISO,包含了调试所需的符号表信息 | +| openEuler-20.03-LTS-SP3-netinst-aarch64-dvd.iso | AArch64 架构下 openEuler 的小型化 ISO,支持网络模式下的系统安装 | +| openEuler-20.03-LTS-SP3-x86_64-dvd.iso | x86_64 架构的基础安装 ISO,包含了运行最小系统的核心组件 | +| openEuler-20.03-LTS-SP3-everything-x86_64-dvd.iso | x86_64 架构的全量安装 ISO,包含了运行完整系统所需的全部组件 | +| openEuler-20.03-LTS-SP3-debuginfo-x86_64-dvd.iso | x86_64 架构下 openEuler 的调试 ISO,包含了调试所需的符号表信息 | +| openEuler-20.03-LTS-SP3-netinst-x86_64-dvd.iso | x86_64 架构下 openEuler 的小型化 ISO,支持网络模式下的系统安装 | +| openEuler-20.03-LTS-SP3-source-dvd.iso | openEuler 源码 ISO | + + +**表 2** 虚拟机镜像 + +| 名称 | 描述 | +| :---- | :---- | +| openEuler-20.03-LTS-SP3.aarch64.qcow2.xz | AArch64 架构下 openEuler 虚拟机镜像 | +| openEuler-20.03-LTS-SP3.x86_64.qcow2.xz | x86_64 架构下 openEuler 虚拟机镜像 | + +>![](./public_sys-resources/icon-note.gif) **说明:** +>虚拟机镜像 root 用户默认密码为:openEuler12\#$,首次登录后请及时修改。 + + +**表 3** 容器镜像列表 + +| 名称 | 描述 | +| :---- | :---- | +| openEuler-docker.aarch64.tar.xz | AArch64架构下openEuler容器镜像 | +| openEuler-docker.x86_64.tar.xz | x86_64架构下openEuler虚拟机镜像 | + + +**表 4** repo源列表 + +| 目录 | 描述 | +| :---- | :---- | +| [ISO](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/ISO/) | 存放ISO镜像 | +| [OS](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/) | 存放基础软件包源 | +| [debuginfo](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/debuginfo/) | 存放调试包源 | +| [docker_img](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/docker_img/) | 存放容器镜像 | +| [virtual_machine_img](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/virtual_machine_img/) | 存放虚拟机镜像 | +| [everything](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/everything/) | 存放全量软件包源 | +| [source](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/source/) | 存放源码软件源 | +| [update](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/update/) | 存放升级软件包源 | +| [EPOL](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/EPOL/) | 存放openEuler扩展包 | +| [raspi_img](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/raspi_img/) | 存放树莓派镜像 | +| [stratovirt_img](http://repo.openeuler.org/openEuler-20.03-LTS-SP3/stratovirt_img/) | 存放StratorVirt镜像 | + + +## 最小硬件要求 + +安装 openEuler 20.03 LTS SP3 所需的最小硬件要求如[表5](#zh-cn_topic_0182825778_tff48b99c9bf24b84bb602c53229e2541)所示。 + +**表 5** 最小硬件要求 + +| 部件名称 | 最小硬件要求 | +| :---- | :---- | +| CPU | 鲲鹏 920(架构为AArch64)
Skylake以上(x86-64) | +| 内存 | 不小于8GB | +| 硬盘 | 不小于120GB | + +## 硬件兼容性 + +openEuler已验证支持的服务器和各部件典型配置请参见[表6](#zh-cn_topic_0227922427_table39822012)。openEuler后续将逐步增加对其他服务器的支持,也欢迎广大合作伙伴/开发者参与贡献和验证。 + +**表 6** 支持的服务器及典型配置 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
厂商服务器名称服务器具体型号部件名称典型配置
华为TaiShan 2002280均衡型CPUKunpeng 920
内存32G*4 2933MHz
网络TM210
华为FusionServer Pro2288H V5(机架服务器)CPUIntel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz
内存32*4 2400MHz
网络X722
飞腾PhytiumFT-2000+/64CPUFT-2000+/64
内存镁光16G*32
网络I350
+ diff --git "a/content/zh/docs/Releasenotes/\350\207\264\350\260\242.md" "b/docs/zh/docs/Releasenotes/\350\207\264\350\260\242.md" similarity index 100% rename from "content/zh/docs/Releasenotes/\350\207\264\350\260\242.md" rename to "docs/zh/docs/Releasenotes/\350\207\264\350\260\242.md" diff --git "a/docs/zh/docs/Releasenotes/\351\231\204\345\275\225.md" "b/docs/zh/docs/Releasenotes/\351\231\204\345\275\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..5605a4bcb0c188b6b78efca80858cdce24dd50c3 --- /dev/null +++ "b/docs/zh/docs/Releasenotes/\351\231\204\345\275\225.md" @@ -0,0 +1,8 @@ +# 附录 + +The following legal information concerns some software in openEuler. + +This product includes the Zend Engine, freely available at http://www.zend.com + +Portions Copyright (c) 2002-2007 Charlie Poole or Copyright (c) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright (c) 2000-2002 Philip A. Craig +Portions of this software are copyright © <2020> The FreeType Project (www.freetype.org). All rights reserved. diff --git "a/docs/zh/docs/SecHarden/SELinux\351\205\215\347\275\256.md" "b/docs/zh/docs/SecHarden/SELinux\351\205\215\347\275\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..7bf0e2e977ab45d355fb8a63587d158e7fc0aba5 --- /dev/null +++ "b/docs/zh/docs/SecHarden/SELinux\351\205\215\347\275\256.md" @@ -0,0 +1,114 @@ +# SELinux配置 + +## 概述 + +自主访问控制DAC(Discretionary Access Control)基于用户、组和其他权限,决定一个资源是否能被访问的因素是某个资源是否拥有对应用户的权限,它不能使系统管理员创建全面和细粒度的安全策略。SELinux(Security-Enhanced Linux)是Linux内核的一个模块,也是Linux的一个安全子系统。SELinux的实现了强制访问控制MAC(Mandatory Access Control ),每个进程和系统资源都有一个特殊的安全标签,资源能否被访问除了DAC规定的原则外,还需要判断每一类进程是否拥有对某一类资源的访问权限。 + +openEuler默认使用SELinux提升系统安全性。SELinux分为三种模式: + +- permissive:SELinux仅打印告警而不强制执行。 +- enforcing:SELinux安全策略被强制执行。 +- disabled:不加载SELinux安全策略。 + +## 配置说明 + +- 获取当前SELinux运行状态: + ``` + # getenforce + Enforcing + ``` + +- SELinux开启的前提下,设置运行状态为enforcing模式: + ``` + # setenforce 1 + # getenforce + Enforcing + ``` + +- SELinux开启的前提下,设置运行状态为permissive模式: + ``` + # setenforce 0 + # getenforce + Permissive + ``` + +- SELinux开启的前提下,设置当前SELinux运行状态为disabled(关闭SELinux,需要重启系统)。 + 1. 修改SELinux配置文件/etc/selinux/config,设置“SELINUX=disabled”。 + ``` + # cat /etc/selinux/config | grep "SELINUX=" + SELINUX=disabled + ``` + 2. 重启系统: + ``` + # reboot + ``` + 3. 状态切换成功: + ``` + # getenforce + Disabled + ``` + +- SELinux关闭的前提下,设置SELinux运行状态为permissive: + 1. 修改SELinux配置文件/etc/selinux/config,设置“SELINUX=permissive”: + ``` + # cat /etc/selinux/config | grep "SELINUX=" + SELINUX=permissive + ``` + 2. 在根目录下创建.autorelabel文件: + ``` + # touch /.autorelabel + ``` + 3. 重启系统,此时系统会重启两次: + ``` + # reboot + ``` + 4. 状态切换成功: + ``` + # getenforce + Permissive + ``` + +- SELinux关闭的前提下,设置SELinux运行状态为enforcing: + 1. 按照上一步骤所述,设置SELinux运行状态为permissive。 + 2. 修改SELinux配置文件/etc/selinux/config,设置“SELINUX=enforcing”: + ``` + # cat /etc/selinux/config | grep "SELINUX=" + SELINUX=enforcing + ``` + 3. 重启系统: + ``` + # reboot + ``` + 4. 状态切换成功: + ``` + # getenforce + Enforcing + ``` + +## SELinux相关命令 + +- 查询运行SELinux的系统状态。SELinux status表示SELinux的状态,enabled表示启用SELinux,disabled表示关闭SELinux。Current mode表示SELinux当前的安全策略。 + + ``` + # sestatus + SELinux status: enabled + SELinuxfs mount: /sys/fs/selinux + SELinux root directory: /etc/selinux + Loaded policy name: targeted + Current mode: enforcing + Mode from config file: enforcing + Policy MLS status: enabled + Policy deny_unknown status: allowed + Memory protection checking: actual (secure) + Max kernel policy version: 31 + ``` + +## 注意事项 + +- 如用户需使能SELinux功能,建议通过dnf升级方式将selinux-policy更新为最新版本,否则应用程序有可能无法正常运行。升级命令示例: + + ``` + dnf update selinux-policy -y + ``` + +- 如果用户由于SELinux配置不当(如误删策略或未配置合理的规则或安全上下文)导致系统无法启动,可以在启动参数中添加selinux=0,关闭SELinux功能,系统即可正常启动。 diff --git a/content/zh/docs/Virtualization/figures/zh-cn_image_0218587435.png b/docs/zh/docs/SecHarden/figures/zh-cn_image_0221925211.png similarity index 100% rename from content/zh/docs/Virtualization/figures/zh-cn_image_0218587435.png rename to docs/zh/docs/SecHarden/figures/zh-cn_image_0221925211.png diff --git a/content/zh/docs/Virtualization/figures/zh-cn_image_0218587436.png b/docs/zh/docs/SecHarden/figures/zh-cn_image_0221925212.png similarity index 100% rename from content/zh/docs/Virtualization/figures/zh-cn_image_0218587436.png rename to docs/zh/docs/SecHarden/figures/zh-cn_image_0221925212.png diff --git a/docs/zh/docs/SecHarden/public_sys-resources/icon-caution.gif b/docs/zh/docs/SecHarden/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/docs/SecHarden/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/docs/SecHarden/public_sys-resources/icon-danger.gif b/docs/zh/docs/SecHarden/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/docs/SecHarden/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/docs/SecHarden/public_sys-resources/icon-note.gif b/docs/zh/docs/SecHarden/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/docs/SecHarden/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/docs/SecHarden/public_sys-resources/icon-notice.gif b/docs/zh/docs/SecHarden/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/docs/SecHarden/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/docs/SecHarden/public_sys-resources/icon-tip.gif b/docs/zh/docs/SecHarden/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/docs/SecHarden/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/docs/SecHarden/public_sys-resources/icon-warning.gif b/docs/zh/docs/SecHarden/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/docs/SecHarden/public_sys-resources/icon-warning.gif differ diff --git a/docs/zh/docs/SecHarden/secHarden.md b/docs/zh/docs/SecHarden/secHarden.md new file mode 100644 index 0000000000000000000000000000000000000000..c600efce0c96f2ab49969d3a0ee47160acdf02c9 --- /dev/null +++ b/docs/zh/docs/SecHarden/secHarden.md @@ -0,0 +1,5 @@ +# 安全加固指南 + +本文档给出openEuler的加固介绍和加固方法,指导用户进行安全加固。 + +本文档主要适用于需要对openEuler进行安全加固的管理员。管理员需要熟悉操作系统安全架构和安全技术。 \ No newline at end of file diff --git "a/docs/zh/docs/SecHarden/\345\206\205\346\240\270\345\217\202\346\225\260.md" "b/docs/zh/docs/SecHarden/\345\206\205\346\240\270\345\217\202\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..c5627ac31c1e94616c3564508a54df4d9fa3b8a7 --- /dev/null +++ "b/docs/zh/docs/SecHarden/\345\206\205\346\240\270\345\217\202\346\225\260.md" @@ -0,0 +1,230 @@ +# 内核参数 + +- [内核参数](#内核参数) + - [加固内核参数](#加固内核参数) + + + +## 加固内核参数 + +### 说明 + +内核参数决定配置和应用特权的状态。内核提供用户可配置的系统控制,这一系统控制可微调或配置,该功能特性可通过控制各种可配置的内核参数,来提高操作系统的安全特性。比如:通过微调或配置网络选项,可有效提高系统的安全性。 + +### 实现 + +1. 将[表3](#zh-cn_topic_0152100187_t69b5423c26644b26abe94d88d38878eb)中的加固项写入/etc/sysctl.conf文件中。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >写入方式如下: + >``` + >net.ipv4.icmp_echo_ignore_broadcasts = 1 + >net.ipv4.conf.all.rp_filter = 1 + >net.ipv4.conf.default.rp_filter = 1 + >``` + + **表 3** 内核参数加固策略说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

加固项

+

加固项说明

+

加固建议

+

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

+

net.ipv4.icmp_echo_ignore_broadcasts

+

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

+

1

+

+

net.ipv4.conf.all.rp_filter

+

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

+

1

+

+

net.ipv4.conf.default.rp_filter

+

1

+

+

net.ipv4.ip_forward

+

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

+

0

+

+

net.ipv4.conf.all.accept_source_route

+

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

+

0

+

+

net.ipv4.conf.default.accept_source_route

+

0

+

+

net.ipv4.conf.all.accept_redirects

+

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

+

0

+

+

net.ipv4.conf.default.accept_redirects

+

0

+

+

net.ipv6.conf.all.accept_redirects

+

0

+

+

net.ipv6.conf.default.accept_redirects

+

0

+

+

net.ipv4.conf.all.send_redirects

+

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

+

0

+

+

net.ipv4.conf.default.send_redirects

+

0

+

+

net.ipv4.icmp_ignore_bogus_error_responses

+

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

+

1

+

+

net.ipv4.tcp_syncookies

+

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

+

1

+

+

kernel.dmesg_restrict

+

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

+

1

+

+

kernel.sched_autogroup_enabled

+

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

+

0

+

+

kernel.sysrq

+

禁用魔术键。

+
说明:

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

+
+

0

+

+

net.ipv4.conf.all.secure_redirects

+

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

+

0

+

+

net.ipv4.conf.default.secure_redirects

+

0

+

+
+ +2. 加载sysctl.conf文件中设置的内核参数。 + + ``` + sysctl -p /etc/sysctl.conf + ``` + + +### 其它安全建议 + +- net.ipv4.icmp\_echo\_ignore\_all:忽略ICMP请求。 + + 出于安全考虑,建议开启此项(当前默认值为0,开启将值设为1)。 + + 但开启后会忽略所有接收到的icmp echo请求的包\(会导致机器无法ping通\),建议用户根据实际组网场景决定是否开启此项。 + +- net.ipv4.conf.all.log\_martians/net.ipv4.conf.default.log\_martians:对于仿冒/源路由/重定向数据包开启日志记录。 + + 出于安全考虑,建议开启此项(当前默认值为0,开启将值设为1)。 + + 但是开启后会记录带有不允许的地址的数据到内核日志中,存在冲日志风险,建议用户根据实际使用场景决定是否开启此项。 + +- net.ipv4.tcp\_timestamps:关闭tcp\_timestamps。 + + 出于安全考虑,建议关闭tcp\_timestamps(当前默认值为1,关闭将值设为0)。 + + 但是关闭此项会影响TCP超时重发的性能,建议用户根据实际使用场景决定是否关闭此项。 + +- net.ipv4.tcp\_max\_syn\_backlog:决定了SYN\_RECV状态队列的数量。 + + 该参数决定了SYN\_RECV状态队列的数量,超过这个数量,系统将不再接受新的TCP连接请求,一定程度上可以防止系统资源耗尽。建议由用户根据实际使用场景配置合适的值。 \ No newline at end of file diff --git "a/docs/zh/docs/SecHarden/\345\212\240\345\233\272\346\214\207\345\257\274.md" "b/docs/zh/docs/SecHarden/\345\212\240\345\233\272\346\214\207\345\257\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..b2a8312d288f8bba8cd72b1239b61126b0875887 --- /dev/null +++ "b/docs/zh/docs/SecHarden/\345\212\240\345\233\272\346\214\207\345\257\274.md" @@ -0,0 +1,5 @@ +# 加固指导 + +用户可以通过修改加固策略配置文件或加固脚本进行系统加固。本节介绍各加固项的含义以及openEuler是否已默认加固,并给出加固方法,指导用户进行安全加固。 + + diff --git "a/docs/zh/docs/SecHarden/\345\256\211\345\205\250\345\212\240\345\233\272\345\267\245\345\205\267.md" "b/docs/zh/docs/SecHarden/\345\256\211\345\205\250\345\212\240\345\233\272\345\267\245\345\205\267.md" new file mode 100644 index 0000000000000000000000000000000000000000..6668e941e94a5aa901447a475a99cd7635b85765 --- /dev/null +++ "b/docs/zh/docs/SecHarden/\345\256\211\345\205\250\345\212\240\345\233\272\345\267\245\345\205\267.md" @@ -0,0 +1,131 @@ +# 安全加固工具 + + +- [安全加固工具](#安全加固工具) + - [加固操作](#加固操作) + - [加固生效](#加固生效) + + +## 加固操作 + +### 概述 + +安全加固工具会根据usr-security.conf设置加固策略,使用加固工具设置加固策略需要用户修改usr-security.conf。本节介绍usr-security.conf的修改规则。用户可配置的加固项请参见[加固指导](https://openeuler.org/zh/docs/20.03_LTS/docs/SecHarden/%E5%8A%A0%E5%9B%BA%E6%8C%87%E5%AF%BC.html)对应内容。 + +### 注意事项 + +- 修改配置后,需要重启安全加固服务使配置生效。重启方法请参见[加固生效](#加固生效)对应内容。 +- 用户修改加固配置时,仅修改/etc/openEuler\_security/usr-security.conf文件,不建议修改/etc/openEuler\_security/security.conf。security.conf中为基本加固项,仅运行一次。 +- 当重启安全加固服务使配置生效后,在usr-security.conf中删除对应加固项并重启安全加固服务并不能清除之前的配置。 +- 安全加固操作记录在日志文件/var/log/openEuler-security.log中。 + +### 配置格式 + +usr-security.conf中的每一行代表一项配置,根据配置内容的不同有不同配置格式,这里给出各类配置的格式说明。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>- 所有配置项以执行ID开头,执行ID仅为了方便用户识别配置内容,取值为正整数,由用户自行定义。 +>- 配置项的各内容之间使用@作为分隔符。 +>- 若实际配置内容中包含@,需要使用@@表示以和分隔符区分,例如实际内容为xxx@yyy,则配置为xxx@@yyy。目前不支持@位于配置内容的开头和结尾。 + +- d:注释 + + 格式:执行ID@d@对象文件@匹配项 + + 功能:将对象文件中以匹配项开头(行首可以有空格)的行注释(在行首添加\#)。 + + 示例:执行ID为401,注释/etc/sudoers文件中以%wheel开头的行。 + + ``` + 401@d@/etc/sudoers@%wheel + ``` + + +- m:替换 + + 格式:执行ID@m@对象文件@匹配项@替换目标值 + + 功能:将对象文件中以匹配项开头(行首可以有空格)的行替换为“匹配项加替换目标值 ”。若匹配行开头有空格,替换后将删除这些空格。 + + 示例:执行ID为101,将/etc/ssh/sshd\_config文件中以Protocol 开头的行替换为Protocol 2。匹配和替换时也会考虑Protocol后的空格。 + + ``` + 101@m@/etc/ssh/sshd_config@Protocol @2 + ``` + +- sm:精确修改 + + 格式:执行ID@sm@对象文件@匹配项@替换目标值 + + 功能:将对象文件中以匹配项开头(行首可以有空格)的行替换为“匹配项加替换目标值 ”。若匹配行开头有空格,替换后将保留这些空格,这是sm和m的区别。 + + 示例:执行ID为201,将/etc/audit/hzqtest文件中以size开头的行替换为size 2048。 + + ``` + 201@sm@/etc/audit/hzqtest@size@ 2048 + ``` + + +- M:修改子项 + + 格式:执行ID@M@对象文件@匹配项@匹配子项\[@匹配子项的值\] + + 功能:匹配对象文件中以匹配项开头(行首可以有空格)的行,并将该行中以匹配子项开始的内容替换为“匹配子项和匹配子项的值”,其中匹配子项的值可选。 + + 示例:执行ID为101,找到file文件中以key开头的行,并将这些行中以key2开始的内容替换为key2value2。 + + ``` + 101@M@file@key@key2@value2 + ``` + +- systemctl:管理服务 + + 格式:执行ID@systemctl@对象服务@具体操作 + + 功能:使用systemctl管理对象服务,具体操作可取值为start、stop、restart、disable等systemctl所有可用的命令。 + + 示例:执行ID为218,停止cups.service服务,等同于systemctl stop cups.service的配置行。 + + ``` + 218@systemctl@cups.service@stop + ``` + +- 其他命令 + + 格式:执行ID@命令@对象文件 + + 功能:执行对应命令,即执行命令行“命令 对象文件”。 + + 示例一:执行ID为402,使用rm -f命令删除文件/etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem。 + + ``` + 402@rm -f @/etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem + ``` + + 示例二:执行ID为215,使用touch命令创建文件/etc/cron.allow。 + + ``` + 215@touch @/etc/cron.allow + ``` + + 示例三:执行ID为214,使用chown命令将文件/etc/at.allow的属主改为root:root。 + + ``` + 214@chown root:root @/etc/at.allow + ``` + + 示例四:执行ID为214,使用chmod命令去除文件/etc/at.allow属主所在群组及其他非属主用户的rwx权限。 + + ``` + 214@chmod og-rwx @/etc/at.allow + ``` + + +## 加固生效 + +完成修改usr-security.conf文件后,请运行如下命令使新添加的配置生效。 + +``` +systemctl restart openEuler-security.service +``` + diff --git "a/docs/zh/docs/SecHarden/\346\216\210\346\235\203\350\256\244\350\257\201.md" "b/docs/zh/docs/SecHarden/\346\216\210\346\235\203\350\256\244\350\257\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..5220419c23c2387e4975222aa85bbfd2f3c266c5 --- /dev/null +++ "b/docs/zh/docs/SecHarden/\346\216\210\346\235\203\350\256\244\350\257\201.md" @@ -0,0 +1,155 @@ +# 授权认证 + +- [授权认证](#授权认证) + - [设置网络远程登录的警告信息](#设置网络远程登录的警告信息) + - [禁止通过Ctrl+Alt+Del重启系统](#禁止通过Ctrl+Alt+Del重启系统) + - [设置终端的自动退出时间](#设置终端的自动退出时间) + - [设置用户的默认umask值为077](#设置用户的默认umask值为077) + - [设置GRUB2加密口令](#设置GRUB2加密口令) + - [安全单用户模式](#安全单用户模式) + - [禁止交互式启动](#禁止交互式启动) + + +## 设置网络远程登录的警告信息 + +### 说明 + +设置网络远程登录的警告信息,用于在登录进入系统之前向用户提示警告信息,明示非法侵入系统可能受到的惩罚,吓阻潜在的攻击者。同时也可以隐藏系统架构及其他系统信息,避免招致对系统的目标性攻击。 + +### 实现 + +该设置可以通过修改/etc/issue.net文件的内容实现。将/etc/issue.net文件原有内容替换为如下信息(openEuler默认已设置): + +``` +Authorized users only. All activities may be monitored and reported. +``` + +## 禁止通过Ctrl+Alt+Del重启系统 + +### 说明 + +操作系统默认能够通过“Ctrl+Alt+Del”进行重启,禁止该项特性可以防止因为误操作而导致数据丢失。 + +### 实现 + +禁止通过“Ctrl+Alt+Del”重启系统的操作步骤如下: + +1. 删除两个ctrl-alt-del.target文件,参考命令如下: + + ``` + rm -f /etc/systemd/system/ctrl-alt-del.target + rm -f /usr/lib/systemd/system/ctrl-alt-del.target + ``` + +2. 修改/etc/systemd/system.conf文件,将\#CtrlAltDelBurstAction=reboot-force修改为CtrlAltDelBurstAction=none。 +3. 重启systemd,使修改生效,参考命令如下: + + ``` + systemctl daemon-reexec + ``` + +## 设置终端的自动退出时间 + +### 说明 + +无人看管的终端容易被侦听或被攻击,可能会危及系统安全。因此需要终端在停止运行一段时间后能够自动退出。 + +### 实现 + +自动退出时间由/etc/profile文件的TMOUT字段(单位为秒)控制,在/etc/profile的尾部添加如下配置: + +``` +export TMOUT=300 +``` + +## 设置用户的默认umask值为077 + +### 说明 + +umask值用于为用户新创建的文件和目录设置缺省权限。如果umask的值设置过小,会使群组用户或其他用户的权限过大,给系统带来安全威胁。因此设置所有用户默认的umask值为0077,即用户创建的目录默认权限为700,文件的默认权限为600。umask值代表的是权限的“补码”,umask值和权限的换算方法请参见[umask值含义](#umask值含义)。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>openEuler默认已设置用户的默认umask值为022。 + +### 实现 + +1. 分别在/etc/bashrc文件和/etc/profile.d/目录下的所有文件中加入“umask 0077”。 + + ``` + echo "umask 0077" >> $FILE + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >_$FILE_ 为具体的文件名,例如:echo "umask 0077" \>\> /etc/bashrc + +2. 设置/etc/bashrc文件和/etc/profile.d/目录下所有文件的属主为root,群组为root。 + + ``` + chown root.root $FILE + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >_$FILE_ 为具体的文件名,例如:chown root.root /etc/bashrc + + +## 设置GRUB2加密口令 + +### 说明 + +GRUB是GRand UnifiedBootloader的缩写,它是一个操作系统启动管理器,用来引导不同系统(如Windows、Linux),GRUB2是GRUB的升级版。 + +系统启动时,可以通过GRUB2界面修改系统的启动参数。为了确保系统的启动参数不被任意修改,需要对GRUB2界面进行加密,仅在输入正确的GRUB2口令时才能修改启动参数。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>GRUB2默认设置的口令为openEuler\#12,建议用户首次登录时修改默认密码并定期更新,避免密码泄露后,启动选项被篡改,导致系统启动异常。 + +### 实现 + +1. 使用grub2-mkpasswd-pbkdf2命令生成加密的口令 + + >![](public_sys-resources/icon-note.gif) **说明:** + >GRUB2加密算法使用sha512。 + + ``` + # grub2-mkpasswd-pbkdf2 + Enter password: + Reenter password: + PBKDF2 hash of your password is + grub.pbkdf2.sha512.10000.5A45748D892672FDA02DD3B6F7AE390AC6E6D532A600D4AC477D25C7D087644697D8A0894DFED9D86DC2A27F4E01D925C46417A225FC099C12DBD3D7D49A7425.2BD2F5BF4907DCC389CC5D165DB85CC3E2C94C8F9A30B01DACAA9CD552B731BA1DD3B7CC2C765704D55B8CD962D2AEF19A753CBE9B8464E2B1EB39A3BB4EAB08 + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >在Enter password和Reenter password输入相同的口令。 + >grub.pbkdf2.sha512.10000.5A45748D892672FDA02DD3B6F7AE390AC6E6D532A600D4AC477D25C7D087644697D8A0894DFED9D86DC2A27F4E01D925C46417A225FC099C12DBD3D7D49A7425.2BD2F5BF4907DCC389CC5D165DB85CC3E2C94C8F9A30B01DACAA9CD552B731BA1DD3B7CC2C765704D55B8CD962D2AEF19A753CBE9B8464E2B1EB39A3BB4EAB08为openEuler\#12经过grub2-mkpasswd-pbkdf2加密后的输出,每次输出的密文不同。 + +2. 使用vi工具打开/boot/efi/EFI/openEuler/grub.cfg的开始位置追加如下字段: + + ``` + set superusers="root" + password_pbkdf2 root grub.pbkdf2.sha512.10000.5A45748D892672FDA02DD3B6F7AE390AC6E6D532A600D4AC477D25C7D087644697D8A0894DFED9D86DC2A27F4E01D925C46417A225FC099C12DBD3D7D49A7425.2BD2F5BF4907DCC389CC5D165DB85CC3E2C94C8F9A30B01DACAA9CD552B731BA1DD3B7CC2C765704D55B8CD962D2AEF19A753CBE9B8464E2B1EB39A3BB4EAB08 + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >- superusers字段用于设置GRUB2的超级管理员的账户名。 + >- password\_pbkdf2字段后的参数,第1个参数为GRUB2的账户名,第2个为该账户的加密口令。 + + +## 安全单用户模式 + +### 说明 + +单用户模式是以root权限进入系统,如不设置密码,将存在较大安全隐患。 + +### 实现 + +该设置可以通过修改/etc/sysconfig/init文件内容实现。将SINGLE选项配置为SINGLE=/sbin/sulogin。 + +## 禁止交互式启动 + +### 说明 + +使用交互式引导,控制台用户可以禁用审计、防火墙或其他服务,削弱了系统安全性。用户可以禁止使用交互式引导,提升安全性。openEuler默认已禁止。 + +### 实现 + +该设置可以通过修改/etc/sysconfig/init文件内容实现。将PROMPT选项配置为PROMPT=no。 \ No newline at end of file diff --git "a/docs/zh/docs/SecHarden/\346\223\215\344\275\234\347\263\273\347\273\237\345\212\240\345\233\272\346\246\202\350\277\260.md" "b/docs/zh/docs/SecHarden/\346\223\215\344\275\234\347\263\273\347\273\237\345\212\240\345\233\272\346\246\202\350\277\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..a107aefc61f960ff8fad2264186149bdf6a58d94 --- /dev/null +++ "b/docs/zh/docs/SecHarden/\346\223\215\344\275\234\347\263\273\347\273\237\345\212\240\345\233\272\346\246\202\350\277\260.md" @@ -0,0 +1,137 @@ + +# 操作系统加固概述 + +介绍对openEuler系统进行加固的目的和加固方案。 + + +- [操作系统加固概述](#操作系统加固概述) + - [加固目的](#加固目的) + - [加固方案](#加固方案) + - [加固影响](#加固影响) + + + +## 须知 + +由于安全加固对系统至关重要,因此只有root用户允许修改并应用安全加固策略。 + +## 加固目的 + +操作系统作为信息系统的核心,承担着管理硬件资源和软件资源的重任,是整个信息系统安全的基础。操作系统之上的各种应用,要想获得信息的完整性、机密性、可用性和可控性,必须依赖于操作系统。脱离了对操作系统的安全保护,仅依靠其他层面的防护手段来阻止黑客和病毒等对网络信息系统的攻击,是无法满足安全需求的。 + +因此,需要对操作系统进行安全加固,构建动态、完整的安全体系,增强产品的安全性,提升产品的竞争力。 + +## 加固方案 + +本章描述openEuler的安全加固方案,包括加固方式和加固内容。 + +### 加固方式 + +用户可以通过手动修改加固配置或执行相关命令对系统进行加固,也可以通过加固工具批量修改加固项。openEuler的安全加固工具security tool以openEuler-security.service服务的形式运行。系统首次启动时会自动运行该服务去执行默认加固策略,且自动设置后续开机不启动该服务。 + +用户可以通过修改security.conf,使用安全加固工具实现个性化安全加固的效果。 + +### 加固内容 + +openEuler系统加固内容主要分为以下5个部分: + +- 系统服务 +- 文件权限 +- 内核参数 +- 授权认证 +- 账号口令 + +## 加固影响 + +对文件权限、账户口令等安全加固,可能造成用户使用习惯变更,从而影响系统的易用性。影响系统易用性的常见加固项请参见[表1](#zh-cn_topic_0152100325_ta4a48f54ff2849ada7845e2380209917)。 + +**表 1** 加固影响说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

加固项

+

建议加固

+

易用性影响

+

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

+

字符界面等待超时限制

+

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

+
说明:

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

+
+

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

+

+

口令复杂度限制

+

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

+

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

+

+

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

+

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

+

用户不能随意登录系统,账户被锁定后必须等待60秒。

+

+

用户默认umask值限制

+

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

+

用户需要按照需求修改指定文件或目录的权限。

+

+

口令有效期

+

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

+

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

+

+

su权限限制

+

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

+

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

+

+

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

+

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

+

用户需要先使用普通账户SSH登录后,再切换至root账户。

+

+

SSH强加密算法

+

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

+

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

+

+
+ diff --git "a/docs/zh/docs/SecHarden/\346\226\207\344\273\266\346\235\203\351\231\220.md" "b/docs/zh/docs/SecHarden/\346\226\207\344\273\266\346\235\203\351\231\220.md" new file mode 100644 index 0000000000000000000000000000000000000000..4d22db6425da5679de784d5d0cb2a6f3fddd0bdf --- /dev/null +++ "b/docs/zh/docs/SecHarden/\346\226\207\344\273\266\346\235\203\351\231\220.md" @@ -0,0 +1,240 @@ +# 文件权限 + +- [文件权限](#文件权限) + - [设置文件的权限和属主](#设置文件的权限和属主) + - [删除无主文件](#删除无主文件) + - [处理空链接文件](#处理空链接文件) + - [设置守护进程的umask值](#设置守护进程的umask值) + - [为全局可写目录添加粘滞位属性](#为全局可写目录添加粘滞位属性) + - [删除非授权文件的全局可写属性](#删除非授权文件的全局可写属性) + - [限制at命令的使用权限](#限制at命令的使用权限) + - [限制cron命令的使用权限](#限制cron命令的使用权限) + - [限制sudo命令的使用权限](#限制sudo命令的使用权限) + + + +## 设置文件的权限和属主 + +### 说明 + +Linux将所有对象都当作文件来处理,即使一个目录也被看作是包含有多个其他文件的大文件。因此,Linux中最重要的就是文件和目录的安全性。文件和目录的安全性主要通过权限和属主来保证。 + +openEuler默认对系统中的常用目录、可执行文件和配置文件设置了权限和属主。 + +### 实现 + +以/bin目录为例,修改文件权限和文件属主的操作如下: + +- 修改文件权限。例如将/bin目录权限设置为755。 + + ``` + chmod 755 /bin + ``` + +- 修改文件属主。例如将/bin目录的拥有者和群组设置为root:root。 + + ``` + chown root:root /bin + ``` + + +## 删除无主文件 + +### 说明 + +系统管理员在删除用户/群组时,存在着忘记删除该用户/该群组所拥有文件的问题。如果后续新创建的用户/群组与被删除的用户/群组同名,则新用户/新群组会拥有部分不属于其权限的文件,建议将此类文件删除。 + +### 实现 + +删除用户ID不存在的文件 + +1. 查找用户ID不存在的文件。 + + ``` + find / -nouser + ``` + +2. 删除查找到的文件。其中 filename 为用户ID不存在文件的文件名。 + + ``` + rm -f filename + ``` + + +删除群组ID不存在的文件 + +1. 查找群主ID不存在的文件。 + + ``` + find / -nogroup + ``` + +2. 删除查找到的文件。其中 filename 为用户ID不存在文件的文件名。 + + ``` + rm -f filename + ``` + + +## 处理空链接文件 + +### 说明 + +无指向的空链接文件,可能会被恶意用户利用,影响系统安全性。建议用户删除无效的空链接文件,提高系统安全性。 + +### 特殊场景 + +openEuler系统安装完成后,可能存在空链接文件,这些空链接文件可能有对应用途(有些空链接文件是预制的,会被其他组件依赖)。请用户根据实际环境进行处理,处理方式请参见[实现](#zh-cn_topic_0152100319_s1b24647cdd834a8eaca3032611baf072)。 + +例如,openEuler支持UEFI和legacy BIOS两种安装模式,两种引导场景支持的grub相关包默认都安装,当用户选择legacy BIOS模式安装时,形成空链接文件“/etc/grub2-efi.cfg”;当用户选择UEFI模式安装时,会形成空链接文件“/etc/grub2.cfg”,需要用户根据实际情况处理空链接。 + +### 实现 + +1. 通过如下命令查找系统中的空链接文件。 + + ``` + find dirname -type l -follow 2>/dev/null + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + > dirname为搜索目录的名称,通常需要关注系统关键目录:/bin、/boot、/usr、/lib64、/lib、/var等。 + +2. 如果此类文件无实际作用,可通过如下命令删除。 + + ``` + rm -f filename + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >filename为[步骤1](#zh-cn_topic_0152100319_l4dc74664c4fb400aaf91fb314c4f9da6)找出的文件名。 + + +## 设置守护进程的umask值 + +### 说明 + +umask值用来为新创建的文件和目录设置缺省权限。如果没有设定umask值,则生成的文件具有全局可写权限,存在一定的风险。守护进程负责系统上某个服务,让系统可以接受来自用户或者是网络客户的要求。为了提高守护进程所创建文件和目录的安全性,建议设置其umask值为0027。umask值代表的是权限的“补码”,umask值和权限的换算方法请参见 "附录 > umask值含义" 。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>openEuler默认已设置守护进程的umask值为0022。 + +### 实现 + +在配置文件/etc/sysconfig/init中新增一行:umask 0027。 + +## 为全局可写目录添加粘滞位属性 + +### 说明 + +任意用户可以删除、修改全局可写目录中的文件和目录,为了确保全局可写目录中的文件和目录不会被任意删除,需要为全局可写目录添加粘滞位属性。 + +### 实现 + +1. 搜索全局可写目录。 + + ``` + find / -type d -perm -0002 ! -perm -1000 -ls | grep -v proc + ``` + +2. 为全局可写目录添加粘滞位属性。dirname 为实际查找到的目录名。 + + ``` + chmod +t dirname + ``` + + +## 删除非授权文件的全局可写属性 + +### 说明 + +全局可写文件可被系统中的任意用户修改,影响系统完整性。 + +### 实现 + +1. 列举系统中所有的全局可写文件。 + + ``` + find / -type d ( -perm -o+w ) | grep -v proc + find / -type f ( -perm -o+w ) | grep -v proc + ``` + +2. 查看步骤1列举的所有文件\(粘滞位位的文件和目录可以排除在外\),删除文件或去掉其全局可写权限。使用以下命令去掉权限,其中filename为对应文件名: + + ``` + chmod o-w filename + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >可通过如下命令确定对应文件或目录是否设置了粘滞位,若回显中包含T标记,则为粘滞位文件或目录。命令中的filename为需要查询文件或目录的名称。 + >``` + >ls -l filename + >``` + + +## 限制at命令的使用权限 + +### 说明 + +at命令用于创建在指定时间自动执行的任务。为避免任意用户通过at命令安排工作,造成系统易受攻击,需要指定可使用该命令的用户。 + +### 实现 + +1. 删除/etc/at.deny文件。 + + ``` + rm -f /etc/at.deny + ``` + +2. 将/etc/at.allow的文件属主改为root:root。 + + ``` + chown root:root /etc/at.allow + ``` + +3. 控制/etc/at.allow的文件权限,仅root可操作。 + + ``` + chmod og-rwx /etc/at.allow + ``` + + +## 限制cron命令的使用权限 + +### 说明 + +cron命令用于创建例行性任务。为避免任意用户通过cron命令安排工作,造成系统易受攻击,需要指定可使用该命令的用户。 + +### 实现 + +1. 删除/etc/cron.deny文件。 + + ``` + rm -f /etc/cron.deny + ``` + +2. 将/etc/cron.allow的文件属主改为root:root。 + + ``` + chown root:root /etc/cron.allow + ``` + +3. 控制/etc/cron.allow的文件权限,仅root可操作。 + + ``` + chmod og-rwx /etc/cron.allow + ``` + + +## 限制sudo命令的使用权限 + +### 说明 + +sudo命令用于普通用户以root权限执行命令。为了增强系统安全性,有必要对sudo命令的使用权进行控制,只允许root使用sudo命令,限制其他帐户使用。openEuler默认未限制非root用户使用sudo命令的权限。 + +### 实现 + +sudo命令的使用控制通过修改/etc/sudoers文件实现,需要注释掉如下配置行: + +``` +#%wheel ALL=(ALL) ALL +``` diff --git "a/docs/zh/docs/SecHarden/\347\263\273\347\273\237\346\234\215\345\212\241.md" "b/docs/zh/docs/SecHarden/\347\263\273\347\273\237\346\234\215\345\212\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..59b126a5eca48472b30b0eab093ed6d0c5911200 --- /dev/null +++ "b/docs/zh/docs/SecHarden/\347\263\273\347\273\237\346\234\215\345\212\241.md" @@ -0,0 +1,467 @@ +# 系统服务 + +- [系统服务](#系统服务) + - [加固SSH服务](#加固SSH服务) + + +## 加固SSH服务 + +### 说明 + +SSH(Secure Shell)是目前较可靠,专为远程登录会话和其他网络服务提供安全性保障的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。透过SSH可以对所有传输的数据进行加密,并防止DNS欺骗和IP欺骗。OpenSSH是SSH协议的免费开源实现。 + +加固SSH服务,是指修改SSH服务中的配置来设置系统使用OpenSSH协议时的算法、认证等参数,从而提高系统的安全性。[表1](#zh-cn_topic_0152100390_ta2fdb8e4931b4c1a8f502b3c7d887b95)中详细说明了各加固项含义、建议加固值及其默认策略。 + +### 实现 + +服务端加固操作如下: + +1. 打开服务端SSH服务的配置文件/etc/ssh/sshd\_config,在该文件中修改或添加对应加固项及其加固值。 +2. 保存/etc/ssh/sshd\_config文件。 +3. 重启SSH服务,命令如下: + + ``` + systemctl restart sshd + ``` + + +客户端加固操作如下: + +1. 打开客户端SSH服务的配置文件/etc/ssh/ssh\_config,在该文件中修改或添加对应加固项及其加固值。 +2. 保存/etc/ssh/ssh\_config文件。 +3. 重启SSH服务,命令如下: + + ``` + systemctl restart sshd + ``` + + +### 加固项说明 + +- 服务端加固策略 + + SSH服务的所有加固项均保存在配置文件/etc/ssh/sshd\_config中,服务端各加固项的含义、加固建议以及openEuler默认是否已经加固为建议加固值请参见[表1](#zh-cn_topic_0152100390_ta2fdb8e4931b4c1a8f502b3c7d887b95)。 + + **表 1** SSH服务端加固项说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

加固项

+

加固项说明

+

加固建议

+

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

+

Protocol

+

设置使用SSH协议的版本

+

2

+

+

SyslogFacility

+

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

+

AUTH

+

+

LogLevel

+

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

+

VERBOSE

+

+

X11Forwarding

+

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

+

no

+

+

MaxAuthTries

+

最大认证尝试次数

+

3

+

+

PubkeyAuthentication

+

设置是否允许公钥认证。

+

yes

+

+

RSAAuthentication

+

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

+

yes

+

+

IgnoreRhosts

+

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

+

yes

+

+

RhostsRSAAuthentication

+

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

+

no

+

+

HostbasedAuthentication

+

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

+

no

+

+

PermitRootLogin

+

+

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

+
说明:

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

+
+

no

+

+

PermitEmptyPasswords

+

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

+

no

+

+

PermitUserEnvironment

+

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

+

no

+

+

Ciphers

+

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

+

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

+

+

ClientAliveCountMax

+

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

+

0

+

+

Banner

+

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

+

/etc/issue.net

+

+

MACs

+

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

+

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

+

+

StrictModes

+

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

+

yes

+

+

UsePAM

+

使用PAM登录认证

+

yes

+

+

AllowTcpForwarding

+

设置是否允许TCP转发

+

no

+

+

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

+

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

+

-l INFO -f AUTH

+

+

AllowAgentForwarding

+

设置是否允许SSH Agent转发

+

no

+

+

GatewayPorts

+

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

+

no

+

+

PermitTunnel

+

Tunnel设备是否允许使用

+

no

+

+

KexAlgorithms

+

设置SSH密钥交换算法

+

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

+
  

LoginGraceTime

+

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

+

60

+

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

加固项

+

加固项说明

+

加固建议

+

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

+

KexAlgorithms

+

设置SSH密钥交换算法

+

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

+

+

VerifyHostKeyDNS

+

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

+

ask

+

+
+ + >![](public_sys-resources/icon-note.gif) **说明:** + >对于使用dh算法进行密钥交换的第三方客户端和服务端工具,要求允许建立连接的最低长度为2048bits。 + + +### 其他安全建议 + +- SSH服务仅侦听指定IP地址 + + 出于安全考虑,建议用户在使用SSH服务时,仅在必需的IP上进行绑定侦听,而不是侦听0.0.0.0,可修改/etc/ssh/sshd\_config文件中的ListenAddress配置项。 + + 1. 打开并修改/etc/ssh/sshd\_config文件 + + ``` + vi /etc/ssh/sshd_config + ``` + + 修改内容如下,表示绑定侦听IP为 _192.168.1.100_,用户可根据实际情况修改需要侦听的IP + + ``` + ... + ListenAddress 192.168.1.100 + ... + ``` + + 2. 重启SSH服务 + + ``` + systemctl restart sshd.service + ``` + + + +- 限制SFTP用户向上跨目录访问 + + SFTP是FTP over SSH的安全FTP协议,对于访问SFTP的用户建议使用专用账号,只能上传或下载文件,不能用于SSH登录,同时对SFTP可以访问的目录进行限定,防止目录遍历攻击,具体配置如下: + + >![](public_sys-resources/icon-note.gif) **说明:** + >sftpgroup为示例用户组,sftpuser为示例用户名。 + + 1. 创建SFTP用户组 + + ``` + groupadd sftpgroup + ``` + + 2. 创建SFTP根目录 + + ``` + mkdir /sftp + ``` + + 3. 修改SFTP根目录属主和权限 + + ``` + chown root:root /sftp + chmod 755 /sftp + ``` + + 4. 创建SFTP用户 + + ``` + useradd -g sftpgroup -s /sbin/nologin sftpuser + ``` + + 5. 设置SFTP用户的口令 + + ``` + passwd sftpuser + ``` + + 6. 创建SFTP用户上传目录 + + ``` + mkdir /sftp/sftpuser + ``` + + 7. 修改SFTP用户上传目录属主和权限 + + ``` + chown root:root /sftp/sftpuser + chmod 777 /sftp/sftpuser + ``` + + 8. 修改/etc/ssh/sshd\_config文件 + + ``` + vi /etc/ssh/sshd_config + ``` + + 修改内容如下: + + ``` + #Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO -f AUTH + Subsystem sftp internal-sftp -l INFO -f AUTH + ... + + Match Group sftpgroup + ChrootDirectory /sftp/%u + ForceCommand internal-sftp + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >- %u代表当前sftp用户的用户名,这是一个通配符,用户原样输入即可。 + >- 以下内容必须加在/etc/ssh/sshd\_config文件的末尾。 + > ``` + > Match Group sftpgroup + > ChrootDirectory /sftp/%u + > ForceCommand internal-sftp + > ``` + + 9. 重启SSH服务 + + ``` + systemctl restart sshd.service + ``` + + + +- SSH远程执行命令 + + OpenSSH通用机制,在远程执行命令时,默认不开启tty,如果执行需要密码的命令,密码会明文回显。出于安全考虑,建议用户增加-t选项,确保密码输入安全。如下: + + ``` + ssh -t testuser@192.168.1.100 su + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >192.168.1.100为示例IP,testuser为示例用户。 + diff --git "a/docs/zh/docs/SecHarden/\350\264\246\346\210\267\345\217\243\344\273\244.md" "b/docs/zh/docs/SecHarden/\350\264\246\346\210\267\345\217\243\344\273\244.md" new file mode 100644 index 0000000000000000000000000000000000000000..b87327bd91dc49d349020e5211a66a37e91c31bd --- /dev/null +++ "b/docs/zh/docs/SecHarden/\350\264\246\346\210\267\345\217\243\344\273\244.md" @@ -0,0 +1,330 @@ +# 账户口令 + +- [账户口令](#账户口令) + - [屏蔽系统帐户](#屏蔽系统帐户) + - [限制使用su命令的帐户](#限制使用su命令的帐户) + - [设置口令复杂度](#设置口令复杂度) + - [设置口令有效期](#设置口令有效期) + - [设置口令的加密算法](#设置口令的加密算法) + - [登录失败超过三次后锁定](#登录失败超过三次后锁定) + - [加固su命令](#加固su命令) + + +## 屏蔽系统帐户 + +### 说明 + +除了用户帐户外,其他账号称为系统账户。系统账户仅系统内部使用,禁止用于登录系统或其他操作,因此屏蔽系统账户。 + +### 实现 + +将系统帐户的Shell修改为/sbin/nologin。 + +``` +usermod -L -s /sbin/nologin $systemaccount +``` + +>![](public_sys-resources/icon-note.gif) **说明:** +> $systemaccount 指系统帐户。 + +## 限制使用su命令的帐户 + +### 说明 + +su命令用于在不同帐户之间切换。为了增强系统安全性,有必要对su命令的使用权进行控制,只允许root和wheel群组的帐户使用su命令,限制其他帐户使用。 + +### 实现 + +su命令的使用控制通过修改/etc/pam.d/su文件实现,配置如下: + +``` +auth required pam_wheel.so use_uid +``` + +**表 1** pam\_wheel.so配置项说明 + + + + + + + + + + +

配置项

+

说明

+

use_uid

+

基于当前帐户的uid。

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

配置项

+

说明

+

minlen=8

+

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

+

minclass=3

+

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

+

ucredit=0

+

口令包含任意个大写字母

+

lcredit=0

+

口令包含任意个小写字母

+

dcredit=0

+

口令包含任意个数字

+

ocredit=0

+

口令包含任意个特殊字符

+

retry=3

+

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

+

enforce_for_root

+

本设置对root帐户同样有效

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

配置项

+

说明

+

remember=5

+

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

+

enforce_for_root

+

本设置对root帐户同样有效

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

加固项

+

加固项说明

+

建议加固

+

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

+

PASS_MAX_DAYS

+

口令最大有效期

+

90

+

+

PASS_MIN_DAYS

+

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

+

0

+

+

PASS_WARN_AGE

+

口令过期前开始提示天数

+

7

+

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

配置项

+

说明

+

sha512

+

使用sha512算法对口令加密。

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

配置项

+

说明

+

authfail

+

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

+

deny=3

+

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

+

unlock_time=300

+

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

+

even_deny_root

+

同样限制root帐户。

+
+ +## 加固su命令 + +### 说明 + +为了增强系统安全性,防止使用“su”切换用户时将当前用户环境变量带入其他环境,openEuler默认已做配置。总是在使用su切换用户时初始化PATH。 + +### 实现 + +通过修改/etc/login.defs实现,配置如下: + +``` +ALWAYS_SET_PATH=yes +``` diff --git "a/docs/zh/docs/SecHarden/\351\231\204\345\275\225.md" "b/docs/zh/docs/SecHarden/\351\231\204\345\275\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..e5711922813d45488e7fc299c724c80259caad80 --- /dev/null +++ "b/docs/zh/docs/SecHarden/\351\231\204\345\275\225.md" @@ -0,0 +1,38 @@ +# 附录 + +介绍文件权限的含义和umask值的含义。 + + + +- [附录](#附录) + - [文件和目录权限含义](#文件和目录权限含义) + - [umask值含义](#umask值含义) + + + + + +## 文件和目录权限含义 + +Linux系统中文件和目录权限用于限定谁能通过何种方式对文件和目录进行访问和操作。文件和目录的访问权限分为只读,只写和可执行三种。 + +有三种不同类型的用户可对文件和目录进行访问: + +- 文件所有者:文件的创建者。 +- 同组用户:与文件所有者在同一个属组的用户。 +- 其他用户:与文件所有者不在同一个属组的用户。 + +文件和目录的权限含义通过以下例子说明: + +假设/usr/src的权限为755,将每位数字转化为二进制后为:111101101,含义如下: + +- 左侧三个bit位111表示文件所有者的权限依次为:可读、可写、可执行。 +- 中间三个bit位101表示同组用户的权限依次为:可读、不可写、可执行。 +- 右侧三个bit位101表示其他用户的权限依次为:可读、不可写、可执行。 + +## umask值含义 + +当用户新创建文件或目录时,该文件或目录具有一个缺省权限。该缺省权限由umask值来指定。 + +umask值代表的是权限的“补码”,即用缺省最大权限值减去umask值得到实际权限值。文件的缺省最大权限为可读可写,目录的缺省最大权限为可读可写可执行。即一个文件的实际缺省权限为666减去umask值。目录的实际缺省权限为777减去umask值。 + diff --git a/docs/zh/docs/StratoVirt/StratoVirtGuide.md b/docs/zh/docs/StratoVirt/StratoVirtGuide.md new file mode 100644 index 0000000000000000000000000000000000000000..f4a7fc9fb1c17a06728a1d5f91eecee87e4e654d --- /dev/null +++ b/docs/zh/docs/StratoVirt/StratoVirtGuide.md @@ -0,0 +1,4 @@ +# StratoVirt用户指南 + +本文档介绍Stratovirt虚拟化,并给出基于openEuler安装StratoVirt的方法,以及StratoVirt虚拟化的使用指导。让用户了解Stratovirt,并指导用户和管理员安装和使用StratoVirt。 + diff --git "a/docs/zh/docs/StratoVirt/StratoVirt\344\273\213\347\273\215.md" "b/docs/zh/docs/StratoVirt/StratoVirt\344\273\213\347\273\215.md" new file mode 100644 index 0000000000000000000000000000000000000000..548d66324c717671526f06393cf3767cc0d0070a --- /dev/null +++ "b/docs/zh/docs/StratoVirt/StratoVirt\344\273\213\347\273\215.md" @@ -0,0 +1,25 @@ +# StratoVirt介绍 + + +## 概述 + +StratoVirt是计算产业中面向云数据中心的企业级虚拟化VMM(Virtual Machine Monitor),实现了一套架构统一支持虚拟机、容器、Serverless三种场景。StratoVirt在轻量低噪、软硬协同、Rust语言级安全等方面具备关键技术竞争优势。 +StratoVirt在架构设计和接口上预留了组件化拼装的能力和接口,StratoVirt可以按需灵活组装高级特性直至演化到支持标准虚拟化,在特性需求、应用场景和轻快灵巧之间找到最佳的平衡点。 + + + +## 架构说明 + +StratoVirt核心架构自顶向下分为三层: + +- OCI兼容接口:兼容QMP(QEMU Machine Protocol)协议,具有完备的OCI兼容能力。 +- BootLoader:抛弃传统BIOS+GRUB的启动模式,实现了更轻更快的Bootloader。 +- MicroVM:虚拟化层,充分利用软硬协同能力,精简化设备模型;低时延资源伸缩能力。 + +整体架构视图如**图1**所示。 + +**图1** StratoVirt整体架构图 + +![](./figures/StratoVirt_architecture.png) + + diff --git a/docs/zh/docs/StratoVirt/figures/StratoVirt_architecture.png b/docs/zh/docs/StratoVirt/figures/StratoVirt_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1a07a5458b2b2a61ca062d8ec68d533dd6df20 Binary files /dev/null and b/docs/zh/docs/StratoVirt/figures/StratoVirt_architecture.png differ diff --git a/docs/zh/docs/StratoVirt/figures/zh-cn_image_0218587436.png b/docs/zh/docs/StratoVirt/figures/zh-cn_image_0218587436.png new file mode 100644 index 0000000000000000000000000000000000000000..a32856aa08e459ed0f51f8fcf4c2f51511c12095 Binary files /dev/null and b/docs/zh/docs/StratoVirt/figures/zh-cn_image_0218587436.png differ diff --git a/docs/zh/docs/StratoVirt/figures/zh-cn_image_note.png b/docs/zh/docs/StratoVirt/figures/zh-cn_image_note.png new file mode 100644 index 0000000000000000000000000000000000000000..8d5a343524e14d11a3e2a94be4066fbb2d20599e Binary files /dev/null and b/docs/zh/docs/StratoVirt/figures/zh-cn_image_note.png differ diff --git a/docs/zh/docs/StratoVirt/figures/zh-cn_image_to_know.png b/docs/zh/docs/StratoVirt/figures/zh-cn_image_to_know.png new file mode 100644 index 0000000000000000000000000000000000000000..d245d48dc07e2b01734e21ec1952e89fa9269bdb Binary files /dev/null and b/docs/zh/docs/StratoVirt/figures/zh-cn_image_to_know.png differ diff --git a/docs/zh/docs/StratoVirt/public_sys-resources/icon-caution.gif b/docs/zh/docs/StratoVirt/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/docs/StratoVirt/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/docs/StratoVirt/public_sys-resources/icon-danger.gif b/docs/zh/docs/StratoVirt/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/docs/StratoVirt/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/docs/StratoVirt/public_sys-resources/icon-note.gif b/docs/zh/docs/StratoVirt/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/docs/StratoVirt/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/docs/StratoVirt/public_sys-resources/icon-notice.gif b/docs/zh/docs/StratoVirt/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/docs/StratoVirt/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/docs/StratoVirt/public_sys-resources/icon-tip.gif b/docs/zh/docs/StratoVirt/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/docs/StratoVirt/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/docs/StratoVirt/public_sys-resources/icon-warning.gif b/docs/zh/docs/StratoVirt/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/docs/StratoVirt/public_sys-resources/icon-warning.gif differ diff --git "a/docs/zh/docs/StratoVirt/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" "b/docs/zh/docs/StratoVirt/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..d69e2828bf95da3b1e6e24f9ca6d806c80ce3656 --- /dev/null +++ "b/docs/zh/docs/StratoVirt/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" @@ -0,0 +1,144 @@ +# 准备环境 + + +## 使用说明 + +- StratoVirt 仅支持运行于 x86_64 和 AArch64 处理器架构下并启动相同架构的 Linux 虚拟机。 +- 建议在 openEuler 20.03 LTS SP3 版本编译、调测和部署该版本 StratoVirt。 +- StratoVirt 支持以非 root 权限运行。 + +## 环境要求 + +运行StratoVirt需要具备如下环境: + +- /dev/vhost-vsock设备(用于实现mmio) +- nmap工具 +- Kernel镜像和rootfs镜像 + + + +## 准备设备和工具 + +- StratoVirt运行需要实现mmio设备,所以运行之前确保存在设备`/dev/vhost-vsock` + + 查看该设备是否存在: + + ``` + $ ls /dev/vhost-vsock + /dev/vhost-vsock + ``` + + 若该设备不存在,请执行如下命令生成/dev/vhost-vsock设备。 + + ``` + $ modprobe vhost_vsock + ``` + + +- 为了能够使用QMP命令,需要安装nmap工具,在配置yum源的前提下,可执行如下命令安装nmap。 + + ``` + # yum install nmap + ``` + +## 准备镜像 + +### 制作kernel镜像 + +当前版本的StratoVirt仅支持x86_64和AArch64平台的PE格式内核镜像。此格式内核映像可通过以下方法生成。 + +1. 获取openEuler的kernel源代码,参考命令如下: + + ``` + $ git clone https://gitee.com/openeuler/kernel + $ cd kernel + ``` + +2. 查看并切换kernel的版本到4.19,参考命令如下: + + ``` + $ git checkout kernel-4.19 + ``` + +3. 配置并编译Linux kernel。可使用推荐配置([获取配置文件](https://gitee.com/openeuler/stratovirt/tree/master/docs/kernel_config)),将其复制到kernel路径下并重命名为`.config`。也可通过以下命令进行交互,根据提示完成kernel配置。 + + ``` + $ make menuconfig + ``` + +4. 使用下面的命令制作并转换kernel镜像为PE格式,转化后的镜像为vmlinux.bin。 + + ``` + $ make -j vmlinux && objcopy -O binary vmlinux vmlinux.bin + ``` + +5. 如果想在x86平台使用bzImzge格式的kernel,可以使用如下命令进行编译。 + + ``` + $ make -j bzImage + ``` + + + ​ + +## 制作rootfs镜像 + +rootfs镜像是一种文件系统镜像,在StratoVirt启动时可以装载带有init的ext4格式的镜像。下面是制作ext4 rootfs镜像的简单方法。 + +1. 准备一个大小合适的文件(例如在/home中创建10GiB空间大小的文件)。 + + ``` + $ cd /home + $ dd if=/dev/zero of=./rootfs.ext4 bs=1G count=10 + ``` + +2. 在此文件上创建空的ext4文件系统。 + + ``` + $ mkfs.ext4 ./rootfs.ext4 + ``` + +3. 挂载文件镜像。创建/mnt/rootfs,使用root权限,将rootfs.ext4挂载到/mnt/rootfs目录。 + + ``` + $ mkdir /mnt/rootfs + # 返回刚刚创建文件系统的目录(如/home) + $ cd /home + $ sudo mount ./rootfs.ext4 /mnt/rootfs && cd /mnt/rootfs + ``` + +4. 获取对应处理器架构的最新alpine-mini rootfs。 + + + ``` + $ arch=`uname -m` + $ wget http://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/$arch/alpine- minirootfs-3.13.0-$arch.tar.gz -O alpine-minirootfs.tar.gz + $ tar -zxvf alpine-minirootfs.tar.gz + $ rm alpine-minirootfs.tar.gz + ``` + + +5. 为ext4文件镜像制作一个简单的/sbin/init,参考命令如下: + + ``` + $ rm sbin/init; touch sbin/init && cat > sbin/init < + +>![](./public_sys-resources/icon-notice.gif) **须知:** +>请根据大页使用情况,配置StratoVirt内存规格和大页。如果大页资源不足,虚拟机会启动失败。 + + + + +#### 启动StratoVirt时添加大页配置 + + + + +- 命令行 + + ``` + -mem-path /page/to/hugepages + ``` + + 其中`/page/to/hugepages`为大页文件系统挂载的目录,仅支持绝对路径。 + + +- Json文件 + + ```json + { + "machine-config": { + "mem_path": "/page/to/hugepages", + ... + }, + ... + } + ``` + + 其中`/page/to/hugepages`为大页文件系统挂载的目录,仅支持绝对路径。 + +
+ +>![](./public_sys-resources/icon-caution.gif) **注意:** +>**典型配置**:指定StratoVirt命令行中的mem-path项为:**大页文件系统挂载的目录**。 推荐使用典型配置使用StratoVirt大页特性。 + + + + +### 性能提升 + + +#### 内存底噪 + + +为了实现最佳的内存底噪,开发者可以使用stratovirt主页的wiki提供的方法进行编译与测试: + +https://gitee.com/openeuler/stratovirt/wikis/%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95-%E5%86%85%E5%AD%98%E5%BA%95%E5%99%AA?sort_id=3879743 + + +#### 冷启动时间 + +同时为了降低冷启动时间,也可以使用wiki上提供的方法进行编译测试: + +https://gitee.com/openeuler/stratovirt/wikis/%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95-%E5%86%B7%E5%90%AF%E5%8A%A8%E6%97%B6%E9%97%B4?sort_id=3879744 diff --git "a/docs/zh/docs/StratoVirt/\350\231\232\346\213\237\346\234\272\347\256\241\347\220\206.md" "b/docs/zh/docs/StratoVirt/\350\231\232\346\213\237\346\234\272\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..cd071682343790c868b3095bcbe2e933321b3673 --- /dev/null +++ "b/docs/zh/docs/StratoVirt/\350\231\232\346\213\237\346\234\272\347\256\241\347\220\206.md" @@ -0,0 +1,349 @@ +# 管理虚拟机 + + +## 概述 + +StratoVirt可以查询虚拟机信息并对虚拟机的资源和生命周期进行管理。由于StratoVirt使用QMP管理虚拟机,所以查询虚拟机信息,也需要先连接到虚拟机。 + + + +## 查询虚拟机信息 + +### 简介: + +StratoVirt可以查询虚拟机状态、vCPU拓扑信息、vCPU上线情况等。 + +### 查询状态 + +使用query-status命令查询虚拟机的运行状态。 + +- 用法: + + **{ "execute": "query-status" }** + +- 示例: + +``` +<- { "execute": "query-status" } +-> { "return": { "running": true,"singlestep": false,"status": "running" } +``` + + + +### 查询拓扑 + +使用query-cpus命令查询所有CPU的拓扑结构。 + +- 用法: + + **{ "execute": "query-cpus" }** + +- 示例: + +``` +<- { "execute": "query-cpus" } +-> {"return":[{"CPU":0,"arch":"x86","current":true,"halted":false,"props":{"core-id":0,"socket-id":0,"thread-id":0},"qom_path":"/machine/unattached/device[0]","thread_id":8439},{"CPU":1,"arch":"x86","current":true,"halted":false,"props":{"core-id":0,"socket-id":1,"thread-id":0},"qom_path":"/machine/unattached/device[1]","thread_id":8440}]} +``` + +### 查询vCPU上线情况 + +使用query-hotpluggable-cpus命令查询所有vCPU的online/offline情况。 + +- 用法: + + **{ "execute": "query-hotpluggable-cpus" }** + +- 示例: + +``` +<- { "execute": "query-hotpluggable-cpus" } +-> {"return":[{"props":{"core-id":0,"socket-id":0,"thread-id":0},"qom-path":"/machine/unattached/device[0]","type":"host-x86-cpu","vcpus-count":1},{"props":{"core-id":0,"socket-id":1,"thread-id":0},"qom-path":"/machine/unattached/device[1]","type":"host-x86-cpu","vcpus-count":1}]} +``` + +其中,online的vCPU具有`qom-path`项,offline的vCPU则没有。 + + + +## 管理虚拟机生命周期 + +### 简介 + +StratoVirt可以对虚拟机进行启动、暂停、恢复、退出等生命周期进行管理。 + +### 创建并启动虚拟机 + +根据虚拟机配置可知,可以通过命令行参数或json文件指定虚拟机配置,并在主机通过stratovirt命令创建并启动虚拟机。 + +- 使用命令行参数给出虚拟机配置,创建并启动虚拟机的命令如下: + +``` +$ /path/to/stratovirt -[参数1] [参数选项] -[参数2] [参数选项] ... +``` + + + +- 使用json文件给出虚拟机配置,创建并启动虚拟机的命令如下: + +``` +$ /path/to/stratovirt \ + -config /path/to/json \ + -api-channel unix:/path/to/socket +``` + +其中,/path/to/json为json配置文件的路径。/path/to/socket为用户指定的socket文件(如/tmp/stratovirt.socket),使用上述命令会自动创建socket文件。为确保虚拟机能够正常启动,在创建socket文件前确保该文件不存在。 + + + +> ![](./figures/zh-cn_image_0218587436.png) +> +> 虚拟机启动后,内部会有eth0和eth1两张网卡。这两张网卡预留用于网卡热插拔。热插的第一张网卡是eth0,热插的第二张网卡是eth1,目前只支持热插2张virtio-net网卡。 + + + +### 连接虚拟机 + +StratoVirt当前采用QMP管理虚拟机,暂停、恢复、退出虚拟机等操作需要通过QMP连接到虚拟机进行管理。 + +在主机上打开新的命令行窗口B,并使用root权限进行api-channel连接,参考命令如下: + +``` +# ncat -U /path/to/socket +``` + +连接建立后,会收到来自StratoVirt的问候消息,如下所示: + +``` +{"QMP":{"version":{"qemu":{"micro":1,"minor":0,"major":4},"package":""},"capabilities":[]}} +``` + +现在,可以在窗口B中输入QMP命令来管理虚拟机。 + + + +> ![](./figures/zh-cn_image_0218587436.png) +> +> QMP提供了stop、cont、quit和query-status等来管理和查询虚拟机状态。 +> +> 管理虚拟机的QMP命令均在窗口B中进行输入。符号:`<-`表示命令输入,`->`表示QMP结果返回。 + + + + + +### 暂停虚拟机 + +QMP提供了stop命令用于暂停虚拟机,即暂停虚拟机所有的vCPU。命令格式如下: + +**{"execute":"stop"}** + +**示例:** + +使用stop暂停该虚拟机的命令和回显如下: + +``` +<- {"execute":"stop"} +-> {"event":"STOP","data":{},"timestamp":{"seconds":1583908726,"microseconds":162739}} +-> {"return":{}} +``` + + + + + +### 恢复虚拟机 + +QMP提供了cont命令用于恢复处于暂停状态suspend的虚拟机,即恢复虚拟机所有vCPU的运行。命令格式如下: + +**{"execute":"cont"}** + +**示例:** + +使用cont恢复该虚拟机的命令和回显如下: + +``` +<- {"execute":"cont"} +-> {"event":"RESUME","data":{},"timestamp":{"seconds":1583908853,"microseconds":411394}} +-> {"return":{}} +``` + + + + + +### 退出虚拟机 + +QMP提供了quit命令用于退出虚拟机,即退出StratoVirt进程。命令格式如下: + +**{"execute":"quit"}** + +**示例:** + +``` +<- {"execute":"quit"} +-> {"return":{}} +-> {"event":"SHUTDOWN","data":{"guest":false,"reason":"host-qmp-quit"},"timestamp":{"ds":1590563776,"microseconds":519808}} +``` + + + +## 管理虚拟机资源 + +### 热插拔磁盘 + +StratoVirt支持在虚拟机运行过程中调整磁盘数量,即在不中断业务前提下,增加或删除虚拟机磁盘。 + +#### 热插磁盘 + +**用法:** + +``` +{"execute": "blockdev-add", "arguments": {"node-name": "drive-0", "file": {"driver": "file", "filename": "/path/to/block"}, "cache": {"direct": true}, "read-only": false}} +{"execute": "device_add", "arguments": {"id": "drive-0", "driver": "virtio-blk-mmio", "addr": "0x1"}} +``` + +**参数** + +- blockdev-add中的node-name要和device_add中的id一致,如上都是drive-0。 + +- /path/to/block是被热插磁盘的镜像路径,不能是启动rootfs的磁盘镜像。 +- 对于addr来说,它从0x0开始与虚拟机的vda映射,0x1与vdb映射,以此类推。为了兼容QMP协议,"addr"也可以用"lun"代替,但是lun=0与客户机的vdb映射。 +- 由于stratovirt支持的最大virtio-blk磁盘数量是4个,热插磁盘时请注意规格约束。 + + +**示例** + +``` +<- {"execute": "blockdev-add", "arguments": {"node-name": "drive-0", "file": {"driver": "file", "filename": "/path/to/block"}, "cache": {"direct": true}, "read-only": false}} +-> {"return": {}} +<- {"execute": "device_add", "arguments": {"id": "drive-0", "driver": "virtio-blk-mmio", "addr": "0x1"}} +-> {"return": {}} +``` + + + +#### 热拔磁盘 + +**用法:** + +**{"execute": "device_del", "arguments": {"id":"drive-0"}}** + +**参数:** + +id 为热拔磁盘的ID号。 + +**示例** + +``` +<- {"execute": "device_del", "arguments": {"id": "drive-0"}} +-> {"event":"DEVICE_DELETED","data":{"device":"drive-0","path":"drive-0"},"timestamp":{"seconds":1598513162,"microseconds":367129}} +-> {"return": {}} +``` + + + +### 热插拔网卡 + +StratoVirt支持在虚拟机运行过程中调整网卡数量,即在不中断业务前提下,给虚拟机增加或删除网卡。 + +#### 热插网卡 + +**准备工作(需要使用root权限)** + +1. 创建并启用Linux网桥,例如网桥名为 qbr0 的参考命令如下: + +```shell +# brctl addbr qbr0 +# ifconfig qbr0 up +``` + +2. 创建并启用 tap 设备,例如设备名为 tap0 的参考命令如下: + +```shell +# ip tuntap add tap0 mode tap +# ifconfig tap0 up +``` + +3. 添加 tap 设备到网桥: + +```shell +# brctl addif qbr0 tap0 +``` + + +**用法** + +``` +{"execute":"netdev_add", "arguments":{"id":"net-0", "ifname":"tap0"}} +{"execute":"device_add", "arguments":{"id":"net-0", "driver":"virtio-net-mmio", "addr":"0x0"}} +``` + +**参数** + +- netdev_add中的id应该和device_add中的id一致,ifname是后端的tap设备名称。 + +- 对于addr来说,它从0x0开始与虚拟机的eth0映射,0x1和虚拟机的eth1映射。 + +- 由于stratovirt支持的最大virtio-net数量为2个,热插网卡时请注意规格约束。 + + +**示例** + +``` +<- {"execute":"netdev_add", "arguments":{"id":"net-0", "ifname":"tap0"}} +-> {"return": {}} +<- {"execute":"device_add", "arguments":{"id":"net-0", "driver":"virtio-net-mmio", "addr":"0x0"}} +-> {"return": {}} +``` + +其中,addr:0x0,对应虚拟机内部的eth0。 + +#### 热拔网卡 + +**用法** + +**{"execute": "device_del", "arguments": {"id": "net-0"}}** + +**参数** + +id:网卡的ID号,例如net-0。 + +**示例** + +``` +<- {"execute": "device_del", "arguments": {"id": "net-0"}} +-> {"event":"DEVICE_DELETED","data":{"device":"net-0","path":"net-0"},"timestamp":{"seconds":1598513339,"microseconds":97310}} +-> {"return": {}} +``` + + + +## Ballon设备使用 + +使用balloon设备可以从虚拟机回收空闲的内存。Balloon通过qmp命令来调用。qmp命令使用如下: + +**用法:** + +``` +{"execute": "balloon", "arguments": {"value": 2147483648‬}} +``` + +**参数:** + +- value: 想要设置的guest内存大小值,单位为字节,内存压缩以页为粒度。如果该值大于虚拟机启动时配置的内存值,则以启动时配置的内存值为准。 + +**示例:** + +启动时配置的内存大小为4GiB,在虚拟机内部通过free命令查询虚拟机空闲内存大于2GiB,那么可以通过qmp命令设置guest内存大小为2147483648字节。 + +``` +<- {"execute": "balloon", "arguments": {"value": 2147483648‬}} +-> {"return": {}} +``` + +查询虚拟机的当前实际内存: + +``` +<- {"execute": "query-balloon"} +-> {"return":{"actual":2147483648}} +``` + diff --git "a/docs/zh/docs/StratoVirt/\350\231\232\346\213\237\346\234\272\351\205\215\347\275\256.md" "b/docs/zh/docs/StratoVirt/\350\231\232\346\213\237\346\234\272\351\205\215\347\275\256.md" new file mode 100644 index 0000000000000000000000000000000000000000..05699c2a0fdaf73ec7e6f71e89c0688963385bbc --- /dev/null +++ "b/docs/zh/docs/StratoVirt/\350\231\232\346\213\237\346\234\272\351\205\215\347\275\256.md" @@ -0,0 +1,542 @@ +# 虚拟机配置 + +## 基本配置 + +### 概述 + +不同于Libvirt通过xml文件配置虚拟机的方式,StratoVirt可以通过命令行参数指定配置,也可以通过json文件进行配置。配置包括虚拟机CPU、内存、磁盘等信息。这里给出两种方式的具体操作方法。 + +> ![](./figures/zh-cn_image_0218587436.png) +> +> 同时使用命令行配置和json文件配置时,以命令行配置为准。 +> +> 本文中的/path/to/socket为用户自定义路径下的socket文件。 + + + + + +### 规格说明 + +- 虚拟机CPU个数:[1, 254] +- 虚拟机内存大小:[256M, 512G] +- 虚拟机磁盘个数(包括热插的磁盘):[0, 4] +- 虚拟机网卡个数(包括热插的网卡):[0, 2] +- 虚拟机console设备仅支持单路连接 +- x86_64平台,最多可以配置11个mmio设备;但是除了磁盘和网卡,建议最多配置4个其他设备; AArch64平台,最多可以配置160个mmio设备;但是除了磁盘和网卡,建议最多配置12个其他设备。 + +### 最小配置 + +StratoVirt能够运行的最小配置为: + +- PE格式或bzImage格式(仅x86_64)的Linux内核镜像 +- 将rootfs镜像设置成virtio-blk设备,并添加到内核参数中 +- 使用api-channel来控制StratoVirt +- 如果要使用ttyS0登录,添加一个串口到启动命令行,并将ttyS0添加到内核参数中 + + + +### 命令行配置 + +**概述** + +命令行配置即通过命令行参数直接指定虚拟机配置内容。 + +**命令格式** + +使用cmdline配置的命令格式如下: + +**$ /path/to/stratovirt** *-[参数1] [参数选项] -[参数2] [参数选项] ...* + +**使用说明** + +1. 首先,为确保可以创建api-channel需要的socket,可以参考如下命令清理环境: + + ``` + $ rm [参数] [用户自定义socket文件路径] + ``` + + +2. 然后,运行cmdline命令。 + + ``` + $ /path/to/stratovirt -[参数1] [参数选项] -[参数2] [参数选项] ... + ``` + + +**参数说明** + +cmdline命令行配置参数请参见下表: + +表1 :命令行配置参数说明 + +| 参数 | 参数选项 | 说明 | +| ---------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| -name | *VMname* | 配置虚拟机名称(字符长度:1-255字符) | +| -machine | `[type=vm_type]` `[,dump-guest-core=on]` `[,mem-share=off]` | 配置虚拟机类型,[详细说明](#虚拟机类型) | +| -kernel | /path/to/vmlinux.bin | 配置内核镜像 | +| -append | console=ttyS0 root=/dev/vda reboot=k panic=1 rw | 配置内核命令行参数 | +| -initrd | /path/to/initrd.img | 配置initrd文件 | +| -smp | [cpus=]个数 | 配置cpu个数,范围[1, 254] | +| -m | 内存大小(字节单位)、内存大小M(M单位)、内存大小G(G单位) | 配置内存大小,范围[256M, 512G] | +| -drive | id=rootfs,file=/path/to/rootfs[,readonly=false,direct=true,serial=serial_num,iothread=iothread1,iops=200] | 配置virtio-blk设备,[详细说明](#磁盘配置) | +| -netdev | id=iface_id,netdev=tap0[,mac=mac_address,iothread=iothread2] | 配置virtio-net设备,[详细说明](#net配置) | +| -chardev | id=console_id,path=/path/to/socket | 配置virtio-console,[详细说明](#console) | +| -device | vsock,id=vsock_id,guest-cid=3 | 配置vhost-vsock,[详细说明](#vsock) | +| -api-channel | unix:/path/to/socket | 配置api-channel,运行前须保证socket文件不存在 | +| -serial | stdio | 配置串口设备 | +| -D | /path/to/logfile | 配置日志文件 | +| -pidfile | /path/to/pidfile | 配置pid文件,必须和-daemonize一起使用。运行前须保证pid文件不存在 | +| -disable-seccomp | NA | 关闭Seccomp,默认打开 | +| -daemonize | NA | 开启进程daemon化 | +| -iothread | id="iothread1" | 配置iothread线程,[详细说明](#iothread配置) | +| -balloon | deflate-on-oom=true | 配置balloon设备,[详细说明](#balloon配置) | +| -mem-path | /dev/hugepages | 配置内存大页,详细说明见最佳实践章节 | +| -rng | random_file=/path/to/random_file[,bytes_per_sec=1000000] | 配置virtio-rng设备,[详细说明](#rng配置) | + + + + +**配置示例** + +1. 删除socket文件,确保可以创建api-channel。 + + ``` + $ rm -f /tmp/stratovirt.socket + ``` + + +2. 运行StratoVirt。 + + ``` + $ /path/to/stratovirt \ + -kernel /path/to/vmlinux.bin \ + -append console=ttyS0 root=/dev/vda rw reboot=k panic=1 \ + -drive file=/home/rootfs.ext4,id=rootfs,readonly=false \ + -api-channel unix:/tmp/stratovirt.socket \ + -serial stdio + ``` + + 运行成功后,将根据指定的配置参数创建并启动虚拟机。 + + + +### json配置 + + + +**概述** + +使用json文件配置即在运行StratoVirt创建虚拟机时,读取给定的json文件,该文件中包含了对虚拟机的相关配置。 + +**命令格式** + +使用json文件配置虚拟机的命令格式如下,其中 /path/to/json 为对应文件的路径。 + +**$ /path/to/stratovirt -config** */path/to/json -[参数] [参数选项]* + +**使用说明** + +1. 编写json文件,将虚拟机配置写入该文件。 + +2. 执行StratoVirt创建虚拟机。 + + ``` + $ /path/to/stratovirt -config /path/to/json -[参数] [参数选项] + ``` + +**参数说明** + +json文件中可配置字段及含义请参见下表: + +**表2**:配置文件的字段 + +| 配置参数 | 配置参数选项 | 说明 | +| -------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| boot-source | "kernel_image_path": "/path/to/vmlinux.bin","boot_args": "console=ttyS0 reboot=k panic=1 pci=off tsc=reliable ipv6.disable=1 root=/dev/vda quiet","initrd_fs_path": "/path/to/initrd.img" | 配置内核镜像和内核参数, 参数`initrd_fs_path`可选。 | +| machine-config | "type": "MicroVm","vcpu_count": 4,"mem_size": 805306368,"dump_guest_core": false,"mem-share": false,"mem_path":"/path/to/backend" | 配置虚拟cpu和内存大小,参数 `dump_guest_core`,`mem-path`和 `mem-share`可选,。 | +| drive | "drive_id": "rootfs","path_on_host": "/path/to/rootfs.ext4","read_only": false,"direct": true,"serial_num": "xxxxx","iothread": "iothread1","iops": 200 | 配置virtio-blk磁盘 ,参数`serial_num`,`iothread`和`iops`可选。 | +| net | "iface_id": "net0","host_dev_name": "tap0","mac": "xx:xx:xx:xx:xx:xx","iothread": "iothread1" | 配置virtio-net网卡,参数`mac`和`iothread` 可选。 | +| console | "console_id": "charconsole0","socket_path": "/path/to/socket" | 配置virtio-console串口,运行前须保证socket文件不存在 | +| vsock | "vsock_id": "vsock0","guest_cid": 3 | 配置virtio-vsock设备 | +| serial | "stdio": true | 配置串口设备 | +| iothread | "id": "iothread1" | 配置iothread的id,用来创建名为"iothread1"的线程。 | +| balloon | "deflate_on_oom": true | 配置balloon的auto deflate特性 | +|rng | "random_file":"/dev/random","bytes_per_sec":1000000000 | 配置virtio-rng设备 | + + +使用json运行的参数请参见下表: + +表3:使用json运行的参数 + +| 参数 | 参数选项 | 说明 | +| ---------------- | -------------------- | ------------------------------------------------------------ | +| -config | /path/to/json | 配置文件的路径 | +| -api-channel | unix:/path/to/socket | 配置api-channel,运行前须保证socket文件不存在 | +| -D | /path/to/logfile | 配置日志文件 | +| -pidfile | /path/to/pidfile | 配置pid文件,必须配合daemonize使用。运行前须保证pid文件不存在 | +| -disable-seccomp | NA | 关闭Seccomp,默认打开 | +| -daemonize | NA | 开启进程daemon化 | + + + +**配置示例:** + +1. 创建json文件,例如/home/config.json,其内容如下: + +``` +{ + "boot-source": { + "kernel_image_path": "/path/to/vmlinux.bin", + "boot_args": "console=ttyS0 reboot=k panic=1 pci=off tsc=reliable ipv6.disable=1 root=/dev/vda quiet rw" + }, + "machine-config": { + "type": "MicroVm", + "vcpu_count": 2, + "mem_size": 268435456 + }, + "drive": [ + { + "drive_id": "rootfs", + "path_on_host": "/path/to/rootfs", + "serial_num": "11111111", + "direct": true, + "read_only": false, + "iops": 200000, + "iothread": "iothread2" + } + ], + "net": [ + { + "iface_id": "net0", + "host_dev_name": "tap0", + "mac": "0e:90:df:9f:a8:88", + "iothread": "iothread1" + } + ], + "console": [ + { + "console_id": "charconsole0", + "socket_path": "/path/to/console.socket" + } + ], + "serial": { + "stdio": true + }, + "vsock": { + "vsock_id": "vsock-123321132", + "guest_cid": 4 + }, + "iothread": [ + {"id": "iothread1"}, + {"id": "iothread2"} + ] +} +``` + + + +2. 运行StratoVirt,读取json文件配置创建并启动虚拟机。 + +``` +$ /path/to/stratovirt \ + -config /home/config.json \ + -api-channel unix:/tmp/stratovirt.socket +``` + +执行成功后,虚拟机创建并启动成功。 + + + +## 配置说明: + +### 虚拟机类型 + +通过-machine参数来指定启动的虚拟机的类型。 + +参数说明 + +- type:启动虚拟机的类型(当前只支持“MicroVm”类型,可选配置,默认为"MicroVM“类型)。 +- dump-guest-core:进程panic时,是否dump虚拟机内存(可选配置)。 +- mem-share:是否与其他进程共享内存(可选配置)。 + + + +### 磁盘配置 + +虚拟机磁盘配置包含以下配置项 + +- drive_id: 磁盘的id。 +- path_on_host: 磁盘的路径。 +- serial_num: 磁盘的串号(可选配置)。 +- read_only: 是否只读(可选配置)。 +- direct: 是否以“O_DIRECT”模式打开(可选配置)。 +- iothread: 配置iothread属性(可选配置)。 +- iops: 配置磁盘QoS,以限制磁盘的io操作(可选配置)。 + + + +下面对iops和iothread两个配置项进行详细说明: + +#### iops:磁盘QoS + +##### 简介 + +QoS(Quality of Service)是服务质量的意思。在云场景中,单主机内会启动多台虚拟机,当某台虚拟机对磁盘访问压力大时,由于同主机的磁盘访问总带宽有限,这会挤占其他虚拟机的访问带宽,从而造成对其他虚拟机IO影响。为了降低影响,可以为虚拟机配置QoS属性,限制它们对磁盘访问的速率,从而降低对彼此的影响。 + + + +##### 注意事项 + +- 当前QoS支持配置磁盘的iops。 +- iops的设定范围是[0, 1000000],其中0为不限速;实际iops不会超过设定值,并且不会超过后端磁盘实际性能的上限。 +- 只能限制平均iops,无法限速瞬时的突发流量。 + + + +##### 配置方式 + +用法: + +**命令行** + +``` +-drive xxx,iops=200 +``` + +参数: + +- iops:当配置了iops后,本磁盘在虚拟机内部的IO下发速度,不会超过此配置值。 +- xxx:表示磁盘的其他设置。 + +json配置 + +``` +{ + ... + "drive": [ + { + "drive_id": "rootfs", + "path_on_host": "/path/to/block", + ... + "iops": 200 + } + ], + ... +} +``` + + + +#### iothread: + +iothread配置细节见[iothread配置](#iothread配置) + + + + + +### 网卡配置 + +虚拟机网卡的配置包含以下配置项 + +- iface_id:唯一的设备id。 +- host_dev_name:host上的tap设备名。 +- mac:设置虚拟机mac地址(可选配置)。 +- iothread:配置磁盘的iothread属性(可选配置)。 + +网卡iothread配置详见[iothread配置](#iothread配置) + + + +### Console设备配置 + +virtio-console是通用的串口设备,用于guest和host之间传送数据。console设备的配置有如下配置项: + +- console_id: 唯一的设备id +- socket_path:virtio console文件路径 + +在启动stratovirt之前请确保console文件不存在。 + + + +### vsock设备配置 + +vsock也是host和guest间通信的设备,类似于console,但具有更好的性能。配置项: + +- vsock_id: 唯一的设备id。 +- guest_cid: 唯一的context id。 + + + + + +### 配置iothread + +#### 简介 + +当StratoVirt启动了带iothread配置的虚拟机后,会在主机上启动独立于主线程的单独线程,这些单独线程可以用来处理设备的IO请求,一方面提升设备的IO性能,另一方面降低对管理面消息处理的影响。 + +#### 注意事项 + +- 支持配置最多8个iothread线程 +- 支持磁盘和网卡配置iothread属性 +- iothread线程会占用主机CPU资源,在虚拟机内部大IO压力情况下,单个iothread占用的CPU资源取决于磁盘的访问速度,例如普通的SATA盘会占用20%以内CPU资源。 + + + +#### 创建iothread线程 + +用法: + +**命令行:** + +```shell +-iothread id=iothread1 -iothread id=iothread2 +``` + +**json:** + +```json +"iothread": [ + {"id": "iothread1"}, + {"id": "iothread2"} + ] +``` + +参数: + +- id:用于标识此iothread线程,该id可以被设置到磁盘或网卡的iothread属性。当启动参数配置了iothread线程信息,虚拟机启动后会在主机上启动相应id名的线程。 + + + +#### 配置磁盘或网卡的iothread属性 + +用法: + +**命令行配置** + +``` +# 磁盘 +-drive xxx,iothread=iothread1 +# 网卡 +-netdev xxx,iothread=iothread2 +``` + +​ 参数: + +1. iothread:设置成iothread线程的id,指明处理本设备IO的线程。 +2. xxx: 表示磁盘或者网卡的其他配置 + + + +**json配置** + +```json +# 磁盘 +{ + ... + "drive": [ + { + "drive_id": "rootfs", + "path_on_host": "/path/to/block", + ... + "iothread": "iothread1", + } + ], + ... +} +# 网卡 +{ + ... + "net": [ + { + "iface_id": "tap0", + "host_dev_name": "tap0", + "mac": "12:34:56:78:9A:BC", + "iothread": "iothread2" + } + ] +} +``` + + + + + +### 配置balloon设备 + +#### 简介 + +在虚拟机运行过程中,由虚拟机里的balloon驱动来动态占用或释放内存,从而动态改变这台虚拟机当前可用内存,达到内存弹性的效果。 + + + +#### 注意事项 + +- 启用balloon前须确保guest和host的页面大小相同。 +- guest内核须开启balloon特性支持。 +- 开启内存弹性时,有可能造成虚拟机内部轻微卡顿、内存性能下降。 + + + +#### 互斥特性 + +- 大页内存互斥。 +- 在x86下,由于中断数量有限,所以balloon设备和其他virtio的数量(默认使用4个block设备,2个net设备和1个串口设备)总和不得超过11个。 + + + +#### 规格 + +- 每个VM只能配置1个balloon设备。 + + + +#### 配置方式 + +- 命令行 + +``` +-balloon deflate-on-oom=true +``` + +- json文件 + + ```json + { + "balloon": { + "deflate_on_oom": true + }, + ... + } + ``` + + + +>![img](./figures/zh-cn_image_0218587436.png) + +>1. deflate-on-oom的取值为bool类型,表示是否开启auto deflate特性。开启时,如果balloon已经回收部分内存,当guest需要内存时,balloon设备会自动放气,归还内存给guest。不开启则不会自动归还。 +>2. 使用qmp命令回收虚拟机内存时,应确保回收后虚拟机仍然有足够的内存来保持最基本的运行。否则可能会出现一些操作超时,以及导致虚拟机内部无法申请到空闲内存等现象。 +>3. 如果虚拟机内部开启内存大页,balloon不能回收大页占用内存。 + + +>![](./public_sys-resources/icon-notice.gif) **须知:** +>deflate-on-oom=false时,当Guest中内存不足时,balloon不会自动放气并归还内存,可能会引起Guest内部OOM,进程被Kill,甚至虚拟机无法正常运行。 + + + + +### rng设备配置 + +virtio-rng是半虚拟化的随机数生成器设备,用于为guest提供硬件随机数生成能力。virtio-rng设备包含以下配置项: + +- random_file: 在host上用于生成随机数的字符设备路径,例如/dev/random。 +- bytes_per_sec: 每秒钟从字符设备获取随机数的字符数限制(可选配置)。 + +#### 注意事项 + +- 不配置bytes_per_sec配置项,则为不限速。 +- 如需配置,设定范围为[64, 1000000000],建议此值不应设置过小,以防获取随机数字符速率过慢。 +- bytes_per_sec只能限制平均随机数字符数,无法限制瞬间的突发流量。 +- 用户在配置virtio rng设备时,请检查熵池是否足够,以免引起虚拟机卡顿问题,例如配置字符设备路径为/dev/random,当前熵池大小可通过/proc/sys/kernel/random/entropy_avail查看。 diff --git "a/docs/zh/docs/TailorCustom/isocut\344\275\277\347\224\250\346\214\207\345\215\227.md" "b/docs/zh/docs/TailorCustom/isocut\344\275\277\347\224\250\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..27ad1109d36d81f834570b45b672d20aff5139c6 --- /dev/null +++ "b/docs/zh/docs/TailorCustom/isocut\344\275\277\347\224\250\346\214\207\345\215\227.md" @@ -0,0 +1,202 @@ +# isocut 使用指南 + +- [简介](#简介) +- [软硬件要求](#软硬件要求) +- [安装工具](#安装工具) +- [裁剪定制镜像](#裁剪定制镜像) + - [命令介绍](#命令介绍) + - [软件包来源](#软件包来源) + - [操作指导](#操作指导) + + +## 简介 +openEuler 光盘镜像较大,下载、传输镜像很耗时。另外,使用 openEuler 光盘镜像安装操作系统时,会安装镜像所包含的全量 RPM 软件包,用户无法只安装部分所需的软件包。 + +在某些场景下,用户不需要安装镜像提供的全量软件包,或者需要一些额外的软件包。因此,openEuler 提供了镜像裁剪定制工具。通过该工具,用户可以基于 openEuler 光盘镜像裁剪定制仅包含所需 RPM 软件包的 ISO 镜像。这些软件包可以来自原有 ISO 镜像,也可以额外指定,从而满足用户定制需求。 + +本文档介绍 openEuler 镜像裁剪定制工具的安装和使用方法,以指导用户更好的完成镜像裁剪定制。 + +## 软硬件要求 + +使用 openEuler 裁剪定制工具制作 ISO 所使用的机器需要满足如下软硬件要求: + +- CPU 架构为 AArch64 或者 x86_64 +- 操作系统为 openEuler 20.03 LTS SP3 +- 建议预留 30 GB 以上的磁盘空间(用于运行裁剪定制工具和存放 ISO 镜像) + +## 安装工具 + +此处以 openEuler 20.03 LTS SP3 版本的 AArch64 架构为例,介绍 ISO 镜像裁剪定制工具的安装操作。 + +1. 确认机器已安装操作系统 openEuler 20.03 LTS SP3(镜像裁剪定制工具的运行环境)。 + + ``` shell script + $ cat /etc/openEuler-release + openEuler release 20.03 (LTS-SP3) + ``` + +2. 下载对应架构的 ISO 镜像(必须是 everything 版本),并存放在任一目录(建议该目录磁盘空间大于 20 GB),此处假设存放在 /home/isocut_iso 目录。 + + AArch64 架构的镜像下载链接为: + + https://repo.openeuler.org/openEuler-20.03-LTS-SP3/ISO/aarch64/openEuler-20.03-LTS-SP3-everything-aarch64-dvd.iso + + > **说明:** + > x86_64 架构的镜像下载链接为: + > + > https://repo.openeuler.org/openEuler-20.03-LTS-SP3/ISO/x86_64/openEuler-20.03-LTS-SP3-everything-x86_64-dvd.iso + +3. 创建文件 /etc/yum.repos.d/local.repo,配置对应 yum 源。配置内容参考如下,其中 baseurl 是用于挂载 ISO 镜像的目录: + + ``` shell script + [local] + name=local + baseurl=file:///home/isocut_mount + gpgcheck=0 + enabled=1 + ``` + +4. 使用 root 权限,挂载光盘镜像到 /home/isocut_mount 目录(请与上述 repo 文件中配置的 baseurl 保持一致)作为 yum 源,参考命令如下: + + ```shell + sudo mount -o loop /home/isocut_iso/openEuler-20.03-LTS-SP3-everything-aarch64-dvd.iso /home/isocut_mount + ``` + +5. 使 yum 源生效: + + ```shell + yum clean all + yum makecache + ``` + +6. 使用 root 权限,安装镜像裁剪定制工具: + + ```shell + sudo yum install -y isocut + ``` + +7. 使用 root 权限,确认工具已安装成功。 + + ```shell + $ sudo isocut -h + Checking input ... + usage: isocut [-h] [-t temporary_path] [-r rpm_path] source_iso dest_iso + + Cut EulerOS iso to small one + + positional arguments: + source_iso source iso image + dest_iso destination iso image + + optional arguments: + -h, --help show this help message and exit + -t temporary_path temporary path + -r rpm_path extern rpm packages path + ``` + + + +## 裁剪定制镜像 + +此处介绍如何使用镜像裁剪定制工具基于 openEuler 光盘镜像裁剪或添加额外 RPM 软件包制作新镜像的方法。 + +### 命令介绍 + +#### 命令格式 + +镜像裁剪定制工具通过 isocut 命令执行功能。命令的使用格式为: + +**isocut** [ --help | -h ] [ -t <*temp_path*> ] [ -r <*rpm_path*> ] < *source_iso* > < *dest_iso* > + +#### 参数说明 + +| 参数 | 是否必选 | 参数含义 | +| ------------ | -------- | -------------------------------------------------------- | +| --help \| -h | 否 | 查询命令的帮助信息。 | +| -t <*temp_path*> | 否 | 指定工具运行的临时目录 *temp_path*,其中 *temp_path* 为绝对路径。默认为 /tmp 。 | +| -r <*rpm_path*> | 否 | 用户需要额外添加到 ISO 镜像中的 RPM 包路径。 | +| *source_iso* | 是 | 用于裁剪的 ISO 源镜像所在路径和名称。不指定路径时,默认当前路径。 | +| *dest_iso* | 是 | 裁剪定制生成的 ISO 新镜像存放路径和名称。不指定路径时,默认当前路径。 | + + + +### 软件包来源 + +新镜像的 RPM 包来源有: + +- 原有 ISO 镜像。该情况通过配置文件 /etc/isocut/rpmlist 指定需要安装的 RPM 软件包,配置格式为 "软件包名.对应架构",例如:kernel.aarch64 。 + +- 额外指定。执行 **isocut** 时使用 -r 参数指定软件包所在路径。 + + + + >![](./public_sys-resources/icon-note.gif) **说明:** + > + >- 裁剪定制镜像时,若无法找到配置文件中指定的 RPM 包,则镜像中不会添加该 RPM 包。 + >- 若 RPM 包的依赖有问题,则裁剪定制镜像时可能会报错。 + + + +### 操作指导 + + + +>![](./public_sys-resources/icon-note.gif) **说明:** +> +>- 请不要修改或删除 /etc/isocut/rpmlist 文件中的默认配置项。 +>- isocut 的所有操作需要使用 root 权限。 +>- 待裁剪的源镜像可以为基础镜像,也可以是 everything 版镜像,例子中以基础版镜像 openEuler-20.03-LTS-SP3-aarch64-dvd.iso 为例。 +>- 例子中假设新生成的镜像名称为 new.iso,且存放在 /home/result 路径;运行工具的临时目录为 /home/temp;额外的 RPM 软件包存放在 /home/rpms 目录。 + + + +1. 修改配置文件 /etc/isocut/rpmlist,指定用户需要安装的 RPM 软件包(来自原有 ISO 镜像)。 + + ``` shell script + sudo vi /etc/isocut/rpmlist + ``` + +2. 确定运行镜像裁剪定制工具的临时目录空间大于 8 GB 。默认临时目录为 /tmp,也可以使用 -t 参数指定其他目录作为临时目录,该目录必须为绝对路径。本例中使用目录 /home/temp,由如下回显可知 /home 目录可用磁盘为 38 GB,满足要求。 + + ```shell + $ df -h + Filesystem Size Used Avail Use% Mounted on + devtmpfs 1.2G 0 1.2G 0% /dev + tmpfs 1.5G 0 1.5G 0% /dev/shm + tmpfs 1.5G 23M 1.5G 2% /run + tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup + /dev/mapper/openeuler_openeuler-root 69G 2.8G 63G 5% / + /dev/sda2 976M 114M 796M 13% /boot + /dev/mapper/openeuler_openeuler-home 61G 21G 38G 35% /home + ``` + +3. 执行裁剪定制。 + + **场景一**:新镜像的所有 RPM 包来自原有 ISO 镜像 + + ``` shell script + $ sudo isocut -t /home/temp /home/isocut_iso/openEuler-20.03-LTS-SP3-aarch64-dvd.iso /home/result/new.iso + Checking input ... + Checking user ... + Checking necessary tools ... + Initing workspace ... + Copying basic part of iso image ... + Downloading rpms ... + Finish create yum conf + finished + Regenerating repodata ... + Checking rpm deps ... + Getting the description of iso image ... + Remaking iso ... + Adding checksum for iso ... + Adding sha256sum for iso ... + ISO cutout succeeded, enjoy your new image "/home/result/new.iso" + isocut.lock unlocked ... + ``` + 回显如上,说明新镜像 new.iso 定制成功。 + + **场景二**:新镜像的 RPM 包除来自原有 ISO 镜像,还包含来自 /home/rpms 的额外软件包 + + ```shell + sudo isocut -t /home/temp -r /home/rpms /home/isocut_iso/openEuler-20.03-LTS-SP3-aarch64-dvd.iso /home/result/new.iso + ``` diff --git a/docs/zh/docs/TailorCustom/overview.md b/docs/zh/docs/TailorCustom/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..a59750ba597bdf80a9c5b817c6e18f067b7d463e --- /dev/null +++ b/docs/zh/docs/TailorCustom/overview.md @@ -0,0 +1,3 @@ +# 裁剪定制工具使用指南 + +本文主要介绍 openEuler 的裁剪定制工具,包含工具的介绍、安装以及使用等内容。 \ No newline at end of file diff --git a/docs/zh/docs/TailorCustom/public_sys-resources/icon-note.gif b/docs/zh/docs/TailorCustom/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/docs/TailorCustom/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/docs/Virtualization/LibcarePlus.md b/docs/zh/docs/Virtualization/LibcarePlus.md new file mode 100644 index 0000000000000000000000000000000000000000..58f30bacc537d4bbf6fb5f4d3f476743f6ada83e --- /dev/null +++ b/docs/zh/docs/Virtualization/LibcarePlus.md @@ -0,0 +1,372 @@ +# LibcarePlus + +- [概述](#概述) +- [软硬件要求](#软硬件要求) +- [注意事项和约束](#注意事项和约束) +- [安装 LibcarePlus](#安装LibcarePlus) +- [制作 LibcarePlus 热补丁](#制作_LibcarePlus_热补丁) +- [应用 LibcarePlus 热补丁](#应用_LibcarePlus_热补丁) + +## 概述 + +LibcarePlus 是一个用户态进程热补丁框架,可以在不重启进程的情况下对 Linux 系统上运行的目标进程进行热补丁操作。热补丁可以应用于 CVE 漏洞修复,也可以应用于不中断应用服务的紧急 bug 修复。 + +## 软硬件要求 + +在 openEuler 上使用 LibcarePlus,需要满足一定的软硬件要求: + +- 当前仅支持 x86 体系架构。 + +- LibcarePlus 可以在任何支持安装 **libunwind**、 **elfutils** 以及 **binutils** 的 Linux 发行版系统上运行。但目前仅在 openEuler 20.03 LTS SP1 版本进行了验证。 + + +## 注意事项和约束 + +使用 LibcarePlus,需遵循以下热补丁规范和约束: + +- 仅支持对 C 语言编写的代码,不支持汇编语言等。 +- 仅支持用户态程序,不支持动态库打补丁。 +- 代码文件名必须符合 C 语言标识符命名规范:由字母(A-Z,a-z)、数字 (0-9)、下划线“_”组成;并且首字符不能是数字,但可以是字母或者下划线;不能包含“-”、“$”等特殊符号。 +- 不支持增量补丁,即必须卸载原有补丁才能加载第二个补丁。 +- 不支持补丁自动加载。 +- 不支持补丁查询。 +- 被打热补丁的目标函数的出参和入参不能增加和删除。 +- 静态函数补丁受限于系统中能找到该函数的符号表。 +- 动态库热补丁只能对调用这个动态库的进程打补丁。 +- 以下场景不支持热补丁: + - 死循环函数、不退出函数、inline 函数、初始化函数、NMI 中断处理函数 + - 替换全局变量 + - 修改头文件 + - 数据结构成员变化(新增、删除、修改) + - 动态库、静态函数、静态变量 + - 修改全局变量、TLS 变量、RCU 变量 + - 修改包含 __LINE__ , __FILE__ 等gcc编译宏的 C 文件 + - 修改 intel 矢量汇编指令 + + + +## 安装 LibcarePlus + +### 安装软件依赖 + +LibcarePlus 运行依赖于 **libunwind**、 **elfutils** 和 **binutils**,在配置了 yum 源的 openEuler 系统上,可以参考如下命令安装 LibcarePlus 的依赖软件。 + +``` shell +$ sudo yum install -y binutils elfutils elfutils-libelf-devel libunwind-devel +``` + +#### 安装 LibcarePlus + +```shell +$ yum install LibcarePlus -y +``` + +查看安装是否成功: + +``` shell +$ libcare-ctl -help +usage: libcare-ctl [options] [args] + +Options: + -v - verbose mode + -h - this message + +Commands: + patch - apply patch to a user-space process + unpatch- unapply patch from a user-space process + info - show info on applied patches + server - listen on a unix socket for commands +``` + +## 制作 LibcarePlus 热补丁 + +### 概述 + +LibcarePlus 支持如下方式制作热补丁: + +- 手动制作 +- 通过脚本制作 + +手动制作热补丁的过程繁琐,对于代码量较大的工程,例如QEMU,手动制作热补丁极其困难。建议使用 LibcarePlus 自带脚本一键式地生成热补丁文件。 + +#### 手动制作 + +本节以原文件 foo.c 和补丁文件 bar.c 为例,给出手动制作热补丁的指导。 + +1. 准备 C 语言编写的原文件和补丁文件。例如原文件 foo.c 和补丁文件 bar.c 。 + +
+ 点击展开 foo.c +

+ + ``` c + // foo.c + #include + #include + + void print_hello(void) + { + printf("Hello world!\n"); + } + + int main(void) + { + while (1) { + print_hello(); + sleep(1); + } + } + ``` + +

+
+ +
+ 点击展开 bar.c +

+ + ``` c + // bar.c + #include + #include + + void print_hello(void) + { + printf("Hello world %s!\n", "being patched"); + } + + int main(void) + { + while (1) { + print_hello(); + sleep(1); + } + } + ``` + +

+
+ +2. 编译得到原文件和补丁文件的汇编文件 **foo.s** 和 **bar.s**,参考命令如下: + + ``` shell + $ gcc -S foo.c + $ gcc -S bar.c + $ ls + bar.c bar.s foo.c foo.s + ``` + + +3. 使用 **kpatch_gensrc** 对比 foo.s 和 bar.s 差异,生成包含原文件的汇编内容和差异内容的 foobar.s,参考命令如下: + + ``` shell + $ sed -i 's/bar.c/foo.c/' bar.s + $ kpatch_gensrc --os=rhel6 -i foo.s -i bar.s -o foobar.s --force-global + ``` + + 由于 **kpatch_gensrc** 默认对同一 C 语言原文件进行对比,所以对比前需要使用 sed 命令将补丁汇编文件 bar.s 中的 bar.c 改为原文件名称 foo.c。随后调用 **kpatch_gensrc**,指定输入文件为 foo.s 与 bar.s,输出文件为 foobar.s。 + +4. 编译原文件的汇编文件 foo.s 和生成的汇编文件 foobar.s,得到可执行文件 foo 和 foobar,参考命令如下: + + ``` shell + $ gcc -o foo foo.s + $ gcc -o foobar foobar.s -Wl,-q + ``` + + + +5. 利用 **kpatch_strip** 去除可执行程序 foo 和 foobar 的相同内容,保留制作热补丁所需要的内容。 + + ``` shell + $ kpatch_strip --strip foobar foobar.stripped + $ kpatch_strip --rel-fixup foo foobar.stripped + $ strip --strip-unneeded foobar.stripped + $ kpatch_strip --undo-link foo foobar.stripped + ``` + + 上述命令中的各参数含义为: + + - **--strip** 用于去除 foobar 中对于补丁制作无用的 section; + - **--rel-fixup** 用于修复补丁内所访问的变量以及函数的地址; + - **strip --strip-unneeded** 用于去除对于热补丁重定位操作无用的符号信息; + - **--undo-link** 用于将补丁内符号的地址从绝对地址更改为相对地址。 + +6. 制作热补丁文件。 + + 通过以上操作,已经得到了热补丁制作所需的主要内容。接下来需要使用 **kpatch_make** 将原可执行文件的 **Build ID** 以及 **kpatch_strip** 的输出文件 **foobar.stripped** 作为参数传递给 **kpatch_make**,最终生成热补丁文件,参考命令如下: + + ``` shell + $ str=$(readelf -n foo | grep 'Build ID') + $ substr=${str##* } + $ kpatch_make -b $substr foobar.stripped -o foo.kpatch + $ ls + bar.c bar.s foo foobar foobar.s foobar.stripped foo.c foo.kpatch foo.s + ``` + + 至此,就得到了最终的热补丁文件 foo.kpatch。 + +#### 通过脚本制作 + +本节介绍如何利用 LibcarePlus 自带的 **libcare-patch-make** 脚本制作热补丁文件,仍以原文件 foo.c 和补丁文件 bar.c 为例。 + +1. 利用 diff 命令生成 foo.c 和 bar.c 的对比文件,命令如下所示: + + ``` shell + $ diff -up foo.c bar.c > foo.patch + ``` + + foo.patch 文件内容如下所示: + +
+ 点击展开 foo.patch +

+ + + ``` diff + --- foo.c 2020-12-09 15:39:51.159632075 +0800 + +++ bar.c 2020-12-09 15:40:03.818632220 +0800 + @@ -1,10 +1,10 @@ + -// foo.c + +// bar.c + #include + #include + + void i_m_being_patched(void) + { + - printf("i'm unpatched!\n"); + + printf("you patched my %s\n", "tralala"); + } + + int main(void) + ``` + +

+
+ + +2. 编写编译 foo.c 的 MakeFile 文件,具体如下所示: + +
+ 点击展开 MakeFile +

+ + ``` makefile + all: foo + + foo: foo.c + $(CC) -o $@ $< + + clean: + rm -f foo + + install: foo + mkdir $$DESTDIR || : + cp foo $$DESTDIR + ``` + +

+
+ + +3. 编写好 MakeFile 之后,直接调用 **libcare-patch-make** 即可。若 **libcare-patch-make** 询问选择哪个文件进行打补丁操作,输入原文件名即可,具体如下所示: + + ``` shell + $ libcare-patch-make --clean foo.patch + rm -f foo + BUILDING ORIGINAL CODE + /usr/local/bin/libcare-cc -o foo foo.c + INSTALLING ORIGINAL OBJECTS INTO /libcareplus/test/lpmake + mkdir $DESTDIR || : + cp foo $DESTDIR + applying foo.patch... + can't find file to patch at input line 3 + Perhaps you used the wrong -p or --strip option? + The text leading up to this was: + -------------------------- + |--- foo.c 2020-12-10 09:43:04.445375845 +0800 + |+++ bar.c 2020-12-10 09:48:36.778379648 +0800 + -------------------------- + File to patch: foo.c + patching file foo.c + BUILDING PATCHED CODE + /usr/local/bin/libcare-cc -o foo foo.c + INSTALLING PATCHED OBJECTS INTO /libcareplus/test/.lpmaketmp/patched + mkdir $DESTDIR || : + cp foo $DESTDIR + MAKING PATCHES + Fixing up relocation printf@@GLIBC_2.2.5+fffffffffffffffc + Fixing up relocation print_hello+0 + patch for /libcareplus/test/lpmake/foo is in /libcareplus/test/patchroot/700297b7bc56a11e1d5a6fb564c2a5bc5b282082.kpatch + ``` + + 执行成功之后,输出显示:热补丁文件位于当前目录的 **patchroot** 目录下,可执行文件则在 **lpmake** 目录下。脚本生成的热补丁文件默认是采用 Build ID 作为热补丁文件的文件名。 + + + +## 应用 LibcarePlus 热补丁 + +本节以原文件 **foo.c** 和补丁文件 **bar.c** 为例,介绍 LibcarePlus 热补丁的应用指导。 + +### 前期准备 + +应用 LibcarePlus 热补丁之前,需要提前准备好原可执行程序 foo、以及热补丁文件 foo.kpatch。 + +### 加载热补丁 + +本节介绍应用 LibcarePlus 热补丁的具体流程。 + +1. 首先在第一个 shell 窗口运行需要打补丁的可执行程序,如下所示: + + ``` shell + $ ./lpmake/foo + Hello world! + Hello world! + Hello world! + ``` + +2. 随后在第二个 shell 窗口运行 **libcare-ctl** 应用热补丁,命令如下所示: + + ``` shell + $ libcare-ctl -v patch -p $(pidof foo) ./foo.kpatch + ``` + + 若此时热补丁应用成功,第二个 shell 窗口会有如下输出: + + ``` shell + 1 patch hunk(s) have been successfully applied to PID '10999' + ``` + + 而第一个 shell 窗口内运行的目标进程则会出现如下输出: + + ``` shell + Hello world! + Hello world! + Hello world being patched! + Hello world being patched! + ``` + + +### 卸载热补丁 + +本节介绍卸载 LibcarePlus 热补丁的具体流程。 + +1. 在第二个 shell 窗口执行如下命令: + + ``` shell + $ libcare-ctl unpatch -p $(pidof foo) + ``` + + 此时若热补丁卸载成功,第二个 shell 窗口会有如下输出: + + ``` shell + 1 patch hunk(s) were successfully cancelled from PID '10999' + ``` + +2. 第一个 shell 窗口内运行的目标进程则会出现如下输出: + + ``` shell + Hello world being patched! + Hello world being patched! + Hello world! + Hello world! + ``` diff --git a/docs/zh/docs/Virtualization/figures/CertEnrollP1.png b/docs/zh/docs/Virtualization/figures/CertEnrollP1.png new file mode 100644 index 0000000000000000000000000000000000000000..536e0618a3ab5b70937292205242a08237e34712 Binary files /dev/null and b/docs/zh/docs/Virtualization/figures/CertEnrollP1.png differ diff --git a/docs/zh/docs/Virtualization/figures/CertEnrollP2.png b/docs/zh/docs/Virtualization/figures/CertEnrollP2.png new file mode 100644 index 0000000000000000000000000000000000000000..0557c8782960188dbe9d84a1d0e66c9b45d2b303 Binary files /dev/null and b/docs/zh/docs/Virtualization/figures/CertEnrollP2.png differ diff --git a/docs/zh/docs/Virtualization/figures/CertEnrollP3.png b/docs/zh/docs/Virtualization/figures/CertEnrollP3.png new file mode 100644 index 0000000000000000000000000000000000000000..326fcf1e8d5e3c795ebcde286d8e0fef14bec7d1 Binary files /dev/null and b/docs/zh/docs/Virtualization/figures/CertEnrollP3.png differ diff --git a/docs/zh/docs/Virtualization/figures/CertEnrollP4.png b/docs/zh/docs/Virtualization/figures/CertEnrollP4.png new file mode 100644 index 0000000000000000000000000000000000000000..bc77c038e1e3a5ec30d7ba4f805ca937792e9327 Binary files /dev/null and b/docs/zh/docs/Virtualization/figures/CertEnrollP4.png differ diff --git a/docs/zh/docs/Virtualization/figures/CertEnrollP5.png b/docs/zh/docs/Virtualization/figures/CertEnrollP5.png new file mode 100644 index 0000000000000000000000000000000000000000..0f22b3cbd84f7c93f74898a926bc3e32f231667f Binary files /dev/null and b/docs/zh/docs/Virtualization/figures/CertEnrollP5.png differ diff --git a/docs/zh/docs/Virtualization/figures/CertEnrollP6.png b/docs/zh/docs/Virtualization/figures/CertEnrollP6.png new file mode 100644 index 0000000000000000000000000000000000000000..08235013ca71f1ec51e9af2f143629d1a6132fe9 Binary files /dev/null and b/docs/zh/docs/Virtualization/figures/CertEnrollP6.png differ diff --git a/docs/zh/docs/Virtualization/figures/CertEnrollP7.png b/docs/zh/docs/Virtualization/figures/CertEnrollP7.png new file mode 100644 index 0000000000000000000000000000000000000000..f934521d59dd4a75449fcb2ca8abc54045b9102b Binary files /dev/null and b/docs/zh/docs/Virtualization/figures/CertEnrollP7.png differ diff --git a/docs/zh/docs/Virtualization/figures/CertEnrollP8.png b/docs/zh/docs/Virtualization/figures/CertEnrollP8.png new file mode 100644 index 0000000000000000000000000000000000000000..9a8158e3378bf25dee05b892cc60f424542455d7 Binary files /dev/null and b/docs/zh/docs/Virtualization/figures/CertEnrollP8.png differ diff --git a/docs/zh/docs/Virtualization/figures/OSBootFlow.png b/docs/zh/docs/Virtualization/figures/OSBootFlow.png new file mode 100644 index 0000000000000000000000000000000000000000..f9c03c86df145636015efaeab4dc076f62754cd9 Binary files /dev/null and b/docs/zh/docs/Virtualization/figures/OSBootFlow.png differ diff --git a/docs/zh/docs/Virtualization/figures/SecureBootFlow.png b/docs/zh/docs/Virtualization/figures/SecureBootFlow.png new file mode 100644 index 0000000000000000000000000000000000000000..e76a800931ed6da2af3515d3d9d44388e3d11c01 Binary files /dev/null and b/docs/zh/docs/Virtualization/figures/SecureBootFlow.png differ diff --git "a/content/zh/docs/Virtualization/figures/KVM\346\236\266\346\236\204\345\233\276.png" b/docs/zh/docs/Virtualization/figures/kvm-architecture.png similarity index 100% rename from "content/zh/docs/Virtualization/figures/KVM\346\236\266\346\236\204\345\233\276.png" rename to docs/zh/docs/Virtualization/figures/kvm-architecture.png diff --git "a/content/zh/docs/Virtualization/figures/\347\212\266\346\200\201\350\275\254\346\215\242\345\233\276.png" b/docs/zh/docs/Virtualization/figures/status-transition-diagram.png similarity index 100% rename from "content/zh/docs/Virtualization/figures/\347\212\266\346\200\201\350\275\254\346\215\242\345\233\276.png" rename to docs/zh/docs/Virtualization/figures/status-transition-diagram.png diff --git "a/content/zh/docs/Virtualization/figures/\350\231\232\346\213\237\347\275\221\347\273\234\347\273\223\346\236\204\345\233\276.png" b/docs/zh/docs/Virtualization/figures/virtual-network-structure.png similarity index 100% rename from "content/zh/docs/Virtualization/figures/\350\231\232\346\213\237\347\275\221\347\273\234\347\273\223\346\236\204\345\233\276.png" rename to docs/zh/docs/Virtualization/figures/virtual-network-structure.png diff --git "a/content/zh/docs/Virtualization/figures/\350\231\232\346\213\237\345\214\226\346\236\266\346\236\204.png" b/docs/zh/docs/Virtualization/figures/virtualized-architecture.png similarity index 100% rename from "content/zh/docs/Virtualization/figures/\350\231\232\346\213\237\345\214\226\346\236\266\346\236\204.png" rename to docs/zh/docs/Virtualization/figures/virtualized-architecture.png diff --git a/docs/zh/docs/Virtualization/figures/zh-cn_image_0218587435.png b/docs/zh/docs/Virtualization/figures/zh-cn_image_0218587435.png new file mode 100644 index 0000000000000000000000000000000000000000..d245d48dc07e2b01734e21ec1952e89fa9269bdb Binary files /dev/null and b/docs/zh/docs/Virtualization/figures/zh-cn_image_0218587435.png differ diff --git a/docs/zh/docs/Virtualization/figures/zh-cn_image_0218587436.png b/docs/zh/docs/Virtualization/figures/zh-cn_image_0218587436.png new file mode 100644 index 0000000000000000000000000000000000000000..a32856aa08e459ed0f51f8fcf4c2f51511c12095 Binary files /dev/null and b/docs/zh/docs/Virtualization/figures/zh-cn_image_0218587436.png differ diff --git a/docs/zh/docs/Virtualization/public_sys-resources/icon-caution.gif b/docs/zh/docs/Virtualization/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/docs/Virtualization/public_sys-resources/icon-caution.gif differ diff --git a/docs/zh/docs/Virtualization/public_sys-resources/icon-danger.gif b/docs/zh/docs/Virtualization/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/docs/Virtualization/public_sys-resources/icon-danger.gif differ diff --git a/docs/zh/docs/Virtualization/public_sys-resources/icon-note.gif b/docs/zh/docs/Virtualization/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/docs/Virtualization/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/docs/Virtualization/public_sys-resources/icon-notice.gif b/docs/zh/docs/Virtualization/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/docs/Virtualization/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/docs/Virtualization/public_sys-resources/icon-tip.gif b/docs/zh/docs/Virtualization/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and b/docs/zh/docs/Virtualization/public_sys-resources/icon-tip.gif differ diff --git a/docs/zh/docs/Virtualization/public_sys-resources/icon-warning.gif b/docs/zh/docs/Virtualization/public_sys-resources/icon-warning.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and b/docs/zh/docs/Virtualization/public_sys-resources/icon-warning.gif differ diff --git a/content/zh/docs/Virtualization/virtualization.md b/docs/zh/docs/Virtualization/virtualization.md similarity index 100% rename from content/zh/docs/Virtualization/virtualization.md rename to docs/zh/docs/Virtualization/virtualization.md diff --git a/docs/zh/docs/Virtualization/vmtop.md b/docs/zh/docs/Virtualization/vmtop.md new file mode 100644 index 0000000000000000000000000000000000000000..721bcb1422d449d477a90527df5dd558125a3c00 --- /dev/null +++ b/docs/zh/docs/Virtualization/vmtop.md @@ -0,0 +1,175 @@ +# 工具使用指南 + +- [vmtop使用指南](#vmtop使用指南) + +## vmtop使用指南 + +### 概述 +vmtop 是运行在宿主机host上的用户态工具。使用vmtop可以实时动态地查看虚拟机资源的使用情况,例如CPU占用率、内存占用率、vCPU陷入陷出次数等。因此,可以使用vmtop作为虚拟化问题定位和性能调优的工具。 + +#### 多架构支持 +当前vmtop支持AArch64和x86_64处理器架构。 + +#### 显示项说明 +不同处理器架构的操作系统,vmtop的显示项存在差异,这里给出各个显示项的含义及其是否在对应架构呈现。 +说明:以下采样差是指指定时间间隔内获取的两次数据的差值。 + +##### **AArch64和x86_64架构共有显示项** +- VM/task-name: 虚拟机/进程名称 +- DID: 虚拟机id +- PID: 虚拟机qemu进程的pid +- %CPU: 进程的CPU占用率 +- EXTsum: kvm exit总次数(采样差) +- S: 进程状态 +- P: 进程所占用的物理CPU号 +- %ST: 被抢占时间与cpu运行时间的比 +- %GUE: 虚拟机内部占用时间与CPU运行时间的比 +- %HYP: 虚拟化开销占比 + +##### 仅AArch64架构的显示项 +- EXThvc: hvc-exit次数(采样差) +- EXTwfe: wfe-exit次数(采样差) +- EXTwfi: wfi-exit次数(采样差) +- EXTmmioU: mmioU-exit次数(采样差) +- EXTmmioK: mmioK-exit次数(采样差) +- EXTfp: fp-exit次数(采样差) +- EXTirq: irq-exit次数(采样差) +- EXTsys64: sys64 exit次数(采样差) +- EXTmabt: mem abort exit次数(采样差) + + +##### 仅x86_64架构的显示项 +- PFfix: 缺页次数(采样差) +- PFgu: 向guest OS注入缺页次数(采样差) +- INvlpg: 冲刷tlb某项次数(tlb其中一项,并不固定) +- EXTio: io VM-exit次数(采样差) +- EXTmmio: mmio VM-exit次数(采样差) +- EXThalt: halt VM-exit次数(采样差) +- EXTsig: 信号处理引起的VM-exit次数(采样差) +- EXTirq: 中断引起的VM-exit次数(采样差) +- EXTnmiW: 处理不可屏蔽中断引起的VM-exit次数(采样差) +- EXTirqW: interruptwindow机制,开启中断使能时exit,以便注入中断(采样差) +- IrqIn: 注入irq中断次数(采样差) +- NmiIn: 注入nmi中断次数(采样差) +- TLBfl: 冲刷整个tlb次数(采样差) +- HostReL: 重载主机状态次数(采样差) +- Hyperv: 模拟Guest操作系统辅助虚拟化调用hypercall的处理次数(采样差) +- EXTcr: 访问CR寄存器退出次数(采样差) +- EXTrmsr: 读msr退出次数(采样差) +- EXTwmsr: 写msr退出次数(采样差) +- EXTapic: 写apic次数(采样差) +- EXTeptv: Ept缺页退出次数(采样差) +- EXTeptm: Ept错误退出次数(采样差) +- EXTpau: Vcpu暂停退出次数(采样差) + +### 使用方法 +vmtop是一款命令行工具,直接以命令行的方式运行 vmtop 即可。 +另外,vmtop还提供了不同可选选项,用于查询不同信息。 + +#### 语法格式 +```sh +vmtop [选项] +``` + +#### 选项说明 +- -d: 设置显示刷新的时间间隔,单位:秒 +- -H: 显示虚拟机的线程信息 +- -n: 设置显示刷新的次数,刷新完成后退出 +- -b: Batch模式显示,可以用于重定向到文件 +- -h: 显示帮助信息 +- -v: 显示版本 +- -p: 监控指定id的虚拟机 + +#### 快捷键 +在vmtop运行状态下使用的快捷键 +- H: 显示或关闭虚拟机线程信息,默认显示该信息 +- up/down: 向上/向下移动显示的虚拟机列表 +- left/right: 向左/向右移动显示的信息,从而显示因屏幕宽度被隐藏的列 +- f: 进入监控项编辑模式,选择要开启的监控项 +- q: 退出vmtop进程 + +### 示例 +在host上直接以命令行的方式运行vmtop +```sh +vmtop +``` +输出如下: +```sh +vmtop - 2020-09-14 09:54:48 - 1.0 +Domains: 1 running + + DID VM/task-name PID %CPU EXThvc EXTwfe EXTwfi EXTmmioU EXTmmioK EXTfp EXTirq EXTsys64 EXTmabt EXTsum S P %ST %GUE %HYP + 2 example 4054916 13.0 0 0 1206 10 0 144 62 174 0 1452 S 106 0.0 99.7 16.0 +``` +可以看到,host上只有一台名称为“example”的虚拟机,ID为2,CPU占用率是13.0%,在1秒内的陷入陷出总次数是1452,虚拟机进程占用的物理CPU为106号CPU,虚拟机内部占用时间与CPU运行时间的比是99.7%。 + +1.显示虚拟机线程信息 +按下‘H’后可以显示线程信息: +```sh +vmtop - 2020-09-14 10:11:27 - 1.0 +Domains: 1 running + + DID VM/task-name PID %CPU EXThvc EXTwfe EXTwfi EXTmmioU EXTmmioK EXTfp EXTirq EXTsys64 EXTmabt EXTsum S P %ST %GUE %HYP + 2 example 4054916 13.0 0 0 1191 17 4 120 76 147 0 1435 S 119 0.0 123.7 4.0 + |_ qemu-kvm 4054916 0.0 0 0 0 0 0 0 0 0 0 0 S 119 0.0 0.0 0.0 + |_ qemu-kvm 4054928 0.0 0 0 0 0 0 0 0 0 0 0 S 119 0.0 0.0 0.0 + |_ signalfd_com 4054929 0.0 0 0 0 0 0 0 0 0 0 0 S 120 0.0 0.0 0.0 + |_ IO mon_iothr 4054932 0.0 0 0 0 0 0 0 0 0 0 0 S 117 0.0 0.0 0.0 + |_ CPU 0/KVM 4054933 3.0 0 0 280 6 4 28 19 41 0 350 S 105 0.0 27.9 0.0 + |_ CPU 1/KVM 4054934 3.0 0 0 260 0 0 16 12 36 0 308 S 31 0.0 20.0 0.0 + |_ CPU 2/KVM 4054935 3.0 0 0 341 0 0 44 20 26 0 387 R 108 0.0 27.9 4.0 + |_ CPU 3/KVM 4054936 5.0 0 0 310 11 0 32 25 44 0 390 S 103 0.0 47.9 0.0 + |_ memory_lock 4054940 0.0 0 0 0 0 0 0 0 0 0 0 S 126 0.0 0.0 0.0 + |_ vnc_worker 4054944 0.0 0 0 0 0 0 0 0 0 0 0 S 118 0.0 0.0 0.0 + |_ worker 4143738 0.0 0 0 0 0 0 0 0 0 0 0 S 120 0.0 0.0 0.0 +``` +example虚拟机有11个线程,其中包括vCPU线程、vnc_worker、IO mon_iotreads等等,每个线程同样会显示详细CPU占用、陷入陷出等信息。 + +2.选择监控项 +按下‘f’进入监控项编辑模式: +```sh +field filter - select which field to be showed +Use up/down to navigate, use space to set whether chosen filed to be showed +'q' to quit to normal display + + * DID + * VM/task-name + * PID + * %CPU + * EXThvc + * EXTwfe + * EXTwfi + * EXTmmioU + * EXTmmioK + * EXTfp + * EXTirq + * EXTsys64 + * EXTmabt + * EXTsum + * S + * P + * %ST + * %GUE + * %HYP +``` +当前所有监控项都默认显示,通过up/down键选择,用space键来设置对应显示项是否显示/隐藏,按‘q’键退出。 +将%ST、%GUE、%HYP设置为隐藏后,输出如下: +```sh +vmtop - 2020-09-14 10:23:25 - 1.0 +Domains: 1 running + + DID VM/task-name PID %CPU EXThvc EXTwfe EXTwfi EXTmmioU EXTmmioK EXTfp EXTirq EXTsys64 EXTmabt EXTsum S P + 2 example 4054916 12.0 0 0 1213 14 1 144 68 168 0 1464 S 125 + |_ qemu-kvm 4054916 0.0 0 0 0 0 0 0 0 0 0 0 S 125 + |_ qemu-kvm 4054928 0.0 0 0 0 0 0 0 0 0 0 0 S 119 + |_ signalfd_com 4054929 0.0 0 0 0 0 0 0 0 0 0 0 S 120 + |_ IO mon_iothr 4054932 0.0 0 0 0 0 0 0 0 0 0 0 S 117 + |_ CPU 0/KVM 4054933 2.0 0 0 303 6 0 29 10 35 0 354 S 98 + |_ CPU 1/KVM 4054934 4.0 0 0 279 0 0 39 17 49 0 345 S 1 + |_ CPU 2/KVM 4054935 3.0 0 0 283 0 0 33 20 40 0 343 S 122 + |_ CPU 3/KVM 4054936 3.0 0 0 348 8 1 43 21 44 0 422 S 110 + |_ memory_lock 4054940 0.0 0 0 0 0 0 0 0 0 0 0 S 126 + |_ vnc_worker 4054944 0.0 0 0 0 0 0 0 0 0 0 0 S 118 + |_ worker 1794 0.0 0 0 0 0 0 0 0 0 0 0 S 126 +``` +%ST、%GUE、%HYP将不会出现在显示界面上。 diff --git "a/content/zh/docs/Virtualization/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" "b/docs/zh/docs/Virtualization/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" similarity index 72% rename from "content/zh/docs/Virtualization/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" rename to "docs/zh/docs/Virtualization/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" index a8f6b5340b4e8409187aabab0a618890f04f89f3..df9f5a66a4157a4da47ca69b1e2f4812d4bfe900 100644 --- "a/content/zh/docs/Virtualization/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" +++ "b/docs/zh/docs/Virtualization/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" @@ -52,13 +52,13 @@ 1. 查询当前虚拟机镜像磁盘空间大小,命令如下: ``` - $ qemu-img info + $ qemu-img info ``` 例如,查询openEuler-image.qcow2镜像磁盘空间大小的命令和回显如下,说明该镜像磁盘空间大小为4GiB。 ``` - $ qemu-img info openEuler-image.qcow2 + $ qemu-img info openEuler-image.qcow2 image: openEuler-image.qcow2 file format: qcow2 virtual size: 4.0G (4294967296 bytes) @@ -71,10 +71,10 @@ corrupt: false ``` -2. 修改镜像磁盘空间大小,命令如下,其中_imgFiLeName_为镜像名称,“+”和“-”分别表示需要增加或减小的镜像磁盘空间大小,单位为K、M、G、T,代表KiB、MiB、GiB、TiB。 +2. 修改镜像磁盘空间大小,命令如下,其中_imgFileName_为镜像名称,“+”和“-”分别表示需要增加或减小的镜像磁盘空间大小,单位为K、M、G、T,代表KiB、MiB、GiB、TiB。 ``` - $ qemu-img resize [+|-] + $ qemu-img resize [+|-] ``` 例如,将上述openEuler-image.qcow2镜像磁盘空间大小扩展到24GiB,即在原来4GiB基础上增加20GiB,命令和回显如下: @@ -87,13 +87,13 @@ 3. 查询修改后的镜像磁盘空间大小,确认是否修改成功,命令如下: ``` - $ qemu-img info + $ qemu-img info ``` 例如,上述openEuler-image.qcow2镜像磁盘空间已扩展到24GiB,命令和回显如下: ``` - $ qemu-img info openEuler-image.qcow2 + $ qemu-img info openEuler-image.qcow2 image: openEuler-image.qcow2 file format: qcow2 virtual size: 24G (25769803776 bytes) @@ -116,7 +116,7 @@ 本节给出搭建Linux网桥和Open vSwitch网桥的方法,使虚拟机连接到网络,用户可以根据情况选择搭建网桥的类型。 **图 1** 虚拟网络结构图 -![](figures/虚拟网络结构图.png "虚拟网络结构图") +![](./figures/virtual-network-structure.png) ### 搭建Linux网桥 @@ -171,92 +171,78 @@ Open vSwitch网桥,具有更便捷的自动化编排能力。搭建Open vSwitc 使用Open vSwitch提供虚拟网络,需要安装Open vSwitch网络虚拟化组件,使用root用户执行如下命令: -1. 安装Open vSwitch组件。 +1. 关闭 SELinux,否则 ovsdb-server Manager 无法正常工作。 ``` - # yum install -y openvswitch-kmod - # yum install -y openvswitch + # setenforce 0 ``` -2. 启动Open vSwitch服务。 - + 查询 SELinux 是否关闭成功,可以参考如下命令和回显。 ``` - # systemctl start openvswitch + # cat /etc/selinux/config | grep -v ^# + SELINUX=disabled + SELINUXTYPE=targeted ``` +2. 安装Open vSwitch组件。 -**二、确认安装是否成功** - -确认Open vSwitch组件是否安装成功,需要检查openvswitch-kmod和openvswitch这两个组件是否安装成功。 + ``` + # yum install -y openvswitch + ``` -1. 确认openvswitch-kmod组件是否安装成功。若安装成功,可以看到软件包相关信息,命令和回显如下: +3. 启动Open vSwitch服务。 ``` - $ rpm -qi openvswitch-kmod - Name : openvswitch-kmod - Version : 2.11.1 - Release : 1.oe3 - Architecture: aarch64 - Install Date: Thu 15 Aug 2019 05:07:49 PM CST - Group : System Environment/Daemons - Size : 15766774 - License : GPLv2 - Signature : (none) - Source RPM : openvswitch-kmod-2.11.1-1.oe3.src.rpm - Build Date : Thu 08 Aug 2019 04:33:08 PM CST - Build Host : armbuild10b175b113b44 - Relocations : (not relocatable) - Vendor : OpenSource Security Ralf Spenneberg - URL : http://www.openvswitch.org/ - Summary : Open vSwitch Kernel Modules - Description : - Open vSwitch provides standard network bridging functions augmented with - support for the OpenFlow protocol for remote per-flow control of - traffic. This package contains the kernel modules. + # service openvswitch start ``` +>![](./public_sys-resources/icon-note.gif) **说明:** +>启动 Open vSwitch 服务过程中,可以根据需要使用相关服务,其中 ovn-controller-vtep.service 服务必须在普通用户下使用,否则操作会失败。其他服务,需要使用 root 权限。 + +**二、确认安装是否成功** -2. 确认openvswitch组件是否安装成功。若安装成功,可以看到软件包相关信息,命令和回显如下: +1. 确认Open vSwitch组件是否安装成功,需要检查openvswitch组件是否安装成功。 +确认openvswitch组件是否安装成功。若安装成功,可以看到软件包相关信息,命令和回显如下: ``` $ rpm -qi openvswitch - Name : openvswitch - Version : 2.11.1 - Release : 1 + Name: openvswitch + Version : 2.12.0 + Release : 11.oe1 Architecture: aarch64 - Install Date: Thu 15 Aug 2019 05:08:35 PM CST - Group : System Environment/Daemons - Size : 6051185 - License : ASL 2.0 - Signature : (none) - Source RPM : openvswitch-2.11.1-1.src.rpm - Build Date : Thu 08 Aug 2019 05:24:46 PM CST - Build Host : armbuild10b247b121b105 - Relocations : (not relocatable) - Vendor : Nicira, Inc. - URL : http://www.openvswitch.org/ - Summary : Open vSwitch daemon/database/utilities + Install Date: Tue 08 Jun 2021 04:54:31 PM CST + Group: Unspecified + Size: 7456390 + License : ASL 2.0 and ISC + Signature : RSA/SHA1, Mon 07 Jun 2021 01:16:33 AM CST, Key ID d557065eb25e7f66 + Source RPM : openvswitch-2.12.0-11.oe1.src.rpm + Build Date : Mon 07 Jun 2021 01:15:34 AM CST + Build Host : obs-worker-0011 + Packager : http://openeuler.org + Vendor : http://openeuler.org + URL: http://www.openvswitch.org/ + Summary : Production Quality, Multilayer Open Virtual Switch Description : - Open vSwitch provides standard network bridging functions and - support for the OpenFlow protocol for remote per-flow control of - traffic. + Open vSwitch is a production quality, multilayer virtual switch licensed under + the open source Apache 2.0 license. ``` -3. 查看Open vSwitch服务是否启动成功。若服务处于“Active”状态,说明服务启动成功,可以正常使用Open vSwitch提供的命令行工具,命令和回显如下: +2. 查看Open vSwitch服务是否启动成功。若服务处于“Active”状态,说明服务启动成功,可以正常使用Open vSwitch提供的命令行工具,命令和回显如下: ``` - $ systemctl status openvswitch - ● openvswitch.service - LSB: Open vSwitch switch - Loaded: loaded (/etc/rc.d/init.d/openvswitch; generated) - Active: active (running) since Sat 2019-08-17 09:47:14 CST; 4min 39s ago - Docs: man:systemd-sysv-generator(8) - Process: 54554 ExecStart=/etc/rc.d/init.d/openvswitch start (code=exited, status=0/SUCCESS) - Tasks: 4 (limit: 9830) - Memory: 22.0M + $ service openvswitch status + Redirecting to /bin/systemctl status openvswitch.service + ● openvswitch.service - Open vSwitch + Loaded: loaded (/usr/lib/systemd/system/openvswitch.service; disabled; vendor preset: disabled) + Active: active (exited) since Wed 2021-06-16 16:45:41 CST; 17h ago + Process: 151652 ExecStart=/bin/true (code=exited, status=0/SUCCESS) + Main PID: 151652 (code=exited, status=0/SUCCESS) + Tasks: 0 + Memory: 0B CGroup: /system.slice/openvswitch.service - ├─54580 ovsdb-server: monitoring pid 54581 (healthy) - ├─54581 ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate> - ├─54602 ovs-vswitchd: monitoring pid 54603 (healthy) - └─54603 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/open> + + Jun 16 16:45:41 openEuler systemd[1]: Starting Open vSwitch... + Jun 16 16:45:41 openEuler systemd[1]: Started Open vSwitch. + ``` @@ -301,7 +287,7 @@ Open vSwitch网桥,具有更便捷的自动化编排能力。搭建Open vSwitc ### 概述 -针对不同的架构,引导的方式有所差异。x86支持UFEI(Unified Extensible Firmware Interface)和BIOS方式启动,AArch64仅支持UFEI方式启动。openEuler默认已安装BIOS启动对应的引导文件,不需要用户额外操作。所以这里仅介绍UEFI启动方式的安装方法。 +针对不同的架构,引导的方式有所差异。x86支持UEFI(Unified Extensible Firmware Interface)和BIOS方式启动,AArch64仅支持UEFI方式启动。openEuler默认已安装BIOS启动对应的引导文件,不需要用户额外操作。所以这里仅介绍UEFI启动方式的安装方法。 统一的可扩展固件接口UEFI是一种全新类型的接口标准,用于开机自检、引导操作系统的启动,是传统BIOS的一种替代方案。EDK II是一套实现了UEFI标准的开源代码,在虚拟化场景中,通常利用EDK II工具集,通过UEFI的方式启动虚拟机。使用EDK II工具需要在虚拟机启动之前安装对应的软件包 ,本节介绍EDK II的安装方法。 @@ -392,10 +378,7 @@ openEuler虚拟化使用virsh管理虚拟机。如果希望在非root用户使 ``` export LIBVIRT_DEFAULT_URI="qemu:///system" ``` - 执行如下命令,使配置生效。 - ``` - $ source ~/.bashrc - ``` + 5. 在虚拟机XML配置文件中的domain根元素中添加如下内容,使qemu-kvm进程可以访问磁盘镜像文件。 ``` diff --git "a/content/zh/docs/Virtualization/\345\256\211\350\243\205\350\231\232\346\213\237\345\214\226.md" "b/docs/zh/docs/Virtualization/\345\256\211\350\243\205\350\231\232\346\213\237\345\214\226.md" similarity index 98% rename from "content/zh/docs/Virtualization/\345\256\211\350\243\205\350\231\232\346\213\237\345\214\226.md" rename to "docs/zh/docs/Virtualization/\345\256\211\350\243\205\350\231\232\346\213\237\345\214\226.md" index c8ab1946b98e428ef417ec4283560a9556783606..a5fa839014d0350c8db502803a811d97be212b4a 100644 --- "a/content/zh/docs/Virtualization/\345\256\211\350\243\205\350\231\232\346\213\237\345\214\226.md" +++ "b/docs/zh/docs/Virtualization/\345\256\211\350\243\205\350\231\232\346\213\237\345\214\226.md" @@ -53,7 +53,7 @@ ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >KVM模块已经集成在openEuler内核中,因此不需要单独安装。 ### 验证安装是否成功 diff --git "a/docs/zh/docs/Virtualization/\345\267\245\345\205\267\344\275\277\347\224\250\346\214\207\345\215\227.md" "b/docs/zh/docs/Virtualization/\345\267\245\345\205\267\344\275\277\347\224\250\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..29aeea3dd189c30a37cc5cbb82c2eba96c7357a0 --- /dev/null +++ "b/docs/zh/docs/Virtualization/\345\267\245\345\205\267\344\275\277\347\224\250\346\214\207\345\215\227.md" @@ -0,0 +1 @@ +为了方便用户更好地使用虚拟化,openEuler 提供了一系列工具,包括 vmtop、LibcarePlus 等。本章介绍这些工具的安装和使用指导。 diff --git "a/content/zh/docs/Virtualization/\346\234\200\344\275\263\345\256\236\350\267\265.md" "b/docs/zh/docs/Virtualization/\346\234\200\344\275\263\345\256\236\350\267\265.md" similarity index 80% rename from "content/zh/docs/Virtualization/\346\234\200\344\275\263\345\256\236\350\267\265.md" rename to "docs/zh/docs/Virtualization/\346\234\200\344\275\263\345\256\236\350\267\265.md" index 9626b4e460a7c35d0cdffa0164f84529251dc2e6..f66289403705628cece47283549bc59b7a766f8e 100644 --- "a/content/zh/docs/Virtualization/\346\234\200\344\275\263\345\256\236\350\267\265.md" +++ "b/docs/zh/docs/Virtualization/\346\234\200\344\275\263\345\256\236\350\267\265.md" @@ -9,6 +9,7 @@ - [裸设备映射](#裸设备映射) - [kworker隔离绑定](#kworker隔离绑定) - [内存大页](#内存大页) + - [Guest-Idle-Haltpoll](#Guest-Idle-Haltpoll) - [安全最佳实践](#安全最佳实践) - [Libvirt鉴权](#Libvirt鉴权) - [qemu-ga](#qemu-ga) @@ -24,7 +25,7 @@ 在计算资源充足的情况下,为使虚拟机获得接近物理机的性能,可以使用halt-polling特性。没有使用halt-polling特性时,当vCPU空闲退出后,主机会把CPU资源分配给其他进程使用。当主机开启halt-polling特性时,虚拟机vCPU处于空闲时会polling一段时间,polling的时间由具体配置决定。若该vCPU在polling期间被唤醒,可以不从主机侧调度而继续运行,减少了调度流程的开销,从而在一定程度上提高了虚拟机系统的性能。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >halt-polling的机制保证虚拟机的vCPU线程的及时响应,但在虚拟机空载的时候,主机侧也会polling,导致主机看到vCPU所在CPU占用率比较高,而实际虚拟机内部CPU占用率并不高。 #### 操作指导 @@ -63,7 +64,7 @@ KVM平台上,对虚拟磁盘的读写在后端默认由QEMU主线程负责处 4 ``` -- 给virtio-blk磁盘配置IOThread属性。**<**iothread**\>**表示IOThread线程编号,编号从1开始配置,最大为的配置值,且编号不能重复使用。例如将编号为2的IOThread配置给virtio-blk磁盘使用: +- 给virtio-blk磁盘配置IOThread属性。<**iothread**\>表示IOThread线程编号,编号从1开始配置,最大为的配置值,且编号不能重复使用。例如将编号为2的IOThread配置给virtio-blk磁盘使用: ``` @@ -222,6 +223,55 @@ kworker是Linux内核实现的per-CPU线程,用来执行系统中的workqueue # echo never > /sys/kernel/mm/transparent_hugepage/enabled ``` +### Guest-Idle-Haltpoll + +#### 概述 + +为了保证公平性及降低功耗,当虚拟机vCPU空闲时,虚拟机将执行WFx/HLT指令退出到宿主机中,并触发上下文切换。宿主机将决定在物理CPU上调度其他进程或vCPU,或进入节能模式。但是,虚拟机和宿主机之间的切换、额外的上下文切换以及唤醒IPI中断开销较大,在频繁睡眠和唤醒的业务中该问题尤为突出。Guest-Idle-Haltpoll技术是指当虚拟机vCPU空闲时,不立刻执行WFx/HLT并发生VM-exit,而是在虚拟机内部轮询(polling)一段时间。在该时间段内,其他共享LLC的vCPU在该vCPU上的任务被唤醒不需要发送IPI中断,减少了发送和接收处理IPI的开销及虚拟机陷出(VM-exit)的开销,从而降低任务唤醒的时延。 + +>![](./public_sys-resources/icon-note.gif) **说明:** +>由于vCPU在虚拟机内部执行idle-haltpoll会增加vCPU在宿主机的CPU开销,所以开启该特性建议vCPU在宿主机独占物理核。 + +#### 操作指导 + +Guest-Idle-Haltpoll特性默认关闭,这里给出开启该特性的操作指导。 +1. 使能Guest-Idle-Haltpoll特性。 + - 若宿主机处理器架构为x86,可以在虚拟机内核启动参数中配置“cpuidle\_haltpoll.force=Y”强制开启,该方法不依赖宿主机配置vCPU独占物理核。 + ``` + cpuidle_haltpoll.force=Y + ``` + - 若宿主机处理器架构为AArch64,只支持在虚拟机内核启动参数中配置“cpuidle\_haltpoll.force=Y haltpoll.enable=Y”的方式使能该特性。 + + ``` + cpuidle_haltpoll.force=Y haltpoll.enable=Y + ``` + +2. 确认Guest-Idle-Haltpoll特性是否生效。在虚拟机中执行如下命令,若返回haltpoll,说明特性已经生效。 + + ``` + # cat /sys/devices/system/cpu/cpuidle/current_driver + ``` + +3. (可选)配置Guest-Idle-Haltpoll参数。 + 虚拟机的/sys/module/haltpoll/parameters/路径下提供了如下配置文件,用于调整配置参数,用户可以根据业务特点选择调整。 + + - guest\_halt\_poll\_ns: 全局参数,指vCPU空闲后polling的最大时长,默认值为200000(单位ns)。 + - guest\_halt\_poll\_shrink: 当唤醒事件发生在全局guest\_halt\_poll\_ns时间之后,用于收缩当前vCPU guest\_halt\_poll\_ns的除数因子,默认值为2。 + - guest\_halt\_poll\_grow: 当唤醒事件发生在当前vCPU guest\_halt\_poll\_ns之后且在全局guest\_halt\_poll\_ns之前,用>于扩展当前vCPU guest\_halt\_poll\_ns的乘数因子,默认值为2。 + - guest\_halt\_poll\_grow\_start: 当系统空闲时,每个vCPU的guest\_halt\_poll\_ns最终会达到零。该参数用于设置当前vCPU guest\_halt\_poll\_ns的初始值,以便vCPU polling时长的收缩和扩展。默认值为50000(单位ns)。 + - guest\_halt\_poll\_allow\_shrink: 允许每个vCPU guest\_halt\_poll\_ns收缩的开关,默认值是Y(Y表示允许收缩,N表示禁>止收缩)。 + + 可以使用root权限,参考如下命令修改参数值。其中 _value_ 表示需要设置的参数值, _configFile_ 为对应的配置文件。 + + ``` + # echo value > /sys/module/haltpoll/parameters/configFile + ``` + + 例如设置全局guest\_halt\_poll\_ns为200000ns的命令如下: + + ``` + # echo 200000 > /sys/module/haltpoll/parameters/guest_halt_poll_ns + ``` ## 安全最佳实践 @@ -317,7 +367,7 @@ qemu-ga(Qemu Guest Agent)它是运行在虚拟机内部的守护进程,它 在一些对安全要求较高的使用场景,为了防止虚拟机内部信息泄露,qemu-ga提供了黑名单功能,用户可以通过黑名单选择性屏蔽qemu-ga提供的部分功能。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >qemu-ga对应的安装包是qemu-guest-agent-xx.rpm,openEuler默认不安装。xx为实际版本号。 #### 操作方法 @@ -368,7 +418,7 @@ qemu-ga(Qemu Guest Agent)它是运行在虚拟机内部的守护进程,它 root 727 1 0 08:17 ? 00:00:00 /usr/bin/qemu-ga --method=virtio-serial --path=/dev/virtio-ports/org.qemu.guest_agent.0 --blacklist=guest-file-open guest-file-close guest-file-read guest-file-write guest-file-seek guest-file-flush -F/etc/qemu-ga/fsfreeze-hook ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >更多关于qemu-ga的资料可以参见[https://wiki.qemu.org/Features/GuestAgent](https://wiki.qemu.org/Features/GuestAgent)。 diff --git "a/content/zh/docs/Virtualization/\347\203\255\350\277\201\347\247\273\350\231\232\346\213\237\346\234\272.md" "b/docs/zh/docs/Virtualization/\347\203\255\350\277\201\347\247\273\350\231\232\346\213\237\346\234\272.md" similarity index 79% rename from "content/zh/docs/Virtualization/\347\203\255\350\277\201\347\247\273\350\231\232\346\213\237\346\234\272.md" rename to "docs/zh/docs/Virtualization/\347\203\255\350\277\201\347\247\273\350\231\232\346\213\237\346\234\272.md" index 0796679de5acc7e9e5e913044922d0c479e9419b..17bda9379a1c381546c971641282098e97abdadd 100644 --- "a/content/zh/docs/Virtualization/\347\203\255\350\277\201\347\247\273\350\231\232\346\213\237\346\234\272.md" +++ "b/docs/zh/docs/Virtualization/\347\203\255\350\277\201\347\247\273\350\231\232\346\213\237\346\234\272.md" @@ -52,9 +52,26 @@ ### 前提条件 - 进行热迁移之前要确保源端和目的端主机之间的网络是互通的,并且源端和目的获得资源权限是对等的,即两端同时能够访问到相同的存储资源和网络资源。 - - 在执行虚拟机热迁移前应当对虚拟机进行健康检查,并确保目的端主机有足够的CPU、内存和存储资源。 +### 热迁移脏页率预测(可选) + +用户在迁移前可以使用dirtyrate功能,获取热迁移的内存脏页变化速率,根据虚拟机内存使用情况评估虚拟机是否适合迁移或配置合理的迁移参数。 + +使用方法: + +例如,指定名为openEulerVM的虚拟机,计算时间为1s: + +``` +virsh qemu-monitor-command openEulerVM '{"execute":"calc-dirty-rate", "arguments": {"calc-time": 1}}' +``` + +间隔1s后,查询脏页变化速率: + +``` +virsh qemu-monitor-command openEulerVM '{"execute":"query-dirty-rate"}' +``` + ### 设置热迁移参数(可选) 在执行热迁移之前,可以通过使用 virsh migrate-setmaxdowntime命令来指定虚拟机热迁移过程中能够容忍的最大停机时间,这是一个可选的配置项。 @@ -146,3 +163,35 @@ 3. 热迁移完成后命令返回,虚拟机在目的端主机行正常运行,存储设备也被迁移到目的主机上。 +### 热迁移操作(加密传输) + +1. 简介 + +​ 为了能够更好的对虚拟机热迁移过程中数据的加密,openEuler提供了使用TLS对迁移数据进行加密的特性。几乎QEMU中所有的网络服务都能够使用TLS对会话数据进行加密操作,同时也可以使用X509证书对客户端进行简单的身份认证。 + +2. 应用场景 + +​ 典型应用场景为要求热迁移过程中虚拟机数据在源端和目的端进行传输时保证数据的安全性。 + +3. 注意事项 + +​ 在使用TLS对虚拟机进行热迁移前,需要申请证书,然后在源端和目的端分别设置证书。使用TLS功能前需要打开对端认证配置项,需在/etc/libvirt/qemu.conf文件中设置migrate_tls_x509_verify = 1。 + +​ 单通道TLS热迁移的业务中断时长、迁移时长会有明显增长,迁移带宽上限100~200MB/s,可能导致迁移失败。 + +​ 支持使用multiFd进行多通道TLS迁移,但会增加CPU开销(多开2个迁移线程),可能影响虚拟机运行;建议通过设置热迁移线程CPU亲和性将热迁移线程享受的CPU资源与虚拟机进程绑定的CPU资源隔离,迁移每台虚拟机建议绑定2个CPU。 + +4. 使用方法 + +单通道热迁移加密传输命令 + +``` +virsh migrate --live --unsafe --tls --domain openEulerVM --desturi qemu+tcp:///system --migrateuri tcp:// +``` + +多通道热迁移加密传输命令 + +``` +virsh migrate --live --unsafe --parallel --tls --domain openEulerVM --desturi qemu+tcp:///system --migrateuri tcp:// +``` + diff --git "a/content/zh/docs/Virtualization/\347\256\241\347\220\206\347\263\273\347\273\237\350\265\204\346\272\220.md" "b/docs/zh/docs/Virtualization/\347\256\241\347\220\206\347\263\273\347\273\237\350\265\204\346\272\220.md" similarity index 66% rename from "content/zh/docs/Virtualization/\347\256\241\347\220\206\347\263\273\347\273\237\350\265\204\346\272\220.md" rename to "docs/zh/docs/Virtualization/\347\256\241\347\220\206\347\263\273\347\273\237\350\265\204\346\272\220.md" index fdbab66cedfa539d53f0869f2d509daf2bfb8610..7e14dbf4f08650d6e927e5463deaa6a1950f9d4f 100644 --- "a/content/zh/docs/Virtualization/\347\256\241\347\220\206\347\263\273\347\273\237\350\265\204\346\272\220.md" +++ "b/docs/zh/docs/Virtualization/\347\256\241\347\220\206\347\263\273\347\273\237\350\265\204\346\272\220.md" @@ -1,27 +1,22 @@ # 管理系统资源 -使用libvirt命令来管理虚拟机的系统资源,如vCPU、虚拟内存资源等。 - -在开始前: - -- 确保主机上运行了libvirtd守护进程。 -- 用virsh list --all命令确认虚拟机已经被定义。 - - [管理系统资源](#管理系统资源) + - [总体说明](#总体说明) - [管理虚拟CPU](#管理虚拟CPU) - - [CPU份额](#CPU份额) - - [绑定QEMU进程至物理CPU](#绑定QEMU进程至物理CPU) - - [调整虚拟CPU绑定关系](#调整虚拟CPU绑定关系) - - [CPU热插](#CPU热插) - [管理虚拟内存](#管理虚拟内存) - - [NUMA简介](#NUMA简介) - - [配置Host NUMA](#配置Host-NUMA) - - [配置Guest NUMA](#配置Guest-NUMA) - - [内存热插](#内存热插) + - [热迁移操作](#热迁移操作) + +## 总体说明 + +openEuler 虚拟化使用libvirt命令来管理虚拟机的系统资源,如vCPU、虚拟内存资源等。 + +在开始前: +- 确保主机上运行了libvirtd守护进程。 +- 用virsh list --all命令确认虚拟机已经被定义。 ## 管理虚拟CPU @@ -101,14 +96,14 @@ CPU份额表示一个虚拟机竞争物理CPU计算资源的能力大小总和 iothread_quota : 0 ``` - 对cpu\_shares值的修改不会立即生效,在虚拟机openEulerVM下一次启动后才生效,并持久生效。虚拟机openEulerVM能得到的运行时间将是原来的2倍。 + 对cpu\_shares值的修改不会立即生效,而是在虚拟机openEulerVM下一次启动后才生效,并持久生效。虚拟机openEulerVM能得到的运行时间将是原来的2倍。 ### 绑定QEMU进程至物理CPU #### 概述 -QEMU主进程绑定特性是将QEMU主进程绑定到特定的物理CPU范围内,从而保证了运行不同业务的虚拟机不会干扰到邻位虚拟机。例如在一个典型的云计算场景中,一台物理机上会运行多台虚拟机,而每台虚拟机的业务不同,造成了不同程度的资源占用,为了避免存储IO密集的虚拟机对邻位虚拟机的干扰,需要将不同虚拟机处理IO的存储进程完全隔离,由于QEMU主进程是处理前后端的主要服务进程,故需要实现隔离。 +QEMU主进程绑定特性是将QEMU主进程绑定到特定的物理CPU范围内,从而保证了运行不同业务的虚拟机不会干扰到邻位虚拟机。例如在一个典型的云计算场景中,一台物理机上会运行多台虚拟机,而每台虚拟机的业务不同,造成了不同程度的资源占用。为了避免存储IO密集的虚拟机对邻位虚拟机的干扰,需要将不同虚拟机处理IO的存储进程完全隔离,由于QEMU主进程是处理前后端的主要服务进程,故需要实现隔离。 #### 操作步骤 @@ -123,7 +118,7 @@ QEMU主进程绑定特性是将QEMU主进程绑定到特定的物理CPU范围内 *: 0-63 ``` - 这说明虚拟机_openEulerVM_对应的QEMU主进程可以在主机的所有物理CPU上调度。 + 这说明虚拟机openEulerVM对应的QEMU主进程可以在主机的所有物理CPU上调度。 - 在线绑定:修改处于running状态的虚拟机对应的QEMU进程的绑定关系,使用带**--live**参数的vcpu emulatorpin命令: @@ -136,7 +131,7 @@ QEMU主进程绑定特性是将QEMU主进程绑定到特定的物理CPU范围内 *: 2-3 ``` - 以上命令把虚拟机_open__Euler__VM_对应的QEMU进程绑定到物理CPU2、3上,即限制了QEMU进程只在这两个物理CPU上调度。这一绑定关系的调整立即生效,但在虚拟机关机并重新启动后失效。 + 以上命令把虚拟机openEulerVM对应的QEMU进程绑定到物理CPU2、3上,即限制了QEMU进程只在这两个物理CPU上调度。这一绑定关系的调整立即生效,但在虚拟机关机并重新启动后失效。 - 持久化绑定:在libvirt内部配置中修改虚拟机对应的QEMU进程的绑定关系,使用带**--config**参数的virsh emulatorpin命令: @@ -149,7 +144,7 @@ QEMU主进程绑定特性是将QEMU主进程绑定到特定的物理CPU范围内 *: 0,2-3 ``` - 以上命令把虚拟机_open__Euler__VM_对应的QEMU进程绑定到物理CPU0、2、3上,即限制了QEMU进程只在这三个物理CPU上调度。**这一绑定关系的调整不会立即生效,在虚拟机下一次启动后才生效,并持久生效**。 + 以上命令把虚拟机openEulerVM对应的QEMU进程绑定到物理CPU0、2、3上,即限制了QEMU进程只在这三个物理CPU上调度。**这一绑定关系的调整不会立即生效,在虚拟机下一次启动后才生效,并持久生效**。 ### 调整虚拟CPU绑定关系 @@ -213,57 +208,87 @@ QEMU主进程绑定特性是将QEMU主进程绑定到特定的物理CPU范围内 #### 概述 -在线调整(热插)虚拟机CPU是指在虚拟机处于运行状态下,为虚拟机热插CPU而不影响虚拟机正常运行的方案。当虚拟机内部业务压力不断增大,会出现所有CPU均处于较高负载的情形。为了不影响虚拟机内的正常业务运行,可以使用CPU在线调整(热插)特性,在不关闭虚拟机情况下增加虚拟机的CPU数目,提升虚拟机的计算能力。 +在线增加(热插)虚拟机CPU是指在虚拟机处于运行状态下,为虚拟机热插CPU而不影响虚拟机正常运行的方案。当虚拟机内部业务压力不断增大,会出现所有CPU均处于较高负载的情形。为了不影响虚拟机内的正常业务运行,可以使用CPU热插功能(在不关闭虚拟机情况下增加虚拟机的CPU数目),提升虚拟机的计算能力。 #### 约束限制 -- 创建虚拟机的时候,指定的主板类型(machine)需为virt-4.1版本及以上。 -- 在配置Guest NUMA的场景中,必须把属于同一个socket的vcpu配置在同一vNode中,否则在热插CPU后可能导致虚拟机softlockup,进而可能导致panic。 -- 迁移、休眠唤醒、快照过程中均不支持虚拟机CPU热插。 +- 如果处理器为AArch64架构,创建虚拟机时指定的虚拟机芯片组类型\(machine\)需为virt-4.1或virt更高版本。如果处理器为x86\_64架构,创建虚拟机时指定的虚拟机芯片组类型\(machine\)需为pc-i440fx-1.5或pc更高版本。 +- 在配置Guest NUMA的场景中,必须把属于同一个socket的vcpu配置在同一vNode中,否则热插CPU后可能导致虚拟机softlockup,进而可能导致虚拟机panic。 +- 虚拟机在迁移、休眠唤醒、快照过程中均不支持CPU热插。 +- 虚拟机CPU热插是否自动上线取决于虚拟机操作系统自身逻辑,虚拟化层不保证热插CPU自动上线。 - CPU热插同时受限于Hypervisor和GuestOS支持的最大CPU数目。 - 虚拟机启动、关闭、重启过程中可能出现热插CPU失效的情况,但再次重启会生效。 -- 热插虚拟机CPU的时候,如果新增CPU数目不是虚拟机CPU拓扑配置项中Cores的整数倍,可能会导致虚拟机内部看到的CPU拓扑是混乱的,强烈建议每次新增的CPU数目为Cores的整数倍。 +- 热插虚拟机CPU的时候,如果新增CPU数目不是虚拟机CPU拓扑配置项中Cores的整数倍,可能会导致虚拟机内部看到的CPU拓扑是混乱的,建议每次新增的CPU数目为Cores的整数倍。 - 若需要热插CPU在线生效且在虚拟机重启后仍有效,virsh setvcpus接口中需要同时传入--config和--live选项, 将热插CPU动作持久化。 #### 操作步骤 -- 创建虚拟机时配置指定的模板 +**一、配置虚拟机XML** - 配置指定虚拟机当前的CPU数目和所支持热插的最大CPU数目上限,同时指定machine类型为virt-4.1及以上 (目前virt machine类型最高为4.1)。 +1. 使用CPU热插功能,需要在创建虚拟机时配置虚拟机当前的CPU数目、虚拟机所支持的最大CPU数目,以及虚拟机芯片组类型(对于AArch64架构,需为virt-4.1及以上版本。对于x86\_64架构,需为pc-i440fx-1.5及以上版本)。这里以AArch64架构虚拟机为例,配置模板如下: ``` - n - - hvm - + + ... + n + + hvm + + ... + ``` - 其中,m为虚拟机当前CPU数目,n为虚拟机支持热插到的最大CPU数目,且满足n大于或等于m。例如,配一个虚拟机当前CPU数目为4,最大支持的热插CPU上限为64的XML配置为: + + >![](./public_sys-resources/icon-note.gif) **说明:** + >- placement的值必须是static。 + >- m为虚拟机当前CPU数目,即虚拟机启动后默认的CPU数目。n为虚拟机支持热插到的最大CPU数目,该值不能超过Hypervisor支持的虚拟机最大CPU规格及GuestOS支持的最大CPU规格。n大于或等于m。 + + 例如,配一个虚拟机当前CPU数目为4,最大支持的热插CPU上限为64的XML配置为: ``` - 64 - - hvm - + + …… + 64 + + hvm + + …… ``` - >![](public_sys-resources/icon-note.gif) **说明:** - > placement的值必须是static;当前CPU数目是虚拟机启动后默认的CPU数目;热插CPU数目上限是虚拟机CPU热插能到达的上限值,该值不能超过Hypervisor支持的虚拟机最大CPU规格及GuestOS支持的最大CPU规格。 -- 使用virsh命令执行虚拟机CPU热插操作 - virsh进行虚拟机CPU热插操作的命令为virsh setvcpus,具体格式如下: +**二、热插并上线CPU** +1. 如果热插CPU后需要自动上线热插的CPU,可以使用root权限在虚拟机内部创建udev rules文件/etc/udev/rules.d/99-hotplug-cpu.rules,并在其中定义udev规则,内容参考如下: + + ``` + # automatically online hot-plugged cpu + ACTION=="add", SUBSYSTEM=="cpu", ATTR{online}="1" ``` - virsh setvcpus [--config] [--live] - domain: 参数,必填。指定虚拟机名称。 - count: 参数,必填。指定目标CPU数量。 - --config: 选项,选填。下次启动时仍有效。 - --live: 选项,选填。在线生效。 + >![](./public_sys-resources/icon-note.gif) **说明:** + >如果没有使用udev rules自动上线热插CPU,可以在热插CPU后,使用root权限,参考如下命令手动上线: + >``` + >for i in `grep -l 0 /sys/devices/system/cpu/cpu*/online` + >do + > echo 1 > $i + >done + >``` + +2. 利用virsh工具进行虚拟机CPU热插操作。例如给虚拟机openEulerVM热插CPU到6,且在线生效的参考命令如下: + + ``` + virsh setvcpus openEulerVM 6 --live ``` - >![](public_sys-resources/icon-note.gif) **说明:** - > CPU上线依赖虚拟机内部操作,故CPU热插后需要Guest内部实现CPU自动上线或手动上线。 + >![](./public_sys-resources/icon-note.gif) **说明:** + >virsh setvcpus 进行虚拟机CPU热插操作的格式如下: + >``` + >virsh setvcpus [--config] [--live] + >``` + >- domain: 参数,必填。指定虚拟机名称。 + >- count: 参数,必填。指定目标CPU数目,即热插后虚拟机CPU数目。 + >- --config: 选项,选填。虚拟机下次启动时仍有效。 + >- --live: 选项,选填。在线生效。 ## 管理虚拟内存 @@ -315,7 +340,7 @@ NUMA(Non Uniform Memory Access Architecture) 模式是一种分布式存储 假设虚拟机的vCPU也绑定在NODE0的物理CPU上,就可以避免由于vCPU访问远端内存带来的性能下降。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >- 分配给虚拟机的内存不要超过该NUMA节点剩余的可用内存,否则可能导致虚拟机启动失败。 >- 建议虚拟机内存和vCPU都绑定在同一NUMA节点,避免vCPU访问远端内存造成性能下降。例如将上例中vCPU也绑定在NUMA node 0上。 @@ -350,7 +375,7 @@ NUMA(Non Uniform Memory Access Architecture) 模式是一种分布式存储 ``` ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >- 项提供虚拟机内部呈现NUMA拓扑功能,“cell id”表示vNode编号,“cpus”表示vCPU编号,“memory”表示对应vNode上的内存大小。 >- 如果希望通过Guest NUMA提供更好的性能,则需要配置,使vCPU和对应的内存分布在同一个物理NUMA NODE上: > - 中的“cellid”和中的“cell id”是对应的;“mode”可以配置为“strict”(严格从指定node上申请内存,内存不够则失败)、“preferred”(优先从某一node上申请内存,如果不够则从其他node上申请)、“interleave”(从指定的node上交叉申请内存);“nodeset”表示指定物理NUMA NODE。 @@ -365,13 +390,13 @@ NUMA(Non Uniform Memory Access Architecture) 模式是一种分布式存储 #### 约束限制 -- 创建虚拟机的时候,指定的主板类型(machine)需为virt-4.1版本及以上。 +- 创建虚拟机的时候,AArch64平台上指定的主板类型(machine)需为virt-4.1或更高virt以上,x86平台上指定的主板类型需要为pc-i440fx-1.5以上版本。 - 内存热插特性依赖于Guest NUMA,虚拟机必须配置Guest NUMA,否则无法完成内存热插流程。 - 热插内存时候必须指定新增内存所属的Gust NUMA node编号,否则内存热插失败。 - 虚拟机内核必须支持内存热插能力,否则虚拟机无法识别新增内存或者无法上线内存。 - 配置使用大页的虚拟机,热插内存的容量必须是系统hugepagesz的整数倍,否则会导致热插失败。 - 热插内存的大小必须为Guest物理内存块大小block_size_bytes的整数倍,否则无法正常上线。在Guest内部执行lsmem可以获取block_size_bytes大小。 -- 配置n个virtio-net网卡后,最大可热插次数取值为min{max_slot, 64 - n},原因是要给网卡预留slot。 +- 配置n个virtio-net网卡后,最大可热插次数取值为min{max_slot, 64 - n},因为要给网卡预留slot。 - vhost-user设备和内存热插特性互斥。配置了vhost-user设备的虚拟机不支持内存热插;内存热插后,不支持虚拟机热插vhost-user设备。 - 如果虚拟机操作系统为Linux系列,请确保初始内存大于等于4GB。 - 如果虚拟机操作系统为Windows类型,第一次热插内存必须指定到Guest NUMA node0上,否则热插内存无法被虚拟机识别。 @@ -381,53 +406,67 @@ NUMA(Non Uniform Memory Access Architecture) 模式是一种分布式存储 #### 操作步骤 -在虚拟机创建时候配可热插内存最大范围,预留槽位号,并配置Guest NUMA拓扑结构。 +**一、配置虚拟机XML** + +1. 使用内存热插功能,需要在创建虚拟机时配置可热插内存的最大范围、预留槽位号,并配置Guest NUMA拓扑结构。 + + 例如,为虚拟机配置32GiB初始内存,预留256个槽位号,最大支持1TiB内存上限,2个NUMA node的配置为: -- 创建虚拟机,预留内存热插槽位 ``` - 32 - 1024 - - - - - + + 32 + 1024 + + + + + - + + .... + ``` + + +>![](./public_sys-resources/icon-note.gif) **说明:** +>其中: +>maxMemory字段中slots号表示预留的内存插槽,最大取值为256。 +>maxMemory表示虚拟机支持的最大物理内存上限。 +>Guest NUMA配置请参见“配置Guest NUMA”相关章节。 + +**二、热插并上线内存** + +1. 如果热插内存后需要自动上线热插的内存,可以使用root权限在虚拟机内部创建udev rules文件/etc/udev/rules.d/99-hotplug-memory.rules,并在其中定义udev规则,内容参考如下: + ``` - 上述xml表示为虚拟机配置32G初始内存,预留256个槽位号,最大支持1TB内存上限,2个NUMA node的配置为: + # automatically online hot-plugged memory + ACTION=="add", SUBSYSTEM=="memory", ATTR{state}="online" + ``` + +2. 根据需要热插的内存大小和虚拟机Guest NUMA Node创建内存描述xml文件。 - >![](public_sys-resources/icon-note.gif) **说明:** - >其中: - >- maxMemory字段中slots号表示预留的内存插槽,最大为256; - >- maxMemory表示虚拟机支持的最大物理内存上限; - >- Guest NUMA配置请参考配置Guest NUMA相关章节。 + 例如,热插1GiB内存到NUMA node0上: -- 准备内存描述xml文件 ``` - + 1024 0 - - ``` - -- 使用virsh attach-device接口为虚拟机热插内存 - ``` - # virsh attach-device openEulerVM memory.xml --live - ``` - 上述命令行中memory.xml是热插内存的描述文件,可选参数--live表示在线生效,也可以加--config表示将热插内存持久化到虚拟机xml文件中。 - -- 热插内存上线 - - 使用shell脚本来完成内存上线的方法为: - ``` - for i in `grep -l offline /sys/devices/system/memory/memory*/state` - do - echo online > $i - done - ``` - 也可以使用udev rules自动完成内存上线。编辑udev rules创建文件/etc/udev/rules.d/99-hotplug-memory.rules - ``` - # automatically online hot-plugged memoryACTION=="add", SUBSYSTEM=="memory", ATTR{state}="online" - ``` +
+ + ``` + +3. 使用virsh attach-device命令为虚拟机热插内存。其中openEulerVM为虚拟机名称,memory.xml为热插内存的描述文件,--live表示热插内存在线生效,也可以使用--config 将热插内存持久化到虚拟机xml文件中。 + + ``` + # virsh attach-device openEulerVM memory.xml --live + ``` + + >![](./public_sys-resources/icon-note.gif) **说明:** + >如果没有使用udev rules自动上线热插内存,也可以使用root权限,参考如下命令手动上线: + >``` + >for i in `grep -l offline /sys/devices/system/memory/memory*/state` + >do + > echo online > $i + >done + >``` + diff --git "a/content/zh/docs/Virtualization/\347\256\241\347\220\206\350\231\232\346\213\237\346\234\272.md" "b/docs/zh/docs/Virtualization/\347\256\241\347\220\206\350\231\232\346\213\237\346\234\272.md" similarity index 78% rename from "content/zh/docs/Virtualization/\347\256\241\347\220\206\350\231\232\346\213\237\346\234\272.md" rename to "docs/zh/docs/Virtualization/\347\256\241\347\220\206\350\231\232\346\213\237\346\234\272.md" index 0cc5312a72d3b9d1ca0f2aa9034454eaf726e821..75b8e2e179d56cb364cd7d160c2181063fe00a09 100644 --- "a/content/zh/docs/Virtualization/\347\256\241\347\220\206\350\231\232\346\213\237\346\234\272.md" +++ "b/docs/zh/docs/Virtualization/\347\256\241\347\220\206\350\231\232\346\213\237\346\234\272.md" @@ -10,6 +10,9 @@ - [登录虚拟机](#登录虚拟机) - [使用VNC密码登录](#使用VNC密码登录) - [配置VNC TLS登录](#配置VNC-TLS登录) + - [虚拟机安全启动](#虚拟机安全启动) + - [总体介绍](#总体介绍) + - [安全启动实践](#安全启动实践) ## 虚拟机生命周期 @@ -36,7 +39,7 @@ 虚拟机不同状态之间可以相关转换,但必须满足一定规则。虚拟机不同状态之间的转换常用规则如[图1](#fig671014583483)所示。 **图 1** 状态转换图 -![](figures/状态转换图.png "状态转换图") +![](./figures/status-transition-diagram.png) #### 虚拟机标识 @@ -71,7 +74,7 @@ ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >可通过virsh命令查询虚拟机Id和UUID,操作方法请参见[查询虚拟机信息](#查询虚拟机信息)章节内容。 ### 管理命令 @@ -82,7 +85,7 @@ #### 前提条件 -- 执行虚拟机生命周期操作之前,需要查询虚拟机状态以确定可以执行对应操作。状态之间的基本转换关系请参见"总体介绍"中的"状态转换"的内容。 +- 执行虚拟机生命周期操作之前,需要查询虚拟机状态以确定可以执行对应操作。状态之间的基本转换关系请参见“总体介绍"中的“状态转换"的内容。 - 具备管理员权限。 - 准备好虚拟机XML配置文件。 @@ -223,7 +226,7 @@ virsh # virsh undefine ``` - 其中为销毁虚拟机的策略,可取值: + 其中\为销毁虚拟机的策略,可取值: nvram:销毁虚拟机的同时删除其对应的nvram文件。 @@ -499,7 +502,7 @@ Libvirt组件提供了一组查询虚拟机状态信息的命令,包括虚拟 - 虚拟机的VNC侦听端口,该端口一般在客户机启动时自动分配,一般为5900 + x(x为正整数,按照虚拟机启动的顺序递增,且5900对用户不可见)。 - 如果VNC设置了密码,还需要获取虚拟机的VNC密码。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >为虚拟机VNC配置密码,需要编辑虚拟机XML配置文件,即为graphics元素新增一个passwd属性,属性的值为要配置的密码。例如,将虚拟机的VNC密码配置为n8VfjbFK的XML配置参考如下: >``` > @@ -517,7 +520,7 @@ Libvirt组件提供了一组查询虚拟机状态信息的命令,包括虚拟 :3 ``` - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >登录 VNC 需要配置防火墙规则,允许 VNC 端口的连接。参考命令如下,其中X为数值“5900 + 端口号” ,例如本例中为5903。 >``` >firewall-cmd --zone=public --add-port=X/tcp @@ -526,13 +529,13 @@ Libvirt组件提供了一组查询虚拟机状态信息的命令,包括虚拟 2. 打开VncViewer软件,输入主机IP和端口号。格式为“主机IP:端口号”,例如:“10.133.205.53:3”。 3. 单击“确定”输入VNC密码(可选),登录到虚拟机VNC进行操作。 -### 配置VNC-TLS登录.md">配置VNC TLS登录 +### 配置VNC TLS登录 #### 概述 VNC服务端和客户端默认采用明文方式进行数据传输,因此通信内容可能被第三方截获。为了提升安全性,openEuler支持VNC服务端配置TLS模式进行加密认证。TLS(Tansport Layer Security)即传输层安全,可以实现VNC服务端和客户端之间加密通信,从而防止通信内容被第三方截获。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >- 使用TLS加密认证模式需要VNC客户端支持TLS模式(例如TigerVNC),否则无法连接到VNC客户端。 >- TLS加密认证模式配置粒度为主机服务器级别,开启该特性后,主机上正在运行的所有虚拟机对应的VNC客户端都将开启TLS加密认证模式。 @@ -551,7 +554,7 @@ VNC开启TLS加密认证模式的操作步骤如下: 2. 为VNC创建证书和私钥文件。此处以GNU TLS为例进行说明。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >使用GNU TLS,请提前安装好gnu-utils软件包。 1. 制作证书颁发机构CA(Certificate Authority)的证书文件。 @@ -643,8 +646,157 @@ VNC开启TLS加密认证模式的操作步骤如下: 5. 将生成的客户端证书ca-cert.pem,client-cert.pem和client-key.pem拷贝到VNC客户端。配置VNC客户端的TLS证书后即可使用VNC TLS登录。 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >- VNC客户端证书的配置请参见各客户端对应的使用说明,由用户自行配置。 >- 登录虚拟机的方式请参见“使用VNC密码登录”。 +## 虚拟机安全启动 + +### 总体介绍 + +#### 概述 + +安全启动(Secure Boot)就是利用公私钥对启动部件进行签名和验证。启动过程中,前一个部件验证后一个部件的数字签名,验证通过后,运行后一个部件,验证不通过则启动失败。安全启动的作用是检测设备启动阶段固件(Fireware)以及软件是否被篡改,防止恶意软件侵入和修改。通过安全启动可以保证系统启动过程中各个部件的完整性,防止没有经过认证的部件被加载运行,从而防止对系统及用户数据产生安全威胁。安全启动是在UEFI启动方式上实现的,Legacy启动方式不支持安全启动。根据UEFI规定,主板出厂的时候可以内置一些可靠的公钥。任何想要在这块主板上加载的操作系统或者硬件驱动程序,都必须通过这些公钥的认证。物理机上的安全启动由物理BIOS完成,虚拟机的安全启动通过软件模拟。虚拟机安全启动流程与host安全启动流程一致,都遵循开源UEFI规范。虚拟化平台上的UEFI由edk组件提供,虚拟机启动时qemu将UEFI镜像映射到内存中,为虚拟机模拟固件启动流程,安全启动正是虚拟机启动过程中edk提供的一个安全保护能力,用来保护虚拟机OS内核不被篡改。安全启动验签顺序:UEFI BIOS->shim->grub->vmlinuz(依次验签通过并加载)。 + +| 中文 | 英文 | 缩略语 | 中文定义/描述 | +| :-----| :----- | :----- | :----- | +| 安全启动 | Secure boot | Secure boot | 安全启动就是启动过程中,前一个部件验证后一个部件的数字签名,验证通过后,运行后一个部件,验证不通过就停下来。通过安全启动可以保证系统启动过程中各个部件的完整性。 | +| 平台密钥 | Platform key | PK | OEM厂商所有,必须为 RSA 2048 或更强,PK为平台拥有者和平台固件之间建立可信关系。平台拥有者将PK的公钥部分PKpub注册到平台固件中,平台拥有者可以使用PK的私有部分PKpriv来改变平台的拥有权或者注册KEK密钥。 | +| 密钥交换密钥 | Key exchange key | KEK | KEK为平台固件和OS之间创建可信关系。每一个操作系统和与平台固件通信的第三方应用在平台固件中注册KEK密钥的公共部分KEKpub。 | +| 签名数据库 | Database white list | DB | 存储验证shim、grub、vmlinuz等组件的密钥。 | +| 签名吊销数据库 | Database black list | DBx | 存储吊销的密钥。 | + +#### 功能说明 + +本次实现的虚拟机安全启动特性基于edk开源项目。非安全启动模式下,Linux基本流程如下: + +**图 1** 系统启动流程图 + +![](./figures/OSBootFlow.png) + +安全启动模式下UEFI BIOS启动后加载的首个组件是系统镜像中的shim,shim与UEFI BIOS进行交互获取存储在UEFI BIOS变量db里面的密钥对grub进行验证,加载grub后同样调用密钥和认证接口对kernel进行验证。Linux启动流程如下: + +**图 2** 安全启动流程图 + +![](./figures/SecureBootFlow.png) + +从整体处理流程上来看,安全启动特性包含多个关键场景,根据场景分析和系统分解,安全启动特性涉及以下几个子系统:UEFI BIOS校验shim,shim校验grub,grub校验kernel。UEFI BIOS对shim进行验证,验证通过则启动shim,不通过则提示错误,无法启动。Shim需要在镜像编译制作过程中使用私钥进行签名,公钥证书导入UEFI BIOS变量区DB中。Shim启动后验证启动grub,验证通过则启动grub,不通过则提示错误,无法启动。Grub需要在镜像编译制作过程中进行签名,使用和shim一样的公私钥对。Grub启动后检查调用shim注册在UEFI BIOS的认证接口和密钥对kernel进行验证,通过则启动内核,不通过则提示错误,grub需要在镜像编译制作过程中进行签名,使用和shim一样的公私钥对。 + +#### 约束限制 + +* 在不支持安全启动的UEFI BIOS上运行,对现有功能没有影响,业务无感知。 +* 安全启动特性依赖UEFI BIOS,必须在UEFI支持此功能的条件下才能发挥作用。 +* 在UEFI BIOS开启安全启动的情况下,如果相关部件没有签名或签名不正确,则无法正常启动系统。 +* 在UEFI BIOS关闭安全启动的情况下,启动过程的验证功能都会被关闭。 +* 安全启动验证链后半段,即shim->grub->kernel引导内核启动这部分的验证链由操作系统镜像实现,若操作系统不支持引导内核安全启动过程,则虚拟机安全启动失败。 +* 当前不提供x86架构使用nvram文件配置虚拟机安全启动 + +### 安全启动实践 + +虚拟机安全启动依赖于UEFI BIOS的实现,UEFI BIOS镜像通过edk rpm包安装,本节以AArch64为例对虚拟机安全启动进行配置。 + +#### 虚拟机配置 + +edk rpm包中的组件安装于/usr/share/edk2/aarch64目录下,包括`QEMU_EFI-pflash.raw`和`vars-template-pflash.raw`。虚拟机启动UEFI BIOS部分xml配置如下: + +``` + + hvm + /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw + /path/to/QEMU-VARS.fd + +``` + +其中/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw为UEFI BIOS镜像路径。/usr/share/edk2/aarch64/vars-template-pflash.raw为nvram镜像模板路径,/path/to/QEMU-VARS.fd为当前虚拟机nvram镜像文件路径,用于保存UEFI BIOS系统中的环境变量。 + +#### 证书导入 + +虚拟机安全启动时的证书从BIOS界面导入,在证书导入前需要将证书文件导入到虚拟机中。可以通过挂载磁盘的方式将证书文件所在目录挂载到虚拟机中,例如制作包含证书的镜像,并在虚拟机的配置文件xml中配置挂载该镜像: + +制作证书文件镜像 + +``` +dd of='/path/to/data.img' if='/dev/zero' bs=1M count=64 +mkfs.vfat -I /path/to/data.img +mkdir /path/to/mnt +mount path/to/data.img /path/to/mnt/ +cp -a /path/to/certificates/* /path/to/mnt/ +umount /path/to/mnt/ +``` +其中,/path/to/certificates/为证书文件所在路径,/path/to/data.img为证书文件镜像所在路径,/path/to/mnt/为镜像挂载路径。 + +在虚拟机xml文件中配置挂载该镜像 + +``` + + + + + + + + + +``` + +启动虚拟机,导入PK证书,流程如下(KEK证书,DB证书导入方式相同): + +虚拟机启动后,点击F2进入bios界面 + +**图 1** 进入bios界面 + +![](./figures/CertEnrollP1.png) + +**图 2** 进入Device Manager + +![](./figures/CertEnrollP2.png) + +**图 3** 进入Custom Secure Boot Options + +![](./figures/CertEnrollP3.png) + +**图 4** 进入PK Options + +![](./figures/CertEnrollP4.png) + +**图 5** Enroll PK + +![](./figures/CertEnrollP5.png) + +在File Explorer界面可以看到很多磁盘目录,其中包括我们通过磁盘挂载的证书文件目录 + +**图 6** File Explorer + +![](./figures/CertEnrollP6.png) + +在磁盘目录中选择要导入的PK证书 + +**图 7** 进入证书所在磁盘 + +![](./figures/CertEnrollP7.png) + +**图 8** 选择Commit Changes and Exit保存导入证书 + +![](./figures/CertEnrollP8.png) + +导入证书后,UEFI BIOS将证书信息以及安全启动属性写入nvram配置文件/path/to/QEMU-VARS.fd中,虚拟机下一次启动时会从/path/to/QEMU-VARS.fd文件中读取相关配置并初始化证书信息以及安全启动属性,自动导入证书并开启安全启动。同样,我们可以将/path/to/QEMU-VARS.fd作为其他相同配置虚拟机的UEFI BIOS启动配置模板文件,通过修改nvram template字段使其他虚拟机启动时自动导入证书并开启安全启动选项,虚拟机xml配置修改如下: + +``` + + hvm + /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw + + +``` + +#### 安全启动观测 + +正确配置虚拟机并导入PK、KEK、DB证书后,虚拟机将以安全启动的方式运行。可以通过在虚拟机配置文件xml中配置串口日志文件观测虚拟机是否为安全启动,串口日志文件的配置方式如: + +``` + + + +``` +虚拟机加载系统镜像成功后,当串口日志文件中出现"UEFI Secure Boot is enabled"信息时,表明虚拟机当前为安全启动。 diff --git "a/content/zh/docs/Virtualization/\347\256\241\347\220\206\350\256\276\345\244\207.md" "b/docs/zh/docs/Virtualization/\347\256\241\347\220\206\350\256\276\345\244\207.md" similarity index 76% rename from "content/zh/docs/Virtualization/\347\256\241\347\220\206\350\256\276\345\244\207.md" rename to "docs/zh/docs/Virtualization/\347\256\241\347\220\206\350\256\276\345\244\207.md" index ead838eec1a2ac6427abc6f3d504109217f853f9..b15bbb577b3686f68b62edcf338ba13c6ab17bbe 100644 --- "a/content/zh/docs/Virtualization/\347\256\241\347\220\206\350\256\276\345\244\207.md" +++ "b/docs/zh/docs/Virtualization/\347\256\241\347\220\206\350\256\276\345\244\207.md" @@ -11,6 +11,15 @@ - [配置USB控制器](#配置USB控制器) - [配置USB直通设备](#配置USB直通设备) - [管理快照](#管理快照) + - [配置磁盘IO悬挂](#配置磁盘IO悬挂) + - [总体介绍](#总体介绍) + - [概述](#概述) + - [应用场景](#应用场景) + - [注意事项和约束限制](#注意事项和约束限制) + - [磁盘IO悬挂配置](#磁盘IO悬挂配置) + - [Qemu命令行配置](#Qemu命令行配置) + - [xml配置方式](#xml配置方式) + ## 配置虚拟机PCIe控制器 @@ -270,20 +279,49 @@ PCI直通是指将host上的物理PCI设备直接呈现给一台虚拟机,供
  • on:表示直通设备的ROM呈现给虚拟机,例如:直通网卡虚拟机需要从该网卡的PXE启动时,可以将该选项配置为“on”,HBA卡直通虚拟机需要从ROM中启动时可以将该选项配置为“on”。
  • off:表示直通设备的ROM不呈现给虚拟机。
-

hostdev.address type

+

hostdev.address.type

+ +

设备在Guest内呈现的类型,与设备实际类型保持一致。

+ +

pci (默认配置)

+ + +

hostdev.address.domain

+ +

设备在Guest内呈现的domain号。

-

PCI设备呈现的Guest内bdf号。

+

0x0000

+ + +

hostdev.address.bus

-

[0x03-0x1e](slot范围)

+

设备在Guest内呈现的bus号。

+ +

0x00(默认配置),仅可配置为"配置虚拟机PCIe控制器"小节中配置的bus号。

+ + +

hostdev.address.slot

+ +

设备在Guest内呈现的slot号。

+ +

可配置slot号的范围:[0x03,0x1e]

说明:

-
  • domain为域信息,bus为总线号,slot为插槽号,function为功能
  • 除了slot插槽号,这里其余均默认为0。
  • 第一个slot插槽号0x00被系统占用,第二个slot号0x01被IDE控制器和USB控制器占用,第三个slot号0x02被video占用。
  • 最后一个slot号0x1f被pvchannel占用。
+
  • 第一个slot插槽号0x00被系统占用,第二个slot号0x01被IDE控制器和USB控制器占用,第三个slot号0x02被video占用。
  • 最后一个slot号0x1f被pvchannel占用。
+ + +

hostdev.address.function

+ +

设备在Guest内呈现的function号。

+ +

0x0(默认配置),可配置function号的范围:[0x0,0x7]

->![](public_sys-resources/icon-note.gif) **说明:** ->VFIO直通方式的最小直通单位是iommu\_group,host根据硬件上的ACS位,来划分iommu\_group。同一个iommu\_group中的设备只允许直通给同一台虚拟机(一个PCI设备上的若干个function,如果属于同一个iommu\_group,只允许直通给一个虚拟机使用)。 +>![](./public_sys-resources/icon-note.gif) **说明:** +>- 注意hostdev.address标签为可选配置项。 +>- VFIO直通方式的最小直通单位是iommu\_group,host根据硬件上的ACS位,来划分iommu\_group。同一个iommu\_group中的设备只允许直通给同一台虚拟机(一个PCI设备上的若干个function,如果属于同一个iommu\_group,只允许直通给一个虚拟机使用)。 ### SR-IOV直通 @@ -291,7 +329,7 @@ PCI直通是指将host上的物理PCI设备直接呈现给一台虚拟机,供 SR-IOV(Single Root I/O Virtualizaiton)是一种基于硬件的虚拟化解决方案,通过SR-IOV技术可以将一个PF(Physical Function)虚拟成多个VF(Virtual Function),每个VF都可以单独被直通给一个虚拟机,极大地提升了硬件资源利用率和虚拟机的I/O性能。一种典型的应用场景就是网卡SR-IOV设备直通,利用SR-IOV技术可以将一个物理网卡(PF)虚拟成多个VF网卡,再把VF直通给虚拟机使用。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >- SR-IOV需要物理硬件支持,使用SR-IOV前请确保要直通的硬件设备支持该能力,并且Host侧的设备驱动程序工作在SR-IOV模式下。 >- 查询网卡具体型号的办法如下: >例如下述回显,第一列为网卡的PCI号,19e5:1822为网卡的厂商号设备号。 @@ -303,7 +341,9 @@ SR-IOV(Single Root I/O Virtualizaiton)是一种基于硬件的虚拟化解 >0b:00.0 Ethernet controller: Device 19e5:1822 (rev 45) >81:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) >81:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) ->``` +>``` + + #### 操作方法 @@ -447,7 +487,7 @@ SR-IOV(Single Root I/O Virtualizaiton)是一种基于硬件的虚拟化解 - >![](public_sys-resources/icon-note.gif) **说明:** + >![](./public_sys-resources/icon-note.gif) **说明:** >关闭SR-IOV功能。 >在虚拟机使用完毕后(虚拟机关机,所有的VF均没有在使用中的时候),若要关闭SR-IOV功能。执行操作如下: >这里以Hi1822网卡(eth0对应PF的网口名称)为例: @@ -457,7 +497,7 @@ SR-IOV(Single Root I/O Virtualizaiton)是一种基于硬件的虚拟化解 #### HPRE加速器SR-IOV直通 -加速器引擎是TaiShan 200服务器基于Kunpeng 920处理器提供的硬件加速解决方案。HPRE加速器用于加速SSL/TLS应用,可以显著降低处理器消耗,提高处理器效率。 +加速器引擎是TaiShan 200服务器基于Kunpeng 920服务器提供的硬件加速解决方案。HPRE加速器用于加速SSL/TLS应用,可以显著降低处理器消耗,提高处理器效率。 在鲲鹏服务器上,需要把主机Host上的HPRE加速器的VF直通给虚拟机,供虚拟机内部业务使用。 **表 1** HPRE加速器说明 @@ -472,7 +512,7 @@ SR-IOV(Single Root I/O Virtualizaiton)是一种基于硬件的虚拟化解 | 最大VF数量 | 一个HPRE PF最多支持创建63个VF | ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >当虚拟机正在使用VF设备时,不允许卸载Host上的驱动,加速器不支持热插拔。 >VF操作(VFNUMS为0表示关闭VF,hpre_num用来标识具体的加速器设备): >``` @@ -555,8 +595,8 @@ USB设备的XML描述: ``` --
,其中,m表示该USB设备在主机上的bus地址,n表示device ID编号。 --
表示该USB设备要挂载到虚拟机指定的USB控制器。其中x表示控制器ID,与虚拟机所配置的USB控制器index编号相对应,y表示port地址。用户配置直通USB设备的时候需要配置这个字段,确保设备挂载的控制器与预期相符。 +- \
,其中,m表示该USB设备在主机上的bus地址,n表示device ID编号。 +- \
表示该USB设备要挂载到虚拟机指定的USB控制器。其中x表示控制器ID,与虚拟机所配置的USB控制器index编号相对应,y表示port地址。用户配置直通USB设备的时候需要配置这个字段,确保设备挂载的控制器与预期相符。 #### 配置方法 @@ -624,7 +664,7 @@ USB设备的XML描述: 虚拟机在使用过程中可能由于病毒对系统的破坏、系统文件被误删除或误格式化等原因造成虚拟机系统损坏导致系统无法启动。为了使损坏的系统快速恢复,openEuler提供了存储快照功能。openEuler可以在用户不感知的情况下制作虚拟机在某一时刻的快照(制作通常指需要几秒钟),该快照能帮助用户将磁盘快速恢复到某一时刻的状态,例如系统损坏后能快速恢复系统,从而提升系统可靠性。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >当前存储快照只支持raw、qcow2格式镜像,不支持block块设备。 ### 操作步骤 @@ -659,3 +699,96 @@ USB设备的XML描述: ``` +## 配置磁盘IO悬挂 + +### 总体介绍 + +#### 概述 + +存储故障(比如存储断链)场景下,物理磁盘的IO错误,通过虚拟化层传给虚拟机前端,虚拟机内部收到IO错误,可能导致虚拟机内部的用户文件系统变成read-only状态,需要重启虚拟机或者用户手动恢复,这给用户带来额外的工作量。 + +这种情况下,虚拟化平台提供了一种磁盘IO悬挂的能力,即当存储故障时,虚拟机IO下发到主机侧时将IO悬挂住,在悬挂时间内不对虚拟机内部返回IO错误,这样虚拟机内部的文件系统就不会因为IO错误而变为只读状态,而是呈现为Hang住;同时虚拟机后端按指定的悬挂间隔对IO进行重试。如果存储故障在悬挂时间内恢复正常,悬挂住的IO即可恢复落盘,虚拟机内部文件系统自动恢复运行,不需要重启虚拟机;如果存储故障在悬挂时间内未能恢复正常,则上报错误给虚拟机内部,通知给用户。 + +#### 应用场景 + +使用可能会发生存储面链路断链的云盘作为虚拟磁盘后端的场景。 + +#### 注意事项和约束限制 + +- 磁盘IO悬挂仅支持virtio-blk或virtio-scsi类型的虚拟磁盘。 + +- 磁盘IO悬挂的虚拟磁盘后端一般为可能会发生存储面链路断链的云盘。 + +- 磁盘IO悬挂可对读写IO错误分别使能,同一磁盘的读写IO错误重试间隔和超时时间使用相同配置。 + +- 磁盘IO悬挂重试间隔不包含主机侧实际读写IO的开销,即两次IO重试操作实际间隔会大于配置的IO错误重试间隔。 + +- 磁盘IO悬挂无法区分IO错误的具体类型(如存储断链、扇区坏道、预留冲突等),只要硬件返回IO错误,都会进行悬挂处理。 + +- 磁盘IO悬挂时,虚拟机内部IO不会返回,fdisk等访问磁盘的系统命令会卡住,虚拟机内部依赖该命令返回的业务也会一直卡住。 + +- 磁盘IO悬挂时,IO无法正常落盘,可能会导致虚拟机无法优雅关机,需要强制关机。 + +- 磁盘IO悬挂时,无法读取磁盘数据,会造成虚拟机无法正常重启,需要先将虚拟机强制关机,等待存储故障恢复后在重新启动虚拟机。 + +- 存储故障发生后,虽然存在磁盘IO悬挂,依然解决不了以下问题: + + 1. 存储相关高级特性执行失败 + + 高级特性包括:虚拟磁盘热插、虚拟磁盘热拔、创建虚拟磁盘、虚拟机启动、虚拟机关机、虚拟机强制关机、虚拟机休眠、虚拟机唤醒、虚拟机存储热迁移、虚拟机存储热迁移取消、虚拟机创建存储快照、虚拟机存储快照合并、查询虚拟机磁盘容量、磁盘在线扩容、插入虚拟光驱、弹出虚拟机光驱。 + + 2. 虚拟机生命周期执行失败 + +- 配置了磁盘IO悬挂的虚拟机发起热迁移时,应该在目的端磁盘的XML配置中带上与源端相同的磁盘IO悬挂配置。 + +### 磁盘IO悬挂配置 + +#### Qemu命令行配置 + +磁盘IO悬挂功能通过在虚拟磁盘设备上指定`werror=retry` `rerror=retry`进行使能,使用`retry_interval`和`retry_timeout`进行重试策略的配置。`retry_interval`为IO错误重试的间隔,配置范围为0-MAX_LONG,单位为毫秒,未配置时使用默认值1000ms;`retry_timeout`为IO错误重试超时时间,配置范围为0-MAX_LONG,0值表示不会发生超时,单位为毫秒,未配置时使用默认值0。 + +virtio-blk磁盘的磁盘IO悬挂配置如下: + +```shell +-drive file=/path/to/your/storage,format=raw,if=none,id=drive-virtio-disk0,cache=none,aio=native \ +-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,\ +drive=drive-virtio-disk0,id=virtio-disk0,write-cache=on,\ +werror=retry,rerror=retry,retry_interval=2000,retry_timeout=10000 +``` + +virtio-scsi磁盘的磁盘IO悬挂配置如下: + +```shell +-drive file=/path/to/your/storage,format=raw,if=none,id=drive-scsi0-0-0-0,cache=none,aio=native \ +-device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,\ +device_id=drive-scsi0-0-0-0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,write-cache=on,\ +werror=retry,rerror=retry,retry_interval=2000,retry_timeout=10000 +``` + +#### xml配置方式 + +磁盘IO悬挂功能通过在磁盘xml配置中指定`error_policy='retry'` `rerror_policy='retry'`进行使能。主要是配置上`retry_interval`和`retry_timeout`的值。`retry_interval`为IO错误重试的间隔,配置范围为0-MAX_LONG,单位为毫秒,未配置时使用默认值1000ms;`retry_timeout`为IO错误重试超时时间,配置范围为0-MAX_LONG,0值表示不会发生超时,单位为毫秒,未配置时使用默认值0。 + +virtio-blk磁盘的磁盘IO悬挂xml配置如下: + +```xml + + + + + + +``` + +virtio-scsi磁盘的磁盘IO悬挂xml配置如下: + +```xml + + + + + +
+ +``` + diff --git "a/content/zh/docs/Virtualization/\350\231\232\346\213\237\346\234\272\351\205\215\347\275\256.md" "b/docs/zh/docs/Virtualization/\350\231\232\346\213\237\346\234\272\351\205\215\347\275\256.md" similarity index 90% rename from "content/zh/docs/Virtualization/\350\231\232\346\213\237\346\234\272\351\205\215\347\275\256.md" rename to "docs/zh/docs/Virtualization/\350\231\232\346\213\237\346\234\272\351\205\215\347\275\256.md" index 9988f532a1c95fa71b2c3e5ada56d7eb41b81def..6d0ba4d38102d7eabb8b9b8275b7ed9314559c32 100644 --- "a/content/zh/docs/Virtualization/\350\231\232\346\213\237\346\234\272\351\205\215\347\275\256.md" +++ "b/docs/zh/docs/Virtualization/\350\231\232\346\213\237\346\234\272\351\205\215\347\275\256.md" @@ -102,12 +102,34 @@ XML配置文件的基本格式如下,其中label代表具体标签名,attrib - cpu:虚拟处理器模式。 - 属性mode:表示虚拟CPU的模式,属性值host-passthrough表示虚拟CPU的架构和特性与主机保持一致。 + 属性mode:表示虚拟CPU的模式。 + + - host-passthrough:表示虚拟CPU的架构和特性与主机保持一致。 + + - custom:表示虚拟CPU的架构和特性由此cpu元素控制。 子元素topology:元素cpu的子元素,用于描述虚拟CPU模式的拓扑结构。 - - 子元素topology的属性socket、cores、threads分别描述了虚拟机具有多少个cpu socket,每个cpu socket中包含多少个处理核心(core),每个处理器核心具有多少个超线程(thread),属性值为正整数且三者的乘积等于虚拟CPU的个数。 + - 子元素topology的属性socket、cores、threads分别描述了虚拟机具有多少个cpu socket,每个cpu socket中包含多少个处理核心(core),每个处理器核心具有多少个超线程(threads),属性值为正整数且三者的乘积等于虚拟CPU的个数。 + - ARM架构支持虚拟超线程, 虚拟CPU热插与虚拟超线程功能互斥。 + + 子元素model:元素cpu的子元素,当mode为custom时用于描述CPU的模型。 + + 子元素feature:元素cpu的子元素,当mode为custom时用于描述某一特性的使能情况。其中,属性name表示特性的名称,属性policy表示这一特性的使能控制策略: + + - force:表示强制使能该特性,无论主机CPU是否支持该特性。 + + - require:表示使能该特性,当主机CPU不支持该特性并且hypervisor不支持模拟该特性时,创建虚拟机失败。 + - optional:表示该特性的使能情况与主机上该特性的使能情况保持一致。 + + - disable:禁用该特性。 + + - forbid:禁用该特性,当主机支持该特性时创建虚拟机失败。 + + >![](./public_sys-resources/icon-note.gif) **说明:** + > + >虚拟机内部用户态CPU特性的呈现(如通过lscpu中的Flags呈现的CPU特性)需虚拟机内核的支持,若虚拟机内核版本较旧,可能无法呈现出全部CPU特性。 #### 配置示例 @@ -125,6 +147,21 @@ XML配置文件的基本格式如下,其中label代表具体标签名,attrib ``` +虚拟内存为8GiB,虚拟CPU个数为4,处理模式为custom,model为Kunpeng-920,且禁用pmull特性的配置如下: + +``` + + ... + 4 + 8 + + Kunpeng-920 + + + ... + +``` + ## 配置虚拟设备 虚拟机XML配置文件使用devices元素配置虚拟设备,包括存储设备、网络设备、总线、鼠标等,本节介绍常用的虚拟设备如何配置。 @@ -160,6 +197,7 @@ XML配置文件使用disk元素配置存储设备,disk常见的属性如[表1]

block:块设备

file:文件设备

dir: 目录路径

+

network:网络磁盘

device

@@ -192,6 +230,10 @@ XML配置文件使用disk元素配置存储设备,disk常见的属性如[表1]

file:对应file类型,值为对应文件的完全限定路径。

dev:对应block类型,值为对应主机设备的完全限定路径。

dir:对应dir类型,值为用作磁盘目录的完全限定路径。

+

protocol:使用的协议。

+

name: rbd磁盘名称,格式为:$pool/$volume 。

+

host name:mon地址。

+

port:mon地址的端口。

driver

@@ -202,6 +244,10 @@ XML配置文件使用disk元素配置存储设备,disk常见的属性如[表1]

io:磁盘IO模式,支持“native”和“threads”选项。

cache:磁盘的cache模式,可选项有“none”、“writethrough”、“writeback”、“directsync”等。

iothread:指定为磁盘分配的IO线程。

+

error_policy:IO写错误发生时的处理策略,可选项有“stop”、“report”、“ignore”、“enospace"、"retry"等。

+

rerror_policy:IO读错误发生时的处理策略,可选项有“stop”、“report”、“ignore”、“enospac”、“retry"等。

+

retry_interval:IO错误重试间隔,范围为0-MAX_INT,单位为毫秒,仅error_policy=“retry”或rerror_policy=“retry”时可配置。

+

retry_timeout:IO错误重试超时时间,范围为0-MAX_INT,单位为毫秒,仅error_policy=“retry”或rerror_policy=“retry”时可配置。

target

@@ -233,8 +279,13 @@ XML配置文件使用disk元素配置存储设备,disk常见的属性如[表1] 按照“准备虚拟机镜像”操作完成虚拟机镜像准备后,可以使用如下XML配置文件示例,为虚拟机配置虚拟磁盘。 -例如,该示例为虚拟机配置了两个IO线程,一个块磁盘设备和一个光盘设备,第一个IO线程分配给块磁盘设备使用。该块磁盘设备的后端介质为qcow2格式,且被作为优先启动盘。 +例如,该示例为虚拟机配置了两个IO线程,一个块磁盘设备,一个光盘设备和一个rbd磁盘,第一个IO线程分配给块磁盘设备使用。该块磁盘设备的后端介质为qcow2格式,且被作为优先启动盘。 +在使用rbd磁盘前请确保已经安装qemu-block-rbd驱动,如未安装,请在root下使用如下命令进行安装: +``` +# yum install qemu-block-rbd +``` +配置实例: ``` ... @@ -246,6 +297,13 @@ XML配置文件使用disk元素配置存储设备,disk常见的属性如[表1] + + + + + + + @@ -375,7 +433,7 @@ XML配置文件中使用元素“interface”,其属性“type”表示虚拟 PCIe总线是一种典型的树结构,具有比较好的扩展性,总线之间通过控制器关联,这里以PCIe总线为例介绍如何为虚拟机配置总线拓扑。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >总线的配置相对比较繁琐,若不需要精确控制设备拓扑结构,可以使用libvirt自动生成的缺省总线配置。 #### 元素介绍 @@ -386,9 +444,9 @@ controller:控制器元素,表示一个总线。 - 属性type:控制器必选属性,表示总线类型。常用取值有“pci”、“usb”、“scsi”、“virtio-serial”、“fdc”、“ccid”。 - 属性index:控制器必选属性,表示控制器的总线“bus”编号(编号从0开始),可以在地址元素“address”元素中使用。 -- 属性model:控制器必选属性,表示控制器的具体型号,其可选择的值与控制器类型“type”的值相关,对应关系及含义请参见[表4](#table191911761111)。 +- 属性model:控制器必选属性,表示控制器的具体型号,其可选择的值与控制器类型“type”的值相关,对应关系及含义请参见[表1](#table191911761111)。 - 子元素address:为设备或控制器指定其在总线网络中的挂载位置。 - - 属性type:设备地址类型。常用取值有“pci”、“usb”、“drive”。address的type类型不同, 对应的属性也不同,常用type属性值及其该取值下address的属性请参见[表5](#table1200165711314)。 + - 属性type:设备地址类型。常用取值有“pci”、“usb”、“drive”。address的type类型不同, 对应的属性也不同,常用type属性值及其该取值下address的属性请参见[表2](#table1200165711314)。 - 子元素model:控制器具体型号的名称。 - 属性name:指定控制器具体型号的名称,和父元素controller中的属性model对应。 @@ -577,7 +635,7 @@ controller:控制器元素,表示一个总线。 例如,在下面的示例中,配置了虚拟机的模拟器路径,pty串口、virtio媒体设备、USB写字板、USB键盘以及VNC图形设备。 ->![](public_sys-resources/icon-note.gif) **说明:** +>![](./public_sys-resources/icon-note.gif) **说明:** >graphics的type配置为VNC时,建议配置属性passwd,即使用VNC登录时的密码。 ``` diff --git "a/content/zh/docs/Virtualization/\350\256\244\350\257\206\350\231\232\346\213\237\345\214\226.md" "b/docs/zh/docs/Virtualization/\350\256\244\350\257\206\350\231\232\346\213\237\345\214\226.md" similarity index 96% rename from "content/zh/docs/Virtualization/\350\256\244\350\257\206\350\231\232\346\213\237\345\214\226.md" rename to "docs/zh/docs/Virtualization/\350\256\244\350\257\206\350\231\232\346\213\237\345\214\226.md" index 0f66103873ba477981c238a88442a5a128e3fbb3..988bf7f8a38ee656cd9ef293ebad10130d55beb7 100644 --- "a/content/zh/docs/Virtualization/\350\256\244\350\257\206\350\231\232\346\213\237\345\214\226.md" +++ "b/docs/zh/docs/Virtualization/\350\256\244\350\257\206\350\231\232\346\213\237\345\214\226.md" @@ -1,90 +1,90 @@ -# 认识虚拟化 - -## 简介 - -在计算机技术中,虚拟化是一种资源管理技术,它将计算机的各种实体资源(处理器、内存、磁盘、网络适配器等)予以抽象,转换后呈现并可供分割、组合为一个或多个计算机配置环境。这种资源管理技术打破了实体结构不可分割的障碍,使这些资源在虚拟化后不受现有资源的架设方式、地域或物理配置限制,从而让用户可以更好地应用计算机硬件资源,提高资源利用率。 - -虚拟化使得一台物理服务器上可以运行多台虚拟机,虚拟机共享物理机的处理器、内存、I/O资源等,但逻辑上虚拟机之间是互相隔离的。在虚拟化技术中,通常将这个物理服务器称为宿主机,宿主机上运行的虚拟机也叫客户机,虚拟机内部运行的操作系统称为客户机操作系统。在宿主机和虚拟机之间存在一层叫虚拟化层的软件,用于实现虚拟硬件的模拟,通常这个虚拟化层被称为虚拟机监视器,如下图所示: - -**图 1** 虚拟化架构 -![](figures/虚拟化架构.png "虚拟化架构") - -## 虚拟化架构 - -当前的主流虚拟化技术按照VMM(Virtual Machine Monitor)实现结构不同分为两种: - -- Hypervisor模型 - - 在这种模型中,VMM被看做是一个完备的操作系统,同时还具备虚拟化功能,VMM直接管理所有的物理资源,包括处理器,内存和I/O设备等。 - -- 宿主模型 - - 这种模型中,物理资源是由宿主机操作系统管理,宿主机操作系统是传统的操作系统,如Linux,Windows等,宿主机操作系统不提供虚拟化能力,提供虚拟化能力的VMM作为系统的一个驱动或者软件运行在宿主操作系统上,VMM通过调用host OS的服务获得资源,实现处理器,内存和I/O设备的模拟,这种模型的虚拟化实现有KVM、Virtual Box等。 - - -KVM(Kernel-based Virtual Machine)即基于内核的虚拟机,是Linux的一个内核模块,该内核模块使Linux成为一个hypervisor。KVM架构如[图2](#fig310953013541)所示。KVM本身未模拟任何硬件设备,它用于使能硬件提供的虚拟化能力,比如Intel VT-x, AMD-V, ARM virtualization extensions等。主板、内存及I/O等设备的模拟由用户态的QEMU完成。用户态QEMU配合内核KVM模块共同完成虚拟机的硬件模拟,客户操作系统运行在QEMU和KVM模拟的硬件上。 - -**图 2** KVM架构图 -![](figures/KVM架构图.png "KVM架构图") - -## 虚拟化组件 - -openEuler软件包中提供的虚拟化相关组件: - -- KVM:提供核心的虚拟化基础设施,使Linux系统成为一个hypervisor,支持多个虚拟机同时在该主机上运行。 -- QEMU:模拟处理器并提供一组设备模型,配合KVM实现基于硬件的虚拟化模拟加速。 -- Libvirt:为管理虚拟机提供工具集,主要包含统一、稳定、开放的应用程序接口(API)、守护进程 (Libvirtd)和一个默认命令行管理工具(virsh)。 -- Open vSwitch:为虚拟机提供虚拟网络的工具集,支持编程扩展,以及标准的管理接口和协议(如NetFlow, sFlow,IPFIX, RSPAN, CLI, LACP, 802.1ag)。 - -## 虚拟化特点 - -业界普遍认可虚拟化有以下特点: - -- 分区 - - 虚拟化可以对一台物理服务器进行软件逻辑分割,实现运行多台不同规格的虚拟机(虚拟服务器)。 - - -- 隔离 - - 虚拟化能够模拟虚拟硬件,为虚拟机运行完整操作系统提供硬件条件,每个虚拟机内部操作系统都是独立的,互相隔离的。例如一台虚拟机的操作系统由于故障或者受到恶意破坏而崩溃,其他虚拟机内部的操作系统和应用不会受到任何影响。 - - -- 封装性 - - 以虚拟机为粒度封装,优秀的封装性使得虚拟机比物理机更灵活,可以实现虚拟机的热迁移、快照、克隆等功能,实现数据中心的快速部署和自动化运维。 - - -- 硬件无关 - - 经过虚拟化层的抽象后,虚拟机与底层的硬件没有直接的绑定关系,可以在其他服务器上不加修改地运行虚拟机。 - - -## 虚拟化优势 - -虚拟化为数据中心的基础设施带来了众多优势: - -- 灵活性和可扩展性 - - 用户可以根据需求进行动态资源分配和回收,满足动态变化的业务需求,同时也可以根据不同的产品需求,规划不同的虚拟机规格,在不改变物理资源配置的情况下进行规模调整。 - - -- 更高的可用性和更好的运维手段 - - 虚拟化提供热迁移,快照,热升级,容灾自动恢复等运维手段,可以在不影响用户的情况下对物理资源进行删除、升级或变更,提高了业务连续性,同时可以实现自动化运维。 - - -- 提高安全性 - - 虚拟化提供了操作系统级的隔离,同时实现基于硬件提供的处理器操作特权级控制,相比简单的共享机制具有更高的安全性,可实现对数据和服务进行可控和安全的访问。 - - -- 更高的资源利用率 - - 虚拟化可支持实现物理资源和资源池的动态共享,提高资源利用率。 - - -## openEuler虚拟化 - -openEuler提供了支持AArch64和x86_64处理器架构的KVM虚拟化组件。 - +# 认识虚拟化 + +## 简介 + +在计算机技术中,虚拟化是一种资源管理技术,它将计算机的各种实体资源(处理器、内存、磁盘、网络适配器等)予以抽象,转换后呈现并可供分割、组合为一个或多个计算机配置环境。这种资源管理技术打破了实体结构不可分割的障碍,使这些资源在虚拟化后不受现有资源的架设方式、地域或物理配置限制,从而让用户可以更好地应用计算机硬件资源,提高资源利用率。 + +虚拟化使得一台物理服务器上可以运行多台虚拟机,虚拟机共享物理机的处理器、内存、I/O资源等,但逻辑上虚拟机之间是互相隔离的。在虚拟化技术中,通常将这个物理服务器称为宿主机,宿主机上运行的虚拟机也叫客户机,虚拟机内部运行的操作系统称为客户机操作系统。在宿主机和虚拟机之间存在一层叫虚拟化层的软件,用于实现虚拟硬件的模拟,通常这个虚拟化层被称为虚拟机监视器,如下图所示: + +**图 1** 虚拟化架构 +![](./figures/virtualized-architecture.png) + +## 虚拟化架构 + +当前的主流虚拟化技术按照VMM(Virtual Machine Monitor)实现结构不同分为两种: + +- Hypervisor模型 + + 在这种模型中,VMM被看做是一个完备的操作系统,同时还具备虚拟化功能,VMM直接管理所有的物理资源,包括处理器,内存和I/O设备等。 + +- 宿主模型 + + 这种模型中,物理资源是由宿主机操作系统管理,宿主机操作系统是传统的操作系统,如Linux,Windows等,宿主机操作系统不提供虚拟化能力,提供虚拟化能力的VMM作为系统的一个驱动或者软件运行在宿主操作系统上,VMM通过调用host OS的服务获得资源,实现处理器,内存和I/O设备的模拟,这种模型的虚拟化实现有KVM、Virtual Box等。 + + +KVM(Kernel-based Virtual Machine)即基于内核的虚拟机,是Linux的一个内核模块,该内核模块使Linux成为一个hypervisor。KVM架构如[图2](#fig310953013541)所示。KVM本身未模拟任何硬件设备,它用于使能硬件提供的虚拟化能力,比如Intel VT-x, AMD-V, ARM virtualization extensions等。主板、内存及I/O等设备的模拟由用户态的QEMU完成。用户态QEMU配合内核KVM模块共同完成虚拟机的硬件模拟,客户操作系统运行在QEMU和KVM模拟的硬件上。 + +**图 2** KVM架构图 +![](./figures/kvm-architecture.png) + +## 虚拟化组件 + +openEuler软件包中提供的虚拟化相关组件: + +- KVM:提供核心的虚拟化基础设施,使Linux系统成为一个hypervisor,支持多个虚拟机同时在该主机上运行。 +- QEMU:模拟处理器并提供一组设备模型,配合KVM实现基于硬件的虚拟化模拟加速。 +- Libvirt:为管理虚拟机提供工具集,主要包含统一、稳定、开放的应用程序接口(API)、守护进程 (Libvirtd)和一个默认命令行管理工具(virsh)。 +- Open vSwitch:为虚拟机提供虚拟网络的工具集,支持编程扩展,以及标准的管理接口和协议(如NetFlow, sFlow,IPFIX, RSPAN, CLI, LACP, 802.1ag)。 + +## 虚拟化特点 + +业界普遍认可虚拟化有以下特点: + +- 分区 + + 虚拟化可以对一台物理服务器进行软件逻辑分割,实现运行多台不同规格的虚拟机(虚拟服务器)。 + + +- 隔离 + + 虚拟化能够模拟虚拟硬件,为虚拟机运行完整操作系统提供硬件条件,每个虚拟机内部操作系统都是独立的,互相隔离的。例如一台虚拟机的操作系统由于故障或者受到恶意破坏而崩溃,其他虚拟机内部的操作系统和应用不会受到任何影响。 + + +- 封装性 + + 以虚拟机为粒度封装,优秀的封装性使得虚拟机比物理机更灵活,可以实现虚拟机的热迁移、快照、克隆等功能,实现数据中心的快速部署和自动化运维。 + + +- 硬件无关 + + 经过虚拟化层的抽象后,虚拟机与底层的硬件没有直接的绑定关系,可以在其他服务器上不加修改地运行虚拟机。 + + +## 虚拟化优势 + +虚拟化为数据中心的基础设施带来了众多优势: + +- 灵活性和可扩展性 + + 用户可以根据需求进行动态资源分配和回收,满足动态变化的业务需求,同时也可以根据不同的产品需求,规划不同的虚拟机规格,在不改变物理资源配置的情况下进行规模调整。 + + +- 更高的可用性和更好的运维手段 + + 虚拟化提供热迁移,快照,热升级,容灾自动恢复等运维手段,可以在不影响用户的情况下对物理资源进行删除、升级或变更,提高了业务连续性,同时可以实现自动化运维。 + + +- 提高安全性 + + 虚拟化提供了操作系统级的隔离,同时实现基于硬件提供的处理器操作特权级控制,相比简单的共享机制具有更高的安全性,可实现对数据和服务进行可控和安全的访问。 + + +- 更高的资源利用率 + + 虚拟化可支持实现物理资源和资源池的动态共享,提高资源利用率。 + + +## openEuler虚拟化 + +openEuler提供了支持AArch64和x86_64处理器架构的KVM虚拟化组件。 + diff --git "a/content/zh/docs/Virtualization/\351\231\204\345\275\225.md" "b/docs/zh/docs/Virtualization/\351\231\204\345\275\225.md" similarity index 100% rename from "content/zh/docs/Virtualization/\351\231\204\345\275\225.md" rename to "docs/zh/docs/Virtualization/\351\231\204\345\275\225.md" diff --git a/docs/zh/docs/desktop/DDE-User-Manual.md b/docs/zh/docs/desktop/DDE-User-Manual.md new file mode 100644 index 0000000000000000000000000000000000000000..87dd140ea8fc15fcecdcacab890e836c77d6d661 --- /dev/null +++ b/docs/zh/docs/desktop/DDE-User-Manual.md @@ -0,0 +1,880 @@ + + +# DDE桌面环境用户手册 +- [概述](#概述) +- [桌面](#桌面) +- [任务栏](#任务栏) +- [启动器](#启动器) +- [控制中心](#控制中心) +- [键盘交互](#键盘交互) + +## 概述 + +DDE桌面环境是一款美观易用、安全可靠的图形化操作界面。桌面环境主要由桌面、任务栏、启动器、控制中心等组成,是您使用该操作系统的基础,主界面如下图所示。 + +![1|desk](./figures/43.jpg) + +### 欢迎 + +初次进入DDE桌面环境,会自动打开欢迎程序。您可以观看视频了解系统功能,选择桌面样式和图标主题,进一步了解该系统。 + +![welcome](./figures/64.png) + +## 桌面 + +桌面是您登录后看到的主屏幕区域。在桌面上,您可以新建文件/文件夹、排列文件、打开终端、设置壁纸和屏保等,还可以通过启动器 [发送到桌面](#设置快捷方式) 向桌面添加应用的快捷方式。 + +![0|rightbuttonmenu](./figures/41.png) + +### 新建文件夹/文档 + +在桌面新建文件夹或文档,也可以对文件进行常规操作,和在文件管理器中一样。 + +- 在桌面上,单击鼠标右键,单击 **新建文件夹**,输入新建文件夹的名称。 +- 在桌面上,单击鼠标右键,单击 **新建文档**,选择新建文档的类型,输入新建文档的名称。 + +在桌面文件或文件夹上,单击鼠标右键,您可以使用文件管理器的相关功能: + +| 功能 | 说明 | +| ----------- | -------------------------------------------------------- | +| 打开方式 | 选定系统默认打开方式,也可以选择其他关联应用程序来打开。 | +| 剪切 | 移动文件或文件夹。 | +| 复制 | 复制文件或文件夹。 | +| 重命名 | 重命名文件或文件夹。 | +| 删除 | 删除文件或文件夹。 | +| 创建链接 | 创建一个快捷方式。 | +| 标记信息 | 添加标记信息,以对文件或文件夹进行标签化管理。 | +| 压缩/解压缩 | 压缩文件或文件夹,或对压缩文件进行解压。 | +| 属性 | 查看文件或文件夹的基本信息,共享方式,及其权限。 | + +### 设置排列方式 + +您可以对桌面上的图标按照需要进行排序。 + +1. 在桌面上,单击鼠标右键。 +2. 单击 **排序方式**,您可以: + - 单击 **名称**,将按文件的名称顺序显示。 + - 单击 **大小**,将按文件的大小顺序显示。 + - 单击 **类型**,将按文件的类型顺序显示。 + - 单击 **修改时间**,文件将按最近一次的修改日期顺序显示。 + +> ![tips](./figures/icon125-o.svg)窍门:*您也可以勾选 **自动排列**,桌面图标将从上往下,从左往右按照当前排序规则排列,有图标被删除时后面的图标会自动向前填充。* + +### 调整图标大小 + +1. 在桌面上,单击鼠标右键。 +2. 单击 **图标大小**。 +3. 选择一个合适的图标大小。 + +> ![tips](./figures/icon125-o.svg)窍门:*您也可以用 **Ctrl** + ![=](./figures/icon134-o.svg)/![-](./figures/icon132-o.svg) 鼠标滚动来调整桌面和启动器中的图标大小。* + +### 设置显示器 + +从这里快速进入控制中心设置显示器的缩放比例、分辨率和亮度等。 + +1. 在桌面上,单击鼠标右键。 +2. 单击 **显示设置**,快速进入控制中心的显示设置界面。 + +> ![notes](./figures/icon99-o.svg)说明:*关于显示的设置,具体操作请参阅 [显示设置](#显示设置) 。* + + ### 更改壁纸 + +您可以选择一些精美、时尚的壁纸来美化桌面,让您的电脑显示与众不同。 + + +1. 在桌面上,单击鼠标右键。 +2. 单击 **壁纸与屏保**,在桌面底部预览所有壁纸。 +3. 选择某一壁纸后,壁纸就会在桌面和锁屏中生效。 +4. 您可以单击 **仅设置桌面** 和 **仅设置锁屏** 来控制壁纸的生效范围。 + +![1|wallpaper](./figures/63.jpg) + +              + +> ![tips](./figures/icon125-o.svg)窍门: *您还可以在图片查看器中设置您喜欢的图片为桌面壁纸。* + +### 剪贴板 + +剪贴板展示当前用户登录系统后复制和剪切的所有文本、图片和文件。使用剪贴板可以快速复制其中的某项内容。注销或关机后,剪贴板会自动清空。 + +1. 使用快捷键 **Ctrl** + **Alt** + **V** 唤出剪贴板。 +2. 双击剪贴板内的某一区块,会快速复制当前内容, 且当前区块会被移动到剪贴板顶部。 +3. 选择目标位置粘贴。 +4. 鼠标移入剪贴板的某一区块,单击上方的![close](./figures/icon57-o.svg),删除当前内容;单击顶部的 **全部清除**,清空剪贴板。 + +![1|clipboard](./figures/40.png) + +## 任务栏 + +任务栏是指位于桌面底部的长条,主要由启动器、应用程序图标、托盘区、系统插件等组成。在任务栏,您可以打开启动器、显示桌面、进入工作区,对其上的应用程序进行打开、新建、关闭、强制退出等操作,还可以设置输入法,调节音量,连接网络,查看日历,进入关机界面等。 + +### 认识任务栏图标 + +任务栏图标包括启动器图标、应用程序图标、托盘区图标、系统插件图标等。 + +![1|fashion](./figures/45.png) + +| 图标 | 说明 | 图标 | 说明 | +| ------------------------------------------- | :------------------------------------------ | ------------------------------------------------ | ------------------------------------- | +| ![launcher](./figures/icon66-o.svg) | 启动器 - 点击查看所有已安装的应用。 | ![deepin-toggle-desktop](./figures/icon69-o.svg) | 显示桌面。 | +| ![dde-file-manager](./figures/icon63-o.svg) | 文件管理器 - 点击查看磁盘中的文件、文件夹。 | ![dde-calendar](./figures/icon62-o.svg) | 日历 - 查看日期、新建日程。 | +| ![controlcenter](./figures/icon58-o.svg) | 控制中心 - 点击进入系统设置。 | ![notification](./figures/icon101-o.svg) | 通知中心 - 显示所有系统和应用的通知。 | +| ![onboard](./figures/icon103-o.svg) | 屏幕键盘 - 点击使用虚拟键盘。 | ![shutdown](./figures/icon122-o.svg) | 电源 - 点击进入关机界面。 | +| ![trash](./figures/icon126-o.svg) | 回收站。 | | | + +              + +> ![tips](./figures/icon125-o.svg)窍门:*在高效模式下,单击任务栏最右侧可显示桌面。将鼠标指针移到任务栏上已打开窗口的图标时,会显示相应的预览窗口。* + +### 切换显示模式 + +任务栏提供两种显示模式:时尚模式和高效模式,显示不同的图标大小和应用窗口激活效果。 + + +![1|fashion](./figures/46.png) + +![1|efficient](./figures/63.png) + +              + +您可以通过以下操作来切换显示模式: + +1. 右键单击任务栏。 +2. 在 **模式** 子菜单中选择一种显示模式。 + +### 设置任务栏位置 + +您可以将任务栏放置在桌面的任意方向。 + +1. 右键单击任务栏。 +2. 在 **位置** 子菜单中选择一个方向。 + +### 调整任务栏高度 + +鼠标拖动任务栏边缘,改变任务栏高度。 + +### 显示/隐藏插件 + +1. 右键单击任务栏。 +2. 在 **插件** 子菜单中勾选或取消勾选 **回收站、电源、显示桌面、屏幕键盘、通知中心、时间**,可以设置这些插件在任务栏上的显示和隐藏效果。 + +### 查看通知 + +当有系统或应用通知时,会在桌面上方弹出通知消息。若有按钮,单击按钮执行对应操作;若无按钮,单击关闭此消息。 + +![message](./figures/51.png) + +              + +您还可以单击任务栏上的 ![notification](./figures/icon101-o.svg), 打开通知中心,查看所有通知。 + +### 查看日期时间 + +- 鼠标指针悬停在任务栏的时间上,查看当前日期、星期和时间。 +- 单击时间,打开日历。 + +### 进入关机界面 + +您可以单击任务栏上的 ![shutdown](./figures/icon136-o.svg) 进入关机界面,也可以在启动器的小窗口模式中单击 ![poweroff_normal](./figures/icon136-o.svg)。 + +| 功能 | 说明 | +| ---------------------------------------------------------- | ------------------------------------------------------- | +| 关机![poweroff_normal](./figures/icon136-o.svg) | 关闭电脑。 | +| 重启![reboot_normal](./figures/icon110-o.svg) | 关机后再次重新运行您的电脑。 | +| 锁定![lock_normal](./figures/icon90-o.svg) | 锁定电脑,或按下键盘上的 **Super** + **L** 组合键锁定。 | +| 切换用户![userswitch_normal](./figures/icon128-o.svg) | 选择另一个用户帐户登录。 | +| 注销![logout_normal](./figures/icon92-o.svg) | 清除当前登录用户的信息。 | +| 系统监视器![deepin-system-monitor](./figures/icon68-o.svg) | 快速启动系统监视器。 | + +              + +> ![notes](./figures/icon99-o.svg)说明:*当系统存在多个帐户时才显示 ![userswitch_normal](./figures/icon128-o.svg)。* + + +### 回收站 + +电脑中临时被删除的所有文件您都可以在回收站中找到,回收站中的文件可以被恢复或清空。 + +#### 还原文件 + +对于已删除的文件,您可以进入回收站进行还原,或使用 **Ctrl** + **Z** 还原刚删除的文件。 + +1. 在回收站中,选择要恢复的文件。 +2. 单击鼠标右键,选择 **还原**。 +3. 还原文件到原来的存储路径下。 + +> ![attention](./figures/icon52-o.svg)注意:*如果原来所在的文件夹已经删除,还原文件时会自动新建文件夹*。 + +#### 清空回收站 + +在回收站中,单击 **清空**,将彻底删除回收站的所有内容。 + +## 启动器 + +启动器 ![launcher](./figures/icon66-o.svg) 帮助您管理系统中已安装的所有应用,在启动器中使用分类导航或搜索功能可以快速找到您需要的应用程序。 + +> ![tips](./figures/icon125-o.svg)窍门:*您可以进入启动器查看新安装的应用。新安装应用的旁边会出现一个小蓝点提示*。 + +### 切换模式 + +启动器有全屏和小窗口两种模式。单击启动器界面右上角的图标来切换模式。 + +两种模式均支持搜索应用、设置快捷方式等操作。 + +小窗口模式还支持快速打开文件管理器,控制中心和进入关机界面等功能。 + +![1|fullscreen](./figures/47.jpg)![1|ini](./figures/52.png) + + +### 排列应用 + +在全屏模式下,系统默认按照安装时间排列所有应用。 + +- 将鼠标悬停在应用图标上,按住鼠标左键不放,将应用图标拖拽到指定的位置自由排列。 +- 单击启动器界面左上角分类图标![category](./figures/icon56-o.svg)进行排列。 + +![1|sortapp](./figures/60.jpg) + +              + +在小窗口模式下,默认按照使用频率排列应用。 + +### 查找应用 + +在启动器中,您可以滚动鼠标滚轮或切换分类导航查找应用。 + +如果知道应用名称,直接在搜索框中输入关键字,快速定位到需要的应用。 + +### 设置快捷方式 + +快捷方式提供了一种简单快捷地启动应用的方法。 + +#### 创建快捷方式 + +将应用发送到桌面或任务栏上,方便您的后续操作。 + +在启动器中,右键单击应用图标,您可以: + +- 单击 **发送到桌面**,在桌面创建快捷方式。 + +- 单击 **发送到任务栏**,将应用固定到任务栏。 + +![0|sendto](./figures/58.png) + +> ![notes](./figures/icon99-o.svg)说明:*您还可以从启动器拖拽应用图标到任务栏上放置。但是当应用处于运行状态时您将无法拖拽固定,此时您可以右键单击任务栏上的应用图标,选择 **驻留** 将应用固定到任务栏,以便下次使用时从任务栏上快速打开。* + +#### 删除快捷方式 + +您既可以在桌面直接删除应用的快捷方式,也可以在任务栏和启动器中删除。 + +**从任务栏上删除** + +- 在任务栏上,按住鼠标左键不放,将应用图标拖拽到任务栏以外的区域移除快捷方式。 +- 当应用处于运行状态时您将无法拖拽移除,此时可以右键单击任务栏上的应用图标,选择 **移除驻留** 将应用从任务栏上移除。 + +**从启动器中删除** + +在启动器中,右键单击应用图标,您可以: + +- 单击 **从桌面上移除**,删除桌面快捷方式。 +- 单击 **从任务栏上移除**,将固定到任务栏上的应用移除。 + +> ![notes](./figures/icon99-o.svg)说明:*以上操作,只会删除应用的快捷方式,而不会卸载应用。* + +### 运行应用 + +对于已经创建了桌面快捷方式或固定到任务栏上的应用,您可以通过以下途径来打开应用。 + +- 双击桌面图标,或右键单击桌面图标选择 **打开**。 +- 直接单击任务栏上的应用图标,或右键单击任务栏上的应用图标选择 **打开**。 + +在启动器中,直接单击应用图标打开,或右键单击应用图标选择 **打开**。 + +> ![tips](./figures/icon125-o.svg)窍门:*对于经常使用的应用,您可以在启动器中,右键单击应用图标选择 **开机自动启动**。* + + +## 控制中心 + +DDE桌面操作系统通过控制中心来管理系统的基本设置,包括帐户管理、网络设置、日期和时间、个性化设置、显示设置、系统信息查看等。当您进入桌面环境后,单击任务栏上的 ![controlcenter](./figures/icon58-o.svg) 即可打开控制中心窗口。 + +### 首页介绍 + +控制中心首页主要展示各个设置模块,方便日常查看和快速设置。 + +![2|dcchomepage](./figures/42.png) + +              + +打开控制中心的某一设置模块后,可以通过左侧导航栏快速切换到另一设置模块。 + +![2|cc-navigation](./figures/39.png) + + + +#### 标题栏 + +标题栏包含返回按钮,搜索框,主菜单及窗口按钮。 + +- 返回按钮:若要返回首页,单击 ![back](./figures/icon53-o.svg)。 +- 搜索框:输入关键字后,回车,搜索相应设置。 +- 主菜单:单击![menu](./figures/icon83-o.svg) 进入主菜单。在主菜单中,您可以设置窗口主题,查看版本,或退出控制中心。 + +### 帐户设置 + +在安装系统时您已经创建了一个帐户。在这里,您可以修改帐户设置或创建一个新帐户。 + +![0|account](./figures/38.png) + +#### 创建新帐户 + +1. 在控制中心首页,单击 ![account_normal](./figures/icon49-o.svg)。 +2. 单击![add](./figures/icon50-o.svg)。 +3. 输入用户名、密码和重复密码。 +4. 单击 **创建**。 +5. 在授权对话框输入当前帐户的密码,新帐户就会添加到帐户列表中。 + + + +#### 更改头像 + +1. 在控制中心首页,单击 ![account_normal](./figures/icon49-o.svg)。 +2. 单击列表中的帐户。 +3. 单击帐户头像,选择一个头像或添加本地头像,头像就替换完成了。 + +#### 设置全名 + +帐户全名会显示在帐户列表和系统登录界面,可根据需要设置。 + +1. 在控制中心首页,单击 ![account_normal](./figures/icon49-o.svg)。 +2. 单击列表中的帐户。 +3. 单击 **设置全名** 后的 ![edit](./figures/icon75-o.svg),输入帐户全名。 + + +#### 修改密码 + +1. 在控制中心首页,单击 ![account_normal](./figures/icon49-o.svg)。 +2. 单击当前帐户。 +3. 单击 **修改密码**,进入修改密码页面。 +4. 输入当前密码、新密码和重复密码。 + + +#### 删除帐户 + +1. 在控制中心首页,单击 ![account_normal](./figures/icon49-o.svg)。 +2. 单击其他未登录的帐户。 +3. 单击 **删除帐户** 。 +4. 在弹出的确认界面中单击 **删除**。 + +> ![attention](./figures/icon52-o.svg)注意: *已登录的帐户无法被删除。* + +#### 权限设置 + +除安装时的第一个帐户是管理员权限外,后面所添加的所有帐户都是普通用户。一个帐户可以在多个用户组内。 + +##### 设置组 + +添加或修改帐户时,可以: + +- 选择系统内已有的组。 +- 选择当前用户同名的组。 +- 选择之前添加帐户时和其他用户同名的组。 + +### 显示设置 + +设置显示器的分辨率、亮度、屏幕方向等,让您的电脑显示到达最佳状态。 + +![0|video](./figures/44.png) + +#### 单屏设置 + +##### 更改分辨率 + +1. 在控制中心首页,单击 ![display_normal](./figures/icon72-o.svg)。 +2. 单击 **分辨率**,进入分辨率设置界面。 +3. 在列表中选择合适的分辨率参数。 +4. 单击 **保存**。 + +##### 调节亮度 + +1. 在控制中心首页,单击 ![display_normal](./figures/icon72-o.svg)。 +2. 单击 **亮度**,进入亮度设置界面。 + + - 拖动亮度条滑块,调节屏幕亮度。 + - 打开 **自动调节色温** 开关,开启进入护眼模式,自动调节色温。 + - 打开 **手动调节** 亮度开关,可以调节屏幕亮度 。 + +##### 设置屏幕刷新率 + +1. 在控制中心首页,单击 ![display_normal](./figures/icon72-o.svg)。 +2. 单击 **刷新率**。 +3. 选择一个合适的刷新率,单击 **保存**。 + +##### 改变屏幕方向 + +1. 在控制中心首页,单击 ![display_normal](./figures/icon72-o.svg)。 +2. 单击 ![rotate](./figures/icon112-o.svg) 。 +3. 每单击一下鼠标左键,屏幕逆时针旋转90°。 +4. 要还原为之前的屏幕方向,单击鼠标右键退出;要使用当前屏幕方向,请按下组合键 **Ctrl** + **S** 保存。 + +#### 多屏设置 + +多屏显示,让您的视野无限延伸!使用VGA、HDMI、EDP等线缆将您的电脑和另一台显示器、投影仪等连接起来,同时在多个屏幕显示您电脑上的内容。 + +1. 在控制中心首页,单击 ![display_normal](./figures/icon72-o.svg)。 +2. 单击 **多屏显示模式**。 +3. 选择一种显示模式。 + - **复制**将主屏的显示内容复制到其他屏幕。 + - **扩展** 将主屏的显示内容扩展到其他屏幕,扩大桌面区域。 + - **自定义** 设置显示模式,主屏、分辨率、刷新率和屏幕旋转方向。 + +在多屏环境下,按下 **Super** + **P **调出多屏显示模式的OSD。 + +详细操作方法如下。 + +1. 按住 **Super** 不放,再按下 **P** 或鼠标单击来进行模式选择。 +2. 松开按键,确认选择,模式生效。 + +> ![notes](./figures/icon99-o.svg)说明:*当多屏显示模式为扩展模式时,仅主屏支持桌面图标显示、操作右键菜单等功能,而副屏不支持。* + + +##### 自定义设置 + +1. 在控制中心首页,单击 ![display_normal](./figures/icon72-o.svg)。 +2. 单击 **多屏显示模式** > **自定义**。 +3. 单击 “识别”,查看屏幕名称。 +4. 选择“合并”或“拆分”,然后对多个屏幕进行设置,如主屏、分辨率、刷新率,旋转屏幕等。 +5. 单击 **保存**。 + +> ![notes](./figures/icon99-o.svg)说明:*合并即复制模式,拆分即扩展模式。* + + + +### 默认程序设置 + +当安装有多个功能相似的应用程序时,可以选择其中的一个应用作为对应文件类型的默认启动程序。 + +![0|default](./figures/39.png) + +#### 设置默认程序 + +1. 右键单击文件,选择 **打开方式** > **选择默认程序**。 +2. 选择一个应用,自动勾选"设为默认",单击 **确定**。 +3. 该应用将自动添加到控制中心的默认程序列表。 + +#### 更改默认程序 + +1. 在控制中心首页,单击 ![default_applications_normal](./figures/icon70-o.svg)。 +2. 选择一个文件类型进入默认程序列表。 +3. 在列表中选择另一个应用程序。 + +#### 添加默认程序 + +1. 在控制中心首页,单击 ![default_applications_normal](./figures/icon70-o.svg)。 +2. 选择文件类型进入默认程序列表。 +3. 单击列表下的![add](./figures/icon50-o.svg),选择desktop文件(一般在/usr/share/applications),或特定的二进制文件。 +4. 该程序将添加到列表,并自动设置为默认程序。 + +#### 删除默认程序 + +在默认程序列表中,您只能删除自己添加的应用程序,不能删除系统已经安装的应用。要删除系统已经安装的应用,只能卸载应用。卸载后该应用将自动从默认程序列表中删除。 + +可用以下方法删除自己添加的默认程序。 + +1. 在控制中心首页,单击 ![default_applications_normal](./figures/icon70-o.svg)。 +2. 选择文件类型进入默认程序列表。 +3. 单击程序后面的![close](./figures/icon57-o.svg),删除默认程序。 + +### 个性化设置 + +在这里,您可以设置系统主题、活动用色、字体等,改变桌面和窗口的外观,设置成您喜欢的显示风格。 + +![0|personalise](./figures/56.png) + +#### 设置窗口主题 + +1. 在控制中心首页,单击 ![personalization_normal](./figures/icon105-o.svg)。 +2. 单击 **通用**,选择一种窗口主题。 +3. 该主题即为系统窗口主题。 + +> ![tips](./figures/icon125-o.svg)窍门:*自动主题表示根据当前时区的时间,根据日出日落的时间自动更换窗口主题。日出后是浅色,日落后是深色。* + +#### 更改活动用色 + +活动用色是指选中某一选项时的强调色。 + +1. 在控制中心首页,单击 ![personalization_normal](./figures/icon105-o.svg)。 +2. 单击 **通用**。 +3. 单击 **活动用色** 下的一种颜色,可实时查看该颜色效果。 + +#### 设置图标主题 + +1. 在控制中心首页,单击 ![personalization_normal](./figures/icon105-o.svg)。 +2. 单击 **图标主题**,选择一款图标样式。 + +#### 设置光标主题 + +1. 在控制中心首页,单击 ![personalization_normal](./figures/icon105-o.svg)。 +2. 单击 **光标主题**,选择一款光标样式。 + +#### 更改系统字体 + +1. 在控制中心首页,单击 ![personalization_normal](./figures/icon105-o.svg)。 +2. 单击 **字体**,进入设置字体界面。 +3. 设置系统字号和字体。 + +### 网络设置 + +登录系统后,您需要连接网络,才能接收邮件、浏览新闻、下载文件、聊天、网上购物等。 + +> ![tips](./figures/icon125-o.svg)窍门:*您可以单击任务栏托盘区的网络图标,查看当前网络状态。* + +![0|network](./figures/54.png) + +#### 有线网络 + +有线网络安全快速稳定,是最常见的网络连接方式。当您设置好路由器后,把网线两端分别插入电脑和路由器,即可连接有线网络。 + +1. 将网线插入电脑上的网络插孔。 +2. 将网线的另一端插入路由器或网络端口。 +3. 在控制中心首页,单击 ![network_normal](./figures/icon97-o.svg)。 +4. 单击 **有线网络**,进入有线网络设置界面。 +5. 打开 **有线网卡**,开启有线网络连接功能。 +6. 当网络连接成功后,桌面右上角将弹出“已连接有线连接”的提示信息。 + +您还可以在有线网络的设置界面,编辑或新建有线网络设置。 + +#### 移动网络 + +当您处于一个没有网络信号的地方时,可以使用无线上网卡来上网。在有电话信号覆盖的任何地方,无线上网卡通过运营商的移动数据网络接入宽带服务。 + +1. 将移动网卡插入电脑上的USB接口中。 +2. 电脑将根据移动网卡和运营商信息,自动适配并自动连接网络。 +3. 在控制中心首页,单击 ![network_normal](./figures/icon97-o.svg)。 +4. 单击 **移动网络**,查看详细设置信息。 + +#### 拨号网络 + +拨号上网(DSL)是指通过本地电话拨号连接到网络的连接方式。配置好调制解调器,把电话线插入电脑的网络接口,创建宽带拨号连接,输入运营商提供的用户名和密码,即可拨号连接到Internet上。 + +##### 新建拨号连接 + +1. 在控制中心首页,单击 ![network_normal](./figures/icon97-o.svg)。 +2. 单击 **DSL**,单击 ![add](./figures/icon50-o.svg)。 +3. 输入宽带名称、帐户、密码。 +4. 单击 **保存**,系统自动创建宽带连接并尝试连接。 + +#### VPN + +VPN即虚拟专用网络,其主要功能是在公用网络上建立专用网络,进行加密通讯。无论您是在外地出差还是在家中办公,只要能上网就能利用VPN访问企业的内网资源。您还可以使用VPN加速访问其他国家的网站。 + +1. 在控制中心首页,单击 ![network_normal](./figures/icon97-o.svg)。 +2. 单击 **VPN**,选择 ![add](./figures/icon50-o.svg) 或 ![import](./figures/icon84-o.svg)。 +3. 选择VPN协议类型,并输入名称、网关、帐号、密码等信息。(导入VPN会自动填充信息) +4. 单击 **保存**,系统自动尝试连接VPN网络。 +5. 您可以将VPN设置导出,备用或共享给其他用户。 + +> ![notes](./figures/icon99-o.svg)说明:*打开 **仅用于相对应的网络上的资源** 开关,可以不将VPN设置为默认路由,只在特定的网络资源上生效。* + +#### 系统代理 + +1. 在控制中心首页,单击 ![network_normal](./figures/icon97-o.svg)。 +2. 单击 **系统代理**,进入系统代理界面。 + + - 单击 **无**,关闭代理服务器功能。 + - 单击 **手动**,输入代理服务器的地址和端口信息。 + - 单击 **自动**,输入URL,系统将自动配置代理服务器的信息。 + +#### 应用代理 + +1. 在控制中心首页,单击 ![network_normal](./figures/icon97-o.svg)。 +2. 单击 **应用代理**。 +3. 设置应用代理参数。 +4. 单击 **保存**。 + +> ![notes](./figures/icon99-o.svg)说明:*应用代理设置成功后,打开启动器,右键单击应用图标,可以选择 **使用代理**。* + + +#### 网络详情 + +在网络详情界面,您可以查看MAC、IP地址、网关和其他网络信息。 + +1. 在控制中心首页,单击 ![network_normal](./figures/icon97-o.svg)。 +2. 单击 **网络详情**,进入网络信息界面。 +3. 查看当前有线网络或无线网络的信息。 + +### 声音设置 + +输入输出设备声音的设置(如设置扬声器和麦克风),让您听得更舒适,录音更清晰。 + +![0|sound](./figures/61.png) + + +#### 输出设备 + +1. 在控制中心首页,单击 ![sound_normal](./figures/icon116-o.svg)。 +2. 单击 **输出**,进入输出设备配置界面,您可以: + - 在输出设备后面的下拉框中选择输出设备类型。 + - 通过拖曳滑块调节输出音量和左/右声道平衡。 + - 打开 **音量增强**,音量的可调节区间由0~100% 转变为0~150%。 + +#### 输入设备 + +1. 在控制中心首页,单击 ![sound_normal](./figures/icon116-o.svg)。 +2. 单击 **输入**,进入输入设备配置界面,您可以: + - 在输入设备后面的下拉框中选择输入设备类型。 + - 通过拖曳滑块调节输入音量。 + - 打开 **开启** 按钮,还可以设置 **噪音抑制** 功能。 + +> ![tips](./figures/icon125-o.svg)窍门:*通常,需要调大输入音量,确保能够听到声源的声音,但是音量不宜过大,因为这会导致声音失真。可以对着麦克风以正常说话的音量讲话,并观察反馈音量的变化,变化较明显,则说明输入音量合适。* + +#### 系统音效 + +1. 在控制中心首页,单击 ![sound_normal](./figures/icon116-o.svg)。 +2. 单击 **系统音效**,勾选选项,开启某一事件发生时的声音效果。 + +> ![tips](./figures/icon125-o.svg)窍门:*您可以单击试听音效。* + + +### 时间日期 + +正确选择您所在的时区,一般即可显示正确的日期和时间。您也可以手动修改时间和日期。 + +![0|time](./figures/62.png) + +#### 修改时区 + +在您安装系统时,已选择了系统时区。若要修改系统时区,请按如下步骤设置。 + +1. 在控制中心首页,单击 ![time](./figures/icon124-o.svg)。 +2. 单击 **时区列表**。 +3. 单击 **修改系统时区**, 通过搜索或单击地图选择时区。 +4. 单击 **确定**。 + +#### 添加时区 + +您可以同时使用多个时区,以便查看另一时区的时间。 + +1. 在控制中心首页,单击 ![time](./figures/icon124-o.svg)。 +2. 单击 **时区列表**。 +3. 单击![add](./figures/icon50-o.svg),通过搜索或单击地图选择时区。 +4. 单击 **添加**。 + +#### 删除时区 + +1. 在控制中心首页,单击 ![time](./figures/icon124-o.svg)。 +2. 单击 **时区列表**。 +3. 单击时区列表后面的 **编辑**。 +4. 单击 ![delete](./figures/icon71-o.svg),删除已添加的时区。 + +#### 修改时间和日期 + +默认情况下,系统通过网络自动同步该时区的本地时间和日期。您也可以手动修改时间和日期。手动设置后,自动同步功能会被关闭。 + +1. 在控制中心首页,单击 ![time](./figures/icon124-o.svg)。 +2. 单击 **时间设置** 。 + - 开启或关闭自动同步配置。 + - 设置正确的时间和日期。 +3. 单击 **确定**。 + +#### 设置时间日期格式 + +支持即时设置时间日期的格式。 + +1. 在控制中心首页,单击 ![time](./figures/icon124-o.svg)。 +2. 单击 **格式设置**,可以设置星期、长短日期、长短时间等格式。 + +### 电源管理 + +对系统电源进行一些设置,让系统更安全。 + +![0|power](./figures/57.png) + +              + +#### 设置显示器关闭时间 + +1. 在控制中心首页,单击 ![power_normal](./figures/icon107-o.svg)。 +2. 单击 **使用电源**。 +3. 选择关闭显示器的时间。 + +#### 设置自动锁屏时间 + +1. 在控制中心首页,单击 ![power_normal](./figures/icon107-o.svg)。 +2. 单击 **使用电源**。 +3. 选择自动锁屏的时间。 + +#### 设置电源按钮 + +1. 在控制中心首页,单击 ![power_normal](./figures/icon107-o.svg)。 +2. 单击 **使用电源**。 +3. 选择电源按钮 **关机**、**关闭显示器** 或 **无任何操作**,更改电源设置。 + +更改设置后会即时生效,同时系统通知用户已修改电源设置。 + +### 鼠标 + +鼠标是计算机的常用输入设备。使用鼠标,可以使操作更加简便快捷。 + +![0|mouse](./figures/53.png) + +#### 通用设置 + +1. 在控制中心首页,单击 ![mouse_touchpad_normal](./figures/icon94-o.svg)。 +2. 单击 **通用**。 +3. 开启 **左手模式**,调节鼠标和触控板的**滚动速度**,**双击速度**。 + +> ![notes](./figures/icon99-o.svg)说明:*开启左手模式后,鼠标的左右键功能互换。* + +#### 鼠标设置 + +插入或连接鼠标后,在控制中心进行相关设置,让其更符合您的使用习惯。 + +1. 在控制中心首页,单击 ![mouse_touchpad_normal](./figures/icon94-o.svg)。 +2. 单击 **鼠标**。 +3. 调节 **指针速度**, 控制鼠标移动时指针移动的速度。 +4. 单击 **自然滚动** / **鼠标加速** 开关,开启相应功能。 + +> ![notes](./figures/icon99-o.svg)说明: +> +> - *开启鼠标加速,提高了指针精确度,鼠标指针在屏幕上的移动距离会根据移动速度的加快而增加。可以根据使用情况开启或关闭。* +> - *自然滚动开启后,鼠标滚轮向下滚动,内容会向下滚动;鼠标滚轮向上滚动,内容会向上滚动。* + +### 键盘和语言 + +在此模块,您可以设置键盘属性,以便符合您的输入习惯,还可以根据国家和语言调整键盘布局,设置系统语言,以及自定义快捷键。 + +![0|keyboard](./figures/59.png) + +#### 键盘属性 + +1. 在控制中心首页,单击 ![keyboard_normal](./figures/icon86-o.svg)。 +2. 单击 **通用**。 +3. 调节 **重复延迟**/**重复速度**。 +4. 单击“请在此测试”,按下键盘上的任意字符不松开,查看调节效果。 +5. 单击 **启用数字键盘**/**大写锁定提示** 开关,开启相应功能。 + +#### 键盘布局 + +设置键盘布局,可以为当前语言自定义键盘。按下键盘上的按键时,键盘布局会控制哪些字符显示在屏幕上。更改键盘布局后,屏幕上的字符可能与键盘按键上的字符不相符。 + +一般在安装系统时,就已经设置了键盘布局,您也可以添加其他的键盘布局。 + +![layout](./figures/50.png) + +##### 添加键盘布局 + +1. 在控制中心首页,单击 ![keyboard_normal](./figures/icon86-o.svg)。 +2. 单击 **键盘布局**,进入键盘布局界面。 +3. 单击![add](./figures/icon50-o.svg),单击某一键盘布局即可添加到列表。 + +##### 删除键盘布局 + +1. 在控制中心首页,单击 ![keyboard_normal](./figures/icon86-o.svg)。 +2. 单击 **键盘布局**,进入键盘布局界面。 +3. 单击”键盘布局“后的 **编辑**。 +4. 单击 ![delete](./figures/icon71-o.svg),删除该键盘布局。 + +##### 切换键盘布局 + +1. 在控制中心首页,单击 ![keyboard_normal](./figures/icon86-o.svg)。 +2. 单击 **键盘布局**,进入键盘布局界面。 +3. 选择一个键盘布局进行切换。 +4. 切换成功后,该键盘布局将标记为已选择。 + +> ![tips](./figures/icon125-o.svg)窍门:*您也可以选择一组或多组快捷键,按顺序切换已添加的键盘布局。选择 **切换方式**, 让切换后的键盘布局应用于整个系统或当前应用。* + +#### 系统语言 + +系统语言默认为您安装系统时所选择的语言,可以随时更改。 + +##### 添加系统语言 + +您可以添加多个语言到系统语言列表,以便切换系统语言。 + +1. 在控制中心首页,单击 ![keyboard_normal](./figures/icon86-o.svg)。 +2. 单击 **系统语言**,进入系统语言界面。 +3. 单击 ![add](./figures/icon50-o.svg) 进入语言列表。 +4. 选择语言,该语言将自动添加到系统语言列表。 + +##### 切换系统语言 + +1. 在控制中心首页,单击 ![keyboard_normal](./figures/icon86-o.svg)。 +2. 单击 **系统语言**,进入系统语言界面。 +3. 选择要切换的语言,系统将自动开始安装语言包。 +4. 语言包安装完成后,需要注销后重新登录,以便设置生效。 + +> ![attention](./figures/icon52-o.svg)注意:*更改系统语言后,键盘布局可能也会发生改变。重新登录时,请确保使用正确的键盘布局来输入密码。* + + +#### 快捷键 + +快捷键列表显示了系统所有的快捷键。您可以在这里查看、修改和自定义快捷键。 + +![0|shortcut](./figures/59.png) + +##### 查看快捷键 + +1. 在控制中心首页,单击 ![keyboard_normal](./figures/icon86-o.svg)。 +2. 单击 **快捷键**,进入快捷键设置界面。 +3. 搜索或查看默认的系统快捷键、窗口快捷键和工作区快捷键。 + +##### 修改快捷键 + +1. 在控制中心首页,单击 ![keyboard_normal](./figures/icon86-o.svg)。 +2. 单击 **快捷键**,进入快捷键设置界面。 +3. 单击需要修改的快捷键。 +4. 使用键盘输入新的快捷键。 + +> ![tips](./figures/icon125-o.svg)窍门:*若要禁用快捷键,请按下键盘上的 ![Backspace](./figures/icon54-o.svg)。若要取消修改快捷键,按下键盘上 **Esc** 键, 或单击下方的”恢复默认”按钮。* + +##### 自定义快捷键 + +您可以为常用的应用自定义一个快捷键。 + +1. 在控制中心首页,单击 ![keyboard_normal](./figures/icon86-o.svg)。 +2. 单击 **快捷键**。 +3. 单击![add](./figures/icon50-o.svg),进入添加快捷键界面。 +4. 输入快捷键名称、命令和快捷键。 +5. 单击 **添加**。 +6. 添加成功后,单击”自定义快捷键“后的 **编辑**。 +7. 单击某个快捷键后 ![delete](./figures/icon71-o.svg), 删除自定义的快捷键。 + +> ![tips](./figures/icon125-o.svg)窍门:*若要修改快捷键,单击输入新的快捷键即可。若要修改自定义快捷键的名称和命令,单击“自定义快捷键”后的 **编辑** ,单击快捷键名称后的 ![edit](./figures/icon75-o.svg),进入修改页面。* + + +### 系统信息 + +您可以查看系统版本、版本授权和电脑硬件等信息,以及该系统的一些协议。 + +![0|info](./figures/48.png) + +#### 关于本机 + +1. 在控制中心首页,单击 ![system_info_normal](./figures/icon120-o.svg)。 +2. 在 **关于本机** 下,您可以查看当前系统版本、版本授权及电脑硬件信息; +3. 若系统未激活,可在此页面单击 **激活**,进行系统激活。 + +#### 版本协议 + +1. 在控制中心首页,单击 ![system_info_normal](./figures/icon120-o.svg)。 +2. 在 **版本协议** 下,查看系统版本协议。 + +#### 最终用户许可协议 + +1. 在控制中心首页,单击 ![system_info_normal](./figures/icon120-o.svg)。 +2. 在 **最终用户许可协议** 下,查看最终用户许可协议。 + + + +## 键盘交互 + +您可以使用键盘在各个界面区域内切换,并选择对象,执行操作。 + +| 按键 | 功能 | +| :----------------------------------------------------------- | :----------------------------------------------------------- | +| **Tab** | 在不同区域或对话框按钮之间切换。 | +| ![Up](./figures/icon127-o.svg) ![Down](./figures/icon73-o.svg) ![Left](./figures/icon88-o.svg) ![Right](./figures/icon111-o.svg) | 在同区域内对不同的对象进行选择。使用 ![Right](./figures/icon111-o.svg) 进入下级菜单,使用 ![Left](./figures/icon88-o.svg) 返回上级菜单。使用![Up](./figures/icon127-o.svg)![Down](./figures/icon73-o.svg) 键进行上下切换 。 | +| **Enter** | 执行选定对象。 | +| **Space** | 在文件管理器中,预览选定对象;在影院和音乐中,开始/暂停播放;在下拉列表中,展开下拉选项(也可使用回车键)。 | +| **Ctrl**+**M** | 打开右键菜单。 | + diff --git a/docs/zh/docs/desktop/Install_XFCE.md b/docs/zh/docs/desktop/Install_XFCE.md new file mode 100644 index 0000000000000000000000000000000000000000..0d2bbc798e0527273bb7a70c6e5048751fe24558 --- /dev/null +++ b/docs/zh/docs/desktop/Install_XFCE.md @@ -0,0 +1,66 @@ +# 在 openEuler 上安装 XFCE +XFCE是一款轻量级 Linux 桌面,当前版本已经将所有部件从 GTK2 更新到 GTK3,从D-Dbus Glib更新到GDBus,大部分组件支持Object Introspection(简称 GI,用于产生与解析 C 程序库 API 元信息,以便于动态语言(或托管语言)绑定基于 C + GObject 的程序库)。优化用户体验,加入新特性,并修补大量BUG。与其它UI界面(GNOME、KDE)相比,XFCE占用的内存和CPU使用量非常小,给用户带来亲切和高效的使用体验。 + +XFCE支持x86_64和aarch64两种架构。 + +安装时,建议新建一个管理员用户。 + +1. [下载](https://openeuler.org/zh/download/)openEuler ISO镜像并安装系统,更新软件源(需要配置Everything源,以及EPOL源,下面命令是在最小化安装系统的情况下安装XFCE) +``` +sudo dnf update +``` + +2. 安装字库 +``` +sudo dnf install dejavu-fonts liberation-fonts gnu-*-fonts google-*-fonts +``` + +3. 安装Xorg +``` +sudo dnf install xorg-* +``` + +4. 安装XFCE及组件 +``` +sudo dnf install xfwm4 xfdesktop xfce4-* xfce4-*-plugin network-manager-applet +``` + +5. 安装登录管理器 +``` +sudo dnf install lightdm lightdm-gtk +``` + +6. 设置默认桌面为XFCE +通过root权限用户设置 +``` +echo 'user-session=xfce' >> /etc/lightdm/lightdm.conf.d/60-lightdm-gtk-greeter.conf +``` + +7. 使用登录管理器登录XFCE +``` +sudo systemctl start lightdm +``` +登录管理器启动后,在右上角左侧选择"xfce-session" +输入用户名、密码登录 + +8. 设置开机自启动图形界面 +``` +sudo systemctl enable lightdm +sudo systemctl set-default graphical.target +``` +如果默认默认安装了gdm,建议停用gdm +``` +systemctl disable gdm +``` +重启验证 +``` +sudo reboot +``` + +9. FAQ + + **Q:为什么lightdm登录界面背景是黑色的?** + + A:登录界面是黑色的是因为lghtdm-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/docs/desktop/Kiran_userguide.md b/docs/zh/docs/desktop/Kiran_userguide.md new file mode 100644 index 0000000000000000000000000000000000000000..ffb12d1de6159c3ea1bade957ab442f9c8f8e930 --- /dev/null +++ b/docs/zh/docs/desktop/Kiran_userguide.md @@ -0,0 +1,261 @@ +# Kiran桌面环境用户手册 +## 1.概述 +Kiran桌面是一款以用户和市场需求为主导的稳定、高效、易用的桌面环境,主要包括了桌面、任务栏、托盘、控制中心和窗口管理等组件。本文介绍了Kiran桌面的使用。 + +## 2.桌面 +### 2.1.登录界面 +安装完成后重启系统,系统启动后需要输入登录的用户名和密码才能进入系统,登录界面会显示时间日期,电源按钮,软键盘按钮。界面支持自适应调整,支持屏幕放缩,支持多屏显示,登录框可以跟随鼠标进行屏幕切换。 + +![图1-登录界面](figures/kiran-1.png) + +### 2.2.主界面 +输入正确的用户名和密码后即可登录系统进入主界面,如下图所示: +![图2-主界面](figures/kiran-2.png) +桌面上放置有几个图标,如计算机、主文件夹、回收站等,位于屏幕底部的一个长条称为面板,从这里可以启动应用程序或在模拟桌面上切换。 +桌面是用户的工作区域,用户操作和程序运行都是在桌面上。桌面上还有用户希望能方便访问的文件和应用程序图标,用鼠标双击可以运行相应程序或打开文件。可以拖动、添加或删除桌面图标。使用桌面图标可以更加便捷地完成工作。 + +![图3-计算机](figures/kiran-3.png)计算机:双击可以显示从本计算机访问的所有本地和远程磁盘和文件夹。 + +![图4-主文件夹](figures/kiran-4.png)主文件夹:双击可以显示kylin目录下的内容。 + +![图5-回收站](figures/kiran-5.png)回收站:暂时存放已删除文件的地方。 + +桌面右键:桌面右键提供了一些图标管理、创建文件夹、创建文档、桌面背景、主题、等快捷方式。 + +创建文件夹:可以创建新的文件夹。 + +创建启动器:可以创建一个新的启动器。 + +创建文档:可以创建空的纯文本文档。 + +打开终端:直接打开终端应用。 + +按名称组织桌面:按名称来进行排序桌面文件。 + +保持对齐:勾选了保持对齐,桌面图标会按照网格对齐排列。 + +更改桌面背景:打开“背景”,以改变桌面或锁屏的背景图片。 + +### 2.3.面板 +面板通常位于屏幕的底部,上面包括了开始菜单按钮、快速启动区域、经常使用的应用程序与桌面小程序图标和显示当前运行应用程序的任务条。 +将鼠标停在某个图标上呆几秒钟,会看到一个白色的弹出提示框,内容是对这个图标作用的描述。 +![图6-系统面板](figures/kiran-6.png) + +## 3.任务栏 +任务栏:显示正在运行的程序或打开的文档,点击任务条上某一项可以最大化或最小化被选中的程序。可以通过在对应项上点击鼠标右键对其运行窗口进行最大化、最小化或关闭等操作。 + +| 组件 | 说明 | +| :------------ | :------------ | +|![图7-开始菜单](figures/kiran-7.png)|开始菜单按钮:相当于Windows中的开始按钮,单击会弹出系统级联的开始菜单| +|![图8-工作区按钮](figures/kiran-8.png)|单机此按钮启动工作区| +|![图9-文件浏览器按钮](figures/kiran-9.png)|单击此按钮启动文件浏览器,可浏览管理文件| +|![图10-终端命令按钮](figures/kiran-10.png)|单击将启动终端| +|![图11-Web浏览器按钮](figures/kiran-11.png)|单击此按钮启动firefox浏览器| +|![图12-网络控制图标](figures/kiran-12.png)|显示当前网络状态,单击可修改系统的网络配置| +|![图13-时钟按钮](figures/kiran-13.png)|显示当前日期和时间,可以根据需要定制显示的样式| + +## 4.控制中心 +### 4.1.开始菜单设置 +选择“开始菜单”>“控制中心”>“开始菜单设置”。 +开始菜单可设置开始菜单样式,根据个人喜好设置开始菜单的显示模式与不透明度,如图所示: + +![图14-开始菜单设置](figures/kiran-14.png) + +开始菜单根据设置的透明度、显示模式而更改,如下图: + +![图15-开始菜单界面](figures/kiran-15.png) + +### 4.2.登录设置 +选择“开始菜单”>“控制中心”>“登录设置”打开。 +在kiran桌面,用户可以通过选择控制中心中的登录设置对登录界面环境效果进行设置,其中包括登录界面背景图、是否自动登录、缩放比例、是否允许手动输入用户名登录、是否显示用户列表等,如图所示: +![图16-登录设置](figures/kiran-16.png) +还可以设置自动登录,设置自动登录的用户和延时,重启系统后会自动登录该用户,无需输入密码。 +![图17-设置自动登录](figures/kiran-17.png) + +### 4.3.显示设置 +定制显示属性是每个桌面系统所必备的,kiran桌面提供了强大的显示属性定制工具。您可以通过选择“开始菜单”>“控制中心”>“显示设置”进入显示设置界面,如下图所示: +![图18-显示设置](figures/kiran-18.png) + +这里可以设置屏幕旋转、分辨率、刷新率、缩放率和旋转,设置完成后点击“应用”即可。 + +### 4.4.鼠标设置 +用户可以通过选择控制中心中的“鼠标设置”对鼠标进行配置,可以修改鼠标手持模式为左手和右手模式,调整鼠标移动速度,可以设置是否自动滚动,是否同时按下左右键模拟中键功能。鼠标设置常见界面如图所示: + +![图19-鼠标设置](figures/kiran-19.png) + +### 4.5.账户管理工具 +账户管理工具工具是对用户和组进行管理的一个简单易用工具,您可以通过这个工具对用户和组群进行配置和管理,主要包括: +1)增加用户,设置用户属性; +2)修改用户属性; +3)显示用户属性; +4)删除用户; +用户属性包括:账号、口令(密码)、登录 shell,用户组属性指在该组包含哪些用户。 +#### 4.5.1.启动账户管理工具 +在控制中心中选择启动“账户管理工具”选项即可启动账户管理工具,如图所示: +![图20-账户管理工具](figures/kiran-20.png) + +在这个界面中您可以看到有左侧菜用户栏和右侧详细信息栏两个部分。目前在列出的是系统中的所有用户(除root用户除外)。点击左侧某个用户,详细信息栏将显示用户的基本信息(用户ID、用户类型等)。 +点击“创建用户”,在右侧出现页面,如下图所示,按照要求填写您要添加的用户名、用户类型、设置密码、头像。填写完毕后,单击“创建”即完成添加。 +![图21-创建账户](figures/kiran-21.png) + +【注】:如果您已经设置了密码允许的最小位数(例如四位),则您在此处输入的密码位数要不小于 4 位,否则系统将不会接受该密码。 + +单击头像区域打开头像修改功能,系统预设了各种类型的头像供用户选择,用户也可以自己添加头像,点击“确认”后记得保存: +![图22-修改头像](figures/kiran-22.png) +#### 4.5.2.删除用户 +首先在左侧信息栏里的欲删除的用户上单击,选中该用户,然后在右侧工具栏上点击“删除”按钮,如下图所示: +![图23-删除用户](figures/kiran-23.png) +![图24-删除确认提示](figures/kiran-24.png) + +在弹出上图所示的对话框中单击“否”撤消删除,单击“是”确认删除。 +#### 4.5.3.高级设置 +选择“创建新用户”>“输入账号密码”>“高级设置”,打开一个对话框,如下图所示,可以设置用户的登录shell、指定用户ID和指定用户目录。 + +![图25-高级设置](figures/kiran-25.png) +### 4.6. 外观 +定制显示属性是每个桌面系统所必备的,Kiran桌面为您提供了强大的显示属性定制工具。外观是一个对系统的桌面背景,主题,字体三个方面提供统一配置和管理的工具。 +选择“开始菜单”>“控制中心”>“外观”,显示的界面如下图所示: + +![图26-外观设置](figures/kiran-26.png) +#### 4.6.1.主题 +主题可以对系统的对话框风格,菜单风格,系统面板风格,图标风格进行统一设置或者也可以根据用户的喜好定制。 + +1)主题设置 +系统中默认已提供了多套主题,可以在主题浏览对话框中浏览主题的相关信息。点击主题浏览对话框中的主题,即可设置系统主题,如图所示: +![图27-主题设置](figures/kiran-27.png) + +2)自定义主题 +用户可以通过点击“自定义”按钮,来根据用户的喜好定制系统主题,如下图所示:自定义主题包括: +a.控制; +b.色彩; +c.窗口边框; +d.图标; +e.指针; + +![图28-自定义主题](figures/kiran-28.png) +#### 4.6.2.背景 +用户可以对桌面背景进行设置,可以修改颜色、样式。 +1)背景图片设置 +如下图所示,点击壁纸文件浏览对话框中的壁纸,即可将桌面设置为此壁纸。 + +![图29-背景设置](figures/kiran-29.png) + +2)样式 +用户可以根据自己的喜好通过样式下拉式选择框来调整壁纸填充桌面背景时的方式。填充方式有以下五种方式: + +a.平铺; +b.缩放; +c.居中; +d.比例放大; +e.伸展; +f.适合宽度。 + +3)壁纸的添加与删除 +用户可以通过“添加”按钮添加自己喜欢的壁纸,如下图所示: +![图30-添加壁纸](figures/kiran-30.png) + +点击“打开”即可添加壁纸。 +同时可以点击“删除”按钮来删除用户不喜欢的壁纸。具体步骤:选择壁纸,点击“删除”。 + +4)桌面背景色彩填充设置 +用户如果不喜欢用壁纸来设置桌面背景,也可以用色彩来设置背景,在壁纸选择对话框中选择无壁纸选项,即可使用色彩来填充桌面背景。 +填充色彩的方式有三种: + +a.纯色; +b.水平梯度; +c.垂直梯度。 + +![图31-背景图片色彩填充](figures/kiran-31.png) + +#### 4.6.3.字体 +1)字体设置 +用户可以通过字体设置来设置系统图形界面的各种类型的字体,字体类型包括以下五种类型: + +a.应用程序字体; +b.文档字体; +c.桌面字体; +d.窗口标题字体; +e.等宽字体。 +![图32-字体设置](figures/kiran-32.png) + +2)字体效果设置与详情设置 +字体渲染效果设置 +用户可以通过字体渲染效果设置来设置系统图形界面的以下四种类型的字体效果: + +a.单色; +b.最佳形状; +c.最佳对比; +d.次像素平滑; +系统默认使用的最佳形状的字体渲染效果,如下图所示: +![图33-字体渲染设置](figures/kiran-33.png) + +3)字体细节设置 +字体效果的一些详情设置可以通过“细节”按钮进行设置。详情设置包括: + +a.字体分辨率; +b.字体平滑度; +c.字体微调; +d.字体次像素排序。 + +![图34-字体细节设置](figures/kiran-34.png) + +4)用户可以设置界面,选择是否在菜单显示图标和在按钮中显示图标: +![图35-显示图标与否设置](figures/kiran-35.png) + +## 5.桌面应用 +### 5.1.文本编辑器 +要启动文本编辑器,点击“开始菜单”>“所有应用”>“工具”>“pluma”。也可以在shell提示符下键入pluma启动文本编辑器。 +文本编辑器是所有计算机系统中最常用的一种工具。用户在使用计算机时,往往需要创建自己的文件,无论是一般的文字文件、资料文件,还是编写源程序,这些工作都离不开编辑器。它用于查看和修改纯文本文件,纯文本文件是不包含应用字体或风格格式的普通文本文件,如系统日志和配置文件: + +![图36-文本编辑器](figures/kiran-36.png) +### 5.2.终端 +在桌面环境下,可以利用终端程序进入传统的命令操作界面,启动命令行终端的方法是:选择“开始菜单”>“所有应用”>“工具”>“终端”或者桌面面板上的图标: + +![图37-终端](figures/kiran-37.png) + +### 5.3.Firefox火狐浏览器 +要启动Firefox火狐浏览器,点击“开始菜单”>“所有应用”>“互联网”>“Firefox火狐浏览器”。 +Firefox火狐浏览器,是一个自由及开放源代码网页浏览器,使用Gecko排版引擎,支持多种操作系统,如Windows、Mac OS X及GNU/Linux等。它体积小速度快,还有其他一些高级特征,主要特性有:标签式浏览、使用网上冲浪更快、可以禁止弹出式窗口、自定制工具栏、扩展管理、更好的搜索特性、快速而方便的侧栏: + +![图38-firefox浏览器](figures/kiran-38.png) +### 5.4.截图工具 +选择“开始菜单”>“所有应用”>“图像”>“截图工具”,可以启动截图工具。 +截图工具是kiranz桌面的一款小巧灵活的屏幕捕捉软件,操作界面简洁、使用极为方便。该软件启动时会在托盘处添加截图工具图标![图39-托盘区截图图标](figures/kiran-39.png),点击该图标后,直接弹出屏幕捕捉界面,可自行选择截图范围。可通过有击该图标打开“打开启动器”,可选择需要抓取的范围是整个桌面,或者方形区域,可设置截图延迟时间,如下图所示: + +![图40-截图界面](figures/kiran-40.png) +![图41-启动器界面](figures/kiran-41.png) + +在弹出的对话框中,点击“√”,即可保存至桌面,如想自定义保存位置,点击“选项”>勾选“自定义保存位置”即可。如下图所示: + +![图42-截图过程](figures/kiran-42.png) + +### 5.5.网络设置 +Kiran桌面采用了NetworkManager作为网络配置工具,NetworkManager是用来设定、配置和管理各种网络类型的桌面工具,NetworkManager提供了对移动宽带设备、蓝牙、IPv6 提供改进的支持。通过点击“开始菜单-控制中心-网络连接”打开,或者通过点击桌面右下角网络图标选择编辑连接打开,如图所示: + +![图43-网络连接工具](figures/kiran-43.png) + +设置有线连接: +设备选择当前的网卡,如“ens160”是当前系统的网卡,选中该网卡,点击“编辑”按钮,弹出网卡编辑对话框: +![图44-编辑网络](figures/kiran-44.png) + +“IPv4设置”是用户常用到的设置,这里选择了DHCP的方式获取IP和DNS服务器,系统会自动给用户分配IP地址。 +有些时候用户会碰到需要手动填写IP地址的情况,这就需要在IPv4设置的上方“方法”下拉菜单中选择“手动”,如下图所示: +![图45-设置IPV4](figures/kiran-45.png) + +接下来点击“添加”按钮依次输入IP地址、子网掩码和网关,并填写DNS服务器,如下图: +![图46-设置网络ip和dns等](figures/kiran-46.png) + +填写ip地址、子网掩码、网关和DNS后保存,点击桌面右下角网络图标断开网络后重新连接。 +### 5.6.时间和日期管理 +要对系统的日期和时间进行设置,您可以在控制中心中选择“时间和日期管理”选项,也可以通过点击桌面右下角日期区域,系统将弹出如图所示的界面: +![图47-时间和日期管理工具](figures/kiran-47.png) + +自动同步日期和时间:打开“自动同步”并连接外网可以自动同步时间。 +设置时区:点击“更改时区”按钮,右侧显示如下图所示时区设置对话框,点击需要更改的时区后保存即可修改时区。 +![图48-修改时区](figures/kiran-48.png) + +手动设置时间:关闭自动同步按钮,点击手动设置时间,可以手动调整年份、月份、日以及时间,修改完成后保存。 +![图49-手动设置时间](figures/kiran-49.png) + +修改日期格式:点击日期时间格式设置可以修改显示的日期格式,可以设置长日期显示格式、短日期显示格式、时间格式、以及是否显示秒: +![图50-修改日期格式](figures/kiran-50.png) diff --git a/docs/zh/docs/desktop/UKUIuserguide.md b/docs/zh/docs/desktop/UKUIuserguide.md new file mode 100644 index 0000000000000000000000000000000000000000..2a4be26f19f800dd944b54679d631207a87be36b --- /dev/null +++ b/docs/zh/docs/desktop/UKUIuserguide.md @@ -0,0 +1,394 @@ +# UKUI 用户指南 + +[[toc]] + +## 概述 + +桌面是用户进行图形界面操作的基础,UKUI(UbuntuKylin UI)提供了多个功能部件,包括任务栏、开始菜单等,本文主要描述 UKUI 的使用。 + +主界面如下图所示。 + +![图 1 桌面主界面-big](./figures/1.png) + +## 桌面 + +### 桌面图标 + +系统默认放置了计算机、回收站、个人三个图标,鼠标左键双击即可打开页面,功能如下表。 + + +| 图标 | 说明 | +| :------------ | :------------ | +| ![](./figures/icon1.png) | 计算机:显示连接到本机的驱动器和硬件| +| ![](./figures/icon2.png) | 回收站:显示除移的文件| +| ![](./figures/icon3.png) | 主文件夹:显示个人主目录| + + +另外,右键单击“计算机”,选择“属性”,可显示当前系统版本、内核版本等相关信息。 + +![图 2 “计算机”-“属性”-big](./figures/2.png) + +### 右键菜单 + +在桌面空白处单击鼠标右键,出现的菜单如下图所示,为用户提供了一些快捷功能。 + +![图 3 右键菜单](./figures/3.png) + +部分选项说明如表 2。 + +| 选项 | 说明| +| :------------ | :------------ | +| 新 建 | 可新建文件夹、文本文档、WPS文件 | +| 视图类型 | 提供四种视图类型:小图标、中图标、大图标、超大图标 | +| 排序方式 | 提供根据文件名称、文件类型、文件大小、修改日期排列的四种方式| + +
+ +## 任务栏 + +### 基本功能 + +任务栏位于底部,包括开始菜单、多视图切换、文件浏览器、Firefox网络浏览器、WPS、托盘菜单。 + +![图 4 任务栏](./figures/4.png) + +| 组件 | 说明 | +| :------------ | :------------ | +|![](./figures/icon4.png)| 开始菜单,用于弹出系统菜单,可查找应用和文件 | +|![](./figures/icon5.png)| 多视图切换,可在多个工作区互不干扰进行操作| +|![](./figures/icon6.png)| 文件浏览器,可浏览和管理系统中的文件| +|![](./figures/icon7.png)| Firefox网页浏览器,提供便捷安全的上网方式| +|![](./figures/icon8.png)| WPS办公套件,可以实现办公软件最常用的文字、表格、演示等多种功能| +|窗口显示区 |横条中间空白部分;显示正在运行的程序或打开的文档,可进行关闭窗口、窗口置顶操作。| +|![](./figures/icon9.png)| 托盘菜单,包含了对声音、麒麟天气、网络连接、输入法、通知中心、日期、夜间模式的设置| +|显示桌面| 按钮位于最右侧;最小化桌面的所有窗口,返回桌面;再次单击将恢复窗口| + +
+ +#### 多视图切换 + +点击任务栏“![](./figures/icon10-o.png)”图标,即可进入如下图所示界面,在多个工作区内选择当下需要工作的操作区。 + +![图 5 多视图切换-big](./figures/5.png) + +#### 预览窗口 + +用户将鼠标移动到任务栏的应用图标上,会对该应用打开的窗口进行小窗口预览,悬停在指定窗口如下图所示为悬停状态,该窗口会微微呈现毛玻璃效果(左),其余窗口为默认状态(右)。 + +![图 6 任务栏预览窗口](./figures/6.png) + +用户通过鼠标右键点击任务栏的应用图标,可关闭该应用。 + +![图 7 任务栏右键预览](./figures/7.png) + +#### 侧边栏 + +侧边栏位于整个桌面的右侧,点击任务栏托盘菜单中的“![](./figures/icon11-o.png)”图标打开收纳菜单,点击侧边栏“![](./figures/icon12-o.png)”图标,弹出侧边栏如下图所示。 + +侧边栏由两部分构成:通知中心、剪切板和小插件。 + +![图 8 侧边栏无消息状态-big](./figures/8.png) + +##### 通知中心 + +通知中心将会显示重要的近期最新的重要信息列表,选择右上角“清空”可将信息列表清空;用户可通过选择右上角“设置”跳转进入控制面板的通知设置界面,能设置显示信息的应用,以及信息的数量。 + +![图 9 通知中心-big](./figures/9.png) + +右侧工作区可设置为按应用折叠的模式。 + +![图 10 按应用折叠通知消息-big](./figures/10.png) + +侧边栏右上角“![](./figures/icon13-o.png)”图标可收纳不重要信息,可以打开不重要的和已被设置为收纳的应用软件信息,消息超过999+后显示成![](./figures/icon14-o.png)的形式表示无穷大。 + +![图 11 消息收纳箱](./figures/11.png) + +##### 剪切板 + +剪切板可保存近期选择复制或剪切的内容,同时可通过表上说明的图标进行相应操作。 + +其中点击“![](./figures/icon15-o.png)”图标,可对剪切板的内容进行编辑。 + +|图标| 说明| 图标 |说明 | +| :------------ | :------------ | :------------ | :------------ | +|![](./figures/icon16.png)| 复制剪切板上的该内容 |![](./figures/icon18.png)| 编辑剪切板上的该内容 | +|![](./figures/icon17.png)| 删除剪切板上的该内容 | | | + +
+ +![图 12 剪切板](./figures/12.png) + +![图 13 编辑选中实的剪切板内容](./figures/13.png) + +剪切板的第二个标签为小插件,插件包含:闹钟、笔记本、用户反馈,可供用户快捷选择。 + +![图 14 小插件](./figures/14.png) + +#### 托盘菜单 + +##### 收纳菜单 + +点击任务栏托盘菜单中的“![](./figures/icon19-o.png)”图标打开收纳菜单,收纳菜单中可收纳麒麟天气、输入法、蓝牙、u盘等小工具。 + +![图 15 收纳菜单](./figures/15.png) + +##### 输入法 + +任务栏输入法默认为搜狗输入法,使用快捷键“Ctrl+Space”可切换出来,“Shift”按键切换中英文模式。 + +![图 16 输入法](./figures/16.png) + +##### U盘 + +U盘插入主机后,自动读取U盘数据,点击任务栏中U盘“![](./figures/icon26-o.png)”图标弹窗如下图所示。 + +需要卸载U盘时仅需点击弹出“![](./figures/icon27-o.png)”图标即可。 + +![图 17 U盘状态窗口](./figures/17.png) + +##### 电源 + +没有检测到电源设备时,用户通过点击鼠标左键任务栏中电源“![](./figures/icon28-o.png)”图标。 + +![图 18 无电源设备](./figures/18.png) + +若检测到接入的电源设备,用户通过点击鼠标左键任务栏中电源“![](./figures/icon29-o.png)”图标。 + +![图 19 电源管理器窗口](./figures/19.png) + +用户通过点击鼠标右键任务栏中电源“![](./figures/icon30-o.png)”图标,弹出电源管理器设置菜单,设置调整屏幕亮度、设置电源和休眠两项。 + +![图 20 电源管理器设置](./figures/20.png) + +若电源管理器弹出“电池电量不足”的弹窗后,用户可点击开启节能模式,电源管理器则即刻将本机设为节能模式运行。 + +![图 21 电池电量不足开启节能模式](./figures/21.png) + +##### 网络 + +用户通过鼠标左键点击任务栏上的网络“![](./figures/icon31-o.png)”图标,可根据需要选择有线和无线两种网络连接方式。 + +|图标 |说明| 图标 |说明 | +| :------------ | :------------ | :------------ | :------------ | +|![](./figures/icon32.png)| 网络已连接 |![](./figures/icon37.png)| 网络未连接 | +|![](./figures/icon33.png)| 网络连接受限 |![](./figures/icon38.png)| 网络已上锁 | +|![](./figures/icon34.png)| 网络正在连接 |![](./figures/icon39.png)| Wifi已连接 | +|![](./figures/icon35.png)| Wifi未连接 |![](./figures/icon40.png)| Wifi连接受限 | +|![](./figures/icon36.png)| Wifi已上锁 |![](./figures/icon41.png)| Wifi正在连接 | + +
+ +![图 22 网络连接界面](./figures/22.png) + +- 有线网络 + + 在有线网络连接界面,点击有线网络方案即可展开,查看网络的详细信息。 + + ![图 23 有线网络连接](./figures/23.png) + +- 无线网络 + + 无线网络连接,点击右上角开关按钮打开无线网络连接,并在可用无线网络列表中选择需要连接的WiFi,并键入密码即可通过WiFi上网。 + + ![图 24 无线网络连接](./figures/24.png) + +- 网络设置窗口 + + 用户通过鼠标右键点击任务栏上的网络“![](./figures/icon42-o.png)”图标,弹出网络设置菜单。 + + ![图 25 有线网络设置](./figures/25.png) + + 点击设置网络,即刻进入网络设置窗口。 + + ![图 26 网络设置窗口](./figures/26.png) + +##### 音量 + +用户通过鼠标左键点击任务栏上的音量“![](./figures/icon43-o.png)”图标,打开声音界面。 + +- mini模式 + + 音量min模式,仅显示扬声器的音量。 + + ![图 27 音量min模式](./figures/27.png) + +- 按设备 + 音量按设备标签包括输出设备、输入设备。 + + ![图 28 按设备音量列表](./figures/28.png) +- 按应用 + 音量按应用标签包括系统音量、其他应用音量。 + + ![图 29 按应用音量列表](./figures/29.png) + +##### 日历 + +用户通过鼠标左键点击任务栏上的时间日期弹出日历窗口,查看日历、月历、年历窗口。 + +用户可通过筛选年 > 月 > 日查看一日信息,会以大字显示当日日期,并有当日的时间、星期、节气、农历,点击下方宜忌勾选可查看。 + +![图 30 日历查看-big](./figures/30.png) + +##### 夜间模式 + +用户通过鼠标左键点击任务栏上的夜间模式“![](./figures/icon44-o.png)”图标,可设置为夜间模式。 + +#### 高级设置 + +右键单击任务栏,出现的菜单。 + +![图 31 任务栏右键菜单](./figures/31.png) + +用户可对任务栏的布局进行设定,在“设置任务栏”中可进行相关设置。 + +
+ +## 窗口 + +### 窗口管理器 + +窗口管理器为用户提供了如表所示的功能。 + +|功能 |说明 | +| :--------| :----------| +|窗口标题栏| 显示当前窗口的标题名称 | +|最小化/最大化/关闭 |标题栏右侧的三个图标按钮,分别对应最小化窗口、最大化窗口、关闭窗口的功能 | +|侧边滑动 |在窗口右侧提供滑动条,可上下滚动查看页面 | +|窗口堆叠| 允许窗口之间产生重叠 | +|窗口拖拽 |在窗口标题栏长按鼠标左键,可移动窗口到任意位置 | +|窗口大小调整 |将鼠标移至窗口四角,长按左键,可任意调整窗口大小 | + +
+ +### 窗口切换 + +用户有三种方式可以切换: + +* 在任务栏上点击窗口标题; + +* 在桌面上点击不同窗口; + +* 使用快捷键< Alt > + < Tab >; + +
+ +## 开始菜单 + +### 基本功能 + +单击“开始菜单”按钮,菜单具备滑动条功能。 + +![图 32 开始菜单主界面](./figures/32.png) + +#### 右侧分类菜单 + +用户将鼠标停留在开始菜单右侧,会出现一个右侧预展开的提示栏,点击展开,即在右侧默认显示三个分类:“常用软件”、“字母分类”、“功能分类”,其中: + +* 所有软件:列出所有软件,近期使用过的软件将会在此页面置顶显示。 + +* 字母分类:列出系统根据首字母进行分类显示所有软件。 + +* 功能分类:列出系统根据功能进行分类显示所有软件。 + +用户可通过点击右上角开始菜单的全屏图标,查看全屏菜单。 + +![图 33 全屏开始菜单-big](./figures/33.png) + +#### 右侧功能键 + +右下侧显示用户头像、计算机、设置和电源四个选项。 + +##### 用户头像 + +点击“![](./figures/icon45-o.png)”图标,进入控制面板查看用户信息。 + +##### 计算机 + +点击“![](./figures/icon46-o.png)”图标进入计算机:个人主文件夹。 + +##### 设置 + +点击“![](./figures/icon47-o.png)”图标进入控制面板。 + +##### 电源 + +###### 锁定屏幕 + +当用户暂时不需要使用计算机时,可以选择锁屏(不会影响系统当前的运行状态),防止误操作;用户返回后,输入密码即可重新进入系统。 + +在默认设置下,系统在一段空闲时间后,将自动锁定屏幕。 + +锁屏界面如下图所示。 + +![图 34 锁屏界面-big](./figures/34.png) + +###### 切换用户和注销 + +当要选择其他用户登录使用计算机时,可选择“注销”或“切换用户”。 + +此时,系统会关闭所有正在运行的应用;所以,在执行此操作前,请先保存当前工作。 + +###### 关机与重启 + +有两种操作方式: + +1)“开始菜单” > “电源” > “关机” + +会弹出对话框,用户可根据需要选择重启或关机。 + +![图 35 关闭系统对话框-big](./figures/35.png) + +2)“开始菜单” > “关机” 按钮右边菜单 > “关机”/“重启” + +系统将直接关机/重启,不再弹出对话框。 + +### 高级设置 + +右键单击开始菜单图标,提供锁屏、切换用户、注销、重启、关闭五个快捷选项。 + +### 应用 + +用户可以在搜索框中,通过关键字搜索应用。如下图所示,可输入中文,如:搜索用户手册,查询结果会随着输入自动显示出来。 + +![图 36 搜索应用](./figures/36.png) + +通过右键点击开始菜单中的某个应用,弹出右键菜单,可将选中应用固定到“所有软件”、任务栏,可添加该应用到桌面方式,可快捷卸载该应用。 + +![图 37 应用的右键菜单](./figures/37.png) + +各个选项说明如下表。 + +|选项 |说明 | +| :------| :-------- +|固定到所有用软件 |将选中软件在所有软件列表中置顶 | +|固定到任务栏 |在任务栏上生成应用的图标 | +|添加到桌面快捷方式| 在桌面生成应用的快捷方式图标 | +|卸载| 卸载软件 | + +
+ +## 常见问题 + +### 锁屏后无法登录系统 +* 通过Ctrl + Alt + F1切换到字符终端。 + +* 输入用户名和密码后登录。 + +* 执行命令“sudo rm -rf ~/.Xauthority”。 + +* 通过Ctrl + Alt + F7切回图形界面,输入用户密码登录。 + +
+ +## 附录 + +### 快捷键 + +|快捷键 |功能 | +| :------ | :----- | +|F5| 刷新桌面 | +|F1 |打开用户手册 | +|Alt + Tab |切换窗口 | +|win |打开开始菜单 | +|Ctrl + Alt + L| 锁屏 | +|Ctrl + Alt + Delete| 注销 | \ No newline at end of file diff --git a/docs/zh/docs/desktop/Xfce_userguide.md b/docs/zh/docs/desktop/Xfce_userguide.md new file mode 100644 index 0000000000000000000000000000000000000000..04501095ca4b568a86846ab70b830b58036ae0ac --- /dev/null +++ b/docs/zh/docs/desktop/Xfce_userguide.md @@ -0,0 +1,247 @@ +# Xfce 用户指南 + + +## 一 概述 + +Xfce是运行在类Unix操作系统中的一款轻量级桌面环境。Xfce提供了多个功能部件,包括 所有应用程序 等,本文主要描述 Xfce 的使用。 + +界面如下图所示。 + +![图 1 桌面主界面-big](./figures/xfce-1.png) + +
+ +## 二 桌面 + +### 2.1 桌面图标 + +系统默认放置了文件系统、主文件夹、挂载目录等图标,鼠标左键双击即可打开页面。 + +![图 2 主界面默认图标-big](./figures/xfce-2.png) + +### 2.2 右键菜单 + +在桌面空白处单击鼠标右键,出现的菜单如下图所示,为用户提供了一些快捷功能。 + +![图 3 右键菜单](./figures/xfce-3.png) + +部分选项说明如表。 + +| 选项 | 说明| +| :------------ | :------------ | +| 在新窗口中打开 | 打开对应登录用户的Desktop目录 | +| 创建启动器 | 启动器的自行创建 | +| 创建URL链接 | URL链接的自行创建 | +| 创建文件夹 | 新建文件夹 | +| 创建文档 | 新建文本文档 | +| Open Terminal Here | 新建终端 | +| 排列桌面图标 | 自动排列桌面图标 | +| 桌面设置 | 提供关于背景、菜单、图标的设置 | +| 属性 | 提供关于Desktop的一般、徽标、权限等属性设置 | +| 应用程序 | 所有应用程序 | + +
+ +## 三 任务栏 + +### 3.1 基本功能 + +任务栏位于顶部,包括所有应用程序菜单、窗口显示区、多视图切换、托盘菜单。 + +![图 4 任务栏](./figures/xfce-4.png) + +| 组件 | 说明 | +| :------------ | :------------ | +| 所有应用程序 | 用于弹出所有程序以及设置,可查找应用和设置。| +| 窗口显示区 | 横条中间空白部分;显示正在运行的程序或打开的文档,可进行最小化、最大化、关闭窗口、窗口置顶等操作。| +| 多视图切换 | 可在多个工作区互不干扰进行操作。 | +| 托盘 | 包含了对网络连接、声音、电源、通知中心、日历、登录用户动作的设置。| + +#### 3.1.1 所有应用程序 + +![图 5 所有应用程序-big](./figures/xfce-5.png) + +#### 3.1.2 窗口显示区 + +![图 6 窗口显示区-big](./figures/xfce-6.png) + +#### 3.1.3 多视图切换 + +点击任务栏“![](./figures/xfce-7.png)”中的每个区域图标,即可进入对应的工作区域。 + +例如,通过鼠标在多个工作区内切换选择当下需要工作的操作区。 + +![图 7 多视图切换-big](./figures/xfce-71.png) + +#### 3.1.4 托盘 + +![图 8 托盘菜单-big](./figures/xfce-8.png) + +##### 3.1.4.1 网络 + +用户通过鼠标左键点击任务栏上的网络“![](./figures/xfce-81.png)”图标,可根据需要选择网络连接方式。 + +![图 9 网络连接界面](./figures/xfce-811.png) + +网络设置窗口 + +用户通过鼠标右键点击任务栏上的网络“![](./figures/xfce-81.png)”图标,弹出网络设置菜单。 + +![图 10 网络设置](./figures/xfce-812.png) + +点击 编辑连接,即刻进入网络设置窗口。 + +![图 11 网络设置窗口](./figures/xfce-813.png) + +双击 指定的网络连接 ,例如enp1s0,进入该连接的设置界面。 + +![图 12 有线网络设置窗口](./figures/xfce-814.png) + +##### 3.1.4.2 音量 + +用户通过鼠标左键点击任务栏上的音量“![](./figures/xfce-82.png)”图标,打开声音界面。 + +![图 13 音量设置窗口](./figures/xfce-821.png) + +##### 3.1.4.3 电源 + +用户通过点击鼠标左键任务栏中电源“![](./figures/xfce-83.png)”图标。 + +![图 14 电源设备](./figures/xfce-831.png) + +用户通过点击 电源管理器设置 进行 显示、节点 等配置。 + +![图 15 电源管理器设置](./figures/xfce-832.png) + +##### 3.1.4.4 通知中心 + +用户通过点击鼠标左键任务栏中通知“![](./figures/xfce-84.png)”图标。 + +![图 16 通知中心-big](./figures/xfce-841.png) + +用户可通过选择“请勿打扰”关闭通知。 + +通知中心将会显示重要的近期最新的重要信息列表,选择“清除日志”可将信息列表清空。 + +用户可通过选择“通知设置”跳转进入控制面板的通知设置界面,能设置显示信息的应用,以及信息的数量。 + +![图 17 通知中心-big](./figures/xfce-842.png) + +##### 3.1.4.5 日历 + +用户通过鼠标左键点击任务栏上的时间日期弹出日历窗口,查看日历、月历、年历窗口。 + +用户可通过筛选年 > 月 > 日查看一日信息。 + +![图 18 日历-big](./figures/xfce-85.png) + +用户通过鼠标右键点击任务栏上的时间日期,点击 属性 进行时间设置。 + +![图 19 日期设置-big](./figures/xfce-851.png) + +#### 3.1.4.6 高级设置 + +右键单击任务栏,出现的菜单中点击 面板。 + +![图 20 任务栏右键菜单](./figures/xfce-86.png) + +用户可对任务栏的布局进行设定,可进行项目的添加、删除等相关设置。 + +![图 21 任务栏右键菜单](./figures/xfce-861.png) + + +##### 3.1.4.7 登录用户动作 + +用户通过鼠标左键点击任务栏上的登录用户,查看相关动作。 + +![图 22 登录用户动作](./figures/xfce-87.png) + +###### 3.1.4.7.1 锁屏 + +当用户暂时不需要使用计算机时,可以选择锁屏(不会影响系统当前的运行状态),防止误操作;用户返回后,输入密码即可重新进入系统。 + +在默认设置下,系统在一段空闲时间后,将自动锁定屏幕。 + +###### 3.1.4.7.2 切换用户 + +选择其他用户登录使用计算机时,可选择“切换用户”。 + +此时,系统会关闭所有正在运行的应用;所以,在执行此操作前,请先保存当前工作。 + +###### 3.1.4.7.3 挂起 + +处于环保节能考虑,可选择“挂起”。 + +此时,相关数据读入内存,注意不能切换电源。 + +###### 3.1.4.7.3 关机 + +用户选择关闭计算机时,可以选择“关机”。 + +在执行此操作前,建议先保存当前工作。 + +###### 3.1.4.7.3 注销 + +选择退出本次图形界面登录时,可选择“注销”。 + +此时,系统会关闭所有正在运行的应用;所以,在执行此操作前,请先保存当前工作。 + +
+ +## 四 快捷操作栏 + +### 4.1 基本功能 + +快捷操作栏位于底部,包括所有显示桌面、终端、文件管理器、网络浏览器、应用程序查找、用户家目录。 + +![图 23 快捷操作栏](./figures/xfce-9.png) + +| 组件 | 说明 | +| :------------ | :------------ | +| 显示桌面 | 最小化桌面的所有窗口,返回桌面;再次单击将恢复窗口 | +| 终端 | 快速打开一个终端 | +| 文件管理器 | 快速打开一个文件管理器 | +| 网络浏览器 | 快速打开一个网络浏览器 | +| 应用程序查找 | 快速打开应用程序查找窗口 | +| 用户家目录 | 快速打开登录用户的家目录 | + +#### 4.1.1 显示桌面 + +用户通过鼠标左键点击快捷操作栏上的“![](./figures/xfce-91.png)”图标,执行 显示桌面 相关操作。 + +![图 24 显示桌面-big](./figures/xfce-911.png) + +#### 4.1.2 终端 + +用户通过鼠标左键点击快捷操作栏上的“![](./figures/xfce-92.png)”图标,打开一个终端。 + +![图 25 终端-big](./figures/xfce-921.png) + +#### 4.1.3 文件管理器 + +用户通过鼠标左键点击快捷操作栏上的“![](./figures/xfce-93.png)”图标,打开一个文件管理器。 + +![图 26 文件管理器-big](./figures/xfce-931.png) + +#### 4.1.4 网络浏览器 + +用户通过鼠标左键点击快捷操作栏上的“![](./figures/xfce-94.png)”图标,打开一个网络浏览器。 + +![图 27 网络浏览器-big](./figures/xfce-941.png) + +#### 4.1.5 应用程序查找 + +用户通过鼠标左键点击快捷操作栏上的“![](./figures/xfce-95.png)”图标,打开一个应用程序查找界面。 + +![图 28 应用程序查找-big](./figures/xfce-951.png) + +#### 4.1.6 用户家目录 + +用户通过鼠标左键点击快捷操作栏上的“![](./figures/xfce-96.png)”图标,点击 打开文件,打开一个用户家目录界面。 + +![图 29 用户家目录-big](./figures/xfce-961.png) + +用户通过鼠标左键点击快捷操作栏上的“![](./figures/xfce-96.png)”图标,点击 在终端中打开,打开一个终端,当前目录为用户家目录。 + +![图 30 用户家目录-big](./figures/xfce-962.png) + diff --git a/docs/zh/docs/desktop/dde.md b/docs/zh/docs/desktop/dde.md new file mode 100644 index 0000000000000000000000000000000000000000..df26ec97326e1b6d7eea35d749711fa14789cac7 --- /dev/null +++ b/docs/zh/docs/desktop/dde.md @@ -0,0 +1,3 @@ +# DDE 用户指南 + +本节主要描述 DDE 桌面环境的安装和使用。 \ No newline at end of file diff --git a/docs/zh/docs/desktop/desktop.md b/docs/zh/docs/desktop/desktop.md new file mode 100644 index 0000000000000000000000000000000000000000..7e0892abdd28c29d4ebeae5d12ed1f43ce5b9c4b --- /dev/null +++ b/docs/zh/docs/desktop/desktop.md @@ -0,0 +1,4 @@ +# 桌面环境用户指南 + +本文介绍两种常用的桌面环境的安装和使用方法,它们提供美观易用、安全可靠的图形化操作界面,给用户带来更好的体验。 + diff --git a/docs/zh/docs/desktop/figures/1.png b/docs/zh/docs/desktop/figures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..40af4242eebb440a76c749a8d970d50cd7b89bf4 Binary files /dev/null and b/docs/zh/docs/desktop/figures/1.png differ diff --git a/docs/zh/docs/desktop/figures/10.png b/docs/zh/docs/desktop/figures/10.png new file mode 100644 index 0000000000000000000000000000000000000000..e588ffbe3d8d7b66d92ae8f2b4bcec7c80d0592c Binary files /dev/null and b/docs/zh/docs/desktop/figures/10.png differ diff --git a/docs/zh/docs/desktop/figures/11.png b/docs/zh/docs/desktop/figures/11.png new file mode 100644 index 0000000000000000000000000000000000000000..1989a5bb08155f920363e154e68bb148715c7e9e Binary files /dev/null and b/docs/zh/docs/desktop/figures/11.png differ diff --git a/docs/zh/docs/desktop/figures/12.png b/docs/zh/docs/desktop/figures/12.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6346161182d2cfeaf3818d5ec518ddb11c732e Binary files /dev/null and b/docs/zh/docs/desktop/figures/12.png differ diff --git a/docs/zh/docs/desktop/figures/13.png b/docs/zh/docs/desktop/figures/13.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7def1fb66c90da62acde799eaffca97e3b5396 Binary files /dev/null and b/docs/zh/docs/desktop/figures/13.png differ diff --git a/docs/zh/docs/desktop/figures/14.png b/docs/zh/docs/desktop/figures/14.png new file mode 100644 index 0000000000000000000000000000000000000000..3a27a66d57e284775420d467f90dcc02889bbffe Binary files /dev/null and b/docs/zh/docs/desktop/figures/14.png differ diff --git a/docs/zh/docs/desktop/figures/15.png b/docs/zh/docs/desktop/figures/15.png new file mode 100644 index 0000000000000000000000000000000000000000..370bea32abcaa8a2b06a1a61c1455d4b35f43474 Binary files /dev/null and b/docs/zh/docs/desktop/figures/15.png differ diff --git a/docs/zh/docs/desktop/figures/16.png b/docs/zh/docs/desktop/figures/16.png new file mode 100644 index 0000000000000000000000000000000000000000..812ee462669c5263ef4bffc49ca4f9b6af4541c6 Binary files /dev/null and b/docs/zh/docs/desktop/figures/16.png differ diff --git a/docs/zh/docs/desktop/figures/17.png b/docs/zh/docs/desktop/figures/17.png new file mode 100644 index 0000000000000000000000000000000000000000..36e524b806874fa3788f5e4dcd78350686281107 Binary files /dev/null and b/docs/zh/docs/desktop/figures/17.png differ diff --git a/docs/zh/docs/desktop/figures/18.png b/docs/zh/docs/desktop/figures/18.png new file mode 100644 index 0000000000000000000000000000000000000000..51b32442980aa60646f77dabd53ade74f55891fe Binary files /dev/null and b/docs/zh/docs/desktop/figures/18.png differ diff --git a/docs/zh/docs/desktop/figures/19.png b/docs/zh/docs/desktop/figures/19.png new file mode 100644 index 0000000000000000000000000000000000000000..c9457d09aa9f1662b2c9e4550cdbdb9f57dd020e Binary files /dev/null and b/docs/zh/docs/desktop/figures/19.png differ diff --git a/docs/zh/docs/desktop/figures/2.png b/docs/zh/docs/desktop/figures/2.png new file mode 100644 index 0000000000000000000000000000000000000000..97917cc245484a43bec8562757d920a06f123121 Binary files /dev/null and b/docs/zh/docs/desktop/figures/2.png differ diff --git a/docs/zh/docs/desktop/figures/20.png b/docs/zh/docs/desktop/figures/20.png new file mode 100644 index 0000000000000000000000000000000000000000..b0943189920d7a541d35da27340593ea93f92a17 Binary files /dev/null and b/docs/zh/docs/desktop/figures/20.png differ diff --git a/docs/zh/docs/desktop/figures/21.png b/docs/zh/docs/desktop/figures/21.png new file mode 100644 index 0000000000000000000000000000000000000000..e590c22c0ea28906b5f4ea7ccbc6ab11e47ad173 Binary files /dev/null and b/docs/zh/docs/desktop/figures/21.png differ diff --git a/docs/zh/docs/desktop/figures/22.png b/docs/zh/docs/desktop/figures/22.png new file mode 100644 index 0000000000000000000000000000000000000000..03a548b1ffb1f0ad53cfa5387af2721af90bca81 Binary files /dev/null and b/docs/zh/docs/desktop/figures/22.png differ diff --git a/docs/zh/docs/desktop/figures/23.png b/docs/zh/docs/desktop/figures/23.png new file mode 100644 index 0000000000000000000000000000000000000000..834c492094715cde1c02c91752ecabfe7921ed62 Binary files /dev/null and b/docs/zh/docs/desktop/figures/23.png differ diff --git a/docs/zh/docs/desktop/figures/24.png b/docs/zh/docs/desktop/figures/24.png new file mode 100644 index 0000000000000000000000000000000000000000..1881e868b74a60888b319576fa38fb4af92ba75c Binary files /dev/null and b/docs/zh/docs/desktop/figures/24.png differ diff --git a/docs/zh/docs/desktop/figures/25.png b/docs/zh/docs/desktop/figures/25.png new file mode 100644 index 0000000000000000000000000000000000000000..f38839725d27a3486984d152e5d9de305364fbd2 Binary files /dev/null and b/docs/zh/docs/desktop/figures/25.png differ diff --git a/docs/zh/docs/desktop/figures/26.png b/docs/zh/docs/desktop/figures/26.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7957119133ecb98b1b6b104e54a3a4647ec2a5 Binary files /dev/null and b/docs/zh/docs/desktop/figures/26.png differ diff --git a/docs/zh/docs/desktop/figures/27.png b/docs/zh/docs/desktop/figures/27.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4733717fdc5172d6479b393005219e65e96df4 Binary files /dev/null and b/docs/zh/docs/desktop/figures/27.png differ diff --git a/docs/zh/docs/desktop/figures/28.png b/docs/zh/docs/desktop/figures/28.png new file mode 100644 index 0000000000000000000000000000000000000000..a77772e818e3f6c11acac3b9cfa18bad14a0a48c Binary files /dev/null and b/docs/zh/docs/desktop/figures/28.png differ diff --git a/docs/zh/docs/desktop/figures/29.png b/docs/zh/docs/desktop/figures/29.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f58ffe5855295268298448744e5aadbdc55276 Binary files /dev/null and b/docs/zh/docs/desktop/figures/29.png differ diff --git a/docs/zh/docs/desktop/figures/3.png b/docs/zh/docs/desktop/figures/3.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb76b336957020ed6867d908e0a8bdcfc953c52 Binary files /dev/null and b/docs/zh/docs/desktop/figures/3.png differ diff --git a/docs/zh/docs/desktop/figures/30.png b/docs/zh/docs/desktop/figures/30.png new file mode 100644 index 0000000000000000000000000000000000000000..d91adefba1753959e90ccf4aa1501ac08d7144bd Binary files /dev/null and b/docs/zh/docs/desktop/figures/30.png differ diff --git a/docs/zh/docs/desktop/figures/31.png b/docs/zh/docs/desktop/figures/31.png new file mode 100644 index 0000000000000000000000000000000000000000..0abef09ab438f5f8cfb68090993f55c493b8c15e Binary files /dev/null and b/docs/zh/docs/desktop/figures/31.png differ diff --git a/docs/zh/docs/desktop/figures/32.png b/docs/zh/docs/desktop/figures/32.png new file mode 100644 index 0000000000000000000000000000000000000000..d567cfbacc07a9eb46ff2c54a68432f45e034e94 Binary files /dev/null and b/docs/zh/docs/desktop/figures/32.png differ diff --git a/docs/zh/docs/desktop/figures/33.png b/docs/zh/docs/desktop/figures/33.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5896e2884520672c0bd88d68471b45a09c56fe Binary files /dev/null and b/docs/zh/docs/desktop/figures/33.png differ diff --git a/docs/zh/docs/desktop/figures/34.png b/docs/zh/docs/desktop/figures/34.png new file mode 100644 index 0000000000000000000000000000000000000000..81bc9480fbbd81a97c559d7a6a74274deeab2bd1 Binary files /dev/null and b/docs/zh/docs/desktop/figures/34.png differ diff --git a/docs/zh/docs/desktop/figures/35.png b/docs/zh/docs/desktop/figures/35.png new file mode 100644 index 0000000000000000000000000000000000000000..ab2399847a643a87279337704e23fea7609bb211 Binary files /dev/null and b/docs/zh/docs/desktop/figures/35.png differ diff --git a/docs/zh/docs/desktop/figures/36.png b/docs/zh/docs/desktop/figures/36.png new file mode 100644 index 0000000000000000000000000000000000000000..536981609b9ae5d32be56bec612f2b3446146184 Binary files /dev/null and b/docs/zh/docs/desktop/figures/36.png differ diff --git a/docs/zh/docs/desktop/figures/37.png b/docs/zh/docs/desktop/figures/37.png new file mode 100644 index 0000000000000000000000000000000000000000..e39aa03587642dc1f8622fff515b05a9a3085b28 Binary files /dev/null and b/docs/zh/docs/desktop/figures/37.png differ diff --git a/docs/zh/docs/desktop/figures/38.png b/docs/zh/docs/desktop/figures/38.png new file mode 100644 index 0000000000000000000000000000000000000000..838f5ff0616a83cdf42edb053f4e72b93bfa644e Binary files /dev/null and b/docs/zh/docs/desktop/figures/38.png differ diff --git a/docs/zh/docs/desktop/figures/39.png b/docs/zh/docs/desktop/figures/39.png new file mode 100644 index 0000000000000000000000000000000000000000..12a379403d73a47b2fa564120a28fdb58d188963 Binary files /dev/null and b/docs/zh/docs/desktop/figures/39.png differ diff --git a/docs/zh/docs/desktop/figures/4.png b/docs/zh/docs/desktop/figures/4.png new file mode 100644 index 0000000000000000000000000000000000000000..5078e36aca713706d2cf08a3ebecdc3769951899 Binary files /dev/null and b/docs/zh/docs/desktop/figures/4.png differ diff --git a/docs/zh/docs/desktop/figures/40.png b/docs/zh/docs/desktop/figures/40.png new file mode 100755 index 0000000000000000000000000000000000000000..bf419894eab852b45604966c62fafa71f051c4df Binary files /dev/null and b/docs/zh/docs/desktop/figures/40.png differ diff --git a/docs/zh/docs/desktop/figures/41.png b/docs/zh/docs/desktop/figures/41.png new file mode 100755 index 0000000000000000000000000000000000000000..f94b0ee72e0d4e9277e9b44b4268cfbdb8402104 Binary files /dev/null and b/docs/zh/docs/desktop/figures/41.png differ diff --git a/docs/zh/docs/desktop/figures/42.png b/docs/zh/docs/desktop/figures/42.png new file mode 100644 index 0000000000000000000000000000000000000000..3182e551c4e4b03885bad6339f1de514b3f55f8c Binary files /dev/null and b/docs/zh/docs/desktop/figures/42.png differ diff --git a/docs/zh/docs/desktop/figures/43.jpg b/docs/zh/docs/desktop/figures/43.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26e9244f58ea9800081fd61ae135477f05b21b40 Binary files /dev/null and b/docs/zh/docs/desktop/figures/43.jpg differ diff --git a/docs/zh/docs/desktop/figures/44.png b/docs/zh/docs/desktop/figures/44.png new file mode 100644 index 0000000000000000000000000000000000000000..c3abaecd6e053272d81e0ad9bd183c6858b4f3c5 Binary files /dev/null and b/docs/zh/docs/desktop/figures/44.png differ diff --git a/docs/zh/docs/desktop/figures/45.png b/docs/zh/docs/desktop/figures/45.png new file mode 100755 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/zh/docs/desktop/figures/45.png differ diff --git a/docs/zh/docs/desktop/figures/46.png b/docs/zh/docs/desktop/figures/46.png new file mode 100755 index 0000000000000000000000000000000000000000..d8ec41c87628bf28c9905523f99ae93aebd13614 Binary files /dev/null and b/docs/zh/docs/desktop/figures/46.png differ diff --git a/docs/zh/docs/desktop/figures/47.jpg b/docs/zh/docs/desktop/figures/47.jpg new file mode 100755 index 0000000000000000000000000000000000000000..bf95f03c8ea0f84a878bc63af20972c9da71bc04 Binary files /dev/null and b/docs/zh/docs/desktop/figures/47.jpg differ diff --git a/docs/zh/docs/desktop/figures/48.png b/docs/zh/docs/desktop/figures/48.png new file mode 100644 index 0000000000000000000000000000000000000000..ef21fa1ce1e2e9848a8dca16e692de673df7c6d7 Binary files /dev/null and b/docs/zh/docs/desktop/figures/48.png differ diff --git a/docs/zh/docs/desktop/figures/49.png b/docs/zh/docs/desktop/figures/49.png new file mode 100644 index 0000000000000000000000000000000000000000..3b77668e5a4d1bdb3043c473dff9b36fa7144714 Binary files /dev/null and b/docs/zh/docs/desktop/figures/49.png differ diff --git a/docs/zh/docs/desktop/figures/5.png b/docs/zh/docs/desktop/figures/5.png new file mode 100644 index 0000000000000000000000000000000000000000..2976a745cfaede26594d6daa01cfc18d18b1de8b Binary files /dev/null and b/docs/zh/docs/desktop/figures/5.png differ diff --git a/docs/zh/docs/desktop/figures/50.png b/docs/zh/docs/desktop/figures/50.png new file mode 100644 index 0000000000000000000000000000000000000000..b86a55fe4363f56fc18befc9d27025a75ca427ad Binary files /dev/null and b/docs/zh/docs/desktop/figures/50.png differ diff --git a/docs/zh/docs/desktop/figures/51.png b/docs/zh/docs/desktop/figures/51.png new file mode 100755 index 0000000000000000000000000000000000000000..d427ac871dba9c32eb4ffe736d5352f8408da533 Binary files /dev/null and b/docs/zh/docs/desktop/figures/51.png differ diff --git a/docs/zh/docs/desktop/figures/52.png b/docs/zh/docs/desktop/figures/52.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca0a2db05c70bc25f9bb59e82d074f671cfc74e Binary files /dev/null and b/docs/zh/docs/desktop/figures/52.png differ diff --git a/docs/zh/docs/desktop/figures/53.png b/docs/zh/docs/desktop/figures/53.png new file mode 100644 index 0000000000000000000000000000000000000000..76fbc34a1d5621b83c2d8c93222766acad33350d Binary files /dev/null and b/docs/zh/docs/desktop/figures/53.png differ diff --git a/docs/zh/docs/desktop/figures/54.png b/docs/zh/docs/desktop/figures/54.png new file mode 100644 index 0000000000000000000000000000000000000000..49ecae6f8941a118223f3765c23015df074c4983 Binary files /dev/null and b/docs/zh/docs/desktop/figures/54.png differ diff --git a/docs/zh/docs/desktop/figures/56.png b/docs/zh/docs/desktop/figures/56.png new file mode 100644 index 0000000000000000000000000000000000000000..36fee795bfe593b6246c8d6c2bddea9386b06f45 Binary files /dev/null and b/docs/zh/docs/desktop/figures/56.png differ diff --git a/docs/zh/docs/desktop/figures/57.png b/docs/zh/docs/desktop/figures/57.png new file mode 100644 index 0000000000000000000000000000000000000000..539d06b77b058a933cb154c43641d498050986e0 Binary files /dev/null and b/docs/zh/docs/desktop/figures/57.png differ diff --git a/docs/zh/docs/desktop/figures/58.png b/docs/zh/docs/desktop/figures/58.png new file mode 100755 index 0000000000000000000000000000000000000000..396ca16d873e54505bcdbd41d669366eea7f5dee Binary files /dev/null and b/docs/zh/docs/desktop/figures/58.png differ diff --git a/docs/zh/docs/desktop/figures/59.png b/docs/zh/docs/desktop/figures/59.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1de98ac4fe686937ca844d3e9481548a79ce63 Binary files /dev/null and b/docs/zh/docs/desktop/figures/59.png differ diff --git a/docs/zh/docs/desktop/figures/6.png b/docs/zh/docs/desktop/figures/6.png new file mode 100644 index 0000000000000000000000000000000000000000..275c23872f2353f007371672714902babcc3db53 Binary files /dev/null and b/docs/zh/docs/desktop/figures/6.png differ diff --git a/docs/zh/docs/desktop/figures/60.jpg b/docs/zh/docs/desktop/figures/60.jpg new file mode 100755 index 0000000000000000000000000000000000000000..033c88aaadd04f7d4058ec2eb5b2c70498319bf7 Binary files /dev/null and b/docs/zh/docs/desktop/figures/60.jpg differ diff --git a/docs/zh/docs/desktop/figures/61.png b/docs/zh/docs/desktop/figures/61.png new file mode 100644 index 0000000000000000000000000000000000000000..8df17062963a3baf92318a12ec34b1378122687b Binary files /dev/null and b/docs/zh/docs/desktop/figures/61.png differ diff --git a/docs/zh/docs/desktop/figures/62.png b/docs/zh/docs/desktop/figures/62.png new file mode 100644 index 0000000000000000000000000000000000000000..ec312d6c0c22018c1745dd866da71ce9be47fbda Binary files /dev/null and b/docs/zh/docs/desktop/figures/62.png differ diff --git a/docs/zh/docs/desktop/figures/63.jpg b/docs/zh/docs/desktop/figures/63.jpg new file mode 100755 index 0000000000000000000000000000000000000000..504f7cf59768f6fd1cd73a115d01fbc4e15a02e1 Binary files /dev/null and b/docs/zh/docs/desktop/figures/63.jpg differ diff --git a/docs/zh/docs/desktop/figures/63.png b/docs/zh/docs/desktop/figures/63.png new file mode 100755 index 0000000000000000000000000000000000000000..86b051acde857c88479714414f721a7f59cca483 Binary files /dev/null and b/docs/zh/docs/desktop/figures/63.png differ diff --git a/docs/zh/docs/desktop/figures/64.png b/docs/zh/docs/desktop/figures/64.png new file mode 100755 index 0000000000000000000000000000000000000000..cbbd2ede047e735c3766e08b04595f08cd72f5b2 Binary files /dev/null and b/docs/zh/docs/desktop/figures/64.png differ diff --git a/docs/zh/docs/desktop/figures/7.png b/docs/zh/docs/desktop/figures/7.png new file mode 100644 index 0000000000000000000000000000000000000000..4d397959ac7f6d166ef5a3b7084bd5c3c93b475f Binary files /dev/null and b/docs/zh/docs/desktop/figures/7.png differ diff --git a/docs/zh/docs/desktop/figures/8.png b/docs/zh/docs/desktop/figures/8.png new file mode 100644 index 0000000000000000000000000000000000000000..8ade274092d7b3e461c96d7909a9d89d3a944f09 Binary files /dev/null and b/docs/zh/docs/desktop/figures/8.png differ diff --git a/docs/zh/docs/desktop/figures/9.png b/docs/zh/docs/desktop/figures/9.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b2215404929346f1a814b0b1d6d482559c08b5 Binary files /dev/null and b/docs/zh/docs/desktop/figures/9.png differ diff --git a/docs/zh/docs/desktop/figures/icon1.png b/docs/zh/docs/desktop/figures/icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..9bac00355cf4aa57d32287fd4271404f6fd3fd4d Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon1.png differ diff --git a/docs/zh/docs/desktop/figures/icon10-o.png b/docs/zh/docs/desktop/figures/icon10-o.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c56d1a64c588d86f8fe510c74e5a7c4cb810d4 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon10-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon101-o.svg b/docs/zh/docs/desktop/figures/icon101-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..af1c5d3dc0277a6ea59e71efb6ca97bdfc782e8e --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon101-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/zh/docs/desktop/figures/icon103-o.svg b/docs/zh/docs/desktop/figures/icon103-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..c06c885725c569ab8db1fe7d595a7c65f18c5142 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon103-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon105-o.svg b/docs/zh/docs/desktop/figures/icon105-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..36c49949fa569330b761c2d65518f36c10435508 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon105-o.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon107-o.svg b/docs/zh/docs/desktop/figures/icon107-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..fb5a3ea756f6ccb7b3e5c31122a433347a908c96 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon107-o.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon11-o.png b/docs/zh/docs/desktop/figures/icon11-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon11-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon110-o.svg b/docs/zh/docs/desktop/figures/icon110-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..7958e3f192061592e002e1e8a1bad06ffa86742c --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon110-o.svg @@ -0,0 +1,12 @@ + + + + reboot_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon111-o.svg b/docs/zh/docs/desktop/figures/icon111-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..097d16a08d305a8b3f3b2268ab1ea8342e799377 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon111-o.svg @@ -0,0 +1,13 @@ + + + + Right + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon112-o.svg b/docs/zh/docs/desktop/figures/icon112-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..e51628c2b8b10495f3410d219814286696ea2fd5 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon112-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon116-o.svg b/docs/zh/docs/desktop/figures/icon116-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..4d79cd6dbbbfd3969f4e0ad0ad88e27398853505 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon116-o.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon12-o.png b/docs/zh/docs/desktop/figures/icon12-o.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f0f59dd3879461a0b5bc0632693a4a4124def3 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon12-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon120-o.svg b/docs/zh/docs/desktop/figures/icon120-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..e895c347d16a200aea46b00428b0b9f1a3c94246 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon120-o.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon122-o.svg b/docs/zh/docs/desktop/figures/icon122-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..7fb014b5fd6097ca37a84d0b6a27dc982d675c8a --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon122-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/zh/docs/desktop/figures/icon124-o.svg b/docs/zh/docs/desktop/figures/icon124-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..960c0ec096c925213f8953398f0e8e5db3cdaed3 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon124-o.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon125-o.svg b/docs/zh/docs/desktop/figures/icon125-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..011c05f4b8f296867cd408a339230323fcbb28dd --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon125-o.svg @@ -0,0 +1,9 @@ + + + tips + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon126-o.svg b/docs/zh/docs/desktop/figures/icon126-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..e0a43b6b8beb434090ac0dd3a8fd68c023f11fce --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon126-o.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon127-o.svg b/docs/zh/docs/desktop/figures/icon127-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..bed95d35334a8d0151211054236c0bacddcc0dd3 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon127-o.svg @@ -0,0 +1,13 @@ + + + + Up + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon128-o.svg b/docs/zh/docs/desktop/figures/icon128-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..aa727f3f5d5883b3fb83a79c4b98e8b5bfe4ade6 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon128-o.svg @@ -0,0 +1,12 @@ + + + + userswitch_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon13-o.png b/docs/zh/docs/desktop/figures/icon13-o.png new file mode 100644 index 0000000000000000000000000000000000000000..c05a981b29d8ad11c6682f796f79b4cafd0f088b Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon13-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon132-o.svg b/docs/zh/docs/desktop/figures/icon132-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..588ba9d98864ba67a562fa9179f29405f7687aa0 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon132-o.svg @@ -0,0 +1,15 @@ + + + + - + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon133-o.svg b/docs/zh/docs/desktop/figures/icon133-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..886d90a83e33497d134bdb3dcc864a5c2df53f20 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon133-o.svg @@ -0,0 +1,13 @@ + + + + + + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon134-o.svg b/docs/zh/docs/desktop/figures/icon134-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..784cf383eb0e8f5c7a57a602047be50ad0a3bc05 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon134-o.svg @@ -0,0 +1,15 @@ + + + + = + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon135-o.svg b/docs/zh/docs/desktop/figures/icon135-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..cea628a8f5eb92d10661b690242b6de41ca64816 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon135-o.svg @@ -0,0 +1,15 @@ + + + + ~ + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon136-o.svg b/docs/zh/docs/desktop/figures/icon136-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..24aa139ab2fefaee20935551f1af5aef473719ed --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon136-o.svg @@ -0,0 +1,12 @@ + + + + poweroff_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon14-o.png b/docs/zh/docs/desktop/figures/icon14-o.png new file mode 100644 index 0000000000000000000000000000000000000000..b21deee4d98593d93fb5f72158d2d78f3d3f1cb9 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon14-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon15-o.png b/docs/zh/docs/desktop/figures/icon15-o.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon15-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon16.png b/docs/zh/docs/desktop/figures/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..f271594dda9d3ad0f038c9d719dd68c3e82c59f1 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon16.png differ diff --git a/docs/zh/docs/desktop/figures/icon17.png b/docs/zh/docs/desktop/figures/icon17.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe58b89347c857920bce25f067fbd11c308e502 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon17.png differ diff --git a/docs/zh/docs/desktop/figures/icon18.png b/docs/zh/docs/desktop/figures/icon18.png new file mode 100644 index 0000000000000000000000000000000000000000..1827a20e9da4d28e35e8ab2eae739b2fec37b385 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon18.png differ diff --git a/docs/zh/docs/desktop/figures/icon19-o.png b/docs/zh/docs/desktop/figures/icon19-o.png new file mode 100644 index 0000000000000000000000000000000000000000..47a1f2cb7f99b583768c7cbd7e05a57f302dbe8a Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon19-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon2.png b/docs/zh/docs/desktop/figures/icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..9101e4b386df065a87d422bc5a0b287528ea5ec7 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon2.png differ diff --git a/docs/zh/docs/desktop/figures/icon20.png b/docs/zh/docs/desktop/figures/icon20.png new file mode 100644 index 0000000000000000000000000000000000000000..4de3c7c695893539967245ea5e269b26e2b735be Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon20.png differ diff --git a/docs/zh/docs/desktop/figures/icon21.png b/docs/zh/docs/desktop/figures/icon21.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b4320b6ce1fd4adb52525ba2c60983ffb2eed3 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon21.png differ diff --git a/docs/zh/docs/desktop/figures/icon22.png b/docs/zh/docs/desktop/figures/icon22.png new file mode 100644 index 0000000000000000000000000000000000000000..43bfa96965ad13e0a34ead3cb1102a76b9346a23 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon22.png differ diff --git a/docs/zh/docs/desktop/figures/icon23.png b/docs/zh/docs/desktop/figures/icon23.png new file mode 100644 index 0000000000000000000000000000000000000000..aee221ddaa81d06fa7bd5b89a624da90cd1e53da Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon23.png differ diff --git a/docs/zh/docs/desktop/figures/icon24.png b/docs/zh/docs/desktop/figures/icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e5d700431ca1666fe9eda2cefce5dd2f83bdcd Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon24.png differ diff --git a/docs/zh/docs/desktop/figures/icon25.png b/docs/zh/docs/desktop/figures/icon25.png new file mode 100644 index 0000000000000000000000000000000000000000..3de0f9476bbee9e89c3b759afbed968f17b5bbcc Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon25.png differ diff --git a/docs/zh/docs/desktop/figures/icon26-o.png b/docs/zh/docs/desktop/figures/icon26-o.png new file mode 100644 index 0000000000000000000000000000000000000000..2293a893caf6d89c3beb978598fe7f281e68e7d5 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon26-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon27-o.png b/docs/zh/docs/desktop/figures/icon27-o.png new file mode 100644 index 0000000000000000000000000000000000000000..abbab8e40f7e3ca7c2a6f28ff78f08f15117828e Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon27-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon28-o.png b/docs/zh/docs/desktop/figures/icon28-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon28-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon29-o.png b/docs/zh/docs/desktop/figures/icon29-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon29-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon3.png b/docs/zh/docs/desktop/figures/icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..930ee8909e89e3624c581f83d713af271cd96c75 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon3.png differ diff --git a/docs/zh/docs/desktop/figures/icon30-o.png b/docs/zh/docs/desktop/figures/icon30-o.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d45fc0a9d2af93280ea14e01512838bb3c3dc Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon30-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon31-o.png b/docs/zh/docs/desktop/figures/icon31-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon31-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon32.png b/docs/zh/docs/desktop/figures/icon32.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon32.png differ diff --git a/docs/zh/docs/desktop/figures/icon33.png b/docs/zh/docs/desktop/figures/icon33.png new file mode 100644 index 0000000000000000000000000000000000000000..88ed145b25f6f025ad795ceb012500e0944cb54c Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon33.png differ diff --git a/docs/zh/docs/desktop/figures/icon34.png b/docs/zh/docs/desktop/figures/icon34.png new file mode 100644 index 0000000000000000000000000000000000000000..8247f52a3424c81b451ceb318f4a7979a5eddece Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon34.png differ diff --git a/docs/zh/docs/desktop/figures/icon35.png b/docs/zh/docs/desktop/figures/icon35.png new file mode 100644 index 0000000000000000000000000000000000000000..7c656e9030b94809a57c7e369921e6a585f3574c Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon35.png differ diff --git a/docs/zh/docs/desktop/figures/icon36.png b/docs/zh/docs/desktop/figures/icon36.png new file mode 100644 index 0000000000000000000000000000000000000000..7d29d173e914dfff48245d3d3a4d42575ce2d1db Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon36.png differ diff --git a/docs/zh/docs/desktop/figures/icon37.png b/docs/zh/docs/desktop/figures/icon37.png new file mode 100644 index 0000000000000000000000000000000000000000..58be4c621b6638115153e361801deb9ee06634d8 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon37.png differ diff --git a/docs/zh/docs/desktop/figures/icon38.png b/docs/zh/docs/desktop/figures/icon38.png new file mode 100644 index 0000000000000000000000000000000000000000..0c861ccb891f4fb5e533eb7f7151a8fce1571f17 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon38.png differ diff --git a/docs/zh/docs/desktop/figures/icon39.png b/docs/zh/docs/desktop/figures/icon39.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ba1f347452d0cd1c06c6c51d2cdf5aea5e490b Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon39.png differ diff --git a/docs/zh/docs/desktop/figures/icon4.png b/docs/zh/docs/desktop/figures/icon4.png new file mode 100644 index 0000000000000000000000000000000000000000..548dc8b648edb73ff1dd8a0266e8479203e72ca0 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon4.png differ diff --git a/docs/zh/docs/desktop/figures/icon40.png b/docs/zh/docs/desktop/figures/icon40.png new file mode 100644 index 0000000000000000000000000000000000000000..9c29dd1e9a1bf22c36abf51cb18fa9e47b455fab Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon40.png differ diff --git a/docs/zh/docs/desktop/figures/icon41.png b/docs/zh/docs/desktop/figures/icon41.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8aea527a2119433fffec5a8800ebfa4fa5062f Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon41.png differ diff --git a/docs/zh/docs/desktop/figures/icon42-o.png b/docs/zh/docs/desktop/figures/icon42-o.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon42-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon42.png b/docs/zh/docs/desktop/figures/icon42.png new file mode 100644 index 0000000000000000000000000000000000000000..25959977f986f433ddf3d66935f8d2c2bc6ed86b Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon42.png differ diff --git a/docs/zh/docs/desktop/figures/icon43-o.png b/docs/zh/docs/desktop/figures/icon43-o.png new file mode 100644 index 0000000000000000000000000000000000000000..284bdd551baf25beb4143013402e77a1a4c60ccb Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon43-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon44-o.png b/docs/zh/docs/desktop/figures/icon44-o.png new file mode 100644 index 0000000000000000000000000000000000000000..810f4d784ee140dbf562e67a0d3fd391272626a5 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon44-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon45-o.png b/docs/zh/docs/desktop/figures/icon45-o.png new file mode 100644 index 0000000000000000000000000000000000000000..3e528ce2c98284f020ae4912a853f5864526396b Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon45-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon46-o.png b/docs/zh/docs/desktop/figures/icon46-o.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6a3ca0fe57016f3685981ed518493ceea1c855 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon46-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon47-o.png b/docs/zh/docs/desktop/figures/icon47-o.png new file mode 100644 index 0000000000000000000000000000000000000000..6eeaba98d908775bd363a8ffcec27c3b6a214013 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon47-o.png differ diff --git a/docs/zh/docs/desktop/figures/icon49-o.svg b/docs/zh/docs/desktop/figures/icon49-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..72ffb173fdb95e1aff5b0001b08ed6b71122b7f2 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon49-o.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon5.png b/docs/zh/docs/desktop/figures/icon5.png new file mode 100644 index 0000000000000000000000000000000000000000..e4206b7b584bf0702c7cb2f03a3a41e20bfba844 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon5.png differ diff --git a/docs/zh/docs/desktop/figures/icon50-o.svg b/docs/zh/docs/desktop/figures/icon50-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..05026802be4718205065d6369e14cc0b6ef05bc7 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon50-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon52-o.svg b/docs/zh/docs/desktop/figures/icon52-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..23149c05873259cd39721b8ee9c3ab7db86d64c5 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon52-o.svg @@ -0,0 +1,9 @@ + + + attention + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon53-o.svg b/docs/zh/docs/desktop/figures/icon53-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..50e33489ce984b0acfd621da4a8ef837fdf048c1 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon53-o.svg @@ -0,0 +1,11 @@ + + + + previous + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon54-o.svg b/docs/zh/docs/desktop/figures/icon54-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..3b599aef4b822c707d2f646405bb00837aed96fd --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon54-o.svg @@ -0,0 +1,18 @@ + + + + Backspace + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon56-o.svg b/docs/zh/docs/desktop/figures/icon56-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..9f13b6861e3858deec8d57a5301c934acc247069 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon56-o.svg @@ -0,0 +1,19 @@ + + + + Slice 1 + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon57-o.svg b/docs/zh/docs/desktop/figures/icon57-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..e6fbfa1381b76ab3fcd45652b33267a7f6c69bb7 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon57-o.svg @@ -0,0 +1,11 @@ + + + + titlebutton/close_normal + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon58-o.svg b/docs/zh/docs/desktop/figures/icon58-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..9746dcacfc8e5d4c4b63233801e37418a190fc8f --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon58-o.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon6.png b/docs/zh/docs/desktop/figures/icon6.png new file mode 100644 index 0000000000000000000000000000000000000000..88ced3587e9a42b145fe11393726f40aba9d1b2c Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon6.png differ diff --git a/docs/zh/docs/desktop/figures/icon62-o.svg b/docs/zh/docs/desktop/figures/icon62-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..09f61b446669df2e05a3351d40d8c30879c7b035 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon62-o.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon63-o.svg b/docs/zh/docs/desktop/figures/icon63-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..06c03ed99260ffadc681475dad35610aedf67f83 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon63-o.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon66-o.svg b/docs/zh/docs/desktop/figures/icon66-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..5793b3846b7fe6a5758379591215b16c7f9e1b52 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon66-o.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon68-o.svg b/docs/zh/docs/desktop/figures/icon68-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..a7748052dfa436116d8742dca28f7d90865231ed --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon68-o.svg @@ -0,0 +1,23 @@ + + + + deepin-system-monitor + Created with Sketch. + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon69-o.svg b/docs/zh/docs/desktop/figures/icon69-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..e21dfd00a32a44ee1c8e3882b4ca8239be04690f --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon69-o.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon7.png b/docs/zh/docs/desktop/figures/icon7.png new file mode 100644 index 0000000000000000000000000000000000000000..05fe8aa38c84ca0c0c99b0b005ddec2f2ba42f4a Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon7.png differ diff --git a/docs/zh/docs/desktop/figures/icon70-o.svg b/docs/zh/docs/desktop/figures/icon70-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..b5787a7ffa5ed9519a48c6937c60927fd11fd455 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon70-o.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon71-o.svg b/docs/zh/docs/desktop/figures/icon71-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..669a21f143b06cb45ea3f45f7f071809f2cbc8a8 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon71-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon72-o.svg b/docs/zh/docs/desktop/figures/icon72-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..79067ed9b9ff7912e1742183b461fa056601b9cc --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon72-o.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon73-o.svg b/docs/zh/docs/desktop/figures/icon73-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..cf6292387f5e790db6ebd66184aabcbb39257ee7 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon73-o.svg @@ -0,0 +1,13 @@ + + + + Down + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon75-o.svg b/docs/zh/docs/desktop/figures/icon75-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..ef6823ccc19858f57374f0b78ad31514e8311be3 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon75-o.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/zh/docs/desktop/figures/icon8.png b/docs/zh/docs/desktop/figures/icon8.png new file mode 100644 index 0000000000000000000000000000000000000000..01543c3e0f5e96a023b4e1f0859a03e3a0dafd56 Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon8.png differ diff --git a/docs/zh/docs/desktop/figures/icon83-o.svg b/docs/zh/docs/desktop/figures/icon83-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..35dd6eacc54a933dc9ebc3f3010edfa7363fecc0 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon83-o.svg @@ -0,0 +1,84 @@ + + + + + + image/svg+xml + + img_upload + + + + + + img_upload + Created with Sketch. + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon84-o.svg b/docs/zh/docs/desktop/figures/icon84-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..9bd11b9e7b45b506dd7e1c87d09d545d8f48af06 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon84-o.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon86-o.svg b/docs/zh/docs/desktop/figures/icon86-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..5da20233309c43d4fc7b315f441cde476c835c67 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon86-o.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon88-o.svg b/docs/zh/docs/desktop/figures/icon88-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..c2570c26575fd14cb5e9d9fe77831d2e8f6c9333 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon88-o.svg @@ -0,0 +1,13 @@ + + + + Left + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon9.png b/docs/zh/docs/desktop/figures/icon9.png new file mode 100644 index 0000000000000000000000000000000000000000..a07c9ab8e51decd9a3bca8c969d2ae95bd68512c Binary files /dev/null and b/docs/zh/docs/desktop/figures/icon9.png differ diff --git a/docs/zh/docs/desktop/figures/icon90-o.svg b/docs/zh/docs/desktop/figures/icon90-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..79b5e0a141f7969a8f77ae61f4c240de7187afe9 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon90-o.svg @@ -0,0 +1,12 @@ + + + + lock_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon92-o.svg b/docs/zh/docs/desktop/figures/icon92-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..21341b64a832e1935252aa82e7a4e0b083c16eae --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon92-o.svg @@ -0,0 +1,12 @@ + + + + logout_normal + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/icon94-o.svg b/docs/zh/docs/desktop/figures/icon94-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..a47044149a02101dbd24a3fdb2f3ead77efca6c1 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon94-o.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon97-o.svg b/docs/zh/docs/desktop/figures/icon97-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..4f4670de29d8c86885b5aa806b2c8cdc6fc16dcb --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon97-o.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/zh/docs/desktop/figures/icon99-o.svg b/docs/zh/docs/desktop/figures/icon99-o.svg new file mode 100755 index 0000000000000000000000000000000000000000..e9a3aa60a51404c9390bfbea8d8ff09edc0e2e32 --- /dev/null +++ b/docs/zh/docs/desktop/figures/icon99-o.svg @@ -0,0 +1,11 @@ + + + notes + + + + + + + + \ No newline at end of file diff --git a/docs/zh/docs/desktop/figures/kiran-1.png b/docs/zh/docs/desktop/figures/kiran-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6f17788dce804c004027adfe45628eebffaa48cf Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-1.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-10.png b/docs/zh/docs/desktop/figures/kiran-10.png new file mode 100644 index 0000000000000000000000000000000000000000..18cfa3074af1f4b8d49d064a77b016f24ab8c17c Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-10.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-11.png b/docs/zh/docs/desktop/figures/kiran-11.png new file mode 100644 index 0000000000000000000000000000000000000000..b58fbb7ce8a798d5355855a4ac0638540df74d9e Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-11.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-12.png b/docs/zh/docs/desktop/figures/kiran-12.png new file mode 100644 index 0000000000000000000000000000000000000000..920d0c7112be6bed509773413de36506d748b822 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-12.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-13.png b/docs/zh/docs/desktop/figures/kiran-13.png new file mode 100644 index 0000000000000000000000000000000000000000..473ac4151c65951050800cb73313fee07077a9d6 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-13.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-14.png b/docs/zh/docs/desktop/figures/kiran-14.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba17ddca84d25f112e564b542a971d6e7d4c10a Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-14.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-15.png b/docs/zh/docs/desktop/figures/kiran-15.png new file mode 100644 index 0000000000000000000000000000000000000000..b561a2fccb7f159106065baaf88ff9fa32bba1d8 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-15.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-16.png b/docs/zh/docs/desktop/figures/kiran-16.png new file mode 100644 index 0000000000000000000000000000000000000000..a4d71e812144e74cb854e25f215197368b60017f Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-16.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-17.png b/docs/zh/docs/desktop/figures/kiran-17.png new file mode 100644 index 0000000000000000000000000000000000000000..5f52f0d0885fbcd62af5127df6f464bcd334e2b3 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-17.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-18.png b/docs/zh/docs/desktop/figures/kiran-18.png new file mode 100644 index 0000000000000000000000000000000000000000..bbd1a5dbd99c509d936e51e1bcc5970c2311da9d Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-18.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-19.png b/docs/zh/docs/desktop/figures/kiran-19.png new file mode 100644 index 0000000000000000000000000000000000000000..a9ad75326f5d5463a45b532ae05b110155426083 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-19.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-2.png b/docs/zh/docs/desktop/figures/kiran-2.png new file mode 100644 index 0000000000000000000000000000000000000000..b62c95a0b7d2bcfbc0bbac084ed7df74e5412da5 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-2.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-20.png b/docs/zh/docs/desktop/figures/kiran-20.png new file mode 100644 index 0000000000000000000000000000000000000000..a43f8e2dc5ff4b5445386fd0c703bdf6b1e186ec Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-20.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-21.png b/docs/zh/docs/desktop/figures/kiran-21.png new file mode 100644 index 0000000000000000000000000000000000000000..19c758d585016351a1f26fdac48221bdf0710a53 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-21.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-22.png b/docs/zh/docs/desktop/figures/kiran-22.png new file mode 100644 index 0000000000000000000000000000000000000000..703327a3f511c20cd977ae4cd68552ecb3dd6971 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-22.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-23.png b/docs/zh/docs/desktop/figures/kiran-23.png new file mode 100644 index 0000000000000000000000000000000000000000..ddbbd80be5b926ab3446cbb10c22d892487956f8 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-23.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-24.png b/docs/zh/docs/desktop/figures/kiran-24.png new file mode 100644 index 0000000000000000000000000000000000000000..54e864dcfd194db4b1672c05d3e60eb6acc605d9 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-24.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-25.png b/docs/zh/docs/desktop/figures/kiran-25.png new file mode 100644 index 0000000000000000000000000000000000000000..f64461cc2610fb82db1eb27a5562c2ab0737dcf4 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-25.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-26.png b/docs/zh/docs/desktop/figures/kiran-26.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcd5335c14d3e241b732b2ee6c2adf3effbe652 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-26.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-27.png b/docs/zh/docs/desktop/figures/kiran-27.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcd5335c14d3e241b732b2ee6c2adf3effbe652 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-27.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-28.png b/docs/zh/docs/desktop/figures/kiran-28.png new file mode 100644 index 0000000000000000000000000000000000000000..1650e93b66f11849ed69a9dacd5c9c5f135fc053 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-28.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-29.png b/docs/zh/docs/desktop/figures/kiran-29.png new file mode 100644 index 0000000000000000000000000000000000000000..5d0b225b54dc5da9053aeb6f4b805e59d8685f7f Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-29.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-3.png b/docs/zh/docs/desktop/figures/kiran-3.png new file mode 100644 index 0000000000000000000000000000000000000000..774ba1ea233c20bf3c7ae661e126e5251aef8662 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-3.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-30.png b/docs/zh/docs/desktop/figures/kiran-30.png new file mode 100644 index 0000000000000000000000000000000000000000..ae7f591fdd3da24fdf30b95785cd07c9959ecb2b Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-30.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-31.png b/docs/zh/docs/desktop/figures/kiran-31.png new file mode 100644 index 0000000000000000000000000000000000000000..fc4127dcd736d084ecabe84b40f165f0b07695b2 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-31.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-32.png b/docs/zh/docs/desktop/figures/kiran-32.png new file mode 100644 index 0000000000000000000000000000000000000000..b02d7b1fbdfa58d63618e99085fd5a0ed517ce4d Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-32.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-33.png b/docs/zh/docs/desktop/figures/kiran-33.png new file mode 100644 index 0000000000000000000000000000000000000000..502f5d272b6200b440b1ce916924e44c987f9922 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-33.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-34.png b/docs/zh/docs/desktop/figures/kiran-34.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ad35752dba85a00024170f88702c3398e0872c Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-34.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-35.png b/docs/zh/docs/desktop/figures/kiran-35.png new file mode 100644 index 0000000000000000000000000000000000000000..6c566afea5f485d79ff7de2ccd3d27a24835f14c Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-35.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-36.png b/docs/zh/docs/desktop/figures/kiran-36.png new file mode 100644 index 0000000000000000000000000000000000000000..842470a94fb6864cdd45f2c9971ec73e7866ea88 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-36.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-37.png b/docs/zh/docs/desktop/figures/kiran-37.png new file mode 100644 index 0000000000000000000000000000000000000000..b827be98850a3626f92ed1cd7b6b76f95d761261 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-37.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-38.png b/docs/zh/docs/desktop/figures/kiran-38.png new file mode 100644 index 0000000000000000000000000000000000000000..f0972490115d0965e8e9006abd2e5e96ac2fc37c Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-38.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-39.png b/docs/zh/docs/desktop/figures/kiran-39.png new file mode 100644 index 0000000000000000000000000000000000000000..f833c66c77737fb7cfbe5b4c4af48b0ba7747cea Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-39.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-4.png b/docs/zh/docs/desktop/figures/kiran-4.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6cf9c1f25266c31ddcb76f093bec664d64bac7 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-4.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-40.png b/docs/zh/docs/desktop/figures/kiran-40.png new file mode 100644 index 0000000000000000000000000000000000000000..da430f32720ef8a032e2c16fe9caabd815f8b62f Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-40.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-41.png b/docs/zh/docs/desktop/figures/kiran-41.png new file mode 100644 index 0000000000000000000000000000000000000000..424f50da38c18c12a235ebb56edd6d02ec1638f0 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-41.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-42.png b/docs/zh/docs/desktop/figures/kiran-42.png new file mode 100644 index 0000000000000000000000000000000000000000..a506b0c4e7fd23c393c34e01b26086dae1ea9c62 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-42.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-43.png b/docs/zh/docs/desktop/figures/kiran-43.png new file mode 100644 index 0000000000000000000000000000000000000000..90ca8be50f4343adcc0cc05b1ae7d0f32efcedc2 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-43.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-44.png b/docs/zh/docs/desktop/figures/kiran-44.png new file mode 100644 index 0000000000000000000000000000000000000000..bc38c38001a8428cf18a05e6cd4a8f46b1d633a2 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-44.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-45.png b/docs/zh/docs/desktop/figures/kiran-45.png new file mode 100644 index 0000000000000000000000000000000000000000..fadb655f342f99c669425480ad48733f1dccb2c9 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-45.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-46.png b/docs/zh/docs/desktop/figures/kiran-46.png new file mode 100644 index 0000000000000000000000000000000000000000..096688c85e47acded83be03a7ff69f9d829d956b Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-46.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-47.png b/docs/zh/docs/desktop/figures/kiran-47.png new file mode 100644 index 0000000000000000000000000000000000000000..3faa55c80eead6bfc9e96f59babcd2100392c2e5 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-47.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-48.png b/docs/zh/docs/desktop/figures/kiran-48.png new file mode 100644 index 0000000000000000000000000000000000000000..1e44996d99006ffe793ae29b55035976942ac504 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-48.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-49.png b/docs/zh/docs/desktop/figures/kiran-49.png new file mode 100644 index 0000000000000000000000000000000000000000..000cc37cb59fecc9ea497726f87231df187baf34 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-49.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-5.png b/docs/zh/docs/desktop/figures/kiran-5.png new file mode 100644 index 0000000000000000000000000000000000000000..a27574bb4793e401750fff28e4568403dc489507 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-5.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-50.png b/docs/zh/docs/desktop/figures/kiran-50.png new file mode 100644 index 0000000000000000000000000000000000000000..900efd80a6db6ab00fee3fa519e963f8f0620ba7 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-50.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-6.png b/docs/zh/docs/desktop/figures/kiran-6.png new file mode 100644 index 0000000000000000000000000000000000000000..42c4f0357dfa11b53ca27a4d0d255b67a0f9c5ae Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-6.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-7.png b/docs/zh/docs/desktop/figures/kiran-7.png new file mode 100644 index 0000000000000000000000000000000000000000..254ef11f36d958f6ef7c70853e5f61032f825463 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-7.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-8.png b/docs/zh/docs/desktop/figures/kiran-8.png new file mode 100644 index 0000000000000000000000000000000000000000..29b5845d2fa94cba92719b8649a5e86c926ea911 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-8.png differ diff --git a/docs/zh/docs/desktop/figures/kiran-9.png b/docs/zh/docs/desktop/figures/kiran-9.png new file mode 100644 index 0000000000000000000000000000000000000000..46bcfdd0e1e88ad0f0ade4a3990c3ac5d66060e7 Binary files /dev/null and b/docs/zh/docs/desktop/figures/kiran-9.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-1.png b/docs/zh/docs/desktop/figures/xfce-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9fe068d7b158bcaa0dbbf9e5b542b74fccc921f7 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-1.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-2.png b/docs/zh/docs/desktop/figures/xfce-2.png new file mode 100644 index 0000000000000000000000000000000000000000..9228ba39c19b583210832f5062d9f3d3826584d1 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-2.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-3.png b/docs/zh/docs/desktop/figures/xfce-3.png new file mode 100644 index 0000000000000000000000000000000000000000..a14a320fbb7f38ce4eaacaa5113ece87ddc87085 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-3.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-4.png b/docs/zh/docs/desktop/figures/xfce-4.png new file mode 100644 index 0000000000000000000000000000000000000000..14196902de432dc86002a89a4481bf183540efb5 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-4.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-5.png b/docs/zh/docs/desktop/figures/xfce-5.png new file mode 100644 index 0000000000000000000000000000000000000000..2019975fa4ffa0c13e77dae8439fe4afcf915cf7 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-5.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-6.png b/docs/zh/docs/desktop/figures/xfce-6.png new file mode 100644 index 0000000000000000000000000000000000000000..ea0ec07b4dca2b22dacb5ba4c06350e821cf6723 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-6.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-7.png b/docs/zh/docs/desktop/figures/xfce-7.png new file mode 100644 index 0000000000000000000000000000000000000000..d43d55fc1887cdf3b5e9644a0cf6a33730de4506 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-7.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-71.png b/docs/zh/docs/desktop/figures/xfce-71.png new file mode 100644 index 0000000000000000000000000000000000000000..79e35dd1096bd6fcba416a07a8a6689ac4ff5df4 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-71.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-8.png b/docs/zh/docs/desktop/figures/xfce-8.png new file mode 100644 index 0000000000000000000000000000000000000000..1550743ad0cad39cd27897d69024927cabab5d19 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-8.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-81.png b/docs/zh/docs/desktop/figures/xfce-81.png new file mode 100644 index 0000000000000000000000000000000000000000..3534bc5c4d7a173d230219412353772b717ccceb Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-81.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-811.png b/docs/zh/docs/desktop/figures/xfce-811.png new file mode 100644 index 0000000000000000000000000000000000000000..5f3f5d7e43296006f15c5e403989d3bfeae29cca Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-811.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-812.png b/docs/zh/docs/desktop/figures/xfce-812.png new file mode 100644 index 0000000000000000000000000000000000000000..d46ac75fd91ef4dda88b60ce514b41dc41ab7ed3 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-812.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-813.png b/docs/zh/docs/desktop/figures/xfce-813.png new file mode 100644 index 0000000000000000000000000000000000000000..20fb89f9d3b64f1e91e1ed90f5f96d8e21cc6d5d Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-813.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-814.png b/docs/zh/docs/desktop/figures/xfce-814.png new file mode 100644 index 0000000000000000000000000000000000000000..5dd242f737115b352898c7cf6564e15503ba1506 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-814.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-82.png b/docs/zh/docs/desktop/figures/xfce-82.png new file mode 100644 index 0000000000000000000000000000000000000000..f2e5a4c1b0223f051d7de988e740493f9ace8872 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-82.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-821.png b/docs/zh/docs/desktop/figures/xfce-821.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c1f3567dccda3d0d49ae445612d5b9ba27e09a Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-821.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-83.png b/docs/zh/docs/desktop/figures/xfce-83.png new file mode 100644 index 0000000000000000000000000000000000000000..32ce47754669aa66080f523f052ee6f87cb651a5 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-83.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-831.png b/docs/zh/docs/desktop/figures/xfce-831.png new file mode 100644 index 0000000000000000000000000000000000000000..2c8b68eba3d60416b52b26612b149221142c0d9a Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-831.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-832.png b/docs/zh/docs/desktop/figures/xfce-832.png new file mode 100644 index 0000000000000000000000000000000000000000..2932aaacf71fa53f1d0c10340df3aebcc016e991 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-832.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-84.png b/docs/zh/docs/desktop/figures/xfce-84.png new file mode 100644 index 0000000000000000000000000000000000000000..e0435c2edf9f68d193cff036215f32c259d378f0 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-84.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-841.png b/docs/zh/docs/desktop/figures/xfce-841.png new file mode 100644 index 0000000000000000000000000000000000000000..c2c06346d4a296bfbe7836139cd943baa1ce6ea5 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-841.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-842.png b/docs/zh/docs/desktop/figures/xfce-842.png new file mode 100644 index 0000000000000000000000000000000000000000..101bf6923e3780617d33dde04b92232ca7f87b42 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-842.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-85.png b/docs/zh/docs/desktop/figures/xfce-85.png new file mode 100644 index 0000000000000000000000000000000000000000..21b39638fe4c83e0da5cdc69ecad9b7a22718a55 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-85.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-851.png b/docs/zh/docs/desktop/figures/xfce-851.png new file mode 100644 index 0000000000000000000000000000000000000000..481d6925b4a3c0da5a008b2b595313997fb7a3cc Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-851.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-86.png b/docs/zh/docs/desktop/figures/xfce-86.png new file mode 100644 index 0000000000000000000000000000000000000000..35e8a99e31e4a49eb64b24cfbab825111e40f709 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-86.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-861.png b/docs/zh/docs/desktop/figures/xfce-861.png new file mode 100644 index 0000000000000000000000000000000000000000..b57b1727b178be264122abd792df558efb1a633d Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-861.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-87.png b/docs/zh/docs/desktop/figures/xfce-87.png new file mode 100644 index 0000000000000000000000000000000000000000..49c8464ad8592e892bcc45cabed5cd95d2f14802 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-87.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-9.png b/docs/zh/docs/desktop/figures/xfce-9.png new file mode 100644 index 0000000000000000000000000000000000000000..f6402b34a929e520c27318fe16eb509d31c17131 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-9.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-91.png b/docs/zh/docs/desktop/figures/xfce-91.png new file mode 100644 index 0000000000000000000000000000000000000000..0cdc4824cb3cc1035f5d04863bb5f3eb4d83292b Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-91.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-911.png b/docs/zh/docs/desktop/figures/xfce-911.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6c564e9a74d187d50ebd3f3c05dcb5d1bd5fa0 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-911.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-92.png b/docs/zh/docs/desktop/figures/xfce-92.png new file mode 100644 index 0000000000000000000000000000000000000000..a79f2473d27759c79ecdddcdee380b357babcac1 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-92.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-921.png b/docs/zh/docs/desktop/figures/xfce-921.png new file mode 100644 index 0000000000000000000000000000000000000000..57ed5964cadcc4f5fdfb0810c7a063ea8c5da3ae Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-921.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-93.png b/docs/zh/docs/desktop/figures/xfce-93.png new file mode 100644 index 0000000000000000000000000000000000000000..62d98b23d682341e2b0ee835561c6f52b7fd70b9 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-93.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-931.png b/docs/zh/docs/desktop/figures/xfce-931.png new file mode 100644 index 0000000000000000000000000000000000000000..c7bf69e5f12ea3d6b386c2521b25eea4d67ddccd Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-931.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-94.png b/docs/zh/docs/desktop/figures/xfce-94.png new file mode 100644 index 0000000000000000000000000000000000000000..09118f9047af97152aae746274d6df4f539b5564 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-94.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-941.png b/docs/zh/docs/desktop/figures/xfce-941.png new file mode 100644 index 0000000000000000000000000000000000000000..40929ec09596763782d7ad20f4d6212310b67186 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-941.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-95.png b/docs/zh/docs/desktop/figures/xfce-95.png new file mode 100644 index 0000000000000000000000000000000000000000..bf970f67c835941961ffcc77632079564c2a9ef5 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-95.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-951.png b/docs/zh/docs/desktop/figures/xfce-951.png new file mode 100644 index 0000000000000000000000000000000000000000..835e819b530e821d733005191e57a4038a542ff8 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-951.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-96.png b/docs/zh/docs/desktop/figures/xfce-96.png new file mode 100644 index 0000000000000000000000000000000000000000..0115dd146cb01ecc61a78c1db55be121ff1e0820 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-96.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-961.png b/docs/zh/docs/desktop/figures/xfce-961.png new file mode 100644 index 0000000000000000000000000000000000000000..ce5b5f45527290c8c17e4b8795207f2e57e18a36 Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-961.png differ diff --git a/docs/zh/docs/desktop/figures/xfce-962.png b/docs/zh/docs/desktop/figures/xfce-962.png new file mode 100644 index 0000000000000000000000000000000000000000..57ed5964cadcc4f5fdfb0810c7a063ea8c5da3ae Binary files /dev/null and b/docs/zh/docs/desktop/figures/xfce-962.png differ diff --git a/docs/zh/docs/desktop/kiran.md b/docs/zh/docs/desktop/kiran.md new file mode 100644 index 0000000000000000000000000000000000000000..a2b1c04d51888d369e301123d6b1cb19044fb086 --- /dev/null +++ b/docs/zh/docs/desktop/kiran.md @@ -0,0 +1,3 @@ +#Kiran 用户指南 + +本节主要描述Kiran桌面环境的安装和使用。 \ No newline at end of file diff --git "a/docs/zh/docs/desktop/kiran\345\256\211\350\243\205\346\211\213\345\206\214.md" "b/docs/zh/docs/desktop/kiran\345\256\211\350\243\205\346\211\213\345\206\214.md" new file mode 100644 index 0000000000000000000000000000000000000000..1c4dfe9daa799ef566aa9cbecb8750368efb23f5 --- /dev/null +++ "b/docs/zh/docs/desktop/kiran\345\256\211\350\243\205\346\211\213\345\206\214.md" @@ -0,0 +1,23 @@ +# 在 openEuler 上安装 Kiran + +## 简介 +kiran桌面是湖南麒麟信安团队以用户和市场需求为导向,研发的一个安全、稳定、高效、易用的桌面环境。kiran可以支持x86和aarch64架构。 + +## 安装方法 +安装时建议使用root用户或者新建一个管理员用户。 + +1.下载 openEuler 20.03 LTS SP3 镜像并安装系统。 + +2.更新软件源: +``` +sudo dnf update +``` +3.安装kiran-desktop +``` +sudo dnf install kiran-desktop +``` +4.设置以图形界面的方式启动,并重启(`reboot`)。 +``` +systemctl set-default graphical.target +``` +重启系统即可通过kiran桌面登录,您可以尽情使用kiran桌面了 diff --git a/docs/zh/docs/desktop/ukui.md b/docs/zh/docs/desktop/ukui.md new file mode 100644 index 0000000000000000000000000000000000000000..d017c9b37f36171667f87a486a578ff12bedfb2c --- /dev/null +++ b/docs/zh/docs/desktop/ukui.md @@ -0,0 +1,3 @@ +# UKUI 用户指南 + +本节主要描述 UKUI 桌面环境的安装和使用。 \ No newline at end of file diff --git a/docs/zh/docs/desktop/xfce.md b/docs/zh/docs/desktop/xfce.md new file mode 100644 index 0000000000000000000000000000000000000000..c83d280ecb73656ad1fd0b854db7a4a71fe5fb22 --- /dev/null +++ b/docs/zh/docs/desktop/xfce.md @@ -0,0 +1,3 @@ +#XFCE 用户指南 + +本节主要描述XFCE桌面环境的安装和使用。 \ No newline at end of file diff --git "a/docs/zh/docs/desktop/\345\256\211\350\243\205DDE.md" "b/docs/zh/docs/desktop/\345\256\211\350\243\205DDE.md" new file mode 100644 index 0000000000000000000000000000000000000000..2dafe2de97a700612938225469ad167555d437ed --- /dev/null +++ "b/docs/zh/docs/desktop/\345\256\211\350\243\205DDE.md" @@ -0,0 +1,31 @@ +# 在 openEuler 上安装 DDE +#### 简介 + +DDE是统信软件团队研发的一款功能强大的桌面环境。包含数十款功能强大的桌面应用,是真正意义上的自主自研桌面产品。 + +#### 安装方法 + +1. [下载](https://openeuler.org/zh/download/)openEuler ISO镜像并安装系统 +2. 更新软件源 +```bash +sudo dnf update +``` +3. 安装DDE +```bash +sudo dnf install dde +``` +4. 设置以图形界面的方式启动 +```bash +sudo systemctl set-default graphical.target +``` +5. 重启 +```bash +sudo reboot +``` +6. 在重启完成后,使用安装过程中创建的用户或openeuler用户登陆桌面 + + > dde桌面无法使用root账号登陆 + > dde内置了openeuler用户,此用户的密码为openeuler + +现在您可以尽情的使用dde桌面了。 + diff --git "a/docs/zh/docs/desktop/\345\256\211\350\243\205UKUI.md" "b/docs/zh/docs/desktop/\345\256\211\350\243\205UKUI.md" new file mode 100644 index 0000000000000000000000000000000000000000..38226d2efb71b1586f2a933cb44fa5f3793c27ef --- /dev/null +++ "b/docs/zh/docs/desktop/\345\256\211\350\243\205UKUI.md" @@ -0,0 +1,22 @@ +# 在 openEuler 上安装 UKUI + +UKUI是麒麟软件团队历经多年打造的一款Linux 桌面,主要基于 GTK 和 QT开发。与其它UI界面相比,UKUI更加注重易用性和敏捷度,各元件相依性小,可以不依赖其它套件而独自运行,给用户带来亲切和高效的使用体验。 + +UKUI支持x86_64和aarch64两种架构。 + +安装时,建议新建一个管理员用户。 + +1.下载 openEuler 20.03 LTS SP3 镜像并安装系统。 +``` +sudo dnf update +``` +2.安装UKUI。 +``` +sudo dnf install ukui +``` +3.在确认正常安装后,如果希望以图形界面的方式启动,请在命令行运行以下代码,并重启(`reboot`)。 +``` +systemctl set-default graphical.target +``` +目前UKUI版本还在不断的更新,最新的安装方法请查阅: +[https://gitee.com/openkylin/ukui-issues](https://gitee.com/openkylin/ukui-issues) diff --git a/docs/zh/docs/secGear/figures/architecture.png b/docs/zh/docs/secGear/figures/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..9f2f15ebaa8404ae10cd770b514b7efa78c7538d Binary files /dev/null and b/docs/zh/docs/secGear/figures/architecture.png differ diff --git a/docs/zh/docs/secGear/secGear.md b/docs/zh/docs/secGear/secGear.md new file mode 100644 index 0000000000000000000000000000000000000000..c2bbd422a3a315005adfed7768acb1f6439a8377 --- /dev/null +++ b/docs/zh/docs/secGear/secGear.md @@ -0,0 +1,3 @@ +# secGear 开发指南 + +本文档介绍如何使用 secGear 统一机密计算编程框架开发应用程序,以及所包含工具的使用方法。 \ No newline at end of file diff --git "a/docs/zh/docs/secGear/\344\275\277\347\224\250secGear\345\267\245\345\205\267.md" "b/docs/zh/docs/secGear/\344\275\277\347\224\250secGear\345\267\245\345\205\267.md" new file mode 100644 index 0000000000000000000000000000000000000000..dcc44c561e785642a885cc40b6abf8df25c97602 --- /dev/null +++ "b/docs/zh/docs/secGear/\344\275\277\347\224\250secGear\345\267\245\345\205\267.md" @@ -0,0 +1,153 @@ +# 使用 secGear 工具 + +secGear 提供了一套工具集,方便用户开发应用程序。本章介绍相关工具及其使用方法。 + +## 代码生成工具 codegener + +### 简介 + +secGear codegener 是基于 intel SGX SDK edger8r 开发的工具,用于解析 EDL 文件生成中间 C 代码,即辅助生成安全测与非安全侧文件互相调用的代码。 + +secGear codegener 定义的 EDL 文件格式与 intel SGX SDK edger8r 相同,但是不支持 Intel 的完整语法定义: + +- 只能在方法中使用 public,不加 public 的函数声明默认为 private +- 不支持从非安全侧到安全侧,以及安全侧到非安全侧的 Switchless Calls +- OCALL(Outside call) 不支持部分调用模式(如 cdecl,stdcall,fastcall) + +EDL 文件语法为类 C 语言语法,这里主要描述与 C 语言的差异部分: + +| 成员 | 含义 | +| ----------------------- | ------------------------------------------------------------ | +| include "my_type.h" | 使用外部包含文件中定义的类型 | +| trusted | 声明 TA(Trusted Application)侧可用安全函数 | +| untrusted | 声明 TA 侧可用不安全函数 | +| return_type | 定义返回值类型 | +| parameter_type | 定义参数类型 | +| [in , size = len] | 对ecall而言,表示该参数需要将数据从非安全侧传入安全侧,ocall反之(指针类型需要使用此参数,其中 size 表示实际使用的 buffer) | +| [out, size = len] | 对ecall而言,表示该参数需要将数据从安全侧传出到非安全侧,ocall反之(指针类型需要使用此参数,其中 size 表示实际使用的 buffer) | + + + +### 使用说明 + +#### **命令格式** + +codegen 的命令格式如下: + +**codegen** < --trustzone | --sgx > [--trusted-dir | **--untrusted-dir** | --trusted | --untrusted ] edlfile + +#### **参数说明** + +各参数含义如下: + +| **参数** | 是否可选 | 参数含义 | +| ---------------------- | -------- | ------------------------------------------------------------ | +| --trustzone \| --sgx | 必选 | 只在当前运行命令目录下生成机密计算架构对应接口函数,不加参数默认生成 SGX 接口函数 | +| --search-path | 可选 | 用于指定被转译的edl文件所依赖文件的搜索路径 | +| --use-prefix | 可选 | 用于给代理函数名称加上前缀,前缀名为edl的文件名 | +| --header-only | 可选 | 指定代码生成工具只生成头文件 | +| --trusted-dir | 可选 | 指定生成安全侧辅助代码所在目录,不指定该参数默认为当前路径 | +| --untrusted-dir | 可选 | 指定生成非安全侧函数辅助代码所在目录 | +| --trusted | 可选 | 生成安全侧辅助代码 | +| --untrusted | 可选 | 生成非安全侧辅助代码 | +| edlfile | 必选 | 需要转译的 EDL 文件,例如 hello.edl | + + + +#### 示例 + +- 转译 *helloworld.edl* ,在 *enclave-directory* 下生成安全侧辅助代码,*host-directory* 下生成非安全辅助代码的命令示例如下: + +```shell +$ codegen --sgx --trusted-dir enclave-directory --untrusted-dir host-directory helloworld.edl +``` + +- 转译 *helloworld.edl* ,在当前目录生成安全侧辅助代码,不生成非安全辅助代码的命令示例如下: + +```shell +$ codegen --sgx --trusted helloworld.edl +``` + +- 转译 *helloworld.edl* ,在当前目录生成非安全侧辅助代码,不生成安全辅助代码的命令示例如下: + +```shell +$ codegen --sgx --untrusted helloworld.edl +``` + +- 转译 *helloworld.edl* ,在 当前目录生成安全侧和非安全侧辅助代码的命令示例如下: + +```shell +$ codegen --sgx helloworld.edl +``` + + + +## 签名工具 sign_tool + +### 简介 + +secGear sign_tool 是一款命令行工具,包含编译工具链和签名工具,用于 enclave 签名。sign_tool 有两种签名形式: + +- 单步签名:仅适用于 debug 调试模式 +- 两步签名:商用场景。需要从第三方平台或者独立的安全设备获取签名私钥,对 envlave 进行签名 + + + +### 使用指导 + +#### **命令格式** + +sign_tool 包含 sign 指令(对 enclave 进行签名)和 digest 指令(生成摘要值)。命令格式为: + +**sign_tool.sh -d** [sign | digest] **-x** **-i** **-s** [OPTIONS] **–o** + +#### **参数说明** + +| sign 指令参数 | 参数含义 | 是否必选 | +| -------------- | -------------------------------------------------------------| -------------------------------------------- | +| -c | 基本的配置文件 | 仅 trustzone 类型必选 | +| -d | 指定签名工具要进行的操作( sign 或者 digest 或者dump) | 单步仅执行sign,两步需要先执行digest,再执行sign;dump用于生成向intel申请白名单时所需的metadata数据 | +| -i | sign/digest,待签名的库文件;dump,签名后的库文件 | 必选 | +| -k | 单步签名所需私钥(pem文件) | 仅 SGX 类型必选 | +| -m | 安全配置文件 mainfest.txt,由用户自行配置 | 仅 trustzone 类型必选 | +| -o | 输出文件 | 必选 | +| -p | 两步签名所需的签名服务器公钥证书(pem文件) | 仅 SGX 类型必选 | +| -s | 两步签名所需的已签名摘要值 | 必选 | +| -x | encalve type(sgx 或 trustzone) | 必选 | +| -h | 打印帮助信息 | 可选 | + + + +#### **单步签名** + +enclave 类型为 SGX,给 test.enclave 签名,输出签名文件 signed.enclave 的示例如下: + +```shell +$ sign_tool.sh –d sign –x sgx –i test.enclave -k private_test.pem –o signed.enclave +``` + + + +#### **两步签名** + +以 SGX 为例,两步签名的操作步骤如下: + +1. 生成摘要值 + + 使用 sign_tool 签名,生成摘要值 digest.data 和临时中间文件 signdata(该文件在生成签名文件时使用,并在签名后自动删除)。参考命令如下: + + ```shell + $ sign_tool.sh –d digest –x sgx –i input –o digest.data + ``` + +2. 将 digest.data 发送至签名机构或平台,并获取对应签名。 + +3. 使用获取的签名生成签名后的动态库 signed.enclave。 + + ```shell + $ sign_tool.sh –d sign –x sgx–i input –p pub.pem –s signature –o signed.enclave + ``` + +说明 +1.在为trustzone类型enclave签名时,建议使用绝对路径来指明文件参数,或使用相对于'signtool_v3.py'文件的 相对路径 +2.为发布 Intel SGX 支持的正式版本应用,需要申请 Intel 白名单。流程请参考 Intel 文档:https://software.intel.com/content/www/us/en/develop/download/overview-on-signing-and-whitelisting-for-intel-software-guard-extensions-enclaves.html diff --git "a/docs/zh/docs/secGear/\345\256\211\350\243\205secGear.md" "b/docs/zh/docs/secGear/\345\256\211\350\243\205secGear.md" new file mode 100644 index 0000000000000000000000000000000000000000..79b42ebe903f90da14f70629e24dc07e2dcb5d86 --- /dev/null +++ "b/docs/zh/docs/secGear/\345\256\211\350\243\205secGear.md" @@ -0,0 +1,35 @@ +# 安装 secGear + + +## 环境要求 + +当前 secGear 仅支持以下软硬件,后续会逐步支持更多的软硬件。 + +- 处理器:当前 secGear 仅支持 x86_64 处理器架构,且该处理器需要支持 Intel SGX (Intel Software Guard Extensions)功能 + +- 操作系统:openEuler 21.03 或更高版本 + + +## 安装指导 + +使用 secGear 机密计算编程框架,需要安装 secGear、secGear-devel 开发包。安装前,请确保已经配置了openEuler yum 源。 + +1. 使用 root 权限,安装 secGear 组件,参考命令如下: + + ```shell + #yum install secGear + #yum install secGear-devel + ``` + + + +2. 查看安装是否成功。参考命令和回显如下表示安装成功。 + + ```shell + #rpm -q secGear + secGear-1.0-1.oe1.x86_64 + #rpm -q secGear-devel + secGear-devel-1.0-1.oe1.x86_64 + ``` + + diff --git "a/docs/zh/docs/secGear/\345\274\200\345\217\221secGear\345\272\224\347\224\250\347\250\213\345\272\217.md" "b/docs/zh/docs/secGear/\345\274\200\345\217\221secGear\345\272\224\347\224\250\347\250\213\345\272\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..b018cd4663d70953b22f5fc097c5066dd6b60fda --- /dev/null +++ "b/docs/zh/docs/secGear/\345\274\200\345\217\221secGear\345\272\224\347\224\250\347\250\213\345\272\217.md" @@ -0,0 +1,444 @@ +# secGear 开发指南 + + +这里给出使用 secGear 开发一个 C 语言程序 helloworld 的例子,方便用户理解使用 secGear 开发应用程序。 + +## 目录结构说明 + +使用 secGear 开发的应用程序,遵循统一的目录结构如下: + +``` +├── helloworld +│ ├── CMakeLists.txt +│ ├── enclave +│ │ ├── CMakeLists.txt +│ │ ├── Enclave.config.xml +│ │ ├── Enclave.lds +│ │ ├── hello.c +│ │ ├── manifest.txt.in +│ │ └── rsa_public_key_cloud.pem +│ ├── helloworld.edl +│ └── host +│ ├── CMakeLists.txt +│ └── main.c +``` + +## 快速入门 + +1. 创建程序工作目录 helloworld,并在 helloworld 目录下新建 enclave 和 host + +2. 编写 EDL(Encalve Definition Language)文件 + + 为了确保开发代码的一致性,secGear 提供了 secgear_urts.h 和 secgear_tstdc.edl 用于屏蔽底层 Intel SGX 和 ARM iTrustee 之间的差异。因此,使用到 C 语言函数库时,EDL 文件默认需要导入 secgear_urts.h 和 secgear_tstdc.edl。helloworld.edl 文件参考如下: + + ```c + enclave { + include "secgear_urts.h" + from "secgear_tstdc.edl" import *; + trusted { + public int get_string([out, size=32]char *buf); + }; + }; + ``` + + 说明:EDL 语法详细信息请参见 Intel SGX 开发指南中对应内容。 + +3. 编写顶层文件 CMakeLists.txt + + 编写顶层文件 CMakeLists.txt,置于 helloworld 工作目录下,用于配置编译时的处理器架构、所需的 EDL 文件等信息。 + + 其中,EDL_FILE 是 EDL 文件,需用户指定,例子中为 helloworld.edl。DPATH 是安全侧加载动态库,配置如例子中所示。 + + ```c + cmake_minimum_required(VERSION 3.12 FATAL_ERROR) + project(HelloWorld C) + set(CMAKE_C_STANDARD 99) + set(CURRENT_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) + set(EDL_FILE helloworld.edl) + set(LOCAL_ROOT_PATH "$ENV{CC_SDK}") + set(SECGEAR_INSTALL_PATH /lib64/) + if(CC_GP) + set(CODETYPE trustzone) + set(CODEGEN codegen_arm64) + execute_process(COMMAND uuidgen -r OUTPUT_VARIABLE UUID) + string(REPLACE "\n" "" UUID ${UUID}) + add_definitions(-DPATH="/data/${UUID}.sec") + endif() + if(CC_SGX) + set(CODETYPE sgx) + set(CODEGEN codegen_x86_64) + add_definitions(-DPATH="${CMAKE_CURRENT_BINARY_DIR}/enclave/enclave.signed.so") + endif() + add_subdirectory(${CURRENT_ROOT_PATH}/enclave) + add_subdirectory(${CURRENT_ROOT_PATH}/host) + ``` + + + +4. 编写非安全侧代码和 CMakeLists.txt + + 4.1 编写 main.c + + 编写非安全侧 main.c,置于 host目录。enclave.h 为 secGear 头文件,helloworld_u.h 为辅助代码生成工具生成的头文件。使用 cc_enclave_create 创建安全区 enclave 上下文,cc_enclave_destroy 销毁安全区上下文。 + get_string 为 EDL 文件中定义 trusted 的安全侧函数,注意这里与 EDL 中定义的 get_string 有差别,多出两个参数 context 为安全区上下文,retval 为 EDL 中get_string 的返回值。 + res 为 get_string 调用成功标志。 + + ```c + #include + #include "enclave.h" + #include "helloworld_u.h" + + #define BUF_LEN 32 + + int main() + { + int retval = 0; + char *path = PATH; + char buf[BUF_LEN]; + cc_enclave_t *context = NULL; + cc_enclave_result_t res; + res = cc_enclave_create(path, AUTO_ENCLAVE_TYPE, 0, SECGEAR_DEBUG_FLAG, NULL, 0, &context); + ... + + res = get_string(context, &retval, buf); + if (res != CC_SUCCESS || retval != (int)CC_SUCCESS) { + printf("Ecall enclave error\n"); + } else { + printf("%s\n", buf); + } + + if (context != NULL) { + res = cc_enclave_destroy(context); + ... + } + return res; + } + ``` + + 4.2 编写非安全侧 CMakeLists.txt + + ```c + # 设置编译环境变量 + #set auto code prefix + set(PREFIX helloworld) + #set host exec name + set(OUTPUT secgear_helloworld) + #set host src code + set(SOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/main.c) + + # 使用代码生成工具生成辅助代码。CODEGEN 和 CODETYPE 变量也在顶层 CMakeLists.txt 中定义。--search-path 用于指定 helloword.edl 中导入依赖的其他 EDL 文件路径 + #set auto code + if(CC_GP) + set(AUTO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_u.h ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_u.c ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_args.h) + add_custom_command(OUTPUT ${AUTO_FILES} + DEPENDS ${CURRENT_ROOT_PATH}/${EDL_FILE} + COMMAND ${CODEGEN} --${CODETYPE} --untrusted ${CURRENT_ROOT_PATH}/${EDL_FILE} --search-path ${LOCAL_ROOT_PATH}/inc/host_inc/gp) + endif() + + if(CC_SGX) + set(AUTO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_u.h ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_u.c) + add_custom_command(OUTPUT ${AUTO_FILES} + DEPENDS ${CURRENT_ROOT_PATH}/${EDL_FILE} + COMMAND ${CODEGEN} --${CODETYPE} --untrusted ${CURRENT_ROOT_PATH}/${EDL_FILE} --search-path ${LOCAL_ROOT_PATH}/inc/host_inc/sgx --search-path ${SGXSDK}/include) + endif() + + # 设置编译选项和链接选项 + set(CMAKE_C_FLAGS "-fstack-protector-all -W -Wall -Werror -Wextra -Werror=array-bounds -D_FORTIFY_SOURCE=2 -O2 -ftrapv -fPIE") + set(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack") + + # 编译链接引用目录 + if(CC_GP) + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") + link_directories(${SECGEAR_INSTALL_PATH}) + endif() + add_executable(${OUTPUT} ${SOURCE_FILE} ${AUTO_FILES}) + target_include_directories(${OUTPUT} PRIVATE + /usr/include/secGear/host_inc + /usr/include/secGear/host_inc/gp + ${CMAKE_CURRENT_BINARY_DIR}) + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0") + target_link_directories(${OUTPUT} PRIVATE ${SECGEAR_INSTALL_PATH}) + endif() + target_link_libraries(${OUTPUT} secgear) + endif() + if(CC_SGX) + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") + link_directories(${SECGEAR_INSTALL_PATH} ${SGXSDK}/lib64) + endif() + set(SGX_MODE HW) + if(${SGX_MODE} STREQUAL HW) + set(Urts_Library_Name sgx_urts) + else() + set(Urts_Library_Name sgx_urts_sim) + endif() + add_executable(${OUTPUT} ${SOURCE_FILE} ${AUTO_FILES} ${LOCAL_ROOT_PATH}/src/host_src/sgx/sgx_log.c) + target_include_directories(${OUTPUT} PRIVATE + /usr/include/secGear/host_inc + /usr/include/secGear/host_inc/sgx + ${CMAKE_CURRENT_BINARY_DIR}) + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0") + target_link_directories(${OUTPUT} PRIVATE ${SECGEAR_INSTALL_PATH} ${SGXSDK}/lib64) + endif() + target_link_libraries(${OUTPUT} secgear ${Urts_Library_Name}) + endif() + + # 指定二进制安装目录 + set_target_properties(${OUTPUT} PROPERTIES SKIP_BUILD_RPATH TRUE) + if(CC_GP) + install(TARGETS ${OUTPUT} + RUNTIME + DESTINATION /vendor/bin/ + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ) + endif() + if(CC_SGX) + install(TARGETS ${OUTPUT} + RUNTIME + DESTINATION ${CMAKE_BINARY_DIR}/bin/ + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ) + endif() + ``` + + + +5. 编写安全侧代码、CMakeLists.txt 和配置文件,放在 enclave 目录 + + 5.1 编写安全侧代码 hello.c + + 编写安全侧代码 hello.c,置于 enclave 目录。其中,helloworld_t.h 为辅助代码生成工具,通过 EDL 文件生成的安全侧头文件。 + + ```c + #include + #include + #include "helloworld_t.h" + + #define TA_HELLO_WORLD "secGear hello world!" + #define BUF_MAX 32 + int get_string(char *buf) + { + strncpy(buf, TA_HELLO_WORLD, strlen(TA_HELLO_WORLD) + 1); + return 0; + } + ``` + + 5.2 编写安全侧 CMakeLists.txt + + ``` + #set auto code prefix + set(PREFIX helloworld) + + #set sign key + set(PEM Enclave_private.pem) + + #set sign tool + set(SIGN_TOOL ${LOCAL_ROOT_PATH}/tools/sign_tool/sign_tool.sh) + + #set enclave src code + set(SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/hello.c) + + #set log level + set(PRINT_LEVEL 3) + add_definitions(-DPRINT_LEVEL=${PRINT_LEVEL}) + + # WHITE_LIS_X 设置 itrustee 白名单,只有这些路径的主机二进制文件可以调用此安全映像,并且最多可以配置 8 个列表路径。WHITE_LIST_OWNER 设置用户,此用户将应用于所有白名单路径。DEVICEPEM 公钥由itrustee 使用,并用于通过动态生成的 aes 密钥加密安全侧的安全动态库。 + if(CC_GP) + #set signed output + set(OUTPUT ${UUID}.sec) + #set itrustee device key + set(DEVICEPEM ${CMAKE_CURRENT_SOURCE_DIR}/rsa_public_key_cloud.pem) + #set whilelist. default: /vendor/bin/teec_hello + set(WHITE_LIST_0 /vendor/bin/helloworld) + set(WHITE_LIST_OWNER root) + set(WHITE_LIST_1 /vendor/bin/secgear_helloworld) + set(WHITELIST WHITE_LIST_0 WHITE_LIST_1) + + set(AUTO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_t.h ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_t.c ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_args.h) + add_custom_command(OUTPUT ${AUTO_FILES} + DEPENDS ${CURRENT_ROOT_PATH}/${EDL_FILE} + COMMAND ${CODEGEN} --${CODETYPE} --trusted ${CURRENT_ROOT_PATH}/${EDL_FILE} --search-path ${LOCAL_ROOT_PATH}/inc/host_inc/gp) + endif() + + # SGX 安全侧动态库签名 + if(CC_SGX) + set(OUTPUT enclave.signed.so) + set(AUTO_FILES ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_t.h ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX}_t.c) + add_custom_command(OUTPUT ${AUTO_FILES} + DEPENDS ${CURRENT_ROOT_PATH}/${EDL_FILE} + COMMAND ${CODEGEN} --${CODETYPE} --trusted ${CURRENT_ROOT_PATH}/${EDL_FILE} --search-path ${LOCAL_ROOT_PATH}/inc/host_inc/sgx --search-path ${SGXSDK}/include) + endif() + + # 设置编译选项 + set(COMMON_C_FLAGS "-W -Wall -Werror -fno-short-enums -fno-omit-frame-pointer -fstack-protector \ + -Wstack-protector --param ssp-buffer-size=4 -frecord-gcc-switches -Wextra -nostdinc -nodefaultlibs \ + -fno-peephole -fno-peephole2 -Wno-main -Wno-error=unused-parameter \ + -Wno-error=unused-but-set-variable -Wno-error=format-truncation=") + + set(COMMON_C_LINK_FLAGS "-Wl,-z,now -Wl,-z,relro -Wl,-z,noexecstack -Wl,-nostdlib -nodefaultlibs -nostartfiles") + + # itrustee 需生成 manifest.txt。指定 itrustee 编译选项和头文件、链接文件的搜索路径 + if(CC_GP) + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/manifest.txt.in" "${CMAKE_CURRENT_SOURCE_DIR}/manifest.txt") + + set(CMAKE_C_FLAGS "${COMMON_C_FLAGS} -march=armv8-a ") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -s -fPIC") + set(CMAKE_SHARED_LINKER_FLAGS "${COMMON_C_LINK_FLAGS} -Wl,-s") + + set(ITRUSTEE_TEEDIR ${iTrusteeSDK}/) + set(ITRUSTEE_LIBC ${iTrusteeSDK}/thirdparty/open_source/musl/libc) + + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") + link_directories(${CMAKE_BINARY_DIR}/lib/) + endif() + + add_library(${PREFIX} SHARED ${SOURCE_FILES} ${AUTO_FILES}) + + target_include_directories( ${PREFIX} PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + ${LOCAL_ROOT_PATH}/inc/host_inc + ${LOCAL_ROOT_PATH}/inc/host_inc/gp + ${LOCAL_ROOT_PATH}/inc/enclave_inc + ${LOCAL_ROOT_PATH}/inc/enclave_inc/gp + ${ITRUSTEE_TEEDIR}/include/TA + ${ITRUSTEE_TEEDIR}/include/TA/huawei_ext + ${ITRUSTEE_LIBC}/arch/aarch64 + ${ITRUSTEE_LIBC}/ + ${ITRUSTEE_LIBC}/arch/arm/bits + ${ITRUSTEE_LIBC}/arch/generic + ${ITRUSTEE_LIBC}/arch/arm + ${LOCAL_ROOT_PATH}/inc/enclave_inc/gp/itrustee) + + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0") + target_link_directories(${PREFIX} PRIVATE + ${CMAKE_BINARY_DIR}/lib/) + endif() + + foreach(WHITE_LIST ${WHITELIST}) + add_definitions(-D${WHITE_LIST}="${${WHITE_LIST}}") + endforeach(WHITE_LIST) + add_definitions(-DWHITE_LIST_OWNER="${WHITE_LIST_OWNER}") + + target_link_libraries(${PREFIX} -lsecgear_tee) + + add_custom_command(TARGET ${PREFIX} + POST_BUILD + COMMAND bash ${SIGN_TOOL} -d sign -x trustzone -i ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${PREFIX}.so -m ${CMAKE_CURRENT_SOURCE_DIR}/manifest.txt + -e ${DEVICEPEM} -o ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${OUTPUT}) + + install(FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${OUTPUT} + DESTINATION /data + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + + endif() + + if(CC_SGX) + set(SGX_DIR ${SGXSDK}) + set(CMAKE_C_FLAGS "${COMMON_C_FLAGS} -m64 -fvisibility=hidden") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -s") + set(LINK_LIBRARY_PATH ${SGX_DIR}/lib64) + + if(CC_SIM) + set(Trts_Library_Name sgx_trts_sim) + set(Service_Library_Name sgx_tservice_sim) + else() + set(Trts_Library_Name sgx_trts) + set(Service_Library_Name sgx_tservice) + endif() + + set(Crypto_Library_Name sgx_tcrypto) + + set(CMAKE_SHARED_LINKER_FLAGS "${COMMON_C_LINK_FLAGS} -Wl,-z,defs -Wl,-pie -Bstatic -Bsymbolic -eenclave_entry \ + -Wl,--export-dynamic -Wl,--defsym,__ImageBase=0 -Wl,--gc-sections -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/Enclave.lds") + + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") + link_directories(${LINK_LIBRARY_PATH}) + endif() + + add_library(${PREFIX} SHARED ${SOURCE_FILES} ${AUTO_FILES}) + + target_include_directories(${PREFIX} PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} + ${SGX_DIR}/include/tlibc + ${SGX_DIR}/include/libcxx + ${SGX_DIR}/include + ${LOCAL_ROOT_PATH}/inc/host_inc + ${LOCAL_ROOT_PATH}/inc/host_inc/sgx) + + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0") + target_link_directories(${PREFIX} PRIVATE + ${LINK_LIBRARY_PATH}) + endif() + + target_link_libraries(${PREFIX} -Wl,--whole-archive ${Trts_Library_Name} -Wl,--no-whole-archive + -Wl,--start-group -lsgx_tstdc -lsgx_tcxx -l${Crypto_Library_Name} -l${Service_Library_Name} -Wl,--end-group) + add_custom_command(TARGET ${PREFIX} + POST_BUILD + COMMAND umask 0177 + COMMAND openssl genrsa -3 -out ${PEM} 3072 + COMMAND bash ${SIGN_TOOL} -d sign -x sgx -i ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${PREFIX}.so -k ${PEM} -o ${OUTPUT} -c ${CMAKE_CURRENT_SOURCE_DIR}/Enclave.config.xml) + endif() + + set_target_properties(${PREFIX} PROPERTIES SKIP_BUILD_RPATH TRUE) + ``` + + + +6. 编写配置文件 + + 针对使用 Intel SGX 的 x86_64 处理器架构,请编写 Enclave.config.xml 和 Enclave.lds 文件,置于安全侧 enclave 目录。文件的具体配置格式请参见 SGX 官方文档。 + + Enclave.config.xml 参考: + + ```c + + 0 + 0 + 0x40000 + 0x100000 + 10 + 1 + + 0 + 0 + 0xFFFFFFFF + + ``` + + Enclave.lds 参考: + + ```c + enclave.so + { + global: + g_global_data_sim; + g_global_data; + enclave_entry; + g_peak_heap_used; + local: + *; + }; + ``` + + 将设备公钥文件 rsa_public_key_cloud.pem 复制到 enclave 目录。此处的设备公钥用于使用临时生成的 aes 密钥对安全区动态库进行加密。 + + 说明:rsa_public_key_cloud.pem 文件下载路径:https://gitee.com/openeuler/secGear/blob/master/examples/helloworld/enclave/rsa_public_key_cloud.pem + + + +7. 编译程序 + + SGX 版本编译命令如下,编译后将生成可执行程序 secgear_helloworld + + ```shell + cmake -DCMAKE_BUILD_TYPE=debug -DCC_SGX=ON -DSGXSDK="PATH" ./ && make + ``` + + + +8. 执行程序 + + ```c + $ ./secgear_helloworld + Create secgear enclave + secgear hello world! + ``` + + diff --git "a/docs/zh/docs/secGear/\346\216\245\345\217\243\345\217\202\350\200\203.md" "b/docs/zh/docs/secGear/\346\216\245\345\217\243\345\217\202\350\200\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..ac6f44e77503985d1d7f7189697032d202ec0fb4 --- /dev/null +++ "b/docs/zh/docs/secGear/\346\216\245\345\217\243\345\217\202\350\200\203.md" @@ -0,0 +1,292 @@ +# 接口说明 + +secGear 机密计算统一编程框架分为安全侧和非安全侧,这里给出用户开发应用程序所需的接口。除这些接口外,安全侧还继承了 ARM TrustZone 和 Intel SGX 的开源 POSIC 接口。 + +## cc_enclave_create + +创建 enclave 接口 + +**功能**: + +初始化接口,函数根据不同 type,调用不同的 TEE 创建函数,完成不同 TEE 方案关于 enclave 上下文初始化,由非安全侧调用 + +**函数声明:** + +cc_enclave_result_t cc_enclave_create(const char* path, enclave_type_t type, uint32_t version,uint32_t flags,const enclave_features_t* features,uint32_t features_count, + cc_enclave_t ** enclave); + +**参数:** + +- Path:入参,要加载的 enclave 路径 +- Type:入参,用来指定 TEE 解决方案, 如 SGX_ENCLAVE_TYPE、GP_ENCLAVE_TYPE、AUTO_ENCLAVE_TYPE +- version:入参,指定的 enclave engine 的版本,目前只有一个版本,取值为 0。 +- Flags:入参,标志位,说明这个 enclave 运行状态,例如调试状态 SECGEAR_DEBUG_FLAG、模拟状态 SECGEAR_SIMULATE_FLAG(目前不支持) +- features:入参,用于设置一些关于 enclave 支持的特性,例如 SGX 的 PCL、 switchless 等。目前不支持,请设置为 NULL +- features_count:入参,入参 features 特性结构体的数量。目前不支持,请设置为 0 +- enclave:出参,创建的 enclave 上下文 + +**返回值:** + +- CE_SUCCESS:认证信息验证成功 +- CE_ERROR_INVALID_PARAMETER:输入参数有误 +- CE_ERROR_OUT_OF_MEMORY:无可用内存 +- CC_FAIL:通用错误 +- CC_ERROR_UNEXPECTED:不可预期错误 +- CC_ERROR_ENCLAVE_MAXIMUM:单个 app 创建的 enclave 数量达到最 +- CC_ERROR_INVALID_PATH:安全二进制路径无效 +- CC_ERROR_NO_FIND_REGFUNC:enclave 引擎搜索失败 + + + +## cc_enclave_destroy + +销毁 enclave 接口 + +**功能**: + +调用不同 TEE 的退出函数,释放已经创建的 enclave 实体,由非安全侧调用 + +**函数声明:** + +cc_enclave_result_t cc_enclave_destroy (cc_enclave_t ** enclave); + +**参数:** + +- enclave:入参,已经创建 enclave 的上下文 + +**返回值:** + +- CE_SUCCESS:认证信息验证成功 +- CE_ERROR_INVALID_PARAMETER:输入参数有误 +- CE_ERROR_OUT_OF_MEMORY:无可用内存 +- CC_ERROR_NO_FIND_UNREGFUNC:enclave引擎搜索失败 +- CC_FAIL:通用错误 +- CC_ERROR_UNEXPECTED:不可预期错误 + + + +## cc_enclave_generate_random + +随机数生成 + +**功能**: + +用于在安全侧生成密码安全的随机数 + +**函数声明:** + +cc_enclave_result_t cc_enclave_generate_random(void *buffer, size_t size) + +**参数:** + +- *buffer:入参,生成随机数的缓冲区 +- size:入参,缓冲区的长度 + +**返回值:** + +- CE_OK:认证信息验证成功 +- CE_ERROR_INVALID_PARAMETER:输入参数有误 +- CE_ERROR_OUT_OF_MEMORY:无可用内存 + + + +## cc_enclave_seal_data + +数据持久化 + +**功能**: + +用于加密 enclave 内部数据,使数据可以在 enclave 外部持久化存储,由安全侧调用 + +**函数声明:** + +cc_enclave_result_t cc_enclave_seal_data(uint8_t *seal_data, uint32_t seal_data_len, + +​ cc_enclave_sealed_data_t *sealed_data, uint32_t sealed_data_len, + +​ uint8_t *additional_text, uint32_t additional_text_len) + +**参数:** + +- seal_data:入参,需要加密的数据 +- seal_data_len:入参,需要加密数据的长度 +- sealed_data:出参,加密后的数据处理句柄 +- sealed_data_len:出参,加密后的密文长度 +- additional_text:入参,加密所需的附加消息 +- additional_text_len:入参,附加消息长度 + +**返回值:** + +- CE_SUCCESS:数据加密成功 +- CE_ERROR_INVALID_PARAMETER:输入参数有误 +- CE_ERROR_OUT_OF_MEMORY:无可用内存 +- CC_ERROR_SHORT_BUFFER:传入的buffer过小 +- CC_ERROR_GENERIC:底层硬件通用错误 + +## cc_enclave_unseal_data + +数据解密 + +**功能**: + +用于解密 enclave 密封过的数据,用于将外部持久化数据重新导回 enclave 环境中,由安全侧调用 + +**函数声明:** + +cc_enclave_result_t cc_enclave_unseal_data(cc_enclave_sealed_data_t *sealed_data, + + uint8_t *decrypted_data, uint32_t *decrypted_data_len, + + uint8_t *additional_text, uint32_t *additional_text_len) + +**参数:** + +- sealed_data:入参,已加密数据的句柄 +- decrypted_data:出参,解密之后的密文数据buffer +- decrypted_data_len:出参,解密后密文长度 +- additional_text:出参,解密后附加消息 +- additional_text_len:出参,解密后附加消息长度 + +**返回值:** + +- CE_SUCCESS:数据解密成功 +- CE_ERROR_INVALID_PARAMETER:输入参数有误 +- CE_ERROR_OUT_OF_MEMORY:无可用内存 +- CC_ERROR_SHORT_BUFFER:传入的buffer过小 +- CC_ERROR_GENERIC:底层硬件通用错误 + +## cc_enclave_get_sealed_data_size + +获取加密数据的大小 + +**功能**: + +用于 sealed_data 数据的大小,主要用于分配解密后的数据空间,由安全侧与非安全侧皆可调用 + +**函数声明:** + +uint32_t cc_enclave_get_sealed_data_size(const uint32_t add_len, const uint32_t seal_data_len); + +**参数:** + +- add_len:入参,附加消息长度 +- sealed_data_len:入参,加密信息的长度 + +**返回值:** + +- UINT32_MAX:参数错误或函数执行错误 +- others:函数执行成功,返回值为当前 sealed_data 结构的大小 + +## cc_enclave_get_encrypted_text_size + +获取加密消息的长度 + +**功能**: + +获取加密数数据中加密消息的长度,由安全侧调用 + +**函数声明:** + +uint32_t cc_enclave_get_encrypted_text_size(const cc_enclave_sealed_data_t *sealed_data); + +**参数:** + +- sealed_data:入参,加密数据的句柄 + +**返回值:** + +- UINT32_MAX:参数错误或函数执行错误 +- others:函数执行成功,返回值为当前 sealed_data 中加密消息的长度 + + + +## cc_enclave_get_add_text_size + +获取附加消息的长度 + +**功能**: + +获取加密数数据中附加消息的长度,由安全侧调用 + +**函数声明:** + +uint32_t cc_enclave_get_add_text_size(const cc_enclave_sealed_data_t *sealed_data); + +**参数:** + +- sealed_data:入参,加密数据的句柄 + +**返回值:** + +- UINT32_MAX:参数错误或函数执行错误 +- others:函数执行成功,返回值为当前sealed_data中附加消息的长度 + + + +## cc_enclave_memory_in_enclave + +安全内存检查。当前,本接口只支持Intel SGX调用,不支持iTrustee调用,在iTrustee架构下,用户的安全进程 +无法对非安全侧内存地址进行写入,因此用户编写安全程序时不需要调用此接口进行检查。 + +**功能**: + +用于校验指定长度的内存地址是否都属于安全侧内存,由安全侧调用 + +**函数声明:** + +bool cc_enclave_memory_in_enclave(const void *addr, size_t size) + +**参数:** + +- *addr:入参,指定需要校验的内存地址 +- size:入参,自内存地址起需要校验的长度 + +**返回值:** + +- true:指定区域内存都在安全区范围内 +- false:指定区域的内存有部分或者全部不在安全范围内 + +## cc_enclave_memory_out_enclave + +安全内存检查。当前,本接口只支持Intel SGX调用,不支持iTrustee调用,在iTrustee架构下,用户的安全进程 +无法对非安全侧内存地址进行写入,因此用户编写安全程序时不需要调用此接口进行检查。 + +**功能**: + +用于校验指定长度的内存地址是否都属于非安全侧内存,由安全侧调用 + +**函数声明:** + +bool cc_enclave_memory_out_enclave(const void *addr, size_t size) + +**参数:** + +- *addr:入参,指定需要校验的内存地址 +- size:入参,自内存地址起需要校验的长度 + +**返回值:** + +- true:指定区域内存都在非安全区 +- false:指定区域的内存有部分或者全部在安全区 + +## PrintInfo + +消息打印 + +**功能**: + +用于安全侧日志的打印,本接口输出安全侧用户想打印的信息,输入日志保存在非安全侧/var/log/secgear/secgear.log中 + +**函数声明:** + +void PrintInfo(int level, const char *fmt, ...); + +**参数:** + +- level:入参,日志打印等级,可选项为PRINT_ERROR, PRINT_WARNING, PRINT_STRACE, PRINT_DEBUG +- fmt: 入参,需要输出的字符创 + + +**返回值:** + +- 无 diff --git "a/docs/zh/docs/secGear/\350\256\244\350\257\206secGear.md" "b/docs/zh/docs/secGear/\350\256\244\350\257\206secGear.md" new file mode 100644 index 0000000000000000000000000000000000000000..4a56acb0f2de80efe486ba06e21a137f7d78f4dd --- /dev/null +++ "b/docs/zh/docs/secGear/\350\256\244\350\257\206secGear.md" @@ -0,0 +1,19 @@ +### 概述 + +随着云计算的快速发展,越来越多的企业把计算业务部署到云上,对数据的保护变得更加复杂,同时,数据泄露是云计算面临的重大安全问题。因此,如何保障用户数据在云上的安全变得尤为重要。当前对数据的保护通常注重离线存储安全和网络传输安全,缺乏对数据运行时的安全防护。为了保障云端数据运行时的安全性,方便开发者开发云上应用,openEuler 推出了 secGear 。 + +secGear 是统一机密计算编程框架,提供了易用的开发套件,包括安全区(使用 secGear 编程会将系统区分为安全区域和非安全区域) 生命周期管理、安全开发库、代码辅助生成工具、代码构建与签名工具、安全能力和安全服务组件实现方案。可用于信任环、密态数据库、多方计算、AI安全保护等多种场景。 + +本文档介绍 secGear 的使用方法,以便指导开发者基于 secGear 开发应用程序,从而更好地保护数据。 + +### 架构介绍 + +![](./figures/architecture.png) + +如图所示,secGear 主题包含三个层级(当前仅开源基础层 Base Layer,服务层和中间件层逐步开源): + +- 服务层:提供完整的运行在安全侧的安全服务。 + +- 中间件层:提供一套协议接口,满足用户基本安全应用。 + +- 基础层:提供丰富的 enclave 开发接口或工具,并且在安全侧支持 C POSIX APIs 和标准 OpenSSL 接口,用户基于这些接口可以自由开发安全应用程序 。 \ No newline at end of file diff --git a/docs/zh/docs/thirdparty_migration/OpenStack-queens.md b/docs/zh/docs/thirdparty_migration/OpenStack-queens.md new file mode 100644 index 0000000000000000000000000000000000000000..321e2a31269a4d82ffbcad8094768213e46cd495 --- /dev/null +++ b/docs/zh/docs/thirdparty_migration/OpenStack-queens.md @@ -0,0 +1,2033 @@ +# OpenStack-Queens 部署指南 + + + +- [OpenStack-Queens 部署指南](#openstack-queens-部署指南) + - [OpenStack 简介](#openstack-简介) + - [约定](#约定) + - [软件包多版本约定](#软件包多版本约定) + - [准备环境](#准备环境) + - [环境配置](#环境配置) + - [安装 SQL DataBase](#安装-sql-database) + - [安装 RabbitMQ](#安装-rabbitmq) + - [安装 Memcached](#安装-memcached) + - [安装 OpenStack](#安装-openstack) + - [Keystone 安装](#keystone-安装) + - [Glance 安装](#glance-安装) + - [Nova 安装](#nova-安装) + - [Neutron 安装](#neutron-安装) + - [Cinder 安装](#cinder-安装) + - [horizon 安装](#horizon-安装) + - [Tempest 安装](#tempest-安装) + - [Ironic 安装](#ironic-安装) + - [Kolla 安装](#kolla-安装) + - [Trove 安装](#trove-安装) + - [Rally 安装](#rally-安装) + + + +## OpenStack 简介 + +OpenStack 是一个社区,也是一个项目。它提供了一个部署云的操作平台或工具集,为组织提供可扩展的、灵活的云计算。 + +作为一个开源的云计算管理平台,OpenStack 由 nova、cinder、neutron、glance、keystone、horizon 等几个主要的组件组合起来完成具体工作。OpenStack 支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack 通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供 API 进行集成。 + +openEuler 20.03-LTS-SP3 版本官方认证的第三方 oepkg yum 源已经支持 Openstack-Queens 版本,用户可以配置好 oepkg yum 源后根据此文档进行 OpenStack 部署。 + +## 约定 + +Openstack 支持多种形态部署,此文档支持`ALL in One`以及`Distributed`两种部署方式,按照如下方式约定: + +`ALL in One`模式: + +```text +忽略所有可能的后缀 +``` + +`Distributed`模式: + +```text +以 `(CTL)` 为后缀表示此条配置或者命令仅适用`控制节点` +以 `(CPT)` 为后缀表示此条配置或者命令仅适用`计算节点` +除此之外表示此条配置或者命令同时适用`控制节点`和`计算节点` +``` + +***注意*** + +涉及到以上约定的服务如下: + +- Cinder +- Nova +- Neutron + +## 软件包多版本约定 + +openEuler 20.03-LTS-SP3 版本支持 OpenStack 的 Queens、Rocky 和 Train 版本,有些软件包存在多版本,对于OpenStack Queens 和 Rocky 版本的安装,这些多版本软件包的安装我们需要指出对应版本号, +以 OpenStack Nova 为例,可以使用 `yum list --showduplicates |grep openstack-nova` 列出对应nova服务的版本,这里我们选择对应 Queens 版本,以下安装文档均以 ‘$QueensVer’ 来表示。 + +涉及的软件包: + +openstack-keystone 及其子包 + +openstack-glance 及其子包 + +openstack-nova 及其子包 + +openstack-neutron 及其子包 + +openstack-cinder 及其子包 + +openstack-dashboard 及其子包 + +openstack-ironic 及其子包 + +openstack-tempest + +openstack-kolla + +openstack-kolla-ansible + +openstack-trove 及其子包 + +novnc + +diskimage-builder + +## 准备环境 + +### 环境配置 + +1. 配置 20.03-LTS-SP3 官方认证的第三方源 oepkg + + ```shell + cat << EOF >> /etc/yum.repos.d/OpenStack_Queens.repo + [openstack_queens] + name=OpenStack_Queens + baseurl=https://repo.oepkgs.net/openEuler/rpm/openEuler-20.03-LTS-SP3/budding-openeuler/openstack/queens/$basearch/ + gpgcheck=0 + enabled=1 + EOF + + yum clean all && yum makecache + ``` + +2. 修改主机名以及映射 + + 设置各个节点的主机名 + + ```shell + hostnamectl set-hostname controller (CTL) + hostnamectl set-hostname compute (CPT) + ``` + + 假设controller节点的IP是`10.0.0.11`,compute节点的IP是`10.0.0.12`(如果存在的话),则于`/etc/hosts`新增如下: + + ```shell + 10.0.0.11 controller + 10.0.0.12 compute + ``` + +### 安装 SQL DataBase + +1. 执行如下命令,安装软件包。 + + ```shell + yum install mariadb mariadb-server python2-PyMySQL + ``` + +2. 执行如下命令,创建并编辑 `/etc/my.cnf.d/openstack.cnf` 文件。 + + ```shell + vim /etc/my.cnf.d/openstack.cnf + + [mysqld] + bind-address = 10.0.0.11 + default-storage-engine = innodb + innodb_file_per_table = on + max_connections = 4096 + collation-server = utf8_general_ci + character-set-server = utf8 + ``` + + ***注意*** + + **其中 `bind-address` 设置为控制节点的管理IP地址。** + +3. 启动 DataBase 服务,并为其配置开机自启动: + + ```shell + systemctl enable mariadb.service + systemctl start mariadb.service + ``` + +4. 配置DataBase的默认密码(可选) + + ```shell + mysql_secure_installation + ``` + + ***注意*** + + **根据提示进行即可** + +### 安装 RabbitMQ + +1. 执行如下命令,安装软件包。 + + ```shell + yum install rabbitmq-server + ``` + +2. 启动 RabbitMQ 服务,并为其配置开机自启动。 + + ```shell + systemctl enable rabbitmq-server.service + systemctl start rabbitmq-server.service + ``` + +3. 添加 OpenStack用户。 + + ```shell + rabbitmqctl add_user openstack RABBIT_PASS + ``` + + ***注意*** + + **替换 `RABBIT_PASS`,为 OpenStack 用户设置密码** + +4. 设置openstack用户权限,允许进行配置、写、读: + + ```shell + rabbitmqctl set_permissions openstack ".*" ".*" ".*" + ``` + +### 安装 Memcached + +1. 执行如下命令,安装依赖软件包。 + + ```shell + yum install memcached python2-memcached + ``` + +2. 编辑 `/etc/sysconfig/memcached` 文件。 + + ```shell + vim /etc/sysconfig/memcached + + OPTIONS="-l 127.0.0.1,::1,controller" + ``` + +3. 执行如下命令,启动 Memcached 服务,并为其配置开机启动。 + + ```shell + systemctl enable memcached.service + systemctl start memcached.service + ``` + 服务启动后,可以通过命令`memcached-tool controller stats`确保启动正常,服务可用,其中可以将`controller`替换为控制节点的管理IP地址。 + +## 安装 OpenStack + +### Keystone 安装 + +1. 创建 keystone 数据库并授权。 + + ``` sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE keystone; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ + IDENTIFIED BY 'KEYSTONE_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ + IDENTIFIED BY 'KEYSTONE_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***注意*** + + **替换 `KEYSTONE_DBPASS`,为 Keystone 数据库设置密码** + +2. 安装软件包。 + + ```shell + yum install openstack-keystone-$QueensVer httpd python2-mod_wsgi + ``` + +3. 配置keystone相关配置 + + ```shell + vim /etc/keystone/keystone.conf + + [database] + connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone + + [token] + provider = fernet + ``` + + ***解释*** + + [database]部分,配置数据库入口 + + [token]部分,配置token provider + + ***注意:*** + + **替换 `KEYSTONE_DBPASS` 为 Keystone 数据库的密码** + +4. 同步数据库。 + + ```shell + su -s /bin/sh -c "keystone-manage db_sync" keystone + ``` + +5. 初始化Fernet密钥仓库。 + + ```shell + keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone + keystone-manage credential_setup --keystone-user keystone --keystone-group keystone + ``` + +6. 启动服务。 + + ```shell + keystone-manage bootstrap --bootstrap-password ADMIN_PASS \ + --bootstrap-admin-url http://controller:5000/v3/ \ + --bootstrap-internal-url http://controller:5000/v3/ \ + --bootstrap-public-url http://controller:5000/v3/ \ + --bootstrap-region-id RegionOne + ``` + + ***注意*** + + **替换 `ADMIN_PASS`,为 admin 用户设置密码** + +7. 配置Apache HTTP server + + ```shell + vim /etc/httpd/conf/httpd.conf + + ServerName controller + ``` + + ```shell + ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ + ``` + + ***解释*** + + 配置 `ServerName` 项引用控制节点 + + ***注意*** + **如果 `ServerName` 项不存在则需要创建** + +8. 启动Apache HTTP服务。 + + ```shell + systemctl enable httpd.service + systemctl start httpd.service + ``` + +9. 创建环境变量配置。 + + ```shell + cat << EOF >> ~/.admin-openrc + export OS_PROJECT_DOMAIN_NAME=Default + export OS_USER_DOMAIN_NAME=Default + export OS_PROJECT_NAME=admin + export OS_USERNAME=admin + export OS_PASSWORD=ADMIN_PASS + export OS_AUTH_URL=http://controller:5000/v3 + export OS_IDENTITY_API_VERSION=3 + export OS_IMAGE_API_VERSION=2 + EOF + ``` + + ***注意*** + + **替换 `ADMIN_PASS` 为 admin 用户的密码** + +10. 依次创建domain, projects, users, roles,需要先安装好python2-openstackclient: + + ``` + yum install python2-openstackclient + ``` + + 导入环境变量 + + ```shell + source ~/.admin-openrc + ``` + + 创建project `service`,其中 domain `default` 在 keystone-manage bootstrap 时已创建 + + ```shell + openstack domain create --description "An Example Domain" example + ``` + + ```shell + openstack project create --domain default --description "Service Project" service + ``` + + 创建(non-admin)project `myproject`,user `myuser` 和 role `myrole`,为 `myproject` 和 `myuser` 添加角色`myrole` + + ```shell + openstack project create --domain default --description "Demo Project" myproject + openstack user create --domain default --password-prompt myuser + openstack role create myrole + openstack role add --project myproject --user myuser myrole + ``` + +11. 验证 + + 取消临时环境变量OS_AUTH_URL和OS_PASSWORD: + + ```shell + source ~/.admin-openrc + unset OS_AUTH_URL OS_PASSWORD + ``` + + 为admin用户请求token: + + ```shell + openstack --os-auth-url http://controller:5000/v3 \ + --os-project-domain-name Default --os-user-domain-name Default \ + --os-project-name admin --os-username admin token issue + ``` + + 为myuser用户请求token: + + ```shell + openstack --os-auth-url http://controller:5000/v3 \ + --os-project-domain-name Default --os-user-domain-name Default \ + --os-project-name myproject --os-username myuser token issue + ``` + +### Glance 安装 + +1. 创建数据库、服务凭证和 API 端点 + + 创建数据库: + + ```sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE glance; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \ + IDENTIFIED BY 'GLANCE_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \ + IDENTIFIED BY 'GLANCE_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***注意:*** + + **替换 `GLANCE_DBPASS`,为 glance 数据库设置密码** + + 创建服务凭证 + + ```shell + source ~/.admin-openrc + + openstack user create --domain default --password-prompt glance + openstack role add --project service --user glance admin + openstack service create --name glance --description "OpenStack Image" image + ``` + + 创建镜像服务API端点: + + ```shell + openstack endpoint create --region RegionOne image public http://controller:9292 + openstack endpoint create --region RegionOne image internal http://controller:9292 + openstack endpoint create --region RegionOne image admin http://controller:9292 + ``` + +2. 安装软件包 + + ```shell + yum install openstack-glance-$QueensVer + ``` + +3. 配置glance相关配置: + + ```shell + vim /etc/glance/glance-api.conf + + [database] + connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = glance + password = GLANCE_PASS + + [paste_deploy] + flavor = keystone + + [glance_store] + stores = file,http + default_store = file + filesystem_store_datadir = /var/lib/glance/images/ + ``` + + ```shell + vim /etc/glance/glance-registry.conf + + [database] + connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = glance + password = GLANCE_PASS + + [paste_deploy] + flavor = keystone + + [glance_store] + stores = file,http + default_store = file + filesystem_store_datadir = /var/lib/glance/images/ + ``` + + ***解释:*** + + [database]部分,配置数据库入口 + + [keystone_authtoken] [paste_deploy]部分,配置身份认证服务入口 + + [glance_store]部分,配置本地文件系统存储和镜像文件的位置 + + ***注意*** + + **替换 `GLANCE_DBPASS` 为 glance 数据库的密码** + + **替换 `GLANCE_PASS` 为 glance 用户的密码** + +4. 同步数据库: + + ```shell + su -s /bin/sh -c "glance-manage db_sync" glance + ``` + +5. 启动服务: + + ```shell + systemctl enable openstack-glance-api.service openstack-glance-registry.service + systemctl start openstack-glance-api.service openstack-glance-registry.service + ``` + +6. 验证 + + 下载镜像 + + ```shell + source ~/.admin-openrc + + wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img + ``` + + ***注意*** + + **如果您使用的环境是鲲鹏架构,请下载arm64版本的镜像** + + 向Image服务上传镜像: + + ```shell + openstack image create --disk-format qcow2 --container-format bare \ + --file cirros-0.4.0-x86_64-disk.img --public cirros + ``` + + 确认镜像上传并验证属性: + + ```shell + openstack image list + ``` + +### Nova 安装 + +1. 创建数据库、服务凭证和 API 端点 + + 创建数据库: + + ```sql + mysql -u root -p (CPT) + + MariaDB [(none)]> CREATE DATABASE nova_api; + MariaDB [(none)]> CREATE DATABASE nova; + MariaDB [(none)]> CREATE DATABASE nova_cell0; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***注意*** + + **替换NOVA_DBPASS,为nova数据库设置密码** + + ```shell + source ~/.admin-openrc (CPT) + ``` + + 创建nova服务凭证: + + ```shell + openstack user create --domain default --password-prompt nova (CTP) + openstack role add --project service --user nova admin (CPT) + openstack service create --name nova --description "OpenStack Compute" compute (CPT) + ``` + + 创建placement服务凭证: + + ```shell + openstack user create --domain default --password-prompt placement (CPT) + openstack role add --project service --user placement admin (CPT) + openstack service create --name placement --description "Placement API" placement (CPT) + ``` + + 创建nova API端点: + + ```shell + openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 (CPT) + openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1 (CPT) + openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1 (CPT) + ``` + + 创建placement API端点: + + ```shell + openstack endpoint create --region RegionOne placement public http://controller:8778 (CPT) + openstack endpoint create --region RegionOne placement internal http://controller:8778 (CPT) + openstack endpoint create --region RegionOne placement admin http://controller:8778 (CPT) + ``` + +2. 安装软件包 + + ```shell + yum install openstack-nova-api-$QueensVer openstack-nova-conductor-$QueensVer openstack-nova-console-$QueensVer \ + novnc-$QueensVer openstack-nova-novncproxy-$QueensVer openstack-nova-scheduler-$QueensVer \ + openstack-nova-placement-api-$QueensVer (CTL) + + yum install openstack-nova-compute-$QueensVer (CPT) + ``` + + ***注意*** + + **如果为arm64结构,还需要执行以下命令** + + ```shell + yum install edk2-aarch64 (CPT) + ``` + +3. 配置nova相关配置 + + ```shell + vim /etc/nova/nova.conf + + [DEFAULT] + enabled_apis = osapi_compute,metadata + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + my_ip = 10.0.0.1 + use_neutron = true + firewall_driver = nova.virt.firewall.NoopFirewallDriver + compute_driver=libvirt.LibvirtDriver (CPT) + instances_path = /var/lib/nova/instances/ (CPT) + lock_path = /var/lib/nova/tmp (CPT) + + [api_database] + connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api (CTL) + + [database] + connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova (CTL) + + [api] + auth_strategy = keystone + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000/ + auth_url = http://controller:5000/ + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = nova + password = NOVA_PASS + + [vnc] + enabled = true + server_listen = $my_ip + server_proxyclient_address = $my_ip + novncproxy_base_url = http://controller:6080/vnc_auto.html (CPT) + + [glance] + api_servers = http://controller:9292 + + [oslo_concurrency] + lock_path = /var/lib/nova/tmp (CTL) + + [placement] + region_name = RegionOne + project_domain_name = Default + project_name = service + auth_type = password + user_domain_name = Default + auth_url = http://controller:5000/v3 + username = placement + password = PLACEMENT_PASS + + [neutron] + auth_url = http://controller:5000 + auth_type = password + project_domain_name = default + user_domain_name = default + region_name = RegionOne + project_name = service + username = neutron + password = NEUTRON_PASS + service_metadata_proxy = true (CTL) + metadata_proxy_shared_secret = METADATA_SECRET (CTL) + ``` + + ***解释*** + + [default]部分,启用计算和元数据的API,配置RabbitMQ消息队列入口,配置my_ip,启用网络服务neutron; + + [api_database] [database]部分,配置数据库入口; + + [api] [keystone_authtoken]部分,配置身份认证服务入口; + + [vnc]部分,启用并配置远程控制台入口; + + [glance]部分,配置镜像服务API的地址; + + [oslo_concurrency]部分,配置lock path; + + [placement]部分,配置placement服务的入口。 + + ***注意*** + + **替换 `RABBIT_PASS` 为 RabbitMQ 中 openstack 账户的密码;** + + **配置 `my_ip` 为控制节点的管理IP地址;** + + **替换 `NOVA_DBPASS` 为nova数据库的密码;** + + **替换 `NOVA_PASS` 为nova用户的密码;** + + **替换 `PLACEMENT_PASS` 为placement用户的密码;** + + **替换 `NEUTRON_PASS` 为neutron用户的密码;** + + **替换`METADATA_SECRET`为合适的元数据代理secret。** + + **额外** + + 手动增加Placement API接入配置。 + + ```shell + vim /etc/httpd/conf.d/00-nova-placement-api.conf (CTL) + + + = 2.4> + Require all granted + + + Order allow,deny + Allow from all + + + ``` + + 重启httpd服务: + + ```shell + systemctl restart httpd (CTL) + ``` + + 确定是否支持虚拟机硬件加速(x86架构): + + ```shell + egrep -c '(vmx|svm)' /proc/cpuinfo (CPT) + ``` + + 如果返回值为0则不支持硬件加速,需要配置libvirt使用QEMU而不是KVM: + + ```shell + vim /etc/nova/nova.conf (CPT) + + [libvirt] + virt_type = qemu + ``` + + 如果返回值为1或更大的值,则支持硬件加速,不需要进行额外的配置 + + ***注意*** + + **如果为arm64结构,还需要在计算节点执行以下命令** + + ```shell + mkdir -p /usr/share/AAVMF + chown nova:nova /usr/share/AAVMF + + ln -s /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw \ + /usr/share/AAVMF/AAVMF_CODE.fd + ln -s /usr/share/edk2/aarch64/vars-template-pflash.raw \ + /usr/share/AAVMF/AAVMF_VARS.fd + + vim /etc/libvirt/qemu.conf + + nvram = ["/usr/share/AAVMF/AAVMF_CODE.fd: \ + /usr/share/AAVMF/AAVMF_VARS.fd", \ + "/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw: \ + /usr/share/edk2/aarch64/vars-template-pflash.raw"] + ``` + + 并且当ARM架构下的部署环境为嵌套虚拟化时,`libvirt`配置如下: + + ```shell + [libvirt] + virt_type = qemu + cpu_mode = custom + cpu_model = cortex-a72 + ``` + +4. 同步数据库 + + 同步nova-api数据库: + + ```shell + su -s /bin/sh -c "nova-manage api_db sync" nova (CTL) + ``` + + 注册cell0数据库: + + ```shell + su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova (CTL) + ``` + + 创建cell1 cell: + + ```shell + su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova (CTL) + ``` + + 同步nova数据库: + + ```shell + su -s /bin/sh -c "nova-manage db sync" nova (CTL) + ``` + + 验证cell0和cell1注册正确: + + ```shell + su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova (CTL) + ``` + + 添加计算节点到openstack集群 + + ```shell + su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova (CPT) + ``` + +5. 启动服务 + + ```shell + systemctl enable \ (CTL) + openstack-nova-api.service \ + openstack-nova-consoleauth.service \ + openstack-nova-scheduler.service \ + openstack-nova-conductor.service \ + openstack-nova-novncproxy.service + + systemctl start \ (CTL) + openstack-nova-api.service \ + openstack-nova-consoleauth.service \ + openstack-nova-scheduler.service \ + openstack-nova-conductor.service \ + openstack-nova-novncproxy.service + ``` + + ```shell + systemctl enable libvirtd.service openstack-nova-compute.service (CPT) + systemctl start libvirtd.service openstack-nova-compute.service (CPT) + ``` + +6. 验证 + + ```shell + source ~/.admin-openrc (CTL) + ``` + + 列出服务组件,验证每个流程都成功启动和注册: + + ```shell + openstack compute service list (CTL) + ``` + + 列出身份服务中的API端点,验证与身份服务的连接: + + ```shell + openstack catalog list (CTL) + ``` + + 列出镜像服务中的镜像,验证与镜像服务的连接: + + ```shell + openstack image list (CTL) + ``` + + 检查cells和placement API是否运作成功,以及其他必要条件是否已具备。 + + ```shell + nova-status upgrade check (CTL) + ``` + +### Neutron 安装 + +1. 创建数据库、服务凭证和 API 端点 + + 创建数据库: + + ```sql + mysql -u root -p (CTL) + + MariaDB [(none)]> CREATE DATABASE neutron; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \ + IDENTIFIED BY 'NEUTRON_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \ + IDENTIFIED BY 'NEUTRON_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***注意*** + + **替换 `NEUTRON_DBPASS` 为 neutron 数据库设置密码。** + + ```shell + source ~/.admin-openrc (CTL) + ``` + + 创建neutron服务凭证 + + ```shell + openstack user create --domain default --password-prompt neutron (CTL) + openstack role add --project service --user neutron admin (CTL) + openstack service create --name neutron --description "OpenStack Networking" network (CTL) + ``` + + 创建Neutron服务API端点: + + ```shell + openstack endpoint create --region RegionOne network public http://controller:9696 (CTL) + openstack endpoint create --region RegionOne network internal http://controller:9696 (CTL) + openstack endpoint create --region RegionOne network admin http://controller:9696 (CTL) + ``` + +2. 安装软件包: + + ```shell + yum install openstack-neutron-$QueensVer openstack-neutron-linuxbridge-agent-$QueensVer \ (CTL) + ebtables ipset openstack-neutron-l3-agent-$QueensVer \ + openstack-neutron-dhcp-agent-$QueensVer \ + openstack-neutron-metadata-agent-$QueensVer + ``` + + ```shell + yum install openstack-neutron-linuxbridge-agent-$QueensVer ebtables ipset (CPT) + ``` + +3. 配置neutron相关配置: + + 配置主体配置 + + ```shell + vim /etc/neutron/neutron.conf + + [database] + connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron (CTL) + + [DEFAULT] + core_plugin = ml2 (CTL) + service_plugins = router (CTL) + allow_overlapping_ips = true (CTL) + transport_url = rabbit://openstack:RABBIT_PASS@controller + auth_strategy = keystone + notify_nova_on_port_status_changes = true (CTL) + notify_nova_on_port_data_changes = true (CTL) + api_workers = 3 (CTL) + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = neutron + password = NEUTRON_PASS + + [nova] + auth_url = http://controller:5000 (CTL) + auth_type = password (CTL) + project_domain_name = Default (CTL) + user_domain_name = Default (CTL) + region_name = RegionOne (CTL) + project_name = service (CTL) + username = nova (CTL) + password = NOVA_PASS (CTL) + + [oslo_concurrency] + lock_path = /var/lib/neutron/tmp + ``` + + ***解释*** + + [database]部分,配置数据库入口; + + [default]部分,启用ml2插件和router插件,允许ip地址重叠,配置RabbitMQ消息队列入口; + + [default] [keystone]部分,配置身份认证服务入口; + + [default] [nova]部分,配置网络来通知计算网络拓扑的变化; + + [oslo_concurrency]部分,配置lock path。 + + ***注意*** + + **替换`NEUTRON_DBPASS`为 neutron 数据库的密码;** + + **替换`RABBIT_PASS`为 RabbitMQ中openstack 账户的密码;** + + **替换`NEUTRON_PASS`为 neutron 用户的密码;** + + **替换`NOVA_PASS`为 nova 用户的密码。** + + 配置ML2插件: + + ```shell + vim /etc/neutron/plugins/ml2/ml2_conf.ini + + [ml2] + type_drivers = flat,vlan,vxlan + tenant_network_types = vxlan + mechanism_drivers = linuxbridge,l2population + extension_drivers = port_security + + [ml2_type_flat] + flat_networks = provider + + [ml2_type_vxlan] + vni_ranges = 1:1000 + + [securitygroup] + enable_ipset = true + ``` + + 创建/etc/neutron/plugin.ini的符号链接 + + ```shell + ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini + ``` + + **注意** + + **[ml2]部分,启用 flat、vlan、vxlan 网络,启用 linuxbridge 及 l2population 机制,启用端口安全扩展驱动;** + + **[ml2_type_flat]部分,配置 flat 网络为 provider 虚拟网络;** + + **[ml2_type_vxlan]部分,配置 VXLAN 网络标识符范围;** + + **[securitygroup]部分,配置允许 ipset。** + + **补充** + + **l2 的具体配置可以根据用户需求自行修改,本文使用的是provider network + linuxbridge** + + 配置 Linux bridge 代理: + + ```shell + vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini + + [linux_bridge] + physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME + + [vxlan] + enable_vxlan = true + local_ip = OVERLAY_INTERFACE_IP_ADDRESS + l2_population = true + + [securitygroup] + enable_security_group = true + firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver + ``` + + ***解释*** + + [linux_bridge]部分,映射 provider 虚拟网络到物理网络接口; + + [vxlan]部分,启用 vxlan 覆盖网络,配置处理覆盖网络的物理网络接口 IP 地址,启用 layer-2 population; + + [securitygroup]部分,允许安全组,配置 linux bridge iptables 防火墙驱动。 + + ***注意*** + + **替换`PROVIDER_INTERFACE_NAME`为物理网络接口;** + + **替换`OVERLAY_INTERFACE_IP_ADDRESS`为控制节点的管理IP地址。** + + 配置Layer-3代理: + + ```shell + vim /etc/neutron/l3_agent.ini (CTL) + + [DEFAULT] + interface_driver = linuxbridge + ``` + + ***解释*** + + 在[default]部分,配置接口驱动为linuxbridge + + 配置DHCP代理: + + ```shell + vim /etc/neutron/dhcp_agent.ini (CTL) + + [DEFAULT] + interface_driver = linuxbridge + dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq + enable_isolated_metadata = true + ``` + + ***解释*** + + [default]部分,配置linuxbridge接口驱动、Dnsmasq DHCP驱动,启用隔离的元数据。 + + 配置metadata代理: + + ```shell + vim /etc/neutron/metadata_agent.ini (CTL) + + [DEFAULT] + nova_metadata_host = controller + metadata_proxy_shared_secret = METADATA_SECRET + ``` + + ***解释*** + + [default]部分,配置元数据主机和shared secret。 + + ***注意*** + + **替换`METADATA_SECRET`为合适的元数据代理secret。** + +4. 配置nova相关配置 + + ```shell + vim /etc/nova/nova.conf + + [neutron] + auth_url = http://controller:5000 + auth_type = password + project_domain_name = Default + user_domain_name = Default + region_name = RegionOne + project_name = service + username = neutron + password = NEUTRON_PASS + service_metadata_proxy = true (CTL) + metadata_proxy_shared_secret = METADATA_SECRET (CTL) + ``` + + ***解释*** + + [neutron]部分,配置访问参数,启用元数据代理,配置secret。 + + ***注意*** + + **替换`NEUTRON_PASS`为 neutron 用户的密码;** + + **替换`METADATA_SECRET`为合适的元数据代理secret。** + +5. 同步数据库: + + ```shell + su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \ + --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron + ``` + +6. 重启计算API服务: + + ```shell + systemctl restart openstack-nova-api.service + ``` + +7. 启动网络服务 + + ```shell + systemctl enable openstack-neutron-server.service \ (CTL) + openstack-neutron-linuxbridge-agent.service openstack-neutron-dhcp-agent.service \ + openstack-neutron-metadata-agent.service openstack-neutron-l3-agent.service + systemctl restart openstack-nova-api.service openstack-neutron-server.service \ (CTL) + openstack-neutron-linuxbridge-agent.service openstack-neutron-dhcp-agent.service \ + openstack-neutron-metadata-agent.service openstack-neutron-l3-agent.service + + systemctl enable openstack-neutron-linuxbridge-agent.service (CPT) + systemctl restart openstack-neutron-linuxbridge-agent.service openstack-nova-compute.service (CPT) + ``` + +8. 验证 + + 列出代理验证 neutron 代理启动成功: + + ```shell + openstack network agent list + ``` + +### Cinder 安装 + +1. 创建数据库、服务凭证和 API 端点 + + 创建数据库: + + ```sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE cinder; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \ + IDENTIFIED BY 'CINDER_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \ + IDENTIFIED BY 'CINDER_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***注意*** + + **替换 `CINDER_DBPASS` 为cinder数据库设置密码。** + + ```shell + source ~/.admin-openrc + ``` + + 创建cinder服务凭证: + + ```shell + openstack user create --domain default --password-prompt cinder + openstack role add --project service --user cinder admin + openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2 + openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3 + ``` + + 创建块存储服务API端点: + + ```shell + openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s + openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s + openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s + openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s + openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s + openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s + ``` + +2. 安装软件包: + + ```shell + yum install openstack-cinder-api-$QueensVer openstack-cinder-scheduler-$QueensVer (CTL) + ``` + + ```shell + yum install lvm2 device-mapper-persistent-data scsi-target-utils rpcbind nfs-utils \ (CPT) + openstack-cinder-volume-$QueensVer openstack-cinder-backup-$QueensVer + ``` + +3. 准备存储设备,以下仅为示例: + + ```shell + pvcreate /dev/vdb + vgcreate cinder-volumes /dev/vdb + + vim /etc/lvm/lvm.conf + + + devices { + ... + filter = [ "a/vdb/", "r/.*/"] + ``` + + ***解释*** + + 在devices部分,添加过滤以接受/dev/vdb设备拒绝其他设备。 + +4. 准备NFS + + ```shell + mkdir -p /root/cinder/backup + + cat << EOF >> /etc/export + /root/cinder/backup 192.168.1.0/24(rw,sync,no_root_squash,no_all_squash) + EOF + + ``` + +5. 配置cinder相关配置: + + ```shell + vim /etc/cinder/cinder.conf + + [DEFAULT] + transport_url = rabbit://openstack:RABBIT_PASS@controller + auth_strategy = keystone + my_ip = 10.0.0.11 + enabled_backends = lvm (CPT) + backup_driver=cinder.backup.drivers.nfs.NFSBackupDriver (CPT) + backup_share=HOST:PATH (CPT) + + [database] + connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = cinder + password = CINDER_PASS + + [oslo_concurrency] + lock_path = /var/lib/cinder/tmp + + [lvm] + volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver (CPT) + volume_group = cinder-volumes (CPT) + iscsi_protocol = iscsi (CPT) + iscsi_helper = tgtadm (CPT) + ``` + + ***解释*** + + [database]部分,配置数据库入口; + + [DEFAULT]部分,配置RabbitMQ消息队列入口,配置my_ip; + + [DEFAULT] [keystone_authtoken]部分,配置身份认证服务入口; + + [oslo_concurrency]部分,配置lock path。 + + ***注意*** + + **替换`CINDER_DBPASS`为 cinder 数据库的密码;** + + **替换`RABBIT_PASS`为 RabbitMQ 中 openstack 账户的密码;** + + **配置`my_ip`为控制节点的管理 IP 地址;** + + **替换`CINDER_PASS`为 cinder 用户的密码;** + + **替换`HOST:PATH`为 NFS的HOSTIP和共享路径 用户的密码;** + +6. 同步数据库: + + ```shell + su -s /bin/sh -c "cinder-manage db sync" cinder (CTL) + ``` + +7. 配置nova: + + ```shell + vim /etc/nova/nova.conf (CTL) + + [cinder] + os_region_name = RegionOne + ``` + +8. 重启计算API服务 + + ```shell + systemctl restart openstack-nova-api.service + ``` + +9. 启动cinder服务 + + ```shell + systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service (CTL) + systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service (CTL) + ``` + + ```shell + systemctl enable rpcbind.service nfs-server.service tgtd.service iscsid.service \ (CPT) + openstack-cinder-volume.service \ + openstack-cinder-backup.service + systemctl start rpcbind.service nfs-server.service tgtd.service iscsid.service \ (CPT) + openstack-cinder-volume.service \ + openstack-cinder-backup.service + ``` + + ***注意*** + + 当cinder使用tgtadm的方式挂卷的时候,要修改/etc/tgt/tgtd.conf,内容如下,保证tgtd可以发现cinder-volume的iscsi target。 + + ``` + include /var/lib/cinder/volumes/* + ``` + +10. 验证 + + ```shell + source ~/.admin-openrc + openstack volume service list + ``` + +### horizon 安装 + +1. 安装软件包 + + ```shell + yum install openstack-dashboard-$QueensVer + ``` + +2. 修改文件 + + 修改变量 + + ```text + vim /etc/openstack-dashboard/local_settings + + ALLOWED_HOSTS = ['*', ] + OPENSTACK_HOST = "controller" + OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST + ``` + +3. 重启 httpd 服务 + + ```shell + systemctl restart httpd + ``` + +4. 验证 + 打开浏览器,输入网址,登录 horizon。 + + ***注意*** + + **替换HOSTIP为控制节点管理平面IP地址** + +### Tempest 安装 + +Tempest是OpenStack的集成测试服务,如果用户需要全面自动化测试已安装的OpenStack环境的功能,则推荐使用该组件。否则,可以不用安装 + +1. 安装Tempest + + ```shell + yum install openstack-tempest-$QueensVer + ``` + +2. 初始化目录 + + ```shell + tempest init mytest + ``` + +3. 修改配置文件。 + + ```shell + cd mytest + vi etc/tempest.conf + ``` + + tempest.conf中需要配置当前OpenStack环境的信息,具体内容可以参考[官方示例](https://docs.openstack.org/tempest/latest/sampleconf.html) + +4. 执行测试 + + ```shell + tempest run + ``` + +### Ironic 安装 + +Ironic是OpenStack的裸金属服务,如果用户需要进行裸机部署则推荐使用该组件。否则,可以不用安装。 + +1. 设置数据库 + + 裸金属服务在数据库中存储信息,创建一个**ironic**用户可以访问的**ironic**数据库,替换**IRONIC_DBPASSWORD**为合适的密码 + + ```sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE ironic CHARACTER SET utf8; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'localhost' \ + IDENTIFIED BY 'IRONIC_DBPASSWORD'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'%' \ + IDENTIFIED BY 'IRONIC_DBPASSWORD'; + ``` + +2. 安装软件包 + + ```shell + yum install openstack-ironic-api-$QueensVer openstack-ironic-conductor-$QueensVer python2-ironicclient + ``` + + 启动服务 + + ```shell + systemctl enable openstack-ironic-api openstack-ironic-conductor + systemctl start openstack-ironic-api openstack-ironic-conductor + ``` + + +3. 创建服务用户认证 + + 1、创建Bare Metal服务用户 + + ```shell + openstack user create --password IRONIC_PASSWORD \ + --email ironic@example.com ironic + openstack role add --project service --user ironic admin + openstack service create --name ironic --description "Ironic baremetal provisioning service" baremetal + + ``` + + 2、创建Bare Metal服务访问入口 + + ```shell + openstack endpoint create --region RegionOne baremetal admin http://$IRONIC_NODE:6385 + openstack endpoint create --region RegionOne baremetal public http://$IRONIC_NODE:6385 + openstack endpoint create --region RegionOne baremetal internal http://$IRONIC_NODE:6385 + ``` + +4. 配置ironic-api服务 + + 配置文件路径/etc/ironic/ironic.conf + + 1、通过**connection**选项配置数据库的位置,如下所示,替换**IRONIC_DBPASSWORD**为**ironic**用户的密码,替换**DB_IP**为DB服务器所在的IP地址: + + ```shell + [database] + + # The SQLAlchemy connection string used to connect to the + # database (string value) + + connection = mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic + ``` + + 2、通过以下选项配置ironic-api服务使用RabbitMQ消息代理,替换**RPC_\***为RabbitMQ的详细地址和凭证 + + ```shell + [DEFAULT] + + # A URL representing the messaging driver to use and its full + # configuration. (string value) + + transport_url = rabbit://RPC_USER:RPC_PASSWORD@RPC_HOST:RPC_PORT/ + ``` + + 用户也可自行使用json-rpc方式替换rabbitmq + + 3、配置ironic-api服务使用身份认证服务的凭证,替换**PUBLIC_IDENTITY_IP**为身份认证服务器的公共IP,替换**PRIVATE_IDENTITY_IP**为身份认证服务器的私有IP,替换**IRONIC_PASSWORD**为身份认证服务中**ironic**用户的密码: + + ```shell + [DEFAULT] + + # Authentication strategy used by ironic-api: one of + # "keystone" or "noauth". "noauth" should not be used in a + # production environment because all authentication will be + # disabled. (string value) + + auth_strategy=keystone + + [keystone_authtoken] + # Authentication type to load (string value) + auth_type=password + # Complete public Identity API endpoint (string value) + www_authenticate_uri=http://PUBLIC_IDENTITY_IP:5000 + # Complete admin Identity API endpoint. (string value) + auth_url=http://PRIVATE_IDENTITY_IP:5000 + # Service username. (string value) + username=ironic + # Service account password. (string value) + password=IRONIC_PASSWORD + # Service tenant name. (string value) + project_name=service + # Domain name containing project (string value) + project_domain_name=Default + # User's domain name (string value) + user_domain_name=Default + ``` + + 4、创建裸金属服务数据库表 + + ```shell + ironic-dbsync --config-file /etc/ironic/ironic.conf create_schema + ``` + + 5、重启ironic-api服务 + + ```shell + sudo systemctl restart openstack-ironic-api + ``` + +5. 配置ironic-conductor服务 + + 1、替换**HOST_IP**为conductor host的IP + + ```shell + [DEFAULT] + + # IP address of this host. If unset, will determine the IP + # programmatically. If unable to do so, will use "127.0.0.1". + # (string value) + + my_ip=HOST_IP + ``` + + 2、配置数据库的位置,ironic-conductor应该使用和ironic-api相同的配置。替换**IRONIC_DBPASSWORD**为**ironic**用户的密码,替换DB_IP为DB服务器所在的IP地址: + + ```shell + [database] + + # The SQLAlchemy connection string to use to connect to the + # database. (string value) + + connection = mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic + ``` + + 3、通过以下选项配置ironic-api服务使用RabbitMQ消息代理,ironic-conductor应该使用和ironic-api相同的配置,替换**RPC_\***为RabbitMQ的详细地址和凭证 + + ```shell + [DEFAULT] + + # A URL representing the messaging driver to use and its full + # configuration. (string value) + + transport_url = rabbit://RPC_USER:RPC_PASSWORD@RPC_HOST:RPC_PORT/ + ``` + + 用户也可自行使用json-rpc方式替换rabbitmq + + 4、配置凭证访问其他OpenStack服务 + + 为了与其他OpenStack服务进行通信,裸金属服务在请求其他服务时需要使用服务用户与OpenStack Identity服务进行认证。这些用户的凭据必须在与相应服务相关的每个配置文件中进行配置。 + + ```shell + [neutron] - 访问Openstack网络服务 + [glance] - 访问Openstack镜像服务 + [swift] - 访问Openstack对象存储服务 + [cinder] - 访问Openstack块存储服务 + [inspector] - 访问Openstack裸金属introspection服务 + [service_catalog] - 一个特殊项用于保存裸金属服务使用的凭证,该凭证用于发现注册在Openstack身份认证服务目录中的自己的API URL端点 + ``` + + 简单起见,可以对所有服务使用同一个服务用户。为了向后兼容,该用户应该和ironic-api服务的[keystone_authtoken]所配置的为同一个用户。但这不是必须的,也可以为每个服务创建并配置不同的服务用户。 + + 在下面的示例中,用户访问openstack网络服务的身份验证信息配置为: + + ```shell + 网络服务部署在名为RegionOne的身份认证服务域中,仅在服务目录中注册公共端点接口 + + 请求时使用特定的CA SSL证书进行HTTPS连接 + + 与ironic-api服务配置相同的服务用户 + + 动态密码认证插件基于其他选项发现合适的身份认证服务API版本 + ``` + + ```shell + [neutron] + + # Authentication type to load (string value) + auth_type = password + # Authentication URL (string value) + auth_url=https://IDENTITY_IP:5000/ + # Username (string value) + username=ironic + # User's password (string value) + password=IRONIC_PASSWORD + # Project name to scope to (string value) + project_name=service + # Domain ID containing project (string value) + project_domain_id=default + # User's domain id (string value) + user_domain_id=default + # PEM encoded Certificate Authority to use when verifying + # HTTPs connections. (string value) + cafile=/opt/stack/data/ca-bundle.pem + # The default region_name for endpoint URL discovery. (string + # value) + region_name = RegionOne + # List of interfaces, in order of preference, for endpoint + # URL. (list value) + valid_interfaces=public + ``` + + 默认情况下,为了与其他服务进行通信,裸金属服务会尝试通过身份认证服务的服务目录发现该服务合适的端点。如果希望对一个特定服务使用一个不同的端点,则在裸金属服务的配置文件中通过endpoint_override选项进行指定: + + ```shell + [neutron] ... endpoint_override = + ``` + + 5、配置允许的驱动程序和硬件类型 + + 通过设置enabled_hardware_types设置ironic-conductor服务允许使用的硬件类型: + + ```shell + [DEFAULT] enabled_hardware_types = ipmi + ``` + + 配置硬件接口: + + ```shell + enabled_boot_interfaces = pxe enabled_deploy_interfaces = direct,iscsi enabled_inspect_interfaces = inspector enabled_management_interfaces = ipmitool enabled_power_interfaces = ipmitool + ``` + + 配置接口默认值: + + ```shell + [DEFAULT] default_deploy_interface = direct default_network_interface = neutron + ``` + + 如果启用了任何使用Direct deploy的驱动,必须安装和配置镜像服务的Swift后端。Ceph对象网关(RADOS网关)也支持作为镜像服务的后端。 + + 6、重启ironic-conductor服务 + + ```shell + sudo systemctl restart openstack-ironic-conductor + ``` + +6. deploy ramdisk镜像制作 + + Q版的ramdisk镜像支持通过ironic-python-agent服务或disk-image-builder工具制作,也可以使用社区最新的ironic-python-agent-builder。用户也可以自行选择其他工具制作。 + 若使用Q版原生工具,则需要安装对应的软件包。 + + ``` + yum install openstack-ironic-python-agent-$QueensVer + 或者 + yum install diskimage-builder-$QueensVer + ``` + 具体的使用方法可以参考[官方文档](https://docs.openstack.org/ironic/queens/install/deploy-ramdisk.html) + + 这里介绍下使用ironic-python-agent-builder构建ironic使用的deploy镜像的完整过程。 + + 1. 安装 ironic-python-agent-builder + + + 1. 安装工具: + + ```shell + pip install ironic-python-agent-builder + ``` + + 2. 修改以下文件中的python解释器: + + ```shell + /usr/bin/yum /usr/libexec/urlgrabber-ext-down + ``` + + 3. 安装其它必须的工具: + + ```shell + yum install git + ``` + + 由于`DIB`依赖`semanage`命令,所以在制作镜像之前确定该命令是否可用:`semanage --help`,如果提示无此命令,安装即可: + + ```shell + # 先查询需要安装哪个包 + [root@localhost ~]# yum provides /usr/sbin/semanage + 已加载插件:fastestmirror + Loading mirror speeds from cached hostfile + * base: mirror.vcu.edu + * extras: mirror.vcu.edu + * updates: mirror.math.princeton.edu + policycoreutils-python-2.5-34.el7.aarch64 : SELinux policy core python utilities + 源 :base + 匹配来源: + 文件名 :/usr/sbin/semanage + # 安装 + [root@localhost ~]# yum install policycoreutils-python + ``` + + 2. 制作镜像 + + 如果是`arm`架构,需要添加: + ```shell + export ARCH=aarch64 + ``` + + 基本用法: + + ```shell + usage: ironic-python-agent-builder [-h] [-r RELEASE] [-o OUTPUT] [-e ELEMENT] + [-b BRANCH] [-v] [--extra-args EXTRA_ARGS] + distribution + + positional arguments: + distribution Distribution to use + + optional arguments: + -h, --help show this help message and exit + -r RELEASE, --release RELEASE + Distribution release to use + -o OUTPUT, --output OUTPUT + Output base file name + -e ELEMENT, --element ELEMENT + Additional DIB element to use + -b BRANCH, --branch BRANCH + If set, override the branch that is used for ironic- + python-agent and requirements + -v, --verbose Enable verbose logging in diskimage-builder + --extra-args EXTRA_ARGS + Extra arguments to pass to diskimage-builder + ``` + + 举例说明: + + ```shell + ironic-python-agent-builder centos -o /mnt/ironic-agent-ssh -b origin/stable/rocky + ``` + + 3. 允许ssh登陆 + + 初始化环境变量,然后制作镜像: + + ```shell + export DIB_DEV_USER_USERNAME=ipa \ + export DIB_DEV_USER_PWDLESS_SUDO=yes \ + export DIB_DEV_USER_PASSWORD='123' + ironic-python-agent-builder centos -o /mnt/ironic-agent-ssh -b origin/stable/rocky -e selinux-permissive -e devuser + ``` + + 4. 指定代码仓库 + + 初始化对应的环境变量,然后制作镜像: + + ```shell + # 指定仓库地址以及版本 + DIB_REPOLOCATION_ironic_python_agent=git@172.20.2.149:liuzz/ironic-python-agent.git + DIB_REPOREF_ironic_python_agent=origin/develop + + # 直接从gerrit上clone代码 + DIB_REPOLOCATION_ironic_python_agent=https://review.opendev.org/openstack/ironic-python-agent + DIB_REPOREF_ironic_python_agent=refs/changes/43/701043/1 + ``` + + 参考:[source-repositories](https://docs.openstack.org/diskimage-builder/latest/elements/source-repositories/README.html)。 + + 指定仓库地址及版本验证成功。 + +在Queens中,我们还提供了ironic-inspector等服务,用户可根据自身需求安装。 + +### Kolla 安装 + +Kolla 为 OpenStack 服务提供生产环境可用的容器化部署的功能。openEuler 20.03 LTS SP2中已经引入了Kolla和Kolla-ansible服务,但是Kolla 以及 Kolla-ansible 原生并不支持 openEuler, +因此 Openstack SIG 在openEuler 20.03 LTS SP3中提供了 `openstack-kolla-plugin` 和 `openstack-kolla-ansible-plugin` 这两个补丁包。 + +Kolla的安装十分简单,只需要安装对应的RPM包即可 + +支持 openEuler 版本: + +```shell +yum install openstack-kolla-plugin openstack-kolla-ansible-plugin +``` + +不支持 openEuler 版本: + +```shell +yum install openstack-kolla-$QueensVer openstack-kolla-ansible-$QueensVer +``` + +安装完后,就可以使用`kolla-ansible`, `kolla-build`, `kolla-genpwd`, `kolla-mergepwd`等命令了。 + +### Trove 安装 +Trove是OpenStack的数据库服务,如果用户使用OpenStack提供的数据库服务则推荐使用该组件。否则,可以不用安装。 + +1. 设置数据库 + + 数据库服务在数据库中存储信息,创建一个**trove**用户可以访问的**trove**数据库,替换**TROVE_DBPASSWORD**为合适的密码 + + ```sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE trove CHARACTER SET utf8; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'localhost' \ + IDENTIFIED BY 'TROVE_DBPASSWORD'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'%' \ + IDENTIFIED BY 'TROVE_DBPASSWORD'; + ``` + +2. 创建服务用户认证 + + 1、创建**Trove**服务用户 + + ```shell + openstack user create --password TROVE_PASSWORD \ + --email trove@example.com trove + openstack role add --project service --user trove admin + openstack service create --name trove --description "Database service" database + ``` + **解释:** `TROVE_PASSWORD` 替换为`trove`用户的密码 + + 2、创建**Database**服务访问入口 + + ```shell + openstack endpoint create --region RegionOne database public http://$TROVE_NODE:8779/v1.0/%\(tenant_id\)s + openstack endpoint create --region RegionOne database internal http://$TROVE_NODE:8779/v1.0/%\(tenant_id\)s + openstack endpoint create --region RegionOne database admin http://$TROVE_NODE:8779/v1.0/%\(tenant_id\)s + ``` + **解释:** `$TROVE_NODE` 替换为Trove的API服务部署节点 + +3. 安装和配置**Trove**各组件 + 1、安装**Trove**包 + ```shell script + yum install openstack-trove-$QueensVer python2-troveclient + ``` + 2. 配置`trove.conf` + ```shell script + vim /etc/trove/trove.conf + + [DEFAULT] + bind_host=TROVE_NODE_IP + log_dir = /var/log/trove + + auth_strategy = keystone + # Config option for showing the IP address that nova doles out + add_addresses = True + network_label_regex = ^NETWORK_LABEL$ + api_paste_config = /etc/trove/api-paste.ini + + trove_auth_url = http://controller:35357/v3/ + nova_compute_url = http://controller:8774/v2 + cinder_url = http://controller:8776/v1 + + nova_proxy_admin_user = admin + nova_proxy_admin_pass = ADMIN_PASS + nova_proxy_admin_tenant_name = service + taskmanager_manager = trove.taskmanager.manager.Manager + use_nova_server_config_drive = True + + # Set these if using Neutron Networking + network_driver=trove.network.neutron.NeutronDriver + network_label_regex=.* + + + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + + [database] + connection = mysql+pymysql://trove:TROVE_DBPASS@controller/trove + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000/v3/ + auth_url=http://controller:35357/v3/ + #auth_uri = http://controller/identity + #auth_url = http://controller/identity_admin + auth_type = password + project_domain_name = default + user_domain_name = default + project_name = service + username = trove + password = TROVE_PASS + + ``` + **解释:** + - `[Default]`分组中`bind_host`配置为Trove部署节点的IP + - `nova_compute_url` 和 `cinder_url` 为Nova和Cinder在Keystone中创建的endpoint + - `nova_proxy_XXX` 为一个能访问Nova服务的用户信息,上例中使用`admin`用户为例 + - `transport_url` 为`RabbitMQ`连接信息,`RABBIT_PASS`替换为RabbitMQ的密码 + - `[database]`分组中的`connection` 为前面在mysql中为Trove创建的数据库信息 + - Trove的用户信息中`TROVE_PASS`替换为实际trove用户的密码 + + 3. 配置`trove-taskmanager.conf` + ```shell script + vim /etc/trove/trove-taskmanager.conf + + [DEFAULT] + log_dir = /var/log/trove + trove_auth_url = http://controller/identity/v2.0 + nova_compute_url = http://controller:8774/v2 + cinder_url = http://controller:8776/v1 + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + + [database] + connection = mysql+pymysql://trove:TROVE_DBPASS@controller/trove + ``` + **解释:** 参照`trove.conf`配置 + + 4. 配置`trove-conductor.conf` + ```shell script + vim /etc/trove/trove-conductor.conf + + [DEFAULT] + log_dir = /var/log/trove + trove_auth_url = http://controller/identity/v2.0 + nova_compute_url = http://controller:8774/v2 + cinder_url = http://controller:8776/v1 + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + + [database] + connection = mysql+pymysql://trove:trove@controller/trove + ``` + **解释:** 参照`trove.conf`配置 + + 5. 配置`trove-guestagent.conf` + ```shell script + vim /etc/trove/trove-guestagent.conf + [DEFAULT] + rabbit_host = controller + rabbit_password = RABBIT_PASS + nova_proxy_admin_user = admin + nova_proxy_admin_pass = ADMIN_PASS + nova_proxy_admin_tenant_name = service + trove_auth_url = http://controller/identity_admin/v2.0 + ``` + **解释:** `guestagent`是trove中一个独立组件,需要预先内置到Trove通过Nova创建的虚拟 + 机镜像中,在创建好数据库实例后,会起guestagent进程,负责通过消息队列(RabbitMQ)向Trove上 + 报心跳,因此需要配置RabbitMQ的用户和密码信息。 + + 6. 生成数据`Trove`数据库表 + ```shell script + su -s /bin/sh -c "trove-manage db_sync" trove + ``` +4. 完成安装配置 + 1. 配置**Trove**服务自启动 + ```shell script + systemctl enable openstack-trove-api.service \ + openstack-trove-taskmanager.service \ + openstack-trove-conductor.service + ``` + 2. 启动服务 + ```shell script + systemctl start openstack-trove-api.service \ + openstack-trove-taskmanager.service \ + openstack-trove-conductor.service + ``` + +### Rally 安装 + +Rally是OpenStack提供的性能测试工具。只需要简单的安装即可。 + +``` +yum install openstack-rally openstack-rally-plugins +``` diff --git a/docs/zh/docs/thirdparty_migration/OpenStack-rocky.md b/docs/zh/docs/thirdparty_migration/OpenStack-rocky.md new file mode 100644 index 0000000000000000000000000000000000000000..5483921f8ee70215316264581fc5f857410e265d --- /dev/null +++ b/docs/zh/docs/thirdparty_migration/OpenStack-rocky.md @@ -0,0 +1,2067 @@ + + +# OpenStack-Rocky 部署指南 + + + +- [OpenStack-Rocky 部署指南](#openstack-rocky-部署指南) + + - [OpenStack 简介](#openstack-简介) + - [准备环境](#准备环境) + + - [环境配置](#环境配置) + - [安装 SQL DataBase](#安装-sql-database) + - [安装 RabbitMQ](#安装-rabbitmq) + - [安装 Memcached](#安装-memcached) + - [安装 OpenStack](#安装-openstack) + + - [Keystone 安装](#keystone-安装) + + - [Glance 安装](#glance-安装) + + - [Nova 安装](#nova-安装) + + - [Neutron 安装](#neutron-安装) + + - [Cinder 安装](#cinder-安装) + + - [Horizon 安装](#Horizon-安装) + + - [Tempest 安装](#tempest-安装) + + - [Ironic 安装](#ironic-安装) + + - [Kolla 安装](#kolla-安装) + + - [Trove 安装](#Trove-安装) + + - [Rally 安装](#Rally-安装) + + +## OpenStack 简介 + +OpenStack 是一个社区,也是一个项目。它提供了一个部署云的操作平台或工具集,为组织提供可扩展的、灵活的云计算。 + +作为一个开源的云计算管理平台,OpenStack 由 nova、cinder、neutron、glance、keystone、horizon 等几个主要的组件组合起来完成具体工作。OpenStack 支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack 通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供 API 进行集成。 + +openEuler 20.03-LTS-SP3 版本官方认证的第三方 oepkg yum 源已经支持 Openstack-Rocky 版本,用户可以配置好 oepkg yum 源后根据此文档进行 OpenStack 部署。 + + +## 软件包多版本约定 + +openEuler 20.03-LTS-SP3 版本支持 OpenStack 的 Queens、Rocky 和 Train 版本,有些软件包存在多版本,对于OpenStack Queens 和 Rocky 版本的安装,这些多版本软件包的安装我们需要指出对应版本号, +以 OpenStack Nova 为例,可以使用 `yum list --showduplicates |grep openstack-nova` 列出对应nova服务的版本,这里我们选择对应 Rocky 版本,以下安装文档均以 ‘$RockyVer’ 来表示。 + +涉及的软件包: + +openstack-keystone 及其子包 + +openstack-glance 及其子包 + +openstack-nova 及其子包 + +openstack-neutron 及其子包 + +openstack-cinder 及其子包 + +openstack-dashboard 及其子包 + +openstack-ironic 及其子包 + +openstack-tempest + +openstack-kolla + +openstack-kolla-ansible + +openstack-trove 及其子包 + +novnc + +diskimage-builder + +## 准备环境 +### OpenStack yum源配置 + +配置 20.03-LTS-SP3 官方认证的第三方源 oepkg,以x86_64为例 + +```shell +$ cat << EOF >> /etc/yum.repos.d/OpenStack_Rocky.repo +[openstack_rocky] +name=OpenStack_Rocky +baseurl=https://repo.oepkgs.net/openEuler/rpm/openEuler-20.03-LTS-SP3/budding-openeuler/openstack/rocky/x86_64/ +gpgcheck=0 +enabled=1 +EOF +``` + +```shell +$ yum clean all && yum makecache +``` + +### 环境配置 + +在`/etc/hosts`中添加controller信息,例如节点IP是`10.0.0.11`,则新增: + +``` +10.0.0.11 controller +``` + +### 安装 SQL DataBase + +1. 执行如下命令,安装软件包。 + + ```shell + $ yum install mariadb mariadb-server python2-PyMySQL + ``` +2. 创建并编辑 `/etc/my.cnf.d/openstack.cnf` 文件。 + + 复制如下内容到文件,其中 bind-address 设置为控制节点的管理IP地址。 + ```ini + [mysqld] + bind-address = 10.0.0.11 + default-storage-engine = innodb + innodb_file_per_table = on + max_connections = 4096 + collation-server = utf8_general_ci + character-set-server = utf8 + ``` + +3. 启动 DataBase 服务,并为其配置开机自启动: + + ```shell + $ systemctl enable mariadb.service + $ systemctl start mariadb.service + ``` +### 安装 RabbitMQ + +1. 执行如下命令,安装软件包。 + + ```shell + $ yum install rabbitmq-server + ``` + +2. 启动 RabbitMQ 服务,并为其配置开机自启动。 + + ```shell + $ systemctl enable rabbitmq-server.service + $ systemctl start rabbitmq-server.service + ``` +3. 添加 OpenStack用户。 + + ```shell + $ rabbitmqctl add_user openstack RABBIT_PASS + ``` +4. 替换 RABBIT_PASS,为OpenStack用户设置密码 + +5. 设置openstack用户权限,允许进行配置、写、读: + + ```shell + $ rabbitmqctl set_permissions openstack ".*" ".*" ".*" + ``` + +### 安装 Memcached + +1. 执行如下命令,安装依赖软件包。 + + ```shell + $ yum install memcached python2-memcached + ``` +2. 编辑 `/etc/sysconfig/memcached` 文件,添加以下内容 + + ```shell + OPTIONS="-l 127.0.0.1,::1,controller" + ``` + OPTIONS 修改为实际环境中控制节点的管理IP地址。 + +3. 执行如下命令,启动 Memcached 服务,并为其配置开机启动。 + + ```shell + $ systemctl enable memcached.service + $ systemctl start memcached.service + ``` + +## 安装 OpenStack + +### Keystone 安装 + +1. 以 root 用户访问数据库,创建 keystone 数据库并授权。 + + ```shell + $ mysql -u root -p + ``` + + ```sql + MariaDB [(none)]> CREATE DATABASE keystone; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ + IDENTIFIED BY 'KEYSTONE_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ + IDENTIFIED BY 'KEYSTONE_DBPASS'; + MariaDB [(none)]> exit + ``` + 替换 KEYSTONE_DBPASS,为 Keystone 数据库设置密码 + +2. 执行如下命令,安装软件包。 + + ```shell + $ yum install openstack-keystone-$RockyVer httpd python2-mod_wsgi + ``` + +3. 配置keystone,编辑 `/etc/keystone/keystone.conf` 文件。在[database]部分,配置数据库入口。在[token]部分,配置token provider + + ```ini + [database] + connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone + [token] + provider = fernet + ``` + 替换KEYSTONE_DBPASS为Keystone数据库的密码 + +4. 执行如下命令,同步数据库。 + + ```shell + su -s /bin/sh -c "keystone-manage db_sync" keystone + ``` + +5. 执行如下命令,初始化Fernet密钥仓库。 + + ```shell + $ keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone + $ keystone-manage credential_setup --keystone-user keystone --keystone-group keystone + ``` + +6. 执行如下命令,启动身份服务。 + + ```shell + $ keystone-manage bootstrap --bootstrap-password ADMIN_PASS \ + --bootstrap-admin-url http://controller:5000/v3/ \ + --bootstrap-internal-url http://controller:5000/v3/ \ + --bootstrap-public-url http://controller:5000/v3/ \ + --bootstrap-region-id RegionOne + ``` + 替换 ADMIN_PASS,为 admin 用户设置密码。 + +7. 编辑 `/etc/httpd/conf/httpd.conf` 文件,配置Apache HTTP server + + ```shell + $ vim /etc/httpd/conf/httpd.conf + ``` + + 配置 ServerName 项引用控制节点,如下所示。 + ``` + ServerName controller + ``` + + 如果 ServerName 项不存在则需要创建。 + +8. 执行如下命令,为 `/usr/share/keystone/wsgi-keystone.conf` 文件创建链接。 + + ```shell + $ ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ + ``` + +9. 完成安装,执行如下命令,启动Apache HTTP服务。 + + ```shell + $ systemctl enable httpd.service + $ systemctl start httpd.service + ``` + +10. 安装OpenStackClient + + ```shell + $ yum install python2-openstackclient + ``` + +11. 创建 OpenStack client 环境脚本 + + 创建admin用户的环境变量脚本: + + ```shell + # vim admin-openrc + + export OS_PROJECT_DOMAIN_NAME=Default + export OS_USER_DOMAIN_NAME=Default + export OS_PROJECT_NAME=admin + export OS_USERNAME=admin + export OS_PASSWORD=ADMIN_PASS + export OS_AUTH_URL=http://controller:5000/v3 + export OS_IDENTITY_API_VERSION=3 + export OS_IMAGE_API_VERSION=2 + ``` + + 替换ADMIN_PASS为admin用户的密码, 与上述`keystone-manage bootstrap` 命令中设置的密码一致 + 运行脚本加载环境变量: + + ```shell + $ source admin-openrc + ``` + +12. 分别执行如下命令,创建domain, projects, users, roles。 + + 创建domain ‘example’: + + ```shell + $ openstack domain create --description "An Example Domain" example + ``` + + 注:domain ‘default’在 keystone-manage bootstrap 时已创建 + + 创建project ‘service’: + + ```shell + $ openstack project create --domain default --description "Service Project" service + ``` + + 创建(non-admin)project ’myproject‘,user ’myuser‘ 和 role ’myrole‘,为‘myproject’和‘myuser’添加角色‘myrole’: + + ```shell + $ openstack project create --domain default --description "Demo Project" myproject + $ openstack user create --domain default --password-prompt myuser + $ openstack role create myrole + $ openstack role add --project myproject --user myuser myrole + ``` + +13. 验证 + + 取消临时环境变量OS_AUTH_URL和OS_PASSWORD: + + ```shell + $ unset OS_AUTH_URL OS_PASSWORD + ``` + + 为admin用户请求token: + + ```shell + $ openstack --os-auth-url http://controller:5000/v3 \ + --os-project-domain-name Default --os-user-domain-name Default \ + --os-project-name admin --os-username admin token issue + ``` + + 为myuser用户请求token: + + ```shell + $ openstack --os-auth-url http://controller:5000/v3 \ + --os-project-domain-name Default --os-user-domain-name Default \ + --os-project-name myproject --os-username myuser token issue + ``` + + +### Glance 安装 + +1. 创建数据库、服务凭证和 API 端点 + + 创建数据库: + + 以 root 用户访问数据库,创建 glance 数据库并授权。 + + ```shell + $ mysql -u root -p + ``` + + + + ```sql + MariaDB [(none)]> CREATE DATABASE glance; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \ + IDENTIFIED BY 'GLANCE_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \ + IDENTIFIED BY 'GLANCE_DBPASS'; + MariaDB [(none)]> exit + ``` + + 替换 GLANCE_DBPASS,为 glance 数据库设置密码。 + + ```shell + $ source admin-openrc + ``` + + 执行以下命令,分别完成创建 glance 服务凭证、创建glance用户和添加‘admin’角色到用户‘glance’。 + + ```shell + $ openstack user create --domain default --password-prompt glance + $ openstack role add --project service --user glance admin + $ openstack service create --name glance --description "OpenStack Image" image + ``` + 创建镜像服务API端点: + + ```shell + $ openstack endpoint create --region RegionOne image public http://controller:9292 + $ openstack endpoint create --region RegionOne image internal http://controller:9292 + $ openstack endpoint create --region RegionOne image admin http://controller:9292 + ``` + +2. 安装和配置 + + 安装软件包: + + ```shell + $ yum install openstack-glance-$RockyVer + ``` + 配置glance: + + 编辑 `/etc/glance/glance-api.conf` 文件: + + 在[database]部分,配置数据库入口 + + 在[keystone_authtoken] [paste_deploy]部分,配置身份认证服务入口 + + 在[glance_store]部分,配置本地文件系统存储和镜像文件的位置 + + ```ini + [database] + # ... + connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance + [keystone_authtoken] + # ... + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = glance + password = GLANCE_PASS + [paste_deploy] + # ... + flavor = keystone + [glance_store] + # ... + stores = file,http + default_store = file + filesystem_store_datadir = /var/lib/glance/images/ + ``` + + 编辑 `/etc/glance/glance-registry.conf` 文件: + + 在[database]部分,配置数据库入口 + + 在[keystone_authtoken] [paste_deploy]部分,配置身份认证服务入口 + + ```ini + [database] + # ... + connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance + [keystone_authtoken] + # ... + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = glance + password = GLANCE_PASS + [paste_deploy] + # ... + flavor = keystone + ``` + + 其中,替换 GLANCE_DBPASS 为 glance 数据库的密码,替换 GLANCE_PASS 为 glance 用户的密码。 + + 同步数据库: + + ```shell + $ su -s /bin/sh -c "glance-manage db_sync" glance + ``` + 启动镜像服务: + + ```shell + $ systemctl enable openstack-glance-api.service openstack-glance-registry.service + $ systemctl start openstack-glance-api.service openstack-glance-registry.service + ``` + +3. 验证 + + 下载镜像 + ```shell + $ source admin-openrc + # 注意:如果您使用的环境是鲲鹏架构,请下载arm64版本的镜像。 + $ wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img + ``` + + 向Image服务上传镜像: + + ```shell + $ glance image-create --name "cirros" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --visibility=public + ``` + + 确认镜像上传并验证属性: + + ```shell + $ glance image-list + ``` +### Nova 安装 + +1. 创建数据库、服务凭证和 API 端点 + + 创建数据库: + + 作为root用户访问数据库,创建nova、nova_api、nova_cell0 数据库并授权 + + ```shell + $ mysql -u root -p + ``` + + ```SQL + MariaDB [(none)]> CREATE DATABASE nova_api; + MariaDB [(none)]> CREATE DATABASE nova; + MariaDB [(none)]> CREATE DATABASE nova_cell0; + MariaDB [(none)]> CREATE DATABASE placement; + + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' \ + IDENTIFIED BY 'PLACEMENT_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' \ + IDENTIFIED BY 'PLACEMENT_DBPASS'; + MariaDB [(none)]> exit + ``` + 替换NOVA_DBPASS及PLACEMENT_DBPASS,为nova及placement数据库设置密码 + + 执行如下命令,完成创建nova服务凭证、创建nova用户以及添加‘admin’角色到用户‘nova’。 + + ```shell + $ . admin-openrc + $ openstack user create --domain default --password-prompt nova + $ openstack role add --project service --user nova admin + $ openstack service create --name nova --description "OpenStack Compute" compute + ``` + + 创建计算服务API端点: + + ```shell + $ openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 + $ openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1 + $ openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1 + ``` + + 创建placement用户并添加‘admin’角色到用户‘placement’: + ```shell + $ openstack user create --domain default --password-prompt placement + $ openstack role add --project service --user placement admin + ``` + + 创建placement服务凭证及API服务端点: + ```shell + $ openstack service create --name placement --description "Placement API" placement + $ openstack endpoint create --region RegionOne placement public http://controller:8778 + $ openstack endpoint create --region RegionOne placement internal http://controller:8778 + $ openstack endpoint create --region RegionOne placement admin http://controller:8778 + ``` + +2. 安装和配置 + + 安装软件包: + + ```shell + $ yum install openstack-nova-api-$RockyVer openstack-nova-conductor-$RockyVer \ + openstack-nova-novncproxy-$RockyVer openstack-nova-scheduler-$RockyVer openstack-nova-compute-$RockyVer \ + openstack-nova-placement-api-$RockyVer openstack-nova-console-$RockyVer + ``` + + 配置nova: + + 编辑 `/etc/nova/nova.conf` 文件: + + 在[default]部分,启用计算和元数据的API,配置RabbitMQ消息队列入口,配置my_ip,启用网络服务neutron; + + 在[api_database] [database] [placement_database]部分,配置数据库入口; + + 在[api] [keystone_authtoken]部分,配置身份认证服务入口; + + 在[vnc]部分,启用并配置远程控制台入口; + + 在[glance]部分,配置镜像服务API的地址; + + 在[oslo_concurrency]部分,配置lock path; + + 在[placement]部分,配置placement服务的入口。 + + ```ini + [DEFAULT] + # ... + enabled_apis = osapi_compute,metadata + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + my_ip = 10.0.0.11 + use_neutron = true + firewall_driver = nova.virt.firewall.NoopFirewallDriver + compute_driver = libvirt.LibvirtDriver + instances_path = /var/lib/nova/instances/ + [api_database] + # ... + connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api + [database] + # ... + connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova + [placement_database] + # ... + connection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement + [api] + # ... + auth_strategy = keystone + [keystone_authtoken] + # ... + www_authenticate_uri = http://controller:5000/ + auth_url = http://controller:5000/ + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = nova + password = NOVA_PASS + [vnc] + enabled = true + # ... + server_listen = $my_ip + server_proxyclient_address = $my_ip + novncproxy_base_url = http://controller:6080/vnc_auto.html + [glance] + # ... + api_servers = http://controller:9292 + [oslo_concurrency] + # ... + lock_path = /var/lib/nova/tmp + [placement] + # ... + region_name = RegionOne + project_domain_name = Default + project_name = service + auth_type = password + user_domain_name = Default + auth_url = http://controller:5000/v3 + username = placement + password = PLACEMENT_PASS + [neutron] + # ... + auth_url = http://controller:5000 + auth_type = password + project_domain_name = Default + user_domain_name = Default + region_name = RegionOne + project_name = service + username = neutron + password = NEUTRON_PASS + ``` + + 替换RABBIT_PASS为RabbitMQ中openstack账户的密码; + + 配置my_ip为控制节点的管理IP地址; + + 替换NOVA_DBPASS为nova数据库的密码; + + 替换PLACEMENT_DBPASS为placement数据库的密码; + + 替换NOVA_PASS为nova用户的密码; + + 替换PLACEMENT_PASS为placement用户的密码; + + 替换NEUTRON_PASS为neutron用户的密码; + + 编辑`/etc/httpd/conf.d/00-nova-placement-api.conf`,增加Placement API接入配置 + + ```xml + + = 2.4> + Require all granted + + + Order allow,deny + Allow from all + + + ``` + + 重启httpd服务: + + ```shell + $ systemctl restart httpd + ``` + + 同步nova-api数据库: + + ```shell + $ su -s /bin/sh -c "nova-manage api_db sync" nova + ``` + 注册cell0数据库: + + ```shell + $ su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova + ``` + 创建cell1 cell: + + ```shell + $ su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova + ``` + 同步nova数据库: + + ```shell + $ su -s /bin/sh -c "nova-manage db sync" nova + ``` + 验证cell0和cell1注册正确: + + ```shell + su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova + ``` + 确定是否支持虚拟机硬件加速(x86架构): + + ```shell + $ egrep -c '(vmx|svm)' /proc/cpuinfo + ``` + + 如果返回值为0则不支持硬件加速,需要配置libvirt使用QEMU而不是KVM: + **注意:** 如果是在ARM64的服务器上,还需要在配置`cpu_mode`为`custom`,`cpu_model`为`cortex-a72` + + ```ini + # vim /etc/nova/nova.conf + [libvirt] + # ... + virt_type = qemu + cpu_mode = custom + cpu_model = cortex-a72 + ``` + 如果返回值为1或更大的值,则支持硬件加速,不需要进行额外的配置 + + ***注意*** + + **如果为arm64结构,还需要在`compute`节点执行以下命令** + + ```shell + mkdir -p /usr/share/AAVMF + ln -s /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw \ + /usr/share/AAVMF/AAVMF_CODE.fd + ln -s /usr/share/edk2/aarch64/vars-template-pflash.raw \ + /usr/share/AAVMF/AAVMF_VARS.fd + chown nova:nova /usr/share/AAVMF -R + + vim /etc/libvirt/qemu.conf + + nvram = ["/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd", + "/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2/aarch64/vars-template-pflash.raw" + ] + ``` + + 启动计算服务及其依赖项,并配置其开机启动: + + ```shell + $ systemctl enable \ + openstack-nova-api.service \ + openstack-nova-scheduler.service \ + openstack-nova-conductor.service \ + openstack-nova-novncproxy.service + $ systemctl start \ + openstack-nova-api.service \ + openstack-nova-scheduler.service \ + openstack-nova-conductor.service \ + openstack-nova-novncproxy.service + ``` + ```bash + $ systemctl enable libvirtd.service openstack-nova-compute.service + $ systemctl start libvirtd.service openstack-nova-compute.service + ``` + 添加计算节点到cell数据库: + + 确认计算节点存在: + + ```bash + $ . admin-openrc + $ openstack compute service list --service nova-compute + ``` + 注册计算节点: + + ```bash + $ su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova + ``` + +3. 验证 + + ```shell + $ . admin-openrc + ``` + 列出服务组件,验证每个流程都成功启动和注册: + + ```shell + $ openstack compute service list + ``` + + 列出身份服务中的API端点,验证与身份服务的连接: + + ```shell + $ openstack catalog list + ``` + + 列出镜像服务中的镜像,验证与镜像服务的连接: + + ```shell + $ openstack image list + ``` + + 检查cells和placement API是否运作成功,以及其他必要条件是否已具备。 + + ```shell + $ nova-status upgrade check + ``` +### Neutron 安装 + +1. 创建数据库、服务凭证和 API 端点 + + 创建数据库: + + 作为root用户访问数据库,创建 neutron 数据库并授权。 + + ```shell + $ mysql -u root -p + ``` + + ```sql + MariaDB [(none)]> CREATE DATABASE neutron; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \ + IDENTIFIED BY 'NEUTRON_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \ + IDENTIFIED BY 'NEUTRON_DBPASS'; + MariaDB [(none)]> exit + ``` + 替换NEUTRON_DBPASS,为neutron数据库设置密码。 + + ```shell + $ . admin-openrc + ``` + 执行如下命令,完成创建 neutron 服务凭证、创建neutron用户和添加‘admin’角色到‘neutron’用户操作。 + + 创建neutron服务 + + ```shell + $ openstack user create --domain default --password-prompt neutron + $ openstack role add --project service --user neutron admin + $ openstack service create --name neutron --description "OpenStack Networking" network + ``` + 创建网络服务API端点: + + ```shell + $ openstack endpoint create --region RegionOne network public http://controller:9696 + $ openstack endpoint create --region RegionOne network internal http://controller:9696 + $ openstack endpoint create --region RegionOne network admin http://controller:9696 + ``` + +2. 安装和配置 Self-service 网络 + + 安装软件包: + + ```shell + $ yum install openstack-neutron-$RockyVer openstack-neutron-ml2-$RockyVer \ + openstack-neutron-linuxbridge-$RockyVer ebtables ipset + ``` + 配置neutron: + + 编辑 /etc/neutron/neutron.conf 文件: + + 在[database]部分,配置数据库入口; + + 在[default]部分,启用ml2插件和router插件,允许ip地址重叠,配置RabbitMQ消息队列入口; + + 在[default] [keystone]部分,配置身份认证服务入口; + + 在[default] [nova]部分,配置网络来通知计算网络拓扑的变化; + + 在[oslo_concurrency]部分,配置lock path。 + + ```ini + [database] + # ... + connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron + [DEFAULT] + # ... + core_plugin = ml2 + service_plugins = router + allow_overlapping_ips = true + transport_url = rabbit://openstack:RABBIT_PASS@controller + auth_strategy = keystone + notify_nova_on_port_status_changes = true + notify_nova_on_port_data_changes = true + [keystone_authtoken] + # ... + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = neutron + password = NEUTRON_PASS + [nova] + # ... + auth_url = http://controller:5000 + auth_type = password + project_domain_name = Default + user_domain_name = Default + region_name = RegionOne + project_name = service + username = nova + password = NOVA_PASS + [oslo_concurrency] + # ... + lock_path = /var/lib/neutron/tmp + ``` + + 替换NEUTRON_DBPASS为neutron数据库的密码; + + 替换RABBIT_PASS为RabbitMQ中openstack账户的密码; + + 替换NEUTRON_PASS为neutron用户的密码; + + 替换NOVA_PASS为nova用户的密码。 + + 配置ML2插件: + + 编辑 /etc/neutron/plugins/ml2/ml2_conf.ini 文件: + + 在[ml2]部分,启用 flat、vlan、vxlan 网络,启用网桥及 layer-2 population 机制,启用端口安全扩展驱动; + + 在[ml2_type_flat]部分,配置 flat 网络为 provider 虚拟网络; + + 在[ml2_type_vxlan]部分,配置 VXLAN 网络标识符范围; + + 在[securitygroup]部分,配置允许 ipset。 + + ```ini + # vim /etc/neutron/plugins/ml2/ml2_conf.ini + [ml2] + # ... + type_drivers = flat,vlan,vxlan + tenant_network_types = vxlan + mechanism_drivers = linuxbridge,l2population + extension_drivers = port_security + [ml2_type_flat] + # ... + flat_networks = provider + [ml2_type_vxlan] + # ... + vni_ranges = 1:1000 + [securitygroup] + # ... + enable_ipset = true + ``` + 配置 Linux bridge 代理: + + 编辑 /etc/neutron/plugins/ml2/linuxbridge_agent.ini 文件: + + 在[linux_bridge]部分,映射 provider 虚拟网络到物理网络接口; + + 在[vxlan]部分,启用 vxlan 覆盖网络,配置处理覆盖网络的物理网络接口 IP 地址,启用 layer-2 population; + + 在[securitygroup]部分,允许安全组,配置 linux bridge iptables 防火墙驱动。 + + ```ini + [linux_bridge] + physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME + [vxlan] + enable_vxlan = true + local_ip = OVERLAY_INTERFACE_IP_ADDRESS + l2_population = true + [securitygroup] + # ... + enable_security_group = true + firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver + ``` + 替换PROVIDER_INTERFACE_NAME为物理网络接口; + + 替换OVERLAY_INTERFACE_IP_ADDRESS为控制节点的管理IP地址。 + + 配置Layer-3代理: + + 编辑 /etc/neutron/l3_agent.ini 文件: + + 在[default]部分,配置接口驱动为linuxbridge + + ```ini + [DEFAULT] + # ... + interface_driver = linuxbridge + ``` + 配置DHCP代理: + + 编辑 /etc/neutron/dhcp_agent.ini 文件: + + 在[default]部分,配置linuxbridge接口驱动、Dnsmasq DHCP驱动,启用隔离的元数据。 + + ```ini + [DEFAULT] + # ... + interface_driver = linuxbridge + dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq + enable_isolated_metadata = true + ``` + 配置metadata代理: + + 编辑 /etc/neutron/metadata_agent.ini 文件: + + 在[default]部分,配置元数据主机和shared secret。 + + ```ini + [DEFAULT] + # ... + nova_metadata_host = controller + metadata_proxy_shared_secret = METADATA_SECRET + ``` + 替换METADATA_SECRET为合适的元数据代理secret。 + + +3. 配置计算服务 + + 编辑 /etc/nova/nova.conf 文件: + + 在[neutron]部分,配置访问参数,启用元数据代理,配置secret。 + + ```ini + [neutron] + # ... + auth_url = http://controller:5000 + auth_type = password + project_domain_name = Default + user_domain_name = Default + region_name = RegionOne + project_name = service + username = neutron + password = NEUTRON_PASS + service_metadata_proxy = true + metadata_proxy_shared_secret = METADATA_SECRET + ``` + + 替换NEUTRON_PASS为neutron用户的密码; + + 替换METADATA_SECRET为合适的元数据代理secret。 + + + +4. 完成安装 + + 添加配置文件链接: + + ```shell + $ ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini + ``` + + 同步数据库: + + ```shell + $ su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \ + --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron + ``` + + 重启计算API服务: + + ```shell + $ systemctl restart openstack-nova-api.service + ``` + + 启动网络服务并配置开机启动: + + ```shell + $ systemctl enable neutron-server.service \ + neutron-linuxbridge-agent.service neutron-dhcp-agent.service \ + neutron-metadata-agent.service + $ systemctl start neutron-server.service \ + neutron-linuxbridge-agent.service neutron-dhcp-agent.service \ + neutron-metadata-agent.service + $ systemctl enable neutron-l3-agent.service + $ systemctl start neutron-l3-agent.service + ``` + +5. 验证 + + 列出代理验证 neutron 代理启动成功: + + ```shell + $ openstack network agent list + ``` + + +### Cinder 安装 + + +1. 创建数据库、服务凭证和 API 端点 + + 创建数据库: + + 作为root用户访问数据库,创建cinder数据库并授权。 + + ```shell + $ mysql -u root -p + MariaDB [(none)]> CREATE DATABASE cinder; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \ + IDENTIFIED BY 'CINDER_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \ + IDENTIFIED BY 'CINDER_DBPASS'; + MariaDB [(none)]> exit + ``` + 替换CINDER_DBPASS,为cinder数据库设置密码。 + + ```shell + $ source admin-openrc + ``` + + 创建cinder服务凭证: + + 创建cinder用户 + + 添加‘admin’角色到用户‘cinder’ + + 创建cinderv2和cinderv3服务 + + ```shell + $ openstack user create --domain default --password-prompt cinder + $ openstack role add --project service --user cinder admin + $ openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2 + $ openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3 + ``` + 创建块存储服务API端点: + + ```shell + $ openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s + $ openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s + $ openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s + $ openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s + $ openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s + $ openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s + ``` + +2. 安装和配置控制节点 + + 安装软件包: + + ```shell + $ yum install openstack-cinder-$RockyVer + ``` + 配置cinder: + + 编辑 `/etc/cinder/cinder.conf` 文件: + + 在[database]部分,配置数据库入口; + + 在[DEFAULT]部分,配置RabbitMQ消息队列入口,配置my_ip; + + 在[DEFAULT] [keystone_authtoken]部分,配置身份认证服务入口; + + 在[oslo_concurrency]部分,配置lock path。 + + ```ini + [database] + # ... + connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder + [DEFAULT] + # ... + transport_url = rabbit://openstack:RABBIT_PASS@controller + auth_strategy = keystone + my_ip = 10.0.0.11 + [keystone_authtoken] + # ... + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = cinder + password = CINDER_PASS + [oslo_concurrency] + # ... + lock_path = /var/lib/cinder/tmp + ``` + 替换CINDER_DBPASS为cinder数据库的密码; + + 替换RABBIT_PASS为RabbitMQ中openstack账户的密码; + + 配置my_ip为控制节点的管理IP地址; + + 替换CINDER_PASS为cinder用户的密码; + + 同步数据库: + + ```shell + $ su -s /bin/sh -c "cinder-manage db sync" cinder + ``` + 配置计算使用块存储: + + 编辑 /etc/nova/nova.conf 文件。 + + ```ini + [cinder] + os_region_name = RegionOne + ``` + 完成安装: + + 重启计算API服务 + + ```shell + $ systemctl restart openstack-nova-api.service + ``` + 启动块存储服务 + + ```shell + $ systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service + $ systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service + ``` + +3. 安装和配置存储节点(LVM) + + 安装软件包: + + ```shell + $ yum install lvm2 device-mapper-persistent-data scsi-target-utils python2-keystone \ + openstack-cinder-volume-$RockyVer + ``` + + 创建LVM物理卷 /dev/sdb: + + ```shell + $ pvcreate /dev/sdb + ``` + 创建LVM卷组 cinder-volumes: + + ```shell + $ vgcreate cinder-volumes /dev/sdb + ``` + 编辑 /etc/lvm/lvm.conf 文件: + + 在devices部分,添加过滤以接受/dev/sdb设备拒绝其他设备。 + + ```ini + devices { + + # ... + + filter = [ "a/sdb/", "r/.*/"] + ``` + + 编辑 `/etc/cinder/cinder.conf` 文件: + + 在[lvm]部分,使用LVM驱动、cinder-volumes卷组、iSCSI协议和适当的iSCSI服务配置LVM后端。 + + 在[DEFAULT]部分,启用LVM后端,配置镜像服务API的位置。 + + ```ini + [lvm] + volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver + volume_group = cinder-volumes + target_protocol = iscsi + target_helper = lioadm + [DEFAULT] + # ... + enabled_backends = lvm + glance_api_servers = http://controller:9292 + ``` + + ***注意*** + + 当cinder使用tgtadm的方式挂卷的时候,要修改/etc/tgt/tgtd.conf,内容如下,保证tgtd可以发现cinder-volume的iscsi target。 + + ``` + include /var/lib/cinder/volumes/* + ``` + 完成安装: + + ```shell + $ systemctl enable openstack-cinder-volume.service tgtd.service iscsid.service + $ systemctl start openstack-cinder-volume.service tgtd.service iscsid.service + ``` + +4. 安装和配置存储节点(ceph RBD) + + 安装软件包: + + ```shell + $ yum install ceph-common python2-rados python2-rbd python2-keystone openstack-cinder-volume-$RockyVer + ``` + + 在[DEFAULT]部分,启用LVM后端,配置镜像服务API的位置。 + + ```ini + [DEFAULT] + enabled_backends = ceph-rbd + ``` + + 添加ceph rbd配置部分,配置块命名与enabled_backends中保持一致 + + ```ini + [ceph-rbd] + glance_api_version = 2 + rados_connect_timeout = -1 + rbd_ceph_conf = /etc/ceph/ceph.conf + rbd_flatten_volume_from_snapshot = False + rbd_max_clone_depth = 5 + rbd_pool = # RBD存储池名称 + rbd_secret_uuid = # 随机生成SECRET UUID + rbd_store_chunk_size = 4 + rbd_user = + volume_backend_name = ceph-rbd + volume_driver = cinder.volume.drivers.rbd.RBDDriver + ``` + + 配置存储节点ceph客户端,需要保证/etc/ceph/目录中包含ceph集群访问配置,包括ceph.conf以及keyring + + ```shell + [root@openeuler ~]# ll /etc/ceph + -rw-r--r-- 1 root root 82 Jun 16 17:11 ceph.client..keyring + -rw-r--r-- 1 root root 1.5K Jun 16 17:11 ceph.conf + -rw-r--r-- 1 root root 92 Jun 16 17:11 rbdmap + ``` + + 在存储节点检查ceph集群是否正常可访问 + + ```shell + [root@openeuler ~]# ceph --user cinder -s + cluster: + id: b7b2fac6-420f-4ec1-aea2-4862d29b4059 + health: HEALTH_OK + + services: + mon: 3 daemons, quorum VIRT01,VIRT02,VIRT03 + mgr: VIRT03(active), standbys: VIRT02, VIRT01 + mds: cephfs_virt-1/1/1 up {0=VIRT03=up:active}, 2 up:standby + osd: 15 osds: 15 up, 15 in + + data: + pools: 7 pools, 1416 pgs + objects: 5.41M objects, 19.8TiB + usage: 49.3TiB used, 59.9TiB / 109TiB avail + pgs: 1414 active + + io: + client: 2.73MiB/s rd, 22.4MiB/s wr, 3.21kop/s rd, 1.19kop/s wr + ``` + + 启动服务 + + ```shell + $ systemctl enable openstack-cinder-volume.service + $ systemctl start openstack-cinder-volume.service + ``` + + + +5. 安装和配置备份服务 + + 编辑 /etc/cinder/cinder.conf 文件: + + 在[DEFAULT]部分,配置备份选项 + + ```ini + [DEFAULT] + # ... + # 注意: openEuler 21.03中没有提供OpenStack Swift软件包,需要用户自行安装。或者使用其他的备份后端,例如,NFS。NFS已经过测试验证,可以正常使用。 + backup_driver = cinder.backup.drivers.swift.SwiftBackupDriver + backup_swift_url = SWIFT_URL + ``` + 替换SWIFT_URL为对象存储服务的URL,该URL可以通过对象存储API端点找到: + + ```shell + $ openstack catalog show object-store + ``` + 完成安装: + + ```shell + $ systemctl enable openstack-cinder-backup.service + $ systemctl start openstack-cinder-backup.service + ``` + +6. 验证 + + 列出服务组件验证每个步骤成功: + ```shell + $ source admin-openrc + $ openstack volume service list + ``` + + 注:目前暂未对swift组件进行支持,有条件的同学可以配置对接ceph。 + +### Horizon 安装 + +1. 安装软件包 + + ```shell + $ yum install openstack-dashboard-$RockyVer + ``` +2. 修改文件`/usr/share/openstack-dashboard/openstack_dashboard/local/local_settings.py` + + 修改变量 + + ```ini + ALLOWED_HOSTS = ['*', ] + OPENSTACK_HOST = "controller" + OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST + OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True + SESSION_ENGINE = 'django.contrib.sessions.backends.cache' + CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + 'LOCATION': 'controller:11211', + } + } + ``` + 新增变量 + ```ini + OPENSTACK_API_VERSIONS = { + "identity": 3, + "image": 2, + "volume": 3, + } + WEBROOT = "/dashboard/" + COMPRESS_OFFLINE = True + OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default" + OPENSTACK_KEYSTONE_DEFAULT_ROLE = "admin" + LOGIN_URL = '/dashboard/auth/login/' + LOGOUT_URL = '/dashboard/auth/logout/' + ``` +3. 修改文件/etc/httpd/conf.d/openstack-dashboard.conf + ```xml + WSGIDaemonProcess dashboard + WSGIProcessGroup dashboard + WSGISocketPrefix run/wsgi + WSGIApplicationGroup %{GLOBAL} + + WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi + Alias /dashboard/static /usr/share/openstack-dashboard/static + + + Options All + AllowOverride All + Require all granted + + + + Options All + AllowOverride All + Require all granted + + ``` +4. 在/usr/share/openstack-dashboard目录下执行 + ```shell + $ ./manage.py compress + ``` +5. 重启 httpd 服务 + ```shell + $ systemctl restart httpd + ``` +5. 验证 + 打开浏览器,输入网址http://,登录 horizon。 + +### Tempest 安装 + +Tempest是OpenStack的集成测试服务,如果用户需要全面自动化测试已安装的OpenStack环境的功能,则推荐使用该组件。否则,可以不用安装 + +1. 安装Tempest + ```shell + $ yum install openstack-tempest-$RockyVer + ``` +2. 初始化目录 + + ```shell + $ tempest init mytest + ``` +3. 修改配置文件。 + + ```shell + $ cd mytest + $ vi etc/tempest.conf + ``` + tempest.conf中需要配置当前OpenStack环境的信息,具体内容可以参考[官方示例](https://docs.openstack.org/tempest/latest/sampleconf.html) + +4. 执行测试 + + ```shell + $ tempest run + ``` + +### Ironic 安装 + +Ironic是OpenStack的裸金属服务,如果用户需要进行裸机部署则推荐使用该组件。否则,可以不用安装。 + +1. 设置数据库 + + 裸金属服务在数据库中存储信息,创建一个**ironic**用户可以访问的**ironic**数据库,替换**IRONIC_DBPASSWORD**为合适的密码 + + ```shell + $ mysql -u root -p + ``` + + ```sql + MariaDB [(none)]> CREATE DATABASE ironic CHARACTER SET utf8; + + MariaDB [(none)]> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'localhost' \ + IDENTIFIED BY 'IRONIC_DBPASSWORD'; + + MariaDB [(none)]> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'%' \ + IDENTIFIED BY 'IRONIC_DBPASSWORD'; + ``` + +2. 安装软件包 + + ```shell + yum install openstack-ironic-api-$RockyVer openstack-ironic-conductor-$RockyVer python2-ironicclient + ``` + + 启动服务 + + ```shell + systemctl enable openstack-ironic-api openstack-ironic-conductor + systemctl start openstack-ironic-api openstack-ironic-conductor + ``` + +3. 组件安装与配置 + + ##### 创建服务用户认证 + + 1、创建Bare Metal服务用户 + + ```shell + $ openstack user create --password IRONIC_PASSWORD \ + --email ironic@example.com ironic + $ openstack role add --project service --user ironic admin + $ openstack service create --name ironic --description \ + "Ironic baremetal provisioning service" baremetal + ``` + + 2、创建Bare Metal服务访问入口 + + ```shell + $ openstack endpoint create --region RegionOne baremetal admin http://$IRONIC_NODE:6385 + $ openstack endpoint create --region RegionOne baremetal public http://$IRONIC_NODE:6385 + $ openstack endpoint create --region RegionOne baremetal internal http://$IRONIC_NODE:6385 + ``` + + ##### 配置ironic-api服务 + + 配置文件路径/etc/ironic/ironic.conf + + 1、通过**connection**选项配置数据库的位置,如下所示,替换**IRONIC_DBPASSWORD**为**ironic**用户的密码,替换**DB_IP**为DB服务器所在的IP地址: + + ```ini + [database] + + # The SQLAlchemy connection string used to connect to the + # database (string value) + + connection = mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic + ``` + + 2、通过以下选项配置ironic-api服务使用RabbitMQ消息代理,替换**RPC_\***为RabbitMQ的详细地址和凭证 + + ```ini + [DEFAULT] + + # A URL representing the messaging driver to use and its full + # configuration. (string value) + + transport_url = rabbit://RPC_USER:RPC_PASSWORD@RPC_HOST:RPC_PORT/ + ``` + + 用户也可自行使用json-rpc方式替换rabbitmq + + 3、配置ironic-api服务使用身份认证服务的凭证,替换**PUBLIC_IDENTITY_IP**为身份认证服务器的公共IP,替换**PRIVATE_IDENTITY_IP**为身份认证服务器的私有IP,替换**IRONIC_PASSWORD**为身份认证服务中**ironic**用户的密码: + + ```ini + [DEFAULT] + + # Authentication strategy used by ironic-api: one of + # "keystone" or "noauth". "noauth" should not be used in a + # production environment because all authentication will be + # disabled. (string value) + + auth_strategy=keystone + force_config_drive = True + + [keystone_authtoken] + # Authentication type to load (string value) + auth_type=password + # Complete public Identity API endpoint (string value) + www_authenticate_uri=http://PUBLIC_IDENTITY_IP:5000 + # Complete admin Identity API endpoint. (string value) + auth_url=http://PRIVATE_IDENTITY_IP:5000 + # Service username. (string value) + username=ironic + # Service account password. (string value) + password=IRONIC_PASSWORD + # Service tenant name. (string value) + project_name=service + # Domain name containing project (string value) + project_domain_name=Default + # User's domain name (string value) + user_domain_name=Default + ``` + + 4、需要在配置文件中指定ironic日志目录 + + ``` + [DEFAULT] + log_dir = /var/log/ironic/ + ``` + + 5、创建裸金属服务数据库表 + + ```shell + $ ironic-dbsync --config-file /etc/ironic/ironic.conf create_schema + ``` + + 6、重启ironic-api服务 + + ```shell + $ systemctl restart openstack-ironic-api + ``` + + ##### 配置ironic-conductor服务 + + 1、替换**HOST_IP**为conductor host的IP + + ```ini + [DEFAULT] + + # IP address of this host. If unset, will determine the IP + # programmatically. If unable to do so, will use "127.0.0.1". + # (string value) + + my_ip=HOST_IP + ``` + + 2、配置数据库的位置,ironic-conductor应该使用和ironic-api相同的配置。替换**IRONIC_DBPASSWORD**为**ironic**用户的密码,替换DB_IP为DB服务器所在的IP地址: + + ```ini + [database] + + # The SQLAlchemy connection string to use to connect to the + # database. (string value) + + connection = mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic + ``` + + 3、通过以下选项配置ironic-api服务使用RabbitMQ消息代理,ironic-conductor应该使用和ironic-api相同的配置,替换**RPC_\***为RabbitMQ的详细地址和凭证 + + ```ini + [DEFAULT] + + # A URL representing the messaging driver to use and its full + # configuration. (string value) + + transport_url = rabbit://RPC_USER:RPC_PASSWORD@RPC_HOST:RPC_PORT/ + ``` + + 用户也可自行使用json-rpc方式替换rabbitmq + + 4、配置凭证访问其他OpenStack服务 + + 为了与其他OpenStack服务进行通信,裸金属服务在请求其他服务时需要使用服务用户与OpenStack Identity服务进行认证。这些用户的凭据必须在与相应服务相关的每个配置文件中进行配置。 + + [neutron] - 访问Openstack网络服务 + [glance] - 访问Openstack镜像服务 + [swift] - 访问Openstack对象存储服务 + [cinder] - 访问Openstack块存储服务 + [inspector] - 访问Openstack裸金属introspection服务 + [service_catalog] - 一个特殊项用于保存裸金属服务使用的凭证,该凭证用于发现注册在Openstack身份认证服务目录中的自己的API URL端点 + + 简单起见,可以对所有服务使用同一个服务用户。为了向后兼容,该用户应该和ironic-api服务的[keystone_authtoken]所配置的为同一个用户。但这不是必须的,也可以为每个服务创建并配置不同的服务用户。 + + 在下面的示例中,用户访问openstack网络服务的身份验证信息配置为: + + 网络服务部署在名为RegionOne的身份认证服务域中,仅在服务目录中注册公共端点接口 + + 请求时使用特定的CA SSL证书进行HTTPS连接 + + 与ironic-api服务配置相同的服务用户 + + 动态密码认证插件基于其他选项发现合适的身份认证服务API版本 + + ```ini + [neutron] + + # Authentication type to load (string value) + auth_type = password + # Authentication URL (string value) + auth_url=https://IDENTITY_IP:5000/ + # Username (string value) + username=ironic + # User's password (string value) + password=IRONIC_PASSWORD + # Project name to scope to (string value) + project_name=service + # Domain ID containing project (string value) + project_domain_id=default + # User's domain id (string value) + user_domain_id=default + # PEM encoded Certificate Authority to use when verifying + # HTTPs connections. (string value) + cafile=/opt/stack/data/ca-bundle.pem + # The default region_name for endpoint URL discovery. (string + # value) + region_name = RegionOne + # List of interfaces, in order of preference, for endpoint + # URL. (list value) + valid_interfaces=public + ``` + + 默认情况下,为了与其他服务进行通信,裸金属服务会尝试通过身份认证服务的服务目录发现该服务合适的端点。如果希望对一个特定服务使用一个不同的端点,则在裸金属服务的配置文件中通过endpoint_override选项进行指定: + + ```ini + [neutron] + # ... + endpoint_override = + ``` + + 5、配置允许的驱动程序和硬件类型 + + 通过设置enabled_hardware_types设置ironic-conductor服务允许使用的硬件类型: + + ```ini + [DEFAULT] + enabled_hardware_types = ipmi + ``` + + 配置硬件接口: + + ```ini + enabled_boot_interfaces = pxe + enabled_deploy_interfaces = direct,iscsi + enabled_inspect_interfaces = inspector + enabled_management_interfaces = ipmitool + enabled_power_interfaces = ipmitool + ``` + + 配置接口默认值: + + ```ini + [DEFAULT] + default_deploy_interface = direct + default_network_interface = neutron + ``` + + 如果启用了任何使用Direct deploy的驱动,必须安装和配置镜像服务的Swift后端。Ceph对象网关(RADOS网关)也支持作为镜像服务的后端。 + + 6、重启ironic-conductor服务 + + ```shell + $ systemctl restart openstack-ironic-conductor + ``` + +4. deploy ramdisk镜像制作 + + 目前ramdisk镜像支持通过ironic python agent builder来进行制作,这里介绍下使用这个工具构建ironic使用的deploy镜像的完整过程。(用户也可以根据自己的情况获取ironic-python-agent,这里提供使用ipa-builder制作ipa方法) + + ##### 安装 ironic-python-agent-builder + + 1. 安装工具: + + ```shell + $ pip install ironic-python-agent-builder-$RockyVer + ``` + + 2. 修改以下文件中的python解释器: + + ```shell + $ /usr/bin/yum /usr/libexec/urlgrabber-ext-down + ``` + + 3. 安装其它必须的工具: + + ```shell + $ yum install git + ``` + + 由于`DIB`依赖`semanage`命令,所以在制作镜像之前确定该命令是否可用:`semanage --help`,如果提示无此命令,安装即可: + + ```shell + # 先查询需要安装哪个包 + [root@localhost ~]# yum provides /usr/sbin/semanage + 已加载插件:fastestmirror + Loading mirror speeds from cached hostfile + * base: mirror.vcu.edu + * extras: mirror.vcu.edu + * updates: mirror.math.princeton.edu + policycoreutils-python-2.5-34.el7.aarch64 : SELinux policy core python utilities + 源 :base + 匹配来源: + 文件名 :/usr/sbin/semanage + # 安装 + [root@localhost ~]# yum install policycoreutils-python + ``` + + ##### 制作镜像 + + 如果是`aarch64`架构,还需要添加: + + ```shell + $ export ARCH=aarch64 + ``` + + ###### 普通镜像 + + 基本用法: + + ```shell + usage: ironic-python-agent-builder [-h] [-r RELEASE] [-o OUTPUT] [-e ELEMENT] + [-b BRANCH] [-v] [--extra-args EXTRA_ARGS] + distribution + + positional arguments: + distribution Distribution to use + + optional arguments: + -h, --help show this help message and exit + -r RELEASE, --release RELEASE + Distribution release to use + -o OUTPUT, --output OUTPUT + Output base file name + -e ELEMENT, --element ELEMENT + Additional DIB element to use + -b BRANCH, --branch BRANCH + If set, override the branch that is used for ironic- + python-agent and requirements + -v, --verbose Enable verbose logging in diskimage-builder + --extra-args EXTRA_ARGS + Extra arguments to pass to diskimage-builder + ``` + + 举例说明: + + ```shell + $ ironic-python-agent-builder centos -o /mnt/ironic-agent-ssh -b origin/stable/rocky + ``` + + ###### 允许ssh登陆 + + 初始化环境变量,然后制作镜像: + + ```shell + $ export DIB_DEV_USER_USERNAME=ipa \ + $ export DIB_DEV_USER_PWDLESS_SUDO=yes \ + $ export DIB_DEV_USER_PASSWORD='123' + $ ironic-python-agent-builder centos -o /mnt/ironic-agent-ssh -b origin/stable/rocky -e selinux-permissive -e devuser + ``` + + ###### 指定代码仓库 + + 初始化对应的环境变量,然后制作镜像: + + ```ini + # 指定仓库地址以及版本 + DIB_REPOLOCATION_ironic_python_agent=git@172.20.2.149:liuzz/ironic-python-agent.git + DIB_REPOREF_ironic_python_agent=origin/develop + + # 直接从gerrit上clone代码 + DIB_REPOLOCATION_ironic_python_agent=https://review.opendev.org/openstack/ironic-python-agent + DIB_REPOREF_ironic_python_agent=refs/changes/43/701043/1 + ``` + + 参考:[source-repositories](https://docs.openstack.org/diskimage-builder/latest/elements/source-repositories/README.html)。 + + 指定仓库地址及版本验证成功。 + +在Rocky中,我们还提供了ironic-inspector等服务,用户可根据自身需求安装。 + +### Kolla 安装 + +Kolla为OpenStack服务提供生产环境可用的容器化部署的功能。openEuler 20.03 LTS SP2中已经引入了Kolla和Kolla-ansible服务,但是Kolla 以及 Kolla-ansible 原生并不支持 openEuler, +因此 Openstack SIG 在openEuler 20.03 LTS SP3中提供了 `openstack-kolla-plugin` 和 `openstack-kolla-ansible-plugin` 这两个补丁包。 + +Kolla的安装十分简单,只需要安装对应的RPM包即可 + +支持 openEuler 版本: + +```shell +yum install openstack-kolla-plugin openstack-kolla-ansible-plugin +``` + +不支持 openEuler 版本: + +```shell +yum install openstack-kolla-$RockyVer openstack-kolla-ansible-$RockyVer +``` + +安装完后,就可以使用`kolla-ansible`, `kolla-build`, `kolla-genpwd`, `kolla-mergepwd`等命令了。 + +### Trove 安装 + +Trove是OpenStack的数据库服务,如果用户使用OpenStack提供的数据库服务则推荐使用该组件。否则,可以不用安装。 + +1. 设置数据库 + + 数据库服务在数据库中存储信息,创建一个**trove**用户可以访问**trove**数据库,替换**TROVE_DBPASSWORD**为对应密码 + + ```shell + $ mysql -u root -p + ``` + + ```sql + MariaDB [(none)]> CREATE DATABASE trove CHARACTER SET utf8; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'localhost' \ + IDENTIFIED BY 'TROVE_DBPASSWORD'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'%' \ + IDENTIFIED BY 'TROVE_DBPASSWORD'; + ``` + +2. 创建服务用户认证 + + 1、创建**Trove**服务用户 + + ```shell + $ openstack user create --password TROVE_PASSWORD \ + --email trove@example.com trove + $ openstack role add --project service --user trove admin + $ openstack service create --name trove + --description "Database service" database + ``` + **解释:** `TROVE_PASSWORD` 替换为`trove`用户的密码 + + 2、创建**Database**服务访问入口 + + ```shell + $ openstack endpoint create --region RegionOne database public http://$TROVE_NODE:8779/v1.0/%\(tenant_id\)s + $ openstack endpoint create --region RegionOne database internal http://$TROVE_NODE:8779/v1.0/%\(tenant_id\)s + $ openstack endpoint create --region RegionOne database admin http://$TROVE_NODE:8779/v1.0/%\(tenant_id\)s + ``` + **解释:** `$TROVE_NODE` 替换为Trove的API服务部署节点 + +3. 安装和配置**Trove**各组件 + + 1、安装**Trove**包 + + ```shell + $ yum install openstack-trove-$RockyVer python2-troveclient + ``` + 2、配置`/etc/trove/trove.conf` + + ```ini + [DEFAULT] + bind_host=TROVE_NODE_IP + log_dir = /var/log/trove + + auth_strategy = keystone + # Config option for showing the IP address that nova doles out + add_addresses = True + network_label_regex = ^NETWORK_LABEL$ + api_paste_config = /etc/trove/api-paste.ini + + trove_auth_url = http://controller:35357/v3/ + nova_compute_url = http://controller:8774/v2 + cinder_url = http://controller:8776/v1 + + nova_proxy_admin_user = admin + nova_proxy_admin_pass = ADMIN_PASS + nova_proxy_admin_tenant_name = service + taskmanager_manager = trove.taskmanager.manager.Manager + use_nova_server_config_drive = True + + # Set these if using Neutron Networking + network_driver=trove.network.neutron.NeutronDriver + network_label_regex=.* + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + + [database] + connection = mysql+pymysql://trove:TROVE_DBPASS@controller/trove + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000/v3/ + auth_url=http://controller:35357/v3/ + #auth_uri = http://controller/identity + #auth_url = http://controller/identity_admin + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = trove + password = TROVE_PASS + + ``` + **解释:** + - `[Default]`分组中`bind_host`配置为Trove部署节点的IP + - `nova_compute_url` 和 `cinder_url` 为Nova和Cinder在Keystone中创建的endpoint + - `nova_proxy_XXX` 为一个能访问Nova服务的用户信息,上例中使用`admin`用户为例 + - `transport_url` 为`RabbitMQ`连接信息,`RABBIT_PASS`替换为RabbitMQ的密码 + - `[database]`分组中的`connection` 为前面在mysql中为Trove创建的数据库信息 + - Trove的用户信息中`TROVE_PASS`替换为实际trove用户的密码 + + 3、配置`/etc/trove/trove-taskmanager.conf` + + ```ini + [DEFAULT] + log_dir = /var/log/trove + trove_auth_url = http://controller/identity/v2.0 + nova_compute_url = http://controller:8774/v2 + cinder_url = http://controller:8776/v1 + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + + [database] + connection = mysql+pymysql://trove:TROVE_DBPASS@controller/trove + ``` + **解释:** 参照`trove.conf`配置 + 4、配置`/etc/trove/trove-conductor.conf` + + ```ini + [DEFAULT] + log_dir = /var/log/trove + trove_auth_url = http://controller/identity/v2.0 + nova_compute_url = http://controller:8774/v2 + cinder_url = http://controller:8776/v1 + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + + [database] + connection = mysql+pymysql://trove:trove@controller/trove + ``` + **解释:** 参照`trove.conf`配置 + + 5、配置`/etc/trove/trove-guestagent.conf` + + ```ini + [DEFAULT] + rabbit_host = controller + rabbit_password = RABBIT_PASS + nova_proxy_admin_user = admin + nova_proxy_admin_pass = ADMIN_PASS + nova_proxy_admin_tenant_name = service + trove_auth_url = http://controller/identity_admin/v2.0 + ``` + **解释:** `guestagent`是trove中一个独立组件,需要预先内置到Trove通过Nova创建的虚拟 + 机镜像中,在创建好数据库实例后,会起guestagent进程,负责通过消息队列(RabbitMQ)向Trove上 + 报心跳,因此需要配置RabbitMQ的用户和密码信息。 + + 6、生成数据`Trove`数据库表 + + ```shell + $ su -s /bin/sh -c "trove-manage db_sync" trove + ``` + +4. 完成安装配置 + 1、配置**Trove**服务自启动 + + ```shell + $ systemctl enable openstack-trove-api.service \ + openstack-trove-taskmanager.service \ + openstack-trove-conductor.service + ``` + 2、启动服务 + + ```shell + $ systemctl start openstack-trove-api.service \ + openstack-trove-taskmanager.service \ + openstack-trove-conductor.service + ``` + +### Rally 安装 + +Rally是OpenStack提供的性能测试工具。只需要简单的安装即可。 + +``` +yum install openstack-rally openstack-rally-plugins +``` diff --git a/docs/zh/docs/thirdparty_migration/OpenStack-train.md b/docs/zh/docs/thirdparty_migration/OpenStack-train.md new file mode 100644 index 0000000000000000000000000000000000000000..281ac95eec10425b28fe9ac3e584366977506104 --- /dev/null +++ b/docs/zh/docs/thirdparty_migration/OpenStack-train.md @@ -0,0 +1,2842 @@ +# OpenStack-Train 部署指南 + + + +- [OpenStack-Train 部署指南](#openstack-train-部署指南) + - [OpenStack 简介](#openstack-简介) + - [约定](#约定) + - [准备环境](#准备环境) + - [环境配置](#环境配置) + - [安装 SQL DataBase](#安装-sql-database) + - [安装 RabbitMQ](#安装-rabbitmq) + - [安装 Memcached](#安装-memcached) + - [安装 OpenStack](#安装-openstack) + - [Keystone 安装](#keystone-安装) + - [Glance 安装](#glance-安装) + - [Placement安装](#placement安装) + - [Nova 安装](#nova-安装) + - [Neutron 安装](#neutron-安装) + - [Cinder 安装](#cinder-安装) + - [horizon 安装](#horizon-安装) + - [Tempest 安装](#tempest-安装) + - [Ironic 安装](#ironic-安装) + - [Kolla 安装](#kolla-安装) + - [Trove 安装](#trove-安装) + - [Swift 安装](#swift-安装) + - [Cyborg 安装](#cyborg-安装) + - [Aodh 安装](#aodh-安装) + - [Gnocchi 安装](#gnocchi-安装) + - [Ceilometer 安装](#ceilometer-安装) + - [Heat 安装](#heat-安装) + + +## OpenStack 简介 + +OpenStack 是一个社区,也是一个项目。它提供了一个部署云的操作平台或工具集,为组织提供可扩展的、灵活的云计算。 + +作为一个开源的云计算管理平台,OpenStack 由nova、cinder、neutron、glance、keystone、horizon等几个主要的组件组合起来完成具体工作。OpenStack 支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack 通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供 API 进行集成。 + +openEuler 20.03-LTS-SP3 版本官方源已经支持 OpenStack-Train 版本,用户可以配置好 yum 源后根据此文档进行 OpenStack 部署。 + +## 约定 + +OpenStack 支持多种形态部署,此文档支持`ALL in One`以及`Distributed`两种部署方式,按照如下方式约定: + +`ALL in One`模式: + +```text +忽略所有可能的后缀 +``` + +`Distributed`模式: + +```text +以 `(CTL)` 为后缀表示此条配置或者命令仅适用`控制节点` +以 `(CPT)` 为后缀表示此条配置或者命令仅适用`计算节点` +以 `(STG)` 为后缀表示此条配置或者命令仅适用`存储节点` +除此之外表示此条配置或者命令同时适用`控制节点`和`计算节点` +``` + +***注意*** + +涉及到以上约定的服务如下: + +- Cinder +- Nova +- Neutron + +## 准备环境 + +### 环境配置 + +1. 配置 20.03-LTS-SP3 官方yum源,需要启用EPOL软件仓以支持OpenStack + + ```shell + cat << EOF >> /etc/yum.repos.d/20.03-LTS-SP3-OpenStack_Train.repo + [OS] + name=OS + baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/$basearch/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/$basearch/RPM-GPG-KEY-openEuler + + [everything] + name=everything + baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/everything/$basearch/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/everything/$basearch/RPM-GPG-KEY-openEuler + + [EPOL] + name=EPOL + baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/EPOL/$basearch/ + enabled=1 + gpgcheck=1 + gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/$basearch/RPM-GPG-KEY-openEuler + EOF + + yum clean all && yum makecache + ``` + +2. 修改主机名以及映射 + + 设置各个节点的主机名 + + ```shell + hostnamectl set-hostname controller (CTL) + hostnamectl set-hostname compute (CPT) + ``` + + 假设controller节点的IP是`10.0.0.11`,compute节点的IP是`10.0.0.12`(如果存在的话),则于`/etc/hosts`新增如下: + + ```shell + 10.0.0.11 controller + 10.0.0.12 compute + ``` + +### 安装 SQL DataBase + +1. 执行如下命令,安装软件包。 + + ```shell + yum install mariadb mariadb-server python3-PyMySQL + ``` + +2. 执行如下命令,创建并编辑 `/etc/my.cnf.d/openstack.cnf` 文件。 + + ```shell + vim /etc/my.cnf.d/openstack.cnf + + [mysqld] + bind-address = 10.0.0.11 + default-storage-engine = innodb + innodb_file_per_table = on + max_connections = 4096 + collation-server = utf8_general_ci + character-set-server = utf8 + ``` + + ***注意*** + + **其中 `bind-address` 设置为控制节点的管理IP地址。** + +3. 启动 DataBase 服务,并为其配置开机自启动: + + ```shell + systemctl enable mariadb.service + systemctl start mariadb.service + ``` + +4. 配置DataBase的默认密码(可选) + + ```shell + mysql_secure_installation + ``` + + ***注意*** + + **根据提示进行即可** + +### 安装 RabbitMQ + +1. 执行如下命令,安装软件包。 + + ```shell + yum install rabbitmq-server + ``` + +2. 启动 RabbitMQ 服务,并为其配置开机自启动。 + + ```shell + systemctl enable rabbitmq-server.service + systemctl start rabbitmq-server.service + ``` + +3. 添加 OpenStack用户。 + + ```shell + rabbitmqctl add_user openstack RABBIT_PASS + ``` + + ***注意*** + + **替换 `RABBIT_PASS`,为 OpenStack 用户设置密码** + +4. 设置openstack用户权限,允许进行配置、写、读: + + ```shell + rabbitmqctl set_permissions openstack ".*" ".*" ".*" + ``` + +### 安装 Memcached + +1. 执行如下命令,安装依赖软件包。 + + ```shell + yum install memcached python3-memcached + ``` + +2. 编辑 `/etc/sysconfig/memcached` 文件。 + + ```shell + vim /etc/sysconfig/memcached + + OPTIONS="-l 127.0.0.1,::1,controller" + ``` + +3. 执行如下命令,启动 Memcached 服务,并为其配置开机启动。 + + ```shell + systemctl enable memcached.service + systemctl start memcached.service + ``` + + ***注意*** + + **服务启动后,可以通过命令`memcached-tool controller stats`确保启动正常,服务可用,其中可以将`controller`替换为控制节点的管理IP地址。** + +## 安装 OpenStack + +### Keystone 安装 + +1. 创建 keystone 数据库并授权。 + + ``` sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE keystone; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ + IDENTIFIED BY 'KEYSTONE_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ + IDENTIFIED BY 'KEYSTONE_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***注意*** + + **替换 `KEYSTONE_DBPASS`,为 Keystone 数据库设置密码** + +2. 安装软件包。 + + ```shell + yum install openstack-keystone httpd mod_wsgi + ``` + +3. 配置keystone相关配置 + + ```shell + vim /etc/keystone/keystone.conf + + [database] + connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone + + [token] + provider = fernet + ``` + + ***解释*** + + [database]部分,配置数据库入口 + + [token]部分,配置token provider + + ***注意:*** + + **替换 `KEYSTONE_DBPASS` 为 Keystone 数据库的密码** + +4. 同步数据库。 + + ```shell + su -s /bin/sh -c "keystone-manage db_sync" keystone + ``` + +5. 初始化Fernet密钥仓库。 + + ```shell + keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone + keystone-manage credential_setup --keystone-user keystone --keystone-group keystone + ``` + +6. 启动服务。 + + ```shell + keystone-manage bootstrap --bootstrap-password ADMIN_PASS \ + --bootstrap-admin-url http://controller:5000/v3/ \ + --bootstrap-internal-url http://controller:5000/v3/ \ + --bootstrap-public-url http://controller:5000/v3/ \ + --bootstrap-region-id RegionOne + ``` + + ***注意*** + + **替换 `ADMIN_PASS`,为 admin 用户设置密码** + +7. 配置Apache HTTP server + + ```shell + vim /etc/httpd/conf/httpd.conf + + ServerName controller + ``` + + ```shell + ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ + ``` + + ***解释*** + + 配置 `ServerName` 项引用控制节点 + + ***注意*** + **如果 `ServerName` 项不存在则需要创建** + +8. 启动Apache HTTP服务。 + + ```shell + systemctl enable httpd.service + systemctl start httpd.service + ``` + +9. 创建环境变量配置。 + + ```shell + cat << EOF >> ~/.admin-openrc + export OS_PROJECT_DOMAIN_NAME=Default + export OS_USER_DOMAIN_NAME=Default + export OS_PROJECT_NAME=admin + export OS_USERNAME=admin + export OS_PASSWORD=ADMIN_PASS + export OS_AUTH_URL=http://controller:5000/v3 + export OS_IDENTITY_API_VERSION=3 + export OS_IMAGE_API_VERSION=2 + EOF + ``` + + ***注意*** + + **替换 `ADMIN_PASS` 为 admin 用户的密码** + +10. 依次创建domain, projects, users, roles,需要先安装好python3-openstackclient: + + ```shell + yum install python3-openstackclient + ``` + + 导入环境变量 + + ```shell + source ~/.admin-openrc + ``` + + 创建project `service`,其中 domain `default` 在 keystone-manage bootstrap 时已创建 + + ```shell + openstack domain create --description "An Example Domain" example + ``` + + ```shell + openstack project create --domain default --description "Service Project" service + ``` + + 创建(non-admin)project `myproject`,user `myuser` 和 role `myrole`,为 `myproject` 和 `myuser` 添加角色`myrole` + + ```shell + openstack project create --domain default --description "Demo Project" myproject + openstack user create --domain default --password-prompt myuser + openstack role create myrole + openstack role add --project myproject --user myuser myrole + ``` + +11. 验证 + + 取消临时环境变量OS_AUTH_URL和OS_PASSWORD: + + ```shell + source ~/.admin-openrc + unset OS_AUTH_URL OS_PASSWORD + ``` + + 为admin用户请求token: + + ```shell + openstack --os-auth-url http://controller:5000/v3 \ + --os-project-domain-name Default --os-user-domain-name Default \ + --os-project-name admin --os-username admin token issue + ``` + + 为myuser用户请求token: + + ```shell + openstack --os-auth-url http://controller:5000/v3 \ + --os-project-domain-name Default --os-user-domain-name Default \ + --os-project-name myproject --os-username myuser token issue + ``` + +### Glance 安装 + +1. 创建数据库、服务凭证和 API 端点 + + 创建数据库: + + ```sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE glance; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \ + IDENTIFIED BY 'GLANCE_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \ + IDENTIFIED BY 'GLANCE_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***注意:*** + + **替换 `GLANCE_DBPASS`,为 glance 数据库设置密码** + + 创建服务凭证 + + ```shell + source ~/.admin-openrc + + openstack user create --domain default --password-prompt glance + openstack role add --project service --user glance admin + openstack service create --name glance --description "OpenStack Image" image + ``` + + 创建镜像服务API端点: + + ```shell + openstack endpoint create --region RegionOne image public http://controller:9292 + openstack endpoint create --region RegionOne image internal http://controller:9292 + openstack endpoint create --region RegionOne image admin http://controller:9292 + ``` + +2. 安装软件包 + + ```shell + yum install openstack-glance + ``` + +3. 配置glance相关配置: + + ```shell + vim /etc/glance/glance-api.conf + + [database] + connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = glance + password = GLANCE_PASS + + [paste_deploy] + flavor = keystone + + [glance_store] + stores = file,http + default_store = file + filesystem_store_datadir = /var/lib/glance/images/ + ``` + + ***解释:*** + + [database]部分,配置数据库入口 + + [keystone_authtoken] [paste_deploy]部分,配置身份认证服务入口 + + [glance_store]部分,配置本地文件系统存储和镜像文件的位置 + + ***注意*** + + **替换 `GLANCE_DBPASS` 为 glance 数据库的密码** + + **替换 `GLANCE_PASS` 为 glance 用户的密码** + +4. 同步数据库: + + ```shell + su -s /bin/sh -c "glance-manage db_sync" glance + ``` + +5. 启动服务: + + ```shell + systemctl enable openstack-glance-api.service + systemctl start openstack-glance-api.service + ``` + +6. 验证 + + 下载镜像 + + ```shell + source ~/.admin-openrc + + wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img + ``` + + ***注意*** + + **如果您使用的环境是鲲鹏架构,请下载aarch64版本的镜像;已对镜像cirros-0.5.2-aarch64-disk.img进行测试。** + + 向Image服务上传镜像: + + ```shell + openstack image create --disk-format qcow2 --container-format bare \ + --file cirros-0.4.0-x86_64-disk.img --public cirros + ``` + + 确认镜像上传并验证属性: + + ```shell + openstack image list + ``` + +### Placement安装 + +1. 创建数据库、服务凭证和 API 端点 + + 创建数据库: + + 作为 root 用户访问数据库,创建 placement 数据库并授权。 + + ```shell + mysql -u root -p + MariaDB [(none)]> CREATE DATABASE placement; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' \ + IDENTIFIED BY 'PLACEMENT_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' \ + IDENTIFIED BY 'PLACEMENT_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***注意*** + + **替换 `PLACEMENT_DBPASS` 为 placement 数据库设置密码** + + ```shell + source admin-openrc + ``` + + 执行如下命令,创建 placement 服务凭证、创建 placement 用户以及添加‘admin’角色到用户‘placement’。 + + 创建Placement API服务 + + ```shell + openstack user create --domain default --password-prompt placement + openstack role add --project service --user placement admin + openstack service create --name placement --description "Placement API" placement + ``` + + 创建placement服务API端点: + + ```shell + openstack endpoint create --region RegionOne placement public http://controller:8778 + openstack endpoint create --region RegionOne placement internal http://controller:8778 + openstack endpoint create --region RegionOne placement admin http://controller:8778 + ``` + +2. 安装和配置 + + 安装软件包: + + ```shell + yum install openstack-placement-api + ``` + + 配置placement: + + 编辑 /etc/placement/placement.conf 文件: + + 在[placement_database]部分,配置数据库入口 + + 在[api] [keystone_authtoken]部分,配置身份认证服务入口 + + ```shell + # vim /etc/placement/placement.conf + [placement_database] + # ... + connection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement + [api] + # ... + auth_strategy = keystone + [keystone_authtoken] + # ... + auth_url = http://controller:5000/v3 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = placement + password = PLACEMENT_PASS + ``` + + 其中,替换 PLACEMENT_DBPASS 为 placement 数据库的密码,替换 PLACEMENT_PASS 为 placement 用户的密码。 + + 同步数据库: + + ```shell + su -s /bin/sh -c "placement-manage db sync" placement + ``` + + 启动httpd服务: + + ```shell + systemctl restart httpd + ``` + +3. 验证 + + 执行如下命令,执行状态检查: + + ```shell + . admin-openrc + placement-status upgrade check + ``` + + 安装osc-placement,列出可用的资源类别及特性: + + ```shell + yum install python3-osc-placement + openstack --os-placement-api-version 1.2 resource class list --sort-column name + openstack --os-placement-api-version 1.6 trait list --sort-column name + ``` + +### Nova 安装 + +1. 创建数据库、服务凭证和 API 端点 + + 创建数据库: + + ```sql + mysql -u root -p (CTL) + + MariaDB [(none)]> CREATE DATABASE nova_api; + MariaDB [(none)]> CREATE DATABASE nova; + MariaDB [(none)]> CREATE DATABASE nova_cell0; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \ + IDENTIFIED BY 'NOVA_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***注意*** + + **替换NOVA_DBPASS,为nova数据库设置密码** + + ```shell + source ~/.admin-openrc (CTL) + ``` + + 创建nova服务凭证: + + ```shell + openstack user create --domain default --password-prompt nova (CTL) + openstack role add --project service --user nova admin (CTL) + openstack service create --name nova --description "OpenStack Compute" compute (CTL) + ``` + + 创建nova API端点: + + ```shell + openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 (CTL) + openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1 (CTL) + openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1 (CTL) + ``` + +2. 安装软件包 + + ```shell + yum install openstack-nova-api openstack-nova-conductor \ (CTL) + openstack-nova-novncproxy openstack-nova-scheduler + + yum install openstack-nova-compute (CPT) + ``` + + ***注意*** + + **如果为arm64结构,还需要执行以下命令** + + ```shell + yum install edk2-aarch64 (CPT) + ``` + +3. 配置nova相关配置 + + ```shell + vim /etc/nova/nova.conf + + [DEFAULT] + enabled_apis = osapi_compute,metadata + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ + my_ip = 10.0.0.1 + use_neutron = true + firewall_driver = nova.virt.firewall.NoopFirewallDriver + compute_driver=libvirt.LibvirtDriver (CPT) + instances_path = /var/lib/nova/instances/ (CPT) + lock_path = /var/lib/nova/tmp (CPT) + + [api_database] + connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api (CTL) + + [database] + connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova (CTL) + + [api] + auth_strategy = keystone + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000/ + auth_url = http://controller:5000/ + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = nova + password = NOVA_PASS + + [vnc] + enabled = true + server_listen = $my_ip + server_proxyclient_address = $my_ip + novncproxy_base_url = http://controller:6080/vnc_auto.html (CPT) + + [glance] + api_servers = http://controller:9292 + + [oslo_concurrency] + lock_path = /var/lib/nova/tmp (CTL) + + [placement] + region_name = RegionOne + project_domain_name = Default + project_name = service + auth_type = password + user_domain_name = Default + auth_url = http://controller:5000/v3 + username = placement + password = PLACEMENT_PASS + + [neutron] + auth_url = http://controller:5000 + auth_type = password + project_domain_name = default + user_domain_name = default + region_name = RegionOne + project_name = service + username = neutron + password = NEUTRON_PASS + service_metadata_proxy = true (CTL) + metadata_proxy_shared_secret = METADATA_SECRET (CTL) + ``` + + ***解释*** + + [default]部分,启用计算和元数据的API,配置RabbitMQ消息队列入口,配置my_ip,启用网络服务neutron; + + [api_database] [database]部分,配置数据库入口; + + [api] [keystone_authtoken]部分,配置身份认证服务入口; + + [vnc]部分,启用并配置远程控制台入口; + + [glance]部分,配置镜像服务API的地址; + + [oslo_concurrency]部分,配置lock path; + + [placement]部分,配置placement服务的入口。 + + ***注意*** + + **替换 `RABBIT_PASS` 为 RabbitMQ 中 openstack 账户的密码;** + + **配置 `my_ip` 为控制节点的管理IP地址;** + + **替换 `NOVA_DBPASS` 为nova数据库的密码;** + + **替换 `NOVA_PASS` 为nova用户的密码;** + + **替换 `PLACEMENT_PASS` 为placement用户的密码;** + + **替换 `NEUTRON_PASS` 为neutron用户的密码;** + + **替换`METADATA_SECRET`为合适的元数据代理secret。** + + **额外** + + 确定是否支持虚拟机硬件加速(x86架构): + + ```shell + egrep -c '(vmx|svm)' /proc/cpuinfo (CPT) + ``` + + 如果返回值为0则不支持硬件加速,需要配置libvirt使用QEMU而不是KVM: + + ```shell + vim /etc/nova/nova.conf (CPT) + + [libvirt] + virt_type = qemu + ``` + + 如果返回值为1或更大的值,则支持硬件加速,则`virt_type`可以配置为`kvm` + + ***注意*** + + **如果为arm64结构,还需要在计算节点执行以下命令** + + ```shell + + mkdir -p /usr/share/AAVMF + chown nova:nova /usr/share/AAVMF + + ln -s /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw \ + /usr/share/AAVMF/AAVMF_CODE.fd + ln -s /usr/share/edk2/aarch64/vars-template-pflash.raw \ + /usr/share/AAVMF/AAVMF_VARS.fd + + vim /etc/libvirt/qemu.conf + + nvram = ["/usr/share/AAVMF/AAVMF_CODE.fd: \ + /usr/share/AAVMF/AAVMF_VARS.fd", \ + "/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw: \ + /usr/share/edk2/aarch64/vars-template-pflash.raw"] + ``` + + 并且当ARM架构下的部署环境为嵌套虚拟化时,`libvirt`配置如下: + + ```shell + [libvirt] + virt_type = qemu + cpu_mode = custom + cpu_model = cortex-a72 + ``` + +4. 同步数据库 + + 同步nova-api数据库: + + ```shell + su -s /bin/sh -c "nova-manage api_db sync" nova (CTL) + ``` + + 注册cell0数据库: + + ```shell + su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova (CTL) + ``` + + 创建cell1 cell: + + ```shell + su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova (CTL) + ``` + + 同步nova数据库: + + ```shell + su -s /bin/sh -c "nova-manage db sync" nova (CTL) + ``` + + 验证cell0和cell1注册正确: + + ```shell + su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova (CTL) + ``` + + 添加计算节点到openstack集群 + + ```shell + su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova (CTL) + ``` + +5. 启动服务 + + ```shell + systemctl enable \ (CTL) + openstack-nova-api.service \ + openstack-nova-scheduler.service \ + openstack-nova-conductor.service \ + openstack-nova-novncproxy.service + + systemctl start \ (CTL) + openstack-nova-api.service \ + openstack-nova-scheduler.service \ + openstack-nova-conductor.service \ + openstack-nova-novncproxy.service + ``` + + ```shell + systemctl enable libvirtd.service openstack-nova-compute.service (CPT) + systemctl start libvirtd.service openstack-nova-compute.service (CPT) + ``` + +6. 验证 + + ```shell + source ~/.admin-openrc (CTL) + ``` + + 列出服务组件,验证每个流程都成功启动和注册: + + ```shell + openstack compute service list (CTL) + ``` + + 列出身份服务中的API端点,验证与身份服务的连接: + + ```shell + openstack catalog list (CTL) + ``` + + 列出镜像服务中的镜像,验证与镜像服务的连接: + + ```shell + openstack image list (CTL) + ``` + + 检查cells是否运作成功,以及其他必要条件是否已具备。 + + ```shell + nova-status upgrade check (CTL) + ``` + +### Neutron 安装 + +1. 创建数据库、服务凭证和 API 端点 + + 创建数据库: + + ```sql + mysql -u root -p (CTL) + + MariaDB [(none)]> CREATE DATABASE neutron; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \ + IDENTIFIED BY 'NEUTRON_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \ + IDENTIFIED BY 'NEUTRON_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***注意*** + + **替换 `NEUTRON_DBPASS` 为 neutron 数据库设置密码。** + + ```shell + source ~/.admin-openrc (CTL) + ``` + + 创建neutron服务凭证 + + ```shell + openstack user create --domain default --password-prompt neutron (CTL) + openstack role add --project service --user neutron admin (CTL) + openstack service create --name neutron --description "OpenStack Networking" network (CTL) + ``` + + 创建Neutron服务API端点: + + ```shell + openstack endpoint create --region RegionOne network public http://controller:9696 (CTL) + openstack endpoint create --region RegionOne network internal http://controller:9696 (CTL) + openstack endpoint create --region RegionOne network admin http://controller:9696 (CTL) + ``` + +2. 安装软件包: + + ```shell + yum install openstack-neutron openstack-neutron-linuxbridge ebtables ipset \ (CTL) + openstack-neutron-ml2 + ``` + + ```shell + yum install openstack-neutron-linuxbridge ebtables ipset (CPT) + ``` + +3. 配置neutron相关配置: + + 配置主体配置 + + ```shell + vim /etc/neutron/neutron.conf + + [database] + connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron (CTL) + + [DEFAULT] + core_plugin = ml2 (CTL) + service_plugins = router (CTL) + allow_overlapping_ips = true (CTL) + transport_url = rabbit://openstack:RABBIT_PASS@controller + auth_strategy = keystone + notify_nova_on_port_status_changes = true (CTL) + notify_nova_on_port_data_changes = true (CTL) + api_workers = 3 (CTL) + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = neutron + password = NEUTRON_PASS + + [nova] + auth_url = http://controller:5000 (CTL) + auth_type = password (CTL) + project_domain_name = Default (CTL) + user_domain_name = Default (CTL) + region_name = RegionOne (CTL) + project_name = service (CTL) + username = nova (CTL) + password = NOVA_PASS (CTL) + + [oslo_concurrency] + lock_path = /var/lib/neutron/tmp + ``` + + ***解释*** + + [database]部分,配置数据库入口; + + [default]部分,启用ml2插件和router插件,允许ip地址重叠,配置RabbitMQ消息队列入口; + + [default] [keystone]部分,配置身份认证服务入口; + + [default] [nova]部分,配置网络来通知计算网络拓扑的变化; + + [oslo_concurrency]部分,配置lock path。 + + ***注意*** + + **替换`NEUTRON_DBPASS`为 neutron 数据库的密码;** + + **替换`RABBIT_PASS`为 RabbitMQ中openstack 账户的密码;** + + **替换`NEUTRON_PASS`为 neutron 用户的密码;** + + **替换`NOVA_PASS`为 nova 用户的密码。** + + 配置ML2插件: + + ```shell + vim /etc/neutron/plugins/ml2/ml2_conf.ini + + [ml2] + type_drivers = flat,vlan,vxlan + tenant_network_types = vxlan + mechanism_drivers = linuxbridge,l2population + extension_drivers = port_security + + [ml2_type_flat] + flat_networks = provider + + [ml2_type_vxlan] + vni_ranges = 1:1000 + + [securitygroup] + enable_ipset = true + ``` + + 创建/etc/neutron/plugin.ini的符号链接 + + ```shell + ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini + ``` + + **注意** + + **[ml2]部分,启用 flat、vlan、vxlan 网络,启用 linuxbridge 及 l2population 机制,启用端口安全扩展驱动;** + + **[ml2_type_flat]部分,配置 flat 网络为 provider 虚拟网络;** + + **[ml2_type_vxlan]部分,配置 VXLAN 网络标识符范围;** + + **[securitygroup]部分,配置允许 ipset。** + + **补充** + + **l2 的具体配置可以根据用户需求自行修改,本文使用的是provider network + linuxbridge** + + 配置 Linux bridge 代理: + + ```shell + vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini + + [linux_bridge] + physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME + + [vxlan] + enable_vxlan = true + local_ip = OVERLAY_INTERFACE_IP_ADDRESS + l2_population = true + + [securitygroup] + enable_security_group = true + firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver + ``` + + ***解释*** + + [linux_bridge]部分,映射 provider 虚拟网络到物理网络接口; + + [vxlan]部分,启用 vxlan 覆盖网络,配置处理覆盖网络的物理网络接口 IP 地址,启用 layer-2 population; + + [securitygroup]部分,允许安全组,配置 linux bridge iptables 防火墙驱动。 + + ***注意*** + + **替换`PROVIDER_INTERFACE_NAME`为物理网络接口;** + + **替换`OVERLAY_INTERFACE_IP_ADDRESS`为控制节点的管理IP地址。** + + 配置Layer-3代理: + + ```shell + vim /etc/neutron/l3_agent.ini (CTL) + + [DEFAULT] + interface_driver = linuxbridge + ``` + + ***解释*** + + 在[default]部分,配置接口驱动为linuxbridge + + 配置DHCP代理: + + ```shell + vim /etc/neutron/dhcp_agent.ini (CTL) + + [DEFAULT] + interface_driver = linuxbridge + dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq + enable_isolated_metadata = true + ``` + + ***解释*** + + [default]部分,配置linuxbridge接口驱动、Dnsmasq DHCP驱动,启用隔离的元数据。 + + 配置metadata代理: + + ```shell + vim /etc/neutron/metadata_agent.ini (CTL) + + [DEFAULT] + nova_metadata_host = controller + metadata_proxy_shared_secret = METADATA_SECRET + ``` + + ***解释*** + + [default]部分,配置元数据主机和shared secret。 + + ***注意*** + + **替换`METADATA_SECRET`为合适的元数据代理secret。** + +4. 配置nova相关配置 + + ```shell + vim /etc/nova/nova.conf + + [neutron] + auth_url = http://controller:5000 + auth_type = password + project_domain_name = Default + user_domain_name = Default + region_name = RegionOne + project_name = service + username = neutron + password = NEUTRON_PASS + service_metadata_proxy = true (CTL) + metadata_proxy_shared_secret = METADATA_SECRET (CTL) + ``` + + ***解释*** + + [neutron]部分,配置访问参数,启用元数据代理,配置secret。 + + ***注意*** + + **替换`NEUTRON_PASS`为 neutron 用户的密码;** + + **替换`METADATA_SECRET`为合适的元数据代理secret。** + +5. 同步数据库: + + ```shell + su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \ + --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron + ``` + +6. 重启计算API服务: + + ```shell + systemctl restart openstack-nova-api.service + ``` + +7. 启动网络服务 + + ```shell + systemctl enable neutron-server.service neutron-linuxbridge-agent.service \ (CTL) + neutron-dhcp-agent.service neutron-metadata-agent.service \ + neutron-l3-agent.service + + systemctl restart neutron-server.service neutron-linuxbridge-agent.service \ (CTL) + neutron-dhcp-agent.service neutron-metadata-agent.service \ + neutron-l3-agent.service + + systemctl enable neutron-linuxbridge-agent.service (CPT) + systemctl restart neutron-linuxbridge-agent.service openstack-nova-compute.service (CPT) + ``` + +8. 验证 + + 验证 neutron 代理启动成功: + + ```shell + openstack network agent list + ``` + +### Cinder 安装 + +1. 创建数据库、服务凭证和 API 端点 + + 创建数据库: + + ```sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE cinder; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \ + IDENTIFIED BY 'CINDER_DBPASS'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \ + IDENTIFIED BY 'CINDER_DBPASS'; + MariaDB [(none)]> exit + ``` + + ***注意*** + + **替换 `CINDER_DBPASS` 为cinder数据库设置密码。** + + ```shell + source ~/.admin-openrc + ``` + + 创建cinder服务凭证: + + ```shell + openstack user create --domain default --password-prompt cinder + openstack role add --project service --user cinder admin + openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2 + openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3 + ``` + + 创建块存储服务API端点: + + ```shell + openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s + openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s + openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s + openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s + openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s + openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s + ``` + +2. 安装软件包: + + ```shell + yum install openstack-cinder-api openstack-cinder-scheduler (CTL) + ``` + + ```shell + yum install lvm2 device-mapper-persistent-data scsi-target-utils rpcbind nfs-utils \ (STG) + openstack-cinder-volume openstack-cinder-backup + ``` + +3. 准备存储设备,以下仅为示例: + + ```shell + pvcreate /dev/vdb + vgcreate cinder-volumes /dev/vdb + + vim /etc/lvm/lvm.conf + + + devices { + ... + filter = [ "a/vdb/", "r/.*/"] + ``` + + ***解释*** + + 在devices部分,添加过滤以接受/dev/vdb设备拒绝其他设备。 + +4. 准备NFS + + ```shell + mkdir -p /root/cinder/backup + + cat << EOF >> /etc/export + /root/cinder/backup 192.168.1.0/24(rw,sync,no_root_squash,no_all_squash) + EOF + + ``` + +5. 配置cinder相关配置: + + ```shell + vim /etc/cinder/cinder.conf + + [DEFAULT] + transport_url = rabbit://openstack:RABBIT_PASS@controller + auth_strategy = keystone + my_ip = 10.0.0.11 + enabled_backends = lvm (STG) + backup_driver=cinder.backup.drivers.nfs.NFSBackupDriver (STG) + backup_share=HOST:PATH (STG) + + [database] + connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000 + auth_url = http://controller:5000 + memcached_servers = controller:11211 + auth_type = password + project_domain_name = Default + user_domain_name = Default + project_name = service + username = cinder + password = CINDER_PASS + + [oslo_concurrency] + lock_path = /var/lib/cinder/tmp + + [lvm] + volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver (STG) + volume_group = cinder-volumes (STG) + iscsi_protocol = iscsi (STG) + iscsi_helper = tgtadm (STG) + ``` + + ***解释*** + + [database]部分,配置数据库入口; + + [DEFAULT]部分,配置RabbitMQ消息队列入口,配置my_ip; + + [DEFAULT] [keystone_authtoken]部分,配置身份认证服务入口; + + [oslo_concurrency]部分,配置lock path。 + + ***注意*** + + **替换`CINDER_DBPASS`为 cinder 数据库的密码;** + + **替换`RABBIT_PASS`为 RabbitMQ 中 openstack 账户的密码;** + + **配置`my_ip`为控制节点的管理 IP 地址;** + + **替换`CINDER_PASS`为 cinder 用户的密码;** + + **替换`HOST:PATH`为 NFS的HOSTIP和共享路径 用户的密码;** + +6. 同步数据库: + + ```shell + su -s /bin/sh -c "cinder-manage db sync" cinder (CTL) + ``` + +7. 配置nova: + + ```shell + vim /etc/nova/nova.conf (CTL) + + [cinder] + os_region_name = RegionOne + ``` + +8. 重启计算API服务 + + ```shell + systemctl restart openstack-nova-api.service + ``` + +9. 启动cinder服务 + + ```shell + systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service (CTL) + systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service (CTL) + ``` + + ```shell + systemctl enable rpcbind.service nfs-server.service tgtd.service iscsid.service \ (STG) + openstack-cinder-volume.service \ + openstack-cinder-backup.service + systemctl start rpcbind.service nfs-server.service tgtd.service iscsid.service \ (STG) + openstack-cinder-volume.service \ + openstack-cinder-backup.service + ``` + + ***注意*** + + 当cinder使用tgtadm的方式挂卷的时候,要修改/etc/tgt/tgtd.conf,内容如下,保证tgtd可以发现cinder-volume的iscsi target。 + + ```shell + include /var/lib/cinder/volumes/* + ``` + +10. 验证 + + ```shell + source ~/.admin-openrc + openstack volume service list + ``` + +### horizon 安装 + +1. 安装软件包 + + ```shell + yum install openstack-dashboard + ``` + +2. 修改文件 + + 修改变量 + + ```text + vim /etc/openstack-dashboard/local_settings + + OPENSTACK_HOST = "controller" + ALLOWED_HOSTS = ['*', ] + + SESSION_ENGINE = 'django.contrib.sessions.backends.cache' + + CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + 'LOCATION': 'controller:11211', + } + } + + OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST + OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True + OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default" + OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user" + + OPENSTACK_API_VERSIONS = { + "identity": 3, + "image": 2, + "volume": 3, + } + ``` + +3. 重启 httpd 服务 + + ```shell + systemctl restart httpd.service memcached.service + ``` + +4. 验证 + 打开浏览器,输入网址,登录 horizon。 + + ***注意*** + + **替换HOSTIP为控制节点管理平面IP地址** + +### Tempest 安装 + +Tempest是OpenStack的集成测试服务,如果用户需要全面自动化测试已安装的OpenStack环境的功能,则推荐使用该组件。否则,可以不用安装。 + +1. 安装Tempest + + ```shell + yum install openstack-tempest + ``` + +2. 初始化目录 + + ```shell + tempest init mytest + ``` + +3. 修改配置文件。 + + ```shell + cd mytest + vi etc/tempest.conf + ``` + + tempest.conf中需要配置当前OpenStack环境的信息,具体内容可以参考[官方示例](https://docs.openstack.org/tempest/latest/sampleconf.html) + +4. 执行测试 + + ```shell + tempest run + ``` + +5. 安装tempest扩展(可选) + OpenStack各个服务本身也提供了一些tempest测试包,用户可以安装这些包来丰富tempest的测试内容。在Train中,我们提供了Cinder、Glance、Keystone、Ironic、Trove的扩展测试,用户可以执行如下命令进行安装使用: + ``` + yum install python3-cinder-tempest-plugin python3-glance-tempest-plugin python3-ironic-tempest-plugin python3-keystone-tempest-plugin python3-trove-tempest-plugin + ``` + +### Ironic 安装 + +Ironic是OpenStack的裸金属服务,如果用户需要进行裸机部署则推荐使用该组件。否则,可以不用安装。 + +1. 设置数据库 + + 裸金属服务在数据库中存储信息,创建一个**ironic**用户可以访问的**ironic**数据库,替换**IRONIC_DBPASSWORD**为合适的密码 + + ```sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE ironic CHARACTER SET utf8; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'localhost' \ + IDENTIFIED BY 'IRONIC_DBPASSWORD'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'%' \ + IDENTIFIED BY 'IRONIC_DBPASSWORD'; + ``` +2. 安装软件包 + + ```shell + yum install openstack-ironic-api openstack-ironic-conductor python3-ironicclient + ``` + + 启动服务 + + ```shell + systemctl enable openstack-ironic-api openstack-ironic-conductor + systemctl start openstack-ironic-api openstack-ironic-conductor + ``` + +3. 创建服务用户认证 + + 1、创建Bare Metal服务用户 + + ```shell + openstack user create --password IRONIC_PASSWORD \ + --email ironic@example.com ironic + openstack role add --project service --user ironic admin + openstack service create --name ironic \ + --description "Ironic baremetal provisioning service" baremetal + ``` + + 2、创建Bare Metal服务访问入口 + + ```shell + openstack endpoint create --region RegionOne baremetal admin http://$IRONIC_NODE:6385 + openstack endpoint create --region RegionOne baremetal public http://$IRONIC_NODE:6385 + openstack endpoint create --region RegionOne baremetal internal http://$IRONIC_NODE:6385 + ``` + +4. 配置ironic-api服务 + + 配置文件路径/etc/ironic/ironic.conf + + 1、通过**connection**选项配置数据库的位置,如下所示,替换**IRONIC_DBPASSWORD**为**ironic**用户的密码,替换**DB_IP**为DB服务器所在的IP地址: + + ```shell + [database] + + # The SQLAlchemy connection string used to connect to the + # database (string value) + + connection = mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic + ``` + + 2、通过以下选项配置ironic-api服务使用RabbitMQ消息代理,替换**RPC_\***为RabbitMQ的详细地址和凭证 + + ```shell + [DEFAULT] + + # A URL representing the messaging driver to use and its full + # configuration. (string value) + + transport_url = rabbit://RPC_USER:RPC_PASSWORD@RPC_HOST:RPC_PORT/ + ``` + + 用户也可自行使用json-rpc方式替换rabbitmq + + 3、配置ironic-api服务使用身份认证服务的凭证,替换**PUBLIC_IDENTITY_IP**为身份认证服务器的公共IP,替换**PRIVATE_IDENTITY_IP**为身份认证服务器的私有IP,替换**IRONIC_PASSWORD**为身份认证服务中**ironic**用户的密码: + + ```shell + [DEFAULT] + + # Authentication strategy used by ironic-api: one of + # "keystone" or "noauth". "noauth" should not be used in a + # production environment because all authentication will be + # disabled. (string value) + + auth_strategy=keystone + + [keystone_authtoken] + # Authentication type to load (string value) + auth_type=password + # Complete public Identity API endpoint (string value) + www_authenticate_uri=http://PUBLIC_IDENTITY_IP:5000 + # Complete admin Identity API endpoint. (string value) + auth_url=http://PRIVATE_IDENTITY_IP:5000 + # Service username. (string value) + username=ironic + # Service account password. (string value) + password=IRONIC_PASSWORD + # Service tenant name. (string value) + project_name=service + # Domain name containing project (string value) + project_domain_name=Default + # User's domain name (string value) + user_domain_name=Default + + ``` + + 4、创建裸金属服务数据库表 + + ```shell + ironic-dbsync --config-file /etc/ironic/ironic.conf create_schema + ``` + + 5、重启ironic-api服务 + + ```shell + sudo systemctl restart openstack-ironic-api + ``` + +5. 配置ironic-conductor服务 + + 1、替换**HOST_IP**为conductor host的IP + + ```shell + [DEFAULT] + + # IP address of this host. If unset, will determine the IP + # programmatically. If unable to do so, will use "127.0.0.1". + # (string value) + + my_ip=HOST_IP + ``` + + 2、配置数据库的位置,ironic-conductor应该使用和ironic-api相同的配置。替换**IRONIC_DBPASSWORD**为**ironic**用户的密码,替换DB_IP为DB服务器所在的IP地址: + + ```shell + [database] + + # The SQLAlchemy connection string to use to connect to the + # database. (string value) + + connection = mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic + ``` + + 3、通过以下选项配置ironic-api服务使用RabbitMQ消息代理,ironic-conductor应该使用和ironic-api相同的配置,替换**RPC_\***为RabbitMQ的详细地址和凭证 + + ```shell + [DEFAULT] + + # A URL representing the messaging driver to use and its full + # configuration. (string value) + + transport_url = rabbit://RPC_USER:RPC_PASSWORD@RPC_HOST:RPC_PORT/ + ``` + + 用户也可自行使用json-rpc方式替换rabbitmq + + 4、配置凭证访问其他OpenStack服务 + + 为了与其他OpenStack服务进行通信,裸金属服务在请求其他服务时需要使用服务用户与OpenStack Identity服务进行认证。这些用户的凭据必须在与相应服务相关的每个配置文件中进行配置。 + + ```shell + [neutron] - 访问OpenStack网络服务 + [glance] - 访问OpenStack镜像服务 + [swift] - 访问OpenStack对象存储服务 + [cinder] - 访问OpenStack块存储服务 + [inspector] - 访问OpenStack裸金属introspection服务 + [service_catalog] - 一个特殊项用于保存裸金属服务使用的凭证,该凭证用于发现注册在OpenStack身份认证服务目录中的自己的API URL端点 + ``` + + 简单起见,可以对所有服务使用同一个服务用户。为了向后兼容,该用户应该和ironic-api服务的[keystone_authtoken]所配置的为同一个用户。但这不是必须的,也可以为每个服务创建并配置不同的服务用户。 + + 在下面的示例中,用户访问OpenStack网络服务的身份验证信息配置为: + + ```shell + 网络服务部署在名为RegionOne的身份认证服务域中,仅在服务目录中注册公共端点接口 + + 请求时使用特定的CA SSL证书进行HTTPS连接 + + 与ironic-api服务配置相同的服务用户 + + 动态密码认证插件基于其他选项发现合适的身份认证服务API版本 + ``` + + ```shell + [neutron] + + # Authentication type to load (string value) + auth_type = password + # Authentication URL (string value) + auth_url=https://IDENTITY_IP:5000/ + # Username (string value) + username=ironic + # User's password (string value) + password=IRONIC_PASSWORD + # Project name to scope to (string value) + project_name=service + # Domain ID containing project (string value) + project_domain_id=default + # User's domain id (string value) + user_domain_id=default + # PEM encoded Certificate Authority to use when verifying + # HTTPs connections. (string value) + cafile=/opt/stack/data/ca-bundle.pem + # The default region_name for endpoint URL discovery. (string + # value) + region_name = RegionOne + # List of interfaces, in order of preference, for endpoint + # URL. (list value) + valid_interfaces=public + ``` + + 默认情况下,为了与其他服务进行通信,裸金属服务会尝试通过身份认证服务的服务目录发现该服务合适的端点。如果希望对一个特定服务使用一个不同的端点,则在裸金属服务的配置文件中通过endpoint_override选项进行指定: + + ```shell + [neutron] ... endpoint_override = + ``` + + 5、配置允许的驱动程序和硬件类型 + + 通过设置enabled_hardware_types设置ironic-conductor服务允许使用的硬件类型: + + ```shell + [DEFAULT] enabled_hardware_types = ipmi + ``` + + 配置硬件接口: + + ```shell + enabled_boot_interfaces = pxe enabled_deploy_interfaces = direct,iscsi enabled_inspect_interfaces = inspector enabled_management_interfaces = ipmitool enabled_power_interfaces = ipmitool + ``` + + 配置接口默认值: + + ```shell + [DEFAULT] default_deploy_interface = direct default_network_interface = neutron + ``` + + 如果启用了任何使用Direct deploy的驱动,必须安装和配置镜像服务的Swift后端。Ceph对象网关(RADOS网关)也支持作为镜像服务的后端。 + + 6、重启ironic-conductor服务 + + ```shell + sudo systemctl restart openstack-ironic-conductor + ``` + +6. 配置httpd服务 + + 1. 创建ironic要使用的httpd的root目录并设置属主属组,目录路径要和/etc/ironic/ironic.conf中[deploy]组中http_root 配置项指定的路径要一致。 + + ``` + mkdir -p /var/lib/ironic/httproot ``chown ironic.ironic /var/lib/ironic/httproot + ``` + + 2. 安装和配置httpd服务 + + 1. 安装httpd服务,已有请忽略 + + ``` + yum install httpd -y + ``` + 2. 创建/etc/httpd/conf.d/openstack-ironic-httpd.conf文件,内容如下: + + ``` + Listen 8080 + + + ServerName ironic.openeuler.com + + ErrorLog "/var/log/httpd/openstack-ironic-httpd-error_log" + CustomLog "/var/log/httpd/openstack-ironic-httpd-access_log" "%h %l %u %t \"%r\" %>s %b" + + DocumentRoot "/var/lib/ironic/httproot" + + Options Indexes FollowSymLinks + Require all granted + + LogLevel warn + AddDefaultCharset UTF-8 + EnableSendfile on + + + ``` + + 注意监听的端口要和/etc/ironic/ironic.conf里[deploy]选项中http_url配置项中指定的端口一致。 + + 3. 重启httpd服务。 + + ``` + systemctl restart httpd + ``` +7. deploy ramdisk镜像制作 + + T版的ramdisk镜像支持通过ironic-python-agent服务或disk-image-builder工具制作,也可以使用社区最新的ironic-python-agent-builder。用户也可以自行选择其他工具制作。 + 若使用T版原生工具,则需要安装对应的软件包。 + + ```shell + yum install openstack-ironic-python-agent + 或者 + yum install diskimage-builder + ``` + + 具体的使用方法可以参考[官方文档](https://docs.openstack.org/ironic/queens/install/deploy-ramdisk.html) + + 这里介绍下使用ironic-python-agent-builder构建ironic使用的deploy镜像的完整过程。 + + 1. 安装 ironic-python-agent-builder + + 1. 安装工具: + + ```shell + pip install ironic-python-agent-builder + ``` + + 2. 修改以下文件中的python解释器: + + ```shell + /usr/bin/yum /usr/libexec/urlgrabber-ext-down + ``` + + 3. 安装其它必须的工具: + + ```shell + yum install git + ``` + + 由于`DIB`依赖`semanage`命令,所以在制作镜像之前确定该命令是否可用:`semanage --help`,如果提示无此命令,安装即可: + + ```shell + # 先查询需要安装哪个包 + [root@localhost ~]# yum provides /usr/sbin/semanage + 已加载插件:fastestmirror + Loading mirror speeds from cached hostfile + * base: mirror.vcu.edu + * extras: mirror.vcu.edu + * updates: mirror.math.princeton.edu + policycoreutils-python-2.5-34.el7.aarch64 : SELinux policy core python utilities + 源 :base + 匹配来源: + 文件名 :/usr/sbin/semanage + # 安装 + [root@localhost ~]# yum install policycoreutils-python + ``` + + 2. 制作镜像 + + 如果是`arm`架构,需要添加: + ```shell + export ARCH=aarch64 + ``` + + 基本用法: + + ```shell + usage: ironic-python-agent-builder [-h] [-r RELEASE] [-o OUTPUT] [-e ELEMENT] + [-b BRANCH] [-v] [--extra-args EXTRA_ARGS] + distribution + + positional arguments: + distribution Distribution to use + + optional arguments: + -h, --help show this help message and exit + -r RELEASE, --release RELEASE + Distribution release to use + -o OUTPUT, --output OUTPUT + Output base file name + -e ELEMENT, --element ELEMENT + Additional DIB element to use + -b BRANCH, --branch BRANCH + If set, override the branch that is used for ironic- + python-agent and requirements + -v, --verbose Enable verbose logging in diskimage-builder + --extra-args EXTRA_ARGS + Extra arguments to pass to diskimage-builder + ``` + + 举例说明: + + ```shell + ironic-python-agent-builder centos -o /mnt/ironic-agent-ssh -b origin/stable/rocky + ``` + + 3. 允许ssh登陆 + + 初始化环境变量,然后制作镜像: + + ```shell + export DIB_DEV_USER_USERNAME=ipa \ + export DIB_DEV_USER_PWDLESS_SUDO=yes \ + export DIB_DEV_USER_PASSWORD='123' + ironic-python-agent-builder centos -o /mnt/ironic-agent-ssh -b origin/stable/rocky -e selinux-permissive -e devuser + ``` + + 4. 指定代码仓库 + + 初始化对应的环境变量,然后制作镜像: + + ```shell + # 指定仓库地址以及版本 + DIB_REPOLOCATION_ironic_python_agent=git@172.20.2.149:liuzz/ironic-python-agent.git + DIB_REPOREF_ironic_python_agent=origin/develop + + # 直接从gerrit上clone代码 + DIB_REPOLOCATION_ironic_python_agent=https://review.opendev.org/openstack/ironic-python-agent + DIB_REPOREF_ironic_python_agent=refs/changes/43/701043/1 + ``` + + 参考:[source-repositories](https://docs.openstack.org/diskimage-builder/latest/elements/source-repositories/README.html)。 + + 指定仓库地址及版本验证成功。 + + 5. 注意 + 原生的openstack里的pxe配置文件的模版不支持arm64架构,需要自己对原生openstack代码进行修改: + + 在T版中,社区的ironic仍然不支持arm64位的uefi pxe启动,表现为生成的grub.cfg文件(一般位于/tftpboot/下)格式不对而导致pxe启动失败 + + 需要用户对生成grub.cfg的代码逻辑自行修改。 + + ironic向ipa发送查询命令执行状态请求的tls报错: + + T版的ipa和ironic默认都会开启tls认证的方式向对方发送请求,跟据官网的说明进行关闭即可。 + + 1. 修改ironic配置文件(/etc/ironic/ironic.conf)下面的配置中添加ipa-insecure=1: + + ``` + [agent] + verify_ca = False + + [pxe] + pxe_append_params = nofb nomodeset vga=normal coreos.autologin ipa-insecure=1 + ``` + + 2. ramdisk镜像中添加ipa配置文件/etc/ironic_python_agent/ironic_python_agent.conf并配置tls的配置如下: + + /etc/ironic_python_agent/ironic_python_agent.conf (需要提前创建/etc/ironic_python_agent目录) + + ``` + [DEFAULT] + enable_auto_tls = False + ``` + + 设置权限: + + ``` + chown -R ipa.ipa /etc/ironic_python_agent/ + ``` + + 3. 修改ipa服务的服务启动文件,添加配置文件选项 + + vim usr/lib/systemd/system/ironic-python-agent.service + + ``` + [Unit] + Description=Ironic Python Agent + After=network-online.target + + [Service] + ExecStartPre=/sbin/modprobe vfat + ExecStart=/usr/local/bin/ironic-python-agent --config-file /etc/ironic_python_agent/ironic_python_agent.conf + Restart=always + RestartSec=30s + + [Install] + WantedBy=multi-user.target + ``` + + +在Train中,我们还提供了ironic-inspector等服务,用户可根据自身需求安装。 + +### Kolla 安装 + +Kolla为OpenStack服务提供生产环境可用的容器化部署的功能。 + +Kolla的安装十分简单,只需要安装对应的RPM包即可 + +``` +yum install openstack-kolla openstack-kolla-ansible +``` + +安装完后,就可以使用`kolla-ansible`, `kolla-build`, `kolla-genpwd`, `kolla-mergepwd`等命令进行相关的镜像制作和容器环境部署了。 + +### Trove 安装 +Trove是OpenStack的数据库服务,如果用户使用OpenStack提供的数据库服务则推荐使用该组件。否则,可以不用安装。 + +1. 设置数据库 + + 数据库服务在数据库中存储信息,创建一个**trove**用户可以访问的**trove**数据库,替换**TROVE_DBPASSWORD**为合适的密码 + + ```sql + mysql -u root -p + + MariaDB [(none)]> CREATE DATABASE trove CHARACTER SET utf8; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'localhost' \ + IDENTIFIED BY 'TROVE_DBPASSWORD'; + MariaDB [(none)]> GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'%' \ + IDENTIFIED BY 'TROVE_DBPASSWORD'; + ``` + +2. 创建服务用户认证 + + 1、创建**Trove**服务用户 + + ```shell + openstack user create --domain default --password-prompt trove + openstack role add --project service --user trove admin + openstack service create --name trove --description "Database" database + ``` + **解释:** `TROVE_PASSWORD` 替换为`trove`用户的密码 + + 2、创建**Database**服务访问入口 + + ```shell + openstack endpoint create --region RegionOne database public http://controller:8779/v1.0/%\(tenant_id\)s + openstack endpoint create --region RegionOne database internal http://controller:8779/v1.0/%\(tenant_id\)s + openstack endpoint create --region RegionOne database admin http://controller:8779/v1.0/%\(tenant_id\)s + ``` + +3. 安装和配置**Trove**各组件 + + 1、安装**Trove**包 + ```shell script + yum install openstack-trove python3-troveclient + ``` + + 2. 配置`trove.conf` + ```shell script + vim /etc/trove/trove.conf + + [DEFAULT] + log_dir = /var/log/trove + trove_auth_url = http://controller:5000/ + nova_compute_url = http://controller:8774/v2 + cinder_url = http://controller:8776/v1 + swift_url = http://controller:8080/v1/AUTH_ + rpc_backend = rabbit + transport_url = rabbit://openstack:RABBIT_PASS@controller:5672 + auth_strategy = keystone + add_addresses = True + api_paste_config = /etc/trove/api-paste.ini + nova_proxy_admin_user = admin + nova_proxy_admin_pass = ADMIN_PASSWORD + nova_proxy_admin_tenant_name = service + taskmanager_manager = trove.taskmanager.manager.Manager + use_nova_server_config_drive = True + # Set these if using Neutron Networking + network_driver = trove.network.neutron.NeutronDriver + network_label_regex = .* + + [database] + connection = mysql+pymysql://trove:TROVE_DBPASSWORD@controller/trove + + [keystone_authtoken] + www_authenticate_uri = http://controller:5000/ + auth_url = http://controller:5000/ + auth_type = password + project_domain_name = default + user_domain_name = default + project_name = service + username = trove + password = TROVE_PASSWORD + ``` + **解释:** + - `[Default]`分组中`nova_compute_url` 和 `cinder_url` 为Nova和Cinder在Keystone中创建的endpoint + - `nova_proxy_XXX` 为一个能访问Nova服务的用户信息,上例中使用`admin`用户为例 + - `transport_url` 为`RabbitMQ`连接信息,`RABBIT_PASS`替换为RabbitMQ的密码 + - `[database]`分组中的`connection` 为前面在mysql中为Trove创建的数据库信息 + - Trove的用户信息中`TROVE_PASSWORD`替换为实际trove用户的密码 + + 3. 配置`trove-guestagent.conf` + ```shell script + vim /etc/trove/trove-guestagent.conf + + rabbit_host = controller + rabbit_password = RABBIT_PASS + trove_auth_url = http://controller:5000/ + ``` + **解释:** `guestagent`是trove中一个独立组件,需要预先内置到Trove通过Nova创建的虚拟 + 机镜像中,在创建好数据库实例后,会起guestagent进程,负责通过消息队列(RabbitMQ)向Trove上 + 报心跳,因此需要配置RabbitMQ的用户和密码信息。 + **从Victoria版开始,Trove使用一个统一的镜像来跑不同类型的数据库,数据库服务运行在Guest虚拟机的Docker容器中。** + - `RABBIT_PASS`替换为RabbitMQ的密码 + + 4. 生成数据`Trove`数据库表 + ```shell script + su -s /bin/sh -c "trove-manage db_sync" trove + ``` + +4. 完成安装配置 + 1. 配置**Trove**服务自启动 + ```shell script + systemctl enable openstack-trove-api.service \ + openstack-trove-taskmanager.service \ + openstack-trove-conductor.service + ``` + 2. 启动服务 + ```shell script + systemctl start openstack-trove-api.service \ + openstack-trove-taskmanager.service \ + openstack-trove-conductor.service + ``` +### Swift 安装 + +Swift 提供了弹性可伸缩、高可用的分布式对象存储服务,适合存储大规模非结构化数据。 + +1. 创建服务凭证、API端点。 + + 创建服务凭证 + + ``` shell + #创建swift用户: + openstack user create --domain default --password-prompt swift + #admin为swift用户添加角色: + openstack role add --project service --user swift admin + #创建swift服务实体: + openstack service create --name swift --description "OpenStack Object Storage" object-store + ``` + + 创建swift API 端点: + + ```shell + openstack endpoint create --region RegionOne object-store public http://controller:8080/v1/AUTH_%\(project_id\)s + openstack endpoint create --region RegionOne object-store internal http://controller:8080/v1/AUTH_%\(project_id\)s + openstack endpoint create --region RegionOne object-store admin http://controller:8080/v1 + ``` + + +2. 安装软件包: + + ```shell + yum install openstack-swift-proxy python3-swiftclient python3-keystoneclient python3-keystonemiddleware memcached (CTL) + ``` + +3. 配置proxy-server相关配置 + + Swift RPM包里已经包含了一个基本可用的proxy-server.conf,只需要手动修改其中的ip和swift password即可。 + + ***注意*** + + **注意替换password为您swift在身份服务中为用户选择的密码** + +4. 安装和配置存储节点 (STG) + + 安装支持的程序包: + ```shell + yum install xfsprogs rsync + ``` + + 将/dev/vdb和/dev/vdc设备格式化为 XFS + + ```shell + mkfs.xfs /dev/vdb + mkfs.xfs /dev/vdc + ``` + + 创建挂载点目录结构: + + ```shell + mkdir -p /srv/node/vdb + mkdir -p /srv/node/vdc + ``` + + 找到新分区的 UUID: + + ```shell + blkid + ``` + + 编辑/etc/fstab文件并将以下内容添加到其中: + + ```shell + UUID="" /srv/node/vdb xfs noatime 0 2 + UUID="" /srv/node/vdc xfs noatime 0 2 + ``` + + 挂载设备: + + ```shell + mount /srv/node/vdb + mount /srv/node/vdc + ``` + ***注意*** + + **如果用户不需要容灾功能,以上步骤只需要创建一个设备即可,同时可以跳过下面的rsync配置** + + (可选)创建或编辑/etc/rsyncd.conf文件以包含以下内容: + + ```shell + [DEFAULT] + uid = swift + gid = swift + log file = /var/log/rsyncd.log + pid file = /var/run/rsyncd.pid + address = MANAGEMENT_INTERFACE_IP_ADDRESS + + [account] + max connections = 2 + path = /srv/node/ + read only = False + lock file = /var/lock/account.lock + + [container] + max connections = 2 + path = /srv/node/ + read only = False + lock file = /var/lock/container.lock + + [object] + max connections = 2 + path = /srv/node/ + read only = False + lock file = /var/lock/object.lock + ``` + **替换MANAGEMENT_INTERFACE_IP_ADDRESS为存储节点上管理网络的IP地址** + + 启动rsyncd服务并配置它在系统启动时启动: + + ```shell + systemctl enable rsyncd.service + systemctl start rsyncd.service + ``` + +5. 在存储节点安装和配置组件 (STG) + + 安装软件包: + + ```shell + yum install openstack-swift-account openstack-swift-container openstack-swift-object + ``` + + 编辑/etc/swift目录的account-server.conf、container-server.conf和object-server.conf文件,替换bind_ip为存储节点上管理网络的IP地址。 + + 确保挂载点目录结构的正确所有权: + + ```shell + chown -R swift:swift /srv/node + ``` + + 创建recon目录并确保其拥有正确的所有权: + + ```shell + mkdir -p /var/cache/swift + chown -R root:swift /var/cache/swift + chmod -R 775 /var/cache/swift + ``` + +6. 创建账号环 (CTL) + + 切换到/etc/swift目录。 + + ```shell + cd /etc/swift + ``` + + 创建基础account.builder文件: + + ```shell + swift-ring-builder account.builder create 10 1 1 + ``` + + 将每个存储节点添加到环中: + + ```shell + swift-ring-builder account.builder add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6202 --device DEVICE_NAME --weight DEVICE_WEIGHT + ``` + + **替换STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS为存储节点上管理网络的IP地址。替换DEVICE_NAME为同一存储节点上的存储设备名称** + + ***注意 *** + **对每个存储节点上的每个存储设备重复此命令** + + 验证戒指内容: + + ```shell + swift-ring-builder account.builder + ``` + + 重新平衡戒指: + + ```shell + swift-ring-builder account.builder rebalance + ``` + +7. 创建容器环 (CTL) + + 切换到`/etc/swift`目录。 + + 创建基础`container.builder`文件: + + ```shell + swift-ring-builder container.builder create 10 1 1 + ``` + + 将每个存储节点添加到环中: + + ```shell + swift-ring-builder container.builder \ + add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6201 \ + --device DEVICE_NAME --weight 100 + + ``` + + **替换STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS为存储节点上管理网络的IP地址。替换DEVICE_NAME为同一存储节点上的存储设备名称** + + ***注意*** + **对每个存储节点上的每个存储设备重复此命令** + + 验证戒指内容: + + ```shell + swift-ring-builder container.builder + ``` + + 重新平衡戒指: + + ```shell + swift-ring-builder container.builder rebalance + ``` + +8. 创建对象环 (CTL) + + 切换到`/etc/swift`目录。 + + 创建基础`object.builder`文件: + + ```shell + swift-ring-builder object.builder create 10 1 1 + ``` + + 将每个存储节点添加到环中 + + ```shell + swift-ring-builder object.builder \ + add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6200 \ + --device DEVICE_NAME --weight 100 + ``` + + **替换STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS为存储节点上管理网络的IP地址。替换DEVICE_NAME为同一存储节点上的存储设备名称** + + ***注意 *** + **对每个存储节点上的每个存储设备重复此命令** + + 验证戒指内容: + + ```shell + swift-ring-builder object.builder + ``` + + 重新平衡戒指: + + ```shell + swift-ring-builder object.builder rebalance + ``` + + 分发环配置文件: + + 将`account.ring.gz`,`container.ring.gz`以及 `object.ring.gz`文件复制到`/etc/swift`每个存储节点和运行代理服务的任何其他节点上目录。 + + + +9. 完成安装 + + 编辑`/etc/swift/swift.conf`文件 + + ``` shell + [swift-hash] + swift_hash_path_suffix = test-hash + swift_hash_path_prefix = test-hash + + [storage-policy:0] + name = Policy-0 + default = yes + ``` + + **用唯一值替换 test-hash** + + 将swift.conf文件复制到/etc/swift每个存储节点和运行代理服务的任何其他节点上的目录。 + + 在所有节点上,确保配置目录的正确所有权: + + ```shell + chown -R root:swift /etc/swift + ``` + + 在控制器节点和运行代理服务的任何其他节点上,启动对象存储代理服务及其依赖项,并将它们配置为在系统启动时启动: + + ```shell + systemctl enable openstack-swift-proxy.service memcached.service + systemctl start openstack-swift-proxy.service memcached.service + ``` + + 在存储节点上,启动对象存储服务并将它们配置为在系统启动时启动: + + ```shell + systemctl enable openstack-swift-account.service openstack-swift-account-auditor.service openstack-swift-account-reaper.service openstack-swift-account-replicator.service + + systemctl start openstack-swift-account.service openstack-swift-account-auditor.service openstack-swift-account-reaper.service openstack-swift-account-replicator.service + + systemctl enable openstack-swift-container.service openstack-swift-container-auditor.service openstack-swift-container-replicator.service openstack-swift-container-updater.service + + systemctl start openstack-swift-container.service openstack-swift-container-auditor.service openstack-swift-container-replicator.service openstack-swift-container-updater.service + + systemctl enable openstack-swift-object.service openstack-swift-object-auditor.service openstack-swift-object-replicator.service openstack-swift-object-updater.service + + systemctl start openstack-swift-object.service openstack-swift-object-auditor.service openstack-swift-object-replicator.service openstack-swift-object-updater.service + ``` + +### Cyborg 安装 + +Cyborg为OpenStack提供加速器设备的支持,包括 GPU, FPGA, ASIC, NP, SoCs, NVMe/NOF SSDs, ODP, DPDK/SPDK等等。 + +1. 初始化对应数据库 + +``` +CREATE DATABASE cyborg; +GRANT ALL PRIVILEGES ON cyborg.* TO 'cyborg'@'localhost' IDENTIFIED BY 'CYBORG_DBPASS'; +GRANT ALL PRIVILEGES ON cyborg.* TO 'cyborg'@'%' IDENTIFIED BY 'CYBORG_DBPASS'; +``` + +2. 创建对应Keystone资源对象 + +``` +$ openstack user create --domain default --password-prompt cyborg +$ openstack role add --project service --user cyborg admin +$ openstack service create --name cyborg --description "Acceleration Service" accelerator + +$ openstack endpoint create --region RegionOne \ + accelerator public http://:6666/v1 +$ openstack endpoint create --region RegionOne \ + accelerator internal http://:6666/v1 +$ openstack endpoint create --region RegionOne \ + accelerator admin http://:6666/v1 +``` + +3. 安装Cyborg + +``` +yum install openstack-cyborg +``` + +4. 配置Cyborg + +修改`/etc/cyborg/cyborg.conf` + +``` +[DEFAULT] +transport_url = rabbit://%RABBITMQ_USER%:%RABBITMQ_PASSWORD%@%OPENSTACK_HOST_IP%:5672/ +use_syslog = False +state_path = /var/lib/cyborg +debug = True + +[database] +connection = mysql+pymysql://%DATABASE_USER%:%DATABASE_PASSWORD%@%OPENSTACK_HOST_IP%/cyborg + +[service_catalog] +project_domain_id = default +user_domain_id = default +project_name = service +password = PASSWORD +username = cyborg +auth_url = http://%OPENSTACK_HOST_IP%/identity +auth_type = password + +[placement] +project_domain_name = Default +project_name = service +user_domain_name = Default +password = PASSWORD +username = placement +auth_url = http://%OPENSTACK_HOST_IP%/identity +auth_type = password + +[keystone_authtoken] +memcached_servers = localhost:11211 +project_domain_name = Default +project_name = service +user_domain_name = Default +password = PASSWORD +username = cyborg +auth_url = http://%OPENSTACK_HOST_IP%/identity +auth_type = password +``` + +自行修改对应的用户名、密码、IP等信息 + +5. 同步数据库表格 + +``` +cyborg-dbsync --config-file /etc/cyborg/cyborg.conf upgrade +``` + +6. 启动Cyborg服务 + +``` +systemctl enable openstack-cyborg-api openstack-cyborg-conductor openstack-cyborg-agent +systemctl start openstack-cyborg-api openstack-cyborg-conductor openstack-cyborg-agent +``` + +### Aodh 安装 + +1. 创建数据库 + +``` +CREATE DATABASE aodh; + +GRANT ALL PRIVILEGES ON aodh.* TO 'aodh'@'localhost' IDENTIFIED BY 'AODH_DBPASS'; + +GRANT ALL PRIVILEGES ON aodh.* TO 'aodh'@'%' IDENTIFIED BY 'AODH_DBPASS'; +``` + +2. 创建对应Keystone资源对象 + +``` +openstack user create --domain default --password-prompt aodh + +openstack role add --project service --user aodh admin + +openstack service create --name aodh --description "Telemetry" alarming + +openstack endpoint create --region RegionOne alarming public http://controller:8042 + +openstack endpoint create --region RegionOne alarming internal http://controller:8042 + +openstack endpoint create --region RegionOne alarming admin http://controller:8042 +``` + +3. 安装Aodh + +``` +yum install openstack-aodh-api openstack-aodh-evaluator openstack-aodh-notifier openstack-aodh-listener openstack-aodh-expirer python3-aodhclient +``` + +4. 修改配置文件 + +``` +[database] +connection = mysql+pymysql://aodh:AODH_DBPASS@controller/aodh + +[DEFAULT] +transport_url = rabbit://openstack:RABBIT_PASS@controller +auth_strategy = keystone + +[keystone_authtoken] +www_authenticate_uri = http://controller:5000 +auth_url = http://controller:5000 +memcached_servers = controller:11211 +auth_type = password +project_domain_id = default +user_domain_id = default +project_name = service +username = aodh +password = AODH_PASS + +[service_credentials] +auth_type = password +auth_url = http://controller:5000/v3 +project_domain_id = default +user_domain_id = default +project_name = service +username = aodh +password = AODH_PASS +interface = internalURL +region_name = RegionOne +``` + +5. 初始化数据库 + +``` +aodh-dbsync +``` + +6. 启动Aodh服务 + +``` +systemctl enable openstack-aodh-api.service openstack-aodh-evaluator.service openstack-aodh-notifier.service openstack-aodh-listener.service + +systemctl start openstack-aodh-api.service openstack-aodh-evaluator.service openstack-aodh-notifier.service openstack-aodh-listener.service +``` + +### Gnocchi 安装 + +1. 创建数据库 + +``` +CREATE DATABASE gnocchi; + +GRANT ALL PRIVILEGES ON gnocchi.* TO 'gnocchi'@'localhost' IDENTIFIED BY 'GNOCCHI_DBPASS'; + +GRANT ALL PRIVILEGES ON gnocchi.* TO 'gnocchi'@'%' IDENTIFIED BY 'GNOCCHI_DBPASS'; +``` + +2. 创建对应Keystone资源对象 + +``` +openstack user create --domain default --password-prompt gnocchi + +openstack role add --project service --user gnocchi admin + +openstack service create --name gnocchi --description "Metric Service" metric + +openstack endpoint create --region RegionOne metric public http://controller:8041 + +openstack endpoint create --region RegionOne metric internal http://controller:8041 + +openstack endpoint create --region RegionOne metric admin http://controller:8041 +``` + +3. 安装Gnocchi + +``` +yum install openstack-gnocchi-api openstack-gnocchi-metricd python3-gnocchiclient +``` + +4. 修改配置文件`/etc/gnocchi/gnocchi.conf` + +``` +[api] +auth_mode = keystone +port = 8041 +uwsgi_mode = http-socket + +[keystone_authtoken] +auth_type = password +auth_url = http://controller:5000/v3 +project_domain_name = Default +user_domain_name = Default +project_name = service +username = gnocchi +password = GNOCCHI_PASS +interface = internalURL +region_name = RegionOne + +[indexer] +url = mysql+pymysql://gnocchi:GNOCCHI_DBPASS@controller/gnocchi + +[storage] +# coordination_url is not required but specifying one will improve +# performance with better workload division across workers. +coordination_url = redis://controller:6379 +file_basepath = /var/lib/gnocchi +driver = file +``` + +5. 初始化数据库 + +``` +gnocchi-upgrade +``` + +6. 启动Gnocchi服务 + +``` +systemctl enable openstack-gnocchi-api.service openstack-gnocchi-metricd.service + +systemctl start openstack-gnocchi-api.service openstack-gnocchi-metricd.service +``` + +### Ceilometer 安装 + +1. 创建对应Keystone资源对象 + +``` +openstack user create --domain default --password-prompt ceilometer + +openstack role add --project service --user ceilometer admin + +openstack service create --name ceilometer --description "Telemetry" metering +``` + +2. 安装Ceilometer + +``` +yum install openstack-ceilometer-notification openstack-ceilometer-central +``` + +3. 修改配置文件`/etc/ceilometer/pipeline.yaml` + +``` +publishers: + # set address of Gnocchi + # + filter out Gnocchi-related activity meters (Swift driver) + # + set default archive policy + - gnocchi://?filter_project=service&archive_policy=low +``` + +4. 修改配置文件`/etc/ceilometer/ceilometer.conf` + +``` +[DEFAULT] +transport_url = rabbit://openstack:RABBIT_PASS@controller + +[service_credentials] +auth_type = password +auth_url = http://controller:5000/v3 +project_domain_id = default +user_domain_id = default +project_name = service +username = ceilometer +password = CEILOMETER_PASS +interface = internalURL +region_name = RegionOne +``` + +5. 初始化数据库 + +``` +ceilometer-upgrade +``` + +6. 启动Ceilometer服务 + +``` +systemctl enable openstack-ceilometer-notification.service openstack-ceilometer-central.service + +systemctl start openstack-ceilometer-notification.service openstack-ceilometer-central.service +``` + +### Heat 安装 + +1. 创建**heat**数据库,并授予**heat**数据库正确的访问权限,替换**HEAT_DBPASS**为合适的密码 + +``` +CREATE DATABASE heat; +GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' IDENTIFIED BY 'HEAT_DBPASS'; +GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' IDENTIFIED BY 'HEAT_DBPASS'; +``` + +2. 创建服务凭证,创建**heat**用户,并为其增加**admin**角色 + +``` +openstack user create --domain default --password-prompt heat +openstack role add --project service --user heat admin +``` + +3. 创建**heat**和**heat-cfn**服务及其对应的API端点 + +``` +openstack service create --name heat --description "Orchestration" orchestration +openstack service create --name heat-cfn --description "Orchestration" cloudformation +openstack endpoint create --region RegionOne orchestration public http://controller:8004/v1/%\(tenant_id\)s +openstack endpoint create --region RegionOne orchestration internal http://controller:8004/v1/%\(tenant_id\)s +openstack endpoint create --region RegionOne orchestration admin http://controller:8004/v1/%\(tenant_id\)s +openstack endpoint create --region RegionOne cloudformation public http://controller:8000/v1 +openstack endpoint create --region RegionOne cloudformation internal http://controller:8000/v1 +openstack endpoint create --region RegionOne cloudformation admin http://controller:8000/v1 +``` + +4. 创建stack管理的额外信息,包括**heat**domain及其对应domain的admin用户**heat_domain_admin**, +**heat_stack_owner**角色,**heat_stack_user**角色 + +``` +openstack user create --domain heat --password-prompt heat_domain_admin +openstack role add --domain heat --user-domain heat --user heat_domain_admin admin +openstack role create heat_stack_owner +openstack role create heat_stack_user +``` + +5. 安装软件包 + +``` +yum install openstack-heat-api openstack-heat-api-cfn openstack-heat-engine +``` + +6. 修改配置文件`/etc/heat/heat.conf` + +``` +[DEFAULT] +transport_url = rabbit://openstack:RABBIT_PASS@controller +heat_metadata_server_url = http://controller:8000 +heat_waitcondition_server_url = http://controller:8000/v1/waitcondition +stack_domain_admin = heat_domain_admin +stack_domain_admin_password = HEAT_DOMAIN_PASS +stack_user_domain_name = heat + +[database] +connection = mysql+pymysql://heat:HEAT_DBPASS@controller/heat + +[keystone_authtoken] +www_authenticate_uri = http://controller:5000 +auth_url = http://controller:5000 +memcached_servers = controller:11211 +auth_type = password +project_domain_name = default +user_domain_name = default +project_name = service +username = heat +password = HEAT_PASS + +[trustee] +auth_type = password +auth_url = http://controller:5000 +username = heat +password = HEAT_PASS +user_domain_name = default + +[clients_keystone] +auth_uri = http://controller:5000 +``` + +7. 初始化**heat**数据库表 + +``` +su -s /bin/sh -c "heat-manage db_sync" heat +``` + +8. 启动服务 + +``` +systemctl enable openstack-heat-api.service openstack-heat-api-cfn.service openstack-heat-engine.service +systemctl start openstack-heat-api.service openstack-heat-api-cfn.service openstack-heat-engine.service +``` diff --git a/themes/project/layouts/taxonomy/list.html b/docs/zh/docs/thirdparty_migration/figures/.keep similarity index 100% rename from themes/project/layouts/taxonomy/list.html rename to docs/zh/docs/thirdparty_migration/figures/.keep diff --git a/docs/zh/docs/thirdparty_migration/figures/calicotag.png b/docs/zh/docs/thirdparty_migration/figures/calicotag.png new file mode 100644 index 0000000000000000000000000000000000000000..3563a3e692ca223d5f13f1d16338ca5cfaac79a5 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/calicotag.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/clusteradd.png b/docs/zh/docs/thirdparty_migration/figures/clusteradd.png new file mode 100644 index 0000000000000000000000000000000000000000..b25de17014deb022c1bc9ab18246c0b51bdff942 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/clusteradd.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/configmaster.png b/docs/zh/docs/thirdparty_migration/figures/configmaster.png new file mode 100644 index 0000000000000000000000000000000000000000..f545b04d33e4e4e823c213cf997c44ec0c548b8b Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/configmaster.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/createuser.png b/docs/zh/docs/thirdparty_migration/figures/createuser.png new file mode 100644 index 0000000000000000000000000000000000000000..9964a86c0cf16073fc790dd5fae724883b612368 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/createuser.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/downloaddocker.png b/docs/zh/docs/thirdparty_migration/figures/downloaddocker.png new file mode 100644 index 0000000000000000000000000000000000000000..2e86a5b102c3641f753bfd367e215b1146901e53 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/downloaddocker.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/extend1.png b/docs/zh/docs/thirdparty_migration/figures/extend1.png new file mode 100644 index 0000000000000000000000000000000000000000..8bdd8e0b1ef60145ea16be676e2f70b9068804fb Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/extend1.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/faq1.png b/docs/zh/docs/thirdparty_migration/figures/faq1.png new file mode 100644 index 0000000000000000000000000000000000000000..6856b9d37975bf518c2aeb144d6bc54ec1a29bec Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/faq1.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/host_env1.png b/docs/zh/docs/thirdparty_migration/figures/host_env1.png new file mode 100644 index 0000000000000000000000000000000000000000..60754da6d76bc817f6dbb05b30ac1749798f584b Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/host_env1.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/host_env10.png b/docs/zh/docs/thirdparty_migration/figures/host_env10.png new file mode 100644 index 0000000000000000000000000000000000000000..16705810949ee42054d345628599dd0fde26504e Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/host_env10.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/host_env11.png b/docs/zh/docs/thirdparty_migration/figures/host_env11.png new file mode 100644 index 0000000000000000000000000000000000000000..16c9a0d4bed1cfff308c9f8f5e93e98f8ba2c72c Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/host_env11.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/host_env5.png b/docs/zh/docs/thirdparty_migration/figures/host_env5.png new file mode 100644 index 0000000000000000000000000000000000000000..deddc3d6af1687939d274c80307d3e2c0ee7bd6c Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/host_env5.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/host_env6.png b/docs/zh/docs/thirdparty_migration/figures/host_env6.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7ca24a78979fe3346eb37793152cceaaee7145 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/host_env6.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/host_env7.png b/docs/zh/docs/thirdparty_migration/figures/host_env7.png new file mode 100644 index 0000000000000000000000000000000000000000..03370058ff0a6e237f291b543195392efcc05f5d Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/host_env7.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/host_env8.png b/docs/zh/docs/thirdparty_migration/figures/host_env8.png new file mode 100644 index 0000000000000000000000000000000000000000..400c79d9ab48fe0e6f91edc83ffb18082263fa71 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/host_env8.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/host_env9.png b/docs/zh/docs/thirdparty_migration/figures/host_env9.png new file mode 100644 index 0000000000000000000000000000000000000000..aa848dfd00347b2e6d3385d6bcb372c49dc0928e Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/host_env9.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/install1.png b/docs/zh/docs/thirdparty_migration/figures/install1.png new file mode 100644 index 0000000000000000000000000000000000000000..a01325bb62e2e2f874d6110df8a19dea197b69e7 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/install1.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/installarm.png b/docs/zh/docs/thirdparty_migration/figures/installarm.png new file mode 100644 index 0000000000000000000000000000000000000000..d400c62147abe8c5c2b7f35e317e757d8aa85f97 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/installarm.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/installx86.png b/docs/zh/docs/thirdparty_migration/figures/installx86.png new file mode 100644 index 0000000000000000000000000000000000000000..3547bcf70e1b17574006e80be3578daf88344ff0 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/installx86.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/modify_timeout_value.png b/docs/zh/docs/thirdparty_migration/figures/modify_timeout_value.png new file mode 100644 index 0000000000000000000000000000000000000000..d9aab7593b2a42df41103abc4ca5a1eb7c6e34d3 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/modify_timeout_value.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/run1.png b/docs/zh/docs/thirdparty_migration/figures/run1.png new file mode 100644 index 0000000000000000000000000000000000000000..1c653188ef2d6874a07a5dc185139339dc502dbc Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/run1.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/run2.png b/docs/zh/docs/thirdparty_migration/figures/run2.png new file mode 100644 index 0000000000000000000000000000000000000000..7d17f2d56c7adf3ccc9ef7a5e53da636561d8795 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/run2.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/run3.png b/docs/zh/docs/thirdparty_migration/figures/run3.png new file mode 100644 index 0000000000000000000000000000000000000000..cc4d4fbd02e4d60017d5599b74b0fda90843353c Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/run3.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/run4.png b/docs/zh/docs/thirdparty_migration/figures/run4.png new file mode 100644 index 0000000000000000000000000000000000000000..05ff12603bbabfb188f05c7f47551016b7aa110f Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/run4.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/run5.png b/docs/zh/docs/thirdparty_migration/figures/run5.png new file mode 100644 index 0000000000000000000000000000000000000000..e149c3286189a4ef4cc93f7add118f43e20cc96c Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/run5.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/run6.png b/docs/zh/docs/thirdparty_migration/figures/run6.png new file mode 100644 index 0000000000000000000000000000000000000000..27c9263dbf447a0199a2a8d12af1192661efa7bb Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/run6.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/stack.png b/docs/zh/docs/thirdparty_migration/figures/stack.png new file mode 100644 index 0000000000000000000000000000000000000000..63edbbbaac901b154d906eaf803f31bf6fe61bbe Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/stack.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/startvm.png b/docs/zh/docs/thirdparty_migration/figures/startvm.png new file mode 100644 index 0000000000000000000000000000000000000000..1254e08e85b6f515791b258e12b9ac4891cc1ffd Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/startvm.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/vmlist.png b/docs/zh/docs/thirdparty_migration/figures/vmlist.png new file mode 100644 index 0000000000000000000000000000000000000000..830261f13c434327c8bb9a01cc4fb5e6988a01c2 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/vmlist.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/x86_build_fail.png b/docs/zh/docs/thirdparty_migration/figures/x86_build_fail.png new file mode 100644 index 0000000000000000000000000000000000000000..2d91001fa9c76c3154fdaffa31c4b2befc4f34c0 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/x86_build_fail.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/yumarm.png b/docs/zh/docs/thirdparty_migration/figures/yumarm.png new file mode 100644 index 0000000000000000000000000000000000000000..538df33bcb5134c2a3f50b12cc5097d25bab1c76 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/yumarm.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/yumx86.png b/docs/zh/docs/thirdparty_migration/figures/yumx86.png new file mode 100644 index 0000000000000000000000000000000000000000..880f54f8836ad7992345e74075ff355209a08f70 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/yumx86.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296836364.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296836364.png new file mode 100644 index 0000000000000000000000000000000000000000..092be1b363b87b5890c1e825e38f8cc4a6b07980 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296836364.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296836374.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296836374.png new file mode 100644 index 0000000000000000000000000000000000000000..7b407c4ac75025d0beb65a231a30b1129776a45b Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296836374.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296837434.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296837434.png new file mode 100644 index 0000000000000000000000000000000000000000..e947112112a9dff8c3e1d7460dbf00bf2e167adb Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296837434.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296837436.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296837436.png new file mode 100644 index 0000000000000000000000000000000000000000..de9500feba2988934b130bf876a9134e65919f9c Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296837436.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838174.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838174.png new file mode 100644 index 0000000000000000000000000000000000000000..771a238544b18a196e8dc4fce484c037ece281c0 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838174.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838176.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838176.png new file mode 100644 index 0000000000000000000000000000000000000000..240395d4cf2625c2fd762b647d8d371eb3f010c7 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838176.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838182.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838182.png new file mode 100644 index 0000000000000000000000000000000000000000..983ec2e4e16e3570897ece58d3499f1e384d3c55 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838182.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838184.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838184.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea8a5003de5e5a1a6bcbf04ccfda6be3c7591e4 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838184.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838200.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838200.png new file mode 100644 index 0000000000000000000000000000000000000000..ff90e70830df6c5c5c06dadb2446e1aad6739ad6 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838200.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838202.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838202.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcf05ec51cc58c710eede1197923494c4c57f98 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838202.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838204.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838204.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d858e1b97d6fb5bec2418b10fb78e47c4914bf Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838204.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838206.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838206.png new file mode 100644 index 0000000000000000000000000000000000000000..5096cabacc305fec55b581432a5cd127cae84362 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838206.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838208.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838208.png new file mode 100644 index 0000000000000000000000000000000000000000..a406893b51db2081c41c91929f17429ad3072d08 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838208.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838210.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838210.png new file mode 100644 index 0000000000000000000000000000000000000000..3d51ce1a6d6b4de233a4d3c81744f64ac18aea8a Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838210.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838212.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838212.png new file mode 100644 index 0000000000000000000000000000000000000000..49c8735599f0e0633eeb046d9f0795df2d0f5870 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838212.png differ diff --git a/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838214.png b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838214.png new file mode 100644 index 0000000000000000000000000000000000000000..8efa6420b0f2c4fbf6774fe991dcd0242a8a1ea9 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/figures/zh-cn_image_0296838214.png differ diff --git a/docs/zh/docs/thirdparty_migration/k8sinstall.md b/docs/zh/docs/thirdparty_migration/k8sinstall.md new file mode 100644 index 0000000000000000000000000000000000000000..392b605153bd19fe459a24aeaab3a486f7278558 --- /dev/null +++ b/docs/zh/docs/thirdparty_migration/k8sinstall.md @@ -0,0 +1,486 @@ +# K8S 迁移至 openEuler 指导 + +- [软件介绍](#软件介绍) +- [环境配置](#环境配置) +- [系统配置](#系统配置) +- [软件安装](#软件安装) +- [软件卸载](#软件卸载) + + + + + +## 软件介绍 + +Kubernetes 集群(以下简称 K8S)是一个开源的容器集群管理平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。Kubernetes的目标是促进完善组件和工具的生态系统,以减轻应用程序在云上运行的负担。 + +Kubernetes 集群中存在两种节点,Master 节点和 Worker 节点。Master 节点是集群的控制节点,负责整个集群的管理和控制。针对集群执行的控制命令都是发送给 Master 节点的。Worker 节点是 Kubernetes 集群中的工作负载节点,Worker 上的工作负载由 Master 分配,当某个 Worker 宕机时,Master 会将上面的工作负载转移到其他节点上去。 + +本文描述使用两个节点来搭建 Kubernetes 集群的方法,一个作为 Master 节点,另一个作为 Worker 节点。 + + +## 环境配置 + +### 软件平台 + +| 软件名称 |版本号 |安装方法 | +|:--- |:---- |:---- | +| openEuler | 20.03-LTS-SP3 |iso | +| gnu | 7.3.0 | | +| python3 | 3.7.4 | | +| bash | 5.0.11 | | + +### 必要依赖包 + +| 软件名称 |版本号 |安装方法 | +|:--- |:---- |:---- | +| docker-engine | 18.09.0-101 |见安装docker配置yum源 | +| kubelet | 1.15.10/1.18/1.16 | 见安装k8s组件 | +| kubeadm | 1.15.10/1.18/1.16 | 见安装k8s组件 | +| kubectl | 1.15.10/1.18/1.16 | 见安装k8s组件 | +| kubernetes-cni | 1.15.10/1.18/1.16 | 见安装k8s组件 | + +>![](./public_sys-resources/icon-note.gif) **说明:** +>本文适用于 K8S 1.15.10/1.18/1.16 三个版本,本文以 1.15.10 版本为例说明。 + +## 系统配置 + + +### 修改主机配置 + +分别编辑 Master 和 Worker 节点的`/etc/hosts` 文件,在文件末尾添加 Master 和 Worker 节点的IP。 + +``` +192.168.122.72 master +192.168.122.130 worker +``` + +### 安装 docker 配置 yum 源 + +1. 可选,官方发布的镜像中已配置好 yum 源,不需要另外配置。如系统中没有配置任何 openEuler yum 源,则需要按照如下操作新增 repo 文件,`baseurl`值以发布版本中的源地址为准。 +* aarch64架构 + ``` + $ vim /etc/yum.repos.d/openEuler_aarch64.repo + ``` + + ![](./figures/yumarm.png) + +* x86架构 + + ``` + $ vim /etc/yum.repos.d/openEuler_x86_64.repo + ``` + + ![](./figures/yumx86.png) + +2. 分别在 Master 和 Worker 节点上执行。 +清除缓存中的软件包及旧的headers,重新建立缓存。 + + ``` + $ yum clean all + $ yum makecache + ``` +3. 安装docker并启动相关服务,输出Docker的状态。 + + ``` + $ yum -y install docker-engine + $ systemctl daemon-reload + $ systemctl status docker + $ systemctl restart docker + $ systemctl status docker + $ systemctl enable docker + ``` + +### 关闭防火墙和selinux + +由于 nftables 后端兼容性问题,产生了重复的防火墙规则,需要关闭防火墙;为了使容器可以访问宿主机的文件系统,需要关闭 selinux。 + +分别在 Master 和 Worker 节点上执行如下命令,关闭防火墙和 selinux。 + +``` +$ systemctl stop firewalld +$ systemctl disable firewalld +$ setenforce 0 +$ sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config +``` + +### 配置 kubernetes yum 源 + +1. 分别在 Master 和 Worker 节点上执行如下命令,配置 kubernetes 的 yum 源。 + * aarch64架构 + ``` + cat < /etc/yum.repos.d/kubernetes.repo + + [kubernetes] + name=Kubernetes + baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64 + enable=1 + gpgcheck=1 + repo_gpgcheck=1 + gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg + http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg + EOF + ``` + + * x86架构: + ``` + cat < /etc/yum.repos.d/kubernetes.repo + + [kubernetes] + name=Kubernetes + baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 + enable=1 + gpgcheck=1 + repo_gpgcheck=1 + gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg + http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg + EOF + ``` + +2. 配置完成后,执行如下命令,清除缓存中的软件包及旧的 headers,重新建立缓存。 + ``` + $ yum clean all + $ yum makecache + ``` + + +### 关闭交换分区 + +在安装 K8S 集群时,Linux 的 Swap 内存交换机制需要关闭,否则会因为内存交换影响系统的性能和稳定性。 + +1. 分别在 Master 和 Worker 节点上执行如下命令,关闭交换分区。 + + ``` + $ swapoff -a + $ cp -p /etc/fstab /etc/fstab.bak$(date '+%Y%m%d%H%M%S') + $ sed -i "s/\/dev\/mapper\/openeuler-swap/\#\/dev\/mapper\/openeuler-swap/g" /etc/fstab + ``` + +2. 执行如下命令查看是否修改成功。 + ``` + $ cat /etc/fstab + ``` + + ![](./figures/zh-cn_image_0296836364.png) + +3. 执行如下命令重启系统。 + + ``` + $ reboot + ``` + +## 软件安装 + +### 安装k8s组件 + +分别在 Master 和 Worker 节点上执行如下命令,安装 k8s 组件。 + +``` +$ yum install -y kubelet-1.15.10 kubeadm-1.15.10 kubectl-1.15.10 kubernetes-cni-0.7.5 +``` + +### 配置开机启动项 + +1. 分别在 Master 和 Worker 节点上执行如下命令,配置开机启动 kubelet。 + + ``` + $ systemctl enable kubelet + ``` + +2. 分别在 Master 和 Worker 节点上创建 `/etc/sysctl.d/k8s.conf` 文件,并添加如下内容。 + + ``` + net.bridge.bridge-nf-call-ip6tables = 1 + net.bridge.bridge-nf-call-iptables = 1 + net.ipv4.ip_forward = 1 + vm.swappiness=0 + ``` + +3. 分别在 Master 和 Worker 节点上执行如下命令,使修改生效。 + + ``` + $ modprobe br_netfilter + $ sysctl -p /etc/sysctl.d/k8s.conf + ``` + +### 通过Docker下载组件 + +Master 和 Worker 节点通过 Docker 下载其他组件,下载镜像时需要根据架构选择相应的版本,以下命令分别两台节点上执行,操作步骤如下。 + +1. 查看初始化所需镜像,执行如下命令,结果如图所示。 + ``` + $ kubeadm config images list + ``` + ![](./figures/downloaddocker.png) + >![](./public_sys-resources/icon-note.gif) **说明:** + > K8S所需镜像版本有可能会变动,故需查看列表匹配需要下载的Docker镜像,以下镜像版本仅供参考。 + +2. 执行如下命令,从 DockerHub 上下载镜像。 + * aarch64架构 + ``` + $ docker pull gcmirrors/kube-apiserver-arm64:v1.15.10 + $ docker pull gcmirrors/kube-controller-manager-arm64:v1.15.10 + $ docker pull gcmirrors/kube-scheduler-arm64:v1.15.10 + $ docker pull gcmirrors/kube-proxy-arm64:v1.15.10 + $ docker pull gcmirrors/pause-arm64:3.1 + $ docker pull gcmirrors/etcd-arm64:3.3.10 + $ docker pull coredns/coredns:1.3.1 + ``` + * x86架构 + ``` + $ docker pull gcmirrors/kube-apiserver-amd64:v1.15.10 + $ docker pull gcmirrors/kube-controller-manager-amd64:v1.15.10 + $ docker pull gcmirrors/kube-scheduler-amd64:v1.15.10 + $ docker pull gcmirrors/kube-proxy-amd64:v1.15.10 + $ docker pull gcmirrors/pause-amd64:3.1 + $ docker pull gcmirrors/etcd-amd64:3.3.10 + $ docker pull coredns/coredns:1.3.1 + ``` + >![](./public_sys-resources/icon-note.gif) **说明:** + >如果配置了docker镜像库代理,可以直接将标签换为“k8s.gcr.io”并省略以下步骤。 + +3. 执行如下命令,给已下载的镜像打标签。 + * aarch64架构 + ``` + $ docker tag gcmirrors/kube-apiserver-arm64:v1.15.10 k8s.gcr.io/kube-apiserver:v1.15.10 + $ docker tag gcmirrors/kube-controller-manager-arm64:v1.15.10 k8s.gcr.io/kube-controller-manager:v1.15.10 + $ docker tag gcmirrors/kube-scheduler-arm64:v1.15.10 k8s.gcr.io/kube-scheduler:v1.15.10 + $ docker tag gcmirrors/kube-proxy-arm64:v1.15.10 k8s.gcr.io/kube-proxy:v1.15.10 + $ docker tag gcmirrors/pause-arm64:3.1 k8s.gcr.io/pause:3.1 + $ docker tag gcmirrors/etcd-arm64:3.3.10 k8s.gcr.io/etcd:3.3.10 + $ docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1 + ``` + * x86架构 + ``` + $ docker tag gcmirrors/kube-apiserver-amd64:v1.15.10 k8s.gcr.io/kube-apiserver:v1.15.10 + $ docker tag gcmirrors/kube-controller-manager-amd64:v1.15.10 k8s.gcr.io/kube-controller-manager:v1.15.10 + $ docker tag gcmirrors/kube-scheduler-amd64:v1.15.10 k8s.gcr.io/kube-scheduler:v1.15.10 + $ docker tag gcmirrors/kube-proxy-amd64:v1.15.10 k8s.gcr.io/kube-proxy:v1.15.10 + $ docker tag gcmirrors/pause-amd64:3.1 k8s.gcr.io/pause:3.1 + $ docker tag gcmirrors/etcd-amd64:3.3.10 k8s.gcr.io/etcd:3.3.10 + $ docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1 + ``` + +4. 执行如下命令,查看上步中的镜像是否成功打上 k8s 标签,查询结果如下图所示: + + ``` + $ docker images | grep k8s + ``` + + ![](./figures/zh-cn_image_0296836374.png) + +5. 标签打好后,执行如下命令,删除当前环境上的旧镜像。 + * aarch64架构 + ``` + $ docker rmi gcmirrors/kube-apiserver-arm64:v1.15.10 + $ docker rmi gcmirrors/kube-controller-manager-arm64:v1.15.10 + $ docker rmi gcmirrors/kube-scheduler-arm64:v1.15.10 + $ docker rmi gcmirrors/kube-proxy-arm64:v1.15.10 + $ docker rmi gcmirrors/pause-arm64:3.1 + $ docker rmi gcmirrors/etcd-arm64:3.3.10 + $ docker rmi coredns/coredns:1.3.1 + ``` + * x86架构 + ``` + $ docker rmi gcmirrors/kube-apiserver-amd64:v1.15.10 + $ docker rmi gcmirrors/kube-controller-manager-amd64:v1.15.10 + $ docker rmi gcmirrors/kube-scheduler-amd64:v1.15.10 + $ docker rmi gcmirrors/kube-proxy-amd64:v1.15.10 + $ docker rmi gcmirrors/pause-amd64:3.1 + $ docker rmi gcmirrors/etcd-amd64:3.3.10 + $ docker rmi coredns/coredns:1.3.1 + ``` +### 配置 Master 节点 + +1. 在 Master 节点上执行如下命令,进行集群初始化。 + + ``` + $ systemctl daemon-reload + $ systemctl restart kubelet + $ kubeadm init --kubernetes-version v1.15.10 --pod-network-cidr=10.244.0.0/16 + ``` + 集群初始化成功后,界面显示信息如下。 + + ![](./figures/configmaster.png) + + 保存上图中的`kubeadm join`命令,在下文[Worker节点加入集群](#jump2)步骤中需要执行该命令。 + + + > ![](./public_sys-resources/icon-note.gif) **说明:** + > 使用 kubeadm 安装的 Kubernetes 会自动生成集群所需的证书。所有证书都存放在 `/etc/kubernetes/pki` 目录下。 + +2. 按照初始化成功的控制台显示信息配置集群,命令如下所示。 + + ``` + $ mkdir -p $HOME/.kube + $ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config + $ chown $(id -u):$(id -g) $HOME/.kube/config + ``` + +3. 在Master节点执行如下命令,查看集群节点信息。 + ``` + $ kubectl get node + ``` + 由于还没有配置calico网络,当前node状态为未就绪。 + +### 安装calico网络插件 + +1. 分别在 Master 和 Worker 节点上执行如下命令,下载 calico 容器镜像。 + * aarch64架构 + ``` + $ docker pull calico/cni:v3.14.2-arm64 + $ docker pull calico/node:v3.14.2-arm64 + $ docker pull calico/kube-controllers:v3.14.2-arm64 + $ docker pull calico/pod2daemon-flexvol:v3.14.2-arm64 + ``` + * x86架构 + ``` + $ docker pull calico/cni:v3.14.2-amd64 + $ docker pull calico/node:v3.14.2-amd64 + $ docker pull calico/kube-controllers:v3.14.2-amd64 + $ docker pull calico/pod2daemon-flexvol:v3.14.2-amd64 + ``` +2. 分别在 Master 和 Worker 节点上执行如下命令,修改已下载的镜像标签 + * aarch64架构 + ``` + $ docker tag calico/cni:v3.14.2-arm64 calico/cni:v3.14.2 + $ docker tag calico/node:v3.14.2-arm64 calico/node:v3.14.2 + $ docker tag calico/kube-controllers:v3.14.2-arm64 calico/kube-controllers:v3.14.2 + $ docker tag calico/pod2daemon-flexvol:v3.14.2-arm64 calico/pod2daemon-flexvol:v3.14.2 + ``` + * x86架构 + ``` + $ docker tag calico/cni:v3.14.2-amd64 calico/cni:v3.14.2 + $ docker tag calico/node:v3.14.2-amd64 calico/node:v3.14.2 + $ docker tag calico/kube-controllers:v3.14.2-amd64 calico/kube-controllers:v3.14.2 + $ docker tag calico/pod2daemon-flexvol:v3.14.2-amd64 calico/pod2daemon-flexvol:v3.14.2 + ``` + +3. 执行如下命令,查看是否成功打上 calico 标签。 + + ``` + $ docker images | grep calico + ``` + ![](./figures/calicotag.png) + +4. 分别在 Master 和 Worker 节点上执行如下命令,删除旧镜像 + * aarch64架构 + ``` + $ docker rmi calico/cni:v3.14.2-arm64 + $ docker rmi calico/node:v3.14.2-arm64 + $ docker rmi calico/kube-controllers:v3.14.2-arm64 + $ docker rmi calico/pod2daemon-flexvol:v3.14.2-arm64 + ``` + * x86架构 + ``` + $ docker rmi calico/cni:v3.14.2-amd64 + $ docker rmi calico/node:v3.14.2-amd64 + $ docker rmi calico/kube-controllers:v3.14.2-amd64 + $ docker rmi calico/pod2daemon-flexvol:v3.14.2-amd64 + ``` +5. 在 Master 节点上执行如下命令,下载 yaml 文件。 + + ``` + $ wget https://docs.projectcalico.org/v3.14/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml --no-check-certificate + ``` + +6. 在 Master 节点上执行如下命令,部署 calico。 + + ``` + $ kubectl apply -f calico.yaml + ``` +7. 在 Master 节点上执行如下命令,查看节点状态,状态为 Ready 即表明安装成功。 + + ``` + $ kubectl get nodes + ``` + + +### 加入集群 + +1. 在 Worker 节点执行[配置 Master 节点](#jump1)中保存的命令,将 Worker 节点加入集群。 + + ``` + $ kubeadm join 192.168.122.72:6443 --token 9hyjsw.102m4qpmr93msfdv --discovery-token-ca-cert-hash sha256:ccf9a7762c7ae08fab3ec0649897b1de8e3ef37cf789517f42ea95fad0bd29b1 + ``` + >![](./public_sys-resources/icon-note.gif) **说明:** + >token默认有效期为24小时,若token超时,可在Master节点上执行命令`kubeadm token create --print-join-command`重新生成。 + +2. 在Master节点上执行如下命令,查看集群中加入的子节点。 + + ``` + $ kubectl get nodes + ``` + +3. 在Master节点上执行如下命令,查看集群中的 pod 状态,所有 pod 状态均为 Running 时表示配置成功,配置成功的界面显示如下图所示。 + + ``` + $ kubectl get pods -A + ``` + + ![](./figures/clusteradd.png) + + + +### 查看状态信息相关命令 + +* 查看所有 pods + + ``` + kubectl get pods -A + ``` + +* 查看当前节点上运行在某一命名空间的所有 pod。 + + ``` + kubectl get pods -n $namespace + ``` + +* 查看某一命名空间下 pod 的详细信息。 + + ``` + kubectl get pods -n $namespace -o wide + ``` + +* 查看单个 pod 信息,可用于定位 pod 状态异常问题。 + + ``` + kubectl describe pod $podname -n $namespace + ``` + +* 删除pod,删除正在运行的pod,控制器会马上再创建一个新的 + + ``` + kubectl delete pods $podname + ``` + + +## 软件卸载 + +如果不需要使用 k8s 集群时,可以按本章节操作,删除 k8s 集群,以下命令需要分别在 Master 和 Worker 节点上执行。 +1. 执行如下命令,清空 k8s 集群设置 + + ``` + $ kubeadm reset + $ rm –rf $HOME/.kube/config + ``` + +2. 执行如下命令,删除基础组件镜像。 + + ``` + $ docker rmi k8s.gcr.io/kube-apiserver:v1.15.10 + $ docker rmi k8s.gcr.io/kube-controller-manager:v1.15.10 + $ docker rmi k8s.gcr.io/kube-scheduler:v1.15.10 + $ docker rmi k8s.gcr.io/kube-proxy:v1.15.10 + $ docker rmi k8s.gcr.io/pause:3.1 + $ docker rmi k8s.gcr.io/etcd:3.3.10 + $ docker rmi k8s.gcr.io/coredns:1.3.1 + ``` + +3. 执行如下命令,卸载管理软件。 + + ``` + $ yum erase –y kubelet kubectl kubeadm kubernetes-cni + ``` + + diff --git a/docs/zh/docs/thirdparty_migration/openstack.md b/docs/zh/docs/thirdparty_migration/openstack.md new file mode 100644 index 0000000000000000000000000000000000000000..ed5aede562baca40c31dcf518f81f96cf7993c2d --- /dev/null +++ b/docs/zh/docs/thirdparty_migration/openstack.md @@ -0,0 +1,5 @@ +# OpenStack安装指南 + +本文介绍OpenStack train版本、queens版本和rocky版本的安装指导,指导用户快速部署OpenStack。 + +使用人员需要具备基本的 Linux 操作系统和OpenStack知识。 \ No newline at end of file diff --git a/docs/zh/docs/thirdparty_migration/prep_install.sh b/docs/zh/docs/thirdparty_migration/prep_install.sh new file mode 100644 index 0000000000000000000000000000000000000000..1161fbff264ca33c993990b6a3372c47a6f159a9 --- /dev/null +++ b/docs/zh/docs/thirdparty_migration/prep_install.sh @@ -0,0 +1,145 @@ +#!/bin/bash +# This script contains the preparations before installing openstack + +HTTPD_CG="/etc/httpd/conf/httpd.conf" +QEMU_CG="/etc/libvirt/qemu.conf" + +EDK2_UEFI_PATH="/usr/share/edk2" +UEFI_DIR_ARM="/usr/share/AAVMF" +UEFI_DIR_X86="/usr/share/OVMF" +DEVSTACK_HOME="/home/stack/devstack" + +# Confirm installation mode for openstack +function install_mode() +{ + if [[ ! `rpm -qa` =~ "openeuler-lsb" ]]; then + echo "Maybe you should confirm whether openeuler-lsb is installed" + exit 1 + fi + + # init function is_openeuler + sed -i "/\# Git Functions/i\\function is_openeuler {\n\tif [[ -z \"\$os_VENDOR\" ]]; then\n\tGetOSVersion\n\tfi\n\n\t[[ \"\$os_VENDOR\" =~ (openEuler) ]]\n}\n" $DEVSTACK_HOME/functions-common + + # build function is_openeuler in functions-common + sed -i "s/elif is_fedora/elif is_fedora || is_openeuler/g" $DEVSTACK_HOME/functions-common + sed -i "/DISTRO=\"f\$os_RELEASE\"/a\ \ \ \ elif [[ \"\$os_VENDOR\" =~ (openEuler) ]]; then\n\tDISTRO=\"openEuler-\$os_RELEASE\"" $DEVSTACK_HOME/functions-common + # build function is_openeuler with remaining + grep -nir "is_fedora" | grep -v functions-common | cut -d ":" -f1 | sort | uniq | for line in `xargs` + do + sed -i "s/is_fedora/is_fedora || is_openeuler/g" $line + done + + # install glance + sed -i "/\${LIBS_FROM_GIT} = 'ALL'/i\\\ \ \ \ if [ \$name == \"glance_store\" ]; then enabled=0; fi" $DEVSTACK_HOME/inc/python + + # source openrc + sed -i "/openstack project list/i\\source openrc admin admin" $DEVSTACK_HOME/lib/neutron_plugins/services/l3 + + # Change VIRTUALENV_CMD + pip3 install virtualenv + sed -i "s/python3 -m venv/virtualenv/g" $DEVSTACK_HOME/stackrc + + # Fixed git branch + sed -i "s/master/stable\/train/g" $DEVSTACK_HOME/stackrc + + # Change pypi repo + sed -i "s/\$cmd_pip install/\$cmd_pip install -i https:\/\/mirrors.aliyun.com\/pypi\/simple/g" $DEVSTACK_HOME/inc/python +} + +# Config mod_wsgi +function mod_wsgi_cg() +{ + sudo ls -al $HTTPD_CG 2>&1 > /dev/null + if [[ $? -ne 0 ]]; then + echo "Maybe you should confirm whether httpd is installed" + exit 1 + fi + + sudo sed -i "/Include conf.modules.d\/\*.conf/i\\LoadModule wsgi_module modules/mod_wsgi_python3.so" $HTTPD_CG +} + +# QEMU support for uefi +function qemu_uefi_init() +{ + sudo ls -al $QEMU_CG 2>&1 > /dev/null + if [[ $? -ne 0 ]]; then + echo "Maybe you should confirm whether qemu is installed" + exit 1 + fi + + if [[ `arch` == aarch64 ]]; then + sudo sed -i '$anvram = [\"/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd\",\"/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2/aarch64/vars-template-pflash.raw\"]' $QEMU_CG + fi + if [[ `arch` == x86_64 ]]; then + sudo sed -i '$anvram = [\"/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd\",\"/usr/share/edk2/ovmf/OVMF_CODE.fd:/usr/share/edk2/ovmf/OVMF_VARS.fd"]' $QEMU_CG + fi +} + +# Bugfix when yum install edk2 +function edk2_uefi_init() +{ + if [[ ! -d $EDK2_UEFI_PATH ]]; then + echo "Maybe you should confirm whether edk2 is installed" + exit 1 + fi + + if [[ `arch` == "aarch64" ]]; then + sudo mkdir $UEFI_DIR_ARM && pushd $UEFI_DIR_ARM + sudo ln -s $EDK2_UEFI_PATH/aarch64/QEMU_EFI-pflash.raw AAVMF_CODE.fd + sudo ln -s $EDK2_UEFI_PATH/aarch64/vars-tmplate-pflash.raw AAVMF_VARS.fd + popd + fi + if [[ `arch` == "x86_64" ]]; then + sudo mkdir $UEFI_DIR_X86 && pushd $UEFI_DIR_X86 + sudo ln -s $EDK2_UEFI_PATH/ovmf/OVMF_CODE.fd OVMF_CODE.fd + sudo ln -s $EDK2_UEFI_PATH/ovmf/OVMF_VARS.fd OVMF_VARS.fd + popd + + fi + + qemu_uefi_init +} + +# Fixed libvirt version +function libvirt_version_fixed() +{ + if [[ ! `rpm -qa` =~ "python3-libvirt" ]]; then + echo "Maybe you should confirm whether python3-libvirt is installed" + exit 1 + fi + sudo sed -i "s/pip_uninstall libvirt-python//g" $DEVSTACK_HOME/lib/nova_plugins/functions-libvirt + sudo sed -i "s/pip_install_gr libvirt-python//g" $DEVSTACK_HOME/lib/nova_plugins/functions-libvirt +} + +# The installation system script execution process must depend on +function yum_pkgs() +{ + # install base service + sudo yum install -y gcc-c++ python3-devel tar patch git + # install necessary dependences + sudo yum install -y python3-systemd + sudo yum install -y libffi-devel + sudo yum install -y open-iscsi-devel + sudo yum install -y libxml2 libxml2-devel + sudo yum install -y python3-lxml python3-libxml2 libxslt libxslt-devel + sudo yum install -y pcp-system-tools + sudo yum install -y haproxy + if [[ `arch` == "aarch64" ]]; then + sudo yum install -y edk2-aarch64 edk2-devel python3-edk2-devel + fi + if [[ `arch` == "x86_64" ]]; then + sudo yum install -y edk2-ovmf edk2-devel python3-edk2-devel + fi + sudo yum install -y libvirt* python3-libvirt && libvirt_version_fixed + sudo yum install -y qemu qemu-guest-agent && edk2_uefi_init + sudo yum install -y httpd httpd-devel + sudo yum install -y memcached + sudo yum install -y mariadb-server + sudo yum install -y rabbitmq-server + sudo yum install -y python3-uWSGI python3-mod_wsgi && mod_wsgi_cg + sudo yum install -y python3-copr python3-scss + sudo yum install -y openeuler-lsb && install_mode + sudo yum install -y python3-sqlalchemy python3-SQLAlchemy-Utils +} + +yum_pkgs diff --git a/themes/project/layouts/taxonomy/taxonomy.html b/docs/zh/docs/thirdparty_migration/public_sys-resources/.keep similarity index 100% rename from themes/project/layouts/taxonomy/taxonomy.html rename to docs/zh/docs/thirdparty_migration/public_sys-resources/.keep diff --git a/docs/zh/docs/thirdparty_migration/public_sys-resources/icon-note.gif b/docs/zh/docs/thirdparty_migration/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/public_sys-resources/icon-note.gif differ diff --git a/docs/zh/docs/thirdparty_migration/public_sys-resources/icon-notice.gif b/docs/zh/docs/thirdparty_migration/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and b/docs/zh/docs/thirdparty_migration/public_sys-resources/icon-notice.gif differ diff --git a/docs/zh/docs/thirdparty_migration/springframework.md b/docs/zh/docs/thirdparty_migration/springframework.md new file mode 100644 index 0000000000000000000000000000000000000000..f7ec1acb3ee0beff6068adb03d7efe5eb74c8a7d --- /dev/null +++ b/docs/zh/docs/thirdparty_migration/springframework.md @@ -0,0 +1,415 @@ +# Spring Framework迁移至 openEuler 指导 + +- [软件介绍](#软件介绍) +- [环境配置](#环境配置) +- [系统配置](#系统配置) +- [软件编译](#软件编译) +- [软件运行](#软件运行) +- [FAQ](#FAQ) + + +## 软件介绍 + +### Spring Framwork 简介 + +Spring Framework 是为解决 EJB 开发 JavaEE 程序代码冗余,配置复杂等诸多问题而引入的开源框架。Spring 作为容器,提供了对多种技术\(JMS, MQ, UnitTest\)的支持,同时通过 AOP\(事物管理,日志等\)提供了众多方便应用的辅助类,对主流框架提供了良好的支持。 + +Spring Framework 整体框架结构如 [图1](#fig1601161484619)所示 + +**图 1** Spring Framework 整体框架结构 +![](./figures/zh-cn_image_0296838174.png) + +Spring Framework 包括三个核心组件 Spring-Core、Spring-Context 和 Spring-Beans。还包括基础组件Spring-AOP、Spring-Web 和 Spring-Webmvc 等,各个组件的功能说明如下: + +**Spring-Core** +核心容器提供 Spring 框架的基本功能,主要组件是 BeanFactory ,实现对 Bean 的管理。 + +**Spring-Context** +是一个配置文件,向Spring Framework 提供上下文信息。上下文包括企业服务,例如 JNDI,EJB,电子邮件,国际化,校验和调度功能。 + +**Spring-Beans** +实现IOC\(控制反转\)的包,是 Spring Framework 的关键特性。 + +**Spring-AOP** +直接将面向切面的编程功能集成到 Spring 框架中,所以可以很容易的使用 Spring 框架管理任何对象。Spring-AOP 为基于 Spring 的应用程序中的对象提供了事物管理服务,不依赖 EJB 组件,就可以将声明性事物管理集成到应用程序中。 + +**Spring-Web** +建立在 Spring-Context 模块之上,为基于 Web 的应用程序提供上下文。 + +**Spring-Webmvc** +是一个全功能的构建 web 应用程序的 MVC 实现,容纳了大量视图技术。MVC 框架通过策略接口变成了高度可配置的。 + +从上面的介绍可以看出,IOC\(控制反转\)的实现包 Spring-Beans 和 AOP\(依赖注入\)的实现包 Spring-AOP 是整个框架的基础,而 Spring-Core 是整个框架的核心。在此基础上,Spring-Context 提供了上下文环境,为各个模块提供粘合作用。而 web 部分的功能,是依赖 Spring-Web 和 Spring-Webmvc 来实现的。 + + +### Spring Boot 和 Spring Cloud 简介 + +Spring Framework 引入到本地 maven 仓库后,就可以使用这个框架对 Java 程序进行 maven 构建。但 Spring 构建需要配置大量的 xml 文件,开发繁琐。Spring Boot 基于 Spring Framework 来构建,是一种快速构建 Spring 应用的方案,而 Spring Cloud 是构建 Spring Boot的分布式环境,也就是常说的云应用,Spring Boot 起到承上启下的作用。 + +Spring Framework、Spring Boot和Spring Cloud三者的关系如 [图2](#fig1601161484620)所示 + +**图 2** 组件关系 +![](./figures/zh-cn_image_0296838176.png) + +Spring Boot 是 Spring 的一套快速配置方案,可以用来快速开发单个微服务,Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具;Spring Boot 专注于快速、方便集成单个个体,Spring Cloud 是关注全局的服务治理框架。Spring Boot 可以离开 Spring Cloud 独立使用开发项目,但 Spring Cloud 无法离开 Spring Boot使用。 + +## 环境配置 + +建议部署环境内存大于 2G。 + +### 软件平台 + +| 软件名称 |版本号 |安装方法 | +|:--- |:---- |:---- | +| openEuler | 20.03-LTS-SP3 |iso | +| tar | 1.32 |yum install | +| wget | 1.20.3 |yum install | +| git | 2.27 |yum install | + + +### 必要依赖包 + +| 软件名称 |版本号 |安装方法 | +|:--- |:---- |:---- | +| jdk | 1.8.0 |见基础软件安装 | +| maven | 3.5.4 |见基础软件安装 | + + +## 系统配置 + +### 配置本地 yum 源 + +若环境可以连接互联网,可不用配置本地源,直接用系统配置好的源或者自己添加其它网络源即可。 + +1. 执行以下命令,配置源文件,查看已经配置好的 yum 源的 repo 文件。 + + ``` + # cat /etc/yum.repos.d/openEuler.repo + [base] + name=base + baseurl=file:///mnt + enable=1 + gpgcheck=0 + ``` + +2. 执行以下命令,挂载源镜像。 + + ``` + # mount /root/openEuler-20.03-LTS-SP3-everything-aarch64-dvd.iso /mnt + ``` + +## 软件编译 + +## 使用本地 yum 源安装基础软件 + +1. 执行以下命令,安装 maven 构建工具。 + + ``` + # yum -y install maven + ``` + +2. 执行以下命令,利用 yum 源,安装 jdk。 + + ``` + # yum -y install java-1.8.0-openjdk-devel + ``` + +3. 安装验证,安装成功输入以下命令,分别查看 maven 和 java 的版本信息以及查看 javac 的使用方法 + + ``` + # mvn -version + # java -version + # javac -help + ``` + + ![](./figures/install1.png) + + + +### 安装 Spring Framework 到本地 maven 仓库 + +1. 执行以下命令,获取 Spring Framework 工程源码包: + + ``` + # cd /home + # wget https://github.com/Spring-projects/Spring-framework/archive/v5.2.10.RELEASE.tar.gz + # tar -xvf v5.2.10.RELEASE.tar.gz + ``` + +2. 执行以下命令,编译Spring Framework源码包,编译成功页面显示如下: + + ``` + # cd /home/spring-framework-5.2.10.RELEASE + # ./gradlew build + ``` + + ![](./figures/zh-cn_image_0296838182.png) + +3. 执行以下命令,安装 Spring Framework 到本地 maven 仓库。 + + ``` + # ./gradlew publishToMavenLocal -x javadoc -x dokka -x asciidoctor + ``` + + 安装成功后会在`/root/.m2/repository/org/`文件夹下看到 springframework 文件夹。 + ![](./figures/zh-cn_image_0296838184.png) + + +### Spring Boot工程 tomcat 用例编译 + +1. 执行以下命令,获取用例源码。 + + ``` + # cd /home + # wget https://github.com/Spring-projects/Spring-boot/archive/v1.5.4.RELEASE.tar.gz + # tar -xvf v1.5.4.RELEASE.tar.gz + # cd /home/spring-boot-1.5.4.RELEASE/spring-boot-samples/spring-boot-sample-tomcat + ``` + +2. 执行以下命令,编译工程。 + + ``` + # mvn package -DskipTests + ``` + +### Spring Cloud 工程用例编译 + +1. 执行以下命令,编译 Spring-cloud-gateway-sample 工程。 + + ``` + # cd /home + # git clone https://github.com/Spring-cloud-samples/Spring-cloud-gateway-sample.git + # cd /home/Spring-cloud-gateway-sample + # mvn package -DskipTests + ``` + +2. 执行以下命令,编译 zuul-server-1.0.0.BUILD-SNAPSHOT 工程。 + + ``` + # cd /home + # git clone https://github.com/Spring-cloud-samples/zuul-server.git + # cd /home/zuul-server + # mvn package -DskipTests + + ``` + +3. 执行以下命令,编译 eureka-0.0.1-SNAPSHOT 工程 + + ``` + # cd /home + # git clone https://github.com/Spring-cloud-samples/eureka.git + # cd /home/eureka + # mvn package -DskipTests + ``` + +4. 执行以下命令,编译 feign-eureka 工程。 + + ``` + # cd /home + # git clone https://github.com/Spring-cloud-samples/feign-eureka.git + # cd /home/feign-eureka + # mvn package -DskipTests + ``` + + +## 软件运行 + +### Spring Boot单机环境运行示例 + +1. spring-boot-sample-tomcat 若编译成功,会在工程目录的`/home/spring-boot-1.5.4.RELEASE/spring-boot-samples/spring-boot-samples-tomcat/target` 文件夹下生成 spring-boot-sample-tomcat-1.5.4.RELEASE.jar 文件,执行以下命令,运行这个 jar 文件。 + + ``` + # java -jar spring-boot-sample-tomcat-1.5.4.RELEASE.jar + ``` + +2. 待控制台出现 `tomcat start` 字样后,启动新窗口执行以下命令,查看 tomcat 服务运行状态。 + + ``` + # curl http://localhost:8080 + ``` + 回显“helloworld”即表明运行成功。 + +3. 如果要关闭 Spring-Boot 服务,在步骤 1 窗口中,按 ctrl + c 组合键关闭服务。 + +### Spring Cloud单机环境运行示例 + + +#### spring-cloud-gateway-sample 工程运行示例。 + +1. spring-cloud-gateway-sample 工程若编译成功,会在工程目录的 `/home/Spring-cloud-gateway-sample/target` 文件夹下生成 spring-cloud-gateway-sample-0.0.1-SNAPSHOT.jar 文件,执行如下命令,运行这个 jar 文件。 + + ``` + # java -jar spring-cloud-gateway-sample-0.0.1-SNAPSHOT.jar + ``` +2. 待控制台出现 `Started DemogatewayApplication` 字样后,启动新窗口执行以下命令,查看 gateway服务运行状态。返回结果如下图所示,即表明运行成功。 + + ``` + # curl http://localhost:8080/get + ``` + ![](./figures/run1.png) +3. 如果要关闭服务,在步骤 1 窗口中,按 ctrl + c 组合键关闭服务。 + +#### zuul-server工程运行示例 +1. zuul-server 需要在 eureka 工程运行后再运行。在`/home/eureka/target` 目录下,执行如下命令,启动 eureka 服务。 + + ``` + # java -jar eureka-0.0.1-SNAPSHOT.jar + ``` +2. 待控制台出现 `Started EurekaApplicattion` 字样后,启动新窗口在工程目录`/home/zuul-server/target`下执行以下命令,启动 zuul-server 服务。 + + ``` + # java -jar zuul-server-1.0.0.BUILD-SNAPSHOT.jar + ``` +3. 待控制台出现 `Started ZuulServerApplicatttion` 字样后,启动新窗口执行以下命令查看服务运行状态。 + + ``` + # curl http://localhost:8765 + ``` + zuul-server 服务启动后控制台会输出访问的端口为 8765, curl 访问本地 8765 端口,会看到返回的带有时间戳的 404 信息,同时服务端控制会记录到一次访问事件。 + + curl访问8765端口如下图所示: + + ![](./figures/run3.png) + + 用户访问时服务端打印的日志信息如下图所示: + + ![](./figures/run4.png) +4. 如果要关闭服务,在步骤 2 和 3 窗口中,按 ctrl + c 组合键关闭服务。 + +#### feign-eureka工程运行示例 +1. feign-eureka 要在 eureka 工程运行后执行,在`/home/eureka/target` 目录下,执行如下命令,启动 eureka 服务。 + + ``` + # java -jar eureka-0.0.1-SNAPSHOT.jar + ``` +2. 待控制台出现 `Started EurekaApplicattion` 字样后,启动新窗口在工程目录`/home/feign-eureka/server/target`下执行以下命令,启动 feign-eureka 工程的 server。 + + ``` + # java -jar feign-eureka-hello-server-0.0.1-SNAPSHOT.jar + ``` + +3. 待控制台出现 `Started HelloServerApplication` 字样后,启动新窗口在工程目录`/home/feign-eureka/client/target` 下执行以下命令,启动 feign-eureka 工程的 client。 + + ``` + # java -jar feign-eureka-hello-client-0.0.1-SNAPSHOT.jar + ``` + +4. 待控制台出现 `Started HelloClientApplication` 字样后,启动新窗口执行以下命令查看服务运行状态。 + ``` + # curl http://localhost:7211 + ``` + 服务启动后会在client的控制台看到,服务打开了7211端口,curl访问这个端口,获得Hello SERVER信息 + + 工程 feign-eureka 开放 7211 端口如下图所示: + + ![](./figures/run5.png) + + 访问 feign-eureka 服务查看返回结果如下图所示: + + ![](./figures/run6.png) + + + +## FAQ + + +### Spring Framework编译过程中Spring-webmvc:test 失败 + +**问题现象** + +MvcNamespaceTests.java 中的 assert 未通过测试,失败提示信息如下图所示。 + +![](./figures/zh-cn_image_0296838200.png) + +**问题原因** + +服务器回传时间存在8小时时差。 + +**解决方法** + +修改工程目录下的文件`spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java`, + +将handler的date成员时间强制置0,与LocalDate转换的默认Time保持一致。 + +![](./figures/zh-cn_image_0296838204.png) + + +### 任务 asciidoctor 执行失败 + +**问题现象** + +提示找不到`/root/.gem/jruby/1.9`文件夹 + +![](./figures/zh-cn_image_0296838206.png) + + +**问题原因** + +部分 Spring Framework 版本使用的 Gradle 版本在 JDK9 上运行会存在问题\(由于AspectJ升级到1.9版本所导致\)。 + +**解决方法** + +执行命令 `./gradlew clean test` 进行构建 + + +### Spring-test:compileJava执行失败 + +**问题现象** + +Spring-test:compileJava执行失败,页面提示 "error:warnings found and -Werror specified" +![](./figures/zh-cn_image_0296838208.png) + + +**问题原因** + +错误提示是因为 warning 导致的错误,分析 warning 原因,一些旧的 package 已经在 repo 上不存在了\(repo源是由 build.gradle 脚本指定的\),从而导致编译时报出 warning。 + +**解决方法** + +编辑项目的 build.gradle 编译脚本,去除编译参数中的“-Werror”选项 + +![](./figures/zh-cn_image_0296838210.png) + +### repo源失效 + +**问题现象**: + +repo源无效,页面提示“Received status code 403 from server: Forbidden”。 + +![](./figures/zh-cn_image_0296838212.png) + + +**问题原因** + +偶现,一般是由于网络不稳定,或编译脚本中指定的repo源无法提供所需的包所导致。 + +**解决方法** + +检查 build.gradle 文件的 repo 源设置,是否正确,登录 repo 源,看是否存在缺失的文件。 + +![](./figures/zh-cn_image_0296838214.png) + + +以下有效的 repo 源供参考: + +[https://repo.Spring.io/plugins-release](https://repo.Spring.io/plugins-release) + +[https://repo.Springsource.org/plugins-release](https://repo.Springsource.org/plugins-release) + +### build超时导致的失败 + +**问题现象**: + +问题集中体现在网络相关模块的test不通过,例如提示信息,Task :spring-webflux:test FAILED,而且上报失败的代码位置并不是每次编译都会出现。 + +![](./figures/x86_build_fail.png) + +**问题原因** + +通过分析代码,可以得出结论,失败是因为在规定时间内得不到远端服务的回应,产生超时错误,导致构建失败。 + +**解决方法** + +根据编译错误提示的代码位置,延长超时等待时间。具体的操作:修改提示代码处.verify\(Duration.ofSeconds\(TIMEOUT\)\)或.block\(TIMEOUT\),将TIMEOUT的数值,调整为二倍大。例如下图时间一处超时时间由5秒改为10秒。 + +![](./figures/modify_timeout_value.png) \ No newline at end of file diff --git a/docs/zh/docs/thirdparty_migration/thidrparty.md b/docs/zh/docs/thirdparty_migration/thidrparty.md new file mode 100644 index 0000000000000000000000000000000000000000..e7ebe18a72d273592c4fd28d1089b2f493ea774f --- /dev/null +++ b/docs/zh/docs/thirdparty_migration/thidrparty.md @@ -0,0 +1,5 @@ +# 第三方软件移植指南 + +本文档介绍 openEuler 支持第三方软件:Spring(Spring Framework/Spring Boot/Spring Cloud)、OpenStack 和 Kubernetes 的移植与部署方法,以指导用户快速了解并使用其功能。 + +本文档适用于使用 openEuler 系统并希望了解和使用第三方软件的社区开发者、开源爱好者以及合作伙伴。使用人员需要具备基本的 Linux 操作系统知识。 \ No newline at end of file diff --git a/docs/zh/menu/index.md b/docs/zh/menu/index.md new file mode 100644 index 0000000000000000000000000000000000000000..40548042f9e319a280ea86a96078035b42453a6e --- /dev/null +++ b/docs/zh/menu/index.md @@ -0,0 +1,180 @@ +--- +headless: true +--- +- [法律声明]({{< relref "./docs/Releasenotes/法律声明.md" >}}) +- [发行说明]({{< relref "./docs/Releasenotes/release_notes.md" >}}) + - [用户须知]({{< relref "./docs/Releasenotes/用户须知.md" >}}) + - [简介]({{< relref "./docs/Releasenotes/简介.md" >}}) + - [系统安装]({{< relref "./docs/Releasenotes/系统安装.md" >}}) + - [关键特性]({{< relref "./docs/Releasenotes/关键特性.md" >}}) + - [接口变更]({{< relref "./docs/Releasenotes/接口变更.md" >}}) + - [已知问题]({{< relref "./docs/Releasenotes/已知问题.md" >}}) + - [已修复问题]({{< relref "./docs/Releasenotes/已修复问题.md" >}}) + - [CVE漏洞]({{< relref "./docs/Releasenotes/CVE漏洞.md" >}}) + - [源代码]({{< relref "./docs/Releasenotes/源代码.md" >}}) + - [参与贡献]({{< relref "./docs/Releasenotes/参与贡献.md" >}}) + - [附录]({{< relref "./docs/Releasenotes/附录.md" >}}) + - [致谢]({{< relref "./docs/Releasenotes/致谢.md" >}}) +- [快速入门]({{< relref "./docs/Quickstart/quick-start.md" >}}) +- [安装指南]({{< relref "./docs/Installation/installation.md" >}}) + - [安装在服务器]({{< relref "./docs/Installation/安装在服务器.md" >}}) + - [安装准备]({{< relref "./docs/Installation/安装准备.md" >}}) + - [安装方式介绍]({{< relref "./docs/Installation/安装方式介绍.md" >}}) + - [安装指导]({{< relref "./docs/Installation/安装指导.md" >}}) + - [使用kickstart自动化安装]({{< relref "./docs/Installation/使用kickstart自动化安装.md" >}}) + - [FAQ]({{< relref "./docs/Installation/FAQ.md" >}}) + - [安装在树莓派]({{< relref "./docs/Installation/安装在树莓派.md" >}}) + - [安装准备]({{< relref "./docs/Installation/安装准备-1.md" >}}) + - [安装方式介绍]({{< relref "./docs/Installation/安装方式介绍-1.md" >}}) + - [安装指导]({{< relref "./docs/Installation/安装指导-1" >}}) + - [FAQ]({{< relref "./docs/Installation/FAQ-1.md" >}}) + - [更多资源]({{< relref "./docs/Installation/更多资源.md" >}}) +- [管理员指南]({{< relref "./docs/Administration/administration.md" >}}) + - [查看系统信息]({{< relref "./docs/Administration/查看系统信息.md" >}}) + - [基础配置]({{< relref "./docs/Administration/基础配置.md" >}}) + - [管理用户和用户组]({{< relref "./docs/Administration/管理用户和用户组.md" >}}) + - [使用DNF管理软件包]({{< relref "./docs/Administration/使用DNF管理软件包.md" >}}) + - [管理服务]({{< relref "./docs/Administration/管理服务.md" >}}) + - [管理进程]({{< relref "./docs/Administration/管理进程.md" >}}) + - [管理内存]({{< relref "./docs/Administration/memory-management.md" >}}) + - [配置网络]({{< relref "./docs/Administration/配置网络.md" >}}) + - [使用LVM管理硬盘]({{< relref "./docs/Administration/使用LVM管理硬盘.md" >}}) + - [使用KAE加速引擎]({{< relref "./docs/Administration/使用KAE加速引擎.md" >}}) + - [搭建服务]({{< relref "./docs/Administration/搭建服务.md" >}}) + - [搭建repo服务器]({{< relref "./docs/Administration/搭建repo服务器.md" >}}) + - [搭建FTP服务器]({{< relref "./docs/Administration/搭建FTP服务器.md" >}}) + - [搭建web服务器]({{< relref "./docs/Administration/搭建web服务器.md" >}}) + - [搭建数据库服务器]({{< relref "./docs/Administration/搭建数据库服务器.md" >}}) + - [FAQ]({{< relref "./docs/Administration/FAQ-54.md" >}}) +- [安全加固指南]({{< relref "./docs/SecHarden/secHarden.md" >}}) + - [操作系统加固概述]({{< relref "./docs/SecHarden/操作系统加固概述.md" >}}) + - [加固指导]({{< relref "./docs/SecHarden/加固指导.md" >}}) + - [账户口令]({{< relref "./docs/SecHarden/账户口令.md" >}}) + - [授权认证]({{< relref "./docs/SecHarden/授权认证.md" >}}) + - [系统服务]({{< relref "./docs/SecHarden/系统服务.md" >}}) + - [文件权限]({{< relref "./docs/SecHarden/文件权限.md" >}}) + - [内核参数]({{< relref "./docs/SecHarden/内核参数.md" >}}) + - [SELinux配置]({{< relref "./docs/SecHarden/SELinux配置.md" >}}) + - [安全加固工具]({{< relref "./docs/SecHarden/安全加固工具.md" >}}) + - [附录]({{< relref "./docs/SecHarden/附录.md" >}}) +- [虚拟化用户指南]({{< relref "./docs/Virtualization/virtualization.md" >}}) + - [认识虚拟化]({{< relref "./docs/Virtualization/认识虚拟化.md" >}}) + - [安装虚拟化]({{< relref "./docs/Virtualization/安装虚拟化.md" >}}) + - [准备使用环境]({{< relref "./docs/Virtualization/准备使用环境.md" >}}) + - [虚拟机配置]({{< relref "./docs/Virtualization/虚拟机配置.md" >}}) + - [管理虚拟机]({{< relref "./docs/Virtualization/管理虚拟机.md" >}}) + - [热迁移虚拟机]({{< relref "./docs/Virtualization/热迁移虚拟机.md" >}}) + - [管理系统资源]({{< relref "./docs/Virtualization/管理系统资源.md" >}}) + - [管理设备]({{< relref "./docs/Virtualization/管理设备.md" >}}) + - [最佳实践]({{< relref "./docs/Virtualization/最佳实践.md" >}}) + - [工具使用指南]({{< relref "./docs/Virtualization/工具使用指南.md" >}}) + - [vmtop]({{< relref "./docs/Virtualization/vmtop.md" >}}) + - [LibcarePlus]({{< relref "./docs/Virtualization/LibcarePlus.md" >}}) + - [附录]({{< relref "./docs/Virtualization/附录.md" >}}) +- [StratoVirt用户指南]({{< relref "./docs/StratoVirt/StratoVirtGuide.md" >}}) + - [StratoVirt介绍]({{< relref "./docs/StratoVirt/StratoVirt介绍.md" >}}) + - [安装StratoVirt]({{< relref "./docs/StratoVirt/安装StratoVirt.md" >}}) + - [准备使用环境]({{< relref "./docs/StratoVirt/准备使用环境.md" >}}) + - [虚拟机配置]({{< relref "./docs/StratoVirt/虚拟机配置.md" >}}) + - [虚拟机管理]({{< relref "./docs/StratoVirt/虚拟机管理.md" >}}) + - [对接iSula安全容器]({{< relref "./docs/StratoVirt/对接iSula安全容器.md" >}}) + - [最佳实践]({{< relref "./docs/StratoVirt/最佳实践.md" >}}) +- [容器用户指南]({{< relref "./docs/Container/container.md" >}}) + - [iSula容器引擎]({{< relref "./docs/Container/iSula容器引擎.md" >}}) + - [安装、升级与卸载]({{< relref "./docs/Container/安装-升级与卸载.md" >}}) + - [安装与配置]({{< relref "./docs/Container/安装与配置.md" >}}) + - [升级]({{< relref "./docs/Container/升级.md" >}}) + - [卸载]({{< relref "./docs/Container/卸载.md" >}}) + - [使用指南]({{< relref "./docs/Container/使用指南.md" >}}) + - [容器管理]({{< relref "./docs/Container/容器管理.md" >}}) + - [支持CNI网络]({{< relref "./docs/Container/支持CNI网络.md" >}}) + - [特权容器]({{< relref "./docs/Container/特权容器.md" >}}) + - [CRI接口]({{< relref "./docs/Container/CRI接口.md" >}}) + - [镜像管理]({{< relref "./docs/Container/镜像管理.md" >}}) + - [容器健康状态检查]({{< relref "./docs/Container/容器健康状态检查.md" >}}) + - [查询信息]({{< relref "./docs/Container/查询信息.md" >}}) + - [安全特性]({{< relref "./docs/Container/安全特性.md" >}}) + - [支持OCI hooks]({{< relref "./docs/Container/支持OCI-hooks.md" >}}) + - [本地卷管理]({{< relref "./docs/Container/本地卷管理.md" >}}) + - [附录]({{< relref "./docs/Container/附录.md" >}}) + - [系统容器]({{< relref "./docs/Container/系统容器.md" >}}) + - [安装指导]({{< relref "./docs/Container/安装指导.md" >}}) + - [使用指南]({{< relref "./docs/Container/使用指南-1.md" >}}) + - [指定rootfs创建容器]({{< relref "./docs/Container/指定rootfs创建容器.md" >}}) + - [通过systemd启动容器]({{< relref "./docs/Container/通过systemd启动容器.md" >}}) + - [容器内reboot/shutdown]({{< relref "./docs/Container/容器内reboot-shutdown.md" >}}) + - [cgroup路径可配置]({{< relref "./docs/Container/cgroup路径可配置.md" >}}) + - [namespace化内核参数可写]({{< relref "./docs/Container/namespace化内核参数可写.md" >}}) + - [共享内存通道]({{< relref "./docs/Container/共享内存通道.md" >}}) + - [动态加载内核模块]({{< relref "./docs/Container/动态加载内核模块.md" >}}) + - [环境变量持久化]({{< relref "./docs/Container/环境变量持久化.md" >}}) + - [最大句柄数限制]({{< relref "./docs/Container/最大句柄数限制.md" >}}) + - [安全性和隔离性]({{< relref "./docs/Container/安全性和隔离性.md" >}}) + - [容器资源动态管理]({{< relref "./docs/Container/容器资源动态管理.md" >}}) + - [附录]({{< relref "./docs/Container/附录-2.md" >}}) + - [安全容器]({{< relref "./docs/Container/安全容器.md" >}}) + - [安装与配置]({{< relref "./docs/Container/安装与配置-2.md" >}}) + - [使用方法]({{< relref "./docs/Container/使用方法-1.md" >}}) + - [管理安全容器的生命周期]({{< relref "./docs/Container/管理安全容器的生命周期.md" >}}) + - [为安全容器配置资源]({{< relref "./docs/Container/为安全容器配置资源.md" >}}) + - [为安全容器配置网络]({{< relref "./docs/Container/为安全容器配置网络.md" >}}) + - [监控安全容器]({{< relref "./docs/Container/监控安全容器.md" >}}) + - [附录]({{< relref "./docs/Container/附录-3.md" >}}) + - [Docker容器]({{< relref "./docs/Container/Docker容器.md" >}}) + - [安装配置]({{< relref "./docs/Container/安装配置-3.md" >}}) + - [容器管理]({{< relref "./docs/Container/容器管理-3.md" >}}) + - [镜像管理]({{< relref "./docs/Container/镜像管理-3.md" >}}) + - [命令行参考]({{< relref "./docs/Container/命令行参考.md" >}}) + - [容器引擎]({{< relref "./docs/Container/容器引擎-4.md" >}}) + - [容器管理]({{< relref "./docs/Container/容器管理-4.md" >}}) + - [镜像管理]({{< relref "./docs/Container/镜像管理-4.md" >}}) + - [统计信息]({{< relref "./docs/Container/统计信息-4.md" >}}) + - [容器工具]({{< relref "./docs/Container/容器工具.md" >}}) + - [isula-build构建工具]({{< relref "./docs/Container/isula-build构建工具.md" >}}) + - [isula-transform迁移工具]({{< relref "./docs/Container/isula-transform迁移工具.md" >}}) +- [A-Tune用户指南]({{< relref "./docs/A-Tune/A-Tune.md" >}}) + - [认识A-Tune]({{< relref "./docs/A-Tune/认识A-Tune.md" >}}) + - [安装与部署]({{< relref "./docs/A-Tune/安装与部署.md" >}}) + - [使用方法]({{< relref "./docs/A-Tune/使用方法.md" >}}) + - [常见问题与解决方法]({{< relref "./docs/A-Tune/常见问题与解决方法.md" >}}) + - [附录]({{< relref "./docs/A-Tune/附录.md" >}}) +- [应用开发指南]({{< relref "./docs/ApplicationDev/application-development.md" >}}) + - [开发环境准备]({{< relref "./docs/ApplicationDev/开发环境准备.md" >}}) + - [使用GCC编译]({{< relref "./docs/ApplicationDev/使用GCC编译.md" >}}) + - [使用make编译]({{< relref "./docs/ApplicationDev/使用make编译.md" >}}) + - [使用JDK编译]({{< relref "./docs/ApplicationDev/使用JDK编译.md" >}}) + - [构建RPM包]({{< relref "./docs/ApplicationDev/构建RPM包.md" >}}) +- [HA用户指南]({{< relref "./docs//HA/ha.md" >}}) + - [HA的安装与部署]({{< relref "./docs/HA/HA的安装与部署.md" >}}) + - [HA使用实例]({{< relref "./docs/HA/HA的使用实例.md" >}}) +- [Kubernetes集群部署指南]({{< relref "./docs/Kubernetes/Kubernetes.md" >}}) + - [准备虚拟机]({{< relref "./docs/Kubernetes/准备虚拟机.md" >}}) + - [部署Kubernetes集群]({{< relref "./docs/Kubernetes/部署Kubernetes集群.md" >}}) + - [安装Kubernetes软件包]({{< relref "./docs/Kubernetes/安装Kubernetes软件包.md" >}}) + - [准备证书]({{< relref "./docs/Kubernetes/准备证书.md" >}}) + - [安装etcd]({{< relref "./docs/Kubernetes/安装etcd.md" >}}) + - [部署控制面组件]({{< relref "./docs/Kubernetes/部署控制面组件.md" >}}) + - [部署Node节点组件]({{< relref "./docs/Kubernetes/部署Node节点组件.md" >}}) + - [运行测试pod]({{< relref "./docs/Kubernetes/运行测试pod.md" >}}) +- [第三方软件安装指南]({{< relref "./docs/thirdparty_migration/thidrparty.md" >}}) + - [OpenStack安装指南]({{< relref "./docs/thirdparty_migration/openstack.md" >}}) + - [安装OpenStack-queens]({{< relref "./docs/thirdparty_migration/OpenStack-queens.md" >}}) + - [安装OpenStack-rocky]({{< relref "./docs/thirdparty_migration/OpenStack-rocky.md" >}}) + - [OpenStack-Train 部署指南]({{< relref "./docs/thirdparty_migration/OpenStack-train.md" >}}) + - [K8S迁移至openEuler指导]({{< relref "./docs/thirdparty_migration/k8sinstall.md" >}}) + - [SpringFramework迁移至openEuler指导]({{< relref "./docs/thirdparty_migration/springframework.md" >}}) +- [桌面环境用户指南]({{< relref "./docs/desktop/desktop.md" >}}) + - [UKUI]({{< relref "./docs/desktop/ukui.md" >}}) + - [安装 UKUI]({{< relref "./docs/desktop/安装UKUI.md" >}}) + - [UKUI 用户指南]({{< relref "./docs/desktop/UKUIuserguide.md" >}}) + - [DDE]({{< relref "./docs/desktop/dde.md" >}}) + - [安装 DDE]({{< relref "./docs/desktop/安装DDE.md" >}}) + - [DDE 用户指南]({{< relref "./docs/desktop/DDE-User-Manual.md" >}}) + - [XFCE]({{< relref "./docs/desktop/xfce.md" >}}) + - [安装 Xfce]({{< relref "./docs/desktop/Install_XFCE.md" >}}) + - [Xfce 用户指南]({{< relref "./docs/desktop/Xfce_userguide.md" >}}) + - [KIRAN]({{< relref "./docs/desktop/kiran.md" >}}) + - [安装 Kiran]({{< relref "./docs/desktop/kiran安装手册.md" >}}) + - [Kiran 用户指南]({{< relref "./docs/desktop/Kiran_userguide.md" >}}) +- [镜像裁剪定制工具使用指南]({{< relref "./docs/TailorCustom/overview.md" >}}) + - [isocut 使用指南]({{< relref "./docs/TailorCustom/isocut使用指南.md" >}}) 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" + } +} diff --git a/rdocs/en/openEuler 1.0 Installation Guide.pdf b/rdocs/en/openEuler 1.0 Installation Guide.pdf deleted file mode 100644 index 7a6a2cdb852d5f2502e13b5b8ce46a915072410f..0000000000000000000000000000000000000000 Binary files a/rdocs/en/openEuler 1.0 Installation Guide.pdf and /dev/null differ diff --git a/rdocs/en/openEuler 20.03 LTS A-Tune User Guide.pdf b/rdocs/en/openEuler 20.03 LTS A-Tune User Guide.pdf deleted file mode 100644 index c5a43911b4fa7839ab5f5eb0bc38818c8bb8b34a..0000000000000000000000000000000000000000 Binary files a/rdocs/en/openEuler 20.03 LTS A-Tune User Guide.pdf and /dev/null differ diff --git a/rdocs/en/openEuler 20.03 LTS Administrator Guide.pdf b/rdocs/en/openEuler 20.03 LTS Administrator Guide.pdf deleted file mode 100644 index 2039b90984988ae4c8e0214ebd9f033fd8490ebd..0000000000000000000000000000000000000000 Binary files a/rdocs/en/openEuler 20.03 LTS Administrator Guide.pdf and /dev/null differ diff --git a/rdocs/en/openEuler 20.03 LTS Application Development Guide.pdf b/rdocs/en/openEuler 20.03 LTS Application Development Guide.pdf deleted file mode 100644 index 5c132a743d2c7b3a27c15397c7c3acdebc8a8d1e..0000000000000000000000000000000000000000 Binary files a/rdocs/en/openEuler 20.03 LTS Application Development Guide.pdf and /dev/null differ diff --git a/rdocs/en/openEuler 20.03 LTS Container User Guide.pdf b/rdocs/en/openEuler 20.03 LTS Container User Guide.pdf deleted file mode 100644 index 79804395bd8605d0e1566405e066b66b911aff6c..0000000000000000000000000000000000000000 Binary files a/rdocs/en/openEuler 20.03 LTS Container User Guide.pdf and /dev/null differ diff --git a/rdocs/en/openEuler 20.03 LTS Installation Guide.pdf b/rdocs/en/openEuler 20.03 LTS Installation Guide.pdf deleted file mode 100644 index 9e72c47cae20bb7f523d4423d1c87c492a1a9d51..0000000000000000000000000000000000000000 Binary files a/rdocs/en/openEuler 20.03 LTS Installation Guide.pdf and /dev/null differ diff --git a/rdocs/en/openEuler 20.03 LTS Release Description.pdf b/rdocs/en/openEuler 20.03 LTS Release Description.pdf deleted file mode 100644 index 0efe706b9efd66f89a25d84ad6fdb037ef341e06..0000000000000000000000000000000000000000 Binary files a/rdocs/en/openEuler 20.03 LTS Release Description.pdf and /dev/null differ diff --git a/rdocs/en/openEuler 20.03 LTS Virtualization User Guide.pdf b/rdocs/en/openEuler 20.03 LTS Virtualization User Guide.pdf deleted file mode 100644 index 45b7a82a4f2e40d6fa1f145e7fce50c8a9b91a7f..0000000000000000000000000000000000000000 Binary files a/rdocs/en/openEuler 20.03 LTS Virtualization User Guide.pdf and /dev/null differ diff --git "a/rdocs/zh/date20200101/openEuler 1.0 \345\256\211\350\243\205\346\214\207\345\215\227.pdf" "b/rdocs/zh/date20200101/openEuler 1.0 \345\256\211\350\243\205\346\214\207\345\215\227.pdf" deleted file mode 100644 index 576eb0a1f8cdcffd68ec60df3dce8c0e729f8e7f..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/date20200101/openEuler 1.0 \345\256\211\350\243\205\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/date20200101/openEuler 1.0 \347\256\241\347\220\206\345\221\230\346\214\207\345\215\227.pdf" "b/rdocs/zh/date20200101/openEuler 1.0 \347\256\241\347\220\206\345\221\230\346\214\207\345\215\227.pdf" deleted file mode 100644 index 032fae106298bef8d9f3dc2381c478904fd0236a..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/date20200101/openEuler 1.0 \347\256\241\347\220\206\345\221\230\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/date20200101/openEuler 1.0 \350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.pdf" "b/rdocs/zh/date20200101/openEuler 1.0 \350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.pdf" deleted file mode 100644 index 5c9df30f521b0b5adf71044b7e87de4018b610b8..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/date20200101/openEuler 1.0 \350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/date20200115/openEuler 1.0 \345\256\211\350\243\205\346\214\207\345\215\227.pdf" "b/rdocs/zh/date20200115/openEuler 1.0 \345\256\211\350\243\205\346\214\207\345\215\227.pdf" deleted file mode 100644 index b6e6ddd880a473f80821501031441927b99712f3..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/date20200115/openEuler 1.0 \345\256\211\350\243\205\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/date20200115/openEuler 1.0 \347\211\210\346\234\254\345\217\221\350\241\214\350\257\264\346\230\216.pdf" "b/rdocs/zh/date20200115/openEuler 1.0 \347\211\210\346\234\254\345\217\221\350\241\214\350\257\264\346\230\216.pdf" deleted file mode 100644 index 639ab676d80da674b1edc47480cbacd3b590a2ff..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/date20200115/openEuler 1.0 \347\211\210\346\234\254\345\217\221\350\241\214\350\257\264\346\230\216.pdf" and /dev/null differ diff --git "a/rdocs/zh/date20200115/openEuler 1.0 \347\256\241\347\220\206\345\221\230\346\214\207\345\215\227.pdf" "b/rdocs/zh/date20200115/openEuler 1.0 \347\256\241\347\220\206\345\221\230\346\214\207\345\215\227.pdf" deleted file mode 100644 index 6bf63ab9e446c95e194af64ecf7308abc3ba74e2..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/date20200115/openEuler 1.0 \347\256\241\347\220\206\345\221\230\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/date20200115/openEuler 1.0 \350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.pdf" "b/rdocs/zh/date20200115/openEuler 1.0 \350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.pdf" deleted file mode 100644 index be501ab13eee41e6cba3070ab220c0e9a47cbfdf..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/date20200115/openEuler 1.0 \350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/date20200207Base/openEuler 1.0 Base \347\211\210\346\234\254\345\217\221\350\241\214\350\257\264\346\230\216.pdf" "b/rdocs/zh/date20200207Base/openEuler 1.0 Base \347\211\210\346\234\254\345\217\221\350\241\214\350\257\264\346\230\216.pdf" deleted file mode 100644 index c766d7b2eaf6da74e8fc525b595d5bb826b45774..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/date20200207Base/openEuler 1.0 Base \347\211\210\346\234\254\345\217\221\350\241\214\350\257\264\346\230\216.pdf" and /dev/null differ diff --git "a/rdocs/zh/date20200207Base/openEuler 1.0 \345\256\211\350\243\205\346\214\207\345\215\227.pdf" "b/rdocs/zh/date20200207Base/openEuler 1.0 \345\256\211\350\243\205\346\214\207\345\215\227.pdf" deleted file mode 100644 index 15bf70973654b6207c6921b5e58756aac752f638..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/date20200207Base/openEuler 1.0 \345\256\211\350\243\205\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/date20200207Base/openEuler 1.0 \345\256\271\345\231\250\347\224\250\346\210\267\346\214\207\345\215\227.pdf" "b/rdocs/zh/date20200207Base/openEuler 1.0 \345\256\271\345\231\250\347\224\250\346\210\267\346\214\207\345\215\227.pdf" deleted file mode 100644 index 41141857a5e3251a251f8e2cc3d17d1a3dea0525..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/date20200207Base/openEuler 1.0 \345\256\271\345\231\250\347\224\250\346\210\267\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/date20200207Base/openEuler 1.0 \347\256\241\347\220\206\345\221\230\346\214\207\345\215\227.pdf" "b/rdocs/zh/date20200207Base/openEuler 1.0 \347\256\241\347\220\206\345\221\230\346\214\207\345\215\227.pdf" deleted file mode 100644 index 9069a0f35cec4d4876826af08d71223f4790ce91..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/date20200207Base/openEuler 1.0 \347\256\241\347\220\206\345\221\230\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/date20200207Base/openEuler 1.0 \350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.pdf" "b/rdocs/zh/date20200207Base/openEuler 1.0 \350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.pdf" deleted file mode 100644 index f42bf90865210637e48a83cecc6d427cf726035d..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/date20200207Base/openEuler 1.0 \350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS A-Tune\347\224\250\346\210\267\346\214\207\345\215\227.pdf" "b/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS A-Tune\347\224\250\346\210\267\346\214\207\345\215\227.pdf" deleted file mode 100644 index e1b232819ded604e5156ba01f582bd2563e0f91f..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS A-Tune\347\224\250\346\210\267\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \345\215\207\347\272\247\346\214\207\345\257\274\344\271\246.pdf" "b/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \345\215\207\347\272\247\346\214\207\345\257\274\344\271\246.pdf" deleted file mode 100644 index 04e04bb92dcdc7265fa18e147d1bd1c857bf1426..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \345\215\207\347\272\247\346\214\207\345\257\274\344\271\246.pdf" and /dev/null differ diff --git "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \345\256\211\350\243\205\346\214\207\345\215\227.pdf" "b/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \345\256\211\350\243\205\346\214\207\345\215\227.pdf" deleted file mode 100644 index 6c2b9eef6dea506d9cc731b4aa83054a3163e45c..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \345\256\211\350\243\205\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \345\256\271\345\231\250\347\224\250\346\210\267\346\214\207\345\215\227.pdf" "b/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \345\256\271\345\231\250\347\224\250\346\210\267\346\214\207\345\215\227.pdf" deleted file mode 100644 index ce957156f9c572455eaa16eb7f627258d7244cb4..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \345\256\271\345\231\250\347\224\250\346\210\267\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \345\272\224\347\224\250\345\274\200\345\217\221\346\214\207\345\215\227.pdf" "b/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \345\272\224\347\224\250\345\274\200\345\217\221\346\214\207\345\215\227.pdf" deleted file mode 100644 index 7b120d4c9d07fbd2822b457b233c55e57d4cc4c3..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \345\272\224\347\224\250\345\274\200\345\217\221\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \347\211\210\346\234\254\345\217\221\350\241\214\350\257\264\346\230\216.pdf" "b/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \347\211\210\346\234\254\345\217\221\350\241\214\350\257\264\346\230\216.pdf" deleted file mode 100644 index 39fcb1398029a87f3c2d499a9bbf1643f34e2f17..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \347\211\210\346\234\254\345\217\221\350\241\214\350\257\264\346\230\216.pdf" and /dev/null differ diff --git "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \347\256\241\347\220\206\345\221\230\346\214\207\345\215\227.pdf" "b/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \347\256\241\347\220\206\345\221\230\346\214\207\345\215\227.pdf" deleted file mode 100644 index 262ef388677ae150e2062085396e1aed6e1235c9..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \347\256\241\347\220\206\345\221\230\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.pdf" "b/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.pdf" deleted file mode 100644 index 072b911c841e83f70865a171eb7df99f4357b874..0000000000000000000000000000000000000000 Binary files "a/rdocs/zh/openEuler 20.03 LTS_20200324/openEuler 20.03 LTS \350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.pdf" and /dev/null differ diff --git a/themes/project/.travis.yml b/themes/project/.travis.yml deleted file mode 100644 index baaea454a3f0e7ee7f045783d88f4c10add3e56e..0000000000000000000000000000000000000000 --- a/themes/project/.travis.yml +++ /dev/null @@ -1,2 +0,0 @@ -language: generic -script: docker run --rm -it -v $(pwd)/exampleSite:/src -v $(pwd):/src/themes/hugo-book klakegg/hugo:ext-alpine --enableGitInfo=false diff --git a/themes/project/LICENSE b/themes/project/LICENSE deleted file mode 100644 index e7a669ab2fdc6f7401b8472af82b0444db0ec8ed..0000000000000000000000000000000000000000 --- a/themes/project/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2018 Alex Shpak - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/themes/project/README.md b/themes/project/README.md deleted file mode 100644 index 35f45040833b81f824c6a27836a57a88e765049d..0000000000000000000000000000000000000000 --- a/themes/project/README.md +++ /dev/null @@ -1,275 +0,0 @@ -# Hugo Book Theme - -[![Build Status](https://travis-ci.org/alex-shpak/hugo-book.svg?branch=master)](https://travis-ci.org/alex-shpak/hugo-book) -[![Hugo](https://img.shields.io/badge/hugo-0.55-blue.svg)](https://gohugo.io) -[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) - -### [Hugo](https://gohugo.io) documentation theme as simple as plain book - -![Screenshot](https://github.com/alex-shpak/hugo-book/blob/master/images/screenshot.png) - -- [Features](#features) -- [Installation](#installation) -- [Menu](#menu) -- [Configuration](#configuration) -- [Shortcodes](#shortcodes) -- [Contributing](#contributing) - -## Features - -- Clean simple design -- Mobile friendly -- Customisable -- Designed to not interfere with other layouts -- Zero initial configuration -- Handy shortcodes - -## Requirements - -- Hugo 0.55 or higher -- Hugo extended version, read more [here](https://gohugo.io/news/0.48-relnotes/) - -## Installation - -Navigate to your hugo project root and run: - -``` -git submodule add https://github.com/alex-shpak/hugo-book themes/book -``` - -Then run hugo (or set `theme = "book"`/`theme: book` in configuration file) - -``` -hugo server --minify --theme book -``` - -### Creating site from scratch - -Below is example how to create new site from scratch - -```sh -hugo new site mydocs; cd mydocs -git init -git submodule add https://github.com/alex-shpak/hugo-book themes/book -cp -R themes/book/exampleSite/content . -``` - -```sh -hugo server --minify --theme book -``` - -## Menu - -### File tree menu (default) - -By default theme will render pages from `content/docs` section as menu in a tree structure. -You can set `title` and `weight` in front matter of pages to adjust order and titles in menu. - -### Leaf bundle menu - -You can also use leaf bundle and content of it's `index.md` as menu. -Given you have this file structure - -``` -├── content -│ ├── docs -│ │ ├── page-one.md -│ │ └── page-two.md -│ └── posts -│ ├── post-one.md -│ └── post-two.md -``` - -Create file `content/docs/menu/index.md` with content - -```md -+++ -headless = true -+++ - -- [Book Example](/docs/) - - [Page One](/docs/page-one) - - [Page Two](/docs/page-two) -- [Blog](/posts) -``` - -And Enable it by settings `BookMenuBundle: /menu` in Site configuration - -- [Example menu](https://github.com/alex-shpak/hugo-book/blob/master/exampleSite/content/menu/index.md) -- [Example config file](https://github.com/alex-shpak/hugo-book/blob/master/exampleSite/config.yaml) -- [Leaf bundles](https://gohugo.io/content-management/page-bundles/) - -## Blog - -Simple blog supported for section `posts` - -## Configuration - -### Site Configuration - -There are few configuration options you can add to your `config.toml` file. -You can also see `yaml` example [here](https://github.com/alex-shpak/hugo-book/blob/master/exampleSite/config.yaml). - -```toml -# (Optional) Set this to true if you use capital letters in file names -disablePathToLower = true - -# (Optional) Set this to true to enable 'Last Modified by' date and git author -# information on 'doc' type pages. -enableGitInfo = true - -# (Optional) Theme is intended for documentation use, therefore it doesn't render taxonomy. -# You can remove related files with config below -disableKinds = ['taxonomy', 'taxonomyTerm'] - -[params] -# (Optional, default 6) Set how many table of contents levels to be showed on page. -# Use false to hide ToC, note that 0 will default to 6 (https://gohugo.io/functions/default/) -# You can also specify this parameter per page in front matter -BookToC = 3 - -# (Optional, default none) Set leaf bundle to render as side menu -# When not specified file structure and weights will be used -BookMenuBundle = '/menu' - -# (Optional, default docs) Specify section of content to render as menu -# You can also set value to "*" to render all sections to menu -BookSection = 'docs' - -# (Optional) This value is duplicate of $link-color for making active link highlight in menu bundle mode -# BookMenuBundleActiveLinkColor = '\#004ed0' - -# Set source repository location. -# Used for 'Last Modified' and 'Edit this page' links. -BookRepo = 'https://github.com/alex-shpak/hugo-book' - -# Enable 'Edit this page' links for 'doc' page type. -# Disabled by default. Uncomment to enable. Requires 'BookRepo' param. -# Path must point to 'content' directory of repo. -BookEditPath = 'edit/master/exampleSite/content' - -# (Optional, default January 2, 2006) Configure the date format used on the pages -# - In git information -# - In blog posts -BookDateFormat = 'Jan 2, 2006' - -# (Optional, default true) Enables search function with lunr.js, -# Index is built on fly, therefore it might slowdown your website. -BookSearch = true -``` - -### Page Configuration - -You can specify additional params per page in front matter - -```toml -# Set type to 'docs' if you want to render page outside of configured section or if you render section other than 'docs' -type = 'docs' - -# Set page weight to re-arrange items in file-tree menu (if BookMenuBundle not set) -weight = 10 - -# (Optional) Set to mark page as flat section in file-tree menu (if BookMenuBundle not set) -bookFlatSection = true - -# (Optional) Set true to hide page or section from side menu (if BookMenuBundle not set) -bookHidden = true - -# (Optional) Set how many levels of ToC to show. use 'false' to hide ToC completely -bookToC = 3 -``` - -### Partials - -There are few empty partials you can override in `layouts/partials/` - -| Partial | Placement | -| ----------------------------------------------- | -------------------------------------- | -| `layouts/partials/docs/inject/head.html` | Before closing `` tag | -| `layouts/partials/docs/inject/body.html` | Before closing `` tag | -| `layouts/partials/docs/inject/footer.html` | After page content | -| `layouts/partials/docs/inject/menu-before.html` | At the beginning of `