提交 0f6d6523 编写于 作者: O openeuler-ci-bot 提交者: Gitee

!198 更改README,新增加工具使用方法

Merge pull request !198 from lishanshan/master
# openEuler website
### Brief Introduction
Docs maintains openEuler documentations which is integrated by online website. Now we are under developing.
you are welcome to join us.
### Installation
1. Build Image
```
docker build -t docs:v0.0.1 .
```
note: here ```docs``` is the image name, you can change it as you need.
> TO THOSE WHO MAY CONCERN:
>
> If you are working behind proxy, use `--build-arg` option to tell `docker build` about it:
>
> ```docker build --build-arg http_proxy="http://username:password@your.proxy.com:port" -t docs:v0.0.1 .```
>
> `--build-arg` can be specified many times, like `http_proxy`, `https_proxy`, `HTTP_PROXY`, `HTTPS_PROXY` and so on.
2. Running in container
```
docker run -p 80:80 -d docs:v0.0.1 > docs.pid
```
The website will serving on http://your-server-ip:80
The defalut language(en) will serving on http://your-server-ip/
Other language(zh) will serving on http://your-server-ip/zh
3. Stopping the container
```
docker rm -f `cat docs.pid` && rm -f docs.pid
```
### Contribution
1. Fork the repository
2. Create Feature_xxx branch
3. Commit your code
4. Create Pull Request
Please refer to [CONTRIBUTING](./CONTRIBUTING.md) for more guide.
### Get Help
- IRC: #openeuler-doc
- MAIL: dev@openeuler.org
# openEuler 文档
### 介绍
Docs包含了openEuler社区的所有文档,包括发行说明、操作系统安装,管理员指南,虚拟化和容器的使用指导,A-Tune使用指导,应用开发指导等内容。
### 如何在Docs中查找文档
打开“content”文件夹,该文件夹包含了中文(“zh”文件夹)和英文(“en”文件夹)两种语言文档,以中文文档举例进行说明。
在“zh”文件夹中,“docs”文件夹包含了具体文档的内容,“menu”包含了文档的大纲内容。
打开“docs”文件夹,各手册和文件夹对应关系如下。
* A-Tune文件夹对应:A-Tune用户指南
* Adminnistration文件夹对应手册为:管理员指南
* ApplicationDev文件夹对应手册为:应用开发指南
* Container文件夹对应手册为:容器用户指南
* Installation文件夹对应手册为:安装指南
* Quickstart文件夹对应手册为:快速入门
* Releasenotes文件夹对应手册为:发行说明
* SecHarden文件夹对应手册为:安全加固指南
* Virtualization文件夹对应手册为:虚拟化应用指南
### 如何修改文档
当openEuler版本信息有刷新时,这里文档也需要刷新。很感谢您愿意提供刷新内容。
请阅读[资料开发流程指导](https://gitee.com/lss410313/docs/wikis/Home)进行操作参考。
### 如何查看版本分支对应关系
Docs包含了如下3个分支:
* master:开发分支,为默认分支。
* stable-1.0_Base:1.0 Base版本分支,分支内容呈现在[openEuler社区](https://openeuler.org/)网站“文档->1.0 BASE。
* stable-20.03_LTS:20.03 LTS版本分支,分支内容呈现在[openEuler社区](https://openeuler.org/)网站“文档->20.03 LTS”。
### 如何参与SIG
SIG 组基本信息位于[doc](https://gitee.com/openeuler/community/tree/master/sig/doc)
建立或回复 issue:欢迎通过建立或回复 issue 来讨论。
提交PR:欢迎通过提交PR的方式参与SIG。具体操作方法可参考[docs wiki](https://gitee.com/openeuler/docs/wikis/Web%E6%96%B9%E5%BC%8F%E4%BF%AE%E6%94%B9%E8%B5%84%E6%96%99?sort_id=2204396)
提交评论:欢迎在issue或PR中提交评论。
每周 SIG 组会议:是否有,目前是没有。
重要的事说三遍:欢迎提交 PR!欢迎提交 PR!欢迎提交 PR!
### 成员
#### Maintainer 列表
- Rudy_Tan(@rudy_tan)
- amyMaYun(@amy_mayun)
- fhxing(@fhxing168)
### 如何联系我们
邮件列表: dev@openeuler.org
IRC: #openeuler-doc
Zoom 公开会议 MeetID: 是否有?目前是没有。
\ No newline at end of file
# 用户须知<a name="ZH-CN_TOPIC_0232332818"></a>
- openEuler版本号计数规则由openEuler x.x变更为以年月为版本号,以便用户了解版本发布时间,例如openEuler 20.03表示发布时间为2020年3月。
- [Python核心团队](https://www.python.org/dev/peps/pep-0373/#update)已经于2020年1月停止对Python 2的维护。2020年,openEuler 20.03 LTS仅修复Python 2的致命CVE,并将于2020年12月31日全面停止维护。请您尽快切换到Python 3。
* openEuler版本号计数规则由openEuler x.x变更为以年月为版本号,以便用户了解版本发布时间,例如openEuler 20.03表示发布时间为2020年3月。
* [Python核心团队](https://www.python.org/dev/peps/pep-0373/#update)已经于2020年1月停止对Python 2的维护。2020年,openEuler 20.03 LTS仅修复Python 2的致命CVE,并将于2020年12月31日全面停止维护。请您尽快切换到Python 3。
\ No newline at end of file
pkgship
===
# 介绍
pkgship是一款管理OS软件包依赖关系,提供依赖和被依赖关系完整图谱的查询工具,pkgship提供软件包依赖查询、生命周期管理、补丁查询等功能。
1. 软件包依赖查询:方便社区人员在软件包引入、更新和删除的时候了解软件的影响范围。
2. 生命周期管理:跟踪上游软件包发布状态,方便维护人员了解当前软件状态,及时升级到合理的版本。
3. 补丁查询:方便社区人员了解openEuler软件包的补丁情况以及提取补丁内容。
# 架构
系统采用flask-restful开发,使用SQLAlchemy ORM查询框架,同时支持mysql和sqlite两种数据库,可以通过配置文件的更改使用哪种数据库。
# 软件下载
* Repo源挂载地址:https://repo.openeuler.org/
* 源码获取地址:https://gitee.com/openeuler/openEuler-Advisor/tree/master/packageship
* rpm包获取地址:https://117.78.1.88/project/show/openEuler:Mainline
# 安装工具
工具安装可通过以下两种方式实现。
* 先使用dnf挂载pkgship软件在所在repo源(具体方法可参考[应用开发指南](https://openeuler.org/zh/docs/20.03_LTS/docs/ApplicationDev/%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87.html)),然后执行如下指令下载以及安装pkgship及其依赖。
```
dnf install pkgship
```
* 先下载pkgship的rpm包,然后执行如下命令进行安装(其中“x.x-x”表示版本号,请用实际情况代替)。
```
rpm -ivh pkgship-x.x-x.oe1.noarch.rpm
```
或者
```
dnf install pkgship-x.x-x.oe1.noarch.rpm
```
# 配置参数
1. 在配置文件中对相应参数进行配置,系统的默认配置文件存放在 /etc/pkgship/packge.ini,请根据实际情况进行配置更改。
```
vim /etc/pkgship/package.ini
```
2. 创建初始化数据库的yaml配置文件:
conf.yaml 文件默认存放在 /etc/pkgship/ 路径下,pkgship会通过该配置读取要建立的数据库名称以及需要导入的sqlite文件。conf.yaml 示例如下所示。
```
- dbname:openEuler-20.03-LTS
src_db_file:
- /etc/pkgship/src.sqlite
bin_db_file:
- /etc/pkgship/bin.sqlite
status:enable
priority:1
```
> 如需更改存放路径,请更改package.ini下的 init_conf_path 选项
# 服务启动和停止
pkgship使用uWSGI web服务器,启动和停止命令如下所示。
```
pkgshipd start
pkgshipd stop
```
# 工具使用
1. 数据库初始化。
```
pkgship init
```
2. 单包查询。
查询源码包(sourceName)在所有数据库中的信息 。
```
pkgship single sourceName
```
查询当前源码包(sourceName)在指定数据库(dbName)中的信息。
```
pkgship single sourceName -db dbName
```
3. 所有包查询。
查询所有数据库下包含的所有包的信息。
```
pkgship list
```
查询指定数据库(dbName)下的所有包的信息。
```
pkgship list -db dbName
```
4. 安装依赖查询。
查询二进制包(binaryName)的安装依赖,按照默认优先级查询数据库。
```
pkgship installdep binaryName
```
在指定数据库(dbName)下查询二进制包(binaryName)的所有安装依赖,按照先后顺序指定数据库查询的优先级。
```
pkgship installdep binaryName -dbs dbName1 dbName2...
```
5. 编译依赖查询。
查询源码包(sourceName)的所有编译依赖,按照默认优先级查询数据库。
```
pkgship builddep sourceName
```
在指定数据库(dbName)下查询源码包(sourceName)的所有安装依赖,按照先后顺序指定数据库查询的优先级。
```
pkgship builddep sourceName -dbs dbName1 dbName2...
```
6. 自编译自安装依赖查询。
查询二进制包(binaryName)的安装和编译依赖,按照默认优先级查询数据库。
```
pkgship selfbuild binaryName
```
查询源码包(sourceName )的安装和编译依赖,按照默认优先级查询数据库。
```
pkgship selfbuild sourceName -t source
```
其他参数:
-dbs 指定数据库优先级。
```
示例:pkgship selfbuild binaryName -dbs dbName1 dbName2
```
-s 是否查询自编译依赖。其中0表示不查询自编译依赖,1表示查询自编译依赖,默认为0,可以指定1。
```
查询自编译示例:pkgship selfbuild sourceName -t source -s 1
```
-w 是否查询对应包的子包。其中0表示不查询对应子包,1表示查询对应子包,默认为0,可以指定1。
```
查询子包示例:pkgship selfbuild binaryName -w 1
```
7. 被依赖查询。
查询源码包(sourceName)在某数据库(dbName)中被哪些包所依赖,查询结果默认不包含对应二进制包的子包 。
```
pkgship bedepend sourceName -db dbName
```
使查询结果包含二进制包的子包加入参数 -w。
```
pkgship bedepend sourceName -db dbName -w 1
```
8. 包信息记录修改。
变更数据库中(dbName)源码包(sourceName)的maintainer为Newmaintainer 。
```
pkgship updatepkg sourceName db dbName -m Newmaintainer
```
变更数据库中(dbName)源码包(sourceName)的maintainlevel为Newmaintainlevel,值在1~4之间。
```
pkgship updatepkg sourceName db dbName -l Newmaintainlevel
```
同时变更数据库中(dbName)源码包(sourceName)的maintainer 为Newmaintainer和变更 maintainlevel为Newmaintainlevel。
```
pkgship updatepkg sourceName db dbName -m Newmaintainer -l Newmaintainlevel
```
9. 数据库删除。
删除指定数据库(dbName)。
```
pkgship rm db dbName
```
本文主要介绍在openEuler 发行版本过程中使用到的工具集,主要包含工具的介绍,安装以及使用等方面内容。
补丁跟踪
===
# 简介
在 openEuler 发行版开发过程,需要及时更新上游社区各个软件包的最新代码,修改功能 bug 及安全问题,确保发布的 openEuler 发行版尽可能避免缺陷和漏洞。
本工具对软件包进行补丁管理,主动监控上游社区提交,自动生成补丁,并自动提交 issue 给对应的 maintainer,同时自动验证补丁基础功能,减少验证工作量支持 maintainer 快速决策。
# 架构
## CS架构
补丁跟踪采用 C/S 架构。
服务端(patch-tracking) :负责执行补丁跟踪任务,包括:维护跟踪项,识别上游仓库分支代码变更并形成补丁文件,向 Gitee 提交 issue 及 PR,同时 patch-tracking 提供 RESTful 接口,用于对跟踪项进行增删改查操作。
客户端:即命令行工具(patch-tracking-cli),通过调用 patch-tracking 的 RESTful 接口,实现对跟踪项的增删改查操作。
## 核心流程
* 补丁跟踪服务流程
**主要步骤:**
1. 命令行工具写入跟踪项。
2. 自动从跟踪项配置的上游仓库(例如Github)获取补丁文件。
3. 创建临时分支,将获取到的补丁文件提交到临时分支。
4. 自动提交issue到对应项目,并生成关联 issue 的 PR。
<img src="images/PatchTracking.jpg" alt="PatchTracking" />
* Maintainer对提交的补丁处理流程
**主要步骤:**
1. Maintainer分析临时分支中的补丁文件,判断是否合入。
2. 执行构建,构建成功后判断是否合入PR。
![Maintainer](images/Maintainer.jpg)
## 数据结构
* Tracking表
| 序号 | 名称 | 说明 | 类型 | 键 | 允许空 |
|:----:| ----| ----| ----| ----| ----|
| 1 | id | 自增补丁跟踪项序号 | int | - | NO |
| 2 | version_control | 上游SCM的版本控制系统类型 | String | - | NO |
| 3 | scm_repo | 上游SCM仓库地址 | String | - | NO |
| 4 | scm_branch | 上游SCM跟踪分支 | String | - | NO |
| 5 | scm_commit | 上游代码最新处理过的Commit ID | String | - | YES |
| 6 | repo | 包源码在Gitee的仓库地址 | String | Primary | NO |
| 7 | branch | 包源码在Gitee的仓库分支 | String | Primary | NO |
| 8 | enabled | 是否启动跟踪 | Boolean | -| NO |
* Issue表
| 序号 | 名称 | 说明 | 类型 | 键 | 允许空 |
|:----:| ----| ----| ----| ----| ----|
| 1 | issue | issue编号 | String | Primary | NO |
| 2 | repo | 包源码在Gitee的仓库地址 | String | - | NO |
| 3 | branch | 包源码在Gitee的仓库分支 | String | - | NO |
# 工具部署
## 环境要求
>* 安装 Python 3.7及以上版本
>* 已安装 pip3。
## 安装依赖
执行如下命令安装依赖包。
```shell script
yum install -y gcc python3-devel openssl-devel
pip3 install flask flask-sqlalchemy flask-apscheduler requests flask_httpauth
pip3 install -I uwsgi
```
## 安装工具
执行如下命令安装工具包(其中”x.x.x”表示版本号,请用实际情况代替)。
```shell script
rpm -ivh patch-tracking-xxx.rpm
```
## 配置参数
在配置文件中对相应参数进行配置,配置文件路径为 `/etc/patch-tracking/settings.conf`
1. 配置服务监听地址。
```
LISTEN = "127.0.0.1:5001"
```
2. GitHub Token, 用于访问托管在 GitHub 上游开源软件仓的仓库信息 , 生成 GitHub Token 的方法参考 [Creating a personal access token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token)
```
GITHUB_ACCESS_TOKEN = ""
```
3. 对于托管在gitee上的需要跟踪的仓库,配置一个有该仓库权限的gitee的token,用于提交patch文件,提交issue,提交PR等操作。
```
GITEE_ACCESS_TOKEN = ""
```
4. 定时扫描数据库中是否有新增或修改的跟踪项,对扫描到的跟踪项执行获取上游补丁任务,在这里配置扫描的时间间隔,数字单位是秒。
```
SCAN_DB_INTERVAL = 3600
```
5. 命令行工具运行过程中,POST接口需要填写进行认证的用户名和口令哈希值。
```
USER = "admin"
PASSWORD = ""
```
> `USER`默认值为`admin`。
​ 执行如下指令,获取口令的哈希值,其中Test@123为设置的口令。
```
[root]# generate_password Test@123
pbkdf2:sha256:150000$w38eLeRm$ebb5069ba3b4dda39a698bd1d9d7f5f848af3bd93b11e0cde2b28e9e34bfbbae
```
> `口令值`需要满足如下复杂度要求:
>
> * 长度大于等于6个字符
> * 必须包含大写字母、小写字母、数字、特殊字符(~!@#%^*-_=+)
将口令的哈希值`pbkdf2:sha256:150000$w38eLeRm$ebb5069ba3b4dda39a698bd1d9d7f5f848af3bd93b11e0cde2b28e9e34bfbbae`配置到`PASSWORD = ""`引号中。
## 启动补丁跟踪服务
可以使用以下两种方式启动服务。
* 使用systemd方式。
```
systemctl start patch-tracking
```
* 直接执行可执行程序。
```
/usr/bin/patch-tracking
```
# 工具使用
## 添加跟踪项
将需要跟踪的软件仓库和分支与其上游开源软件仓库与分支关联起来,可以通过以下三种方式实现。
### 命令行直接添加
参数含义:
>--user :POST接口需要进行认证的用户名,同settings.conf中的USER参数 \
--password :POST接口需要进行认证的口令,为settings.conf中的PASSWORD哈希值对应的实际的口令字符串 \
--server :启动Patch Tracking服务的URL,例如:127.0.0.1:5001 \
--version_control :上游仓库版本的控制工具,只支持github \
--repo: 需要进行跟踪的仓库名称,格式:组织/仓库 \
--branch :需要进行跟踪的仓库的分支名称 \
--scm_repo :被跟踪的上游仓库的仓库名称,github格式:组织/仓库 \
--scm_branch: 被跟踪的上游仓库的仓库的分支 \
--enable :是否自动跟踪该仓库
例如:
```shell script
patch-tracking-cli --server 127.0.0.1:5001 --user admin --password Test@123 --version_control github --repo testPatchTrack/testPatch1 --branch master --scm_repo BJMX/testPatch01 --scm_branch test --enable true
```
### 指定文件添加
参数含义:
>--server :启动Patch Tracking服务的URL,例如:127.0.0.1:5001 \
--user :POST接口需要进行认证的用户名,同settings.conf中的USER参数 \
--password :POST接口需要进行认证的口令,为settings.conf中的PASSWORD哈希值对应的实际的口令字符串 \
--file :yaml文件路径
将仓库、分支、版本管理工具、是否启动监控等信息写入yaml文件(例如tracking.yaml),文件路径作为`--file`的入参调用命令。
例如:
```shell script
patch-tracking-cli --server 127.0.0.1:5001 --user admin --password Test@123 --file tracking.yaml
```
yaml文件内容格式如下,冒号左边的内容不可修改,右边内容根据实际情况填写。
```shell script
version_control: github
scm_repo: xxx/xxx
scm_branch: master
repo: xxx/xxx
branch: master
enabled: true
```
>version_control :上游仓库版本的控制工具,只支持github \
scm_repo :被跟踪的上游仓库的仓库名称,github格式:组织/仓库 \
scm_branch :被跟踪的上游仓库的仓库的分支 \
repo :需要进行跟踪的仓库名称,格式:组织/仓库 \
branch :需要进行跟踪的仓库的分支名称 \
enable :是否自动跟踪该仓库
### 指定目录添加
在指定的目录,例如`test_yaml`下放入多个`xxx.yaml`文件,执行如下命令,记录指定目录下所有yaml文件的跟踪项。
参数含义:
>--user :POST接口需要进行认证的用户名,同settings.conf中的USER参数 \
--password :POST接口需要进行认证的口令,为settings.conf中的PASSWORD哈希值对应的实际的口令字符串 \
--server :启动Patch Tracking服务的URL,例如:127.0.0.1:5001 \
--dir :存放yaml文件目录的路径
```shell script
patch-tracking-cli --server 127.0.0.1:5001 --user admin --password Test@123 --dir /home/Work/test_yaml/
```
## 查询跟踪项
```shell script
curl -k https://<LISTEN>/tracking
```
例如:
```shell script
curl -k https://127.0.0.1:5001/tracking
```
## 查询生成的 Issue 列表
```shell script
curl -k https://<LISTEN>/issue
```
例如:
```shell script
curl -k https://127.0.0.1:5001/issue
```
## 码云查看 issue 及 PR
登录Gitee上进行跟踪的软件项目,在该项目的Issues和Pull Requests页签下,可以查看到名为`[patch tracking] TIME`,例如` [patch tracking] 20200713101548`的条目,该条目即是刚生成的补丁文件的issue和对应PR。
......@@ -116,9 +116,13 @@ headless: true
- [附录]({{< relref "./docs/A-Tune/附录.md" >}})
- [应用开发指南]({{< relref "./docs/ApplicationDev/application-development.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" >}})
\ No newline at end of file
- [构建RPM包]({{< relref "./docs/ApplicationDev/构建RPM包.md" >}})
- [openEuler工具集用户指南]({{< relref "./docs/userguide/概述.md" >}})
- [补丁工具]({{< relref "./docs/userguide/补丁工具.md" >}})
- [pkgship]({{< relref "./docs/userguide/pkgship.md" >}})
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册