deepin-riscv环境下使用pbuilder

deepin-riscv环境下使用pbuilder

题外话

​ 笔者目前在PLCT实验室的deepin小队中实习,主要工作就是修包。构建验证往往是一个比较耗时的过程。本来的话,用原始的dpkg-buildpackage命令也能基本满足构建需求,在开始的时候我都是这么干的。但是,后来有一次修的包需要的依赖难以满足,而且经常因为依赖的原因使得我deepin环境中的apt被污染。我想,这样的麻烦还会经常出现,于是萌生了使用pbuilder的想法。到目前为止,我已经实现了在deepin-riscv环境下pbuilder的基础配置,可以正常使用了,但是在这之前,为了用上pbuiilder踩了好多坑(

​ 以下是在deepin-riscv中配置pbuilder的过程。我的环境是deepin-riscv的docker容器中,在此感谢Clansty同学提供的deepin-riscv的docker镜像。

pbuilder简介

​ pbuilder(personal Debian package builder)是debian/ubuntu环境下维护debian包的专业工具,能够为每一个deb包创建纯净的编译构建环境,自动解析和安装依赖包,而且不污染宿主系统。

pbuilder安装

​ 从镜像启动容器:(--privileged是必要的,否则容器内无权进行mount操作)

sudo docker run --privileged -it xxx(镜像id) /bin/bash   

​ deepin-riscv源中已经包含了pbuilder软件,因此可以通过apt直接安装:

apt install pbuilder

​ 安装过程中会要求用户设置MIRROR地址,虽然deepin有中科院的源,但是软件并不齐全,很多依赖不完整,因此,我们选择使用debian-riscv上游的源地址。地址如下:

http://deb.debian.org/debian-ports

​ 完成安装之后还不能使用,要对脚本进行配置,使pbuilder可以获得源中的软件包。因为deepin中没有debian-keyring,所以要先安装Debian的keyring。可以采用如下方式:

vim /etc/apt/sources.list
将debian的源添加到sources.list中:
deb http://deb.debian.org/debian-ports sid main
deb http://deb.debian.org/debian-ports unreleased main

之后运行update命令并安装debian-ports-archive-keyring:

apt update
apt install debian-ports-archive-keyring

对脚本文件进行修改:

vim /usr/lib/pbuilder/pbuilder-createbuildenv

以下是修改的内容:

第78行添加一行: --keyring /usr/share/keyrings/debian-ports-archive-keyring.gpg
第79行添加一行: --include=debian-ports-archive-keyring \

用create命令创建base.tgz(如果没有代理的话,以下的过程可能比较耗时)

sudo pbuilder create

等待创建完成,pbuilder安装配置完成

pbuilder使用

自动化打包:

​ 在存在.dsc文件的目录下可以使用如下命令进行自动化打包:

pbuilder build xxxx.dsc

和obs配合使用:

​ 利用osc从obs服务器上下载的源码至少包括三个文件:*.dsc, *.orig.tar.gz,*.debian.tar.gz。

​ 所以我们可以利用obs的源码文件和debian文件来创建新的dsc签名供pbuilder构建。以下是我对于kactivities-kf5软件包的一个使用案例,仅供参考,熟悉流程。

​ 从obs服务器拉取kactivities-kf5源码包

osc co home:user-home-address/kactivities-kf5

​ 拉取之后应在home目录下存在以下的目录结构:

 home:Username:branches:home:revy:deepin-riscv-stage2
│   ├── ├── kactivities-kf5
│   ├── ├── ├── kactivities-kf5_5.90.0-1.debian.tar.xz
│   ├── ├── ├── kactivities-kf5_5.90.0-1.dsc
│   ├── ├── ├── kactivities-kf5_5.90.0.orig.tar.xz
│   ├── ├── ├── kactivities-kf5_5.90.0.orig.tar.xz.asc

​ 分别解压kactivities-kf5_5.90.0-1.debian.tar.xz和kactivities-kf5_5.90.0.orig.tar.xz并合并构成源码目录,进入目录添加补丁修改Debian的changelog,具体的细节可参考我的上一篇博文。

利用debuild在上层目录构建新的dsc文件和debian文件。
dpkg-buildpackage -d -us -uc        # 参数d可以不检查dependence,避免宿主系统因为依赖不满足而无法生成dsc和debian压缩包

​ 在上述命令显示如下信息,即可利用crtl+c结束后续进程:

完成上述操作,kactivities-kf5的目录结构如下所示:

 home:Username:branches:home:revy:deepin-riscv-stage2
│   ├── ├── kactivities-kf5
│   ├── ├── ├── 源码目录
│   ├── ├── ├── kactivities-kf5_5.90.0-1.debian.tar.xz
│   ├── ├── ├── kactivities-kf5_5.90.0-1.dsc
│   ├── ├── ├── kactivities-kf5_5.86.0.1.orig.tar.xz
│   ├── ├── ├── kactivities-kf5_5.90.0.orig.tar.xz.asc
│   ├── ├── ├── kactivities-kf5_5.86.0.1-deepin1.debian.tar.xz
│   ├── ├── ├── kactivities-kf5_5.86.0.1-deepin1.dsc
│   ├── ├── ├── kactivities-kf5_5.86.0.1-deepin1_riscv64.build

删除没啥用的文件:

rm kactivities-kf5_5.90.0-1.debian.tar.xz
rm kactivities-kf5_5.90.0-1.dsc
rm kactivities-kf5_5.86.0.1-deepin1_riscv64.build

利用pbuilder在净室环境中开始完整构建:

pbuilder build kactivities-kf5_5.86.0.1-deepin1.dsc

后话

​ pbuilder作为可自动化打包的工具,免去了手动装依赖的麻烦,而且pbuilder的环境与宿主机是隔离的,有效避免了宿主机的环境被污染,是完美的打包环境。笔者会持续更新本篇博文,不断发掘pbuilder更多的用法,让pbuilder更好地服务于打包工作。

posted @ 2022-12-08 19:09  Gui-Yue  阅读(157)  评论(0编辑  收藏  举报