Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
openeuler_risc-v_obs [2022/02/24 12:58] – created misaka00251 | openeuler_risc-v_obs [2024/07/30 08:13] (current) – Change URL misaka00251 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== OBS 笔记 ====== | ====== OBS 笔记 ====== | ||
- | OBS 主页是: https:// | + | :!: openEuler 官方已经全面切换到 [[https:// |
- | 查看 Mainline | + | openEuler RISC-V |
+ | 本文章是[[https:// | ||
===== 重要概念 ===== | ===== 重要概念 ===== | ||
- | * 工程(Project):以工程为划分单位,以工程组织软件包。工程分为公共工程和个人工程。 | + | * 工程(Project): 以工程为划分单位,以工程组织软件包。工程分为公共工程和个人工程。 |
- | * 工程配置(Project Config):每个工程都有的,通常用于定义编译过程所需要用到的宏、打开或关闭某些功能、循环依赖处理策略、包冲突处理策略等。 | + | * 工程配置(Project Config): 每个工程都有的,通常用于定义编译过程所需要用到的宏、打开或关闭某些功能、循环依赖处理策略、包冲突处理策略等。 |
- | * 工程 Metadata(Project Meta):以 xml 格式进行记录,通常用来定义工程描述信息、工程的仓库配置信息、要编译的目标架构、编译依赖的路径信息、是否打开编译开关对外提供编译依赖等。 | + | * 工程 Metadata(Project Meta): 以 xml 格式进行记录,通常用来定义工程描述信息、工程的仓库配置信息、要编译的目标架构、编译依赖的路径信息、是否打开编译开关对外提供编译依赖等。 |
- | * 包 Metadata(Package Meta):通常包含包的描述信息,是否要禁用或打开某些架构的编译等。 | + | * 包 Metadata(Package Meta): 通常包含包的描述信息,是否要禁用或打开某些架构的编译等。 |
- | * 包(Package):以包为管理单元,包为要编译的对象,所有的包都隶属于某一个工程。 | + | * 包(Package): 以包为管理单元,包为要编译的对象,所有的包都隶属于某一个工程。 |
- | * 仓库(Repository):仓库是用来发布包编译生成的二进制的集合,例如从仓库下载 nano 这个包可以用 '' | + | * 仓库(Repository): 仓库是用来发布包编译生成的二进制的集合,例如从仓库下载 nano 这个包可以用 '' |
- | * 架构(Arch):OBS 采用本地架构进行编译,没有提供交叉编译。 | + | * 架构(Arch): OBS 采用本地架构进行编译,没有提供交叉编译。 |
- | [[https:// | + | [[https:// |
上方有个 Meta,此处就是我的工程 Metadata 文件。里面有 description 以及我要编译哪些架构的说明。 | 上方有个 Meta,此处就是我的工程 Metadata 文件。里面有 description 以及我要编译哪些架构的说明。 | ||
< | < | ||
- | <project name=" | + | <project name=" |
< | < | ||
< | < | ||
Line 29: | Line 30: | ||
</ | </ | ||
< | < | ||
- | <path project=" | + | <path project=" |
< | < | ||
</ | </ | ||
Line 38: | Line 39: | ||
Repositories 就是仓库,Build Flag 可以查看我打开了哪些架构的编译,Publish Flag 可以查看哪些会发布到我的 Repo 源上。 | Repositories 就是仓库,Build Flag 可以查看我打开了哪些架构的编译,Publish Flag 可以查看哪些会发布到我的 Repo 源上。 | ||
- | |||
===== OBS 命令 ===== | ===== OBS 命令 ===== | ||
+ | ==== OCS 的安装配置 ==== | ||
+ | |||
+ | 首先安装 osc 软件包: '' | ||
+ | |||
+ | osc 的凭据位置为 '' | ||
+ | |||
+ | <file oscrc .oscrc> | ||
+ | [general] | ||
+ | apiurl = https:// | ||
+ | no_verify = 1 | ||
+ | |||
+ | [https:// | ||
+ | user=< | ||
+ | pass=< | ||
+ | </ | ||
+ | |||
+ | 注意的是,密码在这里为明文密码。 | ||
+ | |||
+ | ==== 基于 OBS 构建 RPM 包 ==== | ||
+ | |||
+ | === 社区已有软件包 === | ||
+ | |||
+ | - 进入 Project 页面 | ||
+ | - 找到要构建的包所在的工程,并在详情页面搜索需要构建的软件包 | ||
+ | - 点击 " | ||
+ | - 点击 " | ||
+ | |||
+ | 如果不选择 **Stay on this revision** 的话,则会在创建子工程之后开始自动构建。 | ||
+ | |||
+ | 根据流程,要想修复一个包首先要对其进行 Fork,去 [[https:// | ||
+ | |||
+ | 如果此处遇到了问题,请在微信群内汇报,会有专人处理。去[[https:// | ||
+ | |||
+ | 在自己的 Repo 做出更改之后,我们随后编辑 '' | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <service name=" | ||
+ | <param name=" | ||
+ | <param name=" | ||
+ | <param name=" | ||
+ | <param name=" | ||
+ | </ | ||
+ | <service name=" | ||
+ | <param name=" | ||
+ | <param name=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | 这里还有另一种更好的写法: | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <service name=" | ||
+ | <param name=" | ||
+ | <param name=" | ||
+ | <param name=" | ||
+ | <param name=" | ||
+ | <param name=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | 在我这个例子内,我把 '' | ||
+ | |||
+ | |||
+ | === 新增软件包 === | ||
+ | |||
+ | 前提条件:你已经根据依赖关系确认了你要把新增的包加入到社区的哪个工程里面 | ||
+ | |||
+ | * 进入 Project 页面 | ||
+ | * 找到要新增的包所属的工程,并在详情页面点击任意软件包 | ||
+ | * 点击 " | ||
+ | * 然后点击 " | ||
+ | |||
+ | 如果之前已经 branch 过该工程下面的软件包,就不要这么做了,直接点击右上角的 Home project,进入之后点击 Subprojects,然后进入对应的 branch 工程页面详情即可。 | ||
+ | |||
+ | 至于删除操作是为了获得工程 metadata 文件的依赖关系。 | ||
+ | |||
+ | * 点击 " | ||
+ | * 点击 "Add file" 上传要新增软件包的 spec 文件及对应的源码包文件 | ||
+ | |||
+ | 文件上传成功之后,OBS 会自动开始构建。 | ||
+ | |||
+ | |||
+ | ==== 使用 OSC 构建 RPM 包 ==== | ||
+ | |||
+ | 先打个预防针:本地的磁盘空间要够哦! | ||
+ | |||
+ | === 构建社区已有软件包 === | ||
+ | |||
+ | 假设我们要将 Mainline 的 nano 包 branch 到个人分支: | ||
+ | |||
+ | < | ||
+ | $ osc branch openEuler: | ||
+ | </ | ||
+ | |||
+ | 随后将软件包配置信息下载到本地(上一步会有提示哦): | ||
+ | |||
+ | < | ||
+ | $ osc co home: | ||
+ | </ | ||
+ | |||
+ | 接下来,修改 _service 文件为个人 Git Repo 地址(同在线构建方法一样修改即可)。随后上传你的更改: | ||
+ | |||
+ | < | ||
+ | $ osc ci -m " | ||
+ | </ | ||
+ | |||
+ | 修改提交成功后,OBS 会自动开始构建软件包。通过以下命令可以查看编译日志情况: | ||
+ | |||
+ | < | ||
+ | $ osc buildlog standard_riscv64 riscv64 | ||
+ | </ | ||
+ | |||
+ | 如果需要将远程软件包代码同步到本地,可以使用如下命令: | ||
+ | |||
+ | < | ||
+ | $ osc up -S | ||
+ | </ | ||
+ | |||
+ | 可以发现这样拉下来的文件开头都有 _service 一样的开头,在本地编译时会出问题,此时要删除掉: | ||
+ | |||
+ | < | ||
+ | $ rm -f _service; | ||
+ | </ | ||
+ | |||
+ | 修改源代码和 spec 文件之后,提交到 OBS 服务器进行构建: | ||
+ | |||
+ | < | ||
+ | $ osc up | ||
+ | $ osc addremove * | ||
+ | $ osc ci -m " | ||
+ | </ | ||
+ | |||
+ | 修改提交成功后,OBS 会自动开始构建软件包。 | ||
+ | |||
+ | 如果提示 Entity Too Large 的话,大于 1 MB 的都无法被上传成功,为平台的已知问题。我们也不推荐这么做,最好用 _service 文件! | ||
+ | |||
+ | === 新增软件包 === | ||
+ | |||
+ | 前提条件:你已经根据依赖关系确认了你要把新增的包加入到社区的哪个工程里面 | ||
+ | |||
+ | 首先,基于工程 openEuler: | ||
+ | |||
+ | < | ||
+ | $ osc branch openEuler: | ||
+ | </ | ||
+ | |||
+ | 随后将软件包配置信息下载到本地(上一步会有提示哦): | ||
+ | |||
+ | < | ||
+ | $ osc co home: | ||
+ | </ | ||
+ | |||
+ | 接下来,删除创建工程时的 branch 到个人分支的无用软件包: | ||
+ | |||
+ | < | ||
+ | $ cd home: | ||
+ | $ osc rm nano | ||
+ | $ osc commit -m " | ||
+ | </ | ||
+ | |||
+ | 然后就可以在个人工程下创建新增的软件包: | ||
+ | |||
+ | < | ||
+ | $ mkdir my-first-package | ||
+ | </ | ||
+ | |||
+ | 接下来,添加你准备好的源代码和 spec 文件到目录下,并上传至 OBS 服务器: | ||
+ | |||
+ | < | ||
+ | $ cd .. | ||
+ | $ osc add my-first-package | ||
+ | $ osc ci -m "Add my-first-package" | ||
+ | </ | ||
+ | |||
+ | 修改提交成功后,OBS 会自动开始构建软件包。通过以下命令可以查看编译日志情况: | ||
+ | |||
+ | < | ||
+ | $ osc buildlog standard_riscv64 riscv64 | ||
+ | </ | ||
+ | |||
+ | ==== 创建 subproject ==== | ||
+ | |||
+ | 假设我要在 home: | ||
+ | |||
+ | <file test> | ||
+ | <project name=" | ||
+ | < | ||
+ | < | ||
+ | <person userid=" | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | <path project=" | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | 然后使用 '' |