Pbuilder, constructs a chroot system and builds a package inside the chroot. It is an ideal system to use to check that a package has correct build dependencies and to build clean packages to be tested and distributed. Debian uses pbuilder for packaging and they have lotsa manuals...




Pbuilder manual - Junichi Uekawa


Ubuntu also uses Pbuilder for all their packaging work. Ubuntu has a Packaging Guide but i was following the instruction on the Ubuntu wiki page while trying to install it on hardy. Installed the dependencies and tried to create it.

$sudo pbuilder create --distribution hardy --othermirror "deb http://archive.ubuntu.com/ubuntu hardy main restricted universe multiverse"

Error!! "Command line parameter [.dsc] is not a valid .dsc file name"

The .pbuilderrc file was supposed to be created automagically but it wasnt.


But it was nigelb and geser to the rescue and its the real-time responses that makes me addicted to IRC but I find it amusing that we use cryptic and terse mode of communication on irc as compared to complete sentences in email/forums. hmmm...not sure if this is good or bad in the long runbut switching modes suddenly makes it kinda weird.

$sudo pbuilder create

$sudo pbuilder update --override-config

Upgrading for distribution hardy
Building the build Environment
extracting base tarball [/var/cache/pbuilder/base.tgz]
creating local configuration
copying local configuration
Installing apt-lines
mounting /proc filesystem
mounting /dev/pts filesystem
policy-rc.d already exists
Refreshing the base.tgz
upgrading packages
Hit http://archive.ubuntu.com hardy Release.gpg
Hit http://archive.ubuntu.com hardy Release
Hit http://archive.ubuntu.com hardy/main Packages
Reading package lists... Done
dpkg - warning: ignoring request to remove lilo which isn't installed.
Obtaining the cached apt archive contents
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Reading package lists... Done
Building dependency tree
Reading state information... Done
build-essential is already the newest version.
dpkg-dev is already the newest version.
apt is already the newest version.
aptitude is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Copying back the cached apt archive contents
unmounting dev/pts filesystem
unmounting proc filesystem
creating base tarball [/var/cache/pbuilder/base.tgz]
cleaning the build env
removing directory /var/cache/pbuilder/build//15479 and its subdirectories

...and pbuilder was ready to be used.

$sudo apt-get update

Next it was pulling a package to build and source it via wget, apt-get, or dget for the .dsc file from packages.ubuntu.com -- only for packages in the ubuntu repo. If your code sits as a branch on your cvs, it wont be pulled from packages.ubuntu.com.

The 'Packaging from Scratch' section asks you to create a directory before using wget but its a different method when you are using a cvs. If its hosted on LP, use bzr to pull it::

$sudo bzr export -r73 /dest/dir lp:~systers/systers/stable

and make sure you dont create the "/dest/dir" by hand as bzr will protest that the file exists in the target directory but the target dir will be empty. Bzr export needs a non-existing destination as it will create the directory owned to root. Somewhere in the middle of changing the ownership it simply locked me out ...wtf? and the next steps failed quite obviously. Then I had to waste a lot of time deleteing each file and folder.

In between this, Bescom decided to be the royal pita that they usually are, conked off power for half the day-- they had some work being done at the supplying station and the engineer was even kind enough to warn the residents of our area that an electric pole was going to be replaced in the street this week so be prepared for power outages at intermittent intervals of 10-15 minutes outage all day as they would be testing. WTF? Telling him that electrical appliances dont tolerate this well got the stock reply "install an UPS". How kind of him to enlighten us. Dont I just love the way our government servants treat the tax-paying citizens.

Adding to the annoyance, nothing worked after that. dh_make, used to create a template for packaging would not be invoked and I recall reading somewhere that dh_make was supposed to be done right the first time, else it would not work. 

$dpkg-source -x *.dsc
dpkg-source: error: cannot open .dsc file ./*.dsc: No such file or directory

Oh ok, now I need to find out a solution for that as well as how to create a .dsc file for the source pulled from LP.