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更好地服务于打包工作。