From time to time I get e-mails about my wine-unstable packages being uninstallable. Most often it turns out, that the problem stems from using e.g. oldstable (Lenny) instead of at least stable (Squeeze). The same problem arises, if you wish to install the wine-unstable packages on a platform for which I don't offer binaries. In either case you need to build the package from source, which isn't as difficult, as many think.
This entry in my ongoing tips mini-series of posts is thus going to detail how you setup pbuilder and afterwards use it to build a package. Please note, that I'm just focusing on pbuilder here and ignore things like cowbuilder.
Preparations
The following steps are needed just once, in general. Some would be needed again, if you want to create a second base.tgz, e.g. for a different distribution.
-
Install pbuilder with your favourite package manager, e.g.
aptitude:
aptitude install pbuilder
- Become root
- Configure pbuilder. Have a look at /etc/pbuilderrc, /usr/share/doc/pbuilder/examples/pbuilderrc and the manual page for pbuilderrc for reference. If you want to change some settings made in /etc/pbuilderrc, create a /root/.pbuilderrc and override any settings you don't like.
-
Create the base.tgz (the chroot environment for your builds).
In the easiest case all your settings are made in the configuration files
and you just need to run
pbuilder --create
, which creates the base.tgz in /var/cache/pbuilder, unless you changed the configuration.
You should also note, that you can override certain settings, like the distribution or the path to (and name of) the base.tgz file created. See the manual page for pbuilder for all options and when they can be used.
Build a package
The following steps are needed for every build:
-
Download the source package, you want to build. No matter how you fetch them
(dget,
apt-get source
, …), you should end up with three files, one of them ending in .dsc. - Become root.
-
Update your base.tgz file:
pbuilder --update
. Again, see the manual page for further options. (You can skip this step, if you just created the base.tgz or you just updated it for another build.) -
Build the source package: run
pbuilder --build /path/to/source-package.dsc
(obviously you need to replace the last argument with a real path) -
If you haven't changed the configuration of pbuilder in that
regard, then your binaries end up in /var/cache/pbuilder/result.
Install the binaries, you want, from there (with
dpkg -i
).
Now you should be able to build your own packages from source!
And to answer one question, that some of you might have now ("Why use pbuilder at all and not just build the package with dpkg-buildpackage directly?"): because pbuilder allows you to reliably build in a clean environment. That can safe you a lot of trouble, especially if you modified the source package. And it helps to keep the number of installed packages on your system down.