Friday, March 19, 2010

pkgbuild and publishing via the file protocol

pkgbuild is the tool the kde-solaris project uses for building its packages. After a package is built and properly generated, it needs to be published to an IPS repository.
Here's an example of the publishing script generated by pkgbuild:
export PKG_REPO=${PKGBUILD_IPS_SERVER:-http://localhost:10000/}
eval `pkgsend open soprano@2.3.70,5.11-3` || exit 1
pkgsend include /export/home/test/packages/PKGMAPS/manifests/FOSSsoprano.manifest || exit 2
pkgsend close || exit 3
Due to an old bug, publishing packages with files bigger than ~100MB fails. This is the case of the Qt src package and also some Qt libraries when compiled with debug information. In such cases one has to resort to publishing the packages via the file protocol.
 But ... while publishing via http does not require any extra privileges, for the file protocol one has to have write permissions to the ips repository. Not really keen on using pfexec all the time, I first made sure the pkg server on the build machine is running under the same user who runs the build.

Then I patched pkgbuild so that if the environment variable PKG_REPO is set, it's value will be used for publishing.

As a result I can just do
export PKG_REPO=file:///export/home/test/repo
make KDEgdm-integration
Not only are we able to painlessly publish packages with big files now, there's also a noticeable speedup. The full KDE4 build (72 packages, ~10 hours on a 16 core machine) is 30-50 minutes faster since when the change was implemented.

No comments:

Post a Comment