提交 93510b83 编写于 作者: Y Yujia Chen

Merge branch 'master' of https://gitee.com/openeuler/website into website0506

......@@ -496,7 +496,7 @@ paginate = 10
[[languages.zh.params.card]]
image = "/img/2.svg"
title = "快速入门"
url = "/zh/docs/20.03_LTS/docs/Quickstart/%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8.html"
url = "/zh/docs/20.03_LTS/docs/Quickstart/quick-start.html"
description = "如果您想要尝试使用openEuler,这里提供教程助您快速入门。"
weight = 2
......
......@@ -35,8 +35,7 @@ Welcome to openEuler!
- [Community Security Issue Feedback](#Community_Security_Issue_Feedback)
- [Participating in Community Activities](#Participating_in_Community_Activities)
- [Communication Methods in Community](#Communication_Methods_in_Community)
- [Community News and Events](#Community_News_and_Events)
- [Community Gatherings](#Community_Gatherings)
- [Community Events](#Community_Events)
- [Feedback](#Feedback)
......@@ -96,7 +95,7 @@ Find a SIG you are interested in so that you can raise questions in the right pl
If you cannot locate the SIG that you are interested in using either of the preceding methods, send a help email to community@openEuler.org. You are advised to use [Question of Development Process] as the title in the email and write down features of the SIG or project you are looking for. We will help you.
If you cannot locate the SIG that you are interested in using either of the preceding methods, send a help email to <community@openEuler.org>. You are advised to use [Question of Development Process] as the title in the email and write down features of the SIG or project you are looking for. We will help you.
......@@ -104,7 +103,7 @@ Find a SIG you are interested in so that you can raise questions in the right pl
### Assigning an Issue to Yourself <a name="Assigning_an_Issue_to_Yourself"></a>
- **Finding an issue list**: Click **Issues** to find the SIG issue list (for example, the issue list address of the community team is https://gitee.com/openEuler/community/issues).
- **Finding an issue list**: Click **Issues** to find the SIG issue list (for example, the issue list address of the community team is <https://gitee.com/openEuler/community/issues>).
- **Assigning an issue**: If you want to process one of the issues, you can assign it to yourself. Enter `/assign` or `/assign @yourself` in the comment box. The robot will assign the issue to you and your name will be displayed in the owner list.
- **Discussing an issue**: Participants communicate and discuss on each issue page. You can leave your opinions in the comment box.
......@@ -143,7 +142,7 @@ If you want to download, modify, build, and validate the software packages provi
The coding language, development environment, and coding conventions used by projects may vary in each SIG. If you want to know and participate in the code contribution, find the contributor guide provided by the project for developers. This guide is generally provided as the `CONTRIBUTING.md` file on the SIG home page, alternatively, you can find it in the `README.md` file of the project. (For details about how to find the repository of the project, see [Finding Your Interests](#Finding_Your_Interests).)
In addition to these files, the SIG may provide other guidance information which is located in the specific community directory of SIG or project. If you do not find any related information or have any questions, submit an issue in the SIG or send the question to the mail list of the SIG to which the project belongs. If you do not receive any response for a long time, contact community@openeuler.org.
In addition to these files, the SIG may provide other guidance information which is located in the specific community directory of SIG or project. If you do not find any related information or have any questions, submit an issue in the SIG or send the question to the mail list of the SIG to which the project belongs. If you do not receive any response for a long time, contact <community@openeuler.org>.
......@@ -178,7 +177,7 @@ openEuler is an open community. We hope that all participants in the community a
**For reviewers**, it is strongly recommended that you surpass yourselves, respect each other, and promote collaboration in accordance with the [Code of Conduct](https://gitee.com/openeuler/community/blob/master/code-of-conduct.md). [The Gentle Art Of Patch Review](https://sage.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/) puts forward a series of review focuses, explaining that the review is to promote the participation of new contributors and prevent the contributors from being overwhelmed by subtle errors at the beginning. Therefore, when you review PRs, focus on the following:
**For reviewers**, it is strongly recommended that you surpass yourselves, respect each other, and promote collaboration in accordance with the [Code of Conduct](https://gitee.com/openeuler/community/blob/master/code-of-conduct.md). ["The Gentle Art Of Patch Review"](https://sage.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/) puts forward a series of review focuses, explaining that the review is to promote the participation of new contributors and prevent the contributors from being overwhelmed by subtle errors at the beginning. Therefore, when you review PRs, focus on the following:
+ Is the idea of the contribution reasonable?
+ Whether the contribution architecture is correct?
......@@ -190,7 +189,7 @@ Note: If your PR does not draw enough attention, you can seek help through the S
### Test <a name="Test"></a>
TBD
### Packaging Community Components <a name="Packaging_Community_Components"></a>
......@@ -220,14 +219,8 @@ The openEuler community supports communication through mail lists, IRC, and vide
### Community News and Events <a name="Community_News_and_Events"></a>
The information about openEuler community and technical communication meetings and other community events can be found on the [openEuler News](https://openeuler.org/en/news.html) page.
### Community Gatherings <a name="Community_Gatherings"></a>
### Community Events <a name="Community_Events"></a>
The community holds developer conferences every year. You can contact us by sending emails to <dev@openEuler.org> or sending messages to [https://openeuler.org](https://openeuler.org). Join us!
......@@ -235,4 +228,4 @@ The community holds developer conferences every year. You can contact us by send
# Feedback <a name="Feedback"></a>
If you have any questions about the developer guide or the development process, please feel free to contact us (community@openEuler.org), use [Question of Development Process] as the title, and write down your questions and doubts in the email. The openEuler community operation team will try the best to answer your questions.
\ No newline at end of file
If you have any questions about the developer guide or the development process, please feel free to contact us (<community@openEuler.org>), use [Question of Development Process] as the title, and write down your questions and doubts in the email. The openEuler community operation team will try the best to answer your questions.
\ No newline at end of file
......@@ -3,140 +3,108 @@ title = "Security"
id = "security"
+++
<h4 id="itm1">Submit a CVE Issue</h4>
# Vulnerability Response
The openEuler community attaches great importance to the community version security. The security committee of openEuler community is responsible for receiving, investigating, and disclosing security vulnerabilities related to the community. Researchers and industry organizations working on vulnerability prevention are encouraged to report the potential security vulnerabilities in the openEuler community to the security committee. The reported security issues or vulnerabilities will be quickly analyzed and resolved by the committee.
openEuler's security system scans CVE issues and submits CVE issues to the security committee of openEuler community. The issue title of a CVE issue must start with a CVE ID, followed by a brief description of the CVE issue, for example,
## Versions Supported
The vulnerability response process supports the LTS distribution of the openEuler community and its branch versions.
**CVE-2019-11255:** CSI volume snapshot, cloning and resizing features can result in unauthorized volume data access or mutation
## Vulnerability Handling Process
Each security vulnerability is tracked and handled by a designated person. This person is a member of the security committee of openEuler community, who is responsible for tracking, resolving, and disclosing the vulnerability. The following flowchart shows the E2E vulnerability handling process.
<h4 id="itm2">Security Group Distributes CVE Issues</h4>
<img src="./security/procedure.png" width="100%" style="max-width:1079px" />
## Vulnerability Reporting
We hope that you can report the potential vulnerability of an openEuler product to the openEuler community and work with us to resolve and disclose the vulnerability.
The security Group will distribute the CVE issues to the related repos. CVE issues contain the following information:
+ Detailed description of the vulnerability (the following information is provided by the CVE scanning tool)
### Reporting Channel
You can send the potential security vulnerabilities of an openEuler product to the e-mail of the openEuler security team (<securities@openeuler.org>). Given that the vulnerability information is sensitive, you are advised to use the <a href="security/public_key_securities.asc" download>public GPG key</a> of the security team to encrypt the e-mail.
The information of the security team members is described as follows:
+ [CVEID]: Including the corresponding CVE link
+ Liu Jinggang [@ liujinggang09], <liujingang09@huawei.com>, <a href="security/public_key_liujingang.asc" download>public GPG key</a>
+ Yang Li [@yangli69393], <runningforever@gmail.com>
+ Yan Xiaobing [@yanxiaobing2020], <yanxiaobing@huawei.com>, <a href="security/public_key_yanxiaobing.asc" download>public GPG key</a>
+ Zhu Jianwei @ zhujianwei001, <zhujianwei7@huawei.com>, <a href="security/public_key_zhujianwei.asc" download>public GPG key</a>
+ [PRODUCT]: Information provided by CVE, including the vendor, developer, or project, and the name of the actual software or hardware that has the vulnerability
### Reporting Content
To quickly identify and verify suspected vulnerabilities, the reporting e-mail should include but is not limited to the following content:
+ [VERSION]: Including version, release date, or any discrepancies used by vendors, developers, or projects to distinguish release versions. It can also be described with a specific version number, version range, or "all versions before / after version number or date".
+ Basic information: including the modules affected by the vulnerability, triggering conditions of the vulnerability, and impact on the system after the vulnerability is exploited.
+ Technical details: including system configuration, fault locating method, description of exploit, POC, and method and procedure of fault reproduction.
+ Suggestions on resolving the vulnerability.
+ Organization and contact information of the vulnerability reporter.
+ Reporter's possible plan for vulnerability disclosure.
+ [PROBLEMTYPE]:
### E-mail Response
We will respond to the reporting of suspected security vulnerabilities through e-mail within 48 hours and keep the reporter informed of the vulnerability handling progress.
+ [REFERENCES]: related URL and reference descriptions
+ [DESCRIPTION]: Detailed description of the vulnerability, including description of the type of attack using the vulnerability; impact of the vulnerability; software components in the software product affected by the vulnerability, any attack vector that can exploit this vulnerability
## Vulnerability Severity Assessment
The Common Vulnerability Scoring System (CYSS) is widely used in the industry to assess vulnerability severity. Currently openEuler is using CVSS v3 to assess vulnerabilities, and such assessment focuses on the impact caused by the vulnerability in a preset attack scenario. The vulnerability severity assessment covers factors such as the exploit difficulty and the impact of vulnerability exploit on the confidentiality, integrity, and availability of the product. A score will be given after these factors are assessed.
+ [ASSIGNINGCNA]: assign the name of CNA
### Assessment Criteria
The CVSS v3 adopted by the openEuler community assesses the impact of a vulnerability based on the following variables:
+ Attack vector (AV): indicating the remoteness of an attack and how to exploit this vulnerability.
+ Attack complexity (AC): describing the difficulty in executing an attack and the conditions for a successful attack.
+ User interaction (UI): determining whether the attack requires users' participation.
+ Permission required (PR): recording the level of user authorization required for a successful attack.
+ Scope (S): determining whether an attack can affect components of different permission levels.
+ Confidentiality (C): measuring the impact of unauthorized information disclosure.
+ Integrity (I): measuring the impact of information tampering.
+ Availability (A): measuring the impact on data access or services for users affected by the vulnerability.
<h4 id="itm3">Handle CVE Issues</h4>
### Assessment Principles
+ The severity of a vulnerability is assessed, not the risk of the vulnerability.
+ The assessment must be based on an attack scenario where the system confidentiality, integrity, and availability are affected by a successful attack.
+ When a security vulnerability has multiple attack scenarios, the attack scenario with the highest CVSS score (that is, with the greatest impact) shall prevail in the assessment.
+ When a library that is embedded or invoked has vulnerabilities, the assessment on its vulnerability severity should be based on an attack scenario, which is determined by the usage of the library in the product.
+ When a security defect does not trigger or affect the confidentiality/integrity/availability (CIA), the CVSS score is 0.
Maintainer identifies and distributes CVE issues. Solutions to CVE problems can be provided by contributors and submitted for review by the Maintainer or Committer. When submitting, please associate with CVE ISSUE and provide complete information in Issues:
### Assessment Procedure
Perform this procedure to assess a vulnerability:
- Is it a loophole? (**Am I vulnerable?**):
+ Describe the scenarios of the problem (including software and hardware and interaction scenarios)
+ Impact and scope of impact
+ How to confirm whether the version used contains the issue
+ Set a possible attack scenario and score based on this attack scenario.
+ Identify vulnerable components and affected components.
+ Select the value of the basic assessment indicator, and perform the vulnerability impact assessment based on the exploitable indicators (attack vector, attack complexity, permission required, user interaction, and scope) and affected indicators (confidentiality, integrity, and availability).
+ How to mitigate the impact of the vulnerability (**How do I mitigate the vulnerability?**)
+ Short-term mitigation plan
+ Long-term mitigation plan: such as patch installation address, installation method, etc.
  
+ Rating for this vulnerability
<table board="2" class="table table-bordered table-striped">
<caption><b>CVSS Scoring Sheet</b></caption>
### Severity Rating
<table board="2" class="table table-bordered table-striped">
<thead>
<tr>
<th align="left" style="width:40px">Scoring Item</th>
<th align="left" style="width:40px">openEuler</th>
<th align="left" style="width:40px">NVD</th>
<th align="left" style="width:40px">Severity Rating</th>
<th align="left" style="width:40px">Score</th>
</tr>
<tr>
<td align="left">CVSS v3 Base Score</td>
<td>7.3</td>
<td>7.8</td>
<td align="left">Critical</td>
<td>9.0 - 10.0</td>
</tr>
<tr>
<td align="left">Attack Vector</td>
<td>Network</td>
<td>Local</td>
<td align="left">High</td>
<td>7.0 - 8.9</td>
</tr>
<tr>
<td align="left">Attack complexity</td>
<td>Low</td>
<td>7.8</td>
<td align="left">Medium</td>
<td>4.0 - 6.9</td>
</tr>
<tr>
<td align="left">Privileges Required</td>
<td>None</td>
<td>7.8</td>
<td align="left">Low</td>
<td>0.1 - 3.9</td>
</tr>
<tr>
<td align="left">User Interaction</td>
<td>Low</td>
<td>Required</td>
</tr>
<tr>
<td align="left">Scope</td>
<td>Unchanged</td>
<td>Unchanged</td>
</tr>
<tr>
<td align="left">Confidentiality</td>
<td>Low</td>
<td>High</td>
</tr>
<tr>
<td align="left">Integrity Impact</td>
<td>Low</td>
<td>High</td>
</tr>
<tr>
<td align="left">Availability Impact</td>
<td>Low</td>
<td>High</td>
</tr>
</thead>
<tbody>
</tbody>
<td align="left">None</td>
<td>0.0</td>
</tr>
</thead>
</table>
+ Detailed description of the vulnerability (the following information is provided by the CVE scanning tool)
### Scoring Difference Between National Vulnerability Database (NVD) and CVSS
The CVSS scoring is determined by a series of factors, including the version number of an affected component and how it is provided and used, as well as the platform and software compilation mode. The NVD scoring takes into account all scenarios where vulnerabilities are exploited. This assessment mode is not suitable for the open source openEuler, which is built based on the upstream community and mainly applies to server scenarios. As a result, openEuler will score all common vulnerabilities and exposures (CVEs) based on their specific impact. For the same CVE, the scoring by openEuler may be different from that by NVD.
+ [CVEID]: Must include the corresponding CVE link
+ [PRODUCT]: Information provided by CVE, including the name of the vendor, developer, or project, and the name of the actual software or hardware that has the vulnerability
  
+ [VERSION]: Includes version, release date, or any discrepancies used by vendors, developers, or projects to distinguish release versions. It can also be described with a specific version number, version range, or "all versions before / after version number or date".
+ [PROBLEMTYPE]:
+ [REFERENCES]: related URL links and reference descriptions
+ [DESCRIPTION]: Detailed description of the vulnerability, including: description of the type of attack using the vulnerability; impact of the vulnerability; software components in the software product affected by the vulnerability; any attack vector that can exploit this vulnerability
  
+ [ASSIGNINGCNA]: assign the name of CNA
<h4 id="itm4">CVE Issues Management Policy</h4>
+ **Fast Way**: The openEuler rating is a serious security issue. The openEuler security team will start the fast track to provide solutions to the LTS versions involved and within the life cycle.
  
+ **Common Integration**: For security issues that are important and affect the following, you can choose the following strategies based on the severity and scope of the problem:
+ There are security problems in the official version. Depending on the problem, the selection will be affected:
+ Strategy 1: Patches are released to all LTS & community versions involved and within the life cycle
+ Strategy 2: The patch is released to the latest LTS version & community version
+ Strategy 3: Patches are incorporated into the currently developed LTS version & community version (such issues will not issue a security bulletin)
+ Security issues that have not flown into the official version: handled as a development version of ISSUE and incorporated into the current development version. Such issues do not require a security announcement;
<h4 id="itm5">CVE Issues Proceure</h4>
<img src="./security/procedure.png" width="100%" style="max-width:1079px" />
## Vulnerability Disclosure
For the security of openEuler users, the openEuler community will not discuss, confirm, or disclose the security issues of an openEuler product until the vulnerability is investigated and resolved and the security announcement is issued. After a security vulnerability is resolved, the openEuler community will release a security announcement, with information including the technical details, CVE identifier, CVSS security score, and severity level of the vulnerability, as well as the affected and fixed versions. You can subscribe to security announcements of the openEuler community on the <a href="https://mailweb.openeuler.org/postorius/lists/sa-announce.openeuler.org/" download>sa-announce</a>.
content/en/security/procedure.png

39.0 KB | W: | H:

content/en/security/procedure.png

93.3 KB | W: | H:

content/en/security/procedure.png
content/en/security/procedure.png
content/en/security/procedure.png
content/en/security/procedure.png
  • 2-up
  • Swipe
  • Onion skin
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: Keybase OpenPGP v1.0.0
Comment: https://keybase.io/crypto
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
NauofdI761JMh8XGnOWVOyqeeFA=
=Kjb+
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: Keybase OpenPGP v1.0.0
Comment: https://keybase.io/crypto
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
=pZjL
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: Keybase OpenPGP v1.0.0
Comment: https://keybase.io/crypto
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
vC56bg==
=Qk+F
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: Keybase OpenPGP v1.0.0
Comment: https://keybase.io/crypto
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
VLpG
=k/Ok
-----END PGP PUBLIC KEY BLOCK-----
+++
title = "ARM上跑Mysql, 能行吗?"
date = "2020-04-23"
tags = ["Database", "Mysql", "arm64"]
archives = "2020-04"
author = "bzhaoopenstack"
summary = "本文介绍Mysql对于ARM平台的支持情况。"
+++
译者:[bzhaoopenstack](https://github.com/bzhaoopenstack)
作者: [Krunal Bauskar](https://github.com/mysqlonarm)
原文链接: https://mysqlonarm.github.io/Running-MySQL-on-ARM/
我相信在座的大多数都会有这个问题。事实上,在我开始主动开始#mysqlonarm 相关工作之前,我也有过同样的经历。在ARM上运行MySQL需要什么?真的有用吗?包依赖关系呢?它有什么样的表现?支持什么功能呢?社区支持这么玩吗?还有很多悬而未决的问题。。
让我们试着用简单的问答形式来回答这些问题。
#### Q: Mysql支持ARM架构吗?
A:支持,Mysql官方支持ARM。可以从mysql.com站点下载可用的软件包。
#### Q: 支持啥OS?
A: 目前支持RHEL-7 & 8/Oracle-Linux- 7 & 8,还没有发现发布其他OS的包。
#### Q: 我们能在ARM架构下从源代码在OS上(如ubuntu)构建Mysql吗?
A: 可以,能玩。我一直在源码构建二进制包,使用的是当前mysql的release tag mysql-8.0.19。同样也可以在CentOS上玩。这也意味着所有需要的包依赖性问题都得到了解决,或已经可用。
#### Q: ARM上的工具链可用吗?
A: 因为软件包是可用的,而且我能够从源代码构建它,所以默认的应用程序工具,如mysql shell/mysqladmin/mysqlslap/mysqldump/etc...,以及大量其他的默认程序都随二进制文件一起发布了。如果你关心某个特定的工具,告诉我,我会检查它们。现在,我尝试了一些我认为比较重要的工具,它们工作正常。
#### Q: MariaDB和Percona在ARM上是否支持各自的服务器规格?
A: MariaDB Community Server软件包(来自MariaDB公司)在ARM (CentOS7/Ubuntu-16.04/18.04)上可用,MariaDB服务器工具在ARM上暂未正式发布。 Percona尚未正式支持ARM ,但我能够从源代码构建它( MyRocks / TokuDB不可用)。
#### Q: 如果工具不可用。这能阻止我在ARM上尝试MySQL(或其衍生软件)吗?
A: 不会,因为大多数工具都是符合mysql标准的,不是所谓的强绑定特定平台。所以你当然既可以把它们安装在X86,同时安装在ARM上(除非工具还没有移植到ARM上)。
#### Q: 社区支持这么玩吗?
A: MySQL on ARM 已经有一段时间了。ARM、高通、华为等多家厂商积极贡献,Mysql社区发展迅速。在对Mysql ARM优化方面,社区呈现很大的兴趣,非常多的开发者想参与其中。挑战极具吸引力,然而最麻烦的是ARM硬件资源短缺。如果你有兴趣参与,和我聊聊(给我发一封电子邮件)。
#### Q: 看起来都还行。性能咋样?
A: 这是一个大话题,所以我会在未来几天内发布多个关于这个话题的博文,但把它在一定范围内的表现是可比的。另一方面,ARM实例提供更好的价格比。
#### Q:可以从哪里获取帮助?
由于软件包可以从MySQL官方下载,我假定他们的服务提供也应涵盖ARM。和MariaDB一样。当然,除了官方支持之外,还有普通团体和独立开发者。
#### Command to build MySQL on ARM
```
cmake .. -DWITH_NUMA=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<boost-dir> -DCMAKE_INSTALL_PREFIX=<dir-to-install>
make -j <num-of-cores>
```
因此,在ARM上构建Mysql不需要什么特殊的flag。(假设你已经安装了标准依赖). 它会默认使用"CMAKE_BUILD_TYPE=RelWithDebInfo"来编译。
## 结论
MySQL on ARM已为事实,并且得到了日益增长的生态系统/社区来支持。可以来试试。当你不考虑性能或功能时,它可以成为你节约成本这个大目标的必选项。
*如果你还有问题/疑问,请告诉我。我会尝试回答*
+++
title = "浅谈openEuler开源社区运营度量及分析"
date = "2020-05-06"
tags = ["社区运营", "度量"]
archives = "2020-05"
author = "Ivye"
summary = "浅谈openEuler开源社区运营度量及分析,属于系列博客的第一篇。"
+++
# 浅谈openEuler开源社区运营度量及分析
伴随openEuler社区的运转,如何评估开源社区运营状态以改进社区运营成为一个关键问题。那么,我们需要哪些指标、哪些数据并开展什么样的分析呢?经过一段时间的摸索,对于社区运营的目标、独立指标、度量可视化及数据分析有初步的思考和沉淀,本博客记录下来,欢迎大家一起探讨。
## 一、 度量的诉求
好的开源社区,应该是人们愿意使用、贡献、并主动宣传的人气社区,并且有完善的用户生态、贡献者生态、技术生态和伙伴生态。社区成员也会希望通过数据统计及分析,来帮助了解社区状态、识别运营诉求、开展运营改进,支撑社区更健康的发展。
## 二、 度量指标框架
带着对好的开源社区的理解及度量诉求,构想以终为始,围绕“人、组织、技术生态和商业”,辅以“项目运营健康度”为支撑,构建开源社区度量指标框架。
<img src="/zh/blog/ivye/2020-05-06-os-metrics-1-03.png" style="width:100%;">
## 三、 必要的基础数据定义
任何能够获取数据的地方,都可以收集并跟踪。但需要哪些数据?怎么定义?于是,围绕角色(初级用户、贡献者、Committer及Mentor),基于行为趋势,定义了相关的基础数据。
(说明,在进行指标梳理和定义时,参考了<https://github.com/chaoss>。)
<img src="/zh/blog/ivye/2020-05-06-os-metrics-1-01.png" style="width:100%;">
## 四、 第一期度量指标
我认为不同的项目、不同有阶段有其独特的健康度衡量,所需的指标及分析也会随项目的诉求而变化。
第一期列出了面向开发者从感知到贡献的一些指标,当前这仅仅是支撑后续深入分析的初始阶段。
<img src="/zh/blog/ivye/2020-05-06-os-metrics-1-02.png" style="width:100%;">
## 五、运营系统搭建
基于第一期指标集,我们团队正在开展运营系统的搭建,可以期待一下接下来的分享哦~~
### 参与指南
开源社区运营度量讨论目前都是在openEuler开源社区进行的,欢迎大家贡献思路和建议。
**1、Mail List:**
<community@openeuler.org>
**2、Issues:**
[[1]](https://gitee.com/openeuler/community/issues/I1BAO0)为主任务,主要为度量框架讨论,详细内容在文档[[3]](https://docs.qq.com/doc/DRmlaYnZSbEViRm5G)
[[2]](https://gitee.com/openeuler/community/issues/I1BSJ4)是第一批的度量指标项,详细内容在文档 [[4]](https://docs.qq.com/doc/DUG1jWGptQ2xSc0xw)
[1] https://gitee.com/openeuler/community/issues/I1BAO0
[2] https://gitee.com/openeuler/community/issues/I1BSJ4
[3] https://docs.qq.com/doc/DRmlaYnZSbEViRm5G
[4] https://docs.qq.com/doc/DUG1jWGptQ2xSc0xw
+++
title = "浅谈openEuler开源社区运营度量分析系统选型"
date = "2020-05-07"
tags = ["社区运营", "度量"]
archives = "2020-05"
author = "zhongjun"
summary = "浅谈openEuler开源社区运营度量分析系统选型,属于系列博客的第二篇。"
+++
## 背景
openEuler开源社区建立后,我们采取了一系列的运营措施,可是如何知道这些运营措施是有效的,如何才能知道哪些措施更优呢,如何判断一次运营活动真正带来了多少用户呢?为了解决这一系列问题,我们试图搭建一个运营度量分析系统,用数字去量化这些指标。
## 如何选型
通常选型方法是4看3定,看业界、看友商、看客户、看自己,定方案、定策略、定计划。根据这个思路,我们先来看看当前业界主流的社区用了哪些运营系统:
### 看业界
|社区/基金会 |系统 |连接 |
| ------------ | ------------ | ------------ |
|CNCF |[devstats](https://github.com/cncf/devstats) |https://github.com/cncf/devstats |
|开源数据统计 |[chaoss](https://github.com/chaoss/grimoirelab) |https://github.com/chaoss/grimoirelab |
|OpenStack |[stackalytics](https://opendev.org/x/stackalytics) |https://opendev.org/x/stackalytics |
|Apache |[kibble](https://github.com/apache/kibble) |https://github.com/apache/kibble |
横向对比了一下各个系统的实现、生态、能力等指标,详见下图
| |OpenStack stackalytics|CNCF devstate|Chaoss Grimoirelab|Apache kibble|
| ------------ | ------------ | ------------ | ------------ | ------------ |
|生态 |少(4个) |少(2个) Git github|多 10+ |一般 |
|数据库 | Memcached|PostgresSQL|ElasticSearch|ElasticSearch
|界面|Dashboard自定义|Grafana|Kibiter(kibana增强)|Kibble UI
|分析能力|把需要分析的数据配置到yaml文件中|弱|一般(借助elasticsearch自身算法)|一般
|是否支持Gitee|否|否|否|否
|数据类型|Key/value|时序|日志文本|日志文本
|是否支持企业用户映射|否(仅以domain区分)|是(companies.yaml)|是(sortinghat)|否
|获取数据工具|Stackalytics.processor|sh脚本调用cli/API命令收集|Perceval 程序调用API或者CLI命令获取日志或API返回信息|Kibble-scanners
|语言|python|sh|python|Python
|数据结构定义|[schema.py](https://opendev.org/x/stackalytics/src/branch/master/stackalytics/processor/schema.py)|[Structure.sql](https://github.com/cncf/devstats/blob/master/structure.sql)文件中定义|[grimoirelab-elk](https://github.com/chaoss/grimoirelab-elk)工程中定义raw(原始数据)和enrich(处理后的结构化数据)的mapping|
### 看自己
再看看我们自身的需要的数据:
|数据类型|详细|
| ------------ | ------------ |
|git|git提交日志数据 |
|Gitee|1.Gitee issue数据 2.Gitee pull request数据 3.repo数据 4.评论数据 5.事件数据 6.clone review来源数据等|
|Download|1.下载iso数据 2.下载rpm源数据 |
|maillist|1.message数据(个数、内容、收发发件信息等) 2.用户注册数据等|
|SIG|组织用户数据|
|网站|1.访问量数据 2.访问访客数据 3.搜索词 4.来源网站 5.入口页面 6.受访页面等 |
|容器服务|1.基础服务数据 2.容器pod日志数据等|
根据这些数据我们期望得到基本的用户模型(详见上一篇[文章](https://openeuler.org/zh/blog/2020/05/06/2020-05-06-os-metrics-1.html)提到的人、组织的度量框架),或者更深入的用户轨迹行为分析,数据挖掘等。
我们自身的主要代码仓库托管在Gitee数据库下面,以上的方案都不能支持我们对数据运营的诉求。我们有同事试图在Chaoss上提供Gitee的[backend](https://github.com/chaoss/grimoirelab-perceval/pull/645)让Chaoss支持Gitee生态,chaoss方表示不是很愿意维护。
上面的方案进行了简单的数据统计以及简单的数据加权计算统计,对于我们需求的80%的数据不支持,也就没有对这些数据的一些分析处理的逻辑参考。
因此我们初步通过借鉴上面方案的python部分框架,按照我们自己的数据处理及分析逻辑编写自己的轻量级数据收集及分析、建模程序。
## 初定方案
<img src="/zh/blog/zhongjun2/2020-05-07-os-metrics-2-01.png" style="width:100%;">
当前我们将原始的数据git、Gitee、maillist等通过api或者日志的方式,以backend的形式接入om-collect服务。K8 pod日志通过Fluentd收集日志数据,里面包括了所有pod的服务访问日志、服务运行日志等等全量的日志。
考虑到Elasticsearch服务在大数据场景下搜索的速度,深度搜索会导致Elasticsearch内部产生副本数过多占用内存空间过大等导致Elasticsearch集群索引变成red不可用的状态,或者Elasticsearch集群挂掉的状态。我们对数据都做了一个备份,备份到OBS对象存储服务上。
Identity服务用以做company用户与社区用户的映射关系。CSS是华为云的云搜索服务,将原始的日志数据存储到CSS中。再将数据字段解析出来保存到CSS云搜索服务,这时候的数据就带了基础的索引字段,根据日志解析的最原始的字段。Grafana可以取CSS Enrich里面的数据直接显示一些用户的基本信息,比如用户名、用户贡献的issue个数、pull request个数等。当前也是只做到基本信息的展示。
数据建模分析程序会对原始字段进行建模,比如将用户按照时间分类,分析用户的行为轨迹,哪一类用户更关注哪一类的topic信息等。为后期的运营策略提供数据支持。
## 结束语
我们当前只做到基本的数据采集及显示部分,根据这些数据能得到一些基本的分析结果(详见下一章openeuler运营系统发现的用户习惯》),到更复杂的数据建模与分析还没开始,欢迎大家贡献更好的思路到[社区](https://gitee.com/opensourceway),有对度量分析系统的诉求也可以往[社区issue](https://gitee.com/opensourceway/om-collections)上提。
......@@ -35,8 +35,7 @@ title = "社区贡献"
- [社区安全问题反馈](#社区安全问题反馈)
- [参与社区活动](#参与社区活动)
- [社区内沟通方式说明](#社区内沟通方式说明)
- [社区新闻和大事件](#社区新闻和大事件)
- [社区聚会](#社区聚会)
- [社区活动](#社区活动)
- [问题反馈](#问题反馈)
......@@ -49,13 +48,13 @@ title = "社区贡献"
## 签署CLA <a name="签署CLA"></a>
您必须首先签署[“贡献者许可协议”(CLA)](https://openeuler.org/zh/cla.html),然后才能参与社区贡献。
您必须首先签署[“贡献者许可协议”(CLA)](<https://openeuler.org/zh/cla.html>),然后才能参与社区贡献。
## 社区行为守则 <a name="社区行为守则"></a>
openEuler是一个开源社区。它完全依赖于社区提供友好的开发和协作环境,所以在参与社区贡献之前,请先阅读并遵守openEuler社区的[行为守则](https://gitee.com/openeuler/community/blob/master/code-of-conduct.md)
openEuler是一个开源社区。它完全依赖于社区提供友好的开发和协作环境,所以在参与社区贡献之前,请先阅读并遵守openEuler社区的[行为守则](<https://gitee.com/openeuler/community/blob/master/code-of-conduct.md>)
......@@ -75,7 +74,7 @@ SIG就是Special Interest Group的缩写,openEuler社区按照不同的SIG来
- SIG组是开放的,欢迎任何人加入并参与贡献。
- SIG都是针对特定的一个或多个技术主题而成立的。SIG内的成员推动交付成果输出,并争取让交付成果成为openEuler社区发行的一部分。
- SIG的核心成员主导SIG的治理。请查看[SIG的角色说明](https://gitee.com/openeuler/community/blob/master/community-membership_cn.md)。您可以在贡献的同时积累经验和提升影响力。
- SIG的核心成员主导SIG的治理。请查看[SIG的角色说明](<https://gitee.com/openeuler/community/blob/master/community-membership_cn.md>)。您可以在贡献的同时积累经验和提升影响力。
- 每一个SIG在Gitee上都会拥有一个或多个项目,这些项目会拥有一个或多个Repository。SIG的交付成果会保存在这些Repository内。
- 可以在SIG对应的Repository内提交Issue、针对特定问题参与讨论,提交和解决问题,参与评审等。
- 您也可以通过邮件列表、IRC或视频会议和SIG内的成员进行交流。
......@@ -86,7 +85,7 @@ SIG就是Special Interest Group的缩写,openEuler社区按照不同的SIG来
找到您感兴趣的SIG组,可以帮助您在正确的地方提出问题,并得到更快的社区响应。
- **方式一**:如果您不了解有哪些SIG或项目,您可以查看[SIG列表](https://openeuler.org/zh/sig.html),它包含当前openEuler社区成立的所有SIG团队的清单。您可以通过该列表快速的定位到您感兴趣的领域所对应SIG团队。同时还会您提供该SIG团队的如下信息:
- **方式一**:如果您不了解有哪些SIG或项目,您可以查看[SIG列表](<https://openeuler.org/zh/sig.html>),它包含当前openEuler社区成立的所有SIG团队的清单。您可以通过该列表快速的定位到您感兴趣的领域所对应SIG团队。同时还会您提供该SIG团队的如下信息:
- SIG下的项目,以及项目的Repository地址
- SIG内的交流方式,包括邮件列表、IRC或视频会议等
......@@ -104,7 +103,7 @@ SIG就是Special Interest Group的缩写,openEuler社区按照不同的SIG来
### 给自己分配一个Issue <a name="给自己分配一个Issue"></a>
- **找到Issue列表**:在您感兴趣的项目的首页内(Gitee上的项目的Repository)的工具栏,点击“Issues”,您可以找到该SIG的Issue列表(如Community团队的Issue列表地址为https://gitee.com/openeuler/community/issues
- **找到Issue列表**:在您感兴趣的项目的首页内(Gitee上的项目的Repository)的工具栏,点击“Issues”,您可以找到该SIG的Issue列表(如Community团队的Issue列表地址为<https://gitee.com/openeuler/community/issues>
- **找到愿意处理的Issue**:如果您愿意处理其中的一个issue,可以将它分配给自己。只需要在评论框内输入 `/assign``/assign @yourself`,机器人就会将问题分配给您,您的名字将显示在负责人列表里。
- **参与Issue内的讨论**:每个Issue下面可能已经有参与者们的交流和讨论,如果您感兴趣,也可以在评论框中发表自己的意见。
......@@ -122,18 +121,18 @@ SIG就是Special Interest Group的缩写,openEuler社区按照不同的SIG来
#### 安装openEuler <a name="安装openEuler"></a>
请参考[下载安装openEuler](https://openeuler.org/zh/download.html)
请参考[下载安装openEuler](<https://openeuler.org/zh/download.html>)
#### 开发环境准备 <a name="开发环境准备"></a>
如果您想参与编码贡献,需要准备openEuler的开发环境,请参考[开发环境准备](https://gitee.com/openeuler/community/blob/master/zh/contributors/prepare-environment.md)
如果您想参与编码贡献,需要准备openEuler的开发环境,请参考[开发环境准备](<https://gitee.com/openeuler/community/blob/master/zh/contributors/prepare-environment.md>)
#### 下载和构建软件包 <a name="下载和编译软件包"></a>
如果您想下载、修改、构建及验证openEuler提供的软件包,请参考[构建软件包](https://gitee.com/openeuler/community/blob/master/zh/contributors/package-install.md)
如果您想下载、修改、构建及验证openEuler提供的软件包,请参考[构建软件包](<https://gitee.com/openeuler/community/blob/master/zh/contributors/package-install.md>)
......@@ -143,31 +142,31 @@ SIG就是Special Interest Group的缩写,openEuler社区按照不同的SIG来
每个SIG内的项目使用的编码语言、开发环境、编码约定等都可能存在差异的。如果您想了解并参与到编码类贡献,可以先找到该项目给开发者提供的贡献者指南——这个指南一般是在该SIG的首页地址内,以`CONTRIBUTING.md`文件的形式提供,或者就直接在该项目的`README.md`内(如何找到项目的Repository,请参考[找到您感兴趣的工作](#找到您感兴趣的工作)的内容)。
除了这些文件外,SIG可能还会提供其他指南信息。这些信息位于SIG或其项目的特定社区目录中。如果您未找到相关信息,或者对相关信息有疑问,可以在该SIG内提交Issue,或者把问题或疑问发送到该项目所属SIG的邮件列表。如果您认为长时间没有得到回应,可以向community@openeuler.org求助。
除了这些文件外,SIG可能还会提供其他指南信息。这些信息位于SIG或其项目的特定社区目录中。如果您未找到相关信息,或者对相关信息有疑问,可以在该SIG内提交Issue,或者把问题或疑问发送到该项目所属SIG的邮件列表。如果您认为长时间没有得到回应,可以向<community@openeuler.org>求助。
#### 下载代码和拉分支 <a name="下载代码和拉分支"></a>
如果要参与代码贡献,您还需要了解如何在Gitee下载代码,通过PR合入代码等。openEuler使用过的是Gitee代码托管平台,向了解具体的指导,请参考[Gitee Workflow Guide](https://gitee.com/openeuler/community/blob/master/zh/contributors/Gitee-workflow.md)。该托管平台的使用方法类似GitHub,如果您以前使用GitHub,本章的内容您可以大致了解甚至跳过。
如果要参与代码贡献,您还需要了解如何在Gitee下载代码,通过PR合入代码等。openEuler使用Gitee代码托管平台,想了解具体的指导,请参考[Gitee Workflow Guide](<https://gitee.com/openeuler/community/blob/master/zh/contributors/Gitee-workflow.md>)。该托管平台的使用方法类似GitHub,如果您以前使用GitHub,本章的内容您可以大致了解甚至跳过。
#### 修改、构建和本地验证 <a name="修改编译和本地验证"></a>
在本地分支上完成修改后,进行构建和本地验证,请参考[构建软件包](https://gitee.com/openeuler/community/blob/master/zh/contributors/package-install.md)
在本地分支上完成修改后,进行构建和本地验证,请参考[构建软件包](<https://gitee.com/openeuler/community/blob/master/zh/contributors/package-install.md>)
#### 提交一个Pull-Request <a name="提交一个Pull-Request"></a>
当你提交一个PR的时候,就意味您已经开始给社区贡献代码了。请参考[openEuler社区PR提交指导](https://gitee.com/openeuler/community/blob/master/zh/contributors/pull-request.md)
当你提交一个PR的时候,就意味您已经开始给社区贡献代码了。请参考[openEuler社区PR提交指导](<https://gitee.com/openeuler/community/blob/master/zh/contributors/pull-request.md>)
### 检视代码 <a name="检视代码"></a>
openEuler是一个开放的社区,我们希望所有参与社区的人都能成为活跃的检视者。可以参考[社区成员](https://gitee.com/openeuler/community/blob/master/community-membership_cn.md),该文档描述了不同贡献者的角色职责。
openEuler是一个开放的社区,我们希望所有参与社区的人都能成为活跃的检视者。可以参考[社区成员](<https://gitee.com/openeuler/community/blob/master/community-membership_cn.md>),该文档描述了不同贡献者的角色职责。
**对于贡献者**,为了使您的提交更容易被接受,您需要:
......@@ -178,34 +177,35 @@ openEuler是一个开放的社区,我们希望所有参与社区的人都能
**对于检视者**,强烈建议本着[行为准则](https://gitee.com/openeuler/community/blob/master/code-of-conduct.md),超越自我,相互尊重和促进协作。在检视其他人的PR的时候,[补丁审核的柔和艺术](https://sage.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/)提出了一系列检视的重点,旨在说明检视的活动也希望能够促进新的贡献者积极参与,而不会使贡献者一开始就被细微的错误淹没,所以检视的时候,可以重点关注包括:
**对于检视者**,强烈建议本着[行为准则](<https://gitee.com/openeuler/community/blob/master/code-of-conduct.md>),超越自我,相互尊重和促进协作。[《补丁审核的柔和艺术》](<https://sage.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/>)一文中提出了一系列检视的重点,说明代码检视的活动也希望能够促进新的贡献者积极参与,而不会使贡献者一开始就被细微的错误淹没,所以检视的时候,可以重点关注包括:
+ 贡献背后的想法是否合理
+ 贡献的架构是否正确
+ 贡献是否完善
注意:如果您的PR请求没有引起足够的关注,可以在SIG的邮件列表或dev@openeuler.org求助。
注意:如果您的PR请求没有引起足够的关注,可以在SIG的邮件列表或<dev@openeuler.org>求助。
### 测试 <a name="测试"></a>
TBD
### 选择社区组件打包 <a name="选择社区组件打包"></a>
您也可以参与社区组件打包,请参考[如何打包](https://gitee.com/openeuler/community/blob/master/zh/contributors/packaging.md)
您也可以参与社区组件打包,请参考[如何打包](<https://gitee.com/openeuler/community/blob/master/zh/contributors/packaging.md>)
### 参与非代码类贡献 <a name="参与非代码类贡献"></a>
如果您的兴趣不在编写代码方面,可以在[非代码贡献指南](https://gitee.com/openeuler/community/blob/master/zh/contributors/non-code-contributions.md)中找到感兴趣的工作。
如果您的兴趣不在编写代码方面,可以在[非代码贡献指南](<https://gitee.com/openeuler/community/blob/master/zh/contributors/non-code-contributions.md>)中找到感兴趣的工作。
## 社区安全问题披露 <a name="社区安全问题反馈"></a>
+ [安全处理流程](https://gitee.com/openeuler/community/blob/master/zh/security-committee/security-process.md)——简要描述了处理安全问题的过程。
+ [安全披露信息](https://gitee.com/openeuler/community/blob/master/zh/security-committee/security-disclosure.md)——如果您希望报告安全漏洞,请参考此页面。
+ [安全处理流程](<https://gitee.com/openeuler/community/blob/master/zh/security-committee/security-process.md>)——简要描述了处理安全问题的过程。
+ [安全披露信息](<https://gitee.com/openeuler/community/blob/master/zh/security-committee/security-disclosure.md>)——如果您希望报告安全漏洞,请参考此页面。
......@@ -213,18 +213,11 @@ openEuler是一个开放的社区,我们希望所有参与社区的人都能
### 社区内沟通方式说明 <a name="社区内沟通方式说明"></a>
openEuler社区的交流方式有邮件列表、IRC会议和视频会议等,使用方式请参考[社区交流方式指导](https://gitee.com/openeuler/community/tree/master/zh/communication)
openEuler社区的交流方式有邮件列表、IRC会议和视频会议等,使用方式请参考[社区交流方式指导](<https://gitee.com/openeuler/community/tree/master/zh/communication>)
### 社区新闻和大事件 <a name="社区新闻和大事件"></a>
openEuler参加或举办的社区和技术交流会议,关于这些事件和其他社区事件信息均可以在[openEuler新闻](https://openeuler.org/zh/news.html)页面上找到。
### 社区聚会 <a name="社区聚会"></a>
### 社区活动 <a name="社区活动"></a>
社区每年会定期举办开发者大会,您可以通过[https://openeuler.org](https://openeuler.org)上的信息或通过电子邮件<dev@openeuler.org>与我们联系。来加入我们把~
......@@ -232,4 +225,4 @@ openEuler参加或举办的社区和技术交流会议,关于这些事件和
# 问题反馈 <a name="问题反馈"></a>
如果您在使用该贡献者指南或对开发过程有疑问,请随时告诉我们(community@openeuler.org),并在邮件标题内用“【开发过程疑问】”作为邮件标题写出你的疑问和困惑,openEuler社区运营团队会并尽力确保您的问题得到解答。
\ No newline at end of file
如果您在使用该贡献者指南或对开发过程有疑问,请随时告诉我们(<community@openeuler.org>),并在邮件标题内用“【开发过程疑问】”作为邮件标题写出你的疑问和困惑,openEuler社区运营团队会并尽力确保您的问题得到解答。
\ No newline at end of file
+++
title = "安全"
id = "security"
+++
# 漏洞响应
openEuler社区非常重视社区版本的安全性,openEuler安全委员会负责接收、调查和披露openEuler社区相关的安全漏洞。我们鼓励漏洞研究人员和行业组织主动将openEuler社区的疑似安全漏洞报告给openEuler社区安全委员会。我们会快速的响应、分析和解决上报的安全问题或安全漏洞。
......@@ -22,15 +17,16 @@ openEuler社区非常重视社区版本的安全性,openEuler安全委员会
如果您认为openEuler产品存在一个疑似安全漏洞,我们希望您将漏洞上报给openEuler社区,并与我们配合以负责任的方式修复和披露该问题。
### 漏洞上报方式
您可以通过email将openEuler产品的潜在安全漏洞发送到openEuler安全团队邮箱(邮箱地址)。因为漏洞信息比较敏感,建议您使用安全团队成员的openPGP密钥对邮件信息进行加密,安全团队成员和密钥信息如下:
您可以通过email将openEuler产品的潜在安全漏洞发送到openEuler安全团队邮箱(<securities@openeuler.org>)。因为漏洞信息比较敏感,建议您使用安全团队邮箱<a href="security/public_key_securities.asc" download>GPG公钥</a>对邮件信息进行加密。
安全团队成员信息如下:
+ 刘金刚@liujingang09,liujingang09@huawei.com,<a href="security/public_key_liujingang.asc" download>GPG公钥</a>
+ 刘金刚@liujingang09,<liujingang09@huawei.com>, <a href="security/public_key_liujingang.asc" download>GPG公钥</a>
+ 杨丽[@yangli69393],<y69393@huawei.com>
+ 杨丽[@yangli69393],<runningforever@gmail.com>
+ 颜小兵[@yanxiaobing2020],yanxiaobing@huawei.com,<a href="security/public_key_yanxiaobing.asc" download>GPG公钥</a>
+ 颜小兵[@yanxiaobing2020],<yanxiaobing@huawei.com>, <a href="security/public_key_yanxiaobing.asc" download>GPG公钥</a>
+ 朱健伟@zhujianwei001,<zhujianwei7@huawei.com>
+ 朱健伟@zhujianwei001,<zhujianwei7@huawei.com>, <a href="security/public_key_zhujianwei.asc" download>GPG公钥</a>
### 漏洞上报内容
为了便于快速的确认和验证疑似漏洞,请在漏洞上报邮件中包含但不限于以下内容:
......@@ -92,15 +88,36 @@ openEuler社区采用CVSS v3对漏洞进行评估,CVSS V3由通过对以下向
### 严重等级划分
|严重等级(Severity Rating) | CVSS评分(Score)|
| ----------------- | -------------- |
| 致命(Critical) | 9.0 - 10.0 |
| 高(High) | 7.0 - 8.9 |
| 中(Medium) | 4.0 - 6.9 |
| 低(Low) | 0.1 - 3.9 |
| 无(None) | 0.0 |
<table board="2" class="table table-bordered table-striped">
<thead>
<tr>
<th align="left" style="width:40px">严重等级(Severity Rating)</th>
<th align="left" style="width:40px">CVSS评分(Score)</th>
</tr>
<tr>
<td align="left">致命(Critical)</td>
<td>9.0 - 10.0</td>
</tr>
<tr>
<td align="left">高(High)</td>
<td>7.0 - 8.9</td>
</tr>
<tr>
<td align="left">中(Medium)</td>
<td>4.0 - 6.9</td>
</tr>
<tr>
<td align="left">低(Low)</td>
<td>0.1 - 3.9</td>
</tr>
<tr>
<td align="left">无(None)</td>
<td>0.0</td>
</tr>
</thead>
</table>
### 和NVD评估分数差异说明
CVSS基础评分与受影响组件的版本号,提供和使用的方式,平台以及软件的编译方式相关,NVD评分考虑了漏洞被利用的所有场景,而openEuler是基于上游社区自己构建的,主要应用于服务器场景,所以对于openEuler开源产品来说,直接采用NVD评分是不合适的,因此openEuler对所有受影响的CVE有自己的评分,并且多数打分可能和NVD不同
CVSS基础评分与受影响组件的版本号,提供和使用的方式,平台以及软件的编译方式相关,NVD评分考虑了漏洞被利用的所有场景,而openEuler是基于上游社区自己构建的,主要应用于服务器场景,所以对于openEuler开源产品来说,直接采用NVD评分是不合适的,因此openEuler对所有受影响的CVE有自己的评分,存在打分和NVD不同的情况
## 漏洞披露
为了保护openEuler用户的安全,在进行调查、修复和发布安全公告之前,openEuler社区不会公开披露、讨论或确认openEuler产品的安全问题。安全漏洞修复后openEuler社区会发布安全公告,安全公告内容包括该漏洞的技术细节、CVE编号、CVSS安全评分、严重性等级以及受到该漏洞影响的版本和修复版本等信息。安全公告提供邮件订阅功能,您可以通过“[sa-announce](https://mailweb.openeuler.org/postorius/lists/sa-announce.openeuler.org/)"链接订阅openEuler社区的安全公告。
......
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: Keybase OpenPGP v1.0.0
Comment: https://keybase.io/crypto
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
=pZjL
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: Keybase OpenPGP v1.0.0
Comment: https://keybase.io/crypto
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
VLpG
=k/Ok
-----END PGP PUBLIC KEY BLOCK-----
......@@ -44,6 +44,13 @@ other ="https://dw.pcl.ac.cn/dwmain/main/"
[main_apply_sponsore]
other = " "
[main_blog_pageview]
other = " "
[main_blog_pageview_units]
other = " viewed"
[main_cards_title]
other = "Welcome to openEuler Community"
......@@ -124,7 +131,7 @@ other = "Mail List"
# DOC page
[doc_git_footer]
other = "Edit this page"
other = "Feedback"
# 404 page
[404_title]
......
......@@ -23,6 +23,12 @@ other = "测试资源申请"
[main_postablog_source]
other = "写博客"
[main_blog_pageview]
other = "总浏览量"
[main_blog_pageview_units]
other = "次"
[main_apply_description]
other= "如果缺乏测试设备,可以尝试在此申请。"
......@@ -123,7 +129,7 @@ other = "/zh/about_openeuler/docs/whtisopeneuler.html"
other = "邮件列表"
# DOC page
[doc_git_footer]
other = "编辑此页"
other = "意见反馈"
# 404 page
[404_title]
......
......@@ -20,13 +20,19 @@ do
if [ -d ./community/sig/$dir ]
then
sed -i "s/\r//g" ./community/sig/$dir/OWNERS
mt=$(sed '1d' ./community/sig/$dir/OWNERS | awk '{print $2}' | tr '\n' ', ')
sed -e "s/{{sig_name}}/$dir/g" $fd/sig.temp > $dir.md
sed -i "s/{{maintainers}}/$mt/g" $dir.md
if [ -f ./community/sig/$dir/README.md ]
then
mail=$(grep -P "[a-zA-Z|-]+@openeuler.org" -o ./community/sig/$dir/README.md)
mail=$(grep -P "[a-zA-Z|-]+@openeuler.org" -o ./community/sig/$dir/README.md | head -1)
if [ "$mail"x = "sig-yousigname@openeuler.org"x ]
then
continue
fi
if [ -n "$mail" ]
then
echo "replace mail to $mail"
......
......@@ -50,7 +50,7 @@
translation: "View All"
id: archivesTitle
translation: "归档"
translation: "Archives"
- id: readMore
translation: "Read more"
......
......@@ -21,8 +21,14 @@
<div class="row">
<div class="col-md-9" id="blog-post">
<p class="text-muted mb-small text-right">{{ if .Params.author }}{{ .Params.author }} |
{{ end }}{{ .Date.Format .Site.Params.date_format }}</p>
<p class="text-muted mb-small text-right">{{ if .Params.author }}{{ .Params.author }} |
{{ end }}{{ .Date.Format .Site.Params.date_format }}
<br>
<span id="busuanzi_container_page_pv">
{{i18n "main_blog_pageview"}}<span id="busuanzi_value_page_pv"></span>{{i18n "main_blog_pageview_units"}}
</span>
</p>
<div id="post-content">
{{ .Content }}
</div>
......
......@@ -20,20 +20,28 @@
<div class="container docscontainer">
<input type="checkbox" style="display: none" id="menu-control" />
<div class="slide_nav" id="slideNav">
<img src="/svg/menu.svg" alt="Menu"><p>{{ i18n "docs_nav_menu_name" }}</p>
<img src="/svg/menu.svg" alt="Menu">
<p>{{ i18n "docs_nav_menu_name" }}</p>
</div>
<main class="flex container docscontainer">
<aside class="book-menu fixed" id="menu">
{{ partial "docs/menu" . }}
</aside>
<div class="book-page" id="page">
<!-- {{ partial "docs/mobile-header" . }} -->
{{ template "main" . }}
{{ partial "docs/git-footer" . }}
{{ partial "docs/inject/footer" . }}
<main class="container docscontainer">
<div class="row">
<div class="col-md-3">
<aside class="book-menu" id="menu">
{{ partial "docs/menu" . }}
</aside>
</div>
<div class="col-md-9">
<div class="book-page" id="page">
<!-- {{ partial "docs/mobile-header" . }} -->
{{ template "main" . }}
{{ partial "docs/git-footer" . }}
{{ partial "docs/inject/footer" . }}
</div>
</div>
</div>
{{ template "toc" . }}
</main>
......
<!-- valine -->
{{- if .Site.Params.valine.enable -}}
<!-- id 将作为查询条件 -->
<link rel="stylesheet" href="{{ "css/comment.css" | absURL }}" />
<div id="vcomments"></div>
<script src="//cdn1.lncld.net/static/js/3.0.4/av-min.js"></script>
<script src='//unpkg.com/valine/dist/Valine.min.js'></script>
<!-- valine -->
{{- if .Site.Params.valine.enable -}}
<!-- id 将作为查询条件 -->
<link rel="stylesheet" href="{{ "css/comment.css" | absURL }}" />
<div id="vcomments"></div>
<script src="//cdn1.lncld.net/static/js/4.0.4/av-min.js"></script>
<script src='//unpkg.com/valine/dist/Valine.min.js'></script>
<script type="text/javascript">
new Valine({
el: '#vcomments' ,
appId: '{{ .Site.Params.valine.appId }}',
appKey: '{{ .Site.Params.valine.appKey }}',
notify: true,
verify: true,
avatar:'{{ .Site.Params.valine.avatar }}',
placeholder: '{{ .Site.Params.valine.placeholder }}',
visitor: true,
meta: ['nick','mail','link'],
lang:"en"
});
</script>
{{- end -}}
\ No newline at end of file
<script type="text/javascript">
new Valine({
el: '#vcomments',
appId: '{{ .Site.Params.valine.appId }}',
appKey: '{{ .Site.Params.valine.appKey }}',
notify: true,
verify: true,
avatar: '{{ .Site.Params.valine.avatar }}',
placeholder: '{{ .Site.Params.valine.placeholder }}',
visitor: true,
meta: ['nick', 'mail', 'link'],
lang: "en"
});
</script>
{{- end -}}
\ No newline at end of file
......@@ -22,3 +22,7 @@
{{ end }}
</div>
{{ end }}
<div style="width:100%;margin-top:30px;margin-bottom:30px;">
<a class="btn btn-primary" id="docPreviousPage">{{ i18n "newer" }}</a>
<a class="btn btn-primary"id="docNextPage">{{ i18n "older" }}</a>
</div>
......@@ -57,7 +57,7 @@
<link href="{{ "css/owl.theme.css" | relURL}}" rel="stylesheet">
<link rel="alternate" href="{{ "/index.xml" | absURL }}" type="application/rss+xml" title="{{ .Site.Title }}">
<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<!-- Twitter Card meta tags -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@{{ .Site.Params.twitter }}">
......@@ -80,5 +80,5 @@
s.parentNode.insertBefore(hm, s);
})();
</script>
<link href="{{ "css/table.css" | relURL}}" rel="stylesheet">
</head>
......@@ -5,40 +5,31 @@
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jstree/3.3.4/jstree.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/waypoints/4.0.1/jquery.waypoints.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/Counter-Up/1.0/jquery.counterup.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-parallax/1.1.3/jquery-parallax.js"></script>
<script src="{{ .Site.BaseURL }}js/front.js"></script>
<!-- owl carousel -->
<script src="{{ .Site.BaseURL }}js/owl.carousel.min.js"></script>
<!-- used to for mobile -->
<script src="{{ .Site.BaseURL }}js/flexible.js"></script>
<script src="{{ .Site.BaseURL }}js/common.js"></script>
<script src="{{ .Site.BaseURL }}js/dist/jso.js"></script>
<script src="{{ .Site.BaseURL }}js/cla.js?t=20191230"></script>
<div id="mask" onclick="hideNav()"></div>
<script type="text/javascript">
$(document).ready(function () {
function getRelativePath() {
var url = location.href;
var arrURL = url.split("//");
return arrURL[1].substring(arrURL[1].indexOf("/"));
var arrURL = url.split('//');
return arrURL[1].substring(arrURL[1].indexOf('/'));
}
function getCurrentID(wholeData, relativeURL) {
for (var j in wholeData) {
var href = wholeData[j].a_attr.href;
var text = wholeData[j].text;
//debugger;
if ((href == relativeURL) || (text.indexOf(relativeURL) >= 0)) {
//console.log(wholeData[j].id);
if ((href === relativeURL) || (text.indexOf(relativeURL) >= 0)) {
return wholeData[j].id;
} else {
if (wholeData[j].children.length > 0) {
......@@ -49,9 +40,8 @@
}
}
}
return "";
return '';
}
if ($('#docstreeview').length) {
$('#docstreeview').jstree();
$('#docstreeview').jstree().hide_dots();
......@@ -74,41 +64,96 @@
}
}
});
/* select the node by the relative url
var currentAElement = $('#docstreeview').find("a[href='" + getRelativePath() + "']");
if (currentAElement.length) {
console.log("click");
currentAElement.trigger("click");
}*/
$("#docstreeview").on("ready.jstree", function (e, data) {
$("#docstreeview").fadeIn("slow")
$('#docstreeview').on('ready.jstree', function (e, data) {
$('#docstreeview').fadeIn('slow');
var relativeURL = getRelativePath();
var wholeData = $("#docstreeview").jstree().get_json();
var wholeData = $('#docstreeview').jstree().get_json();
var currentID = getCurrentID(wholeData, relativeURL);
console.log(currentID);
$("#docstreeview").jstree()._open_to(currentID);
$('#docstreeview').jstree()._open_to(currentID);
$('#docstreeview').jstree().select_node(currentID);
$('#docstreeview').jstree().open_node(currentID);
var data = $('#docstreeview').jstree().get_json();
var nodeList = [];
/*把树状平铺,用于查看是否有上一页下一页*/
var getAllData = function (Arr) {
for (var i = 0; i < Arr.length; i++) {
var tempNode = {};
tempNode.id = Arr[i].id;
var href = Arr[i].a_attr.href;
if (href === '#') {
/*转为jq对象特殊处理*/
var jqNode = $(Arr[i].text);
tempNode.href = jqNode.find('a').attr('href');
} else {
tempNode.href = href;
}
nodeList.push(tempNode);
if (Arr[i].children !== []) {
getAllData(Arr[i].children);
}
}
};
/*获取上一页、下一页*/
var nextAndPevious = function (arr, id) {
var result = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i].id === id) {
if (i === 0) {
result.push(null);
} else {
result.push(arr[i - 1].href);
}
if (i === arr.length - 1) {
result.push(null);
} else {
result.push(arr[i + 1].href);
}
}
}
return result;
};
getAllData(wholeData);
var nextAndPeviousArr = nextAndPevious(nodeList, currentID);
if (nextAndPeviousArr[0] == null) {
$('#docPreviousPage').attr('disabled', 'disabled');
} else {
$('#docPreviousPage').attr('href', nextAndPeviousArr[0]);
}
if (nextAndPeviousArr[1] == null) {
$('#docNextPage').attr('disabled', 'disabled');
} else {
$('#docNextPage').attr('href', nextAndPeviousArr[1]);
}
});
}
function showNav() {
$('#menu').css({
"transform": "translateX(0)"
}).attr("onoff", "on");
'transform': 'translateX(0)'
}).attr('onoff', 'on');
}
function hideNav() {
$('#menu').css({
"transform": "translateX(-100%)"
}).attr("onoff", "off");
'transform': 'translateX(-100%)'
}).attr('onoff', 'off');
}
$("#slideNav").bind('click', function () {
if ($('#menu').attr("onoff") == "on") {
$('#slideNav').bind('click', function () {
if ($('#menu').attr('onoff') === 'on') {
hideNav();
} else {
showNav();
}
})
});
$(' a[href^="#"][href!="#"]').click(function () {
var target = document.getElementById(decodeURI(this.hash).split('#')[1]);
if (!target) {
return;
}
var targetOffset = $(target).offset().top - 140 + 'px';
$('html,body').animate({
scrollTop: targetOffset
},
300);
return false;
});
});
</script>
</script>
\ No newline at end of file
......@@ -679,8 +679,11 @@ footer .notice span {
text-decoration: none;
color: inherit;
padding: 6px 0px;
overflow: hidden;
}
.book-menu .jstree-default .jstree-node{
overflow:hidden;
}
.book-menu .jstree-default .jstree-anchor a {
text-decoration: none;
color: inherit;
......@@ -819,6 +822,7 @@ footer .notice span {
.container .book-menu {
font-size: inherit;
flex: 0 0 5rem;
margin-bottom:30px;
}
.container div.book-page {
......
table:not(:last-child) {
margin-bottom: 1em;
}
table {
background-color: transparent;
width: 100%;
text-align: center;
}
table td,
table th {
text-align: left;
border-top: 1px solid #dbdbdb;
border-left: none;
border-right: none;
padding: 8px 12px;
vertical-align: top;
border-collapse: collapse;
border-spacing: 0;
}
table th {
border-top: none;
border-bottom: 1px solid #dbdbdb;
}
thead th {
border-width: 0 0 2px;
color: #363636;
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册