Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
openeuler_risc-v_obs [2022/02/24 13:07] misaka00251openeuler_risc-v_obs [2023/04/28 02:25] (current) – [基于 OBS 构建 RPM 包] Add newer method misaka00251
Line 40: Line 40:
  
 ===== OBS 命令 ===== ===== OBS 命令 =====
 +
 +==== OCS 的安装配置 ====
  
 首先安装 osc 软件包: ''dnf install osc'' 首先安装 osc 软件包: ''dnf install osc''
  
 +osc 的凭据位置为 ''~/.config/osc/oscrc'',进行以下配置:
 +
 +<file oscrc .oscrc>
 +[general]
 +apiurl = https://build.openeuler.org/
 +no_verify = 1
 +
 +[https://build.openeuler.org]
 +user=<你的用户名>
 +pass=<你的密码>
 +</file>
 +
 +注意的是,密码在这里为明文密码。
 +
 +==== 基于 OBS 构建 RPM 包 ====
 +
 +=== 社区已有软件包 ===
 +
 +  - 进入 Project 页面
 +  - 找到要构建的包所在的工程,并在详情页面搜索需要构建的软件包
 +  - 点击 "branch package" 创建子工程
 +  - 点击 "_service" 文件进入编辑页面并修改
 +
 +如果不选择 **Stay on this revision** 的话,则会在创建子工程之后开始自动构建。
 +
 +根据流程,要想修复一个包首先要对其进行 Fork,去 [[https://gitee.com/openeuler/RISC-V|RISC-V]] 的 Repo 提交 PR Request(更改 configuration 目录下的 ''riscv_fork_list.yaml'' 即可),等待数分钟后便会在 [[https://gitee.com/organizations/openeuler-risc-v/projects|openEuler-RISC-V]] 下出现被 Fork 的 Repo。
 +
 +如果此处遇到了问题,请在微信群内汇报,会有专人处理。去[[https://jenkins.openeuler.org/job/Infra/job/RISC-V_fork_repos/|这里]]查看失败的原因会帮忙更快的解决问题。
 +
 +在自己的 Repo 做出更改之后,我们随后编辑 ''_service'' 文件来在 OBS 上自动编译:
 +
 +<code>
 +<services>
 +    <service name="tar_scm">
 +      <param name="scm">git</param>
 +      <param name="url">git@gitee.com:misaka00251/nano.git</param>
 +      <param name="exclude">.git</param>
 +      <param name="revision">3fe8a8d4985a4600816f699e491bba1666b32067</param>
 +    </service>
 +    <service name="extract_file">
 +        <param name="archive">*.tar</param>
 +        <param name="files">*/*</param>
 +    </service>
 +</services>
 +</code>
 +
 +这里还有另一种更好的写法:
 +
 +<code>
 +<services>
 +    <service name="tar_scm">
 +      <param name="scm">git</param>
 +      <param name="url">git@gitee.com:misaka00251/nano.git</param>
 +      <param name="revision">master</param>
 +      <param name="exclude">*</param>
 +      <param name="extract">*</param>
 +    </service>
 +</services>
 +</code>
 +
 +在我这个例子内,我把 ''url'' 改成了我自己的 Repo,并指明了最新的 Revision(可以指定为 branch 或者 commit),剩下的都没有动。保存之后就会开始自动编译。
 +
 +
 +=== 新增软件包 ===
 +
 +前提条件:你已经根据依赖关系确认了你要把新增的包加入到社区的哪个工程里面
 +
 +  * 进入 Project 页面
 +  * 找到要新增的包所属的工程,并在详情页面点击任意软件包
 +  * 点击 "branch package" 创建子工程
 +  * 然后点击 "delete package" 删除该软件包,随后会自动进入 Branch 工程页面详情
 +
 +如果之前已经 branch 过该工程下面的软件包,就不要这么做了,直接点击右上角的 Home project,进入之后点击 Subprojects,然后进入对应的 branch 工程页面详情即可。
 +
 +至于删除操作是为了获得工程 metadata 文件的依赖关系。
 +
 +  * 点击 "create package" 并填写相关信息
 +  * 点击 "Add file" 上传要新增软件包的 spec 文件及对应的源码包文件
 +
 +文件上传成功之后,OBS 会自动开始构建。
 +
 +
 +==== 使用 OSC 构建 RPM 包 ====
 +
 +先打个预防针:本地的磁盘空间要够哦!
 +
 +=== 构建社区已有软件包 ===
 +
 +假设我们要将 Mainline 的 nano 包 branch 到个人分支:
 +
 +<code>
 +$ osc branch openEuler:Mainline nano
 +</code>
 +
 +随后将软件包配置信息下载到本地(上一步会有提示哦):
 +
 +<code>
 +$ osc co home:misaka00251:branches:openEuler:Mainline/nano
 +</code>
 +
 +接下来,修改 _service 文件为个人 Git Repo 地址(同在线构建方法一样修改即可)。随后上传你的更改:
 +
 +<code>
 +$ osc ci -m "Update _service"
 +</code>
 +
 +修改提交成功后,OBS 会自动开始构建软件包。通过以下命令可以查看编译日志情况:
 +
 +<code>
 +$ osc buildlog standard_riscv64 riscv64
 +</code>
 +
 +如果需要将远程软件包代码同步到本地,可以使用如下命令:
 +
 +<code>
 +$ osc up -S
 +</code>
 +
 +可以发现这样拉下来的文件开头都有 _service 一样的开头,在本地编译时会出问题,此时要删除掉:
 +
 +<code>
 +$ rm -f _service;for file in `ls`;do new_file=${file##*:};mv $file $new_file;done
 +</code>
 +
 +修改源代码和 spec 文件之后,提交到 OBS 服务器进行构建:
 +
 +<code>
 +$ osc up
 +$ osc addremove *
 +$ osc ci -m "Update source and spec"
 +</code>
 +
 +修改提交成功后,OBS 会自动开始构建软件包。
 +
 +如果提示 Entity Too Large 的话,大于 1 MB 的都无法被上传成功,为平台的已知问题。我们也不推荐这么做,最好用 _service 文件!
 +
 +=== 新增软件包 ===
 +
 +前提条件:你已经根据依赖关系确认了你要把新增的包加入到社区的哪个工程里面
 +
 +首先,基于工程 openEuler:Mainline,选择该工程下面的任意软件包并 branch 到个人分支:
 +
 +<code>
 +$ osc branch openEuler:Mainline nano
 +</code>
 +
 +随后将软件包配置信息下载到本地(上一步会有提示哦):
 +
 +<code>
 +$ osc co home:misaka00251:branches:openEuler:Mainline/nano
 +</code>
 +
 +接下来,删除创建工程时的 branch 到个人分支的无用软件包:
 +
 +<code>
 +$ cd home:misaka00251:branches:openEuler:Mainline
 +$ osc rm nano
 +$ osc commit -m "Delete nano"
 +</code>
 +
 +然后就可以在个人工程下创建新增的软件包:
 +
 +<code>
 +$ mkdir my-first-package
 +</code>
 +
 +接下来,添加你准备好的源代码和 spec 文件到目录下,并上传至 OBS 服务器:
 +
 +<code>
 +$ cd ..
 +$ osc add my-first-package
 +$ osc ci -m "Add my-first-package"
 +</code>
 +
 +修改提交成功后,OBS 会自动开始构建软件包。通过以下命令可以查看编译日志情况:
 +
 +<code>
 +$ osc buildlog standard_riscv64 riscv64
 +</code>
 +
 +==== 创建 subproject ====
 +
 +假设我要在 home:misaka00251 下创建一个 Subproject 叫 NewMeta,可以新建一个文件:
 +
 +<file test>
 +<project name="home:misaka00251:NewMeta">
 +  <title/>
 +  <description/>
 +  <person userid="misaka00251" role="maintainer"/>
 +  <publish>
 +    <enable/>
 +  </publish>
 +  <useforbuild>
 +    <disable/>
 +  </useforbuild>
 +  <repository name="AmogOS">
 +    <path project="openEuler:Mainline:RISC-V" repository="standard_riscv64"/>
 +    <arch>riscv64</arch>
 +  </repository>
 +</project>
 +</file>
 +
 +然后使用 ''osc meta prj home:misaka00251:NewMeta --file=test'' 就可以啦~