diff --git a/README-en.md b/README-en.md new file mode 100644 index 0000000000000000000000000000000000000000..bda49b40489de363e69bdb704c60d30fbf42ede5 --- /dev/null +++ b/README-en.md @@ -0,0 +1,58 @@ +# openEuler DOCS + +English | [简体中文](./README.md) + +### Introduction + +DOCS contains all documents of the openEuler community, including the release notes, OS installation guide, administrator guide, virtualization, container, A-Tune user guides and application development guide. + +### Searching for a Document in DOCS + +Open the **docs** 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: + +| folder | Content | +|-----|-----| +| **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* +| **SecHarden** | *Security Hardening Guide* | +| **Virtualization** | *Virtualization Application Guide* | +| **userGuide** | *openEuler Toolset User Guide* | +| **StratoVirt** | *StratoVirt User 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 four branches: + +| Branch | Description | Documentation | +|--------|-------------|---------------| +| **master** | development branch, which is the default branch || +| **stable2-1.0\_Base** | 1.0 Base version branch | **DOCS** > **1.0 BASE** on the [openEuler community website](https://openeuler.org/) | +| **stable2-20.03\_LTS** | 20.03 LTS version branch | **DOCS** > **20.03 LTS** on the [openEuler community website](https://openeuler.org/) | +| **stable2-20.09** | 20.09 version branch | **DOCS** > **20.09** 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. You can also comment on the document through **Feedback** on the website document page. +We are always pleased to receive PRs from you. + +### Member +#### Maintainer List +- Rudy_Tan[@rudy_tan](https://gitee.com/rudy_tan) +- amyMaYun[@amy_mayun](https://gitee.com/amy_mayun) +- qiaominna[@qiaominna](https://gitee.com/qiaominna) + + +### Contacting Us +E-mails: doc@openeuler.org +IRC: #openeuler-doc \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..a9fd16651f5fb5d38c2f66da01abf094783ec3f2 --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +# openEuler 文档 + +[English](./README-en.md) | 简体中文 + +### 介绍 + +Docs包含了openEuler社区的所有文档,包括发行说明、操作系统安装、管理员指南、虚拟化和容器的使用指导、A-Tune使用指导和应用开发指导等内容。 + +### 如何在Docs中查找文档 + +打开“docs”文件夹,该文件夹包含了中文(“zh”文件夹)和英文(“en”文件夹)两种语言文档,以中文文档举例进行说明。 +在“zh”文件夹中,进入到目录docs/zh/docs/20.09,“docs”文件夹包含了具体文档的内容,“menu”包含了文档的大纲内容。 +打开“docs”文件夹,各手册和文件夹对应关系如下: + +| 文件夹 | 手册 | +|-----|----| +| A-Tune | A-Tune用户指南 | +| Adminnistration | 管理员指南 | +| ApplicationDev | 应用开发指南 | +| Container | 容器用户指南 | +| Installation | 安装指南 | +| Quickstart | 快速入门 | +| Releasenotes | 发行说明 | +| SecHarden | 安全加固指南 | +| Virtualization | 虚拟化应用指南 | +| userguide | openEuler工具集用户指南 | +| StratoVirt | StratoVrit虚拟化用户指南 | + + +### 如何修改文档 + +当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) +- qiaominna[@qiaominna](https://gitee.com/qiaominna) + +### 如何联系我们 +邮件列表: doc@openeuler.org +IRC: #openeuler-doc \ No newline at end of file diff --git a/docs/.vuepress/components/docs/docsList.vue b/docs/.vuepress/components/docs/docsList.vue deleted file mode 100644 index 94a22b2410782321a7f154c545ace0937155f042..0000000000000000000000000000000000000000 --- a/docs/.vuepress/components/docs/docsList.vue +++ /dev/null @@ -1,397 +0,0 @@ - - - - - - diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js deleted file mode 100644 index 00745f5e579df449f3ee53e11da9eef7d5d20826..0000000000000000000000000000000000000000 --- a/docs/.vuepress/config.js +++ /dev/null @@ -1,51 +0,0 @@ -module.exports = { - home: false, - title: '', - description: '', - head: [ - ['link', { - rel: 'icon', - href: '/favicon.ico' - }], - ['meta', { - name: 'viewport', - content: 'width=device-width,initial-scale=1,user-scalable=no' - }] - ], - markdown: { - lineNumbers: false - }, - plugins: [ - [require('./sitePlugin.js')] - ], - locales: { - '/': { - lang: 'zh', - title: '', - description: '' - }, - '/en/': { - lang: 'en', - title: '', - description: '' - }, - '/zh/': { - lang: 'zh', - title: '', - description: '' - } - }, - themeConfig: { - dateFormat: 'YYYY-MM-DD', - locales: { - 'en': { - lang: require('./lang/en.js') - }, - 'zh': { - lang: require('./lang/zh.js') - } - }, - smoothScroll: true - - } -} \ No newline at end of file diff --git a/docs/.vuepress/enhanceApp.js b/docs/.vuepress/enhanceApp.js deleted file mode 100644 index c0d36b53f1f5b3b141728ffc4dae02574c7a5fe0..0000000000000000000000000000000000000000 --- a/docs/.vuepress/enhanceApp.js +++ /dev/null @@ -1,73 +0,0 @@ -import ElementUI from 'element-ui'; -import './public/style/theme/index.css'; -import './public/style/base.css'; -import locale from 'element-ui/lib/locale/lang/en' -import'./public/style/markdown.less'; -import './public/style/font-en.css'; -import './public/style/font-cn.css'; - -export default ({ - Vue -}) => { - let checkLoop = false; - let checkImport = false; - Vue.mixin({ - data () { - return { - i18n: {}, - - } - }, - mounted () { - if(this.$router && this.$frontmatter) { - document.title = this.$frontmatter.title || 'openeuler'; - } - if(!checkImport){ - if (window.location.href.includes('/en/')) { - checkImport = true; - Vue.use(ElementUI, {locale}); - Vue.prototype.$isCn = false; - } else { - checkImport = true; - Vue.use(ElementUI); - Vue.prototype.$isCn = true; - } - } - }, - created () { - let pagesArr = []; - if(!checkLoop){ - checkLoop = true; - this.$sitePages.forEach(item => { - if(this.$lang === 'zh' && item.path.includes('/zh/')) { - pagesArr.push(item); - } else if(this.$lang === 'en' && !item.path.includes('/zh/')) { - pagesArr.push(item); - } - }) - this.$sitePages = pagesArr; - const originalPush = this.$router.push; - this.$router.push = function push(location) { - return originalPush.call(this, location).catch(err => err); - } - } - - const locales = this.$site; - if(this.$router){ - this.i18n = locales.themeConfig.locales[this.$lang].lang; - } - - }, - methods : { - resolvePath(path){ - if(path){ - const targetLocale = this.$lang === "zh" ? "/zh" : "/en"; - return targetLocale + path; - } - - } - } - }) - - -} \ No newline at end of file diff --git a/docs/.vuepress/lang/en.js b/docs/.vuepress/lang/en.js deleted file mode 100644 index 76074c0ce6db6a2a24a366dc99f8761c7044a6d4..0000000000000000000000000000000000000000 --- a/docs/.vuepress/lang/en.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @file 国际化英文配置主入口 - * */ - -module.exports = { - common: require('./lang-modules/common').en, - documentation: require('./lang-modules/documentation').en -}; \ No newline at end of file diff --git a/docs/.vuepress/lang/lang-modules/common.js b/docs/.vuepress/lang/lang-modules/common.js deleted file mode 100644 index fff21511a563183aa44e6271230e373cc97a8515..0000000000000000000000000000000000000000 --- a/docs/.vuepress/lang/lang-modules/common.js +++ /dev/null @@ -1,298 +0,0 @@ -/** - * @file 公共模块国际化配置入口 - * */ - -module.exports = { - cn: { - SEARCH_PLACE_HOLDER: '输入内容', - NAV_ROUTER_CONFIG: [{ - PATH: '/download/', - NAME: '下载', - CHILDREN: [], - CLASS: [] - }, - { - PATH: '/documentation/', - NAME: '文档', - CHILDREN: [], - OTHER_CHILDREN: [ - { - PATH: '/docs/' - } - ], - CLASS: [] - }, - { - PATH: '', - NAME: '互动', - CHILDREN: [{ - NAME: '新闻', - PATH: '/interaction/news-list/' - }, - { - NAME: '博客', - PATH: '/interaction/blog-list/' - }, - { - NAME: '直播', - PATH: '/interaction/live-list/' - }, - { - NAME: '沙龙', - PATH: '/interaction/salon-list/' - }, - { - NAME: '峰会', - PATH: '/interaction/summit-list/' - } - ], - OTHER_CHILDREN: [ - { - PATH: '/news/' - }, - { - PATH: '/blog/' - } - ], - CLASS: [] - }, - { - PATH: '', - NAME: '社区', - CHILDREN: [{ - NAME: '贡献攻略', - PATH: '/community/contribution/' - }, - { - NAME: '行为守则', - PATH: '/community/conduct/' - }, - { - NAME: '邮件列表', - PATH: '/community/mailing-list/' - }, - { - NAME: '认证服务', - PATH: '/community/certification-services/' - } - ], - CLASS: [] - }, - { - PATH: '', - NAME: 'SIG', - CHILDREN: [{ - NAME: '查看SIG', - PATH: '/sig/sig-list/' - }, - { - NAME: '申请流程', - PATH: '/sig/sig-guidance/' - }, - { - NAME: '角色说明', - PATH: '/sig/role-description/' - } - ], - CLASS: [] - }, - { - PATH: '', - NAME: '安全', - CHILDREN: [{ - NAME: '漏洞管理', - PATH: '/security/vulnerability-reporting/' - }, - { - NAME: '安全公告', - PATH: '/security/safety-bulletin/' - }, - { - NAME: 'CVE', - PATH: '/security/cve/' - } - ], - CLASS: [] - } - ], - LANG: 'EN', - GITTE: '源码', - GITTE_RESOURCE_LIST: [{ - NAME: '代码仓', - URL: 'https://gitee.com/openeuler' - }, - { - NAME: '软件包仓', - URL: 'https://gitee.com/src-openeuler' - } - ], - FOOTER: { - MAIL: 'contact@openeuler.org', - COPY_RIGHT: '版权所有 © 2020 openEuler 保留一切权利', - RIGHT_LIST: [{ - NAME: '品牌', - URL: '/other/brand/' - }, - { - NAME: '隐私政策', - URL: '/other/privacy/' - }, - { - NAME: '法律声明', - URL: '/other/legal/' - } - ], - QR_CODE: '扫码关注公众号' - }, - BUILDING:{ - BUILDING:'建设中', - BUILDINGMES:'敬请期待...' - } - }, - en: { - SEARCH_PLACE_HOLDER: 'Input content', - NAV_ROUTER_CONFIG: [{ - PATH: '/download/', - NAME: 'Download', - CHILDREN: [], - CLASS: [] - }, - { - PATH: '/documentation/', - NAME: 'Documentation', - CHILDREN: [], - OTHER_CHILDREN: [ - { - PATH: '/docs/' - } - ], - CLASS: [] - }, - { - PATH: '', - NAME: 'Connect', - CHILDREN: [{ - NAME: 'News', - PATH: '/interaction/news-list/' - }, - { - NAME: 'Blog', - PATH: '/interaction/blog-list/' - }, - { - NAME: 'Live', - PATH: '/interaction/live-list/' - }, - { - NAME: 'Meetups', - PATH: '/interaction/salon-list/' - }, - { - NAME: 'Summit', - PATH: '/interaction/summit-list/' - } - ], - OTHER_CHILDREN: [ - { - PATH: '/news/' - }, - { - PATH: '/blog/' - } - ], - CLASS: [] - }, - { - PATH: '', - NAME: 'Community', - CHILDREN: [{ - NAME: 'Contribution', - PATH: '/community/contribution/' - }, - { - NAME: 'Convention', - PATH: '/community/conduct/' - }, - { - NAME: 'Mail lists', - PATH: '/community/mailing-list/' - }, - { - NAME: 'Certification', - PATH: '/community/certification-services/' - } - ], - CLASS: [] - }, - { - PATH: '', - NAME: 'SIG', - CHILDREN: [{ - NAME: 'SIG lists', - PATH: '/sig/sig-list/' - }, - { - NAME: 'Application', - PATH: '/sig/sig-guidance/' - }, - { - NAME: 'Characters', - PATH: '/sig/role-description/' - } - ], - CLASS: [] - }, - { - PATH: '', - NAME: 'Security', - CHILDREN: [{ - NAME: 'Vulnerability management', - PATH: '/security/vulnerability-reporting/' - }, - { - NAME: 'Security advisories', - PATH: '/security/safety-bulletin/' - }, - { - NAME: 'CVE', - PATH: '/security/cve/' - } - ], - CLASS: [] - } - ], - LANG: '中', - GITTE: 'Source code', - GITTE_RESOURCE_LIST: [{ - NAME: 'Code sources', - URL: 'https://gitee.com/openeuler' - }, - { - NAME: 'Package sources', - URL: 'https://gitee.com/src-openeuler' - } - ], - FOOTER: { - MAIL: 'contact@openeuler.org', - COPY_RIGHT: 'Copyright © 2020 openEuler. All rights reserved.', - RIGHT_LIST: [{ - NAME: 'TradeMark', - URL: '/other/brand/' - }, - { - NAME: 'Legal', - URL: '/other/legal/' - }, - { - NAME: 'Privacy', - URL: '/other/privacy/' - } - ], - QR_CODE: 'Wechat Subscription' - }, - BUILDING:{ - BUILDING:'Building', - BUILDINGMES:'Coming Soon...' - } - } -}; \ No newline at end of file diff --git a/docs/.vuepress/lang/lang-modules/documentation.js b/docs/.vuepress/lang/lang-modules/documentation.js deleted file mode 100644 index a01b872887240e9135a2f78fd803fca1daae4027..0000000000000000000000000000000000000000 --- a/docs/.vuepress/lang/lang-modules/documentation.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @file 文档模块国际化配置入口 - * */ - -module.exports = { - cn: { - DOCS_LABEL: '文档', - VERSION: '版本', - SELECT_VERSION_LABLE: '选择版本', - PREVIOUS: '上一篇', - NEXT: '下一篇', - FEEDBACK: '意见反馈', - MENU: '目录', - }, - en: { - DOCS_LABEL: 'Docs', - VERSION: 'Version', - SELECT_VERSION_LABLE: 'Select Version', - PREVIOUS: 'Previous', - NEXT: 'Next', - FEEDBACK: 'Feedback', - MENU: 'Menu', - } -}; \ No newline at end of file diff --git a/docs/.vuepress/lang/zh.js b/docs/.vuepress/lang/zh.js deleted file mode 100644 index 4e1712862d38c4003859410998fc698b595bcab1..0000000000000000000000000000000000000000 --- a/docs/.vuepress/lang/zh.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @file 国际化中文配置主入口 - * */ - -module.exports = { - common: require('./lang-modules/common').cn, - documentation: require('./lang-modules/documentation').cn -}; \ No newline at end of file diff --git a/docs/.vuepress/public/code-source.svg b/docs/.vuepress/public/code-source.svg deleted file mode 100644 index c044996f0b09411c324a00549ef0b27cadea17e3..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/code-source.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - Outlined/UI/code source - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/favicon.ico b/docs/.vuepress/public/favicon.ico deleted file mode 100644 index fdd736fe42537d70ef8b56d91ce5924dba089a04..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/favicon.ico and /dev/null differ diff --git a/docs/.vuepress/public/fonts/FZLTCHJW.TTF b/docs/.vuepress/public/fonts/FZLTCHJW.TTF deleted file mode 100644 index 2ba2430be2cfc3bb6de1f2870b6d5364ad69e1e3..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/FZLTCHJW.TTF and /dev/null differ diff --git a/docs/.vuepress/public/fonts/FZLTHBJW.TTF b/docs/.vuepress/public/fonts/FZLTHBJW.TTF deleted file mode 100644 index a6a18957d20cd931c7d2c47428e9c01e2b01bae2..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/FZLTHBJW.TTF and /dev/null differ diff --git a/docs/.vuepress/public/fonts/FZLTHJW.TTF b/docs/.vuepress/public/fonts/FZLTHJW.TTF deleted file mode 100644 index 379dc975c37291aa56568ff1f078ed12345a280e..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/FZLTHJW.TTF and /dev/null differ diff --git a/docs/.vuepress/public/fonts/FZLTXHJW.TTF b/docs/.vuepress/public/fonts/FZLTXHJW.TTF deleted file mode 100644 index d1ea19d3babffe691b857797a2429d635a07174c..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/FZLTXHJW.TTF and /dev/null differ diff --git a/docs/.vuepress/public/fonts/FZLTXIHJW.TTF b/docs/.vuepress/public/fonts/FZLTXIHJW.TTF deleted file mode 100644 index 5800b22a5e222d3a42a35fb91b020f806520ed23..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/FZLTXIHJW.TTF and /dev/null differ diff --git a/docs/.vuepress/public/fonts/FZLTZHJW.TTF b/docs/.vuepress/public/fonts/FZLTZHJW.TTF deleted file mode 100644 index 6bdccda72632dbcb6d3be649c42fdf67043ea2f0..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/FZLTZHJW.TTF and /dev/null differ diff --git a/docs/.vuepress/public/fonts/HuaweiSans-Bold.ttf b/docs/.vuepress/public/fonts/HuaweiSans-Bold.ttf deleted file mode 100644 index f3a838546d3141c6684098f77bdaa763db8e5ffe..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/HuaweiSans-Bold.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/HuaweiSans-Light.ttf b/docs/.vuepress/public/fonts/HuaweiSans-Light.ttf deleted file mode 100644 index d3b3ac183eab2eb6e69b7b49905157b72dffdf47..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/HuaweiSans-Light.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/HuaweiSans-Medium.ttf b/docs/.vuepress/public/fonts/HuaweiSans-Medium.ttf deleted file mode 100644 index 6878ed7c64b5f0d0ac4c24f3fcbfba9aa90e58a1..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/HuaweiSans-Medium.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/HuaweiSans-Regular.ttf b/docs/.vuepress/public/fonts/HuaweiSans-Regular.ttf deleted file mode 100644 index 3118eaffb6d174531b17061c8c133b591256e152..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/HuaweiSans-Regular.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/HuaweiSans-Thin.ttf b/docs/.vuepress/public/fonts/HuaweiSans-Thin.ttf deleted file mode 100644 index 37d7a55332f1748b8fe2726fad411a7da86af4f0..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/HuaweiSans-Thin.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-Black.ttf b/docs/.vuepress/public/fonts/Roboto-Black.ttf deleted file mode 100644 index 86ec2b29ba56a3d6c45f1a8584ff3780fa70c60e..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-Black.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-BlackItalic.ttf b/docs/.vuepress/public/fonts/Roboto-BlackItalic.ttf deleted file mode 100644 index 1904c99b2c81e3e278d3c373f397b38049824d4c..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-BlackItalic.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-Bold.ttf b/docs/.vuepress/public/fonts/Roboto-Bold.ttf deleted file mode 100644 index 91ec21227866ca9d1cf77ec13660b7b85ec900dd..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-Bold.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-BoldCondensed.ttf b/docs/.vuepress/public/fonts/Roboto-BoldCondensed.ttf deleted file mode 100644 index d7ea8833ba369ec975846497e5fa05741295eacf..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-BoldCondensed.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-BoldCondensedItalic.ttf b/docs/.vuepress/public/fonts/Roboto-BoldCondensedItalic.ttf deleted file mode 100644 index 3c9635a9f0ccc304ddeadc16c5d1fd3a37c68ef7..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-BoldCondensedItalic.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-BoldItalic.ttf b/docs/.vuepress/public/fonts/Roboto-BoldItalic.ttf deleted file mode 100644 index 4013bf88a5e7b4e9ca4f8e53774d4f0a1346b52b..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-BoldItalic.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-Condensed.ttf b/docs/.vuepress/public/fonts/Roboto-Condensed.ttf deleted file mode 100644 index 6e7575a16a42802678855523efd2cb17cee01a86..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-Condensed.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-CondensedItalic.ttf b/docs/.vuepress/public/fonts/Roboto-CondensedItalic.ttf deleted file mode 100644 index 5ed712c9bde5cf7229eefaa8268dc027a8a06ea5..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-CondensedItalic.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-Italic.ttf b/docs/.vuepress/public/fonts/Roboto-Italic.ttf deleted file mode 100644 index 9f49ffd869194a92c2e71895169488cb4d037a00..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-Italic.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-Light.ttf b/docs/.vuepress/public/fonts/Roboto-Light.ttf deleted file mode 100644 index d43e943312e0f2c653815dd791d93f94f0abd73f..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-Light.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-LightItalic.ttf b/docs/.vuepress/public/fonts/Roboto-LightItalic.ttf deleted file mode 100644 index c11442ce5c5c3d1ba5880fa6fb778af61004ff71..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-LightItalic.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-Medium.ttf b/docs/.vuepress/public/fonts/Roboto-Medium.ttf deleted file mode 100644 index 87983419893a8952c3f286dc56d37fb94e320da0..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-Medium.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-MediumItalic.ttf b/docs/.vuepress/public/fonts/Roboto-MediumItalic.ttf deleted file mode 100644 index 5e866375e6d46984cca27f4b62d0e7082388763b..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-MediumItalic.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-Regular.ttf b/docs/.vuepress/public/fonts/Roboto-Regular.ttf deleted file mode 100644 index 7d9a6c4c32d7e920b549caf531e390733496b6e0..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-Regular.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-Thin.ttf b/docs/.vuepress/public/fonts/Roboto-Thin.ttf deleted file mode 100644 index 861d63adb6dee256c5d63879c323d27b5b0b047b..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-Thin.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/Roboto-ThinItalic.ttf b/docs/.vuepress/public/fonts/Roboto-ThinItalic.ttf deleted file mode 100644 index e65145f371d04239e075d1841b0f5a98238ccc3c..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/Roboto-ThinItalic.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/icomoon.eot b/docs/.vuepress/public/fonts/icomoon.eot deleted file mode 100644 index 296ebc035c5b8d333fc5b33d192e9aab34674455..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/icomoon.eot and /dev/null differ diff --git a/docs/.vuepress/public/fonts/icomoon.svg b/docs/.vuepress/public/fonts/icomoon.svg deleted file mode 100644 index 5993cbfc3e08ce844a2560a3c02a5b559c3db9a4..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/fonts/icomoon.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/fonts/icomoon.ttf b/docs/.vuepress/public/fonts/icomoon.ttf deleted file mode 100644 index 4d22f59786856202df95442ab1af225a53a7a1e3..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/icomoon.ttf and /dev/null differ diff --git a/docs/.vuepress/public/fonts/icomoon.woff b/docs/.vuepress/public/fonts/icomoon.woff deleted file mode 100644 index 04a91af85e46766f2d489439cef5f58fa209467b..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/fonts/icomoon.woff and /dev/null differ diff --git a/docs/.vuepress/public/footer-logo.png b/docs/.vuepress/public/footer-logo.png deleted file mode 100644 index e029c8d7daad57c231228b2140a505fcf93b8e79..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/footer-logo.png and /dev/null differ diff --git a/docs/.vuepress/public/footer-logo.svg b/docs/.vuepress/public/footer-logo.svg deleted file mode 100644 index f7c0b544604181a8af602653b8fd3d19ca2edc00..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/footer-logo.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - openEuler - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/community/conduct/conduct-banner.png b/docs/.vuepress/public/img/community/conduct/conduct-banner.png deleted file mode 100644 index f1ffc39b4c05f1871f7a1523c851b904a44f35ba..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/conduct/conduct-banner.png and /dev/null differ diff --git a/docs/.vuepress/public/img/community/contribution/bkg-community.png b/docs/.vuepress/public/img/community/contribution/bkg-community.png deleted file mode 100644 index a6c2a2737b0a4712b8c93e62ae1a02fe79b8551b..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/contribution/bkg-community.png and /dev/null differ diff --git a/docs/.vuepress/public/img/community/contribution/cla.gif b/docs/.vuepress/public/img/community/contribution/cla.gif deleted file mode 100644 index be333ead07fbaf303203246f7334e1acfb49eb38..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/contribution/cla.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/community/contribution/cla.png b/docs/.vuepress/public/img/community/contribution/cla.png deleted file mode 100644 index 498a372eef9a051e317406d6ca0a588e7f840f14..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/contribution/cla.png and /dev/null differ diff --git a/docs/.vuepress/public/img/community/contribution/commit.gif b/docs/.vuepress/public/img/community/contribution/commit.gif deleted file mode 100644 index 7deaf9b0881dacd2c0d947adc82a3c3ce6a78451..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/contribution/commit.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/community/contribution/commit.png b/docs/.vuepress/public/img/community/contribution/commit.png deleted file mode 100644 index 66e5cc2e4cdc9fb28ba8e8a43a6914056a645ee1..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/contribution/commit.png and /dev/null differ diff --git a/docs/.vuepress/public/img/community/contribution/contribution.gif b/docs/.vuepress/public/img/community/contribution/contribution.gif deleted file mode 100644 index 1bffb75b840cb28c3a8686e31be94c5b8fdad210..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/contribution/contribution.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/community/contribution/contribution.png b/docs/.vuepress/public/img/community/contribution/contribution.png deleted file mode 100644 index 73f4dd43c44393c300cfd49817102a43c295c4bd..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/contribution/contribution.png and /dev/null differ diff --git a/docs/.vuepress/public/img/community/contribution/issue.gif b/docs/.vuepress/public/img/community/contribution/issue.gif deleted file mode 100644 index 2542e6e7711be33b5002148ad6951d81ad2658b2..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/contribution/issue.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/community/contribution/issue.png b/docs/.vuepress/public/img/community/contribution/issue.png deleted file mode 100644 index b53c5ca8cf0319a034a78f5d81c0bd61d5b271b3..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/contribution/issue.png and /dev/null differ diff --git a/docs/.vuepress/public/img/community/contribution/plane1.svg b/docs/.vuepress/public/img/community/contribution/plane1.svg deleted file mode 100644 index d3c782241325e89a14e3d91838dff8f423b823d7..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/community/contribution/plane1.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - 编组 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/community/contribution/plane2.svg b/docs/.vuepress/public/img/community/contribution/plane2.svg deleted file mode 100644 index 5421b6fe6e4f5784baf337359a7769f6dd8d65bd..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/community/contribution/plane2.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - 编组备份 13 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/community/contribution/plane3.svg b/docs/.vuepress/public/img/community/contribution/plane3.svg deleted file mode 100644 index ccb5e7ecd136c2ce6034dea33a5bf802ead65fea..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/community/contribution/plane3.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - 编组备份 14 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/community/contribution/plane4.svg b/docs/.vuepress/public/img/community/contribution/plane4.svg deleted file mode 100644 index 90cae325f14aa8842437cf4e4c7a0a68dd33c4d7..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/community/contribution/plane4.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - 编组备份 15 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/community/contribution/rode1.svg b/docs/.vuepress/public/img/community/contribution/rode1.svg deleted file mode 100644 index 81a1fb6925d9856d3c412521c7217ca5041f9299..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/community/contribution/rode1.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - 路径 4 - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/community/contribution/rode2.svg b/docs/.vuepress/public/img/community/contribution/rode2.svg deleted file mode 100644 index 9273536b627a315b6b5e98ebeb39d0975dc3b117..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/community/contribution/rode2.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - 路径 10备份 2 - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/community/contribution/rode3.svg b/docs/.vuepress/public/img/community/contribution/rode3.svg deleted file mode 100644 index 0f6a4f2039155748a9923547500bce0410966125..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/community/contribution/rode3.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - 路径 11备份 2 - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/community/contribution/rode4.svg b/docs/.vuepress/public/img/community/contribution/rode4.svg deleted file mode 100644 index fa31d14c710d327be36eeae3b4f37879d646d4a5..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/community/contribution/rode4.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - 路径 12备份 2 - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/community/contribution/sig.gif b/docs/.vuepress/public/img/community/contribution/sig.gif deleted file mode 100644 index da518c4b7dea160d64bbb3d1edf284d8332decb0..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/contribution/sig.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/community/contribution/sig.png b/docs/.vuepress/public/img/community/contribution/sig.png deleted file mode 100644 index 5e5768aaae7fa2db9dfce2ee8d18e58edd4df24d..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/contribution/sig.png and /dev/null differ diff --git a/docs/.vuepress/public/img/community/maillist/mail-banner.png b/docs/.vuepress/public/img/community/maillist/mail-banner.png deleted file mode 100644 index a14a2a59373557caf728c6bf5a55ae3e91ecebc0..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/maillist/mail-banner.png and /dev/null differ diff --git a/docs/.vuepress/public/img/community/maillist/mail1.png b/docs/.vuepress/public/img/community/maillist/mail1.png deleted file mode 100644 index f486e3d5d8fd3bac93bdb0136f1ca38bfa7fcd9c..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/maillist/mail1.png and /dev/null differ diff --git a/docs/.vuepress/public/img/community/maillist/mail2.png b/docs/.vuepress/public/img/community/maillist/mail2.png deleted file mode 100644 index e6a033f7099461b773cb8c4219fd513847916ee1..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/maillist/mail2.png and /dev/null differ diff --git a/docs/.vuepress/public/img/community/maillist/mail3.png b/docs/.vuepress/public/img/community/maillist/mail3.png deleted file mode 100644 index 9795cd8e49755564370e9a8d3e89b3f50b02f2b3..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/maillist/mail3.png and /dev/null differ diff --git a/docs/.vuepress/public/img/community/maillist/mail4.png b/docs/.vuepress/public/img/community/maillist/mail4.png deleted file mode 100644 index 259f1a4f4e10997f218bdfb712ae2b358731a732..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/community/maillist/mail4.png and /dev/null differ diff --git a/docs/.vuepress/public/img/docs/docs-administration.svg b/docs/.vuepress/public/img/docs/docs-administration.svg deleted file mode 100644 index b3cc597426881b998faa3a97f9d39279070e593e..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/docs/docs-administration.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - Outlined/UI/paper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/docs/docs-application.svg b/docs/.vuepress/public/img/docs/docs-application.svg deleted file mode 100644 index 420fd3367982d6a00b15227843c8523fdf4aa25f..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/docs/docs-application.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - Outlined/UI/paper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/docs/docs-banner.png b/docs/.vuepress/public/img/docs/docs-banner.png deleted file mode 100644 index 6c2d09c2b4cc505d4241005ff3fd08b1bd315787..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/docs/docs-banner.png and /dev/null differ diff --git a/docs/.vuepress/public/img/docs/docs-exploit.svg b/docs/.vuepress/public/img/docs/docs-exploit.svg deleted file mode 100644 index f1c31d57d6220a9f46b6aa72b6fbb06a4242395e..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/docs/docs-exploit.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - Outlined/UI/paper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/docs/docs-installation.svg b/docs/.vuepress/public/img/docs/docs-installation.svg deleted file mode 100644 index 74ae68531a12ab916409cfacc42e7fd3c159691c..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/docs/docs-installation.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - Outlined/UI/paper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/docs/docs-quickstart.svg b/docs/.vuepress/public/img/docs/docs-quickstart.svg deleted file mode 100644 index 44640ff4701f05fd1d4208ca208420a89b00b7c3..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/docs/docs-quickstart.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - Outlined/UI/paper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/docs/docs-releasenotes.svg b/docs/.vuepress/public/img/docs/docs-releasenotes.svg deleted file mode 100644 index 85905737ad8776896fba55fb3e50c04d8141816b..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/docs/docs-releasenotes.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - Outlined/UI/paper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/docs/docs-user.svg b/docs/.vuepress/public/img/docs/docs-user.svg deleted file mode 100644 index 194a8c69372e61a26e0be5fe10d273e50a6d1423..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/docs/docs-user.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - Outlined/UI/paper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/docs/icon-document.svg b/docs/.vuepress/public/img/docs/icon-document.svg deleted file mode 100644 index 6fffb75e09883cececcbe4408025e6d35b3005aa..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/docs/icon-document.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - Style - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/events/20200707-openeluer-live-01.png b/docs/.vuepress/public/img/events/20200707-openeluer-live-01.png deleted file mode 100644 index a92d6676fd3400602e5cfe2e6fb7ca146b5cd809..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/events/20200707-openeluer-live-01.png and /dev/null differ diff --git a/docs/.vuepress/public/img/events/20200723-openeluer-live-01.jpg b/docs/.vuepress/public/img/events/20200723-openeluer-live-01.jpg deleted file mode 100644 index 38d92688e1ae340fe801b03608762368eab277c0..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/events/20200723-openeluer-live-01.jpg and /dev/null differ diff --git a/docs/.vuepress/public/img/events/2020hdc/1.png b/docs/.vuepress/public/img/events/2020hdc/1.png deleted file mode 100644 index 2e3ddfc52ff02647abbfb7b00877afe978b39105..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/events/2020hdc/1.png and /dev/null differ diff --git a/docs/.vuepress/public/img/events/2020hdc/2.png b/docs/.vuepress/public/img/events/2020hdc/2.png deleted file mode 100644 index 5c9387f46288bd1ef66844c75b19be73b8f2d0a9..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/events/2020hdc/2.png and /dev/null differ diff --git a/docs/.vuepress/public/img/events/2020hdc/3.png b/docs/.vuepress/public/img/events/2020hdc/3.png deleted file mode 100644 index cbbc21c6d35c40cd8334b97db191b37f64d24042..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/events/2020hdc/3.png and /dev/null differ diff --git a/docs/.vuepress/public/img/events/banner-20200104.png b/docs/.vuepress/public/img/events/banner-20200104.png deleted file mode 100644 index 526c2a4b0a8a537628239450f3c669f3210b873f..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/events/banner-20200104.png and /dev/null differ diff --git a/docs/.vuepress/public/img/events/hdc202001.png b/docs/.vuepress/public/img/events/hdc202001.png deleted file mode 100644 index b8d1109ecfd3a90b056af11f3d7523783fa3f954..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/events/hdc202001.png and /dev/null differ diff --git a/docs/.vuepress/public/img/events/summer-2020-wechat-2.jpg b/docs/.vuepress/public/img/events/summer-2020-wechat-2.jpg deleted file mode 100644 index fb5014bbe9ab505ec2cfa816f5a4c5c35619c19d..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/events/summer-2020-wechat-2.jpg and /dev/null differ diff --git a/docs/.vuepress/public/img/events/summer-2020-wechat-3.jpg b/docs/.vuepress/public/img/events/summer-2020-wechat-3.jpg deleted file mode 100644 index b38edab65a93fc0d438e6cdafe349e8a1e8beab4..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/events/summer-2020-wechat-3.jpg and /dev/null differ diff --git a/docs/.vuepress/public/img/events/summer-2020-wechat.jpg b/docs/.vuepress/public/img/events/summer-2020-wechat.jpg deleted file mode 100644 index fb5014bbe9ab505ec2cfa816f5a4c5c35619c19d..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/events/summer-2020-wechat.jpg and /dev/null differ diff --git a/docs/.vuepress/public/img/events/summer1.png b/docs/.vuepress/public/img/events/summer1.png deleted file mode 100644 index 1c70db56fc81ebad385d99a2c096921177bc6472..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/events/summer1.png and /dev/null differ diff --git a/docs/.vuepress/public/img/events/summer2.png b/docs/.vuepress/public/img/events/summer2.png deleted file mode 100644 index 1f820d76a629efd4abc9387ac3474efc6d8fc673..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/events/summer2.png and /dev/null differ diff --git a/docs/.vuepress/public/img/events/summer3.jpeg b/docs/.vuepress/public/img/events/summer3.jpeg deleted file mode 100644 index 742330cab433b13e925c638bcbfa7af15cff12bf..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/events/summer3.jpeg and /dev/null differ diff --git a/docs/.vuepress/public/img/home/1.jpg b/docs/.vuepress/public/img/home/1.jpg deleted file mode 100644 index 65bcb649a522f7c3a9bd97870f2f8620bbc0963c..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/1.jpg and /dev/null differ diff --git a/docs/.vuepress/public/img/home/2.png b/docs/.vuepress/public/img/home/2.png deleted file mode 100644 index caea8e2e8e49846568b5999937ca2586848bf30d..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/2.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/Banner0.gif b/docs/.vuepress/public/img/home/Banner0.gif deleted file mode 100644 index 7dfb1c2ed726f5ea56e1cf08b773375f36942aa3..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/Banner0.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/home/Banner1.gif b/docs/.vuepress/public/img/home/Banner1.gif deleted file mode 100644 index 6f0dec78dbbb88a013b304ec4b85e27540d2c694..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/Banner1.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/home/Banner2.gif b/docs/.vuepress/public/img/home/Banner2.gif deleted file mode 100644 index e345c5e3337d15c9cf9a1d3dd2b25b8bdb4d7e63..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/Banner2.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/home/BannerS.gif b/docs/.vuepress/public/img/home/BannerS.gif deleted file mode 100644 index 8f90f7eb1026849daadc8cb8b93199a33f8ab2df..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/BannerS.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/home/BannerVideo.png b/docs/.vuepress/public/img/home/BannerVideo.png deleted file mode 100644 index a018409cf867863b51a83d6d3e51b3227576a4fd..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/BannerVideo.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/Card1.png b/docs/.vuepress/public/img/home/Card1.png deleted file mode 100644 index 2a39d97fab94afbd156f325c4a4d224606ccb361..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/Card1.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/Card2.png b/docs/.vuepress/public/img/home/Card2.png deleted file mode 100644 index 52d1b9a53eb8e90d660dd7c15e3212cb36276b72..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/Card2.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/Card3.png b/docs/.vuepress/public/img/home/Card3.png deleted file mode 100644 index 2a39d97fab94afbd156f325c4a4d224606ccb361..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/Card3.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/Card4.png b/docs/.vuepress/public/img/home/Card4.png deleted file mode 100644 index 6cd484dcd0829a8e23b7ccb0da23928a3747804e..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/Card4.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/Gitee.png b/docs/.vuepress/public/img/home/Gitee.png deleted file mode 100644 index 6bcf1963425e55703f50aac62d345ae068d9365d..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/Gitee.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/areaECS.svg b/docs/.vuepress/public/img/home/areaECS.svg deleted file mode 100644 index ffc2c67263363a9cbb3a287e560f717638e58612..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/areaECS.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - 编组 2备份 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/areaHardware.svg b/docs/.vuepress/public/img/home/areaHardware.svg deleted file mode 100644 index cb5a1f92eb4a77970d8c586a2fe41870cd40dcd5..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/areaHardware.svg +++ /dev/null @@ -1,66 +0,0 @@ - - - 编组 2备份 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/areaPai.png b/docs/.vuepress/public/img/home/areaPai.png deleted file mode 100644 index 6f60bd7a9d6926a82119a34eb3f99c8d535ca07b..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/areaPai.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/areaVirtual.svg b/docs/.vuepress/public/img/home/areaVirtual.svg deleted file mode 100644 index 78639b2633538d0d8b3534b725f1c5ce24737e6b..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/areaVirtual.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - 编组 2备份 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/arrow.svg b/docs/.vuepress/public/img/home/arrow.svg deleted file mode 100644 index 56c9a462d0d37aab24a7a268e1b5a27d60d10a57..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/arrow.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - Outlined/UI/button_arrow_down - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/arrowUp.svg b/docs/.vuepress/public/img/home/arrowUp.svg deleted file mode 100644 index bdddebb17ce0d59681adf1258d888f61059bff2a..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/arrowUp.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - Style - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/bannerSummer.png b/docs/.vuepress/public/img/home/bannerSummer.png deleted file mode 100644 index 56f8a0bd122b66da7558b0cdf77cfe2c7ff2b966..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/bannerSummer.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/blogImg.png b/docs/.vuepress/public/img/home/blogImg.png deleted file mode 100644 index 489f8ab6f8a9ad556a696b152d6d8a07858d7567..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/blogImg.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/cetc.png b/docs/.vuepress/public/img/home/cetc.png deleted file mode 100644 index 5718b33196fc418204c0f00082add49a0baaceed..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/cetc.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/caihaomin.png b/docs/.vuepress/public/img/home/developer/caihaomin.png deleted file mode 100644 index f2610a9583dfbf297181273073874fdf394dd24f..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/caihaomin.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/dongjian.png b/docs/.vuepress/public/img/home/developer/dongjian.png deleted file mode 100644 index e7d9e52494fd7aac6ab7d5999602180cfc8cddf6..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/dongjian.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/dukaitian.png b/docs/.vuepress/public/img/home/developer/dukaitian.png deleted file mode 100644 index fa1b5fe37d8c3a01d6a433d6ab3df18ff0ba5782..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/dukaitian.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/hexiaowen.png b/docs/.vuepress/public/img/home/developer/hexiaowen.png deleted file mode 100644 index ffe7ebf26ef83a9ac6e01ccb6de41923e3181b81..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/hexiaowen.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/hufen.png b/docs/.vuepress/public/img/home/developer/hufen.png deleted file mode 100644 index 1f7b9b9e1bc18699414f069587dc8c390794a0d2..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/hufen.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/lifeng.png b/docs/.vuepress/public/img/home/developer/lifeng.png deleted file mode 100644 index bb895bf17cae9d9c2827f4c39ce9d8f2f903b3b0..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/lifeng.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/liuzhiqiang.png b/docs/.vuepress/public/img/home/developer/liuzhiqiang.png deleted file mode 100644 index f0e7a9c76320f2c4bc595cdc97fd7a51e3459331..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/liuzhiqiang.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/wubo.png b/docs/.vuepress/public/img/home/developer/wubo.png deleted file mode 100644 index 3486f3a971c838038bc04b3ddd6efe10fcdec7ec..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/wubo.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/xiexiuqi.png b/docs/.vuepress/public/img/home/developer/xiexiuqi.png deleted file mode 100644 index ddb861e07f8ead9856e2c7d6b7d9dea7003a1b54..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/xiexiuqi.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/xiezhipeng.png b/docs/.vuepress/public/img/home/developer/xiezhipeng.png deleted file mode 100644 index 345d74af088868749204598e966d8308d7c34412..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/xiezhipeng.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/xiongwei.png b/docs/.vuepress/public/img/home/developer/xiongwei.png deleted file mode 100644 index df0b390ed900102155ccc2bb31a2525d40573372..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/xiongwei.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/zhanghailiang.png b/docs/.vuepress/public/img/home/developer/zhanghailiang.png deleted file mode 100644 index cc9153f61ca01f296caf784ce14a5cd97aaed07e..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/zhanghailiang.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/zhengxian.png b/docs/.vuepress/public/img/home/developer/zhengxian.png deleted file mode 100644 index 41122093d6bcd4e184d902decf113a84eb7e751d..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/zhengxian.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/zhuchunyi.png b/docs/.vuepress/public/img/home/developer/zhuchunyi.png deleted file mode 100644 index be8db69600087470df45d0770ade1b6f268074f4..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/zhuchunyi.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/zhujianwei.png b/docs/.vuepress/public/img/home/developer/zhujianwei.png deleted file mode 100644 index 76252096602db5144c1a2af6f24b8084938d82c0..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/zhujianwei.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/developer/zhuyanpeng.png b/docs/.vuepress/public/img/home/developer/zhuyanpeng.png deleted file mode 100644 index 29e4f863548995bffef70e49ad00830194bc74a7..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/developer/zhuyanpeng.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/email.png b/docs/.vuepress/public/img/home/email.png deleted file mode 100644 index 952ad2383f1e8617c5069d290b18fbb90a915a2f..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/email.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/eventDate.svg b/docs/.vuepress/public/img/home/eventDate.svg deleted file mode 100644 index c4afbf3da17ce03a838066e03507963d1b209c74..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/eventDate.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - 形状结合 - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/eventImg.png b/docs/.vuepress/public/img/home/eventImg.png deleted file mode 100644 index 99da38de48d1f4605590c706975040b7dcc1d74d..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/eventImg.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/homeActive.gif b/docs/.vuepress/public/img/home/homeActive.gif deleted file mode 100644 index c668ff307c380e09dad3508b092bcae1deb4400f..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/homeActive.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/home/hopeEdge.png b/docs/.vuepress/public/img/home/hopeEdge.png deleted file mode 100644 index 3b84a646e7f7c24a16a9ff62d74d5eef8acc1ad7..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/hopeEdge.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/icon-mute.svg b/docs/.vuepress/public/img/home/icon-mute.svg deleted file mode 100644 index 28fef0592e9baedaf338a223d189e7d960c7b45d..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/icon-mute.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/icon-pause.svg b/docs/.vuepress/public/img/home/icon-pause.svg deleted file mode 100644 index a808afed2c61ff850f224e2641992f871b48a882..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/icon-pause.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/icon-play.svg b/docs/.vuepress/public/img/home/icon-play.svg deleted file mode 100644 index 281e51314d8aec2c9388e0d4ac152495abdb997c..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/icon-play.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/icon-voice.svg b/docs/.vuepress/public/img/home/icon-voice.svg deleted file mode 100644 index e3054ed03767eeadc92c1be08b3ff0b7bb0df9c3..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/icon-voice.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/iscas.png b/docs/.vuepress/public/img/home/iscas.png deleted file mode 100644 index 613a2758572573041f3b549e4c88877f9ddbdde0..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/iscas.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/kunpeng.png b/docs/.vuepress/public/img/home/kunpeng.png deleted file mode 100644 index d7672d12bec4db5b2c6143109b843eb74bfdbbb3..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/kunpeng.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/medal.svg b/docs/.vuepress/public/img/home/medal.svg deleted file mode 100644 index 3ebd4bf64f104e2fa3296f486fa527bc5b087749..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/medal.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - 编组 - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/mulan.png b/docs/.vuepress/public/img/home/mulan.png deleted file mode 100644 index 7cefee5ce27ec24bbf7b3b056f7e4cd353df28d8..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/mulan.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/newsImg.png b/docs/.vuepress/public/img/home/newsImg.png deleted file mode 100644 index 17efec21a55605cdb1533c86f5f57ee7f33ada9d..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/newsImg.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/pengcheng.png b/docs/.vuepress/public/img/home/pengcheng.png deleted file mode 100644 index 32a48876528760f599c87aed49cf21a9166ce821..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/pengcheng.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/planeLeft.svg b/docs/.vuepress/public/img/home/planeLeft.svg deleted file mode 100644 index 2608f34122cecbf7c2fbcb63ddab651bd038edf4..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/planeLeft.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - 编组 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/planeMiddle.svg b/docs/.vuepress/public/img/home/planeMiddle.svg deleted file mode 100644 index cf0f0560f7319387e505529c754974f601597b50..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/planeMiddle.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - 编组 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/planeRight.svg b/docs/.vuepress/public/img/home/planeRight.svg deleted file mode 100644 index 3f75cc7649a4ff90a944055ed6ae079525c55e47..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/planeRight.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - 编组 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/play-btn.gif b/docs/.vuepress/public/img/home/play-btn.gif deleted file mode 100644 index 55f7bb03b6286d9971b23f8623b0a243ce2f0c7f..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/play-btn.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/home/prev-detail.svg b/docs/.vuepress/public/img/home/prev-detail.svg deleted file mode 100644 index ec88be4c8e3c92f9de01f58a5437d3d35c0c3bc3..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/prev-detail.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - Style - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/prev.svg b/docs/.vuepress/public/img/home/prev.svg deleted file mode 100644 index 95ec059b11d49f761fcda142c4a1348fc17d3399..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/prev.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - Shape - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/qiling.png b/docs/.vuepress/public/img/home/qiling.png deleted file mode 100644 index ff955aa86806f88c01e82df38de790a7fb85edac..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/qiling.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/rodeLeft.svg b/docs/.vuepress/public/img/home/rodeLeft.svg deleted file mode 100644 index 21c189a14833bd15ab0a49519ae3fe3f8490faa3..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/rodeLeft.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - 路径 4 - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/rodeMiddle.svg b/docs/.vuepress/public/img/home/rodeMiddle.svg deleted file mode 100644 index 303b612a102976dfca72e564a13f9e4305bdba16..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/rodeMiddle.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - 路径 8 - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/rodeRight.svg b/docs/.vuepress/public/img/home/rodeRight.svg deleted file mode 100644 index 4acb81fceda33b866b0465dc1a1d2e4be3b69534..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/rodeRight.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - 路径 9 - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/sourceApply.gif b/docs/.vuepress/public/img/home/sourceApply.gif deleted file mode 100644 index ad13f7d4c415f8300ea2b4176207db0533f73a9a..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/sourceApply.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/home/sourceMail.gif b/docs/.vuepress/public/img/home/sourceMail.gif deleted file mode 100644 index cf17e742422a3850e194e95a014fad91353f4dca..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/sourceMail.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/home/step-move-1.gif b/docs/.vuepress/public/img/home/step-move-1.gif deleted file mode 100644 index 618b1a961281c7abf0ceeb775e66b2411ee004bf..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/step-move-1.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/home/step-move-2.gif b/docs/.vuepress/public/img/home/step-move-2.gif deleted file mode 100644 index 49316a39b1bf20b57613edb3234374a23882aeaf..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/step-move-2.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/home/step-move-3.gif b/docs/.vuepress/public/img/home/step-move-3.gif deleted file mode 100644 index 7dce8fe0e6884454846977f6ce004b940281bbc2..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/step-move-3.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/home/step-move-4.gif b/docs/.vuepress/public/img/home/step-move-4.gif deleted file mode 100644 index 20bb85a0dafb9859ff3b05ac31c22cacbae5a960..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/step-move-4.gif and /dev/null differ diff --git a/docs/.vuepress/public/img/home/step.png b/docs/.vuepress/public/img/home/step.png deleted file mode 100644 index ef2d201cf5e1868ce597582e92e4086841f2be71..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/step.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/step1.png b/docs/.vuepress/public/img/home/step1.png deleted file mode 100644 index 13121a69c60d8803d65299829376320b3f3feedb..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/step1.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/step2.png b/docs/.vuepress/public/img/home/step2.png deleted file mode 100644 index 20a4311513887556464402ace16231138cda77ce..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/step2.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/step3.png b/docs/.vuepress/public/img/home/step3.png deleted file mode 100644 index 2270b1f3e426a6dd44d1d26bff3510fc40cb37cb..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/step3.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/step4.png b/docs/.vuepress/public/img/home/step4.png deleted file mode 100644 index 14875f7f576b42bbe4754168af146b9abc4fd90a..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/step4.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/tongxin.png b/docs/.vuepress/public/img/home/tongxin.png deleted file mode 100644 index 45b3b528538ce6c19698b5a6b4cbcfe16808cb4d..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/tongxin.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/turbo.png b/docs/.vuepress/public/img/home/turbo.png deleted file mode 100644 index 369b6e9033156c4cad99172c9f479e6d61ed669d..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/turbo.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/userEmail.svg b/docs/.vuepress/public/img/home/userEmail.svg deleted file mode 100644 index 43b8b8c59998937c48afb31623f2cb806dd91bb3..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/userEmail.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - Style - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/userName.svg b/docs/.vuepress/public/img/home/userName.svg deleted file mode 100644 index c3a52713c8c93a38d5ea5cb71bd395f1e5e8f8c5..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/home/userName.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - Style - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/home/webBanner0.png b/docs/.vuepress/public/img/home/webBanner0.png deleted file mode 100644 index 017ae6775f9ff655bef9278916da3ec470d47edc..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/webBanner0.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/webBanner1.png b/docs/.vuepress/public/img/home/webBanner1.png deleted file mode 100644 index 84428ad2ee8c2f903b7bfaf2c1b1cf2bc962ec3c..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/webBanner1.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/webBanner2.png b/docs/.vuepress/public/img/home/webBanner2.png deleted file mode 100644 index 017ae6775f9ff655bef9278916da3ec470d47edc..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/webBanner2.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/webBannerSummer.png b/docs/.vuepress/public/img/home/webBannerSummer.png deleted file mode 100644 index f7e475540f2fbe8fc151db33e2dcf43fc8a19b77..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/webBannerSummer.png and /dev/null differ diff --git a/docs/.vuepress/public/img/home/webBannerVideo.png b/docs/.vuepress/public/img/home/webBannerVideo.png deleted file mode 100644 index 5383107b1b1851a8c5a0892cb46be25120beb39f..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/home/webBannerVideo.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/20190708/1.png b/docs/.vuepress/public/img/news/20190708/1.png deleted file mode 100644 index 79bf4a90140230d72e86069da0877018c1e6ef93..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/20190708/1.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_01.png b/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_01.png deleted file mode 100644 index 7cc0abfa89c6f8fd6b0f77e20d994c01d06c308d..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_01.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_02.png b/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_02.png deleted file mode 100644 index ac988c047436f92e6427a1727c1486e2ceeb24ff..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_02.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_03.png b/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_03.png deleted file mode 100644 index e579b6f23bbf41efdf39a73a329625416cea1d98..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_03.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_04.png b/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_04.png deleted file mode 100644 index e579b6f23bbf41efdf39a73a329625416cea1d98..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_04.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_05.png b/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_05.png deleted file mode 100644 index d6b8b9701a816a7b12a72eeba3de2f482accdac3..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/20190829ai/20190829_ai_summit_05.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/20190918hc/20190918_hc_01.png b/docs/.vuepress/public/img/news/20190918hc/20190918_hc_01.png deleted file mode 100644 index 4db6cb52de304783edb0953f27c66be2c6411afe..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/20190918hc/20190918_hc_01.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/20190918hc/20190918_hc_02.png b/docs/.vuepress/public/img/news/20190918hc/20190918_hc_02.png deleted file mode 100644 index af22d392706a287ed0692f222de29068a8175204..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/20190918hc/20190918_hc_02.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/20190918hc/20190918_hc_03.png b/docs/.vuepress/public/img/news/20190918hc/20190918_hc_03.png deleted file mode 100644 index 30fb4a1b6626df3de6c1c2b71fc52be01c61fb20..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/20190918hc/20190918_hc_03.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/20190918hc/20190918_hc_04.png b/docs/.vuepress/public/img/news/20190918hc/20190918_hc_04.png deleted file mode 100644 index 9aa5dce3a4822ff497424a29b9f5824dc8afb9bf..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/20190918hc/20190918_hc_04.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/20191001/history.jpeg b/docs/.vuepress/public/img/news/20191001/history.jpeg deleted file mode 100644 index f169a72befdf8787b47c32e29f7b160628bed016..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/20191001/history.jpeg and /dev/null differ diff --git a/docs/.vuepress/public/img/news/mwc/mwc_20190626_shanghai.png b/docs/.vuepress/public/img/news/mwc/mwc_20190626_shanghai.png deleted file mode 100644 index 449028629c1e4eaf151babe6b0b0793674bce13f..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/mwc/mwc_20190626_shanghai.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/mwc/mwc_20190626_shanghai_2.png b/docs/.vuepress/public/img/news/mwc/mwc_20190626_shanghai_2.png deleted file mode 100644 index 5901777e842fcd39d08dae57331ed76690a75e72..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/mwc/mwc_20190626_shanghai_2.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/mwc/mwc_20190626_shanghai_banner.png b/docs/.vuepress/public/img/news/mwc/mwc_20190626_shanghai_banner.png deleted file mode 100644 index bcf7de6360a9db59a3afc1ee2b0036368ccec8f7..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/mwc/mwc_20190626_shanghai_banner.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/news-banner.png b/docs/.vuepress/public/img/news/news-banner.png deleted file mode 100644 index 87f634eb7e6f80cbfdd119d980b78635909d65f0..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/news-banner.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing.png b/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing.png deleted file mode 100644 index e5ed43ed41b5202166248293bcbeb5d4385061ee..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing_01.png b/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing_01.png deleted file mode 100644 index b68a7bc19037c20abf1c2158e3c6a3d6598ef95c..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing_01.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing_02.png b/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing_02.png deleted file mode 100644 index fd4a16b77b71703b90c68f956e7b6a3116b8a7a5..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing_02.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing_03.png b/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing_03.png deleted file mode 100644 index 65d0388fa421ebb7b42097510594407cf2655c98..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing_03.png and /dev/null differ diff --git a/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing_banner.png b/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing_banner.png deleted file mode 100644 index 50a16244555bbcdb2c277293dd273cf3e1981d21..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/news/summit20190723/summit_20190723_beijing_banner.png and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/Style.png b/docs/.vuepress/public/img/other/brand/Style.png deleted file mode 100644 index d24c88882af2800b75e5b16f577238afce3c3c77..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/brand/Style.png and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/brand-banner.png b/docs/.vuepress/public/img/other/brand/brand-banner.png deleted file mode 100644 index aa1913645c5e4329cd9bf9be3ac70d4aca3ac97e..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/brand/brand-banner.png and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/horizontal-center.pdf b/docs/.vuepress/public/img/other/brand/horizontal-center.pdf deleted file mode 100644 index 7ef326b8c9c00a32e50fe22d988b0868af3626e4..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/brand/horizontal-center.pdf and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/horizontal-center.png b/docs/.vuepress/public/img/other/brand/horizontal-center.png deleted file mode 100644 index c4148e13e03ee3f42de88b90f98dc29d3e688c1e..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/brand/horizontal-center.png and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/horizontal-center.svg b/docs/.vuepress/public/img/other/brand/horizontal-center.svg deleted file mode 100644 index c106e748685999800b505a022289813aebbc8f53..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/other/brand/horizontal-center.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - 5@3x - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/other/brand/horizontal-left.pdf b/docs/.vuepress/public/img/other/brand/horizontal-left.pdf deleted file mode 100644 index 525bc4091f32158e23d94a07a68dc16667ecd9d7..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/brand/horizontal-left.pdf and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/horizontal-left.png b/docs/.vuepress/public/img/other/brand/horizontal-left.png deleted file mode 100644 index 2f6b37b4ab92666ee1a73673db7fceb22956fa7b..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/brand/horizontal-left.png and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/horizontal-left.svg b/docs/.vuepress/public/img/other/brand/horizontal-left.svg deleted file mode 100644 index 54944f68ed90d99856644637f986042bfed72a3a..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/other/brand/horizontal-left.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - 3@3x - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/other/brand/horizontal-right.pdf b/docs/.vuepress/public/img/other/brand/horizontal-right.pdf deleted file mode 100644 index aa6bb747021456106dbf575a4ef202f4dcac0832..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/brand/horizontal-right.pdf and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/horizontal-right.png b/docs/.vuepress/public/img/other/brand/horizontal-right.png deleted file mode 100644 index 1af29f61ae526cce18ef5364b242c83d25e78d44..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/brand/horizontal-right.png and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/horizontal-right.svg b/docs/.vuepress/public/img/other/brand/horizontal-right.svg deleted file mode 100644 index 464234f407a418651b0c2a6d6f8faf25432e0b98..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/other/brand/horizontal-right.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - 4@3x - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/other/brand/vertical-center.pdf b/docs/.vuepress/public/img/other/brand/vertical-center.pdf deleted file mode 100644 index b5a529fa2825de56cde0b668314bb24f89fbb0d9..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/brand/vertical-center.pdf and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/vertical-center.png b/docs/.vuepress/public/img/other/brand/vertical-center.png deleted file mode 100644 index efbd84139866f6ac30aa51c3afd11cc9e727bdc5..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/brand/vertical-center.png and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/vertical-center.svg b/docs/.vuepress/public/img/other/brand/vertical-center.svg deleted file mode 100644 index 2ff364ca4ab8fdc552819df9d41b1758dd567911..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/other/brand/vertical-center.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - 2@3x - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/other/brand/vertical-left.pdf b/docs/.vuepress/public/img/other/brand/vertical-left.pdf deleted file mode 100644 index 4281bd30fad8e73499b386e897bb4bb9e2b31396..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/brand/vertical-left.pdf and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/vertical-left.png b/docs/.vuepress/public/img/other/brand/vertical-left.png deleted file mode 100644 index b64a2275bef24acb10bdcb661f74daba2c5d1674..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/brand/vertical-left.png and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/vertical-left.svg b/docs/.vuepress/public/img/other/brand/vertical-left.svg deleted file mode 100644 index f106321adf201ee404d1d1bc41bca0e782badccd..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/other/brand/vertical-left.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - 1@3x - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/other/brand/vertical-right.pdf b/docs/.vuepress/public/img/other/brand/vertical-right.pdf deleted file mode 100644 index 266d3c9d1912757fc72f9e24002c32ca035c6b1a..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/brand/vertical-right.pdf and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/vertical-right.png b/docs/.vuepress/public/img/other/brand/vertical-right.png deleted file mode 100644 index 4098032924aa829f373d826bc66cb1df41bd6957..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/brand/vertical-right.png and /dev/null differ diff --git a/docs/.vuepress/public/img/other/brand/vertical-right.svg b/docs/.vuepress/public/img/other/brand/vertical-right.svg deleted file mode 100644 index db80f7bf67fb882b8b63714a9ef0a6502bedba8b..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/other/brand/vertical-right.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - 6@3x - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/other/search/search-icon.svg b/docs/.vuepress/public/img/other/search/search-icon.svg deleted file mode 100644 index b762ccf871c7bd9057eda589bf4c037c43637503..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/img/other/search/search-icon.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - Style - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/public/img/other/search/search.png b/docs/.vuepress/public/img/other/search/search.png deleted file mode 100644 index ce0f4572102639db08e4a171a2514fb3ae052771..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/img/other/search/search.png and /dev/null differ diff --git a/docs/.vuepress/public/lang.png b/docs/.vuepress/public/lang.png deleted file mode 100644 index 4d968b6ba46e2d3fabf1d0806c5f32ef96e30c4d..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/lang.png and /dev/null differ diff --git a/docs/.vuepress/public/logo-mobile.png b/docs/.vuepress/public/logo-mobile.png deleted file mode 100644 index fff504caecf69767431c3d3ccb0dfa8ab0160d57..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/logo-mobile.png and /dev/null differ diff --git a/docs/.vuepress/public/menu-mobile.png b/docs/.vuepress/public/menu-mobile.png deleted file mode 100644 index aaa0e59a59327cde15d49037b5a01f1bee3c1f3b..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/menu-mobile.png and /dev/null differ diff --git a/docs/.vuepress/public/openeuler.png b/docs/.vuepress/public/openeuler.png deleted file mode 100644 index db468c0f8d33c64cbc58b4c3d6266447ff6ff192..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/openeuler.png and /dev/null differ diff --git a/docs/.vuepress/public/qrcode.png b/docs/.vuepress/public/qrcode.png deleted file mode 100644 index ea524b978506fb77676aee485d468f2af3abd51a..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/qrcode.png and /dev/null differ diff --git a/docs/.vuepress/public/search.png b/docs/.vuepress/public/search.png deleted file mode 100644 index 11ee04ea7e4fa8872035b5b1451e3f8e06954f9b..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/search.png and /dev/null differ diff --git a/docs/.vuepress/public/style/base.css b/docs/.vuepress/public/style/base.css deleted file mode 100644 index bdd6103c52ba9a7c52012bc6834d385135248272..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/style/base.css +++ /dev/null @@ -1,264 +0,0 @@ -/* CSS Document */ -/*css reset*/ -html { - box-sizing: border-box; -} - -*, -*:before, -*:after { - box-sizing: inherit; -} - -body, -div, -dl, -dt, -dd, -ul, -ol, -li, -h1, -h2, -h3, -h4, -h5, -h6, -pre, -form, -fieldset, -input, -textarea, -p, -blockquote, -th, -td { - margin: 0; - padding: 0; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -fieldest, -img { - border: 0; -} - -address, -caption, -cite, -code, -dfn, -em, -strong, -th, -var { - font-style: normal; - font-weight: normal; -} - -ol, -ul { - list-style: none; -} - -caption, -th { - text-align: left; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: 100%; - font-weight: normal; -} - -p:before, -q:after { - content: ""; -} - -abbr, -acronym { - border: 0; -} - -/*定位*/ -.tl { - text-align: left; -} - -.tc { - text-align: center; -} - -.tr { - text-align: right; -} - -.bc { - margin-left: auto; - margin-right: auto; -} - -.fl { - float: left; -} - -.fr { - float: right; -} - -.cb { - clear: both; -} - -.cl { - clear: left; -} - -.cr { - clear: right; -} - -.clearfix:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; -} - -.clearfix { - display: inline-block; -} - -.fade-in { - opacity: 0; - transition: 0.8s all ease-out; - transform: scale(0.8); -} -.font-hjw { - font-family: FZLTHJW; -} -.font-chjw { - font-family: FZLTCHJW; -} -.font-hbjw { - font-family: FZLTHBJW; -} -.font-xihjw { - font-family: FZLTXIHJW; -} -.font-zhjw { - font-family: FZLTZHJW; -} -.font-hwbold { - font-family: HuaweiSans-Bold; -} -.font-hwlight { - font-family: HuaweiSans-Light; -} -.font-hwmedium { - font-family: HuaweiSans-Medium; -} -.font-hw { - font-family: HuaweiSans; -} -.font-hwthin { - font-family: HuaweiSans-Thin; -} -.font-rblack { - font-family: Roboto-Black; -} -.font-rblackItalic { - font-family: Roboto-BlackItalic; -} -.font-rbold { - font-family: Roboto-Bold; -} -.font-rboldCondensed { - font-family: Roboto-BoldCondensed; -} -.font-rboldCondensedItalic { - font-family: Roboto-BoldCondensedItalic; -} -.font-rboldItalic { - font-family: Roboto-BoldItalic; -} -.font-rcondensed { - font-family: Roboto-Condensed; -} -.font-rcondensedItalic { - font-family: Roboto-CondensedItalic; -} -.font-ritalic { - font-family: Roboto-Italic; -} -.font-rlight { - font-family: Roboto-Light; -} -.font-rlightItalic { - font-family: Roboto-LightItalic; -} -.font-rmedium { - font-family: Roboto-Medium; -} -.font-rmediumItalic { - font-family: Roboto-MediumItalic; -} -.font-rregular { - font-family: Roboto-Regular; -} -.font-rthin { - font-family: Roboto-Thin; -} -.font-rthinItalic { - font-family: Roboto-ThinItalic; -} - -@font-face { - font-family: 'icomoon'; - src: url('../fonts/icomoon.eot?4mtq8t'); - src: url('../fonts/icomoon.eot?4mtq8t#iefix') format('embedded-opentype'), - url('../fonts/icomoon.ttf?4mtq8t') format('truetype'), - url('../fonts/icomoon.woff?4mtq8t') format('woff'), - url('../fonts/icomoon.svg?4mtq8t#icomoon') format('svg'); - font-weight: normal; - font-style: normal; - font-display: block; - } - - [class^="icon-"], [class*=" icon-"] { - /* use !important to prevent issues with browser extensions that change fonts */ - font-family: 'icomoon' !important; - speak: never; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - } - - .icon-menu:before { - content: "\e900"; - } - - .icon-arrow:before { - content: "\e901"; - } - - .icon-search:before { - content: "\e902"; - } \ No newline at end of file diff --git a/docs/.vuepress/public/style/font-cn.css b/docs/.vuepress/public/style/font-cn.css deleted file mode 100644 index 8537bf5d9561360d990a5cd9198fdc2a051e705f..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/style/font-cn.css +++ /dev/null @@ -1,25 +0,0 @@ -@font-face { - font-family: "FZLTHJW"; - src: url(../fonts/FZLTHJW.TTF); -} -@font-face { - font-family: "FZLTCHJW"; - src: url(../fonts/FZLTCHJW.TTF); -} - -@font-face { - font-family: "FZLTHBJW"; - src: url(../fonts/FZLTHBJW.TTF); -} -@font-face { - font-family: "FZLTXHJW"; - src: url(../fonts/FZLTXHJW.TTF); -} -@font-face { - font-family: "FZLTXIHJW"; - src: url(../fonts/FZLTXIHJW.TTF); -} -@font-face { - font-family: "FZLTZHJW"; - src: url(../fonts/FZLTZHJW.TTF); -} \ No newline at end of file diff --git a/docs/.vuepress/public/style/font-en.css b/docs/.vuepress/public/style/font-en.css deleted file mode 100644 index 2951a6a9657b0aed6a7ea8b4f67b21c8a3aff358..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/style/font-en.css +++ /dev/null @@ -1,85 +0,0 @@ -@font-face { - font-family: "HuaweiSans-Bold"; - src: url(../fonts/HuaweiSans-Bold.ttf); -} -@font-face { - font-family: "HuaweiSans-Light"; - src: url(../fonts/HuaweiSans-Light.ttf); -} -@font-face { - font-family: "HuaweiSans-Medium"; - src: url(../fonts/HuaweiSans-Medium.ttf); -} -@font-face { - font-family: "HuaweiSans"; - src: url(../fonts/HuaweiSans-Regular.ttf); -} -@font-face { - font-family: "HuaweiSans-Thin"; - src: url(../fonts/HuaweiSans-Thin.ttf); -} - -@font-face { - font-family: "Roboto-Black"; - src: url(../fonts/Roboto-Black.ttf); -} -@font-face { - font-family: "Roboto-BlackItalic"; - src: url(../fonts/Roboto-BlackItalic.ttf); -} -@font-face { - font-family: "Roboto-Bold"; - src: url(../fonts/Roboto-Bold.ttf); -} -@font-face { - font-family: "Roboto-BoldCondensed"; - src: url(../fonts/Roboto-BoldCondensed.ttf); -} -@font-face { - font-family: "Roboto-BoldCondensedItalic"; - src: url(../fonts/Roboto-BoldCondensedItalic.ttf); -} -@font-face { - font-family: "Roboto-BoldItalic"; - src: url(../fonts/Roboto-BoldItalic.ttf); -} -@font-face { - font-family: "Roboto-Condensed"; - src: url(../fonts/Roboto-Condensed.ttf); -} -@font-face { - font-family: "Roboto-CondensedItalic"; - src: url(../fonts/Roboto-CondensedItalic.ttf); -} -@font-face { - font-family: "Roboto-Italic"; - src: url(../fonts/Roboto-Italic.ttf); -} -@font-face { - font-family: "Roboto-Light"; - src: url(../fonts/Roboto-Light.ttf); -} -@font-face { - font-family: "Roboto-LightItalic"; - src: url(../fonts/Roboto-LightItalic.ttf); -} -@font-face { - font-family: "Roboto-Medium"; - src: url(../fonts/Roboto-Medium.ttf); -} -@font-face { - font-family: "Roboto-MediumItalic"; - src: url(../fonts/Roboto-MediumItalic.ttf); -} -@font-face { - font-family: "Roboto-Regular"; - src: url(../fonts/Roboto-Regular.ttf); -} -@font-face { - font-family: "Roboto-Thin"; - src: url(../fonts/Roboto-Thin.ttf); -} -@font-face { - font-family: "Roboto-ThinItalic"; - src: url(../fonts/Roboto-ThinItalic.ttf); -} \ No newline at end of file diff --git a/docs/.vuepress/public/style/markdown.less b/docs/.vuepress/public/style/markdown.less deleted file mode 100644 index be0b84158b2132a37afdaf061a5d1fe4d7218cf9..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/style/markdown.less +++ /dev/null @@ -1,133 +0,0 @@ -.lang-en { - .markdown { - h2, h3, h4, h5{ - font-family: HuaweiSans-Medium; - } - p, ul li { - font-family: Roboto-Regular; - } - } -} -.markdown { - width: 1120px; - margin: 0 auto; - margin-bottom: 200px; - @media (max-width: 1000px) { - width: 100%; - padding: 0 30px; - margin-bottom: 80px; - margin-top: 40px; - } - div[class*="language-"]{ - background:rgba(225,230,238,0.3); - border:1px solid rgba(151,151,151,1); - border-radius: 0; - pre{ - padding: 1em; - margin: .5em 0; - overflow: auto; - code{ - color:rgba(0,0,0,0.5); - } - } - } - h2 { - line-height: 24px; - font-size: 24px; - margin: 40px 0 20px; - font-family: FZLTHJW; - @media (max-width: 1000px) { - font-size: 18px; - line-height: 18px; - font-family: FZLTCHJW; - margin: 30px 0 20px; - } - } - h3 { - line-height: 20px; - font-size: 20px; - margin: 30px 0 20px; - font-family: FZLTHJW; - @media (max-width: 1000px) { - font-size: 16px; - line-height: 16px; - font-family: FZLTCHJW; - margin: 30px 0 20px; - } - } - h4 { - line-height: 18px; - font-size: 18px; - margin: 30px 0 20px; - font-family: FZLTHJW; - @media (max-width: 1000px) { - font-size: 15px; - line-height: 15px; - font-family: FZLTCHJW; - margin: 30px 0 20px; - } - } - h5 { - line-height: 16px; - font-size: 16px; - margin: 30px 0 20px; - font-family: FZLTHJW; - @media (max-width: 1000px) { - font-size: 14px; - line-height: 14px; - font-family: FZLTCHJW; - margin: 30px 0 20px; - } - } - p, ul li, ol li { - font-size: 14px; - color: rgba(0, 0, 0, .5); - line-height: 24px; - font-family: FZLTXIHJW; - letter-spacing: 0.8px; - @media (max-width: 1000px) { - line-height: 30px; - } - a { - color: #002fa7; - text-decoration: none; - cursor: pointer; - } - b{ - color: rgba(0, 0, 0, 1); - } - } - a[href^='#'] { - display: none; - } - table { - width: 100%; - font-size: 14px; - tr { - height: 60px; - color: rgba(0, 0, 0, .5); - @media (max-width: 1000px) { - height: 52px; - } - th { - color: #000; - } - th, td { - padding-left: 30px; - @media (max-width: 1000px) { - padding-left: 10px; - } - } - } - tr:nth-child(odd) { - th, td { - background-color: #f2f2f2; - } - - } - } - ul, ol { - list-style: initial; - padding-left: 30px; - } -} \ No newline at end of file diff --git a/docs/.vuepress/public/style/theme/fonts/element-icons.ttf b/docs/.vuepress/public/style/theme/fonts/element-icons.ttf deleted file mode 100644 index 91b74de36778b0ff8958d37d07ce70fb3b26f50b..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/style/theme/fonts/element-icons.ttf and /dev/null differ diff --git a/docs/.vuepress/public/style/theme/fonts/element-icons.woff b/docs/.vuepress/public/style/theme/fonts/element-icons.woff deleted file mode 100644 index 02b9a2539e425a7a8c244faba92527602be76212..0000000000000000000000000000000000000000 Binary files a/docs/.vuepress/public/style/theme/fonts/element-icons.woff and /dev/null differ diff --git a/docs/.vuepress/public/style/theme/index.css b/docs/.vuepress/public/style/theme/index.css deleted file mode 100644 index 6b3ad7d47edf6e18086c82d104e440f861e3afa0..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/style/theme/index.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";.el-pagination--small .arrow.disabled,.el-table .hidden-columns,.el-table td.is-hidden>*,.el-table th.is-hidden>*,.el-table--hidden{visibility:hidden}.el-input__suffix,.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing),.el-message__closeBtn:focus,.el-message__content:focus,.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing),.el-rate:active,.el-rate:focus,.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing),.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}@font-face{font-family:element-icons;src:url(fonts/element-icons.woff) format("woff"),url(fonts/element-icons.ttf) format("truetype");font-weight:400;font-display:"auto";font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:"\e6a0"}.el-icon-ice-cream-square:before{content:"\e6a3"}.el-icon-lollipop:before{content:"\e6a4"}.el-icon-potato-strips:before{content:"\e6a5"}.el-icon-milk-tea:before{content:"\e6a6"}.el-icon-ice-drink:before{content:"\e6a7"}.el-icon-ice-tea:before{content:"\e6a9"}.el-icon-coffee:before{content:"\e6aa"}.el-icon-orange:before{content:"\e6ab"}.el-icon-pear:before{content:"\e6ac"}.el-icon-apple:before{content:"\e6ad"}.el-icon-cherry:before{content:"\e6ae"}.el-icon-watermelon:before{content:"\e6af"}.el-icon-grape:before{content:"\e6b0"}.el-icon-refrigerator:before{content:"\e6b1"}.el-icon-goblet-square-full:before{content:"\e6b2"}.el-icon-goblet-square:before{content:"\e6b3"}.el-icon-goblet-full:before{content:"\e6b4"}.el-icon-goblet:before{content:"\e6b5"}.el-icon-cold-drink:before{content:"\e6b6"}.el-icon-coffee-cup:before{content:"\e6b8"}.el-icon-water-cup:before{content:"\e6b9"}.el-icon-hot-water:before{content:"\e6ba"}.el-icon-ice-cream:before{content:"\e6bb"}.el-icon-dessert:before{content:"\e6bc"}.el-icon-sugar:before{content:"\e6bd"}.el-icon-tableware:before{content:"\e6be"}.el-icon-burger:before{content:"\e6bf"}.el-icon-knife-fork:before{content:"\e6c1"}.el-icon-fork-spoon:before{content:"\e6c2"}.el-icon-chicken:before{content:"\e6c3"}.el-icon-food:before{content:"\e6c4"}.el-icon-dish-1:before{content:"\e6c5"}.el-icon-dish:before{content:"\e6c6"}.el-icon-moon-night:before{content:"\e6ee"}.el-icon-moon:before{content:"\e6f0"}.el-icon-cloudy-and-sunny:before{content:"\e6f1"}.el-icon-partly-cloudy:before{content:"\e6f2"}.el-icon-cloudy:before{content:"\e6f3"}.el-icon-sunny:before{content:"\e6f6"}.el-icon-sunset:before{content:"\e6f7"}.el-icon-sunrise-1:before{content:"\e6f8"}.el-icon-sunrise:before{content:"\e6f9"}.el-icon-heavy-rain:before{content:"\e6fa"}.el-icon-lightning:before{content:"\e6fb"}.el-icon-light-rain:before{content:"\e6fc"}.el-icon-wind-power:before{content:"\e6fd"}.el-icon-baseball:before{content:"\e712"}.el-icon-soccer:before{content:"\e713"}.el-icon-football:before{content:"\e715"}.el-icon-basketball:before{content:"\e716"}.el-icon-ship:before{content:"\e73f"}.el-icon-truck:before{content:"\e740"}.el-icon-bicycle:before{content:"\e741"}.el-icon-mobile-phone:before{content:"\e6d3"}.el-icon-service:before{content:"\e6d4"}.el-icon-key:before{content:"\e6e2"}.el-icon-unlock:before{content:"\e6e4"}.el-icon-lock:before{content:"\e6e5"}.el-icon-watch:before{content:"\e6fe"}.el-icon-watch-1:before{content:"\e6ff"}.el-icon-timer:before{content:"\e702"}.el-icon-alarm-clock:before{content:"\e703"}.el-icon-map-location:before{content:"\e704"}.el-icon-delete-location:before{content:"\e705"}.el-icon-add-location:before{content:"\e706"}.el-icon-location-information:before{content:"\e707"}.el-icon-location-outline:before{content:"\e708"}.el-icon-location:before{content:"\e79e"}.el-icon-place:before{content:"\e709"}.el-icon-discover:before{content:"\e70a"}.el-icon-first-aid-kit:before{content:"\e70b"}.el-icon-trophy-1:before{content:"\e70c"}.el-icon-trophy:before{content:"\e70d"}.el-icon-medal:before{content:"\e70e"}.el-icon-medal-1:before{content:"\e70f"}.el-icon-stopwatch:before{content:"\e710"}.el-icon-mic:before{content:"\e711"}.el-icon-copy-document:before{content:"\e718"}.el-icon-full-screen:before{content:"\e719"}.el-icon-switch-button:before{content:"\e71b"}.el-icon-aim:before{content:"\e71c"}.el-icon-crop:before{content:"\e71d"}.el-icon-odometer:before{content:"\e71e"}.el-icon-time:before{content:"\e71f"}.el-icon-bangzhu:before{content:"\e724"}.el-icon-close-notification:before{content:"\e726"}.el-icon-microphone:before{content:"\e727"}.el-icon-turn-off-microphone:before{content:"\e728"}.el-icon-position:before{content:"\e729"}.el-icon-postcard:before{content:"\e72a"}.el-icon-message:before{content:"\e72b"}.el-icon-chat-line-square:before{content:"\e72d"}.el-icon-chat-dot-square:before{content:"\e72e"}.el-icon-chat-dot-round:before{content:"\e72f"}.el-icon-chat-square:before{content:"\e730"}.el-icon-chat-line-round:before{content:"\e731"}.el-icon-chat-round:before{content:"\e732"}.el-icon-set-up:before{content:"\e733"}.el-icon-turn-off:before{content:"\e734"}.el-icon-open:before{content:"\e735"}.el-icon-connection:before{content:"\e736"}.el-icon-link:before{content:"\e737"}.el-icon-cpu:before{content:"\e738"}.el-icon-thumb:before{content:"\e739"}.el-icon-female:before{content:"\e73a"}.el-icon-male:before{content:"\e73b"}.el-icon-guide:before{content:"\e73c"}.el-icon-news:before{content:"\e73e"}.el-icon-price-tag:before{content:"\e744"}.el-icon-discount:before{content:"\e745"}.el-icon-wallet:before{content:"\e747"}.el-icon-coin:before{content:"\e748"}.el-icon-money:before{content:"\e749"}.el-icon-bank-card:before{content:"\e74a"}.el-icon-box:before{content:"\e74b"}.el-icon-present:before{content:"\e74c"}.el-icon-sell:before{content:"\e6d5"}.el-icon-sold-out:before{content:"\e6d6"}.el-icon-shopping-bag-2:before{content:"\e74d"}.el-icon-shopping-bag-1:before{content:"\e74e"}.el-icon-shopping-cart-2:before{content:"\e74f"}.el-icon-shopping-cart-1:before{content:"\e750"}.el-icon-shopping-cart-full:before{content:"\e751"}.el-icon-smoking:before{content:"\e752"}.el-icon-no-smoking:before{content:"\e753"}.el-icon-house:before{content:"\e754"}.el-icon-table-lamp:before{content:"\e755"}.el-icon-school:before{content:"\e756"}.el-icon-office-building:before{content:"\e757"}.el-icon-toilet-paper:before{content:"\e758"}.el-icon-notebook-2:before{content:"\e759"}.el-icon-notebook-1:before{content:"\e75a"}.el-icon-files:before{content:"\e75b"}.el-icon-collection:before{content:"\e75c"}.el-icon-receiving:before{content:"\e75d"}.el-icon-suitcase-1:before{content:"\e760"}.el-icon-suitcase:before{content:"\e761"}.el-icon-film:before{content:"\e763"}.el-icon-collection-tag:before{content:"\e765"}.el-icon-data-analysis:before{content:"\e766"}.el-icon-pie-chart:before{content:"\e767"}.el-icon-data-board:before{content:"\e768"}.el-icon-data-line:before{content:"\e76d"}.el-icon-reading:before{content:"\e769"}.el-icon-magic-stick:before{content:"\e76a"}.el-icon-coordinate:before{content:"\e76b"}.el-icon-mouse:before{content:"\e76c"}.el-icon-brush:before{content:"\e76e"}.el-icon-headset:before{content:"\e76f"}.el-icon-umbrella:before{content:"\e770"}.el-icon-scissors:before{content:"\e771"}.el-icon-mobile:before{content:"\e773"}.el-icon-attract:before{content:"\e774"}.el-icon-monitor:before{content:"\e775"}.el-icon-search:before{content:"\e778"}.el-icon-takeaway-box:before{content:"\e77a"}.el-icon-paperclip:before{content:"\e77d"}.el-icon-printer:before{content:"\e77e"}.el-icon-document-add:before{content:"\e782"}.el-icon-document:before{content:"\e785"}.el-icon-document-checked:before{content:"\e786"}.el-icon-document-copy:before{content:"\e787"}.el-icon-document-delete:before{content:"\e788"}.el-icon-document-remove:before{content:"\e789"}.el-icon-tickets:before{content:"\e78b"}.el-icon-folder-checked:before{content:"\e77f"}.el-icon-folder-delete:before{content:"\e780"}.el-icon-folder-remove:before{content:"\e781"}.el-icon-folder-add:before{content:"\e783"}.el-icon-folder-opened:before{content:"\e784"}.el-icon-folder:before{content:"\e78a"}.el-icon-edit-outline:before{content:"\e764"}.el-icon-edit:before{content:"\e78c"}.el-icon-date:before{content:"\e78e"}.el-icon-c-scale-to-original:before{content:"\e7c6"}.el-icon-view:before{content:"\e6ce"}.el-icon-loading:before{content:"\e6cf"}.el-icon-rank:before{content:"\e6d1"}.el-icon-sort-down:before{content:"\e7c4"}.el-icon-sort-up:before{content:"\e7c5"}.el-icon-sort:before{content:"\e6d2"}.el-icon-finished:before{content:"\e6cd"}.el-icon-refresh-left:before{content:"\e6c7"}.el-icon-refresh-right:before{content:"\e6c8"}.el-icon-refresh:before{content:"\e6d0"}.el-icon-video-play:before{content:"\e7c0"}.el-icon-video-pause:before{content:"\e7c1"}.el-icon-d-arrow-right:before{content:"\e6dc"}.el-icon-d-arrow-left:before{content:"\e6dd"}.el-icon-arrow-up:before{content:"\e6e1"}.el-icon-arrow-down:before{content:"\e6df"}.el-icon-arrow-right:before{content:"\e6e0"}.el-icon-arrow-left:before{content:"\e6de"}.el-icon-top-right:before{content:"\e6e7"}.el-icon-top-left:before{content:"\e6e8"}.el-icon-top:before{content:"\e6e6"}.el-icon-bottom:before{content:"\e6eb"}.el-icon-right:before{content:"\e6e9"}.el-icon-back:before{content:"\e6ea"}.el-icon-bottom-right:before{content:"\e6ec"}.el-icon-bottom-left:before{content:"\e6ed"}.el-icon-caret-top:before{content:"\e78f"}.el-icon-caret-bottom:before{content:"\e790"}.el-icon-caret-right:before{content:"\e791"}.el-icon-caret-left:before{content:"\e792"}.el-icon-d-caret:before{content:"\e79a"}.el-icon-share:before{content:"\e793"}.el-icon-menu:before{content:"\e798"}.el-icon-s-grid:before{content:"\e7a6"}.el-icon-s-check:before{content:"\e7a7"}.el-icon-s-data:before{content:"\e7a8"}.el-icon-s-opportunity:before{content:"\e7aa"}.el-icon-s-custom:before{content:"\e7ab"}.el-icon-s-claim:before{content:"\e7ad"}.el-icon-s-finance:before{content:"\e7ae"}.el-icon-s-comment:before{content:"\e7af"}.el-icon-s-flag:before{content:"\e7b0"}.el-icon-s-marketing:before{content:"\e7b1"}.el-icon-s-shop:before{content:"\e7b4"}.el-icon-s-open:before{content:"\e7b5"}.el-icon-s-management:before{content:"\e7b6"}.el-icon-s-ticket:before{content:"\e7b7"}.el-icon-s-release:before{content:"\e7b8"}.el-icon-s-home:before{content:"\e7b9"}.el-icon-s-promotion:before{content:"\e7ba"}.el-icon-s-operation:before{content:"\e7bb"}.el-icon-s-unfold:before{content:"\e7bc"}.el-icon-s-fold:before{content:"\e7a9"}.el-icon-s-platform:before{content:"\e7bd"}.el-icon-s-order:before{content:"\e7be"}.el-icon-s-cooperation:before{content:"\e7bf"}.el-icon-bell:before{content:"\e725"}.el-icon-message-solid:before{content:"\e799"}.el-icon-video-camera:before{content:"\e772"}.el-icon-video-camera-solid:before{content:"\e796"}.el-icon-camera:before{content:"\e779"}.el-icon-camera-solid:before{content:"\e79b"}.el-icon-download:before{content:"\e77c"}.el-icon-upload2:before{content:"\e77b"}.el-icon-upload:before{content:"\e7c3"}.el-icon-picture-outline-round:before{content:"\e75f"}.el-icon-picture-outline:before{content:"\e75e"}.el-icon-picture:before{content:"\e79f"}.el-icon-close:before{content:"\e6db"}.el-icon-check:before{content:"\e6da"}.el-icon-plus:before{content:"\e6d9"}.el-icon-minus:before{content:"\e6d8"}.el-icon-help:before{content:"\e73d"}.el-icon-s-help:before{content:"\e7b3"}.el-icon-circle-close:before{content:"\e78d"}.el-icon-circle-check:before{content:"\e720"}.el-icon-circle-plus-outline:before{content:"\e723"}.el-icon-remove-outline:before{content:"\e722"}.el-icon-zoom-out:before{content:"\e776"}.el-icon-zoom-in:before{content:"\e777"}.el-icon-error:before{content:"\e79d"}.el-icon-success:before{content:"\e79c"}.el-icon-circle-plus:before{content:"\e7a0"}.el-icon-remove:before{content:"\e7a2"}.el-icon-info:before{content:"\e7a1"}.el-icon-question:before{content:"\e7a4"}.el-icon-warning-outline:before{content:"\e6c9"}.el-icon-warning:before{content:"\e7a3"}.el-icon-goods:before{content:"\e7c2"}.el-icon-s-goods:before{content:"\e7b2"}.el-icon-star-off:before{content:"\e717"}.el-icon-star-on:before{content:"\e797"}.el-icon-more-outline:before{content:"\e6cc"}.el-icon-more:before{content:"\e794"}.el-icon-phone-outline:before{content:"\e6cb"}.el-icon-phone:before{content:"\e795"}.el-icon-user:before{content:"\e6e3"}.el-icon-user-solid:before{content:"\e7a5"}.el-icon-setting:before{content:"\e6ca"}.el-icon-s-tools:before{content:"\e7ac"}.el-icon-delete:before{content:"\e6d7"}.el-icon-delete-solid:before{content:"\e7c9"}.el-icon-eleme:before{content:"\e7c7"}.el-icon-platform-eleme:before{content:"\e7ca"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination::after,.el-pagination::before{display:table;content:""}.el-pagination::after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#002FA7}.el-pagination button:disabled{color:#3F3F3F;background-color:#FFF;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:center center no-repeat #FFF;background-size:16px;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#3F3F3F;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .more::before,.el-pagination--small li.more::before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#002FA7}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#3F3F3F}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#002FA7}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#002FA7;color:#FFF}.el-dialog,.el-pager li{background:#FFF;-webkit-box-sizing:border-box}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0}.el-date-table,.el-table th{-webkit-user-select:none;-moz-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box;text-align:center}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#3F3F3F}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#002FA7}.el-pager li.active{color:#002FA7;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}.el-dialog{position:relative;margin:0 auto 50px;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#002FA7}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #E4E7ED;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#FFF}.el-dropdown-menu,.el-menu--collapse .el-submenu .el-menu{z-index:10;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#F5F7FA}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#FFF}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button::before{content:'';position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:rgba(255,255,255,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default::before{background:rgba(187,187,187,.5)}.el-dropdown .el-dropdown__caret-button:hover::before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown-menu{position:absolute;top:0;left:0;padding:10px 0;margin:5px 0;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#e6eaf6;color:#3359b9}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #EBEEF5}.el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#FFF}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#FFF}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu::after,.el-menu::before{display:table;content:""}.el-menu::after{clear:both}.el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #002FA7;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#FFF;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #002FA7;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;border:1px solid #E4E7ED;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;position:relative;-webkit-box-sizing:border-box;white-space:nowrap;list-style:none}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#e6eaf6}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#002FA7}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#e6eaf6}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#e6eaf6}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#002FA7}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.el-radio-button__inner,.el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{white-space:nowrap;background:#FFF;border:1px solid #BBB;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#002FA7}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #BBB;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#FFF;background-color:#002FA7;border-color:#002FA7;-webkit-box-shadow:-1px 0 0 0 #002FA7;box-shadow:-1px 0 0 0 #002FA7}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#3F3F3F;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#F2F6FC}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-popover,.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:5px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:5px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #002FA7;box-shadow:0 0 2px 2px #002FA7}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#002FA7}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #BBB;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#BBB;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#FFF}.el-switch.is-checked .el-switch__core{border-color:#002FA7;background-color:#002FA7}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #E4E7ED;border-radius:4px;background-color:#FFF;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#002FA7;background-color:#FFF}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#F5F7FA}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\e6da";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#3F3F3F;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#FFF}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#F5F7FA}.el-select-dropdown__item.selected{color:#002FA7;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#E4E7ED}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#3F3F3F}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#002FA7}.el-select .el-input .el-select__caret{color:#3F3F3F;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#3F3F3F;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#E4E7ED}.el-select .el-input.is-focus .el-input__inner{border-color:#002FA7}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#3F3F3F;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select .el-tag__close{margin-top:-2px}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.el-select .el-tag__close.el-icon-close{background-color:#3F3F3F;right:-7px;top:0;color:#FFF}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#FFF}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.el-table--mini,.el-table--small,.el-table__expand-icon{font-size:12px}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit td.gutter,.el-table--fit th.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th{background:#F5F7FA}.el-table th,.el-table tr{background-color:#FFF}.el-table td,.el-table th{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-right,.el-table th.is-right{text-align:right}.el-table td.gutter,.el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table--medium td,.el-table--medium th{padding:10px 0}.el-table--small td,.el-table--small th{padding:8px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table--border td:first-child .cell,.el-table--border th:first-child .cell{padding-left:10px}.el-table tr input[type=checkbox]{margin:0}.el-table td,.el-table th.is-leaf{border-bottom:1px solid #EBEEF5}.el-table th.is-sortable{cursor:pointer}.el-table th{overflow:hidden;-ms-user-select:none;user-select:none}.el-table th>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th>.cell.highlight{color:#002FA7}.el-table th.required>div::before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #EBEEF5}.el-table--border::after,.el-table--group::after,.el-table::before{content:'';position:absolute;background-color:#EBEEF5;z-index:1}.el-table--border::after,.el-table--group::after{top:0;right:0;width:1px;height:100%}.el-table::before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border td,.el-table--border th,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #EBEEF5}.el-table--border th.gutter:last-of-type{border-bottom:1px solid #EBEEF5;border-bottom-width:1px}.el-table--border th,.el-table__fixed-right-patch{border-bottom:1px solid #EBEEF5}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right::before,.el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#EBEEF5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#FFF}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #EBEEF5;background-color:#F5F7FA;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td{border-top:1px solid #EBEEF5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td,.el-table__header-wrapper tbody td{background-color:#F5F7FA;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-picker-panel,.el-table-filter{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #EBEEF5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#3F3F3F;top:5px}.el-table .sort-caret.descending{border-top-color:#3F3F3F;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#002FA7}.el-table .descending .sort-caret.descending{border-top-color:#002FA7}.el-table .hidden-columns{position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#FAFAFA}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#e6eaf6}.el-table__body tr.hover-row.current-row>td,.el-table__body tr.hover-row.el-table__row--striped.current-row>td,.el-table__body tr.hover-row.el-table__row--striped>td,.el-table__body tr.hover-row>td{background-color:#F5F7FA}.el-table__body tr.current-row>td{background-color:#e6eaf6}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #EBEEF5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#F5F7FA}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #EBEEF5;border-radius:2px;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-date-table td,.el-date-table td div{height:30px;-webkit-box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#e6eaf6;color:#3359b9}.el-table-filter__list-item.is-active{background-color:#002FA7;color:#FFF}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #EBEEF5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table td.in-range div,.el-date-table td.in-range div:hover,.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#F2F6FC}.el-table-filter__bottom button:hover{color:#002FA7}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#3F3F3F;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td div{padding:3px 0;box-sizing:border-box}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#3F3F3F}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#002FA7;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#FFF}.el-date-table td.available:hover{color:#002FA7}.el-date-table td.current:not(.disabled) span{color:#FFF;background-color:#002FA7}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#FFF}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#002FA7}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#F5F7FA;opacity:1;cursor:not-allowed;color:#3F3F3F}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#F2F6FC;border-radius:15px}.el-date-table td.selected div:hover{background-color:#F2F6FC}.el-date-table td.selected span{background-color:#002FA7;color:#FFF;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-month-table,.el-year-table{font-size:12px;border-collapse:collapse}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:solid 1px #EBEEF5}.el-month-table{margin:-1px}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#002FA7;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#FFF}.el-month-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#3F3F3F}.el-month-table td.disabled .cell:hover{color:#3F3F3F}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#002FA7}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#F2F6FC}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#FFF}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#FFF;background-color:#002FA7}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#002FA7}.el-year-table{margin:-1px}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#002FA7;font-weight:700}.el-year-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#3F3F3F}.el-year-table td.disabled .cell:hover{color:#3F3F3F}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#002FA7}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#FFF}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #EBEEF5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#002FA7}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#002FA7;font-weight:700}.time-select-item.disabled{color:#E4E7ED;cursor:not-allowed}.time-select-item:hover{background-color:#F5F7FA;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#3F3F3F;float:left;line-height:32px}.el-date-editor .el-range-input,.el-date-editor .el-range-separator{height:100%;margin:0;text-align:center;display:inline-block;font-size:14px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;padding:0;width:39%;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#3F3F3F}.el-date-editor .el-range-input::-ms-input-placeholder{color:#3F3F3F}.el-date-editor .el-range-input::placeholder{color:#3F3F3F}.el-date-editor .el-range-separator{padding:0 5px;line-height:32px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#3F3F3F;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#002FA7}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#F5F7FA;border-color:#E4E7ED;color:#3F3F3F;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#E4E7ED}.el-range-editor.is-disabled input{background-color:#F5F7FA;color:#3F3F3F;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#3F3F3F}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#3F3F3F}.el-range-editor.is-disabled input::placeholder{color:#3F3F3F}.el-range-editor.is-disabled .el-range-separator{color:#3F3F3F}.el-picker-panel{color:#606266;border:1px solid #E4E7ED;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#FFF;border-radius:4px;line-height:30px;margin:5px 0}.el-popover,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#FFF;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#002FA7}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#002FA7}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#002FA7}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#FFF;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#FFF;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#002FA7}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#F5F7FA;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#3F3F3F;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #E4E7ED;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-slider__button,.el-slider__button-wrapper{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.el-time-panel__content::before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #E4E7ED;border-bottom:1px solid #E4E7ED}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#002FA7}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #E4E7ED}.el-popover{position:absolute;background:#FFF;min-width:150px;border:1px solid #EBEEF5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#FFF;border-radius:4px;border:1px solid #EBEEF5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#F56C6C}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#002FA7}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status::before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67C23A}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#E6A23C}.el-message-box__status.el-icon-error{color:#F56C6C}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#F56C6C;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:""}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#3F3F3F}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#002FA7;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;content:""}.el-form-item::after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:16px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:""}.el-form-item__content::after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#F56C6C;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#F56C6C;margin-right:4px}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#F56C6C}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#002FA7;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-collapse-item__arrow,.el-tabs__nav{-webkit-transition:-webkit-transform .3s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.el-tabs__new-tab:hover{color:#002FA7}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#E4E7ED;z-index:1}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after,.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #002FA7 inset;box-shadow:0 0 2px 2px #002FA7 inset;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#3F3F3F;color:#FFF}.el-tabs__item.is-active{color:#002FA7}.el-tabs__item:hover{color:#002FA7;cursor:pointer}.el-tabs__item.is-disabled{color:#3F3F3F;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #E4E7ED}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #E4E7ED;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close,.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #E4E7ED;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#FFF}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--border-card{background:#FFF;border:1px solid #BBB;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#F5F7FA;border-bottom:1px solid #E4E7ED;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#002FA7;background-color:#FFF;border-right-color:#BBB;border-left-color:#BBB}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#002FA7}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#3F3F3F}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #BBB}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left::after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left::after,.el-tabs--left .el-tabs__nav-wrap.is-right::after,.el-tabs--right .el-tabs__nav-wrap.is-left::after,.el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #E4E7ED;border-bottom:none;border-top:1px solid #E4E7ED;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #E4E7ED;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #E4E7ED;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #E4E7ED;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #E4E7ED}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #E4E7ED;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #E4E7ED;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #E4E7ED;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#FFF;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#002FA7}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#F5F7FA}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#002FA7;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#F5F7FA}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#3F3F3F;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#3F3F3F}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#ebeef8}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#FFF;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#3F3F3F}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#FFF}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67C23A}.el-alert--success.is-light .el-alert__description{color:#67C23A}.el-alert--success.is-dark{background-color:#67C23A;color:#FFF}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#FFF}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#E6A23C}.el-alert--warning.is-light .el-alert__description{color:#E6A23C}.el-alert--warning.is-dark{background-color:#E6A23C;color:#FFF}.el-alert--error.is-light{background-color:#fef0f0;color:#F56C6C}.el-alert--error.is-light .el-alert__description{color:#F56C6C}.el-alert--error.is-dark{background-color:#F56C6C;color:#FFF}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active{opacity:0}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #EBEEF5;position:fixed;background-color:#FFF;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67C23A}.el-notification .el-icon-error{color:#F56C6C}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#E6A23C}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-input-number{position:relative;display:inline-block;width:180px;line-height:30px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:42px;padding-right:42px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:32px;height:auto;text-align:center;background:#F5F7FA;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#002FA7}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#002FA7}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#3F3F3F;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #BBB}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #BBB}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#E4E7ED;color:#E4E7ED}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#E4E7ED;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:15px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #BBB}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #BBB;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-progress-bar__inner::after,.el-row::after,.el-row::before,.el-slider::after,.el-slider::before,.el-slider__button-wrapper::after,.el-upload-cover::after{content:""}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#FFF}.el-tooltip__popper.is-light{background:#FFF;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#FFF}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#FFF}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#FFF}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#FFF}.el-slider::after,.el-slider::before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper::after{vertical-align:middle;display:inline-block}.el-slider::after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#E4E7ED;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#3F3F3F}.el-slider__runway.disabled .el-slider__button{border-color:#3F3F3F}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.el-slider__button-wrapper,.el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#002FA7;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;transform:translateX(-50%);background-color:transparent;text-align:center;user-select:none;line-height:normal}.el-slider__button-wrapper::after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #002FA7;background-color:#FFF;border-radius:50%;-webkit-transition:.2s;transition:.2s;user-select:none}.el-image-viewer__btn,.el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{height:6px;width:6px;border-radius:100%;background-color:#FFF;transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #BBB;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#3F3F3F}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#002FA7}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-col-pull-0,.el-col-pull-1,.el-col-pull-10,.el-col-pull-11,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-2,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-push-0,.el-col-push-1,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-2,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-row{position:relative}.el-loading-spinner .el-loading-text{color:#002FA7;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#002FA7;stroke-linecap:round}.el-loading-spinner i{color:#002FA7}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-col-0,.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-upload--picture-card,.el-upload-dragger{-webkit-box-sizing:border-box;cursor:pointer}.el-col-0{width:0%}.el-col-offset-0{margin-left:0}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#002FA7;color:#002FA7}.el-upload:focus .el-upload-dragger{border-color:#002FA7}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;box-sizing:border-box;width:360px;height:180px;text-align:center;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#3F3F3F;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #BBB;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#002FA7;font-style:normal}.el-upload-dragger:hover{border-color:#002FA7}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #002FA7}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67C23A}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#002FA7}.el-upload-list__item:hover{background-color:#F5F7FA}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#002FA7;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#002FA7}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#FFF}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover::after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#FFF;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#FFF;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#FFF;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__inner::after,.el-progress-bar__innerText,.el-spinner{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67C23A}.el-progress.is-success .el-progress__text{color:#67C23A}.el-progress.is-warning .el-progress-bar__inner{background-color:#E6A23C}.el-progress.is-warning .el-progress__text{color:#E6A23C}.el-progress.is-exception .el-progress-bar__inner{background-color:#F56C6C}.el-progress.is-exception .el-progress__text{color:#F56C6C}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#EBEEF5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#002FA7;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-card,.el-message{border-radius:4px;overflow:hidden}.el-progress-bar__inner::after{height:100%}.el-progress-bar__innerText{color:#FFF;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-width:1px;border-style:solid;border-color:#EBEEF5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67C23A}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#E6A23C}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#F56C6C}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#3F3F3F;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67C23A}.el-message .el-icon-error{color:#F56C6C}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#E6A23C}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#F56C6C;border-radius:10px;color:#FFF;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #FFF}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#002FA7}.el-badge__content--success{background-color:#67C23A}.el-badge__content--warning{background-color:#E6A23C}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#F56C6C}.el-card{border:1px solid #EBEEF5;background-color:#FFF;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #EBEEF5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#3F3F3F;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-step.is-vertical,.el-steps{display:-webkit-box;display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#F5F7FA}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#3F3F3F;border-color:#3F3F3F}.el-step__head.is-success{color:#67C23A;border-color:#67C23A}.el-step__head.is-error{color:#F56C6C;border-color:#F56C6C}.el-step__head.is-finish{color:#002FA7;border-color:#002FA7}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#FFF;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#3F3F3F}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#3F3F3F}.el-step__title.is-success{color:#67C23A}.el-step__title.is-error{color:#F56C6C}.el-step__title.is-finish{color:#002FA7}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#3F3F3F}.el-step__description.is-success{color:#67C23A}.el-step__description.is-error{color:#F56C6C}.el-step__description.is-finish{color:#002FA7}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow::after,.el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#3F3F3F}.el-step.is-simple .el-step__arrow::before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow::after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#FFF;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#3F3F3F;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#FFF;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.el-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#FFF;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-fade-in-enter,.el-fade-in-leave-active,.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active,.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #EBEEF5;border-bottom:1px solid #EBEEF5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#FFF;color:#303133;cursor:pointer;border-bottom:1px solid #EBEEF5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#002FA7}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#FFF;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #EBEEF5}.el-cascader__tags,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#EBEEF5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#FFF;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#EBEEF5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#FFF}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#EBEEF5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#FFF;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#EBEEF5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#FFF}.el-tag{background-color:#e6eaf6;border-color:#ccd5ed;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#002FA7;border-width:1px;border-style:solid;border-radius:4px;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#002FA7}.el-tag .el-tag__close{color:#002fa7}.el-tag .el-tag__close:hover{color:#FFF;background-color:#002fa7}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67C23A}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#002fa7;border-color:#002fa7;color:#fff}.el-tag--dark.is-hit{border-color:#002FA7}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#FFF;background-color:#3359b9}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67C23A}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#99acdc;color:#002fa7}.el-tag--plain.is-hit{border-color:#002FA7}.el-tag--plain .el-tag__close{color:#002fa7}.el-tag--plain .el-tag__close:hover{color:#FFF;background-color:#002fa7}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67C23A}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:32px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#3F3F3F}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#002FA7}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#3F3F3F}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#FFF;border:1px solid #E4E7ED;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#3F3F3F;color:#FFF}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#F5F7FA}.el-cascader__suggestion-item.is-checked{color:#002FA7;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#3F3F3F}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#3F3F3F}.el-cascader__search-input::-ms-input-placeholder{color:#3F3F3F}.el-cascader__search-input::placeholder{color:#3F3F3F}.el-color-predefine{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #002FA7;box-shadow:0 0 3px 2px #002FA7}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:-webkit-gradient(linear,left top,right top,from(#fff),to(rgba(255,255,255,0)));background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper::after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#002FA7;border-color:#002FA7}.el-color-dropdown__link-btn{cursor:pointer;color:#002FA7;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#002FA7,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:rgba(255,255,255,.7)}.el-color-picker__trigger{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;position:relative;cursor:pointer}.el-color-picker__color{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty,.el-color-picker__icon{top:50%;left:50%;font-size:12px;position:absolute}.el-color-picker__empty{color:#999;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{display:inline-block;width:100%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);color:#FFF;text-align:center}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#FFF;background-image:none;border:1px solid #BBB;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#3F3F3F}.el-textarea__inner::-ms-input-placeholder{color:#3F3F3F}.el-textarea__inner::placeholder{color:#3F3F3F}.el-textarea__inner:hover{border-color:#3F3F3F}.el-textarea__inner:focus{outline:0;border-color:#002FA7}.el-textarea .el-input__count{color:#909399;background:#FFF;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#3F3F3F;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#3F3F3F}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#3F3F3F}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#3F3F3F}.el-textarea.is-exceed .el-textarea__inner{border-color:#F56C6C}.el-textarea.is-exceed .el-input__count{color:#F56C6C}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#3F3F3F;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#FFF;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#FFF;background-image:none;border-radius:4px;border:1px solid #BBB;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:32px;line-height:32px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#3F3F3F;text-align:center}.el-input__inner::-webkit-input-placeholder{color:#3F3F3F}.el-input__inner::-ms-input-placeholder{color:#3F3F3F}.el-input__inner::placeholder{color:#3F3F3F}.el-input__inner:hover{border-color:#3F3F3F}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#002FA7;outline:0}.el-input__suffix{right:5px;transition:all .3s}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:32px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#3F3F3F;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#3F3F3F}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#3F3F3F}.el-input.is-disabled .el-input__inner::placeholder{color:#3F3F3F}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-link,.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-input.is-exceed .el-input__inner{border-color:#F56C6C}.el-input.is-exceed .el-input__suffix .el-input__count{color:#F56C6C}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#F5F7FA;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #BBB;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#FFF;background-color:#002FA7;font-size:0}.el-transfer-panel__item+.el-transfer-panel__item,.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #BBB;background-color:#F5F7FA;color:#3F3F3F}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer-panel{border:1px solid #EBEEF5;border-radius:4px;overflow:hidden;background:#FFF;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#002FA7}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#F5F7FA;margin:0;padding-left:15px;border-bottom:1px solid #EBEEF5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-divider__text,.el-link{font-weight:500;font-size:14px}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#FFF;margin:0;padding:0;border-top:1px solid #EBEEF5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.el-container{display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical,.el-drawer{-webkit-box-orient:vertical;-webkit-box-direction:normal}.el-aside,.el-header{-webkit-box-sizing:border-box}.el-container.is-vertical{-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-footer,.el-main{-webkit-box-sizing:border-box}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;box-sizing:border-box;padding:20px}.el-footer{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;font-size:14px;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #E4E7ED}.el-timeline-item__icon{color:#FFF;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#E4E7ED;border-radius:50%;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-webkit-box;display:-ms-flexbox}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#002FA7}.el-timeline-item__node--success{background-color:#67C23A}.el-timeline-item__node--warning{background-color:#E6A23C}.el-timeline-item__node--danger{background-color:#F56C6C}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #002FA7}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#002FA7}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#002FA7}.el-link.el-link--default.is-disabled{color:#3F3F3F}.el-link.el-link--primary{color:#002FA7}.el-link.el-link--primary:hover{color:#3359b9}.el-link.el-link--primary.is-disabled{color:#8097d3}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#F56C6C}.el-link.el-link--danger{color:#F56C6C}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67C23A}.el-link.el-link--success{color:#67C23A}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#E6A23C}.el-link.el-link--warning{color:#E6A23C}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-divider{background-color:#BBB;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#FFF;padding:0 20px;color:#303133}.el-image__error,.el-image__placeholder{background:#F5F7FA}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error{display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#3F3F3F;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;user-select:none}.el-button,.el-checkbox{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:40px}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{top:50%;width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.el-image-viewer__prev{-webkit-transform:translateY(-50%);transform:translateY(-50%);left:40px}.el-image-viewer__next{-webkit-transform:translateY(-50%);transform:translateY(-50%);right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#FFF;border:1px solid #BBB;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#002FA7;border-color:#b3c1e5;background-color:#e6eaf6}.el-button:active{color:#002a96;border-color:#002a96;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#FFF;border-color:#002FA7;color:#002FA7}.el-button.is-active,.el-button.is-plain:active{color:#002a96;border-color:#002a96}.el-button.is-plain:active{background:#FFF;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#3F3F3F;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#FFF;border-color:#EBEEF5;color:#3F3F3F}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#FFF;background-color:#002FA7;border-color:#002FA7}.el-button--primary:focus,.el-button--primary:hover{background:#3359b9;border-color:#3359b9;color:#FFF}.el-button--primary.is-active,.el-button--primary:active{background:#002a96;border-color:#002a96;color:#FFF}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#FFF;background-color:#8097d3;border-color:#8097d3}.el-button--primary.is-plain{color:#002FA7;background:#e6eaf6;border-color:#99acdc}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#002FA7;border-color:#002FA7;color:#FFF}.el-button--primary.is-plain:active{background:#002a96;border-color:#002a96;color:#FFF;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#6682ca;background-color:#e6eaf6;border-color:#ccd5ed}.el-button--success{color:#FFF;background-color:#67C23A;border-color:#67C23A}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#FFF}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#FFF}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#FFF;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67C23A;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67C23A;border-color:#67C23A;color:#FFF}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#FFF;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#FFF;background-color:#E6A23C;border-color:#E6A23C}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#FFF}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#FFF}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#FFF;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#E6A23C;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#E6A23C;border-color:#E6A23C;color:#FFF}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#FFF;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#FFF;background-color:#F56C6C;border-color:#F56C6C}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#FFF}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#FFF}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#FFF;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#F56C6C;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#F56C6C;border-color:#F56C6C;color:#FFF}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#FFF;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#FFF;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#FFF}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#FFF}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#FFF;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#FFF}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#FFF;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--text,.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--mini,.el-button--small{font-size:12px;border-radius:3px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small,.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:5px 15px}.el-button--mini.is-circle{padding:5px}.el-button--text{color:#002FA7;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#3359b9;border-color:transparent;background-color:transparent}.el-button--text:active{color:#002a96;background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:""}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #EBEEF5}.el-backtop,.el-page-header{display:-webkit-box;display:-ms-flexbox}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#3F3F3F}.el-backtop,.el-calendar-table td.is-today{color:#002FA7}.el-calendar-table td{border-bottom:1px solid #EBEEF5;border-right:1px solid #EBEEF5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#F2F8FE}.el-calendar-table tr:first-child td{border-top:1px solid #EBEEF5}.el-calendar-table tr td:first-child{border-left:1px solid #EBEEF5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#F2F8FE}.el-backtop{position:fixed;background-color:#FFF;width:40px;height:40px;border-radius:50%;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#F2F6FC}.el-page-header{display:flex;line-height:24px}.el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;margin-right:40px;position:relative}.el-page-header__left::after{content:"";position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#BBB}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-weight:500;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.el-checkbox-button__inner,.el-radio{font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #BBB;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#002FA7}.el-checkbox.is-bordered.is-disabled{border-color:#EBEEF5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#BBB;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#3F3F3F}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#F2F6FC;border-color:#BBB}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#3F3F3F}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#F2F6FC;border-color:#BBB}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#3F3F3F;border-color:#3F3F3F}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#002FA7;border-color:#002FA7}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#3F3F3F;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#002FA7}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#002FA7}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#FFF;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #BBB;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#FFF;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#002FA7}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #FFF;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#FFF;border:1px solid #BBB;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#002FA7}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-radio,.el-radio__input{line-height:1;outline:0;white-space:nowrap}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#FFF;background-color:#002FA7;border-color:#002FA7;-webkit-box-shadow:-1px 0 0 0 #6682ca;box-shadow:-1px 0 0 0 #6682ca}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#002FA7}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#3F3F3F;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#EBEEF5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #BBB;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#002FA7}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:5px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:5px 15px}.el-checkbox-group{font-size:0}.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio{color:#606266;cursor:pointer;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #BBB;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#002FA7}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#EBEEF5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#F5F7FA;border-color:#E4E7ED}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio__input{cursor:pointer;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#F5F7FA}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#3F3F3F}.el-radio__input.is-disabled+span.el-radio__label{color:#3F3F3F;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#002FA7;background:#002FA7}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#002FA7}.el-radio__input.is-focus .el-radio__inner{border-color:#002FA7}.el-radio__inner{border:1px solid #BBB;border-radius:100%;width:14px;height:14px;background-color:#FFF;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#002FA7}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#FFF;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #002FA7;box-shadow:0 0 2px 2px #002FA7}.el-radio__label{font-size:14px;padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:1px solid #E4E7ED;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:solid 1px #E4E7ED}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-avatar,.el-drawer{-webkit-box-sizing:border-box;overflow:hidden}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#3F3F3F}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#002FA7;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#F5F7FA}.el-cascader-node.is-disabled{color:#3F3F3F;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;box-sizing:border-box;text-align:center;color:#fff;background:#C0C4CC;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-drawer,.el-drawer__header{display:-webkit-box;display:-ms-flexbox}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}.el-drawer.btt,.el-drawer.ttb,.el-drawer__container{left:0;right:0;width:100%}.el-drawer.ltr,.el-drawer.rtl,.el-drawer__container{top:0;bottom:0;height:100%}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}.el-drawer{position:absolute;box-sizing:border-box;background-color:#FFF;display:flex;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s;right:0}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s;left:0}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s;top:0}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s;bottom:0}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:20px 20px 0}.el-drawer__header>:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__title{margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer__container{position:relative}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-popconfirm__main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0} \ No newline at end of file diff --git a/docs/.vuepress/public/submenu-arrow.svg b/docs/.vuepress/public/submenu-arrow.svg deleted file mode 100644 index b1e041263a5c55d307ffdcee5626eb1b503ac899..0000000000000000000000000000000000000000 --- a/docs/.vuepress/public/submenu-arrow.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - 编组 - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/.vuepress/sitePlugin.js b/docs/.vuepress/sitePlugin.js deleted file mode 100644 index 525d827c955d3647e1d1f2f6ce002706d3783e3c..0000000000000000000000000000000000000000 --- a/docs/.vuepress/sitePlugin.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = (options = {}, ctx) => { - return { - enhanceAppFiles() { - let pages = [] - ctx.pages.forEach(item => { - pages.push({ - path: item.regularPath, - frontmatter: item.frontmatter - }) - }); - pages = JSON.stringify(pages); - return { - name: 'dynamic-code', - content: `export default ({ Vue }) => { Vue.prototype.$sitePages = ${pages}}` - } - } - } -} \ No newline at end of file diff --git a/docs/.vuepress/theme/components/CustomFooter.vue b/docs/.vuepress/theme/components/CustomFooter.vue deleted file mode 100644 index 992c806292eb52e82d87b228c10d1a2d7547df84..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/components/CustomFooter.vue +++ /dev/null @@ -1,148 +0,0 @@ - - - - - diff --git a/docs/.vuepress/theme/components/CustomHeader.vue b/docs/.vuepress/theme/components/CustomHeader.vue deleted file mode 100644 index 2aea47b1368b9bc94d960575779dca0e0905e245..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/components/CustomHeader.vue +++ /dev/null @@ -1,744 +0,0 @@ - - - - - diff --git a/docs/.vuepress/theme/global-components/Badge.vue b/docs/.vuepress/theme/global-components/Badge.vue deleted file mode 100644 index 53951f9d505dfb5ece39c10c5656db6cfd0915d0..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/global-components/Badge.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - diff --git a/docs/.vuepress/theme/index.js b/docs/.vuepress/theme/index.js deleted file mode 100644 index baaf102ba77679ad628a048ee533986f6e8bc870..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/index.js +++ /dev/null @@ -1,59 +0,0 @@ -const path = require('path') - -// Theme API. -module.exports = (options, ctx) => { - const { themeConfig, siteConfig } = ctx - - // resolve algolia - const isAlgoliaSearch = ( - themeConfig.algolia - || Object - .keys(siteConfig.locales && themeConfig.locales || {}) - .some(base => themeConfig.locales[base].algolia) - ) - - const enableSmoothScroll = themeConfig.smoothScroll === true - - return { - alias () { - return { - '@AlgoliaSearchBox': isAlgoliaSearch - ? path.resolve(__dirname, 'components/AlgoliaSearchBox.vue') - : path.resolve(__dirname, 'noopModule.js') - } - }, - - plugins: [ - ['@vuepress/active-header-links', options.activeHeaderLinks], - '@vuepress/search', - '@vuepress/plugin-nprogress', - ['container', { - type: 'tip', - defaultTitle: { - '/': 'TIP', - '/zh/': '提示' - } - }], - ['container', { - type: 'warning', - defaultTitle: { - '/': 'WARNING', - '/zh/': '注意' - } - }], - ['container', { - type: 'danger', - defaultTitle: { - '/': 'WARNING', - '/zh/': '警告' - } - }], - ['container', { - type: 'details', - before: info => `
${info ? `${info}` : ''}\n`, - after: () => '
\n' - }], - ['smooth-scroll', enableSmoothScroll] - ] - } -} diff --git a/docs/.vuepress/theme/layouts/404.vue b/docs/.vuepress/theme/layouts/404.vue deleted file mode 100644 index 6d4f4a0491ff0c910d9ac8d925763a7d9df96dee..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/layouts/404.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - - - diff --git a/docs/.vuepress/theme/layouts/DocDetails.vue b/docs/.vuepress/theme/layouts/DocDetails.vue deleted file mode 100644 index b0ba40272cd8daebb8cd116db830a8fd73704c6e..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/layouts/DocDetails.vue +++ /dev/null @@ -1,622 +0,0 @@ - - - - - diff --git a/docs/.vuepress/theme/layouts/Layout.vue b/docs/.vuepress/theme/layouts/Layout.vue deleted file mode 100644 index 497b916121d18585e85decf984f373dad35662b6..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/layouts/Layout.vue +++ /dev/null @@ -1,55 +0,0 @@ - - - - diff --git a/docs/.vuepress/theme/noopModule.js b/docs/.vuepress/theme/noopModule.js deleted file mode 100644 index b1c6ea436a540020ff61f01dea449d5b39367b27..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/noopModule.js +++ /dev/null @@ -1 +0,0 @@ -export default {} diff --git a/docs/.vuepress/theme/styles/arrow.styl b/docs/.vuepress/theme/styles/arrow.styl deleted file mode 100644 index 20bffc0dc87339fa3b52d35e5ea17995d5cdb9f8..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/styles/arrow.styl +++ /dev/null @@ -1,22 +0,0 @@ -@require './config' - -.arrow - display inline-block - width 0 - height 0 - &.up - border-left 4px solid transparent - border-right 4px solid transparent - border-bottom 6px solid $arrowBgColor - &.down - border-left 4px solid transparent - border-right 4px solid transparent - border-top 6px solid $arrowBgColor - &.right - border-top 4px solid transparent - border-bottom 4px solid transparent - border-left 6px solid $arrowBgColor - &.left - border-top 4px solid transparent - border-bottom 4px solid transparent - border-right 6px solid $arrowBgColor diff --git a/docs/.vuepress/theme/styles/code.styl b/docs/.vuepress/theme/styles/code.styl deleted file mode 100644 index 9d3aa9a54130c6fef1c3b818d7e6898f4231975b..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/styles/code.styl +++ /dev/null @@ -1,137 +0,0 @@ -{$contentClass} - code - color lighten($textColor, 20%) - padding 0.25rem 0.5rem - margin 0 - font-size 0.85em - background-color rgba(27,31,35,0.05) - border-radius 3px - .token - &.deleted - color #EC5975 - &.inserted - color $accentColor - -{$contentClass} - pre, pre[class*="language-"] - line-height 1.4 - padding 1.25rem 1.5rem - margin 0.85rem 0 - background-color $codeBgColor - border-radius 6px - overflow auto - code - color #fff - padding 0 - background-color transparent - border-radius 0 - -div[class*="language-"] - position relative - background-color $codeBgColor - border-radius 6px - .highlight-lines - user-select none - padding-top 1.3rem - position absolute - top 0 - left 0 - width 100% - line-height 1.4 - .highlighted - background-color rgba(0, 0, 0, 66%) - pre, pre[class*="language-"] - background transparent - position relative - z-index 1 - &::before - position absolute - z-index 3 - top 0.8em - right 1em - font-size 0.75rem - color rgba(255, 255, 255, 0.4) - &:not(.line-numbers-mode) - .line-numbers-wrapper - display none - &.line-numbers-mode - .highlight-lines .highlighted - position relative - &:before - content ' ' - position absolute - z-index 3 - left 0 - top 0 - display block - width $lineNumbersWrapperWidth - height 100% - background-color rgba(0, 0, 0, 66%) - pre - padding-left $lineNumbersWrapperWidth + 1 rem - vertical-align middle - .line-numbers-wrapper - position absolute - top 0 - width $lineNumbersWrapperWidth - text-align center - color rgba(255, 255, 255, 0.3) - padding 1.25rem 0 - line-height 1.4 - br - user-select none - .line-number - position relative - z-index 4 - user-select none - font-size 0.85em - &::after - content '' - position absolute - z-index 2 - top 0 - left 0 - width $lineNumbersWrapperWidth - height 100% - border-radius 6px 0 0 6px - border-right 1px solid rgba(0, 0, 0, 66%) - background-color $codeBgColor - - -for lang in $codeLang - div{'[class~="language-' + lang + '"]'} - &:before - content ('' + lang) - -div[class~="language-javascript"] - &:before - content "js" - -div[class~="language-typescript"] - &:before - content "ts" - -div[class~="language-markup"] - &:before - content "html" - -div[class~="language-markdown"] - &:before - content "md" - -div[class~="language-json"]:before - content "json" - -div[class~="language-ruby"]:before - content "rb" - -div[class~="language-python"]:before - content "py" - -div[class~="language-bash"]:before - content "sh" - -div[class~="language-php"]:before - content "php" - -@import '~prismjs/themes/prism-tomorrow.css' diff --git a/docs/.vuepress/theme/styles/config.styl b/docs/.vuepress/theme/styles/config.styl deleted file mode 100644 index 9e403210fd385f823fbf9796fd51b4fc4f1843aa..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/styles/config.styl +++ /dev/null @@ -1 +0,0 @@ -$contentClass = '.theme-default-content' diff --git a/docs/.vuepress/theme/styles/custom-blocks.styl b/docs/.vuepress/theme/styles/custom-blocks.styl deleted file mode 100644 index 5b868166a434c112c09b5b2d525521f6de2c8d81..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/styles/custom-blocks.styl +++ /dev/null @@ -1,44 +0,0 @@ -.custom-block - .custom-block-title - font-weight 600 - margin-bottom -0.4rem - &.tip, &.warning, &.danger - padding .1rem 1.5rem - border-left-width .5rem - border-left-style solid - margin 1rem 0 - &.tip - background-color #f3f5f7 - border-color #42b983 - &.warning - background-color rgba(255,229,100,.3) - border-color darken(#ffe564, 35%) - color darken(#ffe564, 70%) - .custom-block-title - color darken(#ffe564, 50%) - a - color $textColor - &.danger - background-color #ffe6e6 - border-color darken(red, 20%) - color darken(red, 70%) - .custom-block-title - color darken(red, 40%) - a - color $textColor - &.details - display block - position relative - border-radius 2px - margin 1.6em 0 - padding 1.6em - background-color #eee - h4 - margin-top 0 - figure, p - &:last-child - margin-bottom 0 - padding-bottom 0 - summary - outline none - cursor pointer diff --git a/docs/.vuepress/theme/styles/index.styl b/docs/.vuepress/theme/styles/index.styl deleted file mode 100644 index 976bfb04479e199d178ebce67f08060e62e75ba3..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/styles/index.styl +++ /dev/null @@ -1,201 +0,0 @@ -@require './config' -@require './code' -@require './custom-blocks' -@require './arrow' -@require './wrapper' -@require './toc' - -html, body - padding 0 - margin 0 - background-color #fff - -body - font-family -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif - -webkit-font-smoothing antialiased - -moz-osx-font-smoothing grayscale - font-size 16px - color $textColor - -.page - padding-left $sidebarWidth - -.navbar - position fixed - z-index 20 - top 0 - left 0 - right 0 - height $navbarHeight - background-color #fff - box-sizing border-box - border-bottom 1px solid $borderColor - -.sidebar-mask - position fixed - z-index 9 - top 0 - left 0 - width 100vw - height 100vh - display none - -.sidebar - font-size 16px - background-color #fff - width $sidebarWidth - position fixed - z-index 10 - margin 0 - top $navbarHeight - left 0 - bottom 0 - box-sizing border-box - border-right 1px solid $borderColor - overflow-y auto - -{$contentClass}:not(.custom) - @extend $wrapper - > *:first-child - margin-top $navbarHeight - - a:hover - text-decoration underline - - p.demo - padding 1rem 1.5rem - border 1px solid #ddd - border-radius 4px - - img - max-width 100% - -{$contentClass}.custom - padding 0 - margin 0 - - img - max-width 100% - -a - font-weight 500 - color $accentColor - text-decoration none - -p a code - font-weight 400 - color $accentColor - -kbd - background #eee - border solid 0.15rem #ddd - border-bottom solid 0.25rem #ddd - border-radius 0.15rem - padding 0 0.15em - -blockquote - font-size 1rem - color #999; - border-left .2rem solid #dfe2e5 - margin 1rem 0 - padding .25rem 0 .25rem 1rem - - & > p - margin 0 - -ul, ol - padding-left 1.2em - -strong - font-weight 600 - -h1, h2, h3, h4, h5, h6 - font-weight 600 - line-height 1.25 - - {$contentClass}:not(.custom) > & - margin-top (0.5rem - $navbarHeight) - padding-top ($navbarHeight + 1rem) - margin-bottom 0 - - &:first-child - margin-top -1.5rem - margin-bottom 1rem - - + p, + pre, + .custom-block - margin-top 2rem - - &:hover .header-anchor - opacity: 1 - -h1 - font-size 2.2rem - -h2 - font-size 1.65rem - padding-bottom .3rem - border-bottom 1px solid $borderColor - -h3 - font-size 1.35rem - -a.header-anchor - font-size 0.85em - float left - margin-left -0.87em - padding-right 0.23em - margin-top 0.125em - opacity 0 - - &:hover - text-decoration none - -code, kbd, .line-number - font-family source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace - -p, ul, ol - line-height 1.7 - -hr - border 0 - border-top 1px solid $borderColor - -table - border-collapse collapse - margin 1rem 0 - display: block - overflow-x: auto - -tr - border-top 1px solid #dfe2e5 - - &:nth-child(2n) - background-color #f6f8fa - -th, td - border 1px solid #dfe2e5 - padding .6em 1em - -.theme-container - &.sidebar-open - .sidebar-mask - display: block - - &.no-navbar - {$contentClass}:not(.custom) > h1, h2, h3, h4, h5, h6 - margin-top 1.5rem - padding-top 0 - - .sidebar - top 0 - - -@media (min-width: ($MQMobile + 1px)) - .theme-container.no-sidebar - .sidebar - display none - - .page - padding-left 0 - -@require 'mobile.styl' diff --git a/docs/.vuepress/theme/styles/mobile.styl b/docs/.vuepress/theme/styles/mobile.styl deleted file mode 100644 index f5bd32739d774a8d69a60ae282630eaf2ac2b72f..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/styles/mobile.styl +++ /dev/null @@ -1,37 +0,0 @@ -@require './config' - -$mobileSidebarWidth = $sidebarWidth * 0.82 - -// narrow desktop / iPad -@media (max-width: $MQNarrow) - .sidebar - font-size 15px - width $mobileSidebarWidth - .page - padding-left $mobileSidebarWidth - -// wide mobile -@media (max-width: $MQMobile) - .sidebar - top 0 - padding-top $navbarHeight - transform translateX(-100%) - transition transform .2s ease - .page - padding-left 0 - .theme-container - &.sidebar-open - .sidebar - transform translateX(0) - &.no-navbar - .sidebar - padding-top: 0 - -// narrow mobile -@media (max-width: $MQMobileNarrow) - h1 - font-size 1.9rem - {$contentClass} - div[class*="language-"] - margin 0.85rem -1.5rem - border-radius 0 diff --git a/docs/.vuepress/theme/styles/toc.styl b/docs/.vuepress/theme/styles/toc.styl deleted file mode 100644 index d3e71069ba79f12ab46681be457be98e88156184..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/styles/toc.styl +++ /dev/null @@ -1,3 +0,0 @@ -.table-of-contents - .badge - vertical-align middle diff --git a/docs/.vuepress/theme/styles/wrapper.styl b/docs/.vuepress/theme/styles/wrapper.styl deleted file mode 100644 index a99262c71ab374f473eeccd01c1cd970c3ccf89c..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/styles/wrapper.styl +++ /dev/null @@ -1,9 +0,0 @@ -$wrapper - max-width $contentWidth - margin 0 auto - padding 2rem 2.5rem - @media (max-width: $MQNarrow) - padding 2rem - @media (max-width: $MQMobileNarrow) - padding 1.5rem - diff --git a/docs/.vuepress/theme/util/index.js b/docs/.vuepress/theme/util/index.js deleted file mode 100644 index 4433bb3c5fad61ec8a51d1cbe6ba485e92847802..0000000000000000000000000000000000000000 --- a/docs/.vuepress/theme/util/index.js +++ /dev/null @@ -1,243 +0,0 @@ -export const hashRE = /#.*$/ -export const extRE = /\.(md|html)$/ -export const endingSlashRE = /\/$/ -export const outboundRE = /^[a-z]+:/i - -export function normalize (path) { - return decodeURI(path) - .replace(hashRE, '') - .replace(extRE, '') -} - -export function getHash (path) { - const match = path.match(hashRE) - if (match) { - return match[0] - } -} - -export function isExternal (path) { - return outboundRE.test(path) -} - -export function isMailto (path) { - return /^mailto:/.test(path) -} - -export function isTel (path) { - return /^tel:/.test(path) -} - -export function ensureExt (path) { - if (isExternal(path)) { - return path - } - const hashMatch = path.match(hashRE) - const hash = hashMatch ? hashMatch[0] : '' - const normalized = normalize(path) - - if (endingSlashRE.test(normalized)) { - return path - } - return normalized + '.html' + hash -} - -export function isActive (route, path) { - const routeHash = decodeURIComponent(route.hash) - const linkHash = getHash(path) - if (linkHash && routeHash !== linkHash) { - return false - } - const routePath = normalize(route.path) - const pagePath = normalize(path) - return routePath === pagePath -} - -export function resolvePage (pages, rawPath, base) { - if (isExternal(rawPath)) { - return { - type: 'external', - path: rawPath - } - } - if (base) { - rawPath = resolvePath(rawPath, base) - } - const path = normalize(rawPath) - for (let i = 0; i < pages.length; i++) { - if (normalize(pages[i].regularPath) === path) { - return Object.assign({}, pages[i], { - type: 'page', - path: ensureExt(pages[i].path) - }) - } - } - console.error(`[vuepress] No matching page found for sidebar item "${rawPath}"`) - return {} -} - -function resolvePath (relative, base, append) { - const firstChar = relative.charAt(0) - if (firstChar === '/') { - return relative - } - - if (firstChar === '?' || firstChar === '#') { - return base + relative - } - - const stack = base.split('/') - - // remove trailing segment if: - // - not appending - // - appending to trailing slash (last segment is empty) - if (!append || !stack[stack.length - 1]) { - stack.pop() - } - - // resolve relative path - const segments = relative.replace(/^\//, '').split('/') - for (let i = 0; i < segments.length; i++) { - const segment = segments[i] - if (segment === '..') { - stack.pop() - } else if (segment !== '.') { - stack.push(segment) - } - } - - // ensure leading slash - if (stack[0] !== '') { - stack.unshift('') - } - - return stack.join('/') -} - -/** - * @param { Page } page - * @param { string } regularPath - * @param { SiteData } site - * @param { string } localePath - * @returns { SidebarGroup } - */ -export function resolveSidebarItems (page, regularPath, site, localePath) { - const { pages, themeConfig } = site - - const localeConfig = localePath && themeConfig.locales - ? themeConfig.locales[localePath] || themeConfig - : themeConfig - - const pageSidebarConfig = page.frontmatter.sidebar || localeConfig.sidebar || themeConfig.sidebar - if (pageSidebarConfig === 'auto') { - return resolveHeaders(page) - } - - const sidebarConfig = localeConfig.sidebar || themeConfig.sidebar - if (!sidebarConfig) { - return [] - } else { - const { base, config } = resolveMatchingConfig(regularPath, sidebarConfig) - if (config === 'auto') { - return resolveHeaders(page) - } - return config - ? config.map(item => resolveItem(item, pages, base)) - : [] - } -} - -/** - * @param { Page } page - * @returns { SidebarGroup } - */ -function resolveHeaders (page) { - const headers = groupHeaders(page.headers || []) - return [{ - type: 'group', - collapsable: false, - title: page.title, - path: null, - children: headers.map(h => ({ - type: 'auto', - title: h.title, - basePath: page.path, - path: page.path + '#' + h.slug, - children: h.children || [] - })) - }] -} - -export function groupHeaders (headers) { - // group h3s under h2 - headers = headers.map(h => Object.assign({}, h)) - let lastH2 - headers.forEach(h => { - if (h.level === 2) { - lastH2 = h - } else if (lastH2) { - (lastH2.children || (lastH2.children = [])).push(h) - } - }) - return headers.filter(h => h.level === 2) -} - -export function resolveNavLinkItem (linkItem) { - return Object.assign(linkItem, { - type: linkItem.items && linkItem.items.length ? 'links' : 'link' - }) -} - -/** - * @param { Route } route - * @param { Array | Array | [link: string]: SidebarConfig } config - * @returns { base: string, config: SidebarConfig } - */ -export function resolveMatchingConfig (regularPath, config) { - if (Array.isArray(config)) { - return { - base: '/', - config: config - } - } - for (const base in config) { - if (ensureEndingSlash(regularPath).indexOf(encodeURI(base)) === 0) { - return { - base, - config: config[base] - } - } - } - return {} -} - -function ensureEndingSlash (path) { - return /(\.html|\/)$/.test(path) - ? path - : path + '/' -} - -function resolveItem (item, pages, base, groupDepth = 1) { - if (typeof item === 'string') { - return resolvePage(pages, item, base) - } else if (Array.isArray(item)) { - return Object.assign(resolvePage(pages, item[0], base), { - title: item[1] - }) - } else { - const children = item.children || [] - if (children.length === 0 && item.path) { - return Object.assign(resolvePage(pages, item.path, base), { - title: item.title - }) - } - return { - type: 'group', - path: item.path, - title: item.title, - sidebarDepth: item.sidebarDepth, - children: children.map(child => resolveItem(child, pages, base, groupDepth + 1)), - collapsable: item.collapsable !== false - } - } -} diff --git a/docs/en/README.md b/docs/en/README.md deleted file mode 100644 index 220ce21228f13476fde1425338e6edfb50c7b431..0000000000000000000000000000000000000000 --- a/docs/en/README.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: "openEuler" - ---- \ No newline at end of file diff --git a/docs/en/docs/20.09/docs/A-Tune/figures/en-us_image_0227497343.png b/docs/en/docs/20.09/docs/A-Tune/figures/en-us_image_0227497343.png deleted file mode 100644 index b614ad05d1f687b344f6bc1ff2f7e72938968aee..0000000000000000000000000000000000000000 Binary files a/docs/en/docs/20.09/docs/A-Tune/figures/en-us_image_0227497343.png and /dev/null differ diff --git a/docs/en/docs/20.09/docs/Releasenotes/key-features.md b/docs/en/docs/20.09/docs/Releasenotes/key-features.md deleted file mode 100644 index 9590ee5de7e7c3e07ea69341207b44d69c1db228..0000000000000000000000000000000000000000 --- a/docs/en/docs/20.09/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/docs/en/docs/20.09/docs/Releasenotes/known-issues.md b/docs/en/docs/20.09/docs/Releasenotes/known-issues.md deleted file mode 100644 index aad4be328d247d0ea0bf51c9163aaf856318f4e1..0000000000000000000000000000000000000000 --- a/docs/en/docs/20.09/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/docs/en/docs/20.09/docs/Releasenotes/resolved-issues.md b/docs/en/docs/20.09/docs/Releasenotes/resolved-issues.md deleted file mode 100644 index 5265bf49fee0fbf54acbaeb3eefb979676d30b31..0000000000000000000000000000000000000000 --- a/docs/en/docs/20.09/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-20.09](https://gitee.com/openeuler/kernel/commits/openEuler-20.09). - -[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/docs/en/docs/20.09/docs/A-Tune/A-Tune.md b/docs/en/docs/A-Tune/A-Tune.md similarity index 100% rename from docs/en/docs/20.09/docs/A-Tune/A-Tune.md rename to docs/en/docs/A-Tune/A-Tune.md diff --git a/docs/en/docs/20.09/docs/A-Tune/appendixes.md b/docs/en/docs/A-Tune/appendixes.md similarity index 55% rename from docs/en/docs/20.09/docs/A-Tune/appendixes.md rename to docs/en/docs/A-Tune/appendixes.md index 46f489cac3e98bcc418e368e7f442270d31a13fa..2d776555c04a00f5a7c56e5d8b503925019af32a 100644 --- a/docs/en/docs/20.09/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/docs/en/docs/20.09/docs/A-Tune/application-scenarios.md b/docs/en/docs/A-Tune/application-scenarios.md similarity index 69% rename from docs/en/docs/20.09/docs/A-Tune/application-scenarios.md rename to docs/en/docs/A-Tune/application-scenarios.md index cbac0bf1c1114edc27d3e7c5c936e3711b5f4bd4..e1401b69a97062fdb9513018a30df0916b9e464e 100644 --- a/docs/en/docs/20.09/docs/A-Tune/application-scenarios.md +++ b/docs/en/docs/A-Tune/application-scenarios.md @@ -41,10 +41,6 @@ You can use functions provided by A-Tune through the CLI client atune-adm. This - 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 +51,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,39 +62,111 @@ 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. +>![](public_sys-resources/icon-note.gif) **NOTE:** +>If the value of Active is **true**, the profile is activated. In the example, the profile of web-nginx-http-long-connection is activated. ## Workload Type Analysis and Auto Optimization - - ### analysis #### Function @@ -121,7 +189,12 @@ Collect real-time statistics from the system to identify and automatically optim

--model, -m

-

Model generated by user-defined training

+

New model generated after user self-training

+ + +

--characterization, -c

+ +

Use the default model for application identification and do not perform automatic optimization

@@ -130,12 +203,18 @@ 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 for application identification. ``` - # atune-adm analysis + # atune-adm analysis --characterization ``` +- Use the default model to identify applications and perform automatic tuning. + + ``` + # atune-adm analysis + ``` + - Use the user-defined training model for recognition. ``` @@ -147,60 +226,56 @@ 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 scenarios 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 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 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. ``` -[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 @@ -209,7 +284,7 @@ The **example.conf** file can be written as follows \(the following optimizati Collect the global resource usage and OS status information during service running, and save the collected information to a CSV output file as the input dataset for model training. ->![](./public_sys-resources/icon-note.gif) **NOTE:** +>![](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. @@ -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 @@ -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,63 +466,46 @@ 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. - - ### 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 profile 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 @@ -449,30 +514,26 @@ Update the workload type to **test\_type** and the optimization item of test\_ #### Function -Manually activate a profile of a workload type. +Manually activate the 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 the 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 @@ -522,10 +579,6 @@ The database is updated to **new\_sqlite.db**. ## Querying System Information -   - - - ### check @@ -561,9 +614,7 @@ Check the CPU, BIOS, OS, and NIC information. ## 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. - - +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 @@ -574,13 +625,13 @@ Use the specified project file to search the dynamic space for parameters and fi #### Format ->![](./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\] +>![](public_sys-resources/icon-note.gif) **NOTE:** +>Before running the command, ensure that the following conditions are met: +>1. The YAML configuration file on the server has been edited and stored in the **/etc/atuned/tuning/** directory of the atuned service. +>2. The YAML configuration file of the client has been edited and stored on the atuned client. + #### Parameter Description - OPTIONS @@ -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

+ +

Perform tuning based on historical tuning results.

+ + +

--detail, -d

+ +

Print 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. + + + >![](public_sys-resources/icon-note.gif) **NOTE:** + >If this parameter is used, the -p parameter must be followed by a specific project name and the YAML file of the project must be specified. - **PROJECT\_YAML**: YAML configuration file of the client. @@ -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,6 +872,15 @@ 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.

@@ -826,6 +890,51 @@ Use the specified project file to search the dynamic space for parameters and fi

≥ 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 - - - - - - - - @@ -860,6 +861,7 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数

Name

@@ -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/docs/en/docs/20.09/docs/A-Tune/faqs.md b/docs/en/docs/A-Tune/faqs.md similarity index 100% rename from docs/en/docs/20.09/docs/A-Tune/faqs.md rename to docs/en/docs/A-Tune/faqs.md diff --git a/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/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 docs/en/docs/20.09/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/20.09/docs/A-Tune/figures/en-us_image_0227497000.png b/docs/en/docs/A-Tune/figures/en-us_image_0227497000.png similarity index 100% rename from docs/en/docs/20.09/docs/A-Tune/figures/en-us_image_0227497000.png rename to docs/en/docs/A-Tune/figures/en-us_image_0227497000.png 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..a8654b170295b4b0be3c37187e4b227ca635fbc0 Binary files /dev/null and b/docs/en/docs/A-Tune/figures/en-us_image_0227497343.png differ diff --git a/docs/en/docs/20.09/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 docs/en/docs/20.09/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/20.09/docs/A-Tune/figures/en-us_image_0245342444.png b/docs/en/docs/A-Tune/figures/en-us_image_0245342444.png similarity index 100% rename from docs/en/docs/20.09/docs/A-Tune/figures/en-us_image_0245342444.png rename to docs/en/docs/A-Tune/figures/en-us_image_0245342444.png diff --git a/docs/en/docs/20.09/docs/A-Tune/getting-to-know-a-tune.md b/docs/en/docs/A-Tune/getting-to-know-a-tune.md similarity index 73% rename from docs/en/docs/20.09/docs/A-Tune/getting-to-know-a-tune.md rename to docs/en/docs/A-Tune/getting-to-know-a-tune.md index 732048c9023e25a04c245f777a175c33c3fbc731..2092e0152e2c31ea4bf1aa95277302bcc981b6a9 100644 --- a/docs/en/docs/20.09/docs/A-Tune/getting-to-know-a-tune.md +++ b/docs/en/docs/A-Tune/getting-to-know-a-tune.md @@ -19,17 +19,17 @@ 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) +![](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. +- 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) +![](figures/en-us_image_0227497343.png) ## Supported Features and Service Models @@ -39,7 +39,6 @@ The following figure shows the A-Tune core technical architecture, which consist **Table 1** Feature maturity - - - @@ -72,18 +71,19 @@ The following figure shows the A-Tune core technical architecture, which consist

Feature

Maturity

@@ -48,14 +47,14 @@ The following figure shows the A-Tune core technical architecture, which consist

Auto optimization of 11 applications in seven workload types

+

Auto optimization of 15 applications in 11 workload types

Tested

Pilot

User-defined workload types and service models

+

User-defined profile and service models

Tested

+ ### 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). +Based on the workload characteristics of applications, A-Tune classifies services into 11 types. For details about the bottleneck of each type and the applications supported by A-Tune, see [Table 2](#table2819164611311). **Table 2** Supported workload types and applications - - - + + +

Workload

+ - @@ -93,87 +93,103 @@ Based on the workload characteristics of applications, A-Tune classifies service - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - + + + + +

Service category

Type

Workload Characteristic

+

Bottleneck

Supported Application

Default type

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

+

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

N/A

webserver

HTTPS application

+

Web application

The CPU usage is high.

+

Bottlenecks of cpu and network

Nginx

+

Nginx, Apache Traffic Server

big_database

+

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.

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

MongoDB, MySQL, PostgreSQL, and MariaDB

+

Mongodb, Mysql, Postgresql, Mariadb

big_data

Big data

The usage of CPU and I/O is high.

+

Bottlenecks of cpu and memory

Hadoop and Spark

+

Hadoop-hdfs, Hadoop-spark

in-memory_computing

+

middleware

Memory-intensive application

+

Middleware framework

The usage of CPU and memory bandwidth is high.

+

Bottlenecks of cpu and network

SPECjbb2015

+

Dubbo

in-memory_database

Computing- and network-intensive application

+

Memory database

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

+

Bottlenecks of memory and I/O

Redis

single_computer_intensive_jobs

+

basic-test-suite

+

Basic test suite

+

Bottlenecks of cpu and memory

+

SPECCPU2006, SPECjbb2015

+

hpc

Computing-intensive application

+

Human genome

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

+

Bottlenecks of cpu, memory, and I/O

SPECCPU2006

+

Gatk4

communication

+

storage

Network-intensive application

+

Storage

The usage of CPU and network is high.

+

Bottlenecks of network, and I/O

Dubbo

+

Ceph

idle

+

virtualization

System in idle state

+

Virtualization

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

+

Bottlenecks of cpu, memory, and I/O

N/A

+

Consumer-cloud, Mariadb

+

docker

+

Docker

+

Bottlenecks of cpu, memory, and I/O

+

Mariadb

+ + diff --git a/docs/en/docs/20.09/docs/A-Tune/installation-and-deployment.md b/docs/en/docs/A-Tune/installation-and-deployment.md similarity index 31% rename from docs/en/docs/20.09/docs/A-Tune/installation-and-deployment.md rename to docs/en/docs/A-Tune/installation-and-deployment.md index 6b9b5bd530908a0eff76d74de2aa87396bd1df54..103e27926763fd40276ea5cdb63271b2cc869f67 100644 --- a/docs/en/docs/20.09/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.09 ## 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.09 Installation Guide_. ## A-Tune Installation @@ -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.09-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:** >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/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/docs/Administration/administration.md b/docs/en/docs/Administration/administration.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/administration.md rename to docs/en/docs/Administration/administration.md diff --git a/docs/en/docs/20.09/docs/Administration/basic-configuration.md b/docs/en/docs/Administration/basic-configuration.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/basic-configuration.md rename to docs/en/docs/Administration/basic-configuration.md diff --git a/docs/en/docs/20.09/docs/Administration/configuring-services.md b/docs/en/docs/Administration/configuring-services.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/configuring-services.md rename to docs/en/docs/Administration/configuring-services.md diff --git a/docs/en/docs/20.09/docs/Administration/configuring-the-ftp-server.md b/docs/en/docs/Administration/configuring-the-ftp-server.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/configuring-the-ftp-server.md rename to docs/en/docs/Administration/configuring-the-ftp-server.md diff --git a/docs/en/docs/20.09/docs/Administration/configuring-the-network.md b/docs/en/docs/Administration/configuring-the-network.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/configuring-the-network.md rename to docs/en/docs/Administration/configuring-the-network.md diff --git a/docs/en/docs/20.09/docs/Administration/configuring-the-repo-server.md b/docs/en/docs/Administration/configuring-the-repo-server.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/configuring-the-repo-server.md rename to docs/en/docs/Administration/configuring-the-repo-server.md diff --git a/docs/en/docs/20.09/docs/Administration/configuring-the-web-server.md b/docs/en/docs/Administration/configuring-the-web-server.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/configuring-the-web-server.md rename to docs/en/docs/Administration/configuring-the-web-server.md diff --git a/docs/en/docs/20.09/docs/Administration/faqs.md b/docs/en/docs/Administration/faqs.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/faqs.md rename to docs/en/docs/Administration/faqs.md diff --git a/docs/en/docs/20.09/docs/Administration/figures/creat_datadisk.png b/docs/en/docs/Administration/figures/creat_datadisk.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/creat_datadisk.png rename to docs/en/docs/Administration/figures/creat_datadisk.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/creat_datadisk1.png b/docs/en/docs/Administration/figures/creat_datadisk1.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/creat_datadisk1.png rename to docs/en/docs/Administration/figures/creat_datadisk1.png diff --git a/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/docs/Administration/figures/en-us_image_0229622729.png b/docs/en/docs/Administration/figures/en-us_image_0229622729.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/en-us_image_0229622729.png rename to docs/en/docs/Administration/figures/en-us_image_0229622729.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/en-us_image_0229622789.png b/docs/en/docs/Administration/figures/en-us_image_0229622789.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/en-us_image_0229622789.png rename to docs/en/docs/Administration/figures/en-us_image_0229622789.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/en-us_image_0230050789.png b/docs/en/docs/Administration/figures/en-us_image_0230050789.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/en-us_image_0230050789.png rename to docs/en/docs/Administration/figures/en-us_image_0230050789.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231143189.png b/docs/en/docs/Administration/figures/en-us_image_0231143189.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231143189.png rename to docs/en/docs/Administration/figures/en-us_image_0231143189.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231143191.png b/docs/en/docs/Administration/figures/en-us_image_0231143191.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231143191.png rename to docs/en/docs/Administration/figures/en-us_image_0231143191.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231143193.png b/docs/en/docs/Administration/figures/en-us_image_0231143193.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231143193.png rename to docs/en/docs/Administration/figures/en-us_image_0231143193.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231143195.png b/docs/en/docs/Administration/figures/en-us_image_0231143195.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231143195.png rename to docs/en/docs/Administration/figures/en-us_image_0231143195.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231143196.png b/docs/en/docs/Administration/figures/en-us_image_0231143196.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231143196.png rename to docs/en/docs/Administration/figures/en-us_image_0231143196.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231143197.png b/docs/en/docs/Administration/figures/en-us_image_0231143197.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231143197.png rename to docs/en/docs/Administration/figures/en-us_image_0231143197.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231143198.png b/docs/en/docs/Administration/figures/en-us_image_0231143198.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231143198.png rename to docs/en/docs/Administration/figures/en-us_image_0231143198.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231563132.png b/docs/en/docs/Administration/figures/en-us_image_0231563132.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231563132.png rename to docs/en/docs/Administration/figures/en-us_image_0231563132.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231563134.png b/docs/en/docs/Administration/figures/en-us_image_0231563134.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231563134.png rename to docs/en/docs/Administration/figures/en-us_image_0231563134.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231563135.png b/docs/en/docs/Administration/figures/en-us_image_0231563135.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231563135.png rename to docs/en/docs/Administration/figures/en-us_image_0231563135.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231563136.png b/docs/en/docs/Administration/figures/en-us_image_0231563136.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/en-us_image_0231563136.png rename to docs/en/docs/Administration/figures/en-us_image_0231563136.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/example-command-output.png b/docs/en/docs/Administration/figures/example-command-output.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/example-command-output.png rename to docs/en/docs/Administration/figures/example-command-output.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/ima_digest_list_update.png b/docs/en/docs/Administration/figures/ima_digest_list_update.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/ima_digest_list_update.png rename to docs/en/docs/Administration/figures/ima_digest_list_update.png diff --git a/docs/en/docs/Administration/figures/ima_performance.png b/docs/en/docs/Administration/figures/ima_performance.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d641e8682ad2b9c0fbfad191add1819f5b2eef Binary files /dev/null and b/docs/en/docs/Administration/figures/ima_performance.png differ diff --git a/docs/en/docs/Administration/figures/ima_verification.png b/docs/en/docs/Administration/figures/ima_verification.png new file mode 100644 index 0000000000000000000000000000000000000000..fc879949db5387c61ccf6176f948b9a00f4fb053 Binary files /dev/null and b/docs/en/docs/Administration/figures/ima_verification.png differ diff --git a/docs/en/docs/20.09/docs/Administration/figures/login.png b/docs/en/docs/Administration/figures/login.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/login.png rename to docs/en/docs/Administration/figures/login.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/mariadb-logical-architecture.png b/docs/en/docs/Administration/figures/mariadb-logical-architecture.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/mariadb-logical-architecture.png rename to docs/en/docs/Administration/figures/mariadb-logical-architecture.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/nginx-deployment-succeeded.png b/docs/en/docs/Administration/figures/nginx-deployment-succeeded.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/nginx-deployment-succeeded.png rename to docs/en/docs/Administration/figures/nginx-deployment-succeeded.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/nginx-startup-failure.png b/docs/en/docs/Administration/figures/nginx-startup-failure.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/nginx-startup-failure.png rename to docs/en/docs/Administration/figures/nginx-startup-failure.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/postgres.png b/docs/en/docs/Administration/figures/postgres.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/postgres.png rename to docs/en/docs/Administration/figures/postgres.png diff --git a/docs/en/docs/20.09/docs/Administration/figures/postgresql-architecture.png b/docs/en/docs/Administration/figures/postgresql-architecture.png similarity index 100% rename from docs/en/docs/20.09/docs/Administration/figures/postgresql-architecture.png rename to docs/en/docs/Administration/figures/postgresql-architecture.png diff --git a/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/zh/docs/20.09/docs/Administration/figures/trusted_chain.png b/docs/en/docs/Administration/figures/trusted_chain.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/trusted_chain.png rename to docs/en/docs/Administration/figures/trusted_chain.png diff --git a/docs/en/docs/20.09/docs/Administration/managing-hard-disks-through-lvm.md b/docs/en/docs/Administration/managing-hard-disks-through-lvm.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/managing-hard-disks-through-lvm.md rename to docs/en/docs/Administration/managing-hard-disks-through-lvm.md diff --git a/docs/en/docs/20.09/docs/Administration/process-management.md b/docs/en/docs/Administration/process-management.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/process-management.md rename to docs/en/docs/Administration/process-management.md diff --git a/docs/en/docs/20.09/docs/Administration/public_sys-resources/icon-caution.gif b/docs/en/docs/Administration/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/en/docs/20.09/docs/Administration/public_sys-resources/icon-caution.gif rename to docs/en/docs/Administration/public_sys-resources/icon-caution.gif diff --git a/docs/en/docs/20.09/docs/Administration/public_sys-resources/icon-danger.gif b/docs/en/docs/Administration/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/en/docs/20.09/docs/Administration/public_sys-resources/icon-danger.gif rename to docs/en/docs/Administration/public_sys-resources/icon-danger.gif diff --git a/docs/en/docs/20.09/docs/Administration/public_sys-resources/icon-note.gif b/docs/en/docs/Administration/public_sys-resources/icon-note.gif similarity index 100% rename from docs/en/docs/20.09/docs/Administration/public_sys-resources/icon-note.gif rename to docs/en/docs/Administration/public_sys-resources/icon-note.gif diff --git a/docs/en/docs/20.09/docs/Administration/public_sys-resources/icon-notice.gif b/docs/en/docs/Administration/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/en/docs/20.09/docs/Administration/public_sys-resources/icon-notice.gif rename to docs/en/docs/Administration/public_sys-resources/icon-notice.gif diff --git a/docs/en/docs/20.09/docs/Administration/public_sys-resources/icon-tip.gif b/docs/en/docs/Administration/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/en/docs/20.09/docs/Administration/public_sys-resources/icon-tip.gif rename to docs/en/docs/Administration/public_sys-resources/icon-tip.gif diff --git a/docs/en/docs/20.09/docs/Administration/public_sys-resources/icon-warning.gif b/docs/en/docs/Administration/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/en/docs/20.09/docs/Administration/public_sys-resources/icon-warning.gif rename to docs/en/docs/Administration/public_sys-resources/icon-warning.gif diff --git a/docs/en/docs/20.09/docs/Administration/service-management.md b/docs/en/docs/Administration/service-management.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/service-management.md rename to docs/en/docs/Administration/service-management.md diff --git a/docs/en/docs/20.09/docs/Administration/setting-up-the-database-server.md b/docs/en/docs/Administration/setting-up-the-database-server.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/setting-up-the-database-server.md rename to docs/en/docs/Administration/setting-up-the-database-server.md diff --git a/docs/en/docs/Administration/trusted-computing.md b/docs/en/docs/Administration/trusted-computing.md new file mode 100644 index 0000000000000000000000000000000000000000..914ab62bcd2a109e1544f440ff1bcc73d71678ba --- /dev/null +++ b/docs/en/docs/Administration/trusted-computing.md @@ -0,0 +1,638 @@ +# Trusted Computing + + +- [Trusted Computing](#可信计算) + - [Trusted Computing Basics](#可信计算基础) + - [Trusted Computing](#可信计算-1) + - [Kernel Integrity Measurement Architecture (IMA)](#内核完整性度量ima) + - [Overview](#概述) + - [Constraints](#约束限制) + - [Application Scenarios](#使用场景) + - [Procedure](#操作指导) + - [FAQ](#faq) + - [Appendix](#附录) + + +## Trusted Computing Basics + +### Trusted Computing + +The definition of being trusted varies with international organizations. + +1. Trusted Computing Group (TCG): + + An entity that is trusted always achieves the desired goal in an expected way. + +2. International Organization for Standardization (ISO) and International Electrotechnical Commission (IEC) (1999): + + The components, operations, or processes involved in computing are predictable under any conditions and are resistant to viruses and a certain degree of physical interference. + +3. IEEE Computer Society Technical Committee on Dependable Computing: + + Being trusted means that the services provided by the computer system can be proved to be reliable, and mainly refers to the reliability and availability of the system. + +In short, being trusted means that the system operates according to a pre-determined design and policy. + +A trusted computing system consists of a root of trust, a trusted hardware platform, operating system (OS), and application. The basic idea of the system is to create a trusted computing base (TCB) first, and then establish a trust chain that covers the hardware platform, OS, and application. In the trust chain, authentication is performed from the root to the next level, extending trust level by level and building a secure and trusted computing environment. + +![](./figures/trusted_chain.png) + +Unlike the traditional security mechanism that eliminates viruses without solving the root of the problem, trusted computing adopts the whitelist mechanism to allow only authorized kernels, kernel modules, and applications to run on the system. The system will reject the execution of a program that is unknown or has been changed. + +## Kernel Integrity Measurement Architecture (IMA) + +### Overview + +#### IMA + +The integrity measurement architecture (IMA) is a subsystem in the kernel. The IMA can measure files accessed through **execve()**, **mmap()**, and **open()** systems based on user-defined policies. The measurement result can be used for **local or remote attestation**, or can be compared with an existing reference value to **control the access to files**. + +According to the Wiki definition, the function of the kernel integrity subsystem include three parts: + +- Measure: Detects accidental or malicious modifications to files, either remotely or locally. +- Appraise: Measures a file and compares it with a reference value stored in the extended attribute to control the integrity of the local file. +- Audit: Writes the measurement result into system logs for auditing. + +Figuratively, IMA measurement is an observer that only records modification without interfering in it, and IMA appraisal is more like a strict security guard that rejects any unauthorized access to programs. + +#### EVM + +The extended verification module (EVM) is used to calculate a hash value based on the security extended attributes of a file in the system, including **security.ima** and **security.selinux**. Then this value is signed by the key stored in the TPM or other trusted environments. The signature value is stored in **security.evm** and cannot be tampered with. If the value is tampered with, the signature verification fails when the file is accessed again. + +In summary, the EVM is used to provide offline protection for security extended attributes by calculating the digest of the attributes and signing and storing them in **security.evm**. + +#### IMA Digest Lists + +IMA Digest Lists are an enhancement of the original kernel integrity protection mechanism provided by openEuler. It replaces the original IMA mechanism to protect file integrity. + +Digest lists are binary data files in a special format. Each digest list corresponds to an RPM package and records the hash values of protected files (executable files and dynamic library files) in the RPM package. + +After the startup parameters are correctly configured, the kernel maintains a hash table (invisible to the user space) and provides interfaces (**digest\_list\_data** and **digest\_list\_data\_del**) that update the hash table using **securityfs**. The digest lists are signed by the private key when they are built. When uploaded to the kernel through the interface, the digest lists need to be verified by the public key in the kernel. + +![](./figures/ima_digest_list_update.png) + +When IMA appraisal is enabled, each time an executable file or dynamic library file is accessed, the hook in the kernel is invoked to calculate the hash values of the file content and extended attributes and search in the kernel hash table. If the calculated hash values match the one in the table, the file is allowed to be executed. Otherwise, the access is denied. + +![1599719649188](./figures/ima_verification.png) + +The IMA Digest Lists extension provided by the openEuler kernel provides higher security, performance, and usability than the native IMA mechanism of the kernel community, facilitating the implementation of the integrity protection mechanism in the production environment. + +- **A complete trust chain for high security** + + The native IMA mechanism requires that the file extended attribute be generated and marked in advance on the live network. When the file is accessed, the file extended attribute is used as a reference value, resulting in an incomplete trust chain. + + The IMA Digest Lists extension saves the reference digest value of the file in the kernel space. During the construction, the reference digest value of the file is carried in the released RPM package in the form of a digest list. When the RPM package is installed, the digest list is imported and the signature is verified, ensuring that the reference value comes from the software publisher and implementing a complete trust chain. + +- **Superior performance** + + The trusted platform module (TPM) chip is a low-speed chip, making the PCR extension operation a performance bottleneck in the IMA measurement scenario. To shatter this bottleneck, the Digest Lists extension reduces unnecessary PCR extension operations while ensuring security, providing 65% higher performance than the native IMA mechanism. + + In the IMA appraisal scenario, the Digest Lists extension performs signature verification in the startup phase to prevent signature verification from being performed each time the file is accessed. This helps deliver a 20% higher file access performance in the operation phase than that in the native IMA appraisal scenario. + +- **Fast deployment and smooth upgrade** + + When the native IMA mechanism is deployed for the first time or the software package is updated, you need to switch to the fix mode, manually mark the extended attributes of the file, and then restart the system to enter the enforcing mode. In this way, the installed program can be accessed normally. + + The Digest Lists extension can be used immediately after the installation is completed. In addition, the RPM package can be directly installed or upgraded in the enforcing mode without restarting the system or manually marking the extended attributes of the file. This minimizes user perception during the operation, allowing for quick deployment and smooth upgrade on the live network. + +Note: The IMA Digest Lists extension advances the signature verification of the native IMA to the startup phase. This causes the assumption that the memory in the kernel space cannot be tampered with. As a result, the IMA depends on other security mechanisms (secure startup of kernel module and dynamic memory measurement) to protect the integrity of the kernel memory. + +However, either the native IMA mechanism of the community or the IMA Digest Lists extension is only a link in the trust chain of trusted computing, and cannot ensure the system security alone. Security construction is always a systematic project that builds in-depth defense. + +### Constraints + +1. The current IMA appraisal mode can only protect immutable files in the system, including executable files and dynamic library files. +2. The IMA provides integrity measurement at the application layer. The security of the IMA depends on the reliability of the previous links. +3. Currently, the IMA does not support the import of the third-party application digest lists. +4. The startup log may contain `Unable to open file: /etc/keys/x509_ima.der`. This error is reported from the open source community and does not affect the use of the IMA digest lists feature. +5. In the ARM version, audit errors may occur when the log mode is enabled for the IMA. This occurs because the modprobe loads the kernel module before the digest lists are imported, but does not affect the normal functions. + +### Application Scenario + +#### IMA Measurement + +The purpose of IMA measurement is to detect unexpected or malicious modifications to system files. The measurement result can be used for local or remote attestation. + +If a TPM chip exists in the system, the measurement result is extended to a specified PCR register of the TPM chip. Due to the unidirectional PCR extension and the hardware security of the TPM chip, a user cannot modify the extended measurement result, thereby ensuring authenticity of the measurement result. + +The file scope and triggering conditions of IMA measurement can be configured by the user using the IMA policy. + +By default, IMA is disabled. However, the system searches for the **ima-policy** policy file in the `/etc/ima/` path. If the file is found, the system measures the files in the system based on the policy during startup. If you do not want to manually compile the policy file, you can configure the `ima_policy=tcb` in the startup parameters using the default policy. For details about more policy parameters, see the section *IMA Startup Parameters* in *Appendix*. + +You can check the currently loaded IMA policy in the `/sys/kernel/security/ima/policy` file. The IMA measurement log is located in the `/sys/kernel/security/ima/ascii_runtime_measurements` file, as shown in the following figure: + +```shell +$ head /sys/kernel/security/ima/ascii_runtime_measurements +10 ddee6004dc3bd4ee300406cd93181c5a2187b59b ima-ng sha1:9797edf8d0eed36b1cf92547816051c8af4e45ee boot_aggregate +10 180ecafba6fadbece09b057bcd0d55d39f1a8a52 ima-ng sha1:db82919bf7d1849ae9aba01e28e9be012823cf3a /init +10 ac792e08a7cf8de7656003125c7276968d84ea65 ima-ng sha1:f778e2082b08d21bbc59898f4775a75e8f2af4db /bin/bash +10 0a0d9258c151356204aea2498bbca4be34d6bb05 ima-ng sha1:b0ab2e7ebd22c4d17d975de0d881f52dc14359a7 /lib64/ld-2.27.so +10 0d6b1d90350778d58f1302d00e59493e11bc0011 ima-ng sha1:ce8204c948b9fe3ae67b94625ad620420c1dc838 /etc/ld.so.cache +10 d69ac2c1d60d28b2da07c7f0cbd49e31e9cca277 ima-ng sha1:8526466068709356630490ff5196c95a186092b8 /lib64/libreadline.so.7.0 +10 ef3212c12d1fbb94de9534b0bbd9f0c8ea50a77b ima-ng sha1:f80ba92b8a6e390a80a7a3deef8eae921fc8ca4e /lib64/libc-2.27.so +10 f805861177a99c61eabebe21003b3c831ccf288b ima-ng sha1:261a3cd5863de3f2421662ba5b455df09d941168 /lib64/libncurses.so.6.1 +10 52f680881893b28e6f0ce2b132d723a885333500 ima-ng sha1:b953a3fa385e64dfe9927de94c33318d3de56260 /lib64/libnss_files-2.27.so +10 4da8ce3c51a7814d4e38be55a2a990a5ceec8b27 ima-ng sha1:99a9c095c7928ecca8c3a4bc44b06246fc5f49de /etc/passwd +``` + +From left to right, the content of each record indicates: + +1. PCR: PCR register for extending measurement results (The default value is 10. This register is valid only when the TPM chip is installed in the system.) +2. Template hash value: hash value that is finally used for extension, combining the file content hash and the length and value of the file path +3. Template: template of the extended measurement value, for example, **ima-ng** +4. File content hash value: hash value of the measured file content +5. File path: path of the measured file + +#### IMA Appraisal + +The purpose of IMA appraisal is to control access to local files by comparing the reference value with the standard reference value. + +IMA uses the security extension attributes **security.ima** and **security.evm** to store the reference values of file integrity measurement. + +- **security.ima**: stores the hash value of the file content +- **security.evm**: stores the hash value signature of a file extended attribute + +When a protected file is accessed, the hook in the kernel is triggered to verify the integrity of the extended attributes and content of the file. + +1. Use the public key in the kernel keyring to verify the signature value in the extended attribute of the **security.evm** file, and compare this signature value with the hash value of the extended attribute of the current file. If they match, the extended attribute of the file is complete (including **security.ima**). +2. When the extended attribute of the file is complete, the system compares the extended attribute of the file **security.ima** with the digest value of the current file content. If they match, the system allows for the access to the file. + +Likewise, the file scope and trigger conditions for IMA appraisal can be configured by users using IMA policies. + +#### IMA Digest Lists + +Currently, the IMA Digest Lists extension supports the following three combinations of startup parameters: + +* IMA measurement mode: + + ```shell + ima_policy=exec_tcb ima_digest_list_pcr=11 + ``` + +* IMA appraisal log mode + IMA measurement mode: + + ```shell + ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sha256 ima_appraise=log evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest + ``` + +* IMA appraisal enforcing mode + IMA measurement mode: + + ```shell + ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sha256 ima_appraise=enforce-evm evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest + ``` + +### Procedure + +#### Initial Deployment in the Native IMA Scenario + +When the system is started for the first time, you need to configure the following startup parameters: + +```shell +ima_appraise=fix ima_policy=appraise_tcb +``` + +In the `fix` mode, the system can be started when no reference value is available. `appraise_tcb` corresponds to an IMA policy. For details, see *IMA Startup Parameters* in the *Appendix*. + +Next, you need to access all the files that need to be verified to add IMA extended attributes to them: + +```shell +$ time find / -fstype ext4 -type f -uid 0 -exec dd if='{}' of=/dev/null count=0 status=none \; +``` + +This process takes some time. After the command is executed, you can see the marked reference value in the extended attributes of the protected file. + +```shell +$ getfattr -m - -d /sbin/init +# file: sbin/init +security.ima=0sAXr7Qmun5mkGDS286oZxCpdGEuKT +security.selinux="system_u:object_r:init_exec_t" +``` + +Configure the following startup parameters and restart the system: + +```shell +ima_appraise=enforce ima_policy=appraise_tcb +``` + +#### Initial Deployment in the Digest Lists Scenario + +1. Set kernel parameters to enter the log mode. + + Add the following parameters to edit the `/boot/efi/EFI/euleros/grub.cfg` file: + + ```shell + ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sha256 ima_appraise=log evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest + ``` + + Run the `reboot` command to restart the system and enter the log mode. In this mode, integrity check has been enabled, but the system can be started even if the check fails. + +2. Install the dependency package. + + Run the **yum** command to install **digest-list-tools** and **ima-evm-utils**. Ensure that the versions are not earlier than the following: + + ```shell + $ yum install digest-list-tools ima-evm-utils + $ rpm -qa | grep digest-list-tools + digest-list-tools-0.3.93-1.oe1.x86_64 + $ rpm -qa | grep ima-evm-utils + ima-evm-utils-1.2.1-9.oe1.x86_64 + ``` + +3. If the **plymouth** package is installed, you need to add `-a` to the end of the **cp** command in line 147 in the `/usr/libexec/plymouth/plymouth-populate-initrd` script file: + + ```shell + ... + ddebug "Installing $_src" + cp -a --sparse=always -pfL "$PLYMOUTH_SYSROOT$_src" "${initdir}/$target" + } + ``` + +4. Run `dracut` to generate **initrd** again: + + ```shell + $ dracut -f -e xattr + ``` + + Edit the `/boot/efi/EFI/euleros/grub.cfg` file by changing **ima\_appraise=log** to **ima\_appraise=enforce-evm**. + + ```shell + ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sha256 ima_appraise=enforce-evm evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest + ``` + + Run the **reboot** command to complete the initial deployment. + +#### Building Digest Lists on OBS + +Open Build Service (OBS) is a compilation system that was first used for building software packages in openSUSE and supports distributed compilation of multiple architectures. + +Before building a digest list, ensure that your project contains the following RPM packages from openEuler: + +* digest-list-tools +* pesign-obs-integration +* selinux-policy +* rpm +* openEuler-rpm-config + +Add **Project Config** in the deliverable project: + +```shell +Preinstall: pesign-obs-integration digest-list-tools selinux-policy-targeted +Macros: +%__brp_digest_list /usr/lib/rpm/openEuler/brp-digest-list %{buildroot} +:Macros +``` + +* The following content is added to **Preinstall**: **digest-list-tools** for generating the digest list; **pesign-obs-integration** for generating the digest list signature; **selinux-policy-targeted**, ensuring that the SELinux label in the environment is correct when the digest list is generated. +* Define the macro **%\_\_brp\_digest\_list** in Macros. The RPM runs this macro to generate a digest list for the compiled binary file in the build phase. This macro can be used as a switch to control whether the digest list is generated in the project. + +After the configuration is completed, OBS automatically performs full build. In normal cases, the following two files are added to the software package: + +* **/etc/ima/digest\_lists/0-metadata\_list-compact-\[package name]-\[version number]** +* **/etc/ima/digest\_lists.tlv/0-metadata\_list-compact\_tlv-\[package name]-\[version number]** + +#### Building Digest Lists on Koji + +Koji is a compilation system of the Fedora community. The openEuler community will support Koji in the future. + +### FAQ + +1. Why does the system fail to be started, or commands fail to be executed, or services are abnormal after the system is started in enforcing mode? + + In enforcing mode, IMA controls file access. If the content or extended attributes of a file to be accessed are incomplete, the access will be denied. If key commands that affect system startup cannot be executed, the system cannot be started. + + Check whether the following problems exist: + + * **Check whether the digest list is added to initrd.** + + Check whether the **dracut** command is executed to add the digest list to the kernel during the initial deployment. If the digest list is not added to **initrd**, the digest list cannot be imported during startup. As a result, the startup fails. + + * **Check whether the official RPM package is used.** + + If a non-official openEuler RPM package is used, the RPM package may not carry the digest list, or the private key for signing the digest list does not match the public key for signature verification in the kernel. As a result, the digest list is not imported to the kernel. + + If the cause is not clear, enter the log mode and find the cause from the error log: + + ```shell + $ dmesg | grep appraise + ``` + +2. Why access control is not performed on system files in enforcing mode? + + When the system does not perform access control on the file as expected, check whether the IMA policy in the startup parameters is correctly configured: + + ```shell + $ cat /proc/cmdline + ...ima_policy=exec_tcb|appraise_exec_tcb|appraise_exec_immutable... + ``` + + Run the following command to check whether the IMA policy in the current kernel has taken effect: + + ```shell + $ cat /sys/kernel/security/ima/policy + ``` + + If the policy file is empty, it indicates that the policy fails to be set. In this case, the system does not perform access control. + +3. After the initial deployment is completed, do I need to manually run the **dracut** command to generate **initrd** after installing, upgrading, or uninstalling the software package? + + No. The **digest\_list.so** plug-in provided by the RPM package can automatically update the digest list at the RPM package granularity, allowing users to be unaware of the digest list. + +### Appendix + +#### Description of the IMA securityfs Interface + +The native IMA provides the following **securityfs** interfaces: + +> Note: The following interface paths are in the `/sys/kernel/security/` directory. + +| Path | Permission | Description | +| ------------------------------ | ---------- | ------------------------------------------------------------ | +| ima/policy | 600 | IMA policy interface | +| ima/ascii_runtime_measurement | 440 | IMA measurement result in ASCII code format | +| ima/binary_runtime_measurement | 440 | IMA measurement result in binary format | +| ima/runtime_measurement_count | 440 | Measurement result statistics | +| ima/violations | 440 | Number of IMA measurement result conflicts | +| evm | 660 | EVM mode, that is, the mode for verifying the integrity of extended attributes of files | + +The values of `/sys/kernel/security/evm` are as follows: + +* 0: EVM uninitialized. +* 1: Uses HMAC (symmetric encryption) to verify the integrity of extended attributes. +* 2: Uses the public key signature (asymmetric encryption) to verify the integrity of extended attributes. +* 6: Disables the integrity check of extended attributes (This mode is used for openEuler). + +The additional **securityfs** interfaces provided by the IMA Digest Lists extension are as follows: + +| Path | Permission | Description | +| ------------------------ | ---------- | ---------------------------------------------------------- | +| ima/digests_count | 440 | Total number of digests (IMA+EVM) in the system hash table | +| ima/digest_list_data | 200 | New interfaces in the digest list | +| ima/digest_list_data_del | 200 | Interfaces deleted from the digest list | + +#### IMA Policy Syntax + +Each IMA policy statement must start with an **action** represented by the keyword action and be followed by a **filtering condition**: + +- **action**: indicates the action of a policy. Only one **action** can be selected for a policy. + + > Note: You can **ignore the word action** and directly write **dont\_measure** instead of **action=dont\_measure**. + +- **func**: indicates the type of the file to be measured or authenticated. It is often used together with **mask**. Only one **func** can be selected for a policy. + + - **FILE\_CHECK** can be used only with **MAY\_EXEC**, **MAY\_WRITE**, and **MAY\_READ**. + - **MODULE\_CHECK**, **MMAP\_CHECK**, and **BPRM\_CHECK** can be used only with **MAY\_EXEC**. + - A combination without the preceding matching relationships does not take effect. + +- **mask**: indicates the operation upon which files will be measured or appraised. Only one **mask** can be selected for a policy. + +- **fsmagic**: indicates the hexadecimal magic number of the file system type, which is defined in the `/usr/include/linux/magic.h` file. + + > Note: By default, all file systems are measured unless you use the **dont\_measure/dont\_appraise** to mark a file system not to be measured. + +- **fsuid**: indicates the UUID of a system device. The value is a hexadecimal string of 16 characters. + +- **objtype**: indicates the file type. Only one file type can be selected for a policy. + + > Note: **objtype** has a finer granularity than **func**. For example, **obj\_type=nova\_log\_t** indicates the nova log file. + +- **uid**: indicates the user (represented by the user ID) who performs operations on the file. Only one **uid** can be selected for a policy. + +- **fowner**: indicates the owner (represented by the user ID) of the file. Only one **fowner** can be selected for a policy. + +The values and description of the keywords are as follows: + +| Keyword | Value | Description | +| ------------- | ------------------ | ------------------------------------------------------------ | +| action | measure | Enables IMA measurement | +| | dont_measure | Disables IMA measurement | +| | appraise | Enables IMA appraisal | +| | dont_appraise | Disables IMA appraisal | +| | audit | Enables audit | +| func | FILE_CHECK | File to be opened | +| | MODULE_CHECK | Kernel module file to be loaded | +| | MMAP_CHECK | Dynamic library file to be mapped to the memory space of the process | +| | BRPM_CHECK | File to be executed (excluding script files opened by programs such as `/bin/hash`) | +| | POLICY_CHECK | File to be loaded as a supplement to the IMA policy | +| | FIRMWARE_CHECK | Firmware to be loaded into memory | +| | DIGEST_LIST_CHECK | Digest list file to be loaded into the kernel | +| | KEXEC_KERNEL_CHECK | kexec kernel to be switched to | +| mask | MAY_EXEC | Executes a file | +| | MAY_WRITE | Writes data to a file This operation is not recommended because it is restricted by open source mechanisms such as echo and vim (the essence of modification is to create a temporary file and then rename it). The IMA measurement of **MAY\_WRITE** is not triggered each time the file is modified. | +| | MAY_READ | Reads a file | +| | MAY_APPEND | Extends file attributes | +| fsmagic | fsmagic=xxx | Hexadecimal magic number of the file system type | +| fsuuid | fsuuid=xxx | UUID of a system device. The value is a hexadecimal string of 16 characters. | +| fowner | fowner=xxx | User ID of the file owner | +| uid | uid=xxx | ID of the user who operates the file | +| obj_type | obj_type=xxx_t | File type (based on the SELinux tag) | +| pcr | pcr= | Selects the PCR used to extend the measurement values in the TPM. The default value is 10. | +| appraise_type | imasig | Signature-based IMA appraisal | +| | meta_immutable | Evaluates the extended attributes of the file based on signatures (supporting the digest list). | + +> Note: **PATH\_CHECK** is equivalent to **FILE\_CHECK**, and **FILE\_MMAP** is equivalent to **MMAP\_CHECK**. They are not mentioned in this table. + +#### IMA Native Startup Parameters + +The following table lists the kernel startup parameters of the native IMA. + +| Parameter | Value | Description | +| ---------------- | ------------ | ------------------------------------------------------------ | +| ima_appraise | off | Disables the IMA appraisal mode. The integrity check is not performed when the file is accessed and no new reference value is generated for the file. | +| | enforce | Enables the IMA appraisal enforcing mode to perform the integrity check when the file is accessed. That is, the file digest value is calculated and compared with the reference value. If the comparison fails, the file access is rejected. In this case, the IMA generates a new reference value for the new file. | +| | fix | Enables the IMA repair mode. In this mode, the reference value of a protected file can be updated. | +| | log | Enables the IMA appraisal log mode to perform the integrity check when the file is accessed. However, commands can be executed even if the check fails, and only logs are recorded. | +| ima_policy | tcb | Measures all file execution, dynamic library mapping, kernel module import, and device driver loading. The file read behavior of the root user is also measured. | +| | appraise_tcb | Evaluates all files whose owner is the root user. | +| | secure_boot | Evaluates the kernel module import, hardware driver loading, kexec kernel switchover, and IMA policies. The prerequisite is that these files have IMA signatures. | +| ima_tcb | None | Equivalent to **ima\_policy=tcb**. | +| ima_appraise_tcb | None | Equivalent to **ima\_policy=appraise\_tcb**. | +| ima_hash | sha1/md5/... | IMA digest algorithm. The default value is sha1. | +| ima_template | ima | IMA measurement extension template | +| | ima-ng | IMA measurement extension template | +| | ima-sig | IMA measurement extension template | +| integrity_audit | 0 | Basic integrity audit information (default) | +| | 1 | Additional integrity audit information | + +> Note: The **ima\_policy** parameter can specify multiple values at the same time, for example, **ima\_policy=tcb\|appraise\_tcb**. After the system is started, the IMA policy of the system is the sum of the policies for the two parameters. + +The IMA policy for the `ima_policy=tcb` startup parameter is as follows: + +``` +# PROC_SUPER_MAGIC = 0x9fa0 +dont_measure fsmagic=0x9fa0 +# SYSFS_MAGIC = 0x62656572 +dont_measure fsmagic=0x62656572 +# DEBUGFS_MAGIC = 0x64626720 +dont_measure fsmagic=0x64626720 +# TMPFS_MAGIC = 0x01021994 +dont_measure fsmagic=0x1021994 +# DEVPTS_SUPER_MAGIC=0x1cd1 +dont_measure fsmagic=0x1cd1 +# BINFMTFS_MAGIC=0x42494e4d +dont_measure fsmagic=0x42494e4d +# SECURITYFS_MAGIC=0x73636673 +dont_measure fsmagic=0x73636673 +# SELINUX_MAGIC=0xf97cff8c +dont_measure fsmagic=0xf97cff8c +# SMACK_MAGIC=0x43415d53 +dont_measure fsmagic=0x43415d53 +# CGROUP_SUPER_MAGIC=0x27e0eb +dont_measure fsmagic=0x27e0eb +# CGROUP2_SUPER_MAGIC=0x63677270 +dont_measure fsmagic=0x63677270 +# NSFS_MAGIC=0x6e736673 +dont_measure fsmagic=0x6e736673 +measure func=MMAP_CHECK mask=MAY_EXEC +measure func=BPRM_CHECK mask=MAY_EXEC +measure func=FILE_CHECK mask=MAY_READ uid=0 +measure func=MODULE_CHECK +measure func=FIRMWARE_CHECK +``` + +The IMA policy for the `ima_policy=tcb_appraise` startup parameter is as follows: + +``` +# PROC_SUPER_MAGIC = 0x9fa0 +dont_appraise fsmagic=0x9fa0 +# SYSFS_MAGIC = 0x62656572 +dont_appraise fsmagic=0x62656572 +# DEBUGFS_MAGIC = 0x64626720 +dont_appraise fsmagic=0x64626720 +# TMPFS_MAGIC = 0x01021994 +dont_appraise fsmagic=0x1021994 +# RAMFS_MAGIC +dont_appraise fsmagic=0x858458f6 +# DEVPTS_SUPER_MAGIC=0x1cd1 +dont_appraise fsmagic=0x1cd1 +# BINFMTFS_MAGIC=0x42494e4d +dont_appraise fsmagic=0x42494e4d +# SECURITYFS_MAGIC=0x73636673 +dont_appraise fsmagic=0x73636673 +# SELINUX_MAGIC=0xf97cff8c +dont_appraise fsmagic=0xf97cff8c +# SMACK_MAGIC=0x43415d53 +dont_appraise fsmagic=0x43415d53 +# NSFS_MAGIC=0x6e736673 +dont_appraise fsmagic=0x6e736673 +# CGROUP_SUPER_MAGIC=0x27e0eb +dont_appraise fsmagic=0x27e0eb +# CGROUP2_SUPER_MAGIC=0x63677270 +dont_appraise fsmagic=0x63677270 +appraise fowner=0 +``` + +The IMA policy for the `ima_policy=secure_boot` startup parameter is as follows: + +``` +appraise func=MODULE_CHECK appraise_type=imasig +appraise func=FIRMWARE_CHECK appraise_type=imasig +appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig +appraise func=POLICY_CHECK appraise_type=imasig +``` + +#### IMA Digest List Startup Parameters + +The kernel startup parameters added to the IMA digest list feature are as follows: + +| Parameter | Value | Description | +| ------------------------ | ----------------------- | ------------------------------------------------------------ | +| integrity | 0 | Disables the IMA feature (by default) | +| | 1 | Enables the IMA feature | +| ima_appraise | off | Disables the IMA appraisal mode | +| | enforce-evm | Enables the IMA appraisal forced mode to perform the integrity check when the file is accessed and control the access. | +| ima_appraise_digest_list | digest | When the EVM is disabled, the abstract list is used for IMA appraise. The abstract list protects both the content and extended attributes of the file. | +| | digest-nometadata | If the EVM digest value does not exist, the integrity check is performed only based on the IMA digest value (the file extended attribute is not protected). | +| evm | fix | Allows for any modification to the extended attribute (even if the modification causes the failure to verify the integrity of the extended attribute). | +| | ignore | Allowed to modify the extended attribute only when it does not exist or is incorrect. | +| ima_policy | exec_tcb | IMA measurement policy. For details, see the following policy description. | +| | appraise_exec_tcb | IMA appraisal policy. For details, see the following policy description. | +| | appraise_exec_immutable | IMA appraisal policy. For details, see the following policy description. | +| ima_digest_list_pcr | 11 | Uses PCR 11 instead of PCR 10, and uses only the digest list for measurement. | +| | +11 | The PCR 10 measurement is reserved. When the TPM chip is available, the measurement result is written to the TPM chip. | +| initramtmpfs | None | Adds the support for **tmpfs**. | + + + +The IMA policy for the `ima_policy=exec_tcb` startup parameter is as follows: + +``` +dont_measure fsmagic=0x9fa0 +dont_measure fsmagic=0x62656572 +dont_measure fsmagic=0x64626720 +dont_measure fsmagic=0x1cd1 +dont_measure fsmagic=0x42494e4d +dont_measure fsmagic=0x73636673 +dont_measure fsmagic=0xf97cff8c +dont_measure fsmagic=0x43415d53 +dont_measure fsmagic=0x27e0eb +dont_measure fsmagic=0x63677270 +dont_measure fsmagic=0x6e736673 +measure func=MMAP_CHECK mask=MAY_EXEC +measure func=BPRM_CHECK mask=MAY_EXEC +measure func=MODULE_CHECK +measure func=FIRMWARE_CHECK +measure func=POLICY_CHECK +measure func=DIGEST_LIST_CHECK +measure parser +``` + +The IMA policy for the `ima_policy=appraise_exec_tcb` startup parameter is as follows: + +``` +appraise func=MODULE_CHECK appraise_type=imasig +appraise func=FIRMWARE_CHECK appraise_type=imasig +appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig +appraise func=POLICY_CHECK appraise_type=imasig +appraise func=DIGEST_LIST_CHECK appraise_type=imasig +dont_appraise fsmagic=0x9fa0 +dont_appraise fsmagic=0x62656572 +dont_appraise fsmagic=0x64626720 +dont_appraise fsmagic=0x858458f6 +dont_appraise fsmagic=0x1cd1 +dont_appraise fsmagic=0x42494e4d +dont_appraise fsmagic=0x73636673 +dont_appraise fsmagic=0xf97cff8c +dont_appraise fsmagic=0x43415d53 +dont_appraise fsmagic=0x6e736673 +dont_appraise fsmagic=0x27e0eb +dont_appraise fsmagic=0x63677270 +``` + +The IMA policy for the `ima_policy=appraise_exec_immutable` startup parameter is as follows: + +``` +appraise func=BPRM_CHECK appraise_type=imasig appraise_type=meta_immutable +appraise func=MMAP_CHECK +appraise parser appraise_type=imasig +``` + +#### IMA Kernel Compilation Options + +The native IMA provides the following compilation options: + +| Compilation Option | Description | +| -------------------------------- | ------------------------------------------------------- | +| CONFIG_INTEGRITY | IMA/EVM compilation switch | +| CONFIG_INTEGRITY_SIGNATURE | Enables IMA signature verification | +| CONFIG_INTEGRITY_ASYMMETRIC_KEYS | Enables IMA asymmetric signature verification | +| CONFIG_INTEGRITY_TRUSTED_KEYRING | Enables IMA/EVM key ring | +| CONFIG_INTEGRITY_AUDIT | Compiles the IMA audit module | +| CONFIG_IMA | IMA compilation switch | +| CONFIG_IMA_WRITE_POLICY | Allows updating the IMA policy in the running phase | +| CONFIG_IMA_MEASURE_PCR_IDX | Allows specifying the PCR number of the IMA measurement | +| CONFIG_IMA_LSM_RULES | Allows configuring LSM rules | +| CONFIG_IMA_APPRAISE | IMA appraisal compilation switch | +| IMA_APPRAISE_BOOTPARAM | Enables IMA appraisal startup parameters | +| CONFIG_EVM | EVM compilation switch | + +The additional compilation options provided by the IMA Digest Lists extension are as follows: + +| Compilation Option | Description | +| ------------------ | ----------------------------------- | +| CONFIG_DIGEST_LIST | Enables the IMA Digest List feature | + +#### IMA Performance Reference Data + +The following figure compares the performance when IMA is disabled, native IMA is enabled, and IMA digest list is enabled. + +![img](./figures/ima_performance.png) \ No newline at end of file diff --git a/docs/en/docs/20.09/docs/Administration/user-and-user-group-management.md b/docs/en/docs/Administration/user-and-user-group-management.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/user-and-user-group-management.md rename to docs/en/docs/Administration/user-and-user-group-management.md diff --git a/docs/en/docs/20.09/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 97% rename from docs/en/docs/20.09/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 13e22d658218035a9ac656dfdf56cc3fb31c69c4..f29581d9fb787a9a0f263dfbf8102679bbde96de 100644 --- a/docs/en/docs/20.09/docs/Administration/using-the-dnf-to-manage-software-packages.md +++ b/docs/en/docs/Administration/using-the-dnf-to-manage-software-packages.md @@ -39,12 +39,12 @@ DNF is a Linux software package management tool used to manage RPM software pack The main configuration file of the DNF is /etc/dnf/dnf.conf which consists of two parts: -- The **main** part in the file stores the global settings of the DNF. +- The **main** part in the file stores the global settings of the DNF. -- The **repository** part in the file stores the settings of the software source. You can add one or more **repository** sections to the file. +- The **repository** part in the file stores the settings of the software source. You can add one or more **repository** sections to the file. + +In addition, the /etc/yum.repos.d directory stores one or more repo source files, which define different repositories. -In addition, the /etc/yum.repos.d directory stores one or more repo source files, which define different repositories. - You can configure a software source by either directly configuring the /etc/dnf/dnf.conf file or configuring the .repo file in the /etc/yum.repos.d directory. #### Configuring the main Part @@ -160,22 +160,21 @@ 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. + 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 **root** user to add the openeuler repo source to the openEuler_aarch64.repo file. + For example, run the following command as the **root** user 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.09/OS/aarch64/ + [OS] + name=openEuler-$releasever - OS + baseurl=https://repo.openeuler.org/openEuler-20.09/OS/$basearch/ enabled=1 gpgcheck=1 - gpgkey=https://repo.openeuler.org/openEuler-20.09/OS/aarch64/RPM-GPG-KEY-openEuler - + gpgkey=https://repo.openeuler.org/openEuler-20.09/OS/$basearch/RPM-GPG-KEY-openEuler ``` >![](./public_sys-resources/icon-note.gif) **NOTE:** @@ -327,7 +326,7 @@ Available Packages Name : httpd Version : 2.4.34 Release : 8.h5.oe1 -Arch : aarch64 +Arch : aarch64 Size : 1.2 M Repo : Local Summary : Apache HTTP Server @@ -480,7 +479,7 @@ dnf group install groupid For example, to install the software package group of Development Tools, run the following command: ``` -# dnf group install "Development Tools" +# dnf group install "Development Tools" ``` ``` @@ -501,7 +500,7 @@ dnf group remove groupid For example, to delete the software package group of Development Tools, run the following command: ``` -# dnf group remove "Development Tools" +# dnf group remove "Development Tools" ``` ``` diff --git a/docs/en/docs/20.09/docs/Administration/using-the-kae.md b/docs/en/docs/Administration/using-the-kae.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/using-the-kae.md rename to docs/en/docs/Administration/using-the-kae.md diff --git a/docs/en/docs/20.09/docs/Administration/viewing-system-information.md b/docs/en/docs/Administration/viewing-system-information.md similarity index 100% rename from docs/en/docs/20.09/docs/Administration/viewing-system-information.md rename to docs/en/docs/Administration/viewing-system-information.md diff --git a/docs/en/docs/ApplicationDev/FAQ.md b/docs/en/docs/ApplicationDev/FAQ.md new file mode 100644 index 0000000000000000000000000000000000000000..8b355eeed2a4e1db834a8383829dfebc77752f89 --- /dev/null +++ b/docs/en/docs/ApplicationDev/FAQ.md @@ -0,0 +1,27 @@ +# FAQ + + + +- [FAQ](#faq) + - [The self-compilation of some applications that depend on the **java-devel** package fails.](#部分依赖java-devel的应用程序自编译失败) + + + +## The self-compilation of some applications that depend on the **java-devel** package fails. + +### Symptom + +The self-compilation of some applications that depend on java-devel fails when the rpmbuild command is executed. + +### Cause Analysis + +To provide OpenJDK features that are updated and compatible with Java applications, the openEuler provides OpenJDK of multiple versions, such as OpenJDK 1.8.0 and OpenJDK 11. The compilation of some applications depends on the **java-devel** package. When the **java-devel** package is installed, the system installs java-11-openjdk of a later version by default. As a result, the compilation of these applications fails. + +### Solution + +You need to run the following command to install java-1.8.0-openjdk and then run the **rpmbuild** command to perform self-compilation: + +``` +# yum install java-1.8.0-openjdk + +``` \ No newline at end of file diff --git a/docs/en/docs/20.09/docs/ApplicationDev/application-development.md b/docs/en/docs/ApplicationDev/application-development.md similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/application-development.md rename to docs/en/docs/ApplicationDev/application-development.md diff --git a/docs/en/docs/20.09/docs/ApplicationDev/building-an-rpm-package.md b/docs/en/docs/ApplicationDev/building-an-rpm-package.md similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/building-an-rpm-package.md rename to docs/en/docs/ApplicationDev/building-an-rpm-package.md diff --git a/docs/en/docs/20.09/docs/ApplicationDev/figures/add-file-page.png b/docs/en/docs/ApplicationDev/figures/add-file-page.png similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/figures/add-file-page.png rename to docs/en/docs/ApplicationDev/figures/add-file-page.png diff --git a/docs/en/docs/20.09/docs/ApplicationDev/figures/branch-confirmation-page.png b/docs/en/docs/ApplicationDev/figures/branch-confirmation-page.png similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/figures/branch-confirmation-page.png rename to docs/en/docs/ApplicationDev/figures/branch-confirmation-page.png diff --git a/docs/en/docs/20.09/docs/ApplicationDev/figures/create-package-page.png b/docs/en/docs/ApplicationDev/figures/create-package-page.png similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/figures/create-package-page.png rename to docs/en/docs/ApplicationDev/figures/create-package-page.png diff --git a/docs/en/docs/20.09/docs/ApplicationDev/figures/creating-a-software-package.png b/docs/en/docs/ApplicationDev/figures/creating-a-software-package.png similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/figures/creating-a-software-package.png rename to docs/en/docs/ApplicationDev/figures/creating-a-software-package.png diff --git a/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/docs/ApplicationDev/figures/en-us_image_0229243671.png b/docs/en/docs/ApplicationDev/figures/en-us_image_0229243671.png similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/figures/en-us_image_0229243671.png rename to docs/en/docs/ApplicationDev/figures/en-us_image_0229243671.png diff --git a/docs/en/docs/20.09/docs/ApplicationDev/figures/en-us_image_0229243702.png b/docs/en/docs/ApplicationDev/figures/en-us_image_0229243702.png similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/figures/en-us_image_0229243702.png rename to docs/en/docs/ApplicationDev/figures/en-us_image_0229243702.png diff --git a/docs/en/docs/20.09/docs/ApplicationDev/figures/en-us_image_0229243704.png b/docs/en/docs/ApplicationDev/figures/en-us_image_0229243704.png similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/figures/en-us_image_0229243704.png rename to docs/en/docs/ApplicationDev/figures/en-us_image_0229243704.png diff --git a/docs/en/docs/20.09/docs/ApplicationDev/figures/en-us_image_0229243712.png b/docs/en/docs/ApplicationDev/figures/en-us_image_0229243712.png similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/figures/en-us_image_0229243712.png rename to docs/en/docs/ApplicationDev/figures/en-us_image_0229243712.png diff --git a/docs/en/docs/20.09/docs/ApplicationDev/figures/repositories-page.png b/docs/en/docs/ApplicationDev/figures/repositories-page.png similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/figures/repositories-page.png rename to docs/en/docs/ApplicationDev/figures/repositories-page.png diff --git a/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/docs/ApplicationDev/figures/succeeded-page.png b/docs/en/docs/ApplicationDev/figures/succeeded-page.png similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/figures/succeeded-page.png rename to docs/en/docs/ApplicationDev/figures/succeeded-page.png diff --git a/docs/en/docs/20.09/docs/ApplicationDev/preparation.md b/docs/en/docs/ApplicationDev/preparation.md similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/preparation.md rename to docs/en/docs/ApplicationDev/preparation.md diff --git a/docs/en/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-caution.gif b/docs/en/docs/ApplicationDev/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-caution.gif rename to docs/en/docs/ApplicationDev/public_sys-resources/icon-caution.gif diff --git a/docs/en/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-danger.gif b/docs/en/docs/ApplicationDev/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-danger.gif rename to docs/en/docs/ApplicationDev/public_sys-resources/icon-danger.gif diff --git a/docs/en/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-note.gif b/docs/en/docs/ApplicationDev/public_sys-resources/icon-note.gif similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-note.gif rename to docs/en/docs/ApplicationDev/public_sys-resources/icon-note.gif diff --git a/docs/en/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-notice.gif b/docs/en/docs/ApplicationDev/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-notice.gif rename to docs/en/docs/ApplicationDev/public_sys-resources/icon-notice.gif diff --git a/docs/en/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-tip.gif b/docs/en/docs/ApplicationDev/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-tip.gif rename to docs/en/docs/ApplicationDev/public_sys-resources/icon-tip.gif diff --git a/docs/en/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-warning.gif b/docs/en/docs/ApplicationDev/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-warning.gif rename to docs/en/docs/ApplicationDev/public_sys-resources/icon-warning.gif diff --git a/docs/en/docs/20.09/docs/ApplicationDev/using-gcc-for-compilation.md b/docs/en/docs/ApplicationDev/using-gcc-for-compilation.md similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/using-gcc-for-compilation.md rename to docs/en/docs/ApplicationDev/using-gcc-for-compilation.md diff --git a/docs/en/docs/20.09/docs/ApplicationDev/using-jdk-for-compilation.md b/docs/en/docs/ApplicationDev/using-jdk-for-compilation.md similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/using-jdk-for-compilation.md rename to docs/en/docs/ApplicationDev/using-jdk-for-compilation.md diff --git a/docs/en/docs/20.09/docs/ApplicationDev/using-make-for-compilation.md b/docs/en/docs/ApplicationDev/using-make-for-compilation.md similarity index 100% rename from docs/en/docs/20.09/docs/ApplicationDev/using-make-for-compilation.md rename to docs/en/docs/ApplicationDev/using-make-for-compilation.md diff --git a/docs/en/docs/20.09/docs/Container/appendix-1.md b/docs/en/docs/Container/appendix-1.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/appendix-1.md rename to docs/en/docs/Container/appendix-1.md diff --git a/docs/en/docs/20.09/docs/Container/appendix-2.md b/docs/en/docs/Container/appendix-2.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/appendix-2.md rename to docs/en/docs/Container/appendix-2.md diff --git a/docs/en/docs/20.09/docs/Container/appendix.md b/docs/en/docs/Container/appendix.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/appendix.md rename to docs/en/docs/Container/appendix.md diff --git a/docs/en/docs/20.09/docs/Container/application-scenarios-2.md b/docs/en/docs/Container/application-scenarios-2.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/application-scenarios-2.md rename to docs/en/docs/Container/application-scenarios-2.md diff --git a/docs/en/docs/20.09/docs/Container/application-scenarios.md b/docs/en/docs/Container/application-scenarios.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/application-scenarios.md rename to docs/en/docs/Container/application-scenarios.md diff --git a/docs/en/docs/20.09/docs/Container/checking-the-container-health-status.md b/docs/en/docs/Container/checking-the-container-health-status.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/checking-the-container-health-status.md rename to docs/en/docs/Container/checking-the-container-health-status.md diff --git a/docs/en/docs/20.09/docs/Container/command-reference.md b/docs/en/docs/Container/command-reference.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/command-reference.md rename to docs/en/docs/Container/command-reference.md diff --git a/docs/en/docs/20.09/docs/Container/configurable-cgroup-path.md b/docs/en/docs/Container/configurable-cgroup-path.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/configurable-cgroup-path.md rename to docs/en/docs/Container/configurable-cgroup-path.md diff --git a/docs/en/docs/20.09/docs/Container/configuring-networking-for-a-secure-container.md b/docs/en/docs/Container/configuring-networking-for-a-secure-container.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/configuring-networking-for-a-secure-container.md rename to docs/en/docs/Container/configuring-networking-for-a-secure-container.md diff --git a/docs/en/docs/20.09/docs/Container/configuring-resources-for-a-secure-container.md b/docs/en/docs/Container/configuring-resources-for-a-secure-container.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/configuring-resources-for-a-secure-container.md rename to docs/en/docs/Container/configuring-resources-for-a-secure-container.md diff --git a/docs/en/docs/20.09/docs/Container/container-engine.md b/docs/en/docs/Container/container-engine.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/container-engine.md rename to docs/en/docs/Container/container-engine.md diff --git a/docs/en/docs/20.09/docs/Container/container-management-1.md b/docs/en/docs/Container/container-management-1.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/container-management-1.md rename to docs/en/docs/Container/container-management-1.md diff --git a/docs/en/docs/20.09/docs/Container/container-management-2.md b/docs/en/docs/Container/container-management-2.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/container-management-2.md rename to docs/en/docs/Container/container-management-2.md diff --git a/docs/en/docs/20.09/docs/Container/container-management.md b/docs/en/docs/Container/container-management.md similarity index 99% rename from docs/en/docs/20.09/docs/Container/container-management.md rename to docs/en/docs/Container/container-management.md index cc81d13b9c691fb1efc0253043f442eedf07bfe6..ef6dc65d475f8680e1908be5eb7c62a718944d89 100644 --- a/docs/en/docs/20.09/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.

+
diff --git a/docs/en/docs/20.09/docs/Container/container-resource-management.md b/docs/en/docs/Container/container-resource-management.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/container-resource-management.md rename to docs/en/docs/Container/container-resource-management.md diff --git a/docs/en/docs/20.09/docs/Container/container.md b/docs/en/docs/Container/container.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/container.md rename to docs/en/docs/Container/container.md diff --git a/docs/en/docs/20.09/docs/Container/cri.md b/docs/en/docs/Container/cri.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/cri.md rename to docs/en/docs/Container/cri.md diff --git a/docs/en/docs/20.09/docs/Container/docker-container.md b/docs/en/docs/Container/docker-container.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/docker-container.md rename to docs/en/docs/Container/docker-container.md diff --git a/docs/en/docs/20.09/docs/Container/dynamically-loading-the-kernel-module.md b/docs/en/docs/Container/dynamically-loading-the-kernel-module.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/dynamically-loading-the-kernel-module.md rename to docs/en/docs/Container/dynamically-loading-the-kernel-module.md diff --git a/docs/en/docs/20.09/docs/Container/dynamically-managing-container-resources-(syscontainer-tools).md b/docs/en/docs/Container/dynamically-managing-container-resources-(syscontainer-tools).md similarity index 100% rename from docs/en/docs/20.09/docs/Container/dynamically-managing-container-resources-(syscontainer-tools).md rename to docs/en/docs/Container/dynamically-managing-container-resources-(syscontainer-tools).md diff --git a/docs/en/docs/20.09/docs/Container/environment-variable-persisting.md b/docs/en/docs/Container/environment-variable-persisting.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/environment-variable-persisting.md rename to docs/en/docs/Container/environment-variable-persisting.md diff --git a/docs/en/docs/20.09/docs/Container/figures/en-us_image_0183048952.png b/docs/en/docs/Container/figures/en-us_image_0183048952.png similarity index 100% rename from docs/en/docs/20.09/docs/Container/figures/en-us_image_0183048952.png rename to docs/en/docs/Container/figures/en-us_image_0183048952.png diff --git a/docs/en/docs/20.09/docs/Container/figures/en-us_image_0221924926.png b/docs/en/docs/Container/figures/en-us_image_0221924926.png similarity index 100% rename from docs/en/docs/20.09/docs/Container/figures/en-us_image_0221924926.png rename to docs/en/docs/Container/figures/en-us_image_0221924926.png diff --git a/docs/en/docs/20.09/docs/Container/figures/en-us_image_0221924927.png b/docs/en/docs/Container/figures/en-us_image_0221924927.png similarity index 100% rename from docs/en/docs/20.09/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/20.09/docs/Container/figures/isula-build_arch.png b/docs/en/docs/Container/figures/isula-build_arch.png similarity index 100% rename from docs/en/docs/20.09/docs/Container/figures/isula-build_arch.png rename to docs/en/docs/Container/figures/isula-build_arch.png diff --git a/docs/en/docs/20.09/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 docs/en/docs/20.09/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/20.09/docs/Container/figures/secure-container.png b/docs/en/docs/Container/figures/secure-container.png similarity index 100% rename from docs/en/docs/20.09/docs/Container/figures/secure-container.png rename to docs/en/docs/Container/figures/secure-container.png diff --git a/docs/en/docs/20.09/docs/Container/image-management-1.md b/docs/en/docs/Container/image-management-1.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/image-management-1.md rename to docs/en/docs/Container/image-management-1.md diff --git a/docs/en/docs/20.09/docs/Container/image-management-2.md b/docs/en/docs/Container/image-management-2.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/image-management-2.md rename to docs/en/docs/Container/image-management-2.md diff --git a/docs/en/docs/20.09/docs/Container/image-management.md b/docs/en/docs/Container/image-management.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/image-management.md rename to docs/en/docs/Container/image-management.md diff --git a/docs/en/docs/20.09/docs/Container/installation-and-deployment-1.md b/docs/en/docs/Container/installation-and-deployment-1.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/installation-and-deployment-1.md rename to docs/en/docs/Container/installation-and-deployment-1.md diff --git a/docs/en/docs/20.09/docs/Container/installation-and-deployment-2.md b/docs/en/docs/Container/installation-and-deployment-2.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/installation-and-deployment-2.md rename to docs/en/docs/Container/installation-and-deployment-2.md diff --git a/docs/en/docs/20.09/docs/Container/installation-configuration.md b/docs/en/docs/Container/installation-configuration.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/installation-configuration.md rename to docs/en/docs/Container/installation-configuration.md diff --git a/docs/en/docs/20.09/docs/Container/installation-guideline.md b/docs/en/docs/Container/installation-guideline.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/installation-guideline.md rename to docs/en/docs/Container/installation-guideline.md diff --git a/docs/en/docs/20.09/docs/Container/installation-upgrade-Uninstallation.md b/docs/en/docs/Container/installation-upgrade-Uninstallation.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/installation-upgrade-Uninstallation.md rename to docs/en/docs/Container/installation-upgrade-Uninstallation.md diff --git a/docs/en/docs/20.09/docs/Container/interconnection-with-the-cni-network.md b/docs/en/docs/Container/interconnection-with-the-cni-network.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/interconnection-with-the-cni-network.md rename to docs/en/docs/Container/interconnection-with-the-cni-network.md diff --git a/docs/en/docs/20.09/docs/Container/isula-build.md b/docs/en/docs/Container/isula-build.md similarity index 96% rename from docs/en/docs/20.09/docs/Container/isula-build.md rename to docs/en/docs/Container/isula-build.md index 986f85259b05df8d61d1b94b1ba416f8f89a0ff3..5b168754501bc7c896e8bc4d96786179e297c8c5 100644 --- a/docs/en/docs/20.09/docs/Container/isula-build.md +++ b/docs/en/docs/Container/isula-build.md @@ -1,3 +1,5 @@ +# Container Image Building + @@ -35,6 +37,7 @@ +## 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. @@ -46,9 +49,9 @@ Note: - Currently, isula-build supports only Docker images. -# Installation +## Installation -## Preparations +### Preparations To ensure that isula-build can be successfully installed, the following software and hardware requirements must be met: @@ -56,7 +59,7 @@ To ensure that isula-build can be successfully installed, the following software - Supported OS: openEuler - You have the permissions of the root user. -### Installing isula-build +#### Installing isula-build Before using isula-build to build a container image, you need to install the following software packages: @@ -89,9 +92,9 @@ Before using isula-build to build a container image, you need to install the fol > **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 and Managing the isula-build Service -## Configuring 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." @@ -136,14 +139,14 @@ Currently, the isula-build server contains the following configuration file: -## Managing the isula-build Service +### 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 +#### (Recommended) Using systemd for Management You can run the following systemd commands to start, stop, and restart the isula-build service: @@ -171,7 +174,7 @@ The systemd service file of the isula-build software installation package is sto sudo systemctl daemon-reload ``` -### Directly Running isula-builder +#### 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: @@ -191,9 +194,9 @@ Start the isula-build service. For example, to specify the local persistency dir sudo isula-builder --dataroot "/var/lib/isula-build" --debug=false ``` -# Usage Guidelines +## Usage Guidelines -## Prerequisites +### 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. @@ -212,7 +215,7 @@ sudo yum install -y docker-engine -## Overview +### 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: @@ -239,7 +242,7 @@ The following describes how to use these commands in detail. -## ctr-img: Container Image Management +### 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: @@ -247,7 +250,7 @@ The isula-build command groups all container image management commands into the isula-build ctr-img [command] ``` -### build: Container Image Build +#### build: Container Image Build The subcommand build of the ctr-img command is used to build container images. The command is as follows: @@ -413,7 +416,7 @@ $ sudo isula-build ctr-img build --cap-add CAP_SYS_ADMIN --cap-add CAP_SYS_PTRAC -### image: Viewing Local Persistent Build Images +#### image: Viewing Local Persistent Build Images You can run the images command to view the images in the local persistent storage. @@ -431,7 +434,7 @@ localhost:5000/library/alpine latest a24bb4013296 -### import: Importing a Basic Container Image +#### import: Importing a Basic Container Image openEuler releases a basic container image, for example, openEuler-docker.x86_64.tar.xz, with the version. You can run the `ctr-img import` command to import the image to isula-build. @@ -444,13 +447,13 @@ isula-build ctr-img import [flags] Example: ```sh -$ sudo isula-build ctr-img import ./openEuler-docker.x86_64.tar.xz openeuler:20.03 +$ sudo isula-build ctr-img import ./openEuler-docker.x86_64.tar.xz openeuler:20.09 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 +openeuler 20.09 7317851cd2ab 2020-08-01 06:25:34 500 MB ---------------------------------------------- -------------------- ----------------- ------------------------ ------------ ``` @@ -459,7 +462,7 @@ openeuler 20.03 7317851cd2 -### load: Importing Cascade Images +#### 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. @@ -505,7 +508,7 @@ Loaded image as c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e -### rm: Deleting a Local Persistent Image +#### 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: @@ -528,7 +531,7 @@ Deleted: sha256:eeba1bfe9fca569a894d525ed291bdaef389d28a88c288914c1a9db7261ad12c -### save: Exporting Cascade Images +#### save: Exporting Cascade Images You can run the save command to export the cascade images to the local disk. The command is as follows: @@ -566,7 +569,7 @@ Save success with image: 21c3e96ac411 -### tag: Tagging Local Persistent Images +#### 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: @@ -595,7 +598,7 @@ alpine v1 a24bb4013296 -## info: Viewing the Operating Environment and System Information +### 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: @@ -632,7 +635,7 @@ $ sudo isula-build info -H oepkgs.net ``` -## login: Logging In to the Remote Image Repository +### 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: @@ -663,7 +666,7 @@ Enter the password in interactive mode. Login Succeeded ``` -## logout: Logging Out of the Remote Image Repository +### 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: @@ -685,7 +688,7 @@ Example: Removed authentications ``` -## version: Querying the isula-build Version +### version: Querying the isula-build Version You can run the version command to view the current version information. @@ -707,11 +710,11 @@ You can run the version command to view the current version information. ``` -# Directly Integrating a Container Engine +## 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 +### Integration with iSulad Images that are successfully built can be directly exported to the iSulad. @@ -734,7 +737,7 @@ busybox 2.0 2d414a5cad6d 2020-08-01 06:41: > - 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/tmp/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/tmp/isula-build-tmp-%v.tar` file. -## Integration with Docker +### Integration with Docker Images that are successfully built can be directly exported to the Docker daemon. @@ -756,10 +759,10 @@ busybox 2.0 2d414a5c > > - The isula-build and Docker must be on the same node. -# \Appendix +## \Appendix -## Command Line Parameters +### Command Line Parameters **Table 1** Parameters in the ctr-img build command @@ -806,11 +809,11 @@ busybox 2.0 2d414a5c | -------- | --------- | ------------------------------------ | | logout | -a, --all | Boolean, which indicates whether to log out of all logged-in image repositories. | -## Communication Matrix +### 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 +### File and Permission - All isula-build operations must be performed by the root user. diff --git a/docs/en/docs/20.09/docs/Container/isulad-container-engine.md b/docs/en/docs/Container/isulad-container-engine.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/isulad-container-engine.md rename to docs/en/docs/Container/isulad-container-engine.md 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/docs/en/docs/20.09/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 100% rename from docs/en/docs/20.09/docs/Container/managing-the-lifecycle-of-a-secure-container.md rename to docs/en/docs/Container/managing-the-lifecycle-of-a-secure-container.md diff --git a/docs/en/docs/20.09/docs/Container/maximum-number-of-handles.md b/docs/en/docs/Container/maximum-number-of-handles.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/maximum-number-of-handles.md rename to docs/en/docs/Container/maximum-number-of-handles.md diff --git a/docs/en/docs/20.09/docs/Container/monitoring-secure-containers.md b/docs/en/docs/Container/monitoring-secure-containers.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/monitoring-secure-containers.md rename to docs/en/docs/Container/monitoring-secure-containers.md diff --git a/docs/en/docs/20.09/docs/Container/privileged-container.md b/docs/en/docs/Container/privileged-container.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/privileged-container.md rename to docs/en/docs/Container/privileged-container.md diff --git a/docs/en/docs/20.09/docs/Container/public_sys-resources/icon-caution.gif b/docs/en/docs/Container/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/en/docs/20.09/docs/Container/public_sys-resources/icon-caution.gif rename to docs/en/docs/Container/public_sys-resources/icon-caution.gif diff --git a/docs/en/docs/20.09/docs/Container/public_sys-resources/icon-danger.gif b/docs/en/docs/Container/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/en/docs/20.09/docs/Container/public_sys-resources/icon-danger.gif rename to docs/en/docs/Container/public_sys-resources/icon-danger.gif diff --git a/docs/en/docs/20.09/docs/Container/public_sys-resources/icon-note.gif b/docs/en/docs/Container/public_sys-resources/icon-note.gif similarity index 100% rename from docs/en/docs/20.09/docs/Container/public_sys-resources/icon-note.gif rename to docs/en/docs/Container/public_sys-resources/icon-note.gif diff --git a/docs/en/docs/20.09/docs/Container/public_sys-resources/icon-notice.gif b/docs/en/docs/Container/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/en/docs/20.09/docs/Container/public_sys-resources/icon-notice.gif rename to docs/en/docs/Container/public_sys-resources/icon-notice.gif diff --git a/docs/en/docs/20.09/docs/Container/public_sys-resources/icon-tip.gif b/docs/en/docs/Container/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/en/docs/20.09/docs/Container/public_sys-resources/icon-tip.gif rename to docs/en/docs/Container/public_sys-resources/icon-tip.gif diff --git a/docs/en/docs/20.09/docs/Container/public_sys-resources/icon-warning.gif b/docs/en/docs/Container/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/en/docs/20.09/docs/Container/public_sys-resources/icon-warning.gif rename to docs/en/docs/Container/public_sys-resources/icon-warning.gif diff --git a/docs/en/docs/20.09/docs/Container/querying-information.md b/docs/en/docs/Container/querying-information.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/querying-information.md rename to docs/en/docs/Container/querying-information.md diff --git a/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/docs/Container/secure-container.md b/docs/en/docs/Container/secure-container.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/secure-container.md rename to docs/en/docs/Container/secure-container.md diff --git a/docs/en/docs/20.09/docs/Container/security-and-isolation.md b/docs/en/docs/Container/security-and-isolation.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/security-and-isolation.md rename to docs/en/docs/Container/security-and-isolation.md diff --git a/docs/en/docs/20.09/docs/Container/security-features.md b/docs/en/docs/Container/security-features.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/security-features.md rename to docs/en/docs/Container/security-features.md diff --git a/docs/en/docs/20.09/docs/Container/shared-memory-channels.md b/docs/en/docs/Container/shared-memory-channels.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/shared-memory-channels.md rename to docs/en/docs/Container/shared-memory-channels.md diff --git a/docs/en/docs/20.09/docs/Container/specifying-rootfs-to-create-a-container.md b/docs/en/docs/Container/specifying-rootfs-to-create-a-container.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/specifying-rootfs-to-create-a-container.md rename to docs/en/docs/Container/specifying-rootfs-to-create-a-container.md diff --git a/docs/en/docs/20.09/docs/Container/statistics.md b/docs/en/docs/Container/statistics.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/statistics.md rename to docs/en/docs/Container/statistics.md diff --git a/docs/en/docs/20.09/docs/Container/supporting-oci-hooks.md b/docs/en/docs/Container/supporting-oci-hooks.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/supporting-oci-hooks.md rename to docs/en/docs/Container/supporting-oci-hooks.md diff --git a/docs/en/docs/20.09/docs/Container/system-container.md b/docs/en/docs/Container/system-container.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/system-container.md rename to docs/en/docs/Container/system-container.md diff --git a/docs/en/docs/20.09/docs/Container/uninstallation.md b/docs/en/docs/Container/uninstallation.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/uninstallation.md rename to docs/en/docs/Container/uninstallation.md diff --git a/docs/en/docs/20.09/docs/Container/upgrade-methods.md b/docs/en/docs/Container/upgrade-methods.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/upgrade-methods.md rename to docs/en/docs/Container/upgrade-methods.md diff --git a/docs/en/docs/20.09/docs/Container/usage-guide.md b/docs/en/docs/Container/usage-guide.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/usage-guide.md rename to docs/en/docs/Container/usage-guide.md diff --git a/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/docs/Container/writable-namespace-kernel-parameters.md b/docs/en/docs/Container/writable-namespace-kernel-parameters.md similarity index 100% rename from docs/en/docs/20.09/docs/Container/writable-namespace-kernel-parameters.md rename to docs/en/docs/Container/writable-namespace-kernel-parameters.md diff --git a/docs/en/docs/20.09/docs/Installation/FAQ1.md b/docs/en/docs/Installation/FAQ1.md similarity index 100% rename from docs/en/docs/20.09/docs/Installation/FAQ1.md rename to docs/en/docs/Installation/FAQ1.md diff --git a/docs/en/docs/20.09/docs/Installation/Installation-Guide1.md b/docs/en/docs/Installation/Installation-Guide1.md similarity index 98% rename from docs/en/docs/20.09/docs/Installation/Installation-Guide1.md rename to docs/en/docs/Installation/Installation-Guide1.md index 8635903bf32c5430eb7f311ee485b3ec6de60780..fb04710969679e2d92578dfcfbf9ce32373c4226 100644 --- a/docs/en/docs/20.09/docs/Installation/Installation-Guide1.md +++ b/docs/en/docs/Installation/Installation-Guide1.md @@ -23,7 +23,7 @@ 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 **openEuler12#$** to log in. + 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 @@ -32,7 +32,7 @@ You can log in to the Raspberry Pi in either of the following ways: **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.1.109` command and enter the password `openEuler12#$` to remotely log in to the Raspberry Pi. + 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.1.109` command and enter the password `openeuler` to remotely log in to the Raspberry Pi. ## Configuring the System diff --git a/docs/en/docs/20.09/docs/Installation/Installation-Modes1.md b/docs/en/docs/Installation/Installation-Modes1.md similarity index 86% rename from docs/en/docs/20.09/docs/Installation/Installation-Modes1.md rename to docs/en/docs/Installation/Installation-Modes1.md index 03b6bc1b1cfa74e862c3211b1df212207e4dc9a7..9460054cfaf3b9441a55d6d0635b2168aa52867b 100644 --- a/docs/en/docs/20.09/docs/Installation/Installation-Modes1.md +++ b/docs/en/docs/Installation/Installation-Modes1.md @@ -50,9 +50,9 @@ To format the SD card, perform the following procedure: ### Writing Images to the SD Card > ![](./public_sys-resources/icon-notice.gif) **NOTE:** -If the compressed image file **openEuler-20.09-RaspberryPi.aarch64.img.xz** is obtained, decompress the file to obtain the **openEuler-20.09-RaspberryPi.aarch64.img** image file. +If the compressed image file **openEuler-20.09-raspi-aarch64.img.xz** is obtained, decompress the file to obtain the **openEuler-20.09-raspi-aarch64.img** image file. -To write the **openEuler-20.09-RaspberryPi.aarch64.img** image file to the SD card, perform the following procedure: +To write the **openEuler-20.09-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**. @@ -81,11 +81,11 @@ Run the `fdisk -l` command as the root user to obtain the information of the SD ### Writing Images to the SD Card -1. If the image obtained is compressed, run the `xz -d openEuler-20.09-RaspberryPi.aarch64.img.xz` command to decompress the compressed file to obtain the **openEuler-20.09-RaspberryPi.aarch64.img** image file. Otherwise, skip this step. +1. If the image obtained is compressed, run the `xz -d openEuler-20.09-raspi-aarch64.img.xz` command to decompress the compressed file to obtain the **openEuler-20.09-raspi-aarch64.img** image file. Otherwise, skip this step. -2. Run the following command as the root user to write the `openEuler-20.09-RaspberryPi.aarch64.img` image to the SD card: +2. Run the following command as the root user to write the `openEuler-20.09-raspi-aarch64.img` image to the SD card: - `dd bs=4M if=openEuler-20.09-RaspberryPi.aarch64.img of=/dev/sdb` + `dd bs=4M if=openEuler-20.09-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. @@ -109,11 +109,11 @@ Run the `diskutil list` command as user root to obtain the information of SD car ### Writing Images to the SD Card -1. If the image obtained is compressed, run the `xz -d openEuler-20.09-RaspberryPi.aarch64.img.xz` command to decompress the compressed file to obtain the **openEuler-20.09-RaspberryPi.aarch64.img** image file. Otherwise, skip this step. +1. If the image obtained is compressed, run the `xz -d openEuler-20.09-raspi-aarch64.img.xz` command to decompress the compressed file to obtain the **openEuler-20.09-raspi-aarch64.img** image file. Otherwise, skip this step. -2. Run the following command as the root user to write the image `openEuler-20.09-RaspberryPi.aarch64.img` to the SD card: +2. Run the following command as the root user to write the image `openEuler-20.09-raspi-aarch64.img` to the SD card: - `dd bs=4m if=openEuler-20.09-RaspberryPi.aarch64.img of=/dev/sdb` + `dd bs=4m if=openEuler-20.09-raspi-aarch64.img of=/dev/sdb` > ![](./public_sys-resources/icon-note.gif) **NOTE:** > diff --git a/docs/en/docs/20.09/docs/Installation/Installation-Preparations1.md b/docs/en/docs/Installation/Installation-Preparations1.md similarity index 93% rename from docs/en/docs/20.09/docs/Installation/Installation-Preparations1.md rename to docs/en/docs/Installation/Installation-Preparations1.md index ae727558f3ae6a1acef9022f7b023c29030ed270..d7659a1e2ba2834105ce6c1e86bd38373c1c64e5 100644 --- a/docs/en/docs/20.09/docs/Installation/Installation-Preparations1.md +++ b/docs/en/docs/Installation/Installation-Preparations1.md @@ -32,9 +32,9 @@ Before installation, obtain the openEuler Raspberry Pi image and its verificatio 6. Click **aarch64** to download the Raspberry Pi AArch64 image download list. -7. Click **openEuler-20.09-RaspberryPi.aarch64.img.xz** to download the openEuler Raspberry Pi image to the local PC. +7. Click **openEuler-20.09-raspi-aarch64.img.xz** to download the openEuler Raspberry Pi image to the local PC. -8. Click **openEuler-20.09-RaspberryPi.aarch64.img.xz.sha256sum** to download the verification file of the openEuler Raspberry Pi image to the local PC. +8. Click **openEuler-20.09-raspi-aarch64.img.xz.sha256sum** to download the verification file of the openEuler Raspberry Pi image to the local PC. ## Verifying the Image Integrity @@ -48,9 +48,9 @@ Compare the verification value recorded in the verification file with the verifi Before verifying the integrity of the image file, ensure that the following files are available: -Image file: **openEuler-20.09-RaspberryPi.aarch64.img.xz** +Image file: **openEuler-20.09-raspi-aarch64.img.xz** -Verification file: **openEuler-20.09-RaspberryPi.aarch64.img.xz.sha256sum** +Verification file: **openEuler-20.09-raspi-aarch64.img.xz.sha256sum** ### Procedure @@ -59,13 +59,13 @@ 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.09-RaspberryPi.aarch64.img.xz.sha256sum + $ cat openEuler-20.09-raspi-aarch64.img.xz.sha256sum ``` 2. Calculate the SHA256 verification value of the file. Run the following command: ``` - $ sha256sum openEuler-20.09-RaspberryPi.aarch64.img.xz + $ sha256sum openEuler-20.09-raspi-aarch64.img.xz ``` After the command is executed, the verification value is displayed. diff --git a/docs/en/docs/20.09/docs/Installation/Installation.md b/docs/en/docs/Installation/Installation.md similarity index 100% rename from docs/en/docs/20.09/docs/Installation/Installation.md rename to docs/en/docs/Installation/Installation.md diff --git a/docs/en/docs/20.09/docs/Installation/More-Resources.md b/docs/en/docs/Installation/More-Resources.md similarity index 100% rename from docs/en/docs/20.09/docs/Installation/More-Resources.md rename to docs/en/docs/Installation/More-Resources.md diff --git a/docs/en/docs/20.09/docs/Installation/faqs.md b/docs/en/docs/Installation/faqs.md similarity index 100% rename from docs/en/docs/20.09/docs/Installation/faqs.md rename to docs/en/docs/Installation/faqs.md diff --git a/docs/en/docs/20.09/docs/Installation/figures/adding-the-inst-noverifyssl-parameter.png b/docs/en/docs/Installation/figures/adding-the-inst-noverifyssl-parameter.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/adding-the-inst-noverifyssl-parameter.png rename to docs/en/docs/Installation/figures/adding-the-inst-noverifyssl-parameter.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/advanced-user-configuration.png b/docs/en/docs/Installation/figures/advanced-user-configuration.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/advanced-user-configuration.png rename to docs/en/docs/Installation/figures/advanced-user-configuration.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/bios.png b/docs/en/docs/Installation/figures/bios.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/bios.png rename to docs/en/docs/Installation/figures/bios.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/change.png b/docs/en/docs/Installation/figures/change.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/change.png rename to docs/en/docs/Installation/figures/change.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/completing-the-automatic-installation.png b/docs/en/docs/Installation/figures/completing-the-automatic-installation.png similarity index 100% rename from docs/en/docs/20.09/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/20.09/docs/Installation/figures/completing-the-installation.png b/docs/en/docs/Installation/figures/completing-the-installation.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/completing-the-installation.png rename to docs/en/docs/Installation/figures/completing-the-installation.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/creating-a-user.png b/docs/en/docs/Installation/figures/creating-a-user.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/creating-a-user.png rename to docs/en/docs/Installation/figures/creating-a-user.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/dateandtime.png b/docs/en/docs/Installation/figures/dateandtime.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/dateandtime.png rename to docs/en/docs/Installation/figures/dateandtime.png diff --git a/docs/en/docs/20.09/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 docs/en/docs/20.09/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/docs/en/docs/20.09/docs/Installation/figures/disk-encryption-password.png b/docs/en/docs/Installation/figures/disk-encryption-password.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/disk-encryption-password.png rename to docs/en/docs/Installation/figures/disk-encryption-password.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/drive-icon.png b/docs/en/docs/Installation/figures/drive-icon.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/drive-icon.png rename to docs/en/docs/Installation/figures/drive-icon.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291229.png b/docs/en/docs/Installation/figures/en-us_image_0229291229.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291229.png rename to docs/en/docs/Installation/figures/en-us_image_0229291229.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291236.png b/docs/en/docs/Installation/figures/en-us_image_0229291236.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291236.png rename to docs/en/docs/Installation/figures/en-us_image_0229291236.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291243.png b/docs/en/docs/Installation/figures/en-us_image_0229291243.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291243.png rename to docs/en/docs/Installation/figures/en-us_image_0229291243.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291247.png b/docs/en/docs/Installation/figures/en-us_image_0229291247.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291247.png rename to docs/en/docs/Installation/figures/en-us_image_0229291247.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291264.jpg b/docs/en/docs/Installation/figures/en-us_image_0229291264.jpg similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291264.jpg rename to docs/en/docs/Installation/figures/en-us_image_0229291264.jpg diff --git a/docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291270.png b/docs/en/docs/Installation/figures/en-us_image_0229291270.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291270.png rename to docs/en/docs/Installation/figures/en-us_image_0229291270.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291272.png b/docs/en/docs/Installation/figures/en-us_image_0229291272.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291272.png rename to docs/en/docs/Installation/figures/en-us_image_0229291272.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291280.png b/docs/en/docs/Installation/figures/en-us_image_0229291280.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291280.png rename to docs/en/docs/Installation/figures/en-us_image_0229291280.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291286.png b/docs/en/docs/Installation/figures/en-us_image_0229291286.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229291286.png rename to docs/en/docs/Installation/figures/en-us_image_0229291286.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229420473.png b/docs/en/docs/Installation/figures/en-us_image_0229420473.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/en-us_image_0229420473.png rename to docs/en/docs/Installation/figures/en-us_image_0229420473.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/en-us_image_0231657950.png b/docs/en/docs/Installation/figures/en-us_image_0231657950.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/en-us_image_0231657950.png rename to docs/en/docs/Installation/figures/en-us_image_0231657950.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/enforce-secure-boot.png b/docs/en/docs/Installation/figures/enforce-secure-boot.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/enforce-secure-boot.png rename to docs/en/docs/Installation/figures/enforce-secure-boot.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/error-message.png b/docs/en/docs/Installation/figures/error-message.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/error-message.png rename to docs/en/docs/Installation/figures/error-message.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/image-dialog-box.png b/docs/en/docs/Installation/figures/image-dialog-box.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/image-dialog-box.png rename to docs/en/docs/Installation/figures/image-dialog-box.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/installation-process.png b/docs/en/docs/Installation/figures/installation-process.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/installation-process.png rename to docs/en/docs/Installation/figures/installation-process.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/installation-summary.png b/docs/en/docs/Installation/figures/installation-summary.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/installation-summary.png rename to docs/en/docs/Installation/figures/installation-summary.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/installation-wizard.png b/docs/en/docs/Installation/figures/installation-wizard.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/installation-wizard.png rename to docs/en/docs/Installation/figures/installation-wizard.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/languagesupport.png b/docs/en/docs/Installation/figures/languagesupport.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/languagesupport.png rename to docs/en/docs/Installation/figures/languagesupport.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/manual-partitioning-page.png b/docs/en/docs/Installation/figures/manual-partitioning-page.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/manual-partitioning-page.png rename to docs/en/docs/Installation/figures/manual-partitioning-page.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/password-of-the-root-account.png b/docs/en/docs/Installation/figures/password-of-the-root-account.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/password-of-the-root-account.png rename to docs/en/docs/Installation/figures/password-of-the-root-account.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/restart-icon.png b/docs/en/docs/Installation/figures/restart-icon.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/restart-icon.png rename to docs/en/docs/Installation/figures/restart-icon.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/security.png b/docs/en/docs/Installation/figures/security.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/security.png rename to docs/en/docs/Installation/figures/security.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/selecting-a-language.png b/docs/en/docs/Installation/figures/selecting-a-language.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/selecting-a-language.png rename to docs/en/docs/Installation/figures/selecting-a-language.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/selecting-installation-software.png b/docs/en/docs/Installation/figures/selecting-installation-software.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/selecting-installation-software.png rename to docs/en/docs/Installation/figures/selecting-installation-software.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/semi-automatic-installation.png b/docs/en/docs/Installation/figures/semi-automatic-installation.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/semi-automatic-installation.png rename to docs/en/docs/Installation/figures/semi-automatic-installation.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/setting-a-system-language.png b/docs/en/docs/Installation/figures/setting-a-system-language.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/setting-a-system-language.png rename to docs/en/docs/Installation/figures/setting-a-system-language.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/setting-date-and-time.png b/docs/en/docs/Installation/figures/setting-date-and-time.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/setting-date-and-time.png rename to docs/en/docs/Installation/figures/setting-date-and-time.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/setting-the-installation-destination.png b/docs/en/docs/Installation/figures/setting-the-installation-destination.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/setting-the-installation-destination.png rename to docs/en/docs/Installation/figures/setting-the-installation-destination.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/setting-the-installation-source.png b/docs/en/docs/Installation/figures/setting-the-installation-source.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/setting-the-installation-source.png rename to docs/en/docs/Installation/figures/setting-the-installation-source.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/setting-the-keyboard-layout.png b/docs/en/docs/Installation/figures/setting-the-keyboard-layout.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/setting-the-keyboard-layout.png rename to docs/en/docs/Installation/figures/setting-the-keyboard-layout.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/setting-the-network-and-host-name.png b/docs/en/docs/Installation/figures/setting-the-network-and-host-name.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/setting-the-network-and-host-name.png rename to docs/en/docs/Installation/figures/setting-the-network-and-host-name.png diff --git a/docs/en/docs/20.09/docs/Installation/figures/starting-installation.png b/docs/en/docs/Installation/figures/starting-installation.png similarity index 100% rename from docs/en/docs/20.09/docs/Installation/figures/starting-installation.png rename to docs/en/docs/Installation/figures/starting-installation.png diff --git a/docs/en/docs/Installation/install-UKUI.md b/docs/en/docs/Installation/install-UKUI.md new file mode 100644 index 0000000000000000000000000000000000000000..47cb91109d4d80e8440a449b76c33e95e679a166 --- /dev/null +++ b/docs/en/docs/Installation/install-UKUI.md @@ -0,0 +1,29 @@ +# 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. + +We recommend you create a new administrator user before install UKUI. + +1. [download](https://openeuler.org/zh/download/) openEuler ISO and update the software source. +``` +sudo dnf update +``` +2. install UKUI +``` +sudo dnf install ukui +``` +Note: In order to install UKUI, we need libdbusmenu package. This package requires python2 which conflicts with package python3-unversioned-command(this package provides a symlink to /usr/bin/python3). Use `rpm -e --nodeps python3-unversioned-command` to uninstall python3-unversioned-command. After installation complete, you can restore the settings of the package with the following command. +``` +ln -s /usr/bin/python3 /usr/bin/python +``` +3. install fonts +``` +sudo dnf groupinstall fonts +``` +4. If you want to start with graphical interface after confirming the installation, please run this code and reboot. + +``` +systemctl set-default graphical.target +``` +At present, UKUI version is still constantly updated. Please check the latest installation method: [https://gitee.com/openkylin/ukui-issues](https://gitee.com/openkylin/ukui-issues). \ No newline at end of file diff --git a/docs/en/docs/20.09/docs/Installation/install-pi.md b/docs/en/docs/Installation/install-pi.md similarity index 100% rename from docs/en/docs/20.09/docs/Installation/install-pi.md rename to docs/en/docs/Installation/install-pi.md diff --git a/docs/en/docs/20.09/docs/Installation/install-server.md b/docs/en/docs/Installation/install-server.md similarity index 100% rename from docs/en/docs/20.09/docs/Installation/install-server.md rename to docs/en/docs/Installation/install-server.md diff --git a/docs/en/docs/20.09/docs/Installation/installation-guideline.md b/docs/en/docs/Installation/installation-guideline.md similarity index 100% rename from docs/en/docs/20.09/docs/Installation/installation-guideline.md rename to docs/en/docs/Installation/installation-guideline.md diff --git a/docs/en/docs/20.09/docs/Installation/installation-mode.md b/docs/en/docs/Installation/installation-mode.md similarity index 100% rename from docs/en/docs/20.09/docs/Installation/installation-mode.md rename to docs/en/docs/Installation/installation-mode.md diff --git a/docs/en/docs/20.09/docs/Installation/installation-preparations.md b/docs/en/docs/Installation/installation-preparations.md similarity index 100% rename from docs/en/docs/20.09/docs/Installation/installation-preparations.md rename to docs/en/docs/Installation/installation-preparations.md diff --git a/docs/en/docs/20.09/docs/Installation/public_sys-resources/icon-caution.gif b/docs/en/docs/Installation/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/en/docs/20.09/docs/Installation/public_sys-resources/icon-caution.gif rename to docs/en/docs/Installation/public_sys-resources/icon-caution.gif diff --git a/docs/en/docs/20.09/docs/Installation/public_sys-resources/icon-danger.gif b/docs/en/docs/Installation/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/en/docs/20.09/docs/Installation/public_sys-resources/icon-danger.gif rename to docs/en/docs/Installation/public_sys-resources/icon-danger.gif diff --git a/docs/en/docs/20.09/docs/Installation/public_sys-resources/icon-note.gif b/docs/en/docs/Installation/public_sys-resources/icon-note.gif similarity index 100% rename from docs/en/docs/20.09/docs/Installation/public_sys-resources/icon-note.gif rename to docs/en/docs/Installation/public_sys-resources/icon-note.gif diff --git a/docs/en/docs/20.09/docs/Installation/public_sys-resources/icon-notice.gif b/docs/en/docs/Installation/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/en/docs/20.09/docs/Installation/public_sys-resources/icon-notice.gif rename to docs/en/docs/Installation/public_sys-resources/icon-notice.gif diff --git a/docs/en/docs/20.09/docs/Installation/public_sys-resources/icon-tip.gif b/docs/en/docs/Installation/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/en/docs/20.09/docs/Installation/public_sys-resources/icon-tip.gif rename to docs/en/docs/Installation/public_sys-resources/icon-tip.gif diff --git a/docs/en/docs/20.09/docs/Installation/public_sys-resources/icon-warning.gif b/docs/en/docs/Installation/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/en/docs/20.09/docs/Installation/public_sys-resources/icon-warning.gif rename to docs/en/docs/Installation/public_sys-resources/icon-warning.gif diff --git a/docs/en/docs/20.09/docs/Installation/using-kickstart-for-automatic-installation.md b/docs/en/docs/Installation/using-kickstart-for-automatic-installation.md similarity index 100% rename from docs/en/docs/20.09/docs/Installation/using-kickstart-for-automatic-installation.md rename to docs/en/docs/Installation/using-kickstart-for-automatic-installation.md diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/adding-the-inst-noverifyssl-parameter.png b/docs/en/docs/Quickstart/figures/adding-the-inst-noverifyssl-parameter.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/adding-the-inst-noverifyssl-parameter.png rename to docs/en/docs/Quickstart/figures/adding-the-inst-noverifyssl-parameter.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/advanced-user-configuration.png b/docs/en/docs/Quickstart/figures/advanced-user-configuration.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/advanced-user-configuration.png rename to docs/en/docs/Quickstart/figures/advanced-user-configuration.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/change.png b/docs/en/docs/Quickstart/figures/change.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/change.png rename to docs/en/docs/Quickstart/figures/change.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/completing-the-installation.png b/docs/en/docs/Quickstart/figures/completing-the-installation.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/completing-the-installation.png rename to docs/en/docs/Quickstart/figures/completing-the-installation.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/creating-a-user.png b/docs/en/docs/Quickstart/figures/creating-a-user.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/creating-a-user.png rename to docs/en/docs/Quickstart/figures/creating-a-user.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/dateandtime.png b/docs/en/docs/Quickstart/figures/dateandtime.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/dateandtime.png rename to docs/en/docs/Quickstart/figures/dateandtime.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/drive-icon.png b/docs/en/docs/Quickstart/figures/drive-icon.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/drive-icon.png rename to docs/en/docs/Quickstart/figures/drive-icon.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/en-us_image_0229420473.png b/docs/en/docs/Quickstart/figures/en-us_image_0229420473.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/en-us_image_0229420473.png rename to docs/en/docs/Quickstart/figures/en-us_image_0229420473.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/image-dialog-box.png b/docs/en/docs/Quickstart/figures/image-dialog-box.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/image-dialog-box.png rename to docs/en/docs/Quickstart/figures/image-dialog-box.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/installation-process.png b/docs/en/docs/Quickstart/figures/installation-process.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/installation-process.png rename to docs/en/docs/Quickstart/figures/installation-process.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/installation-summary.png b/docs/en/docs/Quickstart/figures/installation-summary.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/installation-summary.png rename to docs/en/docs/Quickstart/figures/installation-summary.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/installation-wizard.png b/docs/en/docs/Quickstart/figures/installation-wizard.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/installation-wizard.png rename to docs/en/docs/Quickstart/figures/installation-wizard.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/languagesupport.png b/docs/en/docs/Quickstart/figures/languagesupport.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/languagesupport.png rename to docs/en/docs/Quickstart/figures/languagesupport.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/manual-partitioning-page.png b/docs/en/docs/Quickstart/figures/manual-partitioning-page.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/manual-partitioning-page.png rename to docs/en/docs/Quickstart/figures/manual-partitioning-page.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/password-of-the-root-account.png b/docs/en/docs/Quickstart/figures/password-of-the-root-account.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/password-of-the-root-account.png rename to docs/en/docs/Quickstart/figures/password-of-the-root-account.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/restart-icon.png b/docs/en/docs/Quickstart/figures/restart-icon.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/restart-icon.png rename to docs/en/docs/Quickstart/figures/restart-icon.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/selecting-a-language.png b/docs/en/docs/Quickstart/figures/selecting-a-language.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/selecting-a-language.png rename to docs/en/docs/Quickstart/figures/selecting-a-language.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/selecting-installation-software.png b/docs/en/docs/Quickstart/figures/selecting-installation-software.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/selecting-installation-software.png rename to docs/en/docs/Quickstart/figures/selecting-installation-software.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/setting-the-boot-device.png b/docs/en/docs/Quickstart/figures/setting-the-boot-device.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/setting-the-boot-device.png rename to docs/en/docs/Quickstart/figures/setting-the-boot-device.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/setting-the-installation-destination.png b/docs/en/docs/Quickstart/figures/setting-the-installation-destination.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/setting-the-installation-destination.png rename to docs/en/docs/Quickstart/figures/setting-the-installation-destination.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/setting-the-installation-source.png b/docs/en/docs/Quickstart/figures/setting-the-installation-source.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/setting-the-installation-source.png rename to docs/en/docs/Quickstart/figures/setting-the-installation-source.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/setting-the-keyboard-layout.png b/docs/en/docs/Quickstart/figures/setting-the-keyboard-layout.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/setting-the-keyboard-layout.png rename to docs/en/docs/Quickstart/figures/setting-the-keyboard-layout.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/setting-the-network-and-host-name.png b/docs/en/docs/Quickstart/figures/setting-the-network-and-host-name.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/setting-the-network-and-host-name.png rename to docs/en/docs/Quickstart/figures/setting-the-network-and-host-name.png diff --git a/docs/en/docs/20.09/docs/Quickstart/figures/starting-installation.png b/docs/en/docs/Quickstart/figures/starting-installation.png similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/figures/starting-installation.png rename to docs/en/docs/Quickstart/figures/starting-installation.png diff --git a/docs/en/docs/20.09/docs/Quickstart/public_sys-resources/icon-caution.gif b/docs/en/docs/Quickstart/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/public_sys-resources/icon-caution.gif rename to docs/en/docs/Quickstart/public_sys-resources/icon-caution.gif diff --git a/docs/en/docs/20.09/docs/Quickstart/public_sys-resources/icon-danger.gif b/docs/en/docs/Quickstart/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/public_sys-resources/icon-danger.gif rename to docs/en/docs/Quickstart/public_sys-resources/icon-danger.gif diff --git a/docs/en/docs/20.09/docs/Quickstart/public_sys-resources/icon-note.gif b/docs/en/docs/Quickstart/public_sys-resources/icon-note.gif similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/public_sys-resources/icon-note.gif rename to docs/en/docs/Quickstart/public_sys-resources/icon-note.gif diff --git a/docs/en/docs/20.09/docs/Quickstart/public_sys-resources/icon-notice.gif b/docs/en/docs/Quickstart/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/public_sys-resources/icon-notice.gif rename to docs/en/docs/Quickstart/public_sys-resources/icon-notice.gif diff --git a/docs/en/docs/20.09/docs/Quickstart/public_sys-resources/icon-tip.gif b/docs/en/docs/Quickstart/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/public_sys-resources/icon-tip.gif rename to docs/en/docs/Quickstart/public_sys-resources/icon-tip.gif diff --git a/docs/en/docs/20.09/docs/Quickstart/public_sys-resources/icon-warning.gif b/docs/en/docs/Quickstart/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/public_sys-resources/icon-warning.gif rename to docs/en/docs/Quickstart/public_sys-resources/icon-warning.gif diff --git a/docs/en/docs/20.09/docs/Quickstart/quick-start.md b/docs/en/docs/Quickstart/quick-start.md similarity index 100% rename from docs/en/docs/20.09/docs/Quickstart/quick-start.md rename to docs/en/docs/Quickstart/quick-start.md diff --git a/docs/en/docs/20.09/docs/Releasenotes/acknowledgement.md b/docs/en/docs/Releasenotes/acknowledgement.md similarity index 100% rename from docs/en/docs/20.09/docs/Releasenotes/acknowledgement.md rename to docs/en/docs/Releasenotes/acknowledgement.md diff --git a/docs/en/docs/20.09/docs/Releasenotes/common-vulnerabilities-and-exposures-(cve).md b/docs/en/docs/Releasenotes/common-vulnerabilities-and-exposures-(cve).md similarity index 100% rename from docs/en/docs/20.09/docs/Releasenotes/common-vulnerabilities-and-exposures-(cve).md rename to docs/en/docs/Releasenotes/common-vulnerabilities-and-exposures-(cve).md diff --git a/docs/en/docs/20.09/docs/Releasenotes/contribution.md b/docs/en/docs/Releasenotes/contribution.md similarity index 62% rename from docs/en/docs/20.09/docs/Releasenotes/contribution.md rename to docs/en/docs/Releasenotes/contribution.md index cdac896b9a5b0634beec67586d09cdd93403958f..5ac221e1384a2093fdbb6effa314b17f5f896add 100644 --- a/docs/en/docs/20.09/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.md). diff --git a/docs/en/docs/20.09/docs/Releasenotes/installing-the-os.md b/docs/en/docs/Releasenotes/installing-the-os.md similarity index 100% rename from docs/en/docs/20.09/docs/Releasenotes/installing-the-os.md rename to docs/en/docs/Releasenotes/installing-the-os.md diff --git a/docs/en/docs/20.09/docs/Releasenotes/introduction.md b/docs/en/docs/Releasenotes/introduction.md similarity index 100% rename from docs/en/docs/20.09/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..53df363b8522c681741d1df7d0fdc41a6ce5383a --- /dev/null +++ b/docs/en/docs/Releasenotes/key-features.md @@ -0,0 +1,49 @@ +# Key Features + +- StratoVirt: Combines high security and performance with lightweight loads, low power consumption, and flexible component splitting for trusted virtualization platform in all scenarios. + + - Uses the Rust language, supports **seccomp** and multi-tenant isolation, providing a secure and trusted operating environment. + - Supports startup within 50 ms and memory noise floor of less than 4 MB, achieving the ultimate performance and lightweight deployment in various scenarios across-device-edge-cloud. + - Supports multiple hardware acceleration virtualized engines, such as x86 VT and Kunpeng-V. + - Supports device scaling within milliseconds, providing flexible resource scaling capabilities for lightweight loads. + - Scalable device models, supports complex device specifications such as PCI, and compatible with the QEMU software ecosystem. + - Supports multiple computing, network, and storage acceleration solutions, and flexible collaboration of heterogeneous computing power. + +- iSula: A lightweight container solution that unifies IoT, edge, and cloud computing. + + - Optimized operation performance for the startup and container lifecycle. + - **isula-build**, a container image build tool that provides secure and fast container image build capabilities. + - Secure and trusted VM startup for enhanced VM security. + +- Enhanced virtualization features + + - Optimizes VM lock preemption with dual-layer scheduling and Hypervisor-aware VM scheduling, delivering higher performance in the multi-core overcommitment scenario. + - Optimizes the IPI interruption performance using the Guest-Idle-Haltpoll mechanism, improving the database service performance. + - For the virtualization feature of the ARM platform, supports the CPU/memory hot plug and the custom mode for the KVM CPU, making resource configuration more flexible. + - Quickly collects performance indicators of a VM using the O\&M tool VMTOP. + - Enables hardlockup detection using the PMU NMI watchdog feature. + +- Kernel feature enhancement + + - Enhancement for IMA commercial use: Based on the open source IMA solution, improves security, performance, and usability to facilitate commercial use. + - NUMA Aware Qspinlock: Improves system performance by reducing cross-NUMA cache synchronization and ping-pong operations caused by lock competition. + - Ktask parallelism: A kernel task parallelism framework that supports the parallel operation of kernel tasks. + - MPAM resource control: Supports Cache QoS and memory bandwidth control technology for the ARM64 architecture. + - Memory system lock optimization: Optimizes vmalloc allocation lock and Pagecache lock. + +- Programming languages and compilers + + - JDK8 enhancement: Supports the APPCDS feature and crc32 hardware acceleration instruction. + - GCC optimization: Supports cyclic optimization, automatic vectorization, and global optimization. + +- Hardware and chip enablement + + - Raspberry Pi: Supports the Raspberry series boards. + +- Desktop support + + - UKUI: Default desktop environment of the Kylin OS. Its layout, style, and usage habits are similar to those of the traditional Windows OS. + +- Intelligent O\&M + + - A-Tune: An intelligent system performance optimization engine that infers service features and configures the optimal system parameter set for the optimal service operations. \ No newline at end of file diff --git "a/docs/zh/docs/20.09/docs/Releasenotes/\345\267\262\347\237\245\351\227\256\351\242\230.md" b/docs/en/docs/Releasenotes/known-issues.md similarity index 66% rename from "docs/zh/docs/20.09/docs/Releasenotes/\345\267\262\347\237\245\351\227\256\351\242\230.md" rename to docs/en/docs/Releasenotes/known-issues.md index 3099acb599425b392e73513e8f6d5628d882e1ca..16ada9132ac580ad434b59d9b922e73649597fbb 100644 --- "a/docs/zh/docs/20.09/docs/Releasenotes/\345\267\262\347\237\245\351\227\256\351\242\230.md" +++ b/docs/en/docs/Releasenotes/known-issues.md @@ -1,28 +1,29 @@ -# 已知问题 +# Known Issues - - @@ -279,7 +279,7 @@ To harden a client, perform the following steps: - @@ -321,7 +321,7 @@ To harden a client, perform the following steps: - diff --git a/docs/en/docs/StratoVirt/Install_StratoVirt.md b/docs/en/docs/StratoVirt/Install_StratoVirt.md new file mode 100644 index 0000000000000000000000000000000000000000..1e68680fa30f7beec6b25b946fdff48fc5dd0e1b --- /dev/null +++ b/docs/en/docs/StratoVirt/Install_StratoVirt.md @@ -0,0 +1,39 @@ +# Installing StratoVirt + +[[toc]] + +## 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.09 or later + + + +## Installing Components + +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.1.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..f31b342bf085391f80da976fae9a10ba37c3ccb5 --- /dev/null +++ b/docs/en/docs/StratoVirt/Interconnect_isula.md @@ -0,0 +1,40 @@ +# Interconnecting with the iSula Secure Container + +[[toc]] + +## Overview + +To provide a better isolation environment for containers and improve system security, it is necessary to connect Kata to StratoVirt in the iSula secure container scenario. + +## Interconnection with an iSula Secure Container + +**Prerequisites** + +iSulad and Kata containers have been installed. + +**Operations** + + + +The default path of the Kata configuration file is /usr/share/defaults/kata-containers/configuration.toml. + +1. Modify the configuration file to set the hypervisor type of the secure sandbox to stratovirt. + + ``` + [hypervisor.stratovirt] + ``` + +2. Set the execution file path of the secure sandbox to the absolute path of stratovirt.sh. The content of the stratovirt.sh script is as follows: + + ``` + #!/bin/bash + export STRATOVIRT_LOG_LEVEL=info # set log level which includes trace, debug, info, warn and error. + /usr/bin/stratovirt $@ + ``` + +3. Run iSulad to connect Kata to StratoVirt. + + ``` + $ isula run -tid --runtime=kata-runtime --name test busybox:latest sh + ``` + diff --git a/docs/en/docs/StratoVirt/Manage_life_cycle.md b/docs/en/docs/StratoVirt/Manage_life_cycle.md new file mode 100644 index 0000000000000000000000000000000000000000..a859b7471175bba9f9a2d4d4e855b3e4df898ce2 --- /dev/null +++ b/docs/en/docs/StratoVirt/Manage_life_cycle.md @@ -0,0 +1,124 @@ +# Managing the VM Lifecycle + +[[toc]] + +## Overview + +This section describes how to use StratoVirt to manage the lifecycle of a VM, namely starting, pausing, resuming, and exiting a VM. + + + +## Creating and Starting a VM + +As described in the section "Configuring a VM", users can specify the VM configuration by using command line parameters or the JSON file, and run the stratovirt command on the host to create and start a VM. + +- Run the following command to create and start a VM: + +``` +$/path/to/stratovirt - [Parameter 1] [Parameter Option] - [Parameter 2] [Parameter Option]... +``` + + + +- Use the JSON file to provide the VM configuration. The command for creating and starting a VM is as follows: + +``` +$ /path/to/stratovirt \ + -config /path/to/json \ + -api-channel unix:/path/to/socket +``` + +Where, /path/to/json indicates the path of the JSON configuration file. /path/to/socket is the socket file specified by the user (for example, /tmp/stratovirt.socket). After the command is executed, the socket file is automatically created. Ensure that the socket file does not exist before executing the command, so that the VM can be started properly. + + + +> ![](./figures/en-05.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 a VM + +StratoVirt uses QMP to manage VMs. To pause, resume, and exit a VM, connect it to StratoVirt through QMP first. + +Open a new CLI (CLI B) on the host and run the following command to perform the api-channel connection: + +``` +$ ncat -U /path/to/socket +``` + +After the connection is set up, a greeting message will be received from StratoVirt, as shown in the following figure. + +``` +{"QMP":{"version":{"qemu":{"micro":1,"minor":0,"major":4},"package":""},"capabilities":[]}} +``` + +Now, manage the VM by entering QMP commands in CLI B. + + + +> ![](./figures/en-05.png) +> +> QMP provides stop, cont, quit, and query-status to manage and query the VM status. +> +> All QMP commands for managing VMs are entered in CLI B. `<-` indicates the command input, and `->` indicates the QMP returned result. + + + + + +## Pausing a VM + +QMP provides the stop command for pausing a VM, that is, pausing all vCPUs of the VM. Command format: + +**{"execute":"stop"}** + +**Example:** + +Run the stop command to pause the VM. The command output is as follows: + +``` +<- {"execute":"stop"} +-> {"event":"STOP","data":{},"timestamp":{"seconds":1583908726,"microseconds":162739}} +-> {"return":{}} +``` + + + + + +## Resuming a VM + +QMP provides the cont command to resume a VM, that is, to resume all vCPUs of the VM. Command format: + +**{"execute":"cont"}** + +**Example:** + +Run the cont command to resume the VM. The command output is 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. Command format: + +**{"execute":"quit"}** + +**Example:** + +``` +<- {"execute":"quit"} +-> {"event":"SHUTDOWN","data":{"guest":false,"reason":"host-qmp-quit"},"timestamp":{"ds":1590563776,"microseconds":519808}} +-> {"return":{}} +``` + diff --git a/docs/en/docs/StratoVirt/Manage_resource.md b/docs/en/docs/StratoVirt/Manage_resource.md new file mode 100644 index 0000000000000000000000000000000000000000..cff9f660a8e73991e44787820ca73b259bb55f70 --- /dev/null +++ b/docs/en/docs/StratoVirt/Manage_resource.md @@ -0,0 +1,114 @@ +#Managing VM resources + +[[toc]] + +## Overview + +This section describes how to use QMP commands to manage disks and NICs. + + + +> ![](./figures/en-05.png) +> +> StratoVirt uses QMP to manage VMs. Before using QMP to manage VM resources, use it to connect StratoVirt to the VM. For details, see "Managing the VM Life Cycle". + + + +## Hot-Pluggable Hard Disks + +StratoVirt supports adjusting the number of disks during VM running. That is, you can add or delete VM disks without interrupting services. + +### Hot Plugged-in Disk + +**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"}} +``` + +**Parameter** + +- The value of node-name in blockdev-add must be the same as the value of id in device_add. They are both drive-0. + +- /path/to/block is the mirror path of the hot plugged-in disk. 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. Only six virtio-blk disks can be hot added. + +**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 Disk + +**Usage** + +**{"execute": "device_del", "arguments": {"id":"drive-0"}}** + +**Parameter** + +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 NIC + +StratoVirt allows users to adjust the number of NICs during VM running. That is, users can add or delete NICs for VMs without interrupting services. + +### Hot Plugged-in NIC + +**Usage** + +``` +{"execute":"netdev_add", "arguments":{"id":"net-0", "ifname":"tap0"}} +{"execute":"device_add", "arguments":{"id":"net-0", "driver":"virtio-net-mmio", "addr":"0x0"}} +``` + +**Parameter** + +- The ID in netdev_add must be the same as that in device_add. Ifname indicates the name of the TAP device. + +- For addr, 0x0 is mapped to eth0 of the VM, and 0x1 to eth1. Only two virtio-net NICs can be hot plugged in. + + +**Example** + +``` +<- {"execute":"netdev_add", "arguments":{"id":"net-0", "ifname":"tap0"}} +<- {"execute":"device_add", "arguments":{"id":"net-0", "driver":"virtio-net-mmio", "addr":"0x0"}} +``` + +Where, addr:0x0 corresponds to eth0 in the VM. + +### Hot Plugged-out NIC + +**Usage** + +**{"execute": "device_del", "arguments": {"id": "net-0"}}** + +**Parameter** + +id: specifies the 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": {}} +``` + diff --git a/docs/en/docs/StratoVirt/Prepare_env.md b/docs/en/docs/StratoVirt/Prepare_env.md new file mode 100644 index 0000000000000000000000000000000000000000..c18473bc33180d3fad61600d4166fa2bb34f9d69 --- /dev/null +++ b/docs/en/docs/StratoVirt/Prepare_env.md @@ -0,0 +1,148 @@ +# Preparing the Environment + +[[toc]] + +## Usage + +- StratoVirt supports only Linux VMs that use the x86_64 or AArch64 processor architecture and start the VM with same architecture. +- StratoVirt can be compiled, commissioned, and deployed only on openEuler 20.09 and later versions. +- StratoVirt can run with non-root permissions. + +## Environment Requirements + +The following environment is required for running StratoVirt: + +- /dev/vhost-vsock device (for implementing the MMIO) +- Nmap tool +- Kernel image and rootfs image + + + +## Preparing Devices and Tools + +- StratoVirt needs to implement the MMIO device. 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 the /dev/vhost-vsock device: + + ``` + $ modprobe vhost_vsock + ``` + + +- To use QMP commands, install the nmap tool. After configuring the yum source, run the following command to install the nmap tool: + + ``` + $ yum install nmap + ``` + +## Preparing Images + +### Creating the Kernel Image + +The 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 command to obtain the kernel source code of the 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 + ``` + + After the compilation is complete, the kernel image vmlinux.bin is generated in the current directory. + + ​ + +## Creating the Rootfs Image + +The rootfs image is a file system image. When the 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 /mnt/rootfs directory as user root. + + ``` + $ mkdir /mnt/rootfs + $ cd /home + $ sudo mount ./rootfs.ext4 /mnt/rootfs && cd /mnt/rootfs + ``` + +4. Obtain the latest alpine-mini rootfs of the corresponding processor architecture. + + - If the AArch64 processor architecture is used, run the following command: + + ``` + $ wget http://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/aarch64/alpine-minirootfs-3.12.0-aarch64.tar.gz + $ tar -zxvf alpine-minirootfs-3.12.0-aarch64.tar.gz + $ rm alpine-minirootfs-3.12.0-aarch64.tar.gz + ``` + + + - For the x86_64 processor architecture, run the following command: + + ``` + $ wget http://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/x86_64/alpine-minirootfs-3.12.0-x86_64.tar.gz + $ tar -zxvf alpine-minirootfs-3.12.0-x86_64.tar.gz + $ rm alpine-minirootfs-3.12.0-x86_64.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 < { "return": { "running": true,"singlestep": false,"status": "running" } +``` + + + +## Querying Topology Information + +Run the query-cpus command to query the topology 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 or offline status 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}]} +``` + +Where, online vCPUs have the `qom-path` item, while offline vCPUs do not. diff --git a/docs/en/docs/StratoVirt/StratoVirt_Intoduction.md b/docs/en/docs/StratoVirt/StratoVirt_Intoduction.md new file mode 100644 index 0000000000000000000000000000000000000000..685ddd668f4faf7dba5102bf3f97f240a5697bf8 --- /dev/null +++ b/docs/en/docs/StratoVirt/StratoVirt_Intoduction.md @@ -0,0 +1,25 @@ +# Introduction to StratoVirt + +[[toc]] + +## Overview + +StratoVirt is an enterprise-class virtualization platform for cloud data centers in the computing industry, enabling a unified architecture that supports virtual machines, containers and Serverless scenarios. On top of that, StratoVirt has a key technology competitive advantage in terms of lightweight, low noise, hard and soft collaboration, Rust language-level security, and more. StratoVirt reserves the capabilities and interfaces for component assembly in architectural design and interfaces. More importantly, StratoVirt has the flexibility to assemble advanced features on demand until it evolves to support standard virtualization, finding the best balance between feature requirements, applications scenarios, and light flexibility. + + + +## Architecture Description + +The StratoVirt core architecture is divided into three layers from top to bottom: + +- OCI: compatible with the QEMU Machine Protocol (QMP), which has complete OCI compatibility capabilities. +- BootLoader: discards the traditional BIOS+GRUB boot mode and implements a lighter and faster bootloader. +- MicroVM: virtualization layer, which fully leverages the capability of software and hardware collaboration to simplify the device model and the capability of low-latency resource scaling. + +The overall architecture is shown in **Figure 1**. + +**Figure 1** Overall architecture of StratoVirt + +![](./figures/arc.png) + + diff --git a/docs/en/docs/StratoVirt/StratoVrit_guidence.md b/docs/en/docs/StratoVirt/StratoVrit_guidence.md new file mode 100644 index 0000000000000000000000000000000000000000..461f0bf0490f0a18176972f10c4ea8f7edee1491 --- /dev/null +++ b/docs/en/docs/StratoVirt/StratoVrit_guidence.md @@ -0,0 +1,4 @@ +# StratoVirt Virtualization User Guide + +This document describes Stratovirt virtualization, providing instructions on how to install Stratovirt based on openEuler and how to use Stratovirt virtualization. The purpose is to help users learn about Stratovirt and guide users and administrators to install and use StratoVirt. + diff --git a/docs/en/docs/StratoVirt/VM_configuration.md b/docs/en/docs/StratoVirt/VM_configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..96e762589519c50709ed2a40805f044daa84b963 --- /dev/null +++ b/docs/en/docs/StratoVirt/VM_configuration.md @@ -0,0 +1,235 @@ +# Configuring a VM + +## Overview + +Different from Libvirt that uses XML files to configure VMs, StratoVirt can use command line parameters or the JSON file to configure the VM CPU, memory, and disk information. This section describes the two configuration methods. + +> ![](./figures/en-05.png) +> +> If both methods can be used, incline to the command line configuration. +> +> In this document, /path/to/socket is the socket file in the user-defined path. + + + + + +## Specifications + +- Number of VM CPUs: [1,254] +- VM memory size: [128MiB,512GiB] +- Number of VM disks (including hot swap disks): [0,6] +- Number of VM NICs (including hot swap NICs): [0,2] +- The VM console device supports only single way connection. +- On the x86_64 platform, a maximum of two other devices except disks and NICs can be configured. On the AArch64 platform, the maximum of other devices is 12, also excluding disks and NICs. + +## Minimum Configuration + +The minimum configuration of the StratoVirt is as follows: + +- There is a Linux kernel file in PE format. +- Set the rootfs image as the virtio-blk device and add it to kernel parameters. +- Use api-channel to control StratoVirt. +- If you want 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 the cmdline command is as follows: + +**$ /path/to/stratovirt** *-[Parameter 1] [Parameter Option] -[Parameter 2] [Parameter Option] ...* + +**Usage** + +1. To ensure that the socket required by 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] ... + ``` + + + +**Parameter Description** + +The following table lists the parameters of the cmdline command. + +**Table 1** Description of command line configuration parameters + +| Parameter | Value | Description | +| ---------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| -name | *VMName* | Configures the VM name (a string of 1 to 255 characters).| +| -kernel | /path/to/vmlinux.bin | Configures the kernel image.| +| -append | console=ttyS0 root=/dev/vda reboot=k panic=1 | Configures kernel command line parameters.| +| -initrd | /path/to/initrd.img | Configures the initrd file.| +| -smp | [cpus=] Number of CPUs | Configures the number of CPUs. The value range is [1,254].| +| -m | Byte/MiB/GiB | Configures the memory size. The value range is [128MiB,512GiB]. | +| -drive | id=rootfs,file=/path/to/rootfs[,readonly=false,direct=true,serial=serial_num] | Configures the virtio-blk device.| +| -netdev | id=iface_id,netdev=tap0[,mac=mac_address] | Configures the virtio-net device.| +| -chardev | id=console_id,path=/path/to/socket | Configures virtio-console. Ensure that the socket file does not exist before running the command.| +| -device | vsock,id=vsock_id,guest-cid=3 | Configures vhost-vsock.| +| -api-channel | unix:/path/to/socket | Configures api-channel. Before running this command, ensure that the socket file does not exist.| +| -serial | stdio | Configures a serial port device.| +| -D | /path/to/logfile | Configures log files.| +| -pidfile | /path/to/pidfile | Configures the PID file. This parameter must be used together with -daemonize.| +| -disable-seccomp | N/A | Disables the Seccomp, which is enabled by default.| +| -omit_vm_memory | N/A | Do not dump the VM memory when the process enters the panic state.| +| -daemonize | N/A | Enables the daemon process.| + + + +**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 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] [Parameter Option]* + +**Usage** + +1. Create a JSON file and write the VM configuration to the file. + +2. Run the StratoVirt command to create a VM. + + ``` + $ /path/to/stratovirt -config /path/to/json - [Parameter] [Parameter Option] + ``` + +**Parameter Description** + +The following table describes the configurable parameters in the JSON file. + +**Table 2** Parameters in the configuration file + +| Parameter | Value | 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 | "name": "abc","vcpu_count": 4,"mem_size": 805306368,"omit_vm_memory": true | Configures the virtual CPU and memory size. The `omit_vm_memory` parameter is optional. | +| drive | "drive_id": "rootfs","path_on_host": "/path/to/rootfs.ext4","read_only": false,"direct": true,"serial_num": "xxxxx" | Configures the virtio-blk disk. The `serial_num` parameter is optional. | +| net | "iface_id": "net0","host_dev_name": "tap0","mac": "xx:xx:xx:xx:xx:xx" | Configures the virtio-net NIC. The `mac` parameter is 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 a serial port device.| + + + +The following table lists the parameters running in JSON. + +**Table 3** Parameters running in JSON + +| Parameter | Value | Description | +| ---------------- | -------------------- | ------------------------------------------------------------ | +| -config | /path/to/json | Configures the file path.| +| -api-channel | unix:/path/to/socket | Configures api-channel. Before running this command, ensure that the socket file does not exist. | +| -D | /path/to/logfile | Configures log files.| +| -pidfile | /path/to/pidfile | Configures the PID file, which must be used together with daemonize. Before running the command, make sure that the PID file does not exist. | +| -disable-seccomp | N/A | Disables the Seccomp, which is enabled by default. | +| -daemonize | N/A | Enables the daemon process.| + + + +**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" + }, + "machine-config": { + "name": "abc", + "vcpu_count": 2, + "mem_size": 268435456, + "omit_vm_memory": false + }, + "drive": [ + { + "drive_id": "rootfs", + "path_on_host": "/path/to/rootfs.ext4", + "direct": true, + "read_only": false, + "serial_num": "abcd" + } + ], + "net": [ + { + "iface_id": "net0", + "host_dev_name": "tap0", + "mac": "0e:90:df:9f:a8:88" + } + ], + "console": { + "console_id": "charconsole0", + "socket_path": "/path/to/console.socket" + }, + "serial": { + "stdio": true + }, + "vsock": { + "vsock_id": "vsock-123321132", + "guest_cid": 4 + } +} + +``` + + + +2. Run StratoVirt to read the JSON file and create and start the VM. + +``` +$ /path/to/stratovirt \ + -config /home/config.json \ + -api-channel unix:/tmp/stratovirt.socket +``` + +Successful execution of the command indicates that the VM is successfully created and started. + diff --git a/docs/zh/docs/20.09/docs/StratoVirt/figures/StratoVirt_architecture.png b/docs/en/docs/StratoVirt/figures/arc.png similarity index 100% rename from docs/zh/docs/20.09/docs/StratoVirt/figures/StratoVirt_architecture.png rename to docs/en/docs/StratoVirt/figures/arc.png diff --git a/docs/en/docs/StratoVirt/figures/en-05.png b/docs/en/docs/StratoVirt/figures/en-05.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5ed3f7beeb01e6a48707c4806606b41d687e22 Binary files /dev/null and b/docs/en/docs/StratoVirt/figures/en-05.png differ diff --git a/docs/en/docs/20.09/docs/Virtualization/appendix.md b/docs/en/docs/Virtualization/appendix.md similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/appendix.md rename to docs/en/docs/Virtualization/appendix.md diff --git a/docs/en/docs/20.09/docs/Virtualization/best-practices.md b/docs/en/docs/Virtualization/best-practices.md similarity index 83% rename from docs/en/docs/20.09/docs/Virtualization/best-practices.md rename to docs/en/docs/Virtualization/best-practices.md index 94069b02437a6829e448580b20fe05cc886eaeb3..7e1de24b147c0372de155fc71af80ec973fcd480 100644 --- a/docs/en/docs/20.09/docs/Virtualization/best-practices.md +++ b/docs/en/docs/Virtualization/best-practices.md @@ -1,18 +1,6 @@ # Best Practices -- [Best Practices](#best-practices) - - [Performance Best Practices](#performance-best-practices) - - [Halt-Polling](#halt-polling) - - [I/O Thread Configuration](#i-o-thread-configuration) - - [Raw Device Mapping](#raw-device-mapping) - - [kworker Isolation and Binding](#kworker-isolation-and-binding) - - [HugePage Memory](#hugepage-memory) - - [PV-qspinlock](#pv-qspinlock) - - [Security Best Practices](#security-best-practices) - - [Libvirt Authentication](#libvirt-authentication) - - [qemu-ga](#qemu-ga) - - [sVirt Protection](#svirt-protection) - - [VM Trusted Boot](#VM-Trusted-Boot) +[[toc]] ## Performance Best Practices @@ -238,6 +226,73 @@ Modify the /boot/efi/EFI/openEuler/grub.cfg configuration file of the VM, add ar >![](./public_sys-resources/icon-note.gif) **Note:** >PV-qspinlock is supported only when the operating systems of the host machine and VM are both openEuler-20.09 or later and the VM kernel compilation option CONFIG_PARAVIRT_SPINLOCKS is set to y (default value for openEuler). +### Guest-Idle-Haltpoll + +#### Overview + +To ensure fairness and reduce power consumption, when the vCPU of the VM is idle, the VM executes the WFx/HLT instruction to exit to the host machine and triggers context switchover. The host machine determines whether to schedule other processes or vCPUs on the physical CPU or enter the energy saving mode. However, overheads of switching between a virtual machine and a host machine, additional context switching, and IPI wakeup are relatively high, and this problem is particularly prominent in services where sleep and wakeup are frequently performed. The Guest-Idle-Haltpoll technology indicates that when the vCPU of a VM is idle, the WFx/HLT is not executed immediately and VM-exit occurs. Instead, polling is performed on the VM for a period of time. During this period, the tasks of other vCPUs that share the LLC on the vCPU are woken up without sending IPI interrupts. This reduces the overhead of sending and receiving IPI interrupts and the overhead of VM-exit, thereby reducing the task wakeup latency. + +>![](public_sys-resources/icon-note.gif) **Note:** + The execution of the idle-haltpoll command by the vCPU on the VM increases the CPU overhead of the vCPU on the host machine. Therefore, it is recommended that the vCPU exclusively occupy physical cores on the host machine when this feature is enabled. + +#### Procedure + +The Guest-Idle-Haltpoll feature is disabled by default. The following describes how to enable this feature. + +1. Enable the Guest-Idle-Haltpoll feature. + - If the processor architecture of the host machine is x86, you can configure hint-dedicated in the XML file of the VM on the host machine to enable this feature. In this way, the status that the vCPU exclusively occupies the physical core can be transferred to the VM through the VM XML configuration. The host machine ensures the status of the physical core exclusively occupied by the vCPU. + + ``` + + ... + + + ... + + + + ... + + ``` + + Alternatively, set cpuidle\_haltpoll.force to Y in the kernel startup parameters of the VM to forcibly enable the function. This method does not require the host machine to configure the vCPU to exclusively occupy the physical core. + ``` + cpuidle_haltpoll.force=Y + ``` + + - If the processor architecture of the host machine is AArch64, this feature can be enabled only by configuring cpuidle\_haltpoll.force=Y haltpoll.enable=Y in the VM kernel startup parameters. + + ``` + cpuidle_haltpoll.force=Y haltpoll.enable=Y + ``` + +2. Check whether the Guest-Idle-Haltpoll feature takes effect. Run the following command on the VM. If haltpoll is returned, the feature has taken effect. + + ``` + # cat /sys/devices/system/cpu/cpuidle/current_driver + ``` + +3. (Optional) Set the Guest-Idle-Haltpoll parameter. + + The following configuration files are provided in the /sys/module/haltpoll/parameters/ directory of the VM. You can adjust the configuration parameters based on service characteristics. + + - guest\_halt\_poll\_ns: a global parameter that specifies the maximum polling duration after the vCPU is idle. The default value is 200000 (unit: ns). + - guest\_halt\_poll\_shrink: a divisor that is used to shrink the current vCPU guest\_halt\_poll\_ns when the wakeup event occurs after the global guest\_halt\_poll\_ns time. The default value is 2. + - guest\_halt\_poll\_grow: a multiplier that is used to extend the current vCPU guest\_halt\_poll\_ns when the wakeup event occurs after the current vCPU guest\_halt\_poll\_ns and before the global guest\_halt\_poll\_ns. The default value is 2. + - guest\_halt\_poll\_grow\_start: When the system is idle, the guest\_halt\_poll\_ns of each vCPU reaches 0. This parameter is used to set the initial value of the current vCPU guest\_halt\_poll\_ns to facilitate scaling in and scaling out of the vCPU polling duration. The default value is 50000 (unit: ns). + - guest\_halt\_poll\_allow\_shrink: a switch that is used to enable vCPU guest\_halt\_poll\_ns scale-in. The default value is Y. (Y indicates enabling the scale-in; N indicates disabling the scale-in.) + + You can run the following command as the user root to change the parameter values: In the preceding command, _value_ indicates the parameter value to be set, and _configFile_ indicates the corresponding configuration file. + + ``` + # echo value > /sys/module/haltpoll/parameters/configFile + ``` + + For example, to set the global guest\_halt\_poll\_ns to 200000 ns, run the following command: + + ``` + # echo 200000 > /sys/module/haltpoll/parameters/guest_halt_poll_ns + ``` ## security Best Practices @@ -510,6 +565,8 @@ Currently, openEuler20.09 provides the libtpms and swtpm sources. You can run th ... ``` + >![](public_sys-resources/icon-note.gif) **NOTE:** + > Currently, the VM trusted boot feature of openEuler20.09 AArch64 version does not support the ACPI feature. Therefore, do not configure the ACPI feature for VMs. Otherwise, the vTPM device cannot be identified after the VM is started. 2. Create the VM. diff --git a/docs/en/docs/20.09/docs/Virtualization/environment-preparation.md b/docs/en/docs/Virtualization/environment-preparation.md similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/environment-preparation.md rename to docs/en/docs/Virtualization/environment-preparation.md diff --git a/docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP1.png b/docs/en/docs/Virtualization/figures/CertEnrollP1.png similarity index 100% rename from docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP1.png rename to docs/en/docs/Virtualization/figures/CertEnrollP1.png diff --git a/docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP2.png b/docs/en/docs/Virtualization/figures/CertEnrollP2.png similarity index 100% rename from docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP2.png rename to docs/en/docs/Virtualization/figures/CertEnrollP2.png diff --git a/docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP3.png b/docs/en/docs/Virtualization/figures/CertEnrollP3.png similarity index 100% rename from docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP3.png rename to docs/en/docs/Virtualization/figures/CertEnrollP3.png diff --git a/docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP4.png b/docs/en/docs/Virtualization/figures/CertEnrollP4.png similarity index 100% rename from docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP4.png rename to docs/en/docs/Virtualization/figures/CertEnrollP4.png diff --git a/docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP5.png b/docs/en/docs/Virtualization/figures/CertEnrollP5.png similarity index 100% rename from docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP5.png rename to docs/en/docs/Virtualization/figures/CertEnrollP5.png diff --git a/docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP6.png b/docs/en/docs/Virtualization/figures/CertEnrollP6.png similarity index 100% rename from docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP6.png rename to docs/en/docs/Virtualization/figures/CertEnrollP6.png diff --git a/docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP7.png b/docs/en/docs/Virtualization/figures/CertEnrollP7.png similarity index 100% rename from docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP7.png rename to docs/en/docs/Virtualization/figures/CertEnrollP7.png diff --git a/docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP8.png b/docs/en/docs/Virtualization/figures/CertEnrollP8.png similarity index 100% rename from docs/en/docs/20.09_LTS/docs/Virtualization/figures/CertEnrollP8.png rename to docs/en/docs/Virtualization/figures/CertEnrollP8.png diff --git a/docs/en/docs/20.09_LTS/docs/Virtualization/figures/OSBootFlow.png b/docs/en/docs/Virtualization/figures/OSBootFlow.png similarity index 100% rename from docs/en/docs/20.09_LTS/docs/Virtualization/figures/OSBootFlow.png rename to docs/en/docs/Virtualization/figures/OSBootFlow.png diff --git a/docs/en/docs/20.09_LTS/docs/Virtualization/figures/SecureBootFlow.png b/docs/en/docs/Virtualization/figures/SecureBootFlow.png similarity index 100% rename from docs/en/docs/20.09_LTS/docs/Virtualization/figures/SecureBootFlow.png rename to docs/en/docs/Virtualization/figures/SecureBootFlow.png diff --git a/docs/en/docs/20.09/docs/Virtualization/figures/en-us_image_0218587435.png b/docs/en/docs/Virtualization/figures/en-us_image_0218587435.png similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/figures/en-us_image_0218587435.png rename to docs/en/docs/Virtualization/figures/en-us_image_0218587435.png diff --git a/docs/en/docs/20.09/docs/Virtualization/figures/en-us_image_0218587436.png b/docs/en/docs/Virtualization/figures/en-us_image_0218587436.png similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/figures/en-us_image_0218587436.png rename to docs/en/docs/Virtualization/figures/en-us_image_0218587436.png diff --git a/docs/en/docs/20.09/docs/Virtualization/figures/kvm-architecture.png b/docs/en/docs/Virtualization/figures/kvm-architecture.png similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/figures/kvm-architecture.png rename to docs/en/docs/Virtualization/figures/kvm-architecture.png diff --git a/docs/en/docs/20.09/docs/Virtualization/figures/status-transition-diagram.png b/docs/en/docs/Virtualization/figures/status-transition-diagram.png similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/figures/status-transition-diagram.png rename to docs/en/docs/Virtualization/figures/status-transition-diagram.png diff --git a/docs/en/docs/20.09/docs/Virtualization/figures/virtual-network-structure.png b/docs/en/docs/Virtualization/figures/virtual-network-structure.png similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/figures/virtual-network-structure.png rename to docs/en/docs/Virtualization/figures/virtual-network-structure.png diff --git a/docs/en/docs/20.09/docs/Virtualization/figures/virtualized-architecture.png b/docs/en/docs/Virtualization/figures/virtualized-architecture.png similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/figures/virtualized-architecture.png rename to docs/en/docs/Virtualization/figures/virtualized-architecture.png diff --git a/docs/en/docs/20.09/docs/Virtualization/installation-to-virtualization.md b/docs/en/docs/Virtualization/installation-to-virtualization.md similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/installation-to-virtualization.md rename to docs/en/docs/Virtualization/installation-to-virtualization.md diff --git a/docs/en/docs/20.09/docs/Virtualization/introduction-to-virtualization.md b/docs/en/docs/Virtualization/introduction-to-virtualization.md similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/introduction-to-virtualization.md rename to docs/en/docs/Virtualization/introduction-to-virtualization.md diff --git a/docs/en/docs/20.09/docs/Virtualization/managing-devices.md b/docs/en/docs/Virtualization/managing-devices.md similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/managing-devices.md rename to docs/en/docs/Virtualization/managing-devices.md diff --git a/docs/en/docs/20.09/docs/Virtualization/managing-vms.md b/docs/en/docs/Virtualization/managing-vms.md similarity index 97% rename from docs/en/docs/20.09/docs/Virtualization/managing-vms.md rename to docs/en/docs/Virtualization/managing-vms.md index 5a5b1ae8995c833cc8193744388426d4c9586892..6634e7840e95319dba40d6958e613870b8786adf 100644 --- a/docs/en/docs/20.09/docs/Virtualization/managing-vms.md +++ b/docs/en/docs/Virtualization/managing-vms.md @@ -650,153 +650,153 @@ To enable the TLS encryption authentication mode for the VNC, perform the follow >- 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 UEFI BIOS image, /path/to/QEMU-VARS.fd indicates the path of nvram image template. /usr/share/edk2/aarch64/vars-template-pflash.raw indicates the nvram image template path, and /path/to/QEMU-VARS.fd indicates the nvram image file path of the current virtual machine, which is used to save the environment variables in the UEFI BIOS system. - -##### 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 into the nvram configuration file /path/to/QEMU-VARS.fd. The next time the virtual machine starts up, it will read the configuration and initialize the certificate information and secure boot attributes from the file /path/to/QEMU-VARS.fd, importing the certificate and enable secure boot automatically. Similarly, we can use the file /path/to/QEMU-VARS.fd as a UEFI BIOS boot configuration template file for other same configured VMs, and make the other VMs boot with the certificate automatically imported and the secure boot option enabled by modifying the nvram template field with the following VM xml configuration changes. - -``` - - 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. - -``` - - - -``` - +### 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. \ No newline at end of file diff --git a/docs/en/docs/20.09/docs/Virtualization/public_sys-resources/icon-caution.gif b/docs/en/docs/Virtualization/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/public_sys-resources/icon-caution.gif rename to docs/en/docs/Virtualization/public_sys-resources/icon-caution.gif diff --git a/docs/en/docs/20.09/docs/Virtualization/public_sys-resources/icon-danger.gif b/docs/en/docs/Virtualization/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/public_sys-resources/icon-danger.gif rename to docs/en/docs/Virtualization/public_sys-resources/icon-danger.gif diff --git a/docs/en/docs/20.09/docs/Virtualization/public_sys-resources/icon-note.gif b/docs/en/docs/Virtualization/public_sys-resources/icon-note.gif similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/public_sys-resources/icon-note.gif rename to docs/en/docs/Virtualization/public_sys-resources/icon-note.gif diff --git a/docs/en/docs/20.09/docs/Virtualization/public_sys-resources/icon-notice.gif b/docs/en/docs/Virtualization/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/public_sys-resources/icon-notice.gif rename to docs/en/docs/Virtualization/public_sys-resources/icon-notice.gif diff --git a/docs/en/docs/20.09/docs/Virtualization/public_sys-resources/icon-tip.gif b/docs/en/docs/Virtualization/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/public_sys-resources/icon-tip.gif rename to docs/en/docs/Virtualization/public_sys-resources/icon-tip.gif diff --git a/docs/en/docs/20.09/docs/Virtualization/public_sys-resources/icon-warning.gif b/docs/en/docs/Virtualization/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/public_sys-resources/icon-warning.gif rename to docs/en/docs/Virtualization/public_sys-resources/icon-warning.gif diff --git a/docs/en/docs/20.09/docs/Virtualization/system-resource-management.md b/docs/en/docs/Virtualization/system-resource-management.md similarity index 97% rename from docs/en/docs/20.09/docs/Virtualization/system-resource-management.md rename to docs/en/docs/Virtualization/system-resource-management.md index 456489f7cb821054805c891b194b21f35ad5d67b..33553d2ad0d49d370aeadfd1c8cdb84e9abe5984 100644 --- a/docs/en/docs/20.09/docs/Virtualization/system-resource-management.md +++ b/docs/en/docs/Virtualization/system-resource-management.md @@ -1,5 +1,8 @@ # system Resource Management +[[toc]] + + The **libvirt** command manages VM system resources, such as vCPU and virtual memory resources. Before you start: @@ -7,19 +10,6 @@ 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) - - [CPU Hot Add](#cpu-hot-add) - - [Managing Virtual Memory](#managing-virtual-memory) - - [Introduction to NUMA](#introduction-to-numa) - - [Configuring Host NUMA](#configuring-host-numa) - - [Configuring Guest NUMA](#configuring-guest-numa) - - [Memory Hot Add](#memory-hot-add) - - ## Managing vCPU diff --git a/docs/en/docs/Virtualization/tool-guide.md b/docs/en/docs/Virtualization/tool-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..d22f203deaa05c79cb05eebb48ef455c5b2dce8f --- /dev/null +++ b/docs/en/docs/Virtualization/tool-guide.md @@ -0,0 +1,140 @@ +# Tool Guide + +- [vmtop](#vmtop) + +## 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/20.09/docs/Virtualization/user-and-administrator-guide.md b/docs/en/docs/Virtualization/user-and-administrator-guide.md similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/user-and-administrator-guide.md rename to docs/en/docs/Virtualization/user-and-administrator-guide.md diff --git a/docs/en/docs/20.09/docs/Virtualization/virtualization.md b/docs/en/docs/Virtualization/virtualization.md similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/virtualization.md rename to docs/en/docs/Virtualization/virtualization.md diff --git a/docs/en/docs/20.09/docs/Virtualization/vm-configuration.md b/docs/en/docs/Virtualization/vm-configuration.md similarity index 99% rename from docs/en/docs/20.09/docs/Virtualization/vm-configuration.md rename to docs/en/docs/Virtualization/vm-configuration.md index 5c177e8cb319a052acd803b73eb20a023db87b58..e42e9ad02c921e04dec6a15df3af9f24b8736777 100644 --- a/docs/en/docs/20.09/docs/Virtualization/vm-configuration.md +++ b/docs/en/docs/Virtualization/vm-configuration.md @@ -277,7 +277,7 @@ In this example, two I/O threads, one block disk device and one CD, are configur - + @@ -777,7 +777,7 @@ An XML configuration file of AArch64 VM, which contains basic elements. The foll - + diff --git a/docs/en/docs/20.09/docs/Virtualization/vm-live-migration.md b/docs/en/docs/Virtualization/vm-live-migration.md similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/vm-live-migration.md rename to docs/en/docs/Virtualization/vm-live-migration.md diff --git a/docs/en/docs/20.09/docs/Virtualization/vm-maintainability-management.md b/docs/en/docs/Virtualization/vm-maintainability-management.md similarity index 100% rename from docs/en/docs/20.09/docs/Virtualization/vm-maintainability-management.md rename to docs/en/docs/Virtualization/vm-maintainability-management.md diff --git a/docs/en/docs/path/path.json b/docs/en/docs/path/path.json deleted file mode 100644 index 489cb63270c6aabd8d4d54eaec551aa844696184..0000000000000000000000000000000000000000 --- a/docs/en/docs/path/path.json +++ /dev/null @@ -1,89 +0,0 @@ -[ - { - "value": "1.0_Base", - "name": "1.0 BASE", - "docs": [ - { - "title": "Install", - "doc": [ - { - "img": "/img/docs/docs-installation.svg", - "path": "/docs/Installation/Installation.html", - "name": "Installation Guide" - } - ] - } - ] - }, - { - "value": "20.03_LTS", - "name": "20.03 LTS", - "docs": [ - { - "title": "About", - "doc": [ - { - "img": "/img/docs/docs-releasenotes.svg", - "path": "/docs/Releasenotes/release_notes.html", - "name": "Release Notes" - } - ] - }, - { - "title": "Install", - "doc": [ - { - "img": "/img/docs/docs-quickstart.svg", - "path": "/docs/Quickstart/quick-start.html", - "name": "Quick Start" - }, - { - "img": "/img/docs/docs-installation.svg", - "path": "/docs/Installation/Installation.html", - "name": "Installation Guide" - } - ] - }, - { - "title": "Mgmt", - "doc": [ - { - "img": "/img/docs/docs-administration.svg", - "path": "/docs/Administration/administration.html", - "name": "Administrator Guide" - } - ] - }, - { - "title": "Use", - "doc": [ - { - "img": "/img/docs/docs-user.svg", - "path": "/docs/Virtualization/virtualization.html", - "name": "Virtualization User Guide" - }, - { - "img": "/img/docs/docs-user.svg", - "path": "/docs/Container/container.html", - "name": "Container User Guide" - }, - { - "img": "/img/docs/docs-user.svg", - "path": "/docs/A-Tune/A-Tune.html", - "name": "A-Tune User Guide" - } - ] - }, - { - "title": "Dev", - "doc": [ - { - "img": "/img/docs/docs-application.svg", - "path": "/docs/ApplicationDev/application-development.html", - "name": "Application Development Guide" - } - ] - } - ] - } -] \ No newline at end of file diff --git a/docs/en/docs/userguide/images/Maintainer.jpg b/docs/en/docs/userguide/images/Maintainer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..45912da4e7915715df0f598b9429f63bc8695667 Binary files /dev/null and b/docs/en/docs/userguide/images/Maintainer.jpg differ diff --git a/docs/en/docs/userguide/images/PatchTracking.jpg b/docs/en/docs/userguide/images/PatchTracking.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3bac7d2f1b4a228da8d273cdaef55f2d33792fab Binary files /dev/null and b/docs/en/docs/userguide/images/PatchTracking.jpg differ diff --git a/docs/zh/docs/20.09/docs/userguide/images/pkgship_outline.png b/docs/en/docs/userguide/images/pkgship_outline.png similarity index 100% rename from docs/zh/docs/20.09/docs/userguide/images/pkgship_outline.png rename to docs/en/docs/userguide/images/pkgship_outline.png diff --git a/docs/en/docs/userguide/overview.md b/docs/en/docs/userguide/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..e3b656290f017e8688b1f831d00dd9ebeb86c576 --- /dev/null +++ b/docs/en/docs/userguide/overview.md @@ -0,0 +1,3 @@ +# Toolset User Guide + +This document describes the toolkit used for the openEuler release, including the overview, installation, and usage of tools. diff --git a/docs/en/docs/userguide/patch-tracking.md b/docs/en/docs/userguide/patch-tracking.md new file mode 100644 index 0000000000000000000000000000000000000000..a83d4ac20f0bb89cceee22af031be6b25c22b238 --- /dev/null +++ b/docs/en/docs/userguide/patch-tracking.md @@ -0,0 +1,338 @@ +# patch-tracking + + + +- [patch-tracking](#patch-tracking) + - [Overview](#overview) + - [Architecture](#architecture) + - [C/S Architecture](#cs-architecture) + - [Core Procedure](#core-procedure) + - [Data structure](#data-structure) + - [Tool Deployment](#tool-deployment) + - [Downloading Software](#downloading-software) + - [Installing the Tool](#installing-the-tool) + - [Generating a Certificate](#generating-a-certificate) + - [Configuring Parameters](#configuring-parameters) + - [Starting the Patch Tracking Service](#starting-the-patch-tracking-service) + - [Tool Usage](#tool-usage) + - [FAQ](#faq) + - [When I access api.github.com, the connection is refused.](#when-i-access-apigithubcom-the-connection-is-refused) + + + + +## Overview + +During the development of the openEuler release, the latest code of each software package in the upstream community needs to be updated in a timely manner to fix function bugs and security issues, preventing the openEuler release from defects and vulnerabilities. + +This tool manages the patches for software packages, proactively monitors the patches submitted by the upstream community, automatically generates patches, submits issues to the corresponding Maintainer, and verifies basic patch functions to reduce the verification workload and help the Maintainer make decisions quickly. + +## Architecture + +### C/S Architecture + +The patch-tracking uses the C/S architecture. + +The patch-tracking is located in the server. It executes patch tracking tasks, including maintaining tracking items, identifying branch code changes in the upstream repository and generating patch files, and submitting issues and PRs to Gitee. In addition, the patch-tracking provides RESTful APIs for adding, deleting, modifying, and querying tracking items. + +The patch-tracking-cli is a command line tool located in the client. It invokes the RESTful APIs of the patch-tracking to add, delete, modify, and query tracking items. + +### Core Procedure + +1, Patch tracking service procedure + +The procedure for handling the submitted patch is as follows: + +1. Add the tracking item using the command line tool. +2. Automatically obtain patch files from the upstream repository (for example, GitHub) that is configured for the tracking item. +3. Create a temporary branch and submit the obtained patch file to the temporary branch. +4. Automatically submit an issue to the corresponding repository and generate the PR associated with the issue. + +![PatchTracking](./images/PatchTracking.jpg) + +2, Procedure for the Maintainer to handle the submitted patch + +The procedure for handling the submitted patch is as follows: + +1. The Maintainer analyzes the PR. +2. Execute the continuous integration (CI). After the CI is successfully executed, determine whether to merge the PR. + +![Maintainer](./images/Maintainer.jpg) + +### Data structure + +* Tracking table + +| No. | Name | Description | Type | Key | Is Null Allowed | +| :--: | --------------- | ------------------------------------------------------------ | ------- | ------- | --------------- | +| 1 | id | Sequence number of the tracking item of the self-added patch | int | - | No | +| 2 | version_control | Version control system type of the upstream SCM | String | - | No | +| 3 | scm_repo | Upstream SCM repository address | String | - | No | +| 4 | scm_branch | Upstream SCM tracking branch | String | - | No | +| 5 | scm_commit | Latest Commit ID processed by the upstream code | String | - | Yes | +| 6 | repo | Address of the Gitee repository where the package source code is stored | String | Primary | No | +| 7 | branch | Branch of the Gitee repository where the package source code is stored | String | Primary | No | +| 8 | enabled | Indicating whether to start tracking | Boolean | - | No | + +* Issue table + +| No. | Name | Description | Type | Key | Is Null Allowed | +| :--: | ------ | ------------------------------------------------------------ | ------ | ------- | --------------- | +| 1 | issue | Issue No. | String | Primary | No | +| 2 | repo | Address of the Gitee repository where the package source code is stored | String | - | No | +| 3 | branch | Branch of the Gitee repository where the package source code is stored | String | - | No | + +## Tool Deployment + +### Downloading Software + +The repo source is officially released at https://repo.openeuler.org/. + +The RPM package can be obtained from https://build.openeuler.org/package/show/openEuler:20.09/patch-tracking. + +### Installing the Tool + +Method 1: Install the patch-tracking from the repo source. + +1. Use DNF to mount the repo source (The repo source of 20.09 or later is required. For details, see the [Application Development Guide](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)). Run the following command to download and install the patch-tracking and its dependencies. + +2. Run the following command to install the `patch-tracking`: + + ```shell script + dnf install patch-tracking + ``` + +Method 2: Install the patch-tracking using the RPM package. + +1. Install the required dependencies. + + ```shell script + dnf install python3-uWSGI python3-flask python3-Flask-SQLAlchemy python3-Flask-APScheduler python3-Flask-HTTPAuth python3-requests python3-pandas + ``` + +2. `patch-tracking-1.0.0-1.oe1.noarch.rpm` is used as an example. Run the following command to install the patch-tracking. + + ```shell script + rpm -ivh patch-tracking-1.0.0-1.oe1.noarch.rpm + ``` + +### Generating a Certificate + +Run the following command to generate a certificate: + +```shell script +openssl req -x509 -days 3650 -subj "/CN=self-signed" \ +-nodes -newkey rsa:4096 -keyout self-signed.key -out self-signed.crt +``` + +Copy the generated `self-signed.key` and `self-signed.crt` files to the **/etc/patch-tracking** directory. + +### Configuring Parameters + +Configure the corresponding parameters in the configuration file. The path of the configuration file is `/etc/patch-tracking/settings.conf`. + +1. Configure the service listening address. + + ``` + LISTEN = "127.0.0.1:5001" + ``` + +2. GitHub Token is used to access the repository information hosted in the upstream open source software repository of GitHub. For details about how to create a GitHub token, see [Creating a personal access token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token). + + ``` + GITHUB_ACCESS_TOKEN = "" + ``` + +3. For a repository that is hosted on Gitee and needs to be tracked, configure a Gitee Token with the repository permission to submit patch files, issues, and PRs. + + ``` + GITEE_ACCESS_TOKEN = "" + ``` + +4. Scan the database as scheduled to detect whether new or modified tracking items exist and obtain upstream patches for the detected tracking items. Set the interval of scanning and the unit is second. + + ``` + SCAN_DB_INTERVAL = 3600 + ``` + +5. When the command line tool is running, you need to enter the user name and password hash value for the authentication for the POST interface. + + ``` + USER = "admin" + + PASSWORD = "" + ``` + +> The default value of `USER` is `admin`. + +Run the following command to obtain the password hash value. **Test@123** is the configured password. + +``` +[root]# generate_password Test@123 +pbkdf2:sha256:150000$w38eLeRm$ebb5069ba3b4dda39a698bd1d9d7f5f848af3bd93b11e0cde2b28e9e34bfbbae +``` + +> The password hash value must meet the following complexity requirements: +> +> * The length is more than or equal to 6 bytes. +> * The password must contain uppercase letters, lowercase letters, digits, and special characters (~!@#%\^\*-\_=+). + +Add the password hash value `pbkdf2:sha256:150000$w38eLeRm$ebb5069ba3b4dda39a698bd1d9d7f5f848af3bd93b11e0cde2b28e9e34bfbbae` to the quotation marks of `PASSWORD = ""`. + +### Starting the Patch Tracking Service + +You can use either of the following methods to start the service: + +* Use the systemd mode. + + ``` + systemctl start patch-tracking + ``` + +* Run the executable program. + + ``` + /usr/bin/patch-tracking + ``` + +## Tool Usage + +1, Adding a Tracking Item + +You can associate the software repository and branch to be tracked with the corresponding upstream open source software repository and branch in any of the following ways: + +* Using CLI + +Parameter description: + +> --user: User name to be authenticated for the POST interface. It is the same as the USER parameter in the **settings.conf** file. +> --password: Password to be authenticated for the POST interface. It is the password string corresponding to the PASSWORD hash value in the **settings.conf** file. +> --server: URL for starting the patch tracking service, for example, 127.0.0.1:5001. +> --version\_control: Control tool of the upstream repository version. Only GitHub is supported. +> --repo: Name of the repository to be tracked, in the format of organization/repository. +> +> --branch: Branch name of the repository to be tracked. +> --scm\_repo: Name of the upstream repository to be tracked, in the GitHub format of organization/repository. +> --scm\_branch: Branch of the upstream repository to be tracked. +> +> --enabled: Indicates whether to automatically track the repository. + +For example: + +```shell script +patch-tracking-cli add --server 127.0.0.1:5001 --user admin --password Test@123 --version_control github --repo testPatchTrack/testPatch1 --branch master --scm_repo BJMX/testPatch01 --scm_branch test --enabled true +``` + +* Using a Specified File + +Parameter description: + +> --server: URL for starting the patch tracking service, for example, 127.0.0.1:5001. +--user: User name to be authenticated for the POST interface. It is the same as the USER parameter in the **settings.conf** file. +--password: Password to be authenticated for the POST interface. It is the password string corresponding to the PASSWORD hash value in the **settings.conf** file. +--file: YAML file path. + +Add the information about the repository, branch, version management tool, and whether to enable monitoring to the YAML file (for example, **tracking.yaml**). The file path is used as the command of the `--file` to invoke the input parameters. + +For example: + +```shell script +patch-tracking-cli add --server 127.0.0.1:5001 --user admin --password Test@123 --file tracking.yaml +``` + +The format of the YAML file is as follows. The content on the left of the colon (:) cannot be modified, and the content on the right of the colon (:) needs to be set based on the site requirements. + +```shell script +version_control: github +scm_repo: xxx/xxx +scm_branch: master +repo: xxx/xxx +branch: master +enabled: true +``` + +> version\_control: Control tool of the upstream repository version. Only GitHub is supported. +scm\_repo: Name of the upstream repository to be tracked, in the GitHub format of organization/repository. +scm\_branch: Branch of the upstream repository to be tracked. +repo: Name of the repository to be tracked, in the format of organization/repository. +branch: Branch name of the repository to be tracked. +enabled: Indicates whether to automatically track the repository. + +* Using a Specified Directory + +Place multiple `xxx.yaml` files in a specified directory, such as the `test_yaml`, and run the following command to record the tracking items of all YAML files in the specified directory. + +Parameter description: + +> --user: User name to be authenticated for the POST interface. It is the same as the USER parameter in the **settings.conf** file. +--password: Password to be authenticated for the POST interface. It is the password string corresponding to the PASSWORD hash value in the **settings.conf** file. +--server: URL for starting the patch tracking service, for example, 127.0.0.1:5001. +--dir: Path where the YAML file is stored. + +```shell script +patch-tracking-cli add --server 127.0.0.1:5001 --user admin --password Test@123 --dir /home/Work/test_yaml/ +``` + +2, Querying a Tracking Item + +Parameter description: + +> --server: (Mandatory) URL for starting the patch tracking service, for example, 127.0.0.1:5001. +--table: (Mandatory) Table to be queried. +--Repo: (Optional) repo to be queried. Query all content in the table if this parameter is not configured. +--branch: (Optional) Branch to be queried. + +```shell script +patch-tracking-cli query --server --table tracking +``` + +The website can be accessed properly. + +```shell script +patch-tracking-cli query --server 127.0.0.1:5001 --table tracking +``` + +3, Querying the Generated Issue + +```shell script +patch-tracking-cli query --server --table issue +``` + +For example: + +```shell script +patch-tracking-cli query --server 127.0.0.1:5001 --table issue +``` + +4, Deleting a Tracking Item + +```shell script +patch-tracking-cli delete --server SERVER --user USER --password PWD --repo REPO [--branch BRANCH] +``` + +For example: + +```shell script +patch-tracking-cli delete --server 127.0.0.1:5001 --user admin --password Test@123 --repo testPatchTrack/testPatch1 --branch master +``` + +> You can delete a single piece of data from a specified repo or branch. You can also delete data of all branches in a specified repo. + +5, Checking Issues and PRs on Gitee + +Log in to Gitee and check the software project to be tracked. On the Issues and Pull Requests tab pages of the project, you can see the item named in `[patch tracking] TIME`, for example, the `[patch tracking] 20200713101548`. This item is the issue and PR of the patch file that is just generated. + +## FAQ + +### When I access api.github.com, the connection is refused. + +#### Symptom + +During the operation of the patch-tracking, the following error message may occur: +``` + 9月 21 22:00:10 localhost.localdomain patch-tracking[36358]: 2020-09-21 22:00:10,812 - patch_tracking.util.github_api - WARNING - HTTPSConnectionPool(host='api.github.com', port=443): Max retries exceeded with url: /user (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) +``` + +#### Cause Analysis + +The preceding problem is caused by the unstable network access between the patch-tracking and GitHub API. Ensure that the patch-tracking is operating in a stable network environment (for example, HUAWEI CLOUD Hong Kong). \ No newline at end of file diff --git a/docs/en/docs/userguide/pkgship.md b/docs/en/docs/userguide/pkgship.md new file mode 100644 index 0000000000000000000000000000000000000000..3e3a4fdc6ab4410d543ec6ed837875a956cffd8e --- /dev/null +++ b/docs/en/docs/userguide/pkgship.md @@ -0,0 +1,399 @@ +# pkgship + + + +- [pkgship](#pkgship) + - [Overview](#overview) + - [Architecture](#architecture) + - [Downloading Software](#downloading-software) + - [Operating Environments](#operating-environments) + - [Installing the Tool](#installing-the-tool) + - [Configuring Parameters](#configuring-parameters) + - [Starting and Stopping Services](#starting-and-stopping-services) + - [Tool Usage](#tool-usage) + + + +## Overview + +pkgship is a query tool used to manage the dependency of OS software packages and provide a complete dependency graph. The pkgship provides functions such as software package dependency query, lifecycle management, and patch query. + +1. Software package dependency query: Allows community personnel to understand the impact on software when software packages are introduced, updated, or deleted. +2. Lifecycle management: Tracks the release status of upstream software packages so that the maintenance personnel can learn about the current software status and upgrade the software properly in a timely manner. +3. Patch query: Allows community personnel to learn about the patches in the openEuler software package and obtain the patch information. For details, see [patch-tracking](patch-tracking.md). + +## Architecture + +The system is developed using Flask-RESTful and adopts the SQLAlchemy ORM query framework. + +![avatar](./images/pkgship_outline.png) + +## Downloading Software + +* The repo source is officially released at +* You can obtain the source code at +* You can obtain the RPM package of the beta version at + +## Operating Environments + +* The available memory is greater than 700 MB. +* The Python version is 3.8 or later. +* The SQLite version is 3.32 or later. + +## Installing the Tool + +You can use either of the following methods to install the tool: + +* Method 1: Mount the repo source using DNF. +Use DNF to mount the repo source where the pkgship is located (for details, see the [Application Development Guide](https://openeuler.org/zh/docs/20.09/docs/ApplicationDev/%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87.html)), run the following command to download and install the pkgship and its dependencies: + + ```bash + dnf install pkgship + ``` + +* Method 2: Install the RPM package. Download the RPM package of the pkgship and run the following command to install the pkgship (x.x-x indicates the version number and needs to be replaced with the actual one): + + ```bash + rpm -ivh pkgship-x.x-x.oe1.noarch.rpm + ``` + + or the following command: + + ```bash + dnf install pkgship-x.x-x.oe1.noarch.rpm + ``` + +## Configuring Parameters + +1. Configure the parameters in the configuration file. The default configuration file of the system is stored in **/etc/pkgship/packge.ini**. Modify the configuration file as required. + + ```basn + vim /etc/pkgship/package.ini + ``` + + ```ini + [SYSTEM CONFIGURATION] + + ; Directory for storing the YAML file imported during database initialization. The YAML file records the location of the imported SQLite file. + init_conf_path=/etc/pkgship/conf.yaml + + ; Path for storing the SQLite file that is successfully imported + data_base_path=/var/run/pkgship_dbs + + ; Write port + write_port=8080 + + ; Query port + query_port=8090 + + ; Write permission access IP address + write_ip_addr=127.0.0.1 + + ; Query permission access IP address + query_ip_addr=127.0.0.1 + + ; Address of the remote service. The command line can directly invoke the remote service to complete data requests. You only need to add the -remote parameter to the end of each command line. + remote_host=https://api.openeuler.org/pkgmanage + + [LOG] + + ; Path for storing logs + log_path=/var/log/pkgship/ + + ; Log level as follows: + ; INFO DEBUG WARNING ERROR CRITICAL + log_level=INFO + + ; Log name + log_name=log_info.log + + ; Number of logs that are dynamically created after the size of a log file reaches the upper limit. + backup_count=10 + + ; Size of each log file + max_bytes=314572800 + + [uWSGI SERVICE CONFIGURATION] + + ; Path for storing uwsgi log + daemonize=/var/log/uwsgi.log + + ; Size of data transmitted at the front- and back-end + buffer-size=65536 + + ; HTTP connection time + http-timeout=600 + + ; Server response time + harakiri=600 + + [TIMEDTASK] + + ; Whether to enable scheduled tasks + open=True + + ; Set the time when a scheduled task is triggered + hour=3 + minute=0 + + [LIFECYCLE] + ; Remote storage address of the YAML address of each package + warehouse_remote=https://gitee.com/openeuler/openEuler-Advisor/raw/master/upstream-info/ + + ; When executing a scheduled task, you can enable multi-thread execution and set the number of threads in the thread pool based on the server configuration. + pool_workers=10 + + ; Warehouse name + warehouse=src-openeuler + + ``` + +2. Create a YAML configuration file to initialize the database. By default, the conf.yaml file is stored in the **/etc/pkgship/** directory. Based on this configuration, the pkgship reads the name of the database to be created and the SQLite file to be imported. An example of the conf.yaml file is as follows: + + ```yaml + - dbname: openEuler-20.09 + src_db_file: /etc/pkgship/src.sqlite + bin_db_file: /etc/pkgship/bin.sqlite + lifecycle: enable + priority: 1 + ``` + +> To change the storage path, change the value of **init\_conf\_path** in the **package.ini** file. + +## Starting and Stopping Services + +The pkgship uses the uWSGI web server. The commands for starting and stopping the service are as follows. You can specify whether to start the read-only (write-only) service or start the read and write services at the same time. + +```bash +pkgshipd start [manage/selfpkg] + +pkgshipd stop [manage/selfpkg] +``` + +## Tool Usage + +1. Initialize the database. + + > Application scenario: After the service is started, to query the package information and package dependency in the corresponding database, such as Mainline and openEuler 20.09, you need to import the SQLite (including the source code library and binary library), which is generated by the database using createrepo, to the service, and generate the corresponding DB file. When the **lifecycle** parameter of the database is set to enable in the conf.yaml file, a corresponding table is generated in **lifecycle.db** to record database information. The database table name (**tablename**) is read from this file subsequently. The **\[-filepath]** parameter is optional. + + ```bash + pkgship init [-filepath path] + ``` + + > Parameter description: +**-filepath**: Specifies the path of the initialized configuration file. You can use either a relative path or an absolute path. If no parameter is specified, the default configuration is used for initialization. + +2. Query a single package. + + You can query the information about a source code package (**packagename**) in a specified database table (**tablename**). + + > Application scenario: You can query information about a specific source code package in a specified database. The **packagename** and **tablename** are mandatory. + + ```bash + pkgship single packagename tablename + ``` + + > Parameter description: +**packagename**: Specifies the name of the source code package to be queried. +**tablename**: Specifies the database name. + +3. Query all packages. + + Query information about all packages in the database. + + > Application scenario: You can query information about all software packages in a specified database. The **tablename** is mandatory, and the **\[-packagename]** and **\[-maintainer]** are optional. + + ```bash + pkgship list tablename [-packagename pkgName] [-maintainer maintainer] + ``` + + > Parameter description: +**tablename**: Specifies the database name. +**-packagename**: Matches the package whose name contains the parameter string. +**-maintainer**: Matches the package in which **maintainer** is a parameter. + +4. Query the installation dependency. + + Query the installation dependency of the binary package (binaryName). + + > Application scenario: When you need to install the binary package A, you need to install B, the installation dependency of A, and C, the installation dependency of B, etc. A can be successfully installed only after all the installation dependencies are installed in the system. Therefore, before installing the binary package A, you may need to query all installation dependencies of A. You can run the following command to query multiple databases based on the default priority of the platform, and to customize the database query priority. + + ```bash + pkgship installdep binaryName [-dbs dbName1 dbName2...] + ``` + + > Parameter description: +**-dbs**: Specifies the database query priority. **dbName** indicates the database name. + +5. Query the compilation dependency. + + Query all compilation dependencies of the source code package (**sourceName**). + + > Application scenario: To compile the source code package A, you need to install B, the compilation dependency package of A. To install B, you need to obtain all installation dependency packages of B. Therefore, before compiling the source code package A, you may need to query the compilation dependencies of A and all installation dependencies of these compilation dependencies. You can run the following command to query multiple databases based on the default priority of the platform, and to customize the database query priority. + + ```bash + pkgship builddep sourceName [-dbs dbName1 dbName2...] + ``` + + > Parameter description: +**-dbs**: Specifies the database query priority. **dbName** indicates the database name. + +6. Query the self-compilation and self-installation dependencies. + + Query the installation and compilation dependencies of a specified binary package (**binaryName**) or source code package (**sourceName**). In the command, **\[pkgName]** indicates the name of the binary package or source code package to be queried. When querying a binary package, you can query all installation dependencies of the binary package, and the compilation dependencies of the source code package corresponding to the binary package, as well as all installation dependencies of these compilation dependencies. When querying a source code package, you can query its compilation dependency, and all installation dependencies of these compilation dependencies, as well as all installation dependencies of the binary packages generated by the source code package. In addition, you can run this command together with the corresponding parameters to query the self-compilation dependency of a software package and the dependency of a subpackage. + + > Application scenario: If you want to introduce a new software package based on the existing version library, you need to introduce all compilation and installation dependencies of the software package. You can run this command to query these two dependency types at the same time to know the packages introduced by the new software package, and to query binary packages and source code packages. + + ```bash + pkgship selfbuild [pkgName] [-dbs dbName1 dbName2 ] [-t source] [-s 1] [-w 1] + ``` + + > Parameter description: +**-dbs:** Specifies the database priority. **dbName** indicates the database name. The following is an example: + + > ```bash + > pkgship selfbuild pkgName -dbs dbName1 dbName2 + > ``` + + > **-t source/binary**: Specifies whether the package **pkgName** to be queried is a source code package or a binary package. If **-t** is not added, the package is a binary package by default. +**-s**: This parameter is added to query all installation dependencies and compilation dependencies of the software package (that is, compilation dependencies of the source code package on which compilation depends), and all installation dependencies of the compilation dependencies. In the command, **0** following the **-s** indicates that the self-compilation dependency is not queried, and 1 indicates that the self-compilation dependency is queried. The default value is **0**, and you can specify the value to **1**. If the **-s** is not added, all installation dependencies, layer-1 compilation dependencies, and layer-1 compilation dependencies of the software package are queried. The following is an example of querying self-compilation dependencies: + + > ```bash + > pkgship selfbuild pkgName -t source -s 1 + > ``` + + > **-w**: When a binary package is introduced and this parameter is added, the source code package corresponding to the binary package and all binary packages generated by the source code package are displayed in the query result. In the command, **0** following **-w** indicates that the corresponding subpackage is not queried, and **1** indicates that the corresponding subpackage is queried. The default value is **0**, and you can specify the value to **1**. When **-w** is not added, only the corresponding source code package is displayed in the query result when a binary package is introduced. The following is an example of querying a subpackage: + + > ```bash + > pkgship selfbuild pkgName -w 1 + > ``` + +7. Query dependency. +Query the packages that depend on the source code package (**sourceName**) in a database (**dbName**). + + > Application scenario: You can run this command to query the software packages that will be affected by the upgrade or deletion of the software source code package A. This command displays the source code packages (for example, B) whose compilation depends on all binary packages generated by the source code package A, and the binary packages (for example, C1) whose installation depends on all binary packages generated by A. This command also displays the source code packages (for example, D) whose compilation depends on C1 and the binary package generated by B, and the binary packages (for example, E1) whose installation depends on C1 and the binary package generated by B, etc. Iterate the packages that depend on these binary packages. **\[-w 0/1]** is an optional parameter. The following is an example: + + ```bash + pkgship bedepend sourceName dbName [-w 1] + ``` + + > Parameter description +**-w (0/1)**: If the command does not contain configuration parameters or **\[-w 0]**, by default, the query result does not contain the subpackage of the corresponding binary package. When the command is followed by the configuration parameter or **\[-w 1]**, the dependency of the binary package C1 is queried, as well as the dependency of other binary packages (for example, C2 and C3) generated by C, the source code package corresponding to C1. + +8. Modify package information. + + > Application scenario: You can modify the information about the maintainer and maintenance level of a specified source code package. **[-Packagename]**, **\[-maintainer]**, **\[-maintainlevel]**, **\[-filefolder]**, and **\[--batch]** are optional parameters. + + You can modify the information with either of the following methods: +Method 1: Specify the source code package name (**packagename**) to modify the information about the maintainer (**Newmaintainer**) and maintenance level (**Newmaintainlevel**) of the source code package. The following is an example: + + ```bash + pkgship updatepkg [-packagename packagename] [-maintainer Newmaintainer] [-maintainlevel Newmaintainlevel] + ``` + + > Parameter description: +**-packagename**: Specifies the name of the package to be maintained. +**-maintainer**: Specifies the maintainer of the update package. +**-maintainlevel**: Specifies the maintenance level of the update package. The value ranges from 1 to 4, and the default value is **1**. + + Method 2: Specify the file path, and the maintainer, and maintenance level of the batch update package. The **--batch** parameter must be added to this command. The following is an example: + + ```bash + pkgship updatepkg [--batch] [-filefolder path] + ``` + + > Parameter description: +**-filefolder**: Specifies the YAML file where the package information is stored. The specified directory can contain only the updated YAML files. +**--batch**: Specifies the update in batches. This parameter must be used together with the **\[-filefolder]** parameter. + + You can create a file named A.yaml, set the package name to A, and specify the YAML content to modify the package information. +The YAML format of the package information is as follows: + + ``` + maintainer:Newmaintainlevel + maintainlevel: Newmaintainlevel + ``` + +9. Delete databases. + + > Application scenario: Delete a specified database (**dbName**). + + ```bash + pkgship rm dbName + ``` + +10. Query table information. + + > Application scenario: View all data tables in the current lifecycle database. + + ```bash + pkgship tables + ``` + +11. Query issues. + + > Application scenario: View information about all issues in all source code packages. The optional parameters include **\[-packagename]**, **\[-issue\_type]**, **\[-issue\_status]**, **\[-maintainer]**, **\[-page N]**, and **\[-pagesize pageSize]**. + + ```bash + pkgship issue [-packagename pkgName],[-issue_type issueType],[-issue_status issueStatus],[-maintainer maintainer],[-page N],[-pagesize pageSize] + ``` + + > Parameter description: +**-packagename**: Specifies the package name for fuzzy query. +**-issue\_type**: Specifies the issue type for query. +**-issue\_status**: Specifies the issue status for query. +**-maintainer**: Specifies a maintainer for query. +**-page**: Specifies the data on page N to be queried. +**-pagesize**: Specifies the number of data records displayed on each page. + + ```bash + Run the following command to specify a package name for fuzzy search: + pkgship issue -packagename pkgName + ``` + + ```bash + Run the following command to specify an issue type for query: + pkgship issue -issue_type issueType + ``` + + ```bash + Run the following command to specify an issue status for query: + pkgship issue -issue_status issueStatus + ``` + + ```bash + Run the following command to specify a maintainer for query: + pkgship issue -maintainer maintainer + ``` + + ```bash + Run the following command to specify the data of page N for query: + pkgship issue -page N + ``` + + ```bash + Run the following command to specify the number of data items of each page for query: + pkgship issue -pagesize pageSize + ``` + +12. Update the lifecycle of the software package. + + > Application scenario: Update the information about the issue, maintainer, and maintenance level of all software packages in the lifecycle table. The optional parameters include **\[--issue]** and **\[--package]**. + + ```bash + pkgship update [--issue] [--package] + ``` + + > Parameter description: +**--issue**: Updates the issue information of all software packages in the lifecycle table. Based on the software package names in the lifecycle table, the system crawls the issue information corresponding to the software package. +**--package**: Updates the information about the lifecycle, maintainer, and maintenance level of all software packages in the lifecycle table. + + ```bash + Run the following command to update the issue information of all software packages in the lifecycle table: + pkgship update --issue + ``` + + ```bash + Run the following command to update the lifecycles, maintainers, and maintenance levels of all software packages in the lifecycle table: + pkgship update --package + ``` \ No newline at end of file diff --git a/docs/en/documentation/README.md b/docs/en/documentation/README.md deleted file mode 100644 index fdcdac580235f4bd4d680131a698564e0734a967..0000000000000000000000000000000000000000 --- a/docs/en/documentation/README.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Documentation" - ---- - - - \ No newline at end of file diff --git a/docs/en/docs/20.09/menu/menu.json b/docs/en/menu/menu.json similarity index 92% rename from docs/en/docs/20.09/menu/menu.json rename to docs/en/menu/menu.json index 43315eb278ad84d70bb740fe90d561804c45e35c..f0414cf0b3d8cc21974c74751a8eb656d5fc7c1a 100644 --- a/docs/en/docs/20.09/menu/menu.json +++ b/docs/en/menu/menu.json @@ -93,6 +93,11 @@ "path": "docs/Installation/using-kickstart-for-automatic-installation", "children": [] }, + { + "label": "Installation UKUI", + "path": "docs/Installation/install-UKUI", + "children": [] + }, { "label": "FAQs", "path": "docs/Installation/faqs", @@ -210,7 +215,7 @@ }, { "label": "Trusted Computing", - "path": "docs/Administration/Trusted Computing", + "path": "docs/Administration/trusted-computing", "children": [] }, { @@ -331,6 +336,11 @@ "path": "docs/Virtualization/best-practices", "children": [] }, + { + "label": "Tool Guide", + "path": "docs/Virtualization/tool-guide", + "children": [] + }, { "label": "Appendix", "path": "docs/Virtualization/appendix", @@ -338,6 +348,47 @@ } ] }, + { + "label": "StratoVirt User Guide", + "path": "docs/StratoVirt/StratoVrit_guidence", + "children": [ + { + "label": "Introduction to StratoVirt", + "path": "docs/StratoVirt/StratoVirt_Intoduction", + "children": [] + }, + { + "label": "Installing StratoVirt", + "path": "docs/StratoVirt/Install_StratoVirt", + "children": [] + }, + { + "label": "Preparing the Environment", + "path": "docs/StratoVirt/Prepare_env", + "children": [] + }, + { + "label": "Configuring a VM", + "path": "docs/StratoVirt/VM_configuration", + "children": [] + }, + { + "label": "Managing the VM Lifecycle", + "path": "docs/StratoVirt/Manage_life_cycle", + "children": [] + }, + { + "label": "Managing VM resources", + "path": "docs/StratoVirt/Manage_resource", + "children": [] + }, + { + "label": "Interconnecting with the iSula Secure Container", + "path": "docs/StratoVirt/Interconnect_isula", + "children": [] + } + ] + }, { "label": "Container User Guide", "path": "docs/Container/container", @@ -420,6 +471,11 @@ "label": "Supporting OCI hooks", "path": "docs/Container/supporting-oci-hooks", "children": [] + }, + { + "label": "Local Volume Management", + "path": "docs/Container/local-volume-management", + "children": [] } ] }, @@ -671,7 +727,7 @@ ] }, { - "label": "openEuler Toolset User Guide", + "label": "Toolset User Guide", "path": "docs/userguide/overview", "children": [ { @@ -686,4 +742,4 @@ } ] } - ] \ No newline at end of file + ] diff --git a/docs/zh/README.md b/docs/zh/README.md deleted file mode 100644 index bfdf916f2efe1030352d19588c9e670576178bf2..0000000000000000000000000000000000000000 --- a/docs/zh/README.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -title: "openEuler" ---- \ No newline at end of file diff --git a/docs/zh/docs/20.09/docs/A-Tune/figures/zh-cn_image_0227497343.png b/docs/zh/docs/20.09/docs/A-Tune/figures/zh-cn_image_0227497343.png deleted file mode 100644 index 6db5a0793fe3068c7519d9a157abc856560e71b2..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/20.09/docs/A-Tune/figures/zh-cn_image_0227497343.png and /dev/null differ diff --git "a/docs/zh/docs/20.09/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/20.09/docs/Installation/\345\256\211\350\243\205\345\234\250\346\234\215\345\212\241\345\231\250.md" deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git "a/docs/zh/docs/20.09/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/20.09/docs/Installation/\345\256\211\350\243\205\345\234\250\346\240\221\350\216\223\346\264\276.md" deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/docs/zh/docs/20.09/docs/Releasenotes/release_notes.md b/docs/zh/docs/20.09/docs/Releasenotes/release_notes.md deleted file mode 100644 index b022c7ec5c7df23ee40b7a61c89496376a4f6eef..0000000000000000000000000000000000000000 --- a/docs/zh/docs/20.09/docs/Releasenotes/release_notes.md +++ /dev/null @@ -1 +0,0 @@ -本文是 openEuler 20.09 版本的发行说明。 \ No newline at end of file diff --git a/docs/zh/docs/20.09/docs/A-Tune/A-Tune.md b/docs/zh/docs/A-Tune/A-Tune.md similarity index 100% rename from docs/zh/docs/20.09/docs/A-Tune/A-Tune.md rename to docs/zh/docs/A-Tune/A-Tune.md diff --git a/docs/zh/docs/20.09/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 docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 docs/zh/docs/20.09/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/20.09/docs/A-Tune/figures/zh-cn_image_0227497000.png b/docs/zh/docs/A-Tune/figures/zh-cn_image_0227497000.png similarity index 100% rename from docs/zh/docs/20.09/docs/A-Tune/figures/zh-cn_image_0227497000.png rename to docs/zh/docs/A-Tune/figures/zh-cn_image_0227497000.png 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..aecf293846ebd12f15b9a3fb5fdc2618d9d527dc Binary files /dev/null and b/docs/zh/docs/A-Tune/figures/zh-cn_image_0227497343.png differ diff --git a/docs/zh/docs/20.09/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 docs/zh/docs/20.09/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/20.09/docs/A-Tune/figures/zh-cn_image_0245342444.png b/docs/zh/docs/A-Tune/figures/zh-cn_image_0245342444.png similarity index 100% rename from docs/zh/docs/20.09/docs/A-Tune/figures/zh-cn_image_0245342444.png rename to docs/zh/docs/A-Tune/figures/zh-cn_image_0245342444.png diff --git a/docs/zh/docs/20.09/docs/A-Tune/public_sys-resources/icon-caution.gif b/docs/zh/docs/A-Tune/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/zh/docs/20.09/docs/A-Tune/public_sys-resources/icon-caution.gif rename to docs/zh/docs/A-Tune/public_sys-resources/icon-caution.gif diff --git a/docs/zh/docs/20.09/docs/A-Tune/public_sys-resources/icon-danger.gif b/docs/zh/docs/A-Tune/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/zh/docs/20.09/docs/A-Tune/public_sys-resources/icon-danger.gif rename to docs/zh/docs/A-Tune/public_sys-resources/icon-danger.gif diff --git a/docs/zh/docs/20.09/docs/A-Tune/public_sys-resources/icon-note.gif b/docs/zh/docs/A-Tune/public_sys-resources/icon-note.gif similarity index 100% rename from docs/zh/docs/20.09/docs/A-Tune/public_sys-resources/icon-note.gif rename to docs/zh/docs/A-Tune/public_sys-resources/icon-note.gif diff --git a/docs/zh/docs/20.09/docs/A-Tune/public_sys-resources/icon-notice.gif b/docs/zh/docs/A-Tune/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/zh/docs/20.09/docs/A-Tune/public_sys-resources/icon-notice.gif rename to docs/zh/docs/A-Tune/public_sys-resources/icon-notice.gif diff --git a/docs/zh/docs/20.09/docs/A-Tune/public_sys-resources/icon-tip.gif b/docs/zh/docs/A-Tune/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/zh/docs/20.09/docs/A-Tune/public_sys-resources/icon-tip.gif rename to docs/zh/docs/A-Tune/public_sys-resources/icon-tip.gif diff --git a/docs/zh/docs/20.09/docs/A-Tune/public_sys-resources/icon-warning.gif b/docs/zh/docs/A-Tune/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/zh/docs/20.09/docs/A-Tune/public_sys-resources/icon-warning.gif rename to docs/zh/docs/A-Tune/public_sys-resources/icon-warning.gif diff --git "a/docs/zh/docs/20.09/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 98% rename from "docs/zh/docs/20.09/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 e46ed15111093319a589452f890dc0441ae7592a..0b581c71f27dda073d586e992e24a59646d56460 100644 --- "a/docs/zh/docs/20.09/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" @@ -419,7 +419,7 @@ example.conf 可以参考如下方式书写(以下各优化项非必填,仅 ### 命令格式 -**atune-adm info** _ +**atune-adm info** ### 使用示例 @@ -530,7 +530,7 @@ disable the nginx log = application ### 命令格式 -**atune-adm profile **_<_profile_\>_ +**atune-adm profile** ### 参数说明 @@ -634,7 +634,7 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数 >![](./public_sys-resources/icon-note.gif) **说明:** >在运行命令前,需要满足如下条件: >1. 服务端的yaml配置文件已经编辑完成并放置于 atuned服务下的**/etc/atuned/tuning/**目录中。 ->2. 客户端的yaml配置文件已经编译完成并放置于atuned客户端下。 +>2. 客户端的yaml配置文件已经编辑完成并放置于atuned客户端任意目录下。 **atune-adm tuning** \[OPTIONS\] @@ -743,6 +743,7 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数

ISSUE

+ - - - - -

Issue

问题描述

+

Description

I1VR1W

使用x86的qcow2镜像创建虚拟机或者使用iso镜像安装物理机在启动时候报错, 实际上是预期内的输出,详情见ISSUE回复内容

+

An error message is displayed when the x86 QCOW2 image is used for VM creation or the ISO image is used for physical machine installation. The error message is output as expected. For details, see the issue response.

I1U1LP

arm 物理机使用已写入文件系统的磁盘进行自定义分区,分区失败,特殊路径触发可规避,措施见ISSUE回复内容

+

The ARM-based physical machine uses the drive that has been written into the file system for customized partitioning, but the partitioning fails. A special path can be used to prevent this issue. For details, see the issue response.

I1VTC5

在超分场景压力测试下,vcpu大于1000个时vmtop -H翻页有明显卡顿, 影响范围可控,详情见ISSUE回复内容

+

In the pressure test in the overcommitment scenario, frame freezing occurs to vmtop -H page turning when the number of vCPUs is greater than 1,000. The impact scope is controllable. For details, see the issue response.

I1WVM8

vmtop收集的cpu使用率,单核使用率存在超过100%的, 影响范围可控,详情见ISSUE回复内容

+

Among the CPU usage data collected by vmtop, the single core whose usage exceeds 100% exists. The impact scope is controllable. For details, see the issue response.

+ diff --git a/docs/en/docs/20.09/docs/Releasenotes/public_sys-resources/icon-caution.gif b/docs/en/docs/Releasenotes/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/en/docs/20.09/docs/Releasenotes/public_sys-resources/icon-caution.gif rename to docs/en/docs/Releasenotes/public_sys-resources/icon-caution.gif diff --git a/docs/en/docs/20.09/docs/Releasenotes/public_sys-resources/icon-danger.gif b/docs/en/docs/Releasenotes/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/en/docs/20.09/docs/Releasenotes/public_sys-resources/icon-danger.gif rename to docs/en/docs/Releasenotes/public_sys-resources/icon-danger.gif diff --git a/docs/en/docs/20.09/docs/Releasenotes/public_sys-resources/icon-note.gif b/docs/en/docs/Releasenotes/public_sys-resources/icon-note.gif similarity index 100% rename from docs/en/docs/20.09/docs/Releasenotes/public_sys-resources/icon-note.gif rename to docs/en/docs/Releasenotes/public_sys-resources/icon-note.gif diff --git a/docs/en/docs/20.09/docs/Releasenotes/public_sys-resources/icon-notice.gif b/docs/en/docs/Releasenotes/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/en/docs/20.09/docs/Releasenotes/public_sys-resources/icon-notice.gif rename to docs/en/docs/Releasenotes/public_sys-resources/icon-notice.gif diff --git a/docs/en/docs/20.09/docs/Releasenotes/public_sys-resources/icon-tip.gif b/docs/en/docs/Releasenotes/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/en/docs/20.09/docs/Releasenotes/public_sys-resources/icon-tip.gif rename to docs/en/docs/Releasenotes/public_sys-resources/icon-tip.gif diff --git a/docs/en/docs/20.09/docs/Releasenotes/public_sys-resources/icon-warning.gif b/docs/en/docs/Releasenotes/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/en/docs/20.09/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/20.09/docs/Releasenotes/release_notes.md b/docs/en/docs/Releasenotes/release_notes.md similarity index 81% rename from docs/en/docs/20.09/docs/Releasenotes/release_notes.md rename to docs/en/docs/Releasenotes/release_notes.md index b00a4cadbb2c88de39f4a2f8c33e73a80c2ec89e..10fb5d9d2ca4b03c7a0e654932d9f1f93b3641d7 100644 --- a/docs/en/docs/20.09/docs/Releasenotes/release_notes.md +++ b/docs/en/docs/Releasenotes/release_notes.md @@ -1 +1,3 @@ +# Release Notes + This document is the release notes for the openEuler 20.09 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..01107f9b33cb9d4ebeb2f23e7e52130dd9a42951 --- /dev/null +++ b/docs/en/docs/Releasenotes/resolved-issues.md @@ -0,0 +1,226 @@ +# Resolved Issues + +For the complete issue list, see [Complete Issue List](https://gitee.com/organizations/src-openeuler/issues). + +For details about the complete kernel submission records, see [Record Submission](https://gitee.com/openeuler/kernel/commits/openEuler-1.0-LTS). + +**Applications and basic services** + + + + + + + + + + + + + + + + + + + + +

Issue

+

Description

+

I1TPY4

+

x86/arm mariadb-server installation fails.

+

I1TOV5

+

lm_sensors cannot be started by default, and systemd is in the degraded state.

+

I1TOCE

+

The kdump on an x86- or ARM-based physical machine fails to be started.

+

I1TZH1

+

The rule does not take effect when the destination port is 80 and the data packages from the source IP address of a host are added to the x86-based server.

+

I1T4O3

+

During x86 PXE installation, the %packages file in the .ks file is used to install minimal, @core, and @base. After the installation is successful, the startup is suspended.

+

I1T8JJ

+

The installation of the ARM-based freeRADIUS server fails.

+
+ +**Programming languages and compilers ** + + + + + + + + + + +

Issue

+

Description

+

I1RUM6

+

Track the community to resolve the issue that the type of the file generated after the compilation of gcc -static-pie is incorrect.

+
+ +**Virtualization and containers ** + + + + + + + + + + + + + + +

Issue

+

Description

+

I1TB7N

+

PMU nmi watchdog does not support CPU hot-plug.

+

I1TXAU

+

The VM fails to be started when the VM CPU mode is configured with host-model.

+

I1U8BP

+

When openEuler is used to set trusted boot as an image, the VM cannot identify the TPM device.

+
+ +**Kernel** + + + + + + + + + + + + + + + + + + +

Issue

+

Description

+

I17YPQ

+

The drive connected to the LSI SAS3408 RAID controller card cannot be identified during the installation.

+

I1JZHT

+

The Netdevsim is repeatedly loaded and uninstalled, causing the system to reset.

+

I1RUC8

+

The performance loss of vmalloc on x86-based servers is huge.

+

I1R86G

+

An error of pread is reported when openEuler performs a test on the open GaussDB, causing the return to -EIO.

+

I1SISM

+

The XFS drive with size=8192 cannot be mounted to the openEuler on the x86 platform.

+
+ +**Security ** + + + + + + + + + + +

Issue

+

Description

+

I1TQ15

+

An error is reported when the firewall-cmd --reload command is executed to add an IP address set that does not exist to the drop area as the source.

+
+ +**Hardware and chips** ****** + + + + + + + + + + + + +

Issue

+

Description

+

I1SY0K

+

The Raspberry Pi Wi-Fi is unavailable and the connection to the Wi-Fi network fails.

+

I1R4G1

+

The connection to the Raspberry Pi BT fails repeatedly.

+
+ +**File system ** + + + + + + + + + + + + + + +

Issue

+

Description

+

I1E0KN

+

A core dump occurs when a user creates and deletes folders concurrently in the XFS file system and uses the find command to query the folders.

+

I1MA88

+

The libguestfs uses the Gnulib code that has a vulnerability, causing a core dump.

+

I1T3GC

+

The memory allocation is reported to fail when the mounted drive letter is checked at the NFS client.

+
+ +**Network ** + + + + + + + + + + + + + + +

Issue

+

Description

+

I1TO3R

+

An error occurs when the network-manager-appletda is invoked during installation and ipv4 is manually configured.

+

I1TYDG

+

The NetworkManager service cannot not be self-healed due to the D-Bus service exception.

+

I1AD7N

+

The IP address is lost when the network is restarted because the return value of the grep -L command in the network-scripts file is changed.

+
+ +**System tools ** + + + + + + + + + + + +

Issue

+

Description

+

I1U7RL

+

An error occurs during system-config-printer installation.

+

I1T8H4

+

After the x86/ARM-based device is installed by default, the systemctl -all --failed command is executed and the tuned service fails to be started.

+
+ diff --git a/docs/en/docs/20.09/docs/Releasenotes/source-code.md b/docs/en/docs/Releasenotes/source-code.md similarity index 100% rename from docs/en/docs/20.09/docs/Releasenotes/source-code.md rename to docs/en/docs/Releasenotes/source-code.md diff --git a/docs/en/docs/20.09/docs/Releasenotes/terms-of-use.md b/docs/en/docs/Releasenotes/terms-of-use.md similarity index 79% rename from docs/en/docs/20.09/docs/Releasenotes/terms-of-use.md rename to docs/en/docs/Releasenotes/terms-of-use.md index dbbef6358b01550f1c2b03252c9b254e4682b953..1a7fbcac36f3cc1243592d9ce6a50f3704f9288f 100644 --- a/docs/en/docs/20.09/docs/Releasenotes/terms-of-use.md +++ b/docs/en/docs/Releasenotes/terms-of-use.md @@ -1,14 +1,13 @@ # Terms of Use -**Copyright © Huawei Technologies Co., Ltd. 2020. All rights reserved.** +**Copyright © 2020 openEuler Community** Your replication, use, modification, and distribution of this document are governed by the Creative Commons License Attribution-ShareAlike 4.0 International Public License \(CC BY-SA 4.0\). You can visit [https://creativecommons.org/licenses/by-sa/4.0/](https://creativecommons.org/licenses/by-sa/4.0/) to view a human-readable summary of \(and not a substitute for\) CC BY-SA 4.0. For the complete CC BY-SA 4.0, visit [https://creativecommons.org/licenses/by-sa/4.0/legalcode](https://creativecommons.org/licenses/by-sa/4.0/legalcode). **Trademarks and Permissions** -openEuler is a trademark of Huawei Technologies Co., Ltd. All other trademarks and registered trademarks mentioned in this document are the property of their respective holders. +openEuler is the trademark of the openEuler community. All other trademarks and registered trademarks mentioned in this document are the property of their respective holders. **Disclaimer** This document is used only as a guide. Unless otherwise specified by applicable laws or agreed by both parties in written form, all statements, information, and recommendations in this document are provided "AS IS" without warranties, guarantees or representations of any kind, including but not limited to non-infringement, timeliness, and specific purposes. - diff --git a/docs/en/docs/20.09/docs/Releasenotes/user-notice.md b/docs/en/docs/Releasenotes/user-notice.md similarity index 100% rename from docs/en/docs/20.09/docs/Releasenotes/user-notice.md rename to docs/en/docs/Releasenotes/user-notice.md diff --git a/docs/en/docs/20.09/docs/SecHarden/account-passwords.md b/docs/en/docs/SecHarden/account-passwords.md similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/account-passwords.md rename to docs/en/docs/SecHarden/account-passwords.md diff --git a/docs/en/docs/20.09/docs/SecHarden/appendix.md b/docs/en/docs/SecHarden/appendix.md similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/appendix.md rename to docs/en/docs/SecHarden/appendix.md diff --git a/docs/en/docs/20.09/docs/SecHarden/authentication-and-authorization.md b/docs/en/docs/SecHarden/authentication-and-authorization.md similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/authentication-and-authorization.md rename to docs/en/docs/SecHarden/authentication-and-authorization.md diff --git a/docs/en/docs/20.09/docs/SecHarden/figures/en-us_image_0221925211.png b/docs/en/docs/SecHarden/figures/en-us_image_0221925211.png similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/figures/en-us_image_0221925211.png rename to docs/en/docs/SecHarden/figures/en-us_image_0221925211.png diff --git a/docs/en/docs/20.09/docs/SecHarden/figures/en-us_image_0221925212.png b/docs/en/docs/SecHarden/figures/en-us_image_0221925212.png similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/figures/en-us_image_0221925212.png rename to docs/en/docs/SecHarden/figures/en-us_image_0221925212.png diff --git a/docs/en/docs/20.09/docs/SecHarden/file-permissions.md b/docs/en/docs/SecHarden/file-permissions.md similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/file-permissions.md rename to docs/en/docs/SecHarden/file-permissions.md diff --git a/docs/en/docs/20.09/docs/SecHarden/kernel-parameters.md b/docs/en/docs/SecHarden/kernel-parameters.md similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/kernel-parameters.md rename to docs/en/docs/SecHarden/kernel-parameters.md diff --git a/docs/en/docs/20.09/docs/SecHarden/os-hardening-overview.md b/docs/en/docs/SecHarden/os-hardening-overview.md similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/os-hardening-overview.md rename to docs/en/docs/SecHarden/os-hardening-overview.md diff --git a/docs/en/docs/20.09/docs/SecHarden/public_sys-resources/icon-caution.gif b/docs/en/docs/SecHarden/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/public_sys-resources/icon-caution.gif rename to docs/en/docs/SecHarden/public_sys-resources/icon-caution.gif diff --git a/docs/en/docs/20.09/docs/SecHarden/public_sys-resources/icon-danger.gif b/docs/en/docs/SecHarden/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/public_sys-resources/icon-danger.gif rename to docs/en/docs/SecHarden/public_sys-resources/icon-danger.gif diff --git a/docs/en/docs/20.09/docs/SecHarden/public_sys-resources/icon-note.gif b/docs/en/docs/SecHarden/public_sys-resources/icon-note.gif similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/public_sys-resources/icon-note.gif rename to docs/en/docs/SecHarden/public_sys-resources/icon-note.gif diff --git a/docs/en/docs/20.09/docs/SecHarden/public_sys-resources/icon-notice.gif b/docs/en/docs/SecHarden/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/public_sys-resources/icon-notice.gif rename to docs/en/docs/SecHarden/public_sys-resources/icon-notice.gif diff --git a/docs/en/docs/20.09/docs/SecHarden/public_sys-resources/icon-tip.gif b/docs/en/docs/SecHarden/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/public_sys-resources/icon-tip.gif rename to docs/en/docs/SecHarden/public_sys-resources/icon-tip.gif diff --git a/docs/en/docs/20.09/docs/SecHarden/public_sys-resources/icon-warning.gif b/docs/en/docs/SecHarden/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/public_sys-resources/icon-warning.gif rename to docs/en/docs/SecHarden/public_sys-resources/icon-warning.gif diff --git a/docs/en/docs/20.09/docs/SecHarden/secHarden.md b/docs/en/docs/SecHarden/secHarden.md similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/secHarden.md rename to docs/en/docs/SecHarden/secHarden.md diff --git a/docs/en/docs/20.09/docs/SecHarden/security-hardening-guide.md b/docs/en/docs/SecHarden/security-hardening-guide.md similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/security-hardening-guide.md rename to docs/en/docs/SecHarden/security-hardening-guide.md diff --git a/docs/en/docs/20.09/docs/SecHarden/security-hardening-tools.md b/docs/en/docs/SecHarden/security-hardening-tools.md similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/security-hardening-tools.md rename to docs/en/docs/SecHarden/security-hardening-tools.md diff --git a/docs/en/docs/20.09/docs/SecHarden/selinux-configuration.md b/docs/en/docs/SecHarden/selinux-configuration.md similarity index 100% rename from docs/en/docs/20.09/docs/SecHarden/selinux-configuration.md rename to docs/en/docs/SecHarden/selinux-configuration.md diff --git a/docs/en/docs/20.09/docs/SecHarden/system-services.md b/docs/en/docs/SecHarden/system-services.md similarity index 99% rename from docs/en/docs/20.09/docs/SecHarden/system-services.md rename to docs/en/docs/SecHarden/system-services.md index 9e12a5104200ec11fa8a672c7d4abaa13e8f898f..8f90f69253b13d02a285b4075eadb7f22b8bdfd7 100644 --- a/docs/en/docs/20.09/docs/SecHarden/system-services.md +++ b/docs/en/docs/SecHarden/system-services.md @@ -207,7 +207,7 @@ To harden a client, perform the following steps:

Hash algorithm for SSH data verification.

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

+

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

Yes

SSH key exchange algorithms.

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

+

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

Yes

SSH key exchange algorithms.

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

+

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

No

+ **表 2** object项配置说明 @@ -813,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时使用

整型

+

整型/浮点型

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

+ **表 3** 客户端yaml文件配置说明 @@ -912,7 +914,7 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数

feature_filter_engine

-

参数搜索算法

+

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

字符串

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

feature_filter_cycle

-

参数搜索轮数

+

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

整型

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

feature_filter_iters

-

每轮参数搜索的迭代次数

+

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

整型

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

split_count

-

调优参数取值范围中均匀选取的参数个数

+

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

整型

@@ -969,9 +971,11 @@ A-Tune提供了最佳配置的自动搜索能力,免去人工反复做参数 + **表 4** evaluations项配置说明 + diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 99% rename from "docs/zh/docs/20.09/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 b322a6b1ec6ab4aabe355207cf9e45d0f71df8c9..358c1d3bef43a0f9b079ecfee484fa31ec832326 100644 --- "a/docs/zh/docs/20.09/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命令支持参数参考下表。 - - + + +

配置名称

配置说明

diff --git "a/docs/zh/docs/20.09/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 98% rename from "docs/zh/docs/20.09/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 aedf795a40b91a5e8546d573424a36edc5d51edc..0f01545e78066fd27144480da5736e4b5748622d 100644 --- "a/docs/zh/docs/20.09/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" @@ -6,13 +6,13 @@ - [安装与部署](#安装与部署) - [软硬件要求](#软硬件要求) - [环境准备](#环境准备) - - [安装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) + - [启动A-Tune](#启动a-tune) + - [启动A-Tune engine](#启动a-tune-engine) ## 软硬件要求 diff --git "a/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/20.09/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" similarity index 97% rename from "docs/zh/docs/20.09/docs/A-Tune/\350\256\244\350\257\206A-Tune.md" rename to "docs/zh/docs/A-Tune/\350\256\244\350\257\206A-Tune.md" index b3646b9f9f2d0bf50013d7ec0445d189a633998b..4553464fe538a2be8b316fc72ea40d000f0f4878 100644 --- "a/docs/zh/docs/20.09/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" @@ -26,7 +26,7 @@ A-Tune是一款基于AI开发的系统性能优化引擎,它利用人工智能 A-Tune核心技术架构如下图,主要包括智能决策、系统画像和交互系统三层。 - 智能决策层:包含感知和决策两个子系统,分别完成对应用的智能感知和对系统的调优决策。 -- 系统画像层:主要包括标注和学习系统,标注系统用于业务模型的聚类,学习系统用于业务模型的学习和分类。 +- 系统画像层:主要包括自动特征工程和两层分类模型,自动特征工程用于业务特征的自动选择,两层分类模型用于业务模型的学习和分类。 - 交互系统层:用于各类系统资源的监控和配置,调优策略执行在本层进行。 ![](./figures/zh-cn_image_0227497343.png) @@ -75,7 +75,7 @@ A-Tune支持的主要特性、特性成熟度以及使用建议请参见[表1](# ### 支持业务模型 -根据应用的负载特征,A-Tune将业务分为七大类,各类型的负载特征和A-Tune支持的应用请参见[表2](#table2819164611311)。 +根据应用的负载特征,A-Tune将业务分为11大类,各类型的负载特征和A-Tune支持的应用请参见[表2](#table2819164611311)。 **表 2** 支持的业务类型和应用 diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/docs/A-Tune/\351\231\204\345\275\225.md" rename to "docs/zh/docs/A-Tune/\351\231\204\345\275\225.md" diff --git a/docs/zh/docs/20.09/docs/Administration/FAQ-54.md b/docs/zh/docs/Administration/FAQ-54.md similarity index 57% rename from docs/zh/docs/20.09/docs/Administration/FAQ-54.md rename to docs/zh/docs/Administration/FAQ-54.md index abd397b4e110053c202e53464eb4c74fe749eae2..2150b516529ffce2f932d0a50e517cfd7440bf18 100644 --- a/docs/zh/docs/20.09/docs/Administration/FAQ-54.md +++ b/docs/zh/docs/Administration/FAQ-54.md @@ -7,6 +7,10 @@ - [使用rpmbuild编译mariadb失败](#使用rpmbuild编译mariadb失败) - [使用默认配置启动SNTP服务失败](#使用默认配置启动sntp服务失败) - [安装时出现软件包冲突、文件冲突或缺少软件包导致安装失败](#安装时出现软件包冲突文件冲突或缺少软件包导致安装失败) + - [libiscsi降级失败](#libiscsi降级失败) + - [xfsprogs降级失败](#xfsprogs降级失败) + - [cpython/Lib发现CVE-2019-9674:Zip炸弹漏洞](#cpython/Lib发现CVE-2019-9674:Zip炸弹漏洞) + - [不合理使用glibc正则表达式引起ReDoS攻击](#不合理使用glibc正则表达式引起ReDoS攻击) @@ -176,4 +180,108 @@ Error: # yum update blivet-data-1:3.1.1-5.noarch -y --allowerasing ``` -3. 重新进行升级操作。 \ No newline at end of file +3. 重新进行升级操作。 + +## libiscsi降级失败 + +### 问题现象 + +libiscsi-1.19.4 版本及以上降级到 libiscsi-1.19.3 及以下版本时失败。 + +``` +Error: +Problem: problem with installed package libiscsi-utils-1.19.0-4.oe1.x86_64 +- package libiscsi-utils-1.19.0-4.oe1.x86_64 requires libiscsi(x86-64) = 1.19.0-4.oe1, but none of the providers can be installed +- cannot install both libiscsi-1.19.0-3.oe1.x86_64 and libiscsi-1.19.0-4.oe1.x86_64 +- cannot install both libiscsi-1.19.0-4.oe1.x86_64 and libiscsi-1.19.0-3.oe1.x86_64 +- conflicting requests +(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages) +``` + +### 原因分析 + +libiscsi-1.19.3 之前的版本把 iscsi-xxx 等二进制文件打包进了主包 libiscsi,而这些二进制文件引入了不合理的依赖 CUnit, 为了解决这种不合理的依赖,在 libiscsi-1.19.4 版本把这些二进制文件单独拆分出来一个子包 libiscsi-utils,主包弱依赖于子包,产品可以根据自己的需求在做镜像时是否集成该子包;不集成或卸载子包不会影响 libiscsi 主包的功能。 +如果系统中安装了 libiscsi-utils 子包,libiscsi-1.19.4 及以上版本降级到 libiscsi-1.19.3 及以下版本时,由于 libiscsi-1.19.3 及以下版本无法提供对应的 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 +``` + +## cpython/Lib发现CVE-2019-9674:Zip炸弹漏洞 + +### 问题现象 + +Python 3.7.2 及以下版本中的 Lib/zipfile.py 允许远程攻击者通过 zip 炸弹制造拒绝服务请求,从而导致资源消耗过大。 + +### 原因分析 + +远程攻击者通过 zip 炸弹导致拒绝服务,影响目标系统业务甚至达到使系统崩溃的结果。zip 炸弹就是一个高压缩比的 zip 文件,它本身可能只有几M或几十M的大小,但是解压缩之后会产生巨大的数据量,产生巨大的资源消耗。 + +### 解决方案 + +在 zipfile 文档中添加告警信息: https://github.com/python/cpython/blob/3.7/Doc/library/zipfile.rst。 + +## 不合理使用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. 用户程序在检测到进程异常之后,通过重启进程等手段恢复业务,提升程序的可靠性。 \ No newline at end of file diff --git a/docs/zh/docs/20.09/docs/Administration/administration.md b/docs/zh/docs/Administration/administration.md similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/administration.md rename to docs/zh/docs/Administration/administration.md diff --git a/docs/zh/docs/20.09/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 docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 docs/zh/docs/20.09/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/docs/zh/docs/20.09/docs/Administration/figures/PostgreSql_architecture.png b/docs/zh/docs/Administration/figures/PostgreSql_architecture.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/PostgreSql_architecture.png rename to docs/zh/docs/Administration/figures/PostgreSql_architecture.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/creat_datadisk.png b/docs/zh/docs/Administration/figures/creat_datadisk.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/creat_datadisk.png rename to docs/zh/docs/Administration/figures/creat_datadisk.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/creat_datadisk1.png b/docs/zh/docs/Administration/figures/creat_datadisk1.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/creat_datadisk1.png rename to docs/zh/docs/Administration/figures/creat_datadisk1.png diff --git a/docs/zh/docs/Administration/figures/ima_digest_list_update.png b/docs/zh/docs/Administration/figures/ima_digest_list_update.png new file mode 100644 index 0000000000000000000000000000000000000000..771067e31cee84591fbb914d7be4e8c576d7f5d2 Binary files /dev/null and b/docs/zh/docs/Administration/figures/ima_digest_list_update.png differ diff --git a/docs/zh/docs/20.09/docs/Administration/figures/ima_performance.gif b/docs/zh/docs/Administration/figures/ima_performance.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/ima_performance.gif rename to docs/zh/docs/Administration/figures/ima_performance.gif diff --git a/docs/zh/docs/20.09/docs/Administration/figures/ima_verification.png b/docs/zh/docs/Administration/figures/ima_verification.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/ima_verification.png rename to docs/zh/docs/Administration/figures/ima_verification.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/logical_architectureofMariaDB.png b/docs/zh/docs/Administration/figures/logical_architectureofMariaDB.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/logical_architectureofMariaDB.png rename to docs/zh/docs/Administration/figures/logical_architectureofMariaDB.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/login.png b/docs/zh/docs/Administration/figures/login.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/login.png rename to docs/zh/docs/Administration/figures/login.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/nginx_deployed_success.png b/docs/zh/docs/Administration/figures/nginx_deployed_success.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/nginx_deployed_success.png rename to docs/zh/docs/Administration/figures/nginx_deployed_success.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/nginx_start_failed.png b/docs/zh/docs/Administration/figures/nginx_start_failed.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/nginx_start_failed.png rename to docs/zh/docs/Administration/figures/nginx_start_failed.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/nginx_start_success.png b/docs/zh/docs/Administration/figures/nginx_start_success.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/nginx_start_success.png rename to docs/zh/docs/Administration/figures/nginx_start_success.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/postgres.png b/docs/zh/docs/Administration/figures/postgres.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/postgres.png rename to docs/zh/docs/Administration/figures/postgres.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/top_display.png b/docs/zh/docs/Administration/figures/top_display.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/top_display.png rename to docs/zh/docs/Administration/figures/top_display.png diff --git a/docs/zh/docs/Administration/figures/trusted_chain.png b/docs/zh/docs/Administration/figures/trusted_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..034f0f092f41fb500ee4122339c447d10d4138ec Binary files /dev/null and b/docs/zh/docs/Administration/figures/trusted_chain.png differ diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0229622729.png b/docs/zh/docs/Administration/figures/zh-cn_image_0229622729.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0229622729.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0229622729.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0229622789.png b/docs/zh/docs/Administration/figures/zh-cn_image_0229622789.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0229622789.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0229622789.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0230050789.png b/docs/zh/docs/Administration/figures/zh-cn_image_0230050789.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0230050789.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0230050789.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143176.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143176.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143176.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143176.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143177.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143177.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143177.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143177.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143178.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143178.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143178.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143178.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143180.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143180.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143180.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143180.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143181.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143181.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143181.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143181.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143183.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143183.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143183.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143183.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143185.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143185.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143185.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143185.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143187.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143187.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143187.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143187.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143189.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143189.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143189.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143189.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143191.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143191.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143191.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143191.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143193.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143193.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143193.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143193.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143195.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143195.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143195.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143195.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143196.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143196.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143196.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143196.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143197.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143197.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143197.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143197.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143198.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231143198.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231143198.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231143198.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231563132.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231563132.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231563132.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231563132.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231563134.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231563134.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231563134.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231563134.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231563135.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231563135.png similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231563135.png rename to docs/zh/docs/Administration/figures/zh-cn_image_0231563135.png diff --git a/docs/zh/docs/20.09/docs/Administration/figures/zh-cn_image_0231563136.png b/docs/zh/docs/Administration/figures/zh-cn_image_0231563136.png similarity index 100% rename from docs/zh/docs/20.09/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/20.09/docs/Administration/public_sys-resources/icon-caution.gif b/docs/zh/docs/Administration/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/public_sys-resources/icon-caution.gif rename to docs/zh/docs/Administration/public_sys-resources/icon-caution.gif diff --git a/docs/zh/docs/20.09/docs/Administration/public_sys-resources/icon-danger.gif b/docs/zh/docs/Administration/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/public_sys-resources/icon-danger.gif rename to docs/zh/docs/Administration/public_sys-resources/icon-danger.gif diff --git a/docs/zh/docs/20.09/docs/Administration/public_sys-resources/icon-note.gif b/docs/zh/docs/Administration/public_sys-resources/icon-note.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/public_sys-resources/icon-note.gif rename to docs/zh/docs/Administration/public_sys-resources/icon-note.gif diff --git a/docs/zh/docs/20.09/docs/Administration/public_sys-resources/icon-notice.gif b/docs/zh/docs/Administration/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/public_sys-resources/icon-notice.gif rename to docs/zh/docs/Administration/public_sys-resources/icon-notice.gif diff --git a/docs/zh/docs/20.09/docs/Administration/public_sys-resources/icon-tip.gif b/docs/zh/docs/Administration/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/public_sys-resources/icon-tip.gif rename to docs/zh/docs/Administration/public_sys-resources/icon-tip.gif diff --git a/docs/zh/docs/20.09/docs/Administration/public_sys-resources/icon-warning.gif b/docs/zh/docs/Administration/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Administration/public_sys-resources/icon-warning.gif rename to docs/zh/docs/Administration/public_sys-resources/icon-warning.gif diff --git "a/docs/zh/docs/20.09/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 98% rename from "docs/zh/docs/20.09/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 05a19e6c4b2920ae6786cd6624c4c32e28964959..82479f5d39dcb4c4f0d564c395b08be4408efd02 100644 --- "a/docs/zh/docs/20.09/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" @@ -161,26 +161,25 @@ repository部分允许您定义定制化的openEuler软件源仓库,各个仓 - 配置/etc/yum.repos.d目录下的.repo文件 - openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](./../Releasenotes/系统安装.md),以AArch64架构的OS repo源为例。使用root权限在openEuler_aarch64.repo文件中添加openEuler repo源,示例如下: + openEuler提供了多种repo源供用户在线使用,各repo源含义可参考[系统安装](./../Releasenotes/系统安装.md)。使用root权限添加openEuler repo源,示例如下: ``` - # 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.09/OS/aarch64/ + [OS] + name=openEuler-$releasever - OS + baseurl=https://repo.openeuler.org/openEuler-20.09/OS/$basearch/ enabled=1 gpgcheck=1 - gpgkey=https://repo.openeuler.org/openEuler-20.09/OS/aarch64/RPM-GPG-KEY-openEuler - + gpgkey=https://repo.openeuler.org/openEuler-20.09/OS/$basearch/RPM-GPG-KEY-openEuler ``` >![](./public_sys-resources/icon-note.gif) **说明:** > - enabled为是否启用该软件源仓库,可选值为1和0。默认值为1,表示启用该软件源仓库。 > - gpgkey为验证签名用的公钥。 - + #### 显示当前配置 @@ -333,7 +332,7 @@ Available Packages Name : httpd Version : 2.4.34 Release : 8.h5.oe1 -Arch : aarch64 +Arch : aarch64 Size : 1.2 M Repo : Local Summary : Apache HTTP Server @@ -492,7 +491,7 @@ dnf group install groupid 例如安装Development Tools相应的软件包组,命令如下: ``` -# dnf group install "Development Tools" +# dnf group install "Development Tools" ``` ``` @@ -514,7 +513,7 @@ dnf group remove groupid 例如删除Development Tools相应的软件包组,命令如下: ``` -# dnf group remove "Development Tools" +# dnf group remove "Development Tools" ``` ``` diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227.md" "b/docs/zh/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227.md" similarity index 100% rename from "docs/zh/docs/20.09/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227.md" rename to "docs/zh/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227.md" diff --git "a/docs/zh/docs/20.09/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 96% rename from "docs/zh/docs/20.09/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 b901d3b20b513087b23e67edfa8d9849cce8a1ac..fbb068949460dcd281dc648e53f4cc4e664bcc0c 100644 --- "a/docs/zh/docs/20.09/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" @@ -18,6 +18,9 @@ - [设置kdump预留内存](#设置kdump预留内存) - [预留内存推荐值](#预留内存推荐值) - [禁用网络相关驱动](#禁用网络相关驱动) + - [设置磁盘调度算法](#设置磁盘调度算法) + - [临时修改调度策略](#临时修改调度策略) + - [永久设置调度策略](#永久设置调度策略) @@ -468,3 +471,22 @@ kdump预留内存参数必须添加到内核启动参数中,配置文件为/bo 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 +``` diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/FAQ.md b/docs/zh/docs/ApplicationDev/FAQ.md similarity index 91% rename from docs/zh/docs/20.09/docs/ApplicationDev/FAQ.md rename to docs/zh/docs/ApplicationDev/FAQ.md index 7dbfa6fcb6eaf58e7e09093cdee6ad85d292e154..8125fbab883efb8e46b2723ad8be0b34932858e7 100644 --- a/docs/zh/docs/20.09/docs/ApplicationDev/FAQ.md +++ b/docs/zh/docs/ApplicationDev/FAQ.md @@ -6,7 +6,7 @@ -## 使用systemctl和top命令查询libvirtd服务占用内存不同 +## 部分依赖java-devel的应用程序自编译失败 ### 问题描述 diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/application-development.md b/docs/zh/docs/ApplicationDev/application-development.md similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/application-development.md rename to docs/zh/docs/ApplicationDev/application-development.md diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/figures/Branch-Confirmationpage.png b/docs/zh/docs/ApplicationDev/figures/Branch-Confirmationpage.png similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/figures/Branch-Confirmationpage.png rename to docs/zh/docs/ApplicationDev/figures/Branch-Confirmationpage.png diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/figures/Create-Packagepage.png b/docs/zh/docs/ApplicationDev/figures/Create-Packagepage.png similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/figures/Create-Packagepage.png rename to docs/zh/docs/ApplicationDev/figures/Create-Packagepage.png diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/figures/RPM_package_download.png b/docs/zh/docs/ApplicationDev/figures/RPM_package_download.png similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/figures/RPM_package_download.png rename to docs/zh/docs/ApplicationDev/figures/RPM_package_download.png diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/figures/Repositoriespage.png b/docs/zh/docs/ApplicationDev/figures/Repositoriespage.png similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/figures/Repositoriespage.png rename to docs/zh/docs/ApplicationDev/figures/Repositoriespage.png diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/figures/delete_package.png b/docs/zh/docs/ApplicationDev/figures/delete_package.png similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/figures/delete_package.png rename to docs/zh/docs/ApplicationDev/figures/delete_package.png diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/figures/filepage.png b/docs/zh/docs/ApplicationDev/figures/filepage.png similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/figures/filepage.png rename to docs/zh/docs/ApplicationDev/figures/filepage.png diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/figures/setting_software_info.png b/docs/zh/docs/ApplicationDev/figures/setting_software_info.png similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/figures/setting_software_info.png rename to docs/zh/docs/ApplicationDev/figures/setting_software_info.png diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/figures/succeededpage.png b/docs/zh/docs/ApplicationDev/figures/succeededpage.png similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/figures/succeededpage.png rename to docs/zh/docs/ApplicationDev/figures/succeededpage.png diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/figures/zh-cn_image_0229243671.png b/docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243671.png similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/figures/zh-cn_image_0229243671.png rename to docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243671.png diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/figures/zh-cn_image_0229243702.png b/docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243702.png similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/figures/zh-cn_image_0229243702.png rename to docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243702.png diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/figures/zh-cn_image_0229243704.png b/docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243704.png similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/figures/zh-cn_image_0229243704.png rename to docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243704.png diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/figures/zh-cn_image_0229243712.png b/docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243712.png similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/figures/zh-cn_image_0229243712.png rename to docs/zh/docs/ApplicationDev/figures/zh-cn_image_0229243712.png diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-caution.gif b/docs/zh/docs/ApplicationDev/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-caution.gif rename to docs/zh/docs/ApplicationDev/public_sys-resources/icon-caution.gif diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-danger.gif b/docs/zh/docs/ApplicationDev/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-danger.gif rename to docs/zh/docs/ApplicationDev/public_sys-resources/icon-danger.gif diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-note.gif b/docs/zh/docs/ApplicationDev/public_sys-resources/icon-note.gif similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-note.gif rename to docs/zh/docs/ApplicationDev/public_sys-resources/icon-note.gif diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-notice.gif b/docs/zh/docs/ApplicationDev/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-notice.gif rename to docs/zh/docs/ApplicationDev/public_sys-resources/icon-notice.gif diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-tip.gif b/docs/zh/docs/ApplicationDev/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-tip.gif rename to docs/zh/docs/ApplicationDev/public_sys-resources/icon-tip.gif diff --git a/docs/zh/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-warning.gif b/docs/zh/docs/ApplicationDev/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/zh/docs/20.09/docs/ApplicationDev/public_sys-resources/icon-warning.gif rename to docs/zh/docs/ApplicationDev/public_sys-resources/icon-warning.gif diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/docs/Container/CRI\346\216\245\345\217\243.md" rename to "docs/zh/docs/Container/CRI\346\216\245\345\217\243.md" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/docs/Container/Docker\345\256\271\345\231\250.md" rename to "docs/zh/docs/Container/Docker\345\256\271\345\231\250.md" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git a/docs/zh/docs/20.09/docs/Container/container.md b/docs/zh/docs/Container/container.md similarity index 100% rename from docs/zh/docs/20.09/docs/Container/container.md rename to docs/zh/docs/Container/container.md diff --git a/docs/zh/docs/20.09/docs/Container/figures/isula-build_arch.png b/docs/zh/docs/Container/figures/isula-build_arch.png similarity index 100% rename from docs/zh/docs/20.09/docs/Container/figures/isula-build_arch.png rename to docs/zh/docs/Container/figures/isula-build_arch.png diff --git a/docs/zh/docs/20.09/docs/Container/figures/kata-arch.png b/docs/zh/docs/Container/figures/kata-arch.png similarity index 100% rename from docs/zh/docs/20.09/docs/Container/figures/kata-arch.png rename to docs/zh/docs/Container/figures/kata-arch.png diff --git a/docs/zh/docs/20.09/docs/Container/figures/zh-cn_image_0183048952.png b/docs/zh/docs/Container/figures/zh-cn_image_0183048952.png similarity index 100% rename from docs/zh/docs/20.09/docs/Container/figures/zh-cn_image_0183048952.png rename to docs/zh/docs/Container/figures/zh-cn_image_0183048952.png diff --git a/docs/zh/docs/20.09/docs/Container/figures/zh-cn_image_0221924926.png b/docs/zh/docs/Container/figures/zh-cn_image_0221924926.png similarity index 100% rename from docs/zh/docs/20.09/docs/Container/figures/zh-cn_image_0221924926.png rename to docs/zh/docs/Container/figures/zh-cn_image_0221924926.png diff --git a/docs/zh/docs/20.09/docs/Container/figures/zh-cn_image_0221924927.png b/docs/zh/docs/Container/figures/zh-cn_image_0221924927.png similarity index 100% rename from docs/zh/docs/20.09/docs/Container/figures/zh-cn_image_0221924927.png rename to docs/zh/docs/Container/figures/zh-cn_image_0221924927.png diff --git a/docs/zh/docs/20.09/docs/Container/figures/zh_cn_image_0221924928.png b/docs/zh/docs/Container/figures/zh_cn_image_0221924928.png similarity index 100% rename from docs/zh/docs/20.09/docs/Container/figures/zh_cn_image_0221924928.png rename to docs/zh/docs/Container/figures/zh_cn_image_0221924928.png diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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" similarity index 97% rename from "docs/zh/docs/20.09/docs/Container/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" rename to "docs/zh/docs/Container/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" index af20374fcd64ce84478f48b7d86cf768321dfb84..7e21c46fa026cfab1bb7fcc3f79e4b297a96c739 100644 --- "a/docs/zh/docs/20.09/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" @@ -1,3 +1,5 @@ +# 容器镜像构建 + * [安装](#安装) @@ -33,6 +35,8 @@ +## 概述 + isula-build是iSula容器团队推出的容器镜像构建工具,支持通过Dockerfile文件快速构建容器镜像。 isula-build采用服务端/客户端模式,其中,isula-build为客户端,提供了一组命令行工具,用于镜像构建及管理等;isula-builder为服务端,用于处理客户端管理请求,作为守护进程常驻后台。 @@ -43,9 +47,9 @@ isula-build采用服务端/客户端模式,其中,isula-build为客户端, - isula-build当前仅支持Docker镜像。 -# 安装 +## 安装 -## 环境准备 +### 环境准备 为了确保isula-build成功安装,需满足以下软件硬件要求。 @@ -53,7 +57,7 @@ isula-build采用服务端/客户端模式,其中,isula-build为客户端, - 支持的操作系统:openEuler - 用户具有root权限。 -### 安装isula-build +#### 安装isula-build 使用isula-build构建容器镜像,需要先安装以下软件包。 @@ -86,9 +90,9 @@ isula-build采用服务端/客户端模式,其中,isula-build为客户端, > **说明:** > 安装完成后,需要手工启动isula-build服务。启动请参见"管理服务"。 -# 配置与管理服务 +## 配置与管理服务 -## 配置服务 +### 配置服务 在安装完 isula-build 软件包之后,systemd 管理服务会以 isula-build 软件包自带的 isula-build 服务端默认配置启动 isula-build 服务。如果 isula-build 服务端的默认配置文件不能满足用户的需求,可以参考如下介绍进行定制化配置。需要注意的是,修改完默认配置之后,需要重启 isula-build 服务端使新配置生效,具体操作可参考下一章节。 @@ -133,14 +137,14 @@ isula-build采用服务端/客户端模式,其中,isula-build为客户端, -## 管理服务 +### 管理服务 目前 openEuler 采用 systemd 管理软件服务,isula-build 软件包已经自带了 systemd 的服务文件,用户安装完 isula-build 软件包之后可以直接通过 systemd 工具对它进行服务启停等操作。用户同样可以手动启动 isula-build 服务端软件。需要注意的是,同一个节点上不可以同时启动多个 isula-build 服务端软件。 >![](./public_sys-resources/icon-note.gif) **说明:** >同一个节点上不可以同时启动多个 isula-build 服务端软件。 -### 通过 systemd 管理(推荐方式) +#### 通过 systemd 管理(推荐方式) 用户可以通过如下 systemd 的标准指令控制 isula-build 服务的启动、停止、重启等动作: @@ -168,7 +172,7 @@ isula-build 软件包安装的 systemd 服务文件保存在 `/usr/lib/systemd/s sudo systemctl daemon-reload ``` -### 直接运行 isula-build 服务端 +#### 直接运行 isula-build 服务端 您也可以通过执行 isula-build 服务端命令( isula-builder)的方式启动服务。其中,服务端启动配置,可通过isula-builder命令支持的 flags 设置。isula-build 服务端目前支持的 flags 如下: @@ -188,9 +192,9 @@ sudo systemctl daemon-reload sudo isula-builder --dataroot "/var/lib/isula-build" --debug=false ``` -# 使用指南 +## 使用指南 -## 前提条件 +### 前提条件 isula-build 构建 Dockerfile 内的 RUN 指令时依赖可执行文件 runc ,需要 isula-build 的运行环境上预装好 runc。安装方式视用户使用场景而定,如果用户不需要使用完整的 docker-engine 工具链,则可以仅安装 docker-runc rpm包: @@ -209,7 +213,7 @@ sudo yum install -y docker-engine -## 总体说明 +### 总体说明 isula-build 客户端提供了一系列命令用于构建和管理容器镜像,当前 isula-build 包含的命令行指令如下: @@ -236,7 +240,7 @@ isula-build 客户端提供了一系列命令用于构建和管理容器镜像 -## ctr-img: 容器镜像管理 +### ctr-img: 容器镜像管理 isula-build 将所有容器镜像管理相关命令划分在子命令 `ctr-img` 下,命令原型为: @@ -244,7 +248,7 @@ isula-build 将所有容器镜像管理相关命令划分在子命令 `ctr-img` isula-build ctr-img [command] ``` -### build: 容器镜像构建 +#### build: 容器镜像构建 ctr-img 的子命令 build 用于构建容器镜像,命令原型为: @@ -410,7 +414,7 @@ $ sudo isula-build ctr-img build --cap-add CAP_SYS_ADMIN --cap-add CAP_SYS_PTRAC -### image: 查看本地持久化构建镜像 +#### image: 查看本地持久化构建镜像 可通过images命令查看当前本地持久化存储的镜像: @@ -428,7 +432,7 @@ localhost:5000/library/alpine latest a24bb4013296 -### import: 导入容器基础镜像 +#### import: 导入容器基础镜像 openEuler会随版本发布一个容器基础镜像,比如openEuler-docker.x86_64.tar.xz。可以通过`ctr-img import`指令将它导入到 isula-build。 @@ -441,13 +445,13 @@ isula-build ctr-img import [flags] 使用举例: ```sh -$ sudo isula-build ctr-img import ./openEuler-docker.x86_64.tar.xz openeuler:20.03 +$ sudo isula-build ctr-img import ./openEuler-docker.x86_64.tar.xz openeuler:20.09 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 +openeuler 20.09 7317851cd2ab 2020-08-01 06:25:34 500 MB ---------------------------------------------- -------------------- ----------------- ------------------------ ------------ ``` @@ -456,7 +460,7 @@ openeuler 20.03 7317851cd2 -### load: 导入层叠镜像 +#### load: 导入层叠镜像 层叠镜像指的是通过 docker save 或 isula-build ctr-img save 等指令,将一个构建完成的镜像保存至本地之后,镜像压缩包内是一层一层 layer.tar 的镜像包。可以通过 ctr-img load 指令将它导入至 isula-build。 @@ -501,7 +505,7 @@ Loaded image as c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e -### rm: 删除本地持久化镜像 +#### rm: 删除本地持久化镜像 可通过rm命令删除当前本地持久化存储的镜像。命令原型为: @@ -524,7 +528,7 @@ Deleted: sha256:eeba1bfe9fca569a894d525ed291bdaef389d28a88c288914c1a9db7261ad12c -### save: 导出层叠镜像 +#### save: 导出层叠镜像 可通过save命令导出层叠镜像到本地磁盘。命令原型如下: @@ -562,7 +566,7 @@ Save success with image: 21c3e96ac411 -### tag: 给本地持久化镜像打标签 +#### tag: 给本地持久化镜像打标签 可使用tag命令给本地持久化的容器镜像打tag。命令原型如下: @@ -591,7 +595,7 @@ alpine v1 a24bb4013296 -## info: 查看运行环境与系统信息 +### info: 查看运行环境与系统信息 可以通过“isula-build info”指令查看 isula-build 目前的运行环境与系统信息。命令原型如下: @@ -628,7 +632,7 @@ $ sudo isula-build info -H oepkgs.net ``` -## login: 登录远端镜像仓库 +### login: 登录远端镜像仓库 用户可以运行 login 命令来登录远程镜像仓库。命令原型如下: @@ -659,7 +663,7 @@ $ sudo isula-build info -H Login Succeeded ``` -## logout: 退出远端镜像仓库 +### logout: 退出远端镜像仓库 用户可以运行 logout 命令来登出远程镜像仓库。命令原型如下: @@ -681,7 +685,7 @@ $ sudo isula-build info -H Removed authentications ``` -## version: 版本查询 +### version: 版本查询 可通过version命令查看当前版本信息: @@ -703,11 +707,11 @@ $ sudo isula-build info -H ``` -# 直接集成容器引擎 +## 直接集成容器引擎 isula-build可以与iSulad和docker集成,将构建好的容器镜像导入到容器引擎的本地存储中。 -## 与iSulad集成 +### 与iSulad集成 支持将构建成功的镜像直接导出到iSulad。 @@ -730,7 +734,7 @@ busybox 2.0 2d414a5cad6d 2020-08-01 06:41: > - 要求isula-build和iSulad在同一节点。 > - 直接导出镜像到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` 文件。 -## 与Docker集成 +### 与Docker集成 支持将构建成功的镜像直接导出到Docker daemon。 @@ -752,10 +756,10 @@ busybox 2.0 2d414a5c > > - 要求isula-build和Docker在同一节点。 -# 附录 +## 附录 -## 命令行参数说明 +### 命令行参数说明 **表1** ctr-img build 命令参数列表 @@ -802,11 +806,11 @@ busybox 2.0 2d414a5c | -------- | --------- | ------------------------------------ | | logout | -a, --all | 布尔值,是否登出所有已登陆的镜像仓库 | -## 通信矩阵 +### 通信矩阵 isula-build两个组件进程之间通过unix socket套接字文件进行通信,无端口通信。 -## 文件与权限 +### 文件与权限 - isula-build 所有的操作均需要使用 root 权限。 diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git a/docs/zh/docs/20.09/docs/Container/public_sys-resources/icon-caution.gif b/docs/zh/docs/Container/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Container/public_sys-resources/icon-caution.gif rename to docs/zh/docs/Container/public_sys-resources/icon-caution.gif diff --git a/docs/zh/docs/20.09/docs/Container/public_sys-resources/icon-danger.gif b/docs/zh/docs/Container/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Container/public_sys-resources/icon-danger.gif rename to docs/zh/docs/Container/public_sys-resources/icon-danger.gif diff --git a/docs/zh/docs/20.09/docs/Container/public_sys-resources/icon-note.gif b/docs/zh/docs/Container/public_sys-resources/icon-note.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Container/public_sys-resources/icon-note.gif rename to docs/zh/docs/Container/public_sys-resources/icon-note.gif diff --git a/docs/zh/docs/20.09/docs/Container/public_sys-resources/icon-notice.gif b/docs/zh/docs/Container/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Container/public_sys-resources/icon-notice.gif rename to docs/zh/docs/Container/public_sys-resources/icon-notice.gif diff --git a/docs/zh/docs/20.09/docs/Container/public_sys-resources/icon-tip.gif b/docs/zh/docs/Container/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Container/public_sys-resources/icon-tip.gif rename to docs/zh/docs/Container/public_sys-resources/icon-tip.gif diff --git a/docs/zh/docs/20.09/docs/Container/public_sys-resources/icon-warning.gif b/docs/zh/docs/Container/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Container/public_sys-resources/icon-warning.gif rename to docs/zh/docs/Container/public_sys-resources/icon-warning.gif diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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" similarity index 100% rename from "docs/zh/docs/20.09/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" rename to "docs/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/docs/Container/\345\215\207\347\272\247.md" "b/docs/zh/docs/Container/\345\215\207\347\272\247.md" similarity index 100% rename from "docs/zh/docs/20.09/docs/Container/\345\215\207\347\272\247.md" rename to "docs/zh/docs/Container/\345\215\207\347\272\247.md" diff --git "a/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/docs/zh/docs/20.09/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中的配置为准。

说明

create

+

create

  

--annotation

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

--mount

挂载主机目录到容器中

+

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

--no-healthcheck

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

挂载一个卷

--volumes-from=[]

+

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

+
diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" 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/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/docs/Container/\351\231\204\345\275\225-3.md" rename to "docs/zh/docs/Container/\351\231\204\345\275\225-3.md" diff --git "a/docs/zh/docs/20.09/docs/Container/\351\231\204\345\275\225.md" "b/docs/zh/docs/Container/\351\231\204\345\275\225.md" similarity index 100% rename from "docs/zh/docs/20.09/docs/Container/\351\231\204\345\275\225.md" rename to "docs/zh/docs/Container/\351\231\204\345\275\225.md" diff --git a/docs/zh/docs/20.09/docs/Installation/FAQ-1.md b/docs/zh/docs/Installation/FAQ-1.md similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/FAQ-1.md rename to docs/zh/docs/Installation/FAQ-1.md diff --git a/docs/zh/docs/20.09/docs/Installation/FAQ.md b/docs/zh/docs/Installation/FAQ.md similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/FAQ.md rename to docs/zh/docs/Installation/FAQ.md diff --git a/docs/zh/docs/20.09/docs/Installation/figures/Advanced_User_Configuration.png b/docs/zh/docs/Installation/figures/Advanced_User_Configuration.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/Advanced_User_Configuration.png rename to docs/zh/docs/Installation/figures/Advanced_User_Configuration.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/Automatic_installation_complete.png b/docs/zh/docs/Installation/figures/Automatic_installation_complete.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/Automatic_installation_complete.png rename to docs/zh/docs/Installation/figures/Automatic_installation_complete.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/BIOS.png b/docs/zh/docs/Installation/figures/BIOS.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/BIOS.png rename to docs/zh/docs/Installation/figures/BIOS.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/CD-ROM_drive_icon.png b/docs/zh/docs/Installation/figures/CD-ROM_drive_icon.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/CD-ROM_drive_icon.png rename to docs/zh/docs/Installation/figures/CD-ROM_drive_icon.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/Configuration_error_prompt.png b/docs/zh/docs/Installation/figures/Configuration_error_prompt.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/Configuration_error_prompt.png rename to docs/zh/docs/Installation/figures/Configuration_error_prompt.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/Disk_encryption_password.png b/docs/zh/docs/Installation/figures/Disk_encryption_password.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/Disk_encryption_password.png rename to docs/zh/docs/Installation/figures/Disk_encryption_password.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/Image_dialog_box.png b/docs/zh/docs/Installation/figures/Image_dialog_box.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/Image_dialog_box.png rename to docs/zh/docs/Installation/figures/Image_dialog_box.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/Installation_wizard.png b/docs/zh/docs/Installation/figures/Installation_wizard.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/Installation_wizard.png rename to docs/zh/docs/Installation/figures/Installation_wizard.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/Keyboard_layout.png b/docs/zh/docs/Installation/figures/Keyboard_layout.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/Keyboard_layout.png rename to docs/zh/docs/Installation/figures/Keyboard_layout.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/Manual_partitioning.png b/docs/zh/docs/Installation/figures/Manual_partitioning.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/Manual_partitioning.png rename to docs/zh/docs/Installation/figures/Manual_partitioning.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/NetworkandHostName.png b/docs/zh/docs/Installation/figures/NetworkandHostName.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/NetworkandHostName.png rename to docs/zh/docs/Installation/figures/NetworkandHostName.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/No-bootable-device-page.png b/docs/zh/docs/Installation/figures/No-bootable-device-page.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/No-bootable-device-page.png rename to docs/zh/docs/Installation/figures/No-bootable-device-page.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/Partition_expansion.png b/docs/zh/docs/Installation/figures/Partition_expansion.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/Partition_expansion.png rename to docs/zh/docs/Installation/figures/Partition_expansion.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/Semi-automatic-new.png b/docs/zh/docs/Installation/figures/Semi-automatic-new.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/Semi-automatic-new.png rename to docs/zh/docs/Installation/figures/Semi-automatic-new.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/add_inst-noverifyssl.png b/docs/zh/docs/Installation/figures/add_inst-noverifyssl.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/add_inst-noverifyssl.png rename to docs/zh/docs/Installation/figures/add_inst-noverifyssl.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/change.png b/docs/zh/docs/Installation/figures/change.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/change.png rename to docs/zh/docs/Installation/figures/change.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/choice.png b/docs/zh/docs/Installation/figures/choice.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/choice.png rename to docs/zh/docs/Installation/figures/choice.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/choicelanguage.png b/docs/zh/docs/Installation/figures/choicelanguage.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/choicelanguage.png rename to docs/zh/docs/Installation/figures/choicelanguage.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/complete_install.png b/docs/zh/docs/Installation/figures/complete_install.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/complete_install.png rename to docs/zh/docs/Installation/figures/complete_install.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/createuser.png b/docs/zh/docs/Installation/figures/createuser.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/createuser.png rename to docs/zh/docs/Installation/figures/createuser.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/dateandtime.png b/docs/zh/docs/Installation/figures/dateandtime.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/dateandtime.png rename to docs/zh/docs/Installation/figures/dateandtime.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/install_source.png b/docs/zh/docs/Installation/figures/install_source.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/install_source.png rename to docs/zh/docs/Installation/figures/install_source.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/installation_overview.png b/docs/zh/docs/Installation/figures/installation_overview.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/installation_overview.png rename to docs/zh/docs/Installation/figures/installation_overview.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/installation_procedure.png b/docs/zh/docs/Installation/figures/installation_procedure.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/installation_procedure.png rename to docs/zh/docs/Installation/figures/installation_procedure.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/languagesupport.png b/docs/zh/docs/Installation/figures/languagesupport.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/languagesupport.png rename to docs/zh/docs/Installation/figures/languagesupport.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/restart_icon.png b/docs/zh/docs/Installation/figures/restart_icon.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/restart_icon.png rename to docs/zh/docs/Installation/figures/restart_icon.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/root_password.png b/docs/zh/docs/Installation/figures/root_password.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/root_password.png rename to docs/zh/docs/Installation/figures/root_password.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/security.png b/docs/zh/docs/Installation/figures/security.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/security.png rename to docs/zh/docs/Installation/figures/security.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/select_software.png b/docs/zh/docs/Installation/figures/select_software.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/select_software.png rename to docs/zh/docs/Installation/figures/select_software.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/startinstall.png b/docs/zh/docs/Installation/figures/startinstall.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/startinstall.png rename to docs/zh/docs/Installation/figures/startinstall.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/target_install_position.png b/docs/zh/docs/Installation/figures/target_install_position.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/target_install_position.png rename to docs/zh/docs/Installation/figures/target_install_position.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291229.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291229.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291229.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291229.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291236.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291236.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291236.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291236.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291243.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291243.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291243.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291243.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291247.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291247.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291247.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291247.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291264.jpg b/docs/zh/docs/Installation/figures/zh-cn_image_0229291264.jpg similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291264.jpg rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291264.jpg diff --git a/docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291270.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291270.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291270.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291270.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291272.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291272.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291272.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291272.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291280.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291280.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291280.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291280.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291286.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229291286.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229291286.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229291286.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229420473.png b/docs/zh/docs/Installation/figures/zh-cn_image_0229420473.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0229420473.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0229420473.png diff --git a/docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0231657950.png b/docs/zh/docs/Installation/figures/zh-cn_image_0231657950.png similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/figures/zh-cn_image_0231657950.png rename to docs/zh/docs/Installation/figures/zh-cn_image_0231657950.png diff --git a/docs/zh/docs/20.09/docs/Installation/installation.md b/docs/zh/docs/Installation/installation.md similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/installation.md rename to docs/zh/docs/Installation/installation.md diff --git a/docs/zh/docs/20.09/docs/Installation/public_sys-resources/icon-caution.gif b/docs/zh/docs/Installation/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/public_sys-resources/icon-caution.gif rename to docs/zh/docs/Installation/public_sys-resources/icon-caution.gif diff --git a/docs/zh/docs/20.09/docs/Installation/public_sys-resources/icon-danger.gif b/docs/zh/docs/Installation/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/public_sys-resources/icon-danger.gif rename to docs/zh/docs/Installation/public_sys-resources/icon-danger.gif diff --git a/docs/zh/docs/20.09/docs/Installation/public_sys-resources/icon-note.gif b/docs/zh/docs/Installation/public_sys-resources/icon-note.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/public_sys-resources/icon-note.gif rename to docs/zh/docs/Installation/public_sys-resources/icon-note.gif diff --git a/docs/zh/docs/20.09/docs/Installation/public_sys-resources/icon-notice.gif b/docs/zh/docs/Installation/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/public_sys-resources/icon-notice.gif rename to docs/zh/docs/Installation/public_sys-resources/icon-notice.gif diff --git a/docs/zh/docs/20.09/docs/Installation/public_sys-resources/icon-tip.gif b/docs/zh/docs/Installation/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/public_sys-resources/icon-tip.gif rename to docs/zh/docs/Installation/public_sys-resources/icon-tip.gif diff --git a/docs/zh/docs/20.09/docs/Installation/public_sys-resources/icon-warning.gif b/docs/zh/docs/Installation/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Installation/public_sys-resources/icon-warning.gif rename to docs/zh/docs/Installation/public_sys-resources/icon-warning.gif diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/Installation/\345\256\211\350\243\205UKUI.md" "b/docs/zh/docs/Installation/\345\256\211\350\243\205UKUI.md" new file mode 100644 index 0000000000000000000000000000000000000000..4b0bf019f1235a784e2cae2db79e36c7922a5a35 --- /dev/null +++ "b/docs/zh/docs/Installation/\345\256\211\350\243\205UKUI.md" @@ -0,0 +1,29 @@ +# 在 openEuler 上安装 UKUI +UKUI是麒麟软件团队历经多年打造的一款Linux 桌面,主要基于 GTK 和 QT开发。与其它UI界面相比,UKUI更加注重易用性和敏捷度,各元件相依性小,可以不依赖其它套件而独自运行,给用户带来亲切和高效的使用体验。 + +UKUI支持x86_64和aarch64两种架构。 + +安装时,建议新建一个管理员用户。 + +1. [下载](https://openeuler.org/zh/download/)openEuler ISO镜像并安装系统,更新软件源 +``` +sudo dnf update +``` +2. 安装UKUI +``` +sudo dnf install ukui +``` +注:目前UKUI的依赖libdbusmenu在安装时需要安装python2,和python3-unversioned-command包(该包提供了一个指向python3的软连接)产生了冲突,必须先强行卸载python3-unversioned-command包(`rpm -e --nodeps python3-unversioned-command`)。在安装完成后,可通过以下命令恢复该包的设置。 +``` +ln -s /usr/bin/python3 /usr/bin/python +``` +3. 安装字库 +``` +sudo dnf groupinstall fonts +``` + +4. 在确认正常安装后,如果希望以图形界面的方式启动,请在命令行运行以下代码,并重启(`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/20.09/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 "docs/zh/docs/20.09/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..fb87989d65190503b0f38b41125f71f731d0ea1e 100644 --- "a/docs/zh/docs/20.09/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,14 @@ 在安装开始前,您需要获取 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.09 上的“下载”按钮。 +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.09-raspi-aarch64.img.xz”,将 openEuler 发布的树莓派镜像下载到本地。 +6. 单击“openEuler-20.09-raspi-aarch64.img.xz.sha256sum”,将 openEuler 发布的树莓派镜像的校验文件下载到本地。 ## 镜像完整性校验 @@ -42,9 +40,9 @@ 在校验镜像文件的完整性之前,需要准备如下文件: -镜像文件:openEuler-20.09-RaspberryPi.aarch64.img.xz +镜像文件:openEuler-20.09-raspi-aarch64.img.xz -校验文件:openEuler-20.09-RaspberryPi.aarch64.img.xz.sha256sum +校验文件:openEuler-20.09-raspi-aarch64.img.xz.sha256sum ### 操作指导 @@ -53,13 +51,13 @@ 1. 获取校验文件中的校验值。执行命令如下: ``` - $ cat openEuler-20.09-RaspberryPi.aarch64.img.xz.sha256sum + $ cat openEuler-20.09-raspi-aarch64.img.xz.sha256sum ``` 2. 计算文件的 sha256 校验值。执行命令如下: ``` - $ sha256sum openEuler-20.09-RaspberryPi.aarch64.img.xz + $ sha256sum openEuler-20.09-raspi-aarch64.img.xz ``` 命令执行完成后,输出校验值。 diff --git "a/docs/zh/docs/20.09/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" similarity index 97% rename from "docs/zh/docs/20.09/docs/Installation/\345\256\211\350\243\205\345\207\206\345\244\207.md" rename to "docs/zh/docs/Installation/\345\256\211\350\243\205\345\207\206\345\244\207.md" index 7e48f48165a8073401d8b404bd06961bc39600f9..0f6031d32017b05649439c5547e5ae22f229bfe8 100644 --- "a/docs/zh/docs/20.09/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" @@ -27,16 +27,14 @@ 请按以下步骤获取openEuler的发布包和校验文件: -1. 登录[openEuler社区](https://openeuler.org)网站。 -2. 单击“下载”。 -3. 单击“获取ISO:”后面的“Link”,显示版本列表。 -4. 单击“openEuler-20.09”,进入openEuler 20.09版本下载列表。 -5. 单击“ISO”,进入ISO下载列表。 +1. 登录[openEuler社区](https://openeuler.org/zh/download/)网站。 +2. 单击卡片 openEuler 20.09 上的“获取ISO”,显示ISO下载列表。 - aarch64:AArch64架构的ISO。 - - x86\_64:x86\_64架构的ISO。 - source:openEuler源码ISO。 + - x86\_64:x86\_64架构的ISO。 + -6. 根据实际待安装环境的架构选择需要下载的openEuler的发布包和校验文件。 +3. 根据实际待安装环境的架构选择需要下载的openEuler的发布包和校验文件。 - 若为AArch64架构。 1. 单击“aarch64”。 2. 单击“openEuler-20.09-aarch64-dvd.iso”,将openEuler发布包下载到本地。 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/docs/zh/docs/20.09/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 98% rename from "docs/zh/docs/20.09/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 89b6d318b0f2b43647d41265279e3ef7a4adc30b..d8416251b0e3eb647842b0558fc3d07226173443 100644 --- "a/docs/zh/docs/20.09/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" @@ -24,11 +24,11 @@ 1. 本地登录 - 树莓派连接显示器(树莓派视频输出接口为 Micro HDMI)、键盘、鼠标后,启动树莓派,可以看到树莓派启动日志输出到显示器上。待树莓派启动成功,输入用户名(root)和密码(openEuler12#$)登录。 + 树莓派连接显示器(树莓派视频输出接口为 Micro HDMI)、键盘、鼠标后,启动树莓派,可以看到树莓派启动日志输出到显示器上。待树莓派启动成功,输入用户名(root)和密码(openeuler)登录。 2. ssh 远程登录 - 树莓派默认采用 DHCP 的方式自动获取 IP。如果树莓派连接已知路由器,可登录路由器查看,新增的 IP 即为树莓派 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.1.109` 后输入密码 `openeuler`,即可远程登录树莓派。 ## 配置系统 diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 82% rename from "docs/zh/docs/20.09/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 9fe80772c1d5ebb9329cb5aecf9f38cf91edd99e..9788f5d255e38b7c9578818015c4c26048f03aee 100644 --- "a/docs/zh/docs/20.09/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" @@ -44,9 +44,9 @@ ### 写入 SD 卡 >![](./public_sys-resources/icon-notice.gif) **须知:** ->如果获取的是压缩后的镜像文件“openEuler-20.09-RaspberryPi.aarch64.img.xz”,需要先将压缩文件解压得到 “openEuler-20.09-RaspberryPi.aarch64.img”镜像文件。 +>如果获取的是压缩后的镜像文件“openEuler-20.09-raspi-aarch64.img.xz”,需要先将压缩文件解压得到 “openEuler-20.09-raspi-aarch64.img”镜像文件。 -请按照以下步骤将“openEuler-20.09-RaspberryPi.aarch64.img”镜像文件写入 SD 卡: +请按照以下步骤将“openEuler-20.09-raspi-aarch64.img”镜像文件写入 SD 卡: 1. 下载并安装刷写镜像的工具,以下操作以 Win32 Disk Imager 工具为例。 2. 右键选择“以管理员身份运行”,打开 Win32 Disk Imager。 @@ -74,10 +74,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.09-raspi-aarch64.img.xz` 命令将压缩文件解压得到“openEuler-20.09-raspi-aarch64.img”镜像文件;否则,跳过该步骤。 +2. 将镜像 `openEuler-20.09-raspi-aarch64.img` 刷写入 SD 卡,在 root 权限下执行以下命令: - `dd bs=4M if=openEuler-20.09-RaspberryPi.aarch64.img of=/dev/sdb` + `dd bs=4M if=openEuler-20.09-raspi-aarch64.img of=/dev/sdb` >![](./public_sys-resources/icon-note.gif) **说明:** >一般情况下,将块大小设置为 4M。如果写入失败或者写入的镜像无法使用,可以尝试将块大小设置为 1M 重新写入,但是设置为 1M 比较耗时。 @@ -101,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.09-raspi-aarch64.img.xz` 命令将压缩文件解压得到“openEuler-20.09-raspi-aarch64.img”镜像文件;否则,跳过该步骤。 +2. 将镜像 `openEuler-20.09-raspi-aarch64.img` 刷入 SD 卡,在 root 权限下执行以下命令: - `dd bs=4m if=openEuler-20.09-RaspberryPi.aarch64.img of=/dev/sdb` + `dd bs=4m if=openEuler-20.09-raspi-aarch64.img of=/dev/sdb` >![](./public_sys-resources/icon-note.gif) **说明:** >一般情况下,将块大小设置为 4m。如果写入失败或者写入的镜像无法使用,可以尝试将块大小设置为 1m 重新写入,但是设置为 1m 比较耗时。 diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/Advanced_User_Configuration.png b/docs/zh/docs/Quickstart/figures/Advanced_User_Configuration.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/Advanced_User_Configuration.png rename to docs/zh/docs/Quickstart/figures/Advanced_User_Configuration.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/CD-ROM_drive_icon.png b/docs/zh/docs/Quickstart/figures/CD-ROM_drive_icon.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/CD-ROM_drive_icon.png rename to docs/zh/docs/Quickstart/figures/CD-ROM_drive_icon.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/Image_dialog_box.png b/docs/zh/docs/Quickstart/figures/Image_dialog_box.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/Image_dialog_box.png rename to docs/zh/docs/Quickstart/figures/Image_dialog_box.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/Installation_Overview.png b/docs/zh/docs/Quickstart/figures/Installation_Overview.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/Installation_Overview.png rename to docs/zh/docs/Quickstart/figures/Installation_Overview.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/Installation_wizard.png b/docs/zh/docs/Quickstart/figures/Installation_wizard.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/Installation_wizard.png rename to docs/zh/docs/Quickstart/figures/Installation_wizard.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/Setting_the_System_Boot_Option.png b/docs/zh/docs/Quickstart/figures/Setting_the_System_Boot_Option.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/Setting_the_System_Boot_Option.png rename to docs/zh/docs/Quickstart/figures/Setting_the_System_Boot_Option.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/Target_installation_position.png b/docs/zh/docs/Quickstart/figures/Target_installation_position.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/Target_installation_position.png rename to docs/zh/docs/Quickstart/figures/Target_installation_position.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/chooselanguage.png b/docs/zh/docs/Quickstart/figures/chooselanguage.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/chooselanguage.png rename to docs/zh/docs/Quickstart/figures/chooselanguage.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/completeinstall.png b/docs/zh/docs/Quickstart/figures/completeinstall.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/completeinstall.png rename to docs/zh/docs/Quickstart/figures/completeinstall.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/createuser.png b/docs/zh/docs/Quickstart/figures/createuser.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/createuser.png rename to docs/zh/docs/Quickstart/figures/createuser.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/restarticon.png b/docs/zh/docs/Quickstart/figures/restarticon.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/restarticon.png rename to docs/zh/docs/Quickstart/figures/restarticon.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/rootpassword.png b/docs/zh/docs/Quickstart/figures/rootpassword.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/rootpassword.png rename to docs/zh/docs/Quickstart/figures/rootpassword.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/selectsoftware.png b/docs/zh/docs/Quickstart/figures/selectsoftware.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/selectsoftware.png rename to docs/zh/docs/Quickstart/figures/selectsoftware.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/startinstall.png b/docs/zh/docs/Quickstart/figures/startinstall.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/startinstall.png rename to docs/zh/docs/Quickstart/figures/startinstall.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/figures/zh-cn_image_0229420473.png b/docs/zh/docs/Quickstart/figures/zh-cn_image_0229420473.png similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/figures/zh-cn_image_0229420473.png rename to docs/zh/docs/Quickstart/figures/zh-cn_image_0229420473.png diff --git a/docs/zh/docs/20.09/docs/Quickstart/public_sys-resources/icon-caution.gif b/docs/zh/docs/Quickstart/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/public_sys-resources/icon-caution.gif rename to docs/zh/docs/Quickstart/public_sys-resources/icon-caution.gif diff --git a/docs/zh/docs/20.09/docs/Quickstart/public_sys-resources/icon-danger.gif b/docs/zh/docs/Quickstart/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/public_sys-resources/icon-danger.gif rename to docs/zh/docs/Quickstart/public_sys-resources/icon-danger.gif diff --git a/docs/zh/docs/20.09/docs/Quickstart/public_sys-resources/icon-note.gif b/docs/zh/docs/Quickstart/public_sys-resources/icon-note.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/public_sys-resources/icon-note.gif rename to docs/zh/docs/Quickstart/public_sys-resources/icon-note.gif diff --git a/docs/zh/docs/20.09/docs/Quickstart/public_sys-resources/icon-notice.gif b/docs/zh/docs/Quickstart/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/public_sys-resources/icon-notice.gif rename to docs/zh/docs/Quickstart/public_sys-resources/icon-notice.gif diff --git a/docs/zh/docs/20.09/docs/Quickstart/public_sys-resources/icon-tip.gif b/docs/zh/docs/Quickstart/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/public_sys-resources/icon-tip.gif rename to docs/zh/docs/Quickstart/public_sys-resources/icon-tip.gif diff --git a/docs/zh/docs/20.09/docs/Quickstart/public_sys-resources/icon-warning.gif b/docs/zh/docs/Quickstart/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/public_sys-resources/icon-warning.gif rename to docs/zh/docs/Quickstart/public_sys-resources/icon-warning.gif diff --git a/docs/zh/docs/20.09/docs/Quickstart/quick-start.md b/docs/zh/docs/Quickstart/quick-start.md similarity index 100% rename from docs/zh/docs/20.09/docs/Quickstart/quick-start.md rename to docs/zh/docs/Quickstart/quick-start.md diff --git "a/docs/zh/docs/20.09/docs/Releasenotes/CVE\346\274\217\346\264\236.md" "b/docs/zh/docs/Releasenotes/CVE\346\274\217\346\264\236.md" similarity index 100% rename from "docs/zh/docs/20.09/docs/Releasenotes/CVE\346\274\217\346\264\236.md" rename to "docs/zh/docs/Releasenotes/CVE\346\274\217\346\264\236.md" diff --git a/docs/zh/docs/20.09/docs/Releasenotes/README.md b/docs/zh/docs/Releasenotes/README.md similarity index 100% rename from docs/zh/docs/20.09/docs/Releasenotes/README.md rename to docs/zh/docs/Releasenotes/README.md diff --git a/docs/zh/docs/20.09/docs/Releasenotes/public_sys-resources/icon-caution.gif b/docs/zh/docs/Releasenotes/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Releasenotes/public_sys-resources/icon-caution.gif rename to docs/zh/docs/Releasenotes/public_sys-resources/icon-caution.gif diff --git a/docs/zh/docs/20.09/docs/Releasenotes/public_sys-resources/icon-danger.gif b/docs/zh/docs/Releasenotes/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Releasenotes/public_sys-resources/icon-danger.gif rename to docs/zh/docs/Releasenotes/public_sys-resources/icon-danger.gif diff --git a/docs/zh/docs/20.09/docs/Releasenotes/public_sys-resources/icon-note.gif b/docs/zh/docs/Releasenotes/public_sys-resources/icon-note.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Releasenotes/public_sys-resources/icon-note.gif rename to docs/zh/docs/Releasenotes/public_sys-resources/icon-note.gif diff --git a/docs/zh/docs/20.09/docs/Releasenotes/public_sys-resources/icon-notice.gif b/docs/zh/docs/Releasenotes/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Releasenotes/public_sys-resources/icon-notice.gif rename to docs/zh/docs/Releasenotes/public_sys-resources/icon-notice.gif diff --git a/docs/zh/docs/20.09/docs/Releasenotes/public_sys-resources/icon-tip.gif b/docs/zh/docs/Releasenotes/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Releasenotes/public_sys-resources/icon-tip.gif rename to docs/zh/docs/Releasenotes/public_sys-resources/icon-tip.gif diff --git a/docs/zh/docs/20.09/docs/Releasenotes/public_sys-resources/icon-warning.gif b/docs/zh/docs/Releasenotes/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Releasenotes/public_sys-resources/icon-warning.gif rename to docs/zh/docs/Releasenotes/public_sys-resources/icon-warning.gif diff --git a/docs/zh/docs/Releasenotes/release_notes.md b/docs/zh/docs/Releasenotes/release_notes.md new file mode 100644 index 0000000000000000000000000000000000000000..ab2aeb18f155d9defc24b2d381c157e655a1ef49 --- /dev/null +++ b/docs/zh/docs/Releasenotes/release_notes.md @@ -0,0 +1,3 @@ +# 发行说明 + +本文档是 openEuler 20.09 版本的发行说明。 \ No newline at end of file diff --git a/docs/zh/docs/20.09/docs/Releasenotes/zh-cn_bookmap_0225720059.md b/docs/zh/docs/Releasenotes/zh-cn_bookmap_0225720059.md similarity index 100% rename from docs/zh/docs/20.09/docs/Releasenotes/zh-cn_bookmap_0225720059.md rename to docs/zh/docs/Releasenotes/zh-cn_bookmap_0225720059.md diff --git "a/docs/zh/docs/20.09/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" similarity index 91% rename from "docs/zh/docs/20.09/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" rename to "docs/zh/docs/Releasenotes/\345\205\263\351\224\256\347\211\271\346\200\247.md" index dcebe84790560583c74ed20cfa572463fde46700..e8b2ff0750215d32b380f6b9b9b58e0202f71546 100644 --- "a/docs/zh/docs/20.09/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" @@ -1,6 +1,6 @@ # 关键特性 -- StratoVirt:安全、轻量、高性能、低损耗的,组件灵活拆分,面向全场景的通用化虚拟机运行时 +- StratoVirt:安全、轻量、高性能、低损耗的,组件灵活拆分,面向全场景的可信虚拟化平台 - 采用Rust语言,支持seccomp,支持多租户隔离,提供可信安全运行环境 - 具备<50ms的启动性能,<4M的内存底噪,极致性能和轻量,适用端、边、云等多样场景 - X86 VT,鲲鹏Kunpeng-V等多体系硬件加速虚拟引擎支持 @@ -38,5 +38,5 @@ - UKUI:麒麟操作系统的默认桌面环境,其布局、风格和使用习惯接近传统Windows - 智能运维 - - A-Tune:智能系统性能优化引擎,推理出业务特征,配置最佳的系统参数集合,使业务处于最优运行状态 + - A-Tune:智能系统性能优化引擎,推理出业务特征,配置最佳的系统参数集合,使业务处于最优运行状态 diff --git "a/docs/zh/docs/20.09/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 62% rename from "docs/zh/docs/20.09/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..ba43d4adf9454a49ef1b39b5b01b98899c82a6ea 100644 --- "a/docs/zh/docs/20.09/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)。 ## 邮件列表和任务 -欢迎你积极地帮助用户解决在[邮件列表](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/20.09/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" similarity index 100% rename from "docs/zh/docs/20.09/docs/Releasenotes/\345\267\262\344\277\256\345\244\215\351\227\256\351\242\230.md" rename to "docs/zh/docs/Releasenotes/\345\267\262\344\277\256\345\244\215\351\227\256\351\242\230.md" 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..d759e59d16e251c45ef0be171519c48fd042c609 --- /dev/null +++ "b/docs/zh/docs/Releasenotes/\345\267\262\347\237\245\351\227\256\351\242\230.md" @@ -0,0 +1,61 @@ +# 已知问题 + + + + + + + + + + + + + + + + + + + + + + + + + +
+

ISSUE

+
+

问题描述

+
+

I1VR1W

+
+

使用x86的qcow2镜像创建虚拟机或者使用iso镜像安装物理机在启动时候报错, + 实际上是预期内的输出,详情见ISSUE回复内容

+
+

I1U1LP

+
+

arm + 物理机使用已写入文件系统的磁盘进行自定义分区,分区失败,特殊路径触发可规避,措施见ISSUE回复内容

+
+

I1VTC5

+
+

在超分场景压力测试下,vcpu大于1000个时vmtop -H翻页有明显卡顿, 影响范围可控,详情见ISSUE回复内容 +

+
+

I1WVM8

+
+

vmtop收集的cpu使用率,单核使用率存在超过100%的, 影响范围可控,详情见ISSUE回复内容

+
diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/docs/Releasenotes/\347\256\200\344\273\213.md" "b/docs/zh/docs/Releasenotes/\347\256\200\344\273\213.md" similarity index 100% rename from "docs/zh/docs/20.09/docs/Releasenotes/\347\256\200\344\273\213.md" rename to "docs/zh/docs/Releasenotes/\347\256\200\344\273\213.md" diff --git "a/docs/zh/docs/20.09/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" similarity index 100% rename from "docs/zh/docs/20.09/docs/Releasenotes/\347\263\273\347\273\237\345\256\211\350\243\205.md" rename to "docs/zh/docs/Releasenotes/\347\263\273\347\273\237\345\256\211\350\243\205.md" diff --git "a/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/20.09/docs/SecHarden/SELinux\351\205\215\347\275\256.md" "b/docs/zh/docs/SecHarden/SELinux\351\205\215\347\275\256.md" similarity index 100% rename from "docs/zh/docs/20.09/docs/SecHarden/SELinux\351\205\215\347\275\256.md" rename to "docs/zh/docs/SecHarden/SELinux\351\205\215\347\275\256.md" diff --git a/docs/zh/docs/20.09/docs/SecHarden/figures/zh-cn_image_0221925211.png b/docs/zh/docs/SecHarden/figures/zh-cn_image_0221925211.png similarity index 100% rename from docs/zh/docs/20.09/docs/SecHarden/figures/zh-cn_image_0221925211.png rename to docs/zh/docs/SecHarden/figures/zh-cn_image_0221925211.png diff --git a/docs/zh/docs/20.09/docs/SecHarden/figures/zh-cn_image_0221925212.png b/docs/zh/docs/SecHarden/figures/zh-cn_image_0221925212.png similarity index 100% rename from docs/zh/docs/20.09/docs/SecHarden/figures/zh-cn_image_0221925212.png rename to docs/zh/docs/SecHarden/figures/zh-cn_image_0221925212.png diff --git a/docs/zh/docs/20.09/docs/SecHarden/public_sys-resources/icon-caution.gif b/docs/zh/docs/SecHarden/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/zh/docs/20.09/docs/SecHarden/public_sys-resources/icon-caution.gif rename to docs/zh/docs/SecHarden/public_sys-resources/icon-caution.gif diff --git a/docs/zh/docs/20.09/docs/SecHarden/public_sys-resources/icon-danger.gif b/docs/zh/docs/SecHarden/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/zh/docs/20.09/docs/SecHarden/public_sys-resources/icon-danger.gif rename to docs/zh/docs/SecHarden/public_sys-resources/icon-danger.gif diff --git a/docs/zh/docs/20.09/docs/SecHarden/public_sys-resources/icon-note.gif b/docs/zh/docs/SecHarden/public_sys-resources/icon-note.gif similarity index 100% rename from docs/zh/docs/20.09/docs/SecHarden/public_sys-resources/icon-note.gif rename to docs/zh/docs/SecHarden/public_sys-resources/icon-note.gif diff --git a/docs/zh/docs/20.09/docs/SecHarden/public_sys-resources/icon-notice.gif b/docs/zh/docs/SecHarden/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/zh/docs/20.09/docs/SecHarden/public_sys-resources/icon-notice.gif rename to docs/zh/docs/SecHarden/public_sys-resources/icon-notice.gif diff --git a/docs/zh/docs/20.09/docs/SecHarden/public_sys-resources/icon-tip.gif b/docs/zh/docs/SecHarden/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/zh/docs/20.09/docs/SecHarden/public_sys-resources/icon-tip.gif rename to docs/zh/docs/SecHarden/public_sys-resources/icon-tip.gif diff --git a/docs/zh/docs/20.09/docs/SecHarden/public_sys-resources/icon-warning.gif b/docs/zh/docs/SecHarden/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/zh/docs/20.09/docs/SecHarden/public_sys-resources/icon-warning.gif rename to docs/zh/docs/SecHarden/public_sys-resources/icon-warning.gif diff --git a/docs/zh/docs/20.09/docs/SecHarden/secHarden.md b/docs/zh/docs/SecHarden/secHarden.md similarity index 100% rename from docs/zh/docs/20.09/docs/SecHarden/secHarden.md rename to docs/zh/docs/SecHarden/secHarden.md diff --git "a/docs/zh/docs/20.09/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" similarity index 100% rename from "docs/zh/docs/20.09/docs/SecHarden/\345\206\205\346\240\270\345\217\202\346\225\260.md" rename to "docs/zh/docs/SecHarden/\345\206\205\346\240\270\345\217\202\346\225\260.md" diff --git "a/docs/zh/docs/20.09/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" similarity index 100% rename from "docs/zh/docs/20.09/docs/SecHarden/\345\212\240\345\233\272\346\214\207\345\257\274.md" rename to "docs/zh/docs/SecHarden/\345\212\240\345\233\272\346\214\207\345\257\274.md" diff --git "a/docs/zh/docs/20.09/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" similarity index 100% rename from "docs/zh/docs/20.09/docs/SecHarden/\345\256\211\345\205\250\345\212\240\345\233\272\345\267\245\345\205\267.md" rename to "docs/zh/docs/SecHarden/\345\256\211\345\205\250\345\212\240\345\233\272\345\267\245\345\205\267.md" diff --git "a/docs/zh/docs/20.09/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" similarity index 100% rename from "docs/zh/docs/20.09/docs/SecHarden/\346\216\210\346\235\203\350\256\244\350\257\201.md" rename to "docs/zh/docs/SecHarden/\346\216\210\346\235\203\350\256\244\350\257\201.md" diff --git "a/docs/zh/docs/20.09/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" similarity index 100% rename from "docs/zh/docs/20.09/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" rename to "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" diff --git "a/docs/zh/docs/20.09/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" similarity index 100% rename from "docs/zh/docs/20.09/docs/SecHarden/\346\226\207\344\273\266\346\235\203\351\231\220.md" rename to "docs/zh/docs/SecHarden/\346\226\207\344\273\266\346\235\203\351\231\220.md" diff --git "a/docs/zh/docs/20.09/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" similarity index 99% rename from "docs/zh/docs/20.09/docs/SecHarden/\347\263\273\347\273\237\346\234\215\345\212\241.md" rename to "docs/zh/docs/SecHarden/\347\263\273\347\273\237\346\234\215\345\212\241.md" index e6f917881a39ffecb1cd1cdc04239289f2d80675..13049d47053fe826043ebc9ac44208a944f88424 100644 --- "a/docs/zh/docs/20.09/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" @@ -206,7 +206,7 @@ SSH(Secure Shell)是目前较可靠,专为远程登录会话和其他网

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

-

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

+

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

@@ -278,7 +278,7 @@ SSH(Secure Shell)是目前较可靠,专为远程登录会话和其他网

设置SSH密钥交换算法

-

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

+

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

   @@ -319,7 +319,7 @@ SSH(Secure Shell)是目前较可靠,专为远程登录会话和其他网

设置SSH密钥交换算法

-

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

+

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

diff --git "a/docs/zh/docs/20.09/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" similarity index 100% rename from "docs/zh/docs/20.09/docs/SecHarden/\350\264\246\346\210\267\345\217\243\344\273\244.md" rename to "docs/zh/docs/SecHarden/\350\264\246\346\210\267\345\217\243\344\273\244.md" diff --git "a/docs/zh/docs/20.09/docs/SecHarden/\351\231\204\345\275\225.md" "b/docs/zh/docs/SecHarden/\351\231\204\345\275\225.md" similarity index 100% rename from "docs/zh/docs/20.09/docs/SecHarden/\351\231\204\345\275\225.md" rename to "docs/zh/docs/SecHarden/\351\231\204\345\275\225.md" diff --git "a/docs/zh/docs/20.09/docs/StratoVirt/StratoVrit\350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.md" b/docs/zh/docs/StratoVirt/StratoVirtGuide.md similarity index 86% rename from "docs/zh/docs/20.09/docs/StratoVirt/StratoVrit\350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.md" rename to docs/zh/docs/StratoVirt/StratoVirtGuide.md index e9a487543a238dd02b25199be807da3d104d4498..f4a7fc9fb1c17a06728a1d5f91eecee87e4e654d 100644 --- "a/docs/zh/docs/20.09/docs/StratoVirt/StratoVrit\350\231\232\346\213\237\345\214\226\347\224\250\346\210\267\346\214\207\345\215\227.md" +++ b/docs/zh/docs/StratoVirt/StratoVirtGuide.md @@ -1,4 +1,4 @@ -# StratoVirt虚拟化用户指南 +# StratoVirt用户指南 本文档介绍Stratovirt虚拟化,并给出基于openEuler安装StratoVirt的方法,以及StratoVirt虚拟化的使用指导。让用户了解Stratovirt,并指导用户和管理员安装和使用StratoVirt。 diff --git "a/docs/zh/docs/20.09/docs/StratoVirt/StratoVirt\344\273\213\347\273\215.md" "b/docs/zh/docs/StratoVirt/StratoVirt\344\273\213\347\273\215.md" similarity index 46% rename from "docs/zh/docs/20.09/docs/StratoVirt/StratoVirt\344\273\213\347\273\215.md" rename to "docs/zh/docs/StratoVirt/StratoVirt\344\273\213\347\273\215.md" index 0d744d2c94331346f500b20ef0f52e5de6b4941e..b5fb734ef9271ac4ece39e9b0c04a5bdf870e86a 100644 --- "a/docs/zh/docs/20.09/docs/StratoVirt/StratoVirt\344\273\213\347\273\215.md" +++ "b/docs/zh/docs/StratoVirt/StratoVirt\344\273\213\347\273\215.md" @@ -4,9 +4,8 @@ ## 概述 -在数据中心领域,虚拟化是一种重要的资源隔离手段,能够以多粒度提供安全的虚拟运行时环境。然而,QEMU等传统虚拟化软件存在代码量庞大,CVE安全漏洞频出等问题。业界逐步演进出以Rust语言实现microVM形态的趋势。安全、轻量、高性能、低损耗、组件灵活拆分,全场景(数据中心,终端,边缘设备)通用的虚拟化技术是未来的趋势。 - -StratoVirt是一款由Rust实现的轻量虚拟化方案,通过精简设备模型,优化运行性能,为容器提供安全隔离、性能优异的安全沙箱运行环境。 +StratoVirt是计算产业中面向云数据中心的企业级虚拟化平台,实现了一套架构统一支持虚拟机、容器、Serverless三种场景。StratoVirt在轻量低噪、软硬协同、Rust语言级安全等方面具备关键技术竞争优势。 +StratoVirt在架构设计和接口上预留了组件化拼装的能力和接口,StratoVirt可以按需灵活组装高级特性直至演化到支持标准虚拟化,在特性需求、应用场景和轻快灵巧之间找到最佳的平衡点。 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..baf5526d077a452c9d8a18af38638c8db9150d27 Binary files /dev/null and b/docs/zh/docs/StratoVirt/figures/StratoVirt_architecture.png differ diff --git a/docs/zh/docs/20.09/docs/StratoVirt/figures/zh-cn_image_0218587436.png b/docs/zh/docs/StratoVirt/figures/zh-cn_image_0218587436.png similarity index 100% rename from docs/zh/docs/20.09/docs/StratoVirt/figures/zh-cn_image_0218587436.png rename to docs/zh/docs/StratoVirt/figures/zh-cn_image_0218587436.png diff --git "a/docs/zh/docs/20.09/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" similarity index 94% rename from "docs/zh/docs/20.09/docs/StratoVirt/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" rename to "docs/zh/docs/StratoVirt/\345\207\206\345\244\207\344\275\277\347\224\250\347\216\257\345\242\203.md" index dc4229566fb390b72c950cf4d55f62bb0d125846..2a00e3e7896c51df2b8864afe1d104e9ebff17e9 100644 --- "a/docs/zh/docs/20.09/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" @@ -35,7 +35,6 @@ $ modprobe vhost_vsock ``` - - 为了能够使用QMP命令,需要安装nmap工具,在配置yum源的前提下,可执行如下命令安装nmap。 @@ -62,14 +61,12 @@ $ git checkout kernel-4.19 ``` -3. 配置并编译Linux kernel。可使用推荐配置([获取配置文件](https://gitee.com/openeuler/stratovirt/tree/master/docs/kernel_config)),将其复制到kernel路径下并重命名为xx.config。也可通过以下命令进行交互,根据提示完成kernel配置。 +3. 配置并编译Linux kernel。可使用推荐配置([获取配置文件](https://gitee.com/openeuler/stratovirt/tree/master/docs/kernel_config)),将其复制到kernel路径下并重命名为`.config`。也可通过以下命令进行交互,根据提示完成kernel配置。 ``` $ make menuconfig ``` - 编译完成后,会在当前目录生成kernel镜像vmlinux。 - 4. 使用下面的命令制作并转换kernel镜像为PE格式,转化后的镜像为vmlinux.bin。 ``` @@ -77,6 +74,9 @@ ``` + 完成后,会在当前目录生成kernel镜像vmlinux.bin。 + + ​ ## 制作rootfs镜像 @@ -114,7 +114,6 @@ rootfs镜像是一种文件系统镜像,在StratoVirt启动时可以装载带 $ rm alpine-minirootfs-3.12.0-aarch64.tar.gz ``` - - 如果是x86_64处理器架构,参考命令如下: @@ -124,12 +123,11 @@ rootfs镜像是一种文件系统镜像,在StratoVirt启动时可以装载带 $ rm alpine-minirootfs-3.12.0-x86_64.tar.gz ``` - 5. 为ext4文件镜像制作一个简单的/sbin/init,参考命令如下: ``` - $ cat > sbin/init < sbin/init < ![](./figures/zh-cn_image_0218587436.png) > @@ -54,7 +54,6 @@ StratoVirt能够运行的最小配置为: $ rm [参数] [用户自定义socket文件路径] ``` - 2. 然后,运行cmdline命令。 @@ -62,7 +61,6 @@ StratoVirt能够运行的最小配置为: $ /path/to/stratovirt -[参数1] [参数选项] -[参数2] [参数选项] ... ``` - **参数说明** @@ -100,7 +98,6 @@ cmdline命令行配置参数请参见下表: $ rm -f /tmp/stratovirt.socket ``` - 2. 运行StratoVirt。 diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP1.png b/docs/zh/docs/Virtualization/figures/CertEnrollP1.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP1.png rename to docs/zh/docs/Virtualization/figures/CertEnrollP1.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP2.png b/docs/zh/docs/Virtualization/figures/CertEnrollP2.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP2.png rename to docs/zh/docs/Virtualization/figures/CertEnrollP2.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP3.png b/docs/zh/docs/Virtualization/figures/CertEnrollP3.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP3.png rename to docs/zh/docs/Virtualization/figures/CertEnrollP3.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP4.png b/docs/zh/docs/Virtualization/figures/CertEnrollP4.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP4.png rename to docs/zh/docs/Virtualization/figures/CertEnrollP4.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP5.png b/docs/zh/docs/Virtualization/figures/CertEnrollP5.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP5.png rename to docs/zh/docs/Virtualization/figures/CertEnrollP5.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP6.png b/docs/zh/docs/Virtualization/figures/CertEnrollP6.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP6.png rename to docs/zh/docs/Virtualization/figures/CertEnrollP6.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP7.png b/docs/zh/docs/Virtualization/figures/CertEnrollP7.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP7.png rename to docs/zh/docs/Virtualization/figures/CertEnrollP7.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP8.png b/docs/zh/docs/Virtualization/figures/CertEnrollP8.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/CertEnrollP8.png rename to docs/zh/docs/Virtualization/figures/CertEnrollP8.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/OSBootFlow.png b/docs/zh/docs/Virtualization/figures/OSBootFlow.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/OSBootFlow.png rename to docs/zh/docs/Virtualization/figures/OSBootFlow.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/SecureBootFlow.png b/docs/zh/docs/Virtualization/figures/SecureBootFlow.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/SecureBootFlow.png rename to docs/zh/docs/Virtualization/figures/SecureBootFlow.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/kvm-architecture.png b/docs/zh/docs/Virtualization/figures/kvm-architecture.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/kvm-architecture.png rename to docs/zh/docs/Virtualization/figures/kvm-architecture.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/status-transition-diagram.png b/docs/zh/docs/Virtualization/figures/status-transition-diagram.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/status-transition-diagram.png rename to docs/zh/docs/Virtualization/figures/status-transition-diagram.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/virtual-network-structure.png b/docs/zh/docs/Virtualization/figures/virtual-network-structure.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/virtual-network-structure.png rename to docs/zh/docs/Virtualization/figures/virtual-network-structure.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/virtualized-architecture.png b/docs/zh/docs/Virtualization/figures/virtualized-architecture.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/virtualized-architecture.png rename to docs/zh/docs/Virtualization/figures/virtualized-architecture.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/zh-cn_image_0218587435.png b/docs/zh/docs/Virtualization/figures/zh-cn_image_0218587435.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/zh-cn_image_0218587435.png rename to docs/zh/docs/Virtualization/figures/zh-cn_image_0218587435.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/figures/zh-cn_image_0218587436.png b/docs/zh/docs/Virtualization/figures/zh-cn_image_0218587436.png similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/figures/zh-cn_image_0218587436.png rename to docs/zh/docs/Virtualization/figures/zh-cn_image_0218587436.png diff --git a/docs/zh/docs/20.09/docs/Virtualization/public_sys-resources/icon-caution.gif b/docs/zh/docs/Virtualization/public_sys-resources/icon-caution.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/public_sys-resources/icon-caution.gif rename to docs/zh/docs/Virtualization/public_sys-resources/icon-caution.gif diff --git a/docs/zh/docs/20.09/docs/Virtualization/public_sys-resources/icon-danger.gif b/docs/zh/docs/Virtualization/public_sys-resources/icon-danger.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/public_sys-resources/icon-danger.gif rename to docs/zh/docs/Virtualization/public_sys-resources/icon-danger.gif diff --git a/docs/zh/docs/20.09/docs/Virtualization/public_sys-resources/icon-note.gif b/docs/zh/docs/Virtualization/public_sys-resources/icon-note.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/public_sys-resources/icon-note.gif rename to docs/zh/docs/Virtualization/public_sys-resources/icon-note.gif diff --git a/docs/zh/docs/20.09/docs/Virtualization/public_sys-resources/icon-notice.gif b/docs/zh/docs/Virtualization/public_sys-resources/icon-notice.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/public_sys-resources/icon-notice.gif rename to docs/zh/docs/Virtualization/public_sys-resources/icon-notice.gif diff --git a/docs/zh/docs/20.09/docs/Virtualization/public_sys-resources/icon-tip.gif b/docs/zh/docs/Virtualization/public_sys-resources/icon-tip.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/public_sys-resources/icon-tip.gif rename to docs/zh/docs/Virtualization/public_sys-resources/icon-tip.gif diff --git a/docs/zh/docs/20.09/docs/Virtualization/public_sys-resources/icon-warning.gif b/docs/zh/docs/Virtualization/public_sys-resources/icon-warning.gif similarity index 100% rename from docs/zh/docs/20.09/docs/Virtualization/public_sys-resources/icon-warning.gif rename to docs/zh/docs/Virtualization/public_sys-resources/icon-warning.gif diff --git a/docs/zh/docs/20.09/docs/Virtualization/virtualization.md b/docs/zh/docs/Virtualization/virtualization.md similarity index 88% rename from docs/zh/docs/20.09/docs/Virtualization/virtualization.md rename to docs/zh/docs/Virtualization/virtualization.md index 936a54e96cdab99468bf904bb7fd53e74d1c2fc3..5f142177dc7c72662e9bfce0c105c4ef9a83ec22 100644 --- a/docs/zh/docs/20.09/docs/Virtualization/virtualization.md +++ b/docs/zh/docs/Virtualization/virtualization.md @@ -1 +1,3 @@ +# 虚拟化用户指南 + 本文档给出虚拟化介绍,并给出基于openEuler的虚拟化安装方法以及如何使用虚拟化,让用户了解虚拟化,并指导用户和管理员安装和使用虚拟化。 \ No newline at end of file diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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" similarity index 100% rename from "docs/zh/docs/20.09/docs/Virtualization/\345\267\245\345\205\267\344\275\277\347\224\250\346\214\207\345\215\227.md" rename to "docs/zh/docs/Virtualization/\345\267\245\345\205\267\344\275\277\347\224\250\346\214\207\345\215\227.md" diff --git "a/docs/zh/docs/20.09/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 97% rename from "docs/zh/docs/20.09/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 dd971d0509231d4d0f8bce3adb101f7a8be11977..b9cae3f2169252537b587265b3e24ceffe386473 100644 --- "a/docs/zh/docs/20.09/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" @@ -1,23 +1,6 @@ # 最佳实践 - - -- [最佳实践](#最佳实践) - - [性能最佳实践](#性能最佳实践) - - [halt-polling](#halt-polling) - - [IOThread配置](#IOThread配置) - - [裸设备映射](#裸设备映射) - - [kworker隔离绑定](#kworker隔离绑定) - - [内存大页](#内存大页) - - [PV-qspinlock](#PV-qspinlock) - - [Guest-Idle-Haltpoll](#Guest-Idle-Haltpoll) - - [安全最佳实践](#安全最佳实践) - - [Libvirt鉴权](#Libvirt鉴权) - - [qemu-ga](#qemu-ga) - - [sVirt保护](#sVirt保护) - - [虚拟机可信启动](#虚拟机可信启动) - - +[[toc]] ## 性能最佳实践 @@ -296,7 +279,7 @@ Guest-Idle-Haltpoll特性默认关闭,这里给出开启该特性的操作指 - 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_为对应的配置文件。 + 可以使用root权限,参考如下命令修改参数值。其中 _value_ 表示需要设置的参数值, _configFile_ 为对应的配置文件。 ``` # echo value > /sys/module/haltpoll/parameters/configFile @@ -579,6 +562,8 @@ swtpm提供了一个可集成到虚拟化环境中的TPM仿真器(TPM1.2和TPM ... ``` + >![](public_sys-resources/icon-note.gif) **说明:** + >目前,openEuler 20.09 版本 AArch64 架构上的虚拟机可信启动不支持 ACPI 特性,所以虚拟机请勿配置ACPI特性,否则启动虚拟机后无法识别vTPM设备。 2. 创建虚拟机。 diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 96% rename from "docs/zh/docs/20.09/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 515df8d8a7cd5e4ab30a073ecfd2692879487413..5663c73a3bd69cf6632395121538d99cf06da1ca 100644 --- "a/docs/zh/docs/20.09/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,28 +1,16 @@ # 管理系统资源 -使用libvirt命令来管理虚拟机的系统资源,如vCPU、虚拟内存资源等。 +[[toc]] + +## 总体说明 + +openEuler 虚拟化使用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) - - [内存热插](#内存热插) - - - - ## 管理虚拟CPU diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/docs/Virtualization/\347\256\241\347\220\206\350\231\232\346\213\237\346\234\272\345\217\257\347\273\264\346\212\244\346\200\247.md" "b/docs/zh/docs/Virtualization/\347\256\241\347\220\206\350\231\232\346\213\237\346\234\272\345\217\257\347\273\264\346\212\244\346\200\247.md" similarity index 100% rename from "docs/zh/docs/20.09/docs/Virtualization/\347\256\241\347\220\206\350\231\232\346\213\237\346\234\272\345\217\257\347\273\264\346\212\244\346\200\247.md" rename to "docs/zh/docs/Virtualization/\347\256\241\347\220\206\350\231\232\346\213\237\346\234\272\345\217\257\347\273\264\346\212\244\346\200\247.md" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 100% rename from "docs/zh/docs/20.09/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" diff --git "a/docs/zh/docs/20.09/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 "docs/zh/docs/20.09/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/path/path.json b/docs/zh/docs/path/path.json deleted file mode 100644 index 4f70da00622558a7cbe0fd39050001e0441acd96..0000000000000000000000000000000000000000 --- a/docs/zh/docs/path/path.json +++ /dev/null @@ -1,138 +0,0 @@ -[ - { - "value": "1.0_Base", - "name": "1.0 BASE", - "docs": [ - { - "title": "了解", - "doc": [ - { - "img": "/img/docs/docs-releasenotes.svg", - "path": "/docs/Releasenotes/release_notes.html", - "name": "发行说明" - } - ] - }, - { - "title": "安装", - "doc": [ - { - "img": "/img/docs/docs-installation.svg", - "path": "/docs/Installation/installation.html", - "name": "安装指南" - } - ] - }, - { - "title": "管理", - "doc": [ - { - "img": "/img/docs/docs-administration.svg", - "path": "/docs/Administration/administration.html", - "name": "管理员指南" - } - ] - }, - { - "title": "使用", - "doc": [ - { - "img": "/img/docs/docs-user.svg", - "path": "/docs/Virtualization/virtualization.html", - "name": "虚拟化用户指南" - }, - { - "img": "/img/docs/docs-user.svg", - "path": "/docs/Container/container.html", - "name": "容器用户指南" - }, - { - "img": "/img/docs/docs-user.svg", - "path": "/docs/SecHarden/secHarden.html", - "name": "安全加固" - } - ] - }, - { - "title": "开发", - "doc": [ - { - "img":"/img/docs/docs-exploit.svg", - "name": "应用开发指南" - } - ] - } - ] - }, - { - "value": "20.03_LTS", - "name": "20.03 LTS", - "docs": [ - { - "title": "了解", - "doc": [ - { - "img": "/img/docs/docs-releasenotes.svg", - "path": "/docs/Releasenotes/release_notes.html", - "name": "发行说明" - } - ] - }, - { - "title": "安装", - "doc": [ - { - "img": "/img/docs/docs-quickstart.svg", - "path": "/docs/Quickstart/quick-start.html", - "name": "快速入门" - }, - { - "img": "/img/docs/docs-installation.svg", - "path": "/docs/Installation/installation.html", - "name": "安装指南" - } - ] - }, - { - "title": "管理", - "doc": [ - { - "img": "/img/docs/docs-administration.svg", - "path": "/docs/Administration/administration.html", - "name": "管理员指南" - } - ] - }, - { - "title": "使用", - "doc": [ - { - "img": "/img/docs/docs-user.svg", - "path": "/docs/Virtualization/virtualization.html", - "name": "虚拟化用户指南" - }, - { - "img": "/img/docs/docs-user.svg", - "path": "/docs/Container/container.html", - "name": "容器用户指南" - }, - { - "img": "/img/docs/docs-user.svg", - "path": "/docs/A-Tune/A-Tune.html", - "name": "A-Tune用户指南" - } - ] - }, - { - "title": "开发", - "doc": [ - { - "img": "/img/docs/docs-application.svg", - "path": "/docs/ApplicationDev/application-development.html", - "name": "应用开发指南" - } - ] - } - ] - } -] \ No newline at end of file diff --git a/docs/zh/docs/20.09/docs/userguide/images/Maintainer.jpg b/docs/zh/docs/userguide/images/Maintainer.jpg similarity index 100% rename from docs/zh/docs/20.09/docs/userguide/images/Maintainer.jpg rename to docs/zh/docs/userguide/images/Maintainer.jpg diff --git a/docs/zh/docs/20.09/docs/userguide/images/PatchTracking.jpg b/docs/zh/docs/userguide/images/PatchTracking.jpg similarity index 100% rename from docs/zh/docs/20.09/docs/userguide/images/PatchTracking.jpg rename to docs/zh/docs/userguide/images/PatchTracking.jpg diff --git a/docs/zh/docs/userguide/images/pkgship_outline.png b/docs/zh/docs/userguide/images/pkgship_outline.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe1247c22c6b12a83aa01a5812c444f1667b952 Binary files /dev/null and b/docs/zh/docs/userguide/images/pkgship_outline.png differ diff --git "a/docs/zh/docs/20.09/docs/userguide/\346\246\202\350\277\260.md" b/docs/zh/docs/userguide/overview.md similarity index 77% rename from "docs/zh/docs/20.09/docs/userguide/\346\246\202\350\277\260.md" rename to docs/zh/docs/userguide/overview.md index 74490c61e7f085f49758d903630e79fcb1949a00..b3944e8c3520ebd0f2f9719f1f031c80060536de 100644 --- "a/docs/zh/docs/20.09/docs/userguide/\346\246\202\350\277\260.md" +++ b/docs/zh/docs/userguide/overview.md @@ -1,2 +1,3 @@ -本文主要介绍在openEuler 发行版本过程中使用到的工具集,主要包含工具的介绍,安装以及使用等方面内容。 +# 工具集用户指南 +本文主要介绍在openEuler 发行版本过程中使用到的工具集,主要包含工具的介绍,安装以及使用等方面内容。 \ No newline at end of file diff --git a/docs/zh/docs/20.09/docs/userguide/patch-tracking.md b/docs/zh/docs/userguide/patch-tracking.md similarity index 100% rename from docs/zh/docs/20.09/docs/userguide/patch-tracking.md rename to docs/zh/docs/userguide/patch-tracking.md diff --git a/docs/zh/docs/20.09/docs/userguide/pkgship.md b/docs/zh/docs/userguide/pkgship.md similarity index 100% rename from docs/zh/docs/20.09/docs/userguide/pkgship.md rename to docs/zh/docs/userguide/pkgship.md diff --git a/docs/zh/documentation/README.md b/docs/zh/documentation/README.md deleted file mode 100644 index 032ef7ef2e950bb2c56ae61a4b7854d665ddebbf..0000000000000000000000000000000000000000 --- a/docs/zh/documentation/README.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "文档" ---- - - - \ No newline at end of file diff --git a/docs/zh/docs/20.09/menu/menu.json b/docs/zh/menu/menu.json similarity index 97% rename from docs/zh/docs/20.09/menu/menu.json rename to docs/zh/menu/menu.json index 8764b345574ff336d89abb27b9fa587e8556f029..00d6a0d98cf5ebc16a194d89daacc90fa69666cc 100644 --- a/docs/zh/docs/20.09/menu/menu.json +++ b/docs/zh/menu/menu.json @@ -93,6 +93,11 @@ "path": "docs/Installation/使用kickstart自动化安装", "children": [] }, + { + "label": "安装UKUI", + "path": "docs/Installation/安装UKUI", + "children": [] + }, { "label": "FAQ", "path": "docs/Installation/FAQ", @@ -344,8 +349,8 @@ ] }, { - "label": "StratoVirt虚拟化用户指南", - "path": "docs/StratoVirt/StratoVirt虚拟化用户指南", + "label": "StratoVirt用户指南", + "path": "docs/StratoVirt/StratoVirtGuide", "children": [ { "label": "StratoVirt介绍", @@ -373,8 +378,8 @@ "children": [] }, { - "label": "管理虚拟机资源管理", - "path": "docs/StratoVirt/管理虚拟机资源管理", + "label": "管理虚拟机资源", + "path": "docs/StratoVirt/管理虚拟机资源", "children": [] }, { @@ -461,6 +466,11 @@ "label": "支持OCI hooks", "path": "docs/Container/支持OCI-hooks", "children": [] + }, + { + "label": "本地卷管理", + "path": "docs/Container/本地卷管理", + "children": [] } ] }, @@ -712,11 +722,11 @@ ] }, { - "label": "openEuler工具集用户指南", - "path": "docs/userguide/概述", + "label": "工具集用户指南", + "path": "docs/userguide/overview", "children": [ { - "label": "补丁工具", + "label": "patch-tracking", "path": "docs/userguide/patch-tracking", "children": [] }, @@ -727,4 +737,4 @@ } ] } - ] \ No newline at end of file + ] diff --git a/menu_en/index.md b/menu_en/index.md deleted file mode 100644 index f030c1ebea50a84f95b4170397d138b92986a69c..0000000000000000000000000000000000000000 --- a/menu_en/index.md +++ /dev/null @@ -1,159 +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 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.md" >}}) - - [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" >}}) - - [Trusted Computing](./{{< relref "./docs/Administration/Trusted Computing.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" >}}) - - [VM Maintainability Management](./{{< relref "./docs/Virtualization/vm-maintainability-management.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" >}}) - - - [Image Building](./{{< relref "./docs/Container/isula-build.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" >}}) - - [FAQ](./{{< relref "./docs/ApplicationDev/FAQ.md" >}}) - - -- [openEuler Toolset User Guide](./{{< relref "./docs/userguide/overview.md" >}}) - - [patch-tracking](./{{< relref "./docs/userguide/patch-tracking.md" >}}) - - [pkgship](./{{< relref "./docs/userguide/pkgship.md" >}}) diff --git a/menu_zh/index.md b/menu_zh/index.md deleted file mode 100644 index d84312c60194bc44af396151992391d4de2c9ee1..0000000000000000000000000000000000000000 --- a/menu_zh/index.md +++ /dev/null @@ -1,161 +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" >}}) - - [可信计算](./{{< 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" >}}) - - [工具使用指南](./{{< relref "./docs/Virtualization/工具使用指南.md" >}}) - - [附录](./{{< relref "./docs/Virtualization/附录.md" >}}) -- [StratoVirt虚拟化用户指南](./{{< relref "./docs/StratoVirt/StratoVirt虚拟化用户指南.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" >}}) - - [管理虚拟机资源管理](./{{< relref "./docs/StratoVirt/管理虚拟机资源管理.md" >}}) - - [对接iSula安全容器](./{{< relref "./docs/StratoVirt/对接iSula安全容器.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" >}}) - - [容器镜像构建](./{{< 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" >}}) - - [FAQ](./{{< relref "./docs/ApplicationDev/FAQ.md" >}} - -- [openEuler工具集用户指南](./{{< relref "./docs/userguide/概述.md" >}}) - - [补丁工具](./{{< relref "./docs/userguide/patch-tracking.md" >}}) - - [pkgship](./{{< relref "./docs/userguide/pkgship.md" >}}) diff --git a/package.json b/package.json index 4e85cf8d689964a53fa8621a3ed53526c8fd56b8..909a6f70df873bedaef61403ce6b5ec24ad3dd5e 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,6 @@ "author": "", "license": "", "dependencies": { - "element-ui": "^2.13.2", - "less-loader": "^6.2.0", "vuepress": "^1.5.2" } }