Diff for "BuildFarm/TryOutBuildSlave"

Not logged in - Log In / Register

Differences between revisions 26 and 27
Revision 26 as of 2011-09-13 14:29:16
Size: 4003
Editor: henninge
Comment: new sha1 sum
Revision 27 as of 2015-08-24 08:01:22
Size: 0
Editor: blr
Comment: Mostly no longer relevant (xml rpc moved to HowToUseSoyuzLocally).
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= Try the build slave locally =

This overlaps with the buildd part of [[Soyuz/HowToUseSoyuzLocally|HowToUseSoyuzLocally]], but shows you how to set up the buildd in a chroot without customizing your own system setup for it.


== Build the package ==

{{{
  cd lib/canonical/buildd
  debian/rules package
  dpkg-buildpackage -b
}}}
Package is lib/canonical/launchpad-buildd*all.deb

== Set up pbuilder chroot ==

To avoid installing the launchpad-buildd package on my computer, I use pbuilder to create an manage a chroot environment.

Make sure you have pbuilder installed:
{{{
sudo apt-get install pbuilder
}}}

If {{{archive.ubuntu.com}}} is too far away from you network-wise, you can configure MIRRORSITE in {{{/etc/pbuildderrc}}} to use a mirror that's faster for you. Then do

{{{
  sudo pbuilder --create --distribution lucid
  sudo pbuilder --login --save-after-login
}}}

Now you should find yourself inside the chroot. To satisfy the NTP needs of the launchpad-buildd, define it to be the IP of ntp.ubuntu.com or whatever NTP server you like.

{{{
  echo "91.189.94.4 ntp.buildd" >> /etc/hosts
  exit
}}}

After exit, the chroot will be re-packaged by pbuilder to save the changes. You might choose to save other steps as well but usually I configure the chroot whenever I run it, like so.

{{{
  sudo pbuilder --login --inputfile lib/canonical/launchpad-buildd_*_all.deb
}}}

Inside the chroot again: Install and start buildd:

{{{
  dpkg -i /tmp/buildd/launchpad-buildd*all.deb
  apt-get -f install
  /etc/init.d/launchpad-buildd start
}}}

(The {{{dpkg}}} command line will give out errors about missing dependencies; the {{{apt-get}}} command line right after that fixes those.)

We need a package to try out the generation of translation templates. Eventually this will be pulled in via bazaar but now I do it manually. Obviously, this is specific to this type of build. Inside the chroot edit /etc/apt/sources.list to enable the deb-src line. Then pull in a source pacakge. Gimp has a couple of translation templates.

{{{
  apt-get update
  cd /home/buildd
  su buildd
  apt-get source gimp
}}}


== Upload chroot to librarian ==

''Outside the chroot, in another terminal (leave the buildd in the chroot running!)''
Get the builder chroot from https://edge.launchpad.net/api/devel/ubuntu/lucid/i386/chroot_url.
{{{
wget -O - -q https://edge.launchpad.net/api/devel/ubuntu/lucid/i386/chroot_url | xargs wget
}}}

'''HELP! This seems to be broken right now. The individual {{{chroot_url}}} API pages now seem to return empty documents. You can still get the right URL manually by leaving the "{{{chroot_url}}}" tail off the http path.''' —jtv

This should give you a file {{{chroot-ubuntu-lucid-i386.tar.bz2}}}. This is the chroot tarball for Lucid on i386.

Upload it to the Librarian, but while you're at it, also register it as the chroot for Lucid:
{{{
  make run & # (Need Librarian running, and make start_librarian didn't work)
  scripts/upload2librarian.py -f chroot-ubuntu-lucid-i386.tar.bz2
  --> http://launchpad.dev:58080/93/chroot-ubuntu-lucid-i386.tar.bz2
}}}

Copy that URL you got from `upload2librarian` for the next step.


== Drive slave through rpc ==

With the librarian still running, fire up a python shell and:
{{{
import xmlrpclib
proxy = xmlrpclib.ServerProxy('http://localhost:8221/rpc')
proxy.ensurepresent('d267a7b39544795f0e98d00c3cf7862045311464', 'http://launchpad.dev:58080/93/chroot-ubuntu-lucid-i386.tar.bz2', '', '')
proxy.build('1-1', 'translation-templates', 'd267a7b39544795f0e98d00c3cf7862045311464', {},
  {'archives': ['deb http://archive.ubuntu.com/ubuntu/ lucid main'], 'branch_url': '/home/buildd/gimp-2.6.8'})
proxy.status()
proxy.clean() # Clean up if it failed
}}}

You may have to calculate a new sha1sum of the chroot file.

== Inspect buildlog ==

Inside the chroot:
{{{
  less /home/bulidd/filecache-default/buildlog
}}}