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.dsc
和netkit-telnet_0.17-42+deepin.debian.tar.xz
文件会自动同步到obs的project服务器中。
8、在web端查看并手动删除netkit-telnet_0.17-42.dsc
和netkit-telnet_0.17-42.debian.tar.xz
(下面的图片是我删除旧包之后的样子)
9、等待Build Results中的结果为succeeded之后submit package。
点击Create 完成提交
四、个人想法
我个人感觉我以上所使用的方法有点笨,应该有更加快捷的方法,但是官方文档的例子并没有包括debian打包的相关领域,所以我暂时使用上述方法将github上修包记录同步到obs服务器上。