= 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.