原贴地址
pbuilder 可以通过创建 chroot 环境来自动安装编译依赖并编译 Debian 软件包(以免自己 apt-get build-dep 下 载一大堆东西又忘了该删除哪些。它可以指定 chroot 环境的版本(stable, testing, unstable),因此它也可以用来 backport 软件包到 stable 或 testing ,不过前提是编译依赖要满足。另外,此软件是由日本人开发的,怀着对福田康夫能改善中日关系的期待,暂时解除抵制日货的心里底线。
注:命令提示符采用 bash 风格, # 表示需要 root 权限, $ 就是不需要。
1、安装
Debian 包安装没什么可说的:
代码: 全选
# apt-get install pbuilder
值得注意的是目前的 cdebootstrap 有问题,大家要暂时使用 debootstrap 。
2、配置
全局配置文件在 /etc/pbuilderrc ,里面有各项参数的详细说明。个人的配置自然是编辑 ~/.pbuilderrc 。以我目前的为例:
代码: 全选
MIRRORSITE=http://http.us.debian.org/debian # 镜像,可选 geekbone 或 cn99 。
APTCACHE="/var/cache/apt/archives" # 下载的 deb 文件缓存位置。让其和系统共用一个缓存,可以节省空间。
DEBOOTSTRAP="debootstrap" # 说过 cdebootstrap 暂时不能用啦,默认又用的是 cdebootstrap ,只好在这里改掉啦
“那怎么改呢?” 有个 --override-config 参数,后面再说了
另外, pbuilder 需要 root 权限(chroot 需要),但并不修改系统,因此配置 sudo 来运行 pbuilder 比较方便。
最后,需要注意的是,请务必在你的/etc/apt/sources.list开启deb-src的源,这样pbuilder才可以通过apt-get source下载软件包源码。
3、创建环境:
配置好后,可以用 create 参数来创建 chroot 环境。最简单的命令是
代码: 全选
# pbuilder create
--basetgz [base.tgz location]
--distribution [distribution(sid|etch|lenny|experimental)]
详细的参数请参考 pbuilder --help 。
比如如果要创建 etch 环境:
代码: 全选
# pbuilder create --distribution etch
4、更新 pbuilder chroot 环境:
sid 升级是很频繁的,如果不升级 chroot 环境,某些旧的包可能就会从 repository 里删除,导致编译依赖安装失败。升级是很容易的。
代码: 全选
# pbuilder --update
代码: 全选
# pbuilder update --override-config --mirror http://mirrors.geekbone.org/debian
5、编译 Debian 包:
终于开始干正事儿了,我这里以编译打上 MSN 群补丁的 pidgin 为例
首先是建个目录:
代码: 全选
$ mkdir ~/pidgin-build && cd ~/pidgin-build
$ apt-get source pidgin
接着下载下来本帖附件中的 MSN 群补丁(目前适用于 2.3.x )并解压:
代码: 全选
$ gunzip 99_msn_group.patch.gz
代码: 全选
$ mv 99_msn_group.patch pidgin-2.3.1/debian/patches
我们编译出来的版本要大于 Debian 的版本,否则更新的时候会被要求重新下载。目前 pidgin 的版本是 2.3.1-2 ,那我们就起名为 2.3.1-2msngroup:
代码: 全选
$ cd pidgin-2.3.1/debian
$ dch -v 2.3.1-2msngroup //自动添加一条Changelog信息
pidgin (2.3.1-2msngroup) unstable; urgency=low
*
-- somebody Mon, 17 Dec 2007 10:49:57 +0800
在星号后面随便填些什么就可以了,比如 Add msn group member name display patch. 然后保存退出。
下面就可以编译啦。 pbuilder 默认会把编译的结果放到 /var/cache/pbuilder/result 下,不过我们可以通过 --buildresult 来指定编译完成的包的位置。退到源码目录那一层,也就是 pidgin-2.3.1 下,执行:
代码: 全选
$ cd .. # 或者 cd ~/pidgin-build/pidgin-2.3.1 或者 cd $(你自己创建的 pidgin-build 目录)/pidgin-2.3.1
# pdebuild --buildresult ..
这时候各位可以发现,由于编译是在 chroot 里完成的,宿主系统没有任何的修改,只是增加了编译时需要的 deb 包的缓存,想必应该比 apt-get build-dep 干净多了
方法就是这样,怎么用就要靠各位发挥想象力啦
6、几点建议:
(1) 编译前一定要先 pbuilder --update ,否则可能会无法安装依赖喔
(2) 在 backport 的时候失败是很正常的,因为新软件可能会依赖更高版本的组件。比如 stardict 需要 debhelper >=5.0.51 ,而 etch 只有 5.0.42 ,因此不进行修改是不行的。至于怎么改就超出本文的范围了
(3) 如果 backport 一系列软件是不能用 pbuilder 的。因为 pbuilder 总是会从 Debian 的 repository 来下载软件在 chroot 里使用,与你系统中的软件包无关。这种情况下大概只有老老实实 apt-get build-dep ,再依次编译各个组建(当然,第一个还是可以用 pbuilder 的 )。