deepin-riscv环境下OBS使用经验总结

deepin-riscv环境下OBS使用经验总结

一、OBS简介

OBS(Open Build Service)是一个用于自动化源代码构建的通用系统,能为各种操作系统和硬件架构创建映像和安装包,也是软件包源代码托管平台。obs提供网页管理界面,在终端环境下可使用osc命令行工具进行相关操作。

二、osc工具安装和配置

​ deepin-riscv的源地址目前尚未支持osc工具的apt安装,因此需要使用debian-riscv的源地址实现osc的apt安装。

在/etc/apt/sources.list中添加debian的deb源

deb [trusted=yes] http://deb.debian.org/debian-ports sid main //要添加[trusted=yes],否则在update时会出现gpg报错

apt安装

apt update
apt install osc
osc --version //看到版本号,安装成功

配置Home Project的步骤:

1、登录OBS:https://build.tarsier-infra.com/
2、点击Home Project
3、点击Repositories
4、选择Add from a Project
5、Project地址填写home:revy:deepin-riscv-stage2,repositories选择stage2,Name自己起一个,Architectures勾选riscv64,点accept就添加完成了。

osc工具配置:

​ osc的配置文件地址在~/.config/osc/oscrc,在第一次使用osc命令时会提示用户输入用户名和密码,输入在obs上所注册的用户名和密码,之后根据提示完成免密登录的配置。oscrc中默认的源地址是错误的,需要更正为正确的地址,否则会出现401错误。oscrc配置文件中需要修改的部分如下所示。

第2行修改为 apiurl=https://build.tarsier-infra.com/
第112行修改为 [https://build.tarsier-infra.com]

运行osc ls显示所有项目,基本配置完成。

三、osc添加patch操作流程(以netkit-telnet为例)

1、从上游home project拉取分支到个人project中

​ 成功拉取分支后会创建一个名为: home:Username:branches:home:revy:deepin-riscv-stage2的项目地址,可以在Projects总目录中找到。

2、在riscv的home目录中创建一个目录,用于存放,同步obs上的包

cd ~
mkdir obs_fix
cd obs_fix

3、从obs服务器拉取软件包

osc co home:Username:branches:home:revy:deepin-riscv-stage2   //该命令会拉取用户分支项目中所有的包

​ 拉取完成后,目录如下所示:

├── obs_fix
│   ├── home:Username:branches:home:revy:deepin-riscv-stage2
│   ├── ├── netkit-telnet
│   ├── ├── ├── netkit-telnet_0.17-42.debian.tar.xz
│   ├── ├── ├── netkit-telnet_0.17-42.dsc
│   ├── ├── ├── netkit-telnet_0.17.orig.tar.gz

4、进入netkit-telnet目录,分别解压源码包和debian包,并将debian目录移动到源码目录中

cd home:Username:branches:home:revy:deepin-riscv-stage2/netkit-telnet
mkdir netkit-telnet_0.17 && tar -xvf netkit-telnet_0.17.orig.tar.gz -C ./netkit-telnet_0.17
mkdir debian && tar -xvf netkit-telnet_0.17-42.debian.tar.xz -C ./debian
mv debian ./netkit-telnet_0.17

5、在源码包中打补丁(在上一篇博文中已经介绍过怎么利用quilt在netkit-telnet中打patch,这里只做简要介绍)

cd netkit-telnet_0.17
dquilt push -a                                  //打上所有已有补丁
dquilt new add-missing-lib.patch               	//新建patch
dquilt add /debian/CMakelists.txt               //将CMakelists.txt添加到quilt管理

​ 修改Cmakelists.txt文件,修复bug

dquilt refresh                                  //自动更新patch
dquilt header -e                                //填写补丁描述

​ 利用dch -i编辑changelog,版本号规则参考:https://wiki.deepin.org/zh/01_deepin配套生态/01_deepin入门/02_开发相关/deepin-community分支与Tag管理

6、利用dpkg自动在上级目录中生成.dsc文件和debian包

dpkg-buildpackage -us -uc

​ 注意,如果在第5步中修改的版本号与上层源码包不符合,将源码包重命名,使其符合打包要求。

如果可以确保在打上patch后软件包能正常构建,可以在如下日志出现后crtl+c提前结束验证打包的过程

dpkg-buildpackage: info: source package netkit-telnet
...
dpkg-source: info: building netkit-telnet in netkit-telnet_0.17-42+deepin.debian.tar.xz
dpkg-source: info: building netkit-telnet in netkit-telnet_0.17-42+deepin.dsc
 debian/rules build
...

7、利用osc add添加的debian包和dsc文件

​ 完成上述六个步骤之后,目录结构应如下所示:

├── obs_fix
│   ├── home:Username:branches:home:revy:deepin-riscv-stage2
│   ├── ├── netkit-telnet
│   ├── ├── ├── netkit-telnet_0.17-42.debian.tar.xz
│   ├── ├── ├── netkit-telnet_0.17-42.dsc
│   ├── ├── ├── netkit-telnet_0.17.orig.tar.gz
│   ├── ├── ├── netkit-telnet-0.17
│   ├── ├── ├── netkit-telnet_0.17-42+deepin.dsc
│   ├── ├── ├── netkit-telnet_0.17-42+deepin.debian.tar.xz

​ 删除netkit-telnet-0.17目录,添加新添的dsc文件和Debian文件,并commit

cd ~/obs_fix/home:Username:branches:home:revy:deepin-riscv-stage2/netkit-telnet
rm -rf netkit-telnet-0.17
osc add *
osc commit                                   //完成此命令后会进入编辑器编写commit描述,填写完后保存并退出

​ 完成上述操作后,netkit-telnet_0.17-42+deepin.dscnetkit-telnet_0.17-42+deepin.debian.tar.xz文件会自动同步到obs的project服务器中。

8、在web端查看并手动删除netkit-telnet_0.17-42.dscnetkit-telnet_0.17-42.debian.tar.xz(下面的图片是我删除旧包之后的样子)

9、等待Build Results中的结果为succeeded之后submit package。

点击Create 完成提交

四、个人想法

​ 我个人感觉我以上所使用的方法有点笨,应该有更加快捷的方法,但是官方文档的例子并没有包括debian打包的相关领域,所以我暂时使用上述方法将github上修包记录同步到obs服务器上。

posted @ 2022-11-21 20:33  Gui-Yue  阅读(337)  评论(0编辑  收藏  举报