= Setting up the Launchpad machine for parallel testing =
The [[https://launchpad.net/~yellow|Yellow Squad]] has developed a tool called [[https://launchpad.net/lpsetup|lpsetup]] to replace the original {{{rocketfuel-*}}} scripts that were used by Launchpad developers to get the required pieces needed to begin contributing to Launchpad. While {{{rocketfuel}}} was written for that single purpose, {{{lpsetup}}} has another mission, which is to allow the complete set up and running of {{{buildbot}}} for parallel testing on EC2 or locally on LXC.
''Create buildbot slave?''
== Assumptions ==
* No use of the juju charms at all.
* lpsetup can only be run inside the LXC.
* Root changes on the host will only be done via puppet scripts written by IS.
== Steps ==
=== Setup host as root ===
1. Install required packages and PPAs<
>{{{
apt-add-repository ppa:launchpad/ppa
apt-add-repository "deb http://us.archive.ubuntu.com/ubuntu/ lucid main universe"
apt-get update
apt-get install ssh bzr apache2.2-common buildbot/lucid testrepository haveged subunit lxc libvirt-bin lpsetup
}}}
1. Make buildbot user/group as needed<
>{{{
# Some versions of LXC require the user to have a group. Bug #942850.
addgroup buildbot
usermod --gid buildbot buildbot
usermod -s /bin/sh buildbot
}}}
1. Install buildbot from {{{http://bazaar.launchpad.net/~launchpad/lpbuildbot/public}}}
1. Generate ssh keys for buildbot user named {{{launchpad_lxc_id_rsa}}}
1. {{{ssh-keyscan -t rsa bazaar.launchpad.net >> ~buildbot/.ssh/known_hosts}}}
1. Add new public key to {{{~buildbot/.ssh/authorized_keys}}}
1. Set up bzr whoami: {{{bzr whoami “Launchpad PQM “}}}
1. Disable apparmor profiles for lxc:<
>{{{
ln -s /etc/apparmor.d/usr.bin.lxc-start /etc/apparmor.d/disable/
apparmor_parser -R /etc/apparmor.d/usr.bin.lxc-start}}}
1. Create /etc/lxc/lp-setup.conf:<
>{{{
lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
}}}
1. Create an LXC named “lptests”: {{{lxc-create -t ubuntu -n lptests -f /etc/lxc/lp-setup.conf -- -r lucid -a i386 -b buildbot}}}
1. Authorize root connections to the LXC: <
>{{{
mkdir /var/lib/lxc/lptests/rootfs/root/.ssh
cp ~buildbot/.ssh/authorized_keys /var/lib/lxc/lptests/rootfs/root/.ssh/
}}}
1. Append to {{{/var/lib/lxc/lptests/fstab}}} the line <
>{{{
none dev/shm tmpfs defaults 0 0}}}<
>
This step must be removed when {{{lucid}}} is no longer used as the LXC OS.
1. Start the lxc: {{{lxc-start -n lptests -d}}}
1. Wait for the LXC to start and accept connections.
1. Install the three scripts needed by buildbot: {{{lp-setup-lxc-build, lp-setup-lxc-cleanup, and lp-setup-lxc-test}}}. They will go into /usr/local/bin.
1. Create {{{/etc/sudoers.d/launchpad-buildbot}}} with the line<
>{{{
buildbot ALL = (ALL) NOPASSWD: /usr/local/bin/lp-setup-lxc-cleanup,
/usr/local/bin/lp-setup-lxc-build, /usr/local/bin/lp-setup-lxc-test}}}
1. {{{chmod 0440 /etc/sudoers.d/launchpad-buildbot}}}
1. Disable hardlink restriction (remove when Bug:944386 is resolved): <
>{{{
echo 0 > /proc/sys/kernel/yama/protected_nonaccess_hardlinks}}}
It is possible to connect via ssh to the container using:
{{{ssh -i ~buildbot/.ssh/launchpad_lxc_id_rsa `lp-lxc-ip -n lptests -i eth0`}}}
=== Inside the container as root ===
1. Install lpsetup:<
>{{{
apt-get install python-software-properties
add-apt-repository ppa:yellow/ppa
apt-get clean && apt-get update
apt-get upgrade
apt-get install lpsetup
}}}
1. Now use lpsetup to finish the provisioning of the container:<
>{{{
lp-setup init-target --yes -u buildbot -S launchpad_lxc_id_rsa --skip-steps setup_home -f "Launchpad PQM" -E launchpad-pqm@canonical.com}}}
=== Inside the container as buildbot ===
1. {{{lp-setup init-repo --yes --use-http --no-checkout -r ~/slaves/slave}}}
1. {{{lp-setup update ~/slaves/slave/devel --use-http}}}
=== Inside the container as root, again ===
1. {{{poweroff}}} If that doesn’t work {{{lxc-stop -n lptests}}} in the host.