有很多方法可以在一个干净而可复现的环境中构建Debian软件包。其中两种最常用的是pbuilder和sbuild。个人而言,我一直使用pbuilder。我发现pbuilder更容易使用和维护。我还没有找到任何对这两者进行并排比较的信息。我错过了什么?
使用sbuild相比pbuilder有哪些优势呢?
和Emmet意见不合总是很危险的,所以让我先承认他的答案可能更正确。然而,就个人而言,我发现pbuilder更加用户友好且开箱即用的性能更佳。
如果你使用的是Ubuntu 12.10或更高版本,请务必安装优秀的pbuilder-scripts,它们是一组非常友好的包装器,可以轻松使用原始的pbuilder。
如果你使用的是Ubuntu 12.04,你可以从后备存储库中安装pbuilder-scripts。
现在,让我们比较和对比等效操作的用户友好性。在这些示例中,我将演示如何在x86主机上使用ARM chroot,但概念同样适用于在x86主机上使用x86 chroot。请记住,我正在使用pbuilder-scripts包装器。
需要注意的一点是,pbuilder-scripts实现了一些约定,类似于Ruby on Rails为您做出一些决策,以便您可以快速入门。我会尽量在我们进行时指出这些约定。
创建一个chroot
mk-sbuild --arch=armhf quantal
# in addition to the chroot, creates a new, empty directory named ~/Projects/quantal-armhf
pcreate -a armhf -d quantal quantal-armhf
# standard debian/ubuntu method, works in any directory
apt-get source casper
# 'quantal-armhf' is the name of the chroot created earlier
# results in downloading package to: ~/Projects/quantal-armhf/casper/
pget quantal-armhf casper
schroot -c quantal-armhf
对决
ptest quantal-armhf
sudo schroot -c quantal-armhf-source -u root
ptest quantal-armhf --save
debuild -S -sa -I -i
sbuild -A --arch armhf -d quantal-armhf /path/to/casper-1.315.dsc
# must be invoked when pwd is ~/Projects/quantal-armhf/casper/casper-1.315
pbuild
pbuild,现在我们看到了使用pbuild约定的第一个重要胜利。这是一个非常简单的命令,没有其他需要记住的事情,相比之下,sbuild需要指定架构、chroot的名称,并且需要路径指向一个.sdc文件。另外,你必须记住使用sbuild生成一个新的.sdc文件,而pbuild会自动为你完成。
在chroot中再次构建同一软件包
在上面的例子中,无论是sbuild还是pbuild都会下载并安装其各自chroot中的构建依赖项。然而,pbuild会将已下载的.deb文件保存在/var目录下,所以如果你第二次调用pbuild,就不需要再次下载所有的构建依赖项(尽管它们仍然必须在chroot中安装)。sbuild不会缓存.deb文件(至少默认情况下不会),因此除了等待它们被安装到chroot中,你还必须重新下载所有的构建依赖项。
pbuilder-dist --login --save-after-login
来微调构建环境,因为例如我需要一个特殊的软件包,但它的 sources.list 条目默认情况下是不存在的。所以调整 chroot 环境似乎是有意义的。 - Alexis Wilke
sbuild
被用来创建Ubuntu的软件包,尽管据我所了解,Launchpad运行的是pbuilder
... - Alexis Wilke