Diff for "Running/LXC"

Not logged in - Log In / Register

Differences between revisions 106 and 108 (spanning 2 versions)
Revision 106 as of 2014-07-16 23:47:13
Size: 3237
Editor: wgrant
Comment: trusty is a thing now, so recommend that and halve the size of the instructions.
Revision 108 as of 2014-11-26 23:02:10
Size: 3914
Editor: wgrant
Comment: We now use PostgreSQL 9.3.
Deletions are marked like this. Additions are marked like this.
Line 42: Line 42:
== Assigning a static IP to the container ==

If you would like to assign a static IP to the container via dhcp:

  1. In `/etc/default/lxc-net` uncomment the line `LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf`
  2. Create `/etc/lxc/dnsmasq.conf` and add the following line (change IP to suit):
  {{{
dhcp-host=lpdev,10.0.3.210
}}}
  3. If running, stop the lpdev container.
  {{{
sudo lxc-stop --name lpdev
}}}
  4. Run `sudo service lxc-net restart` and start the container.

The lpdev container should restart with the specified IP.

Alternatively, a static IP can be configured directly in the container from `/var/lib/lxc/lpdev/rootfs/etc/network/interfaces`.
Line 63: Line 81:
you'll need to run `sudo pg_createcluster 9.1 main` afterwards to fix you'll need to run `sudo pg_createcluster 9.3 main` afterwards to fix

This page explains how to set up and run Launchpad (for development) inside an LXC container. LXC is the recommended environment for doing Launchpad development in; the core Launchpad team and CI infrastructure all use LXC extensively.

Why?

Launchpad development setup makes significant changes to your machine; it's nice to be unaffected by those when you're not doing such development. Also, multiple containers can be used to work around Launchpad's limitations regarding concurrent test runs on a single machine.

These instructions should work Ubuntu 14.04 LTS or later, and with some adaptation on any Linux distribution that uses LXC 1.0.0 or later. Older versions of LXC are significantly less reliable and polished, so we recommend upgrading to 14.04 LTS and removing /var/cache/lxc to ensure a clean, working start.

Create an LXC container

  1. Install LXC's userspace tools.
    sudo apt-get install lxc
  2. Create a container. You can use an HTTP proxy or alternate Ubuntu mirror by specifying an http_proxy or MIRROR environment variable after sudo. (amd64 works fine too, although it will use more RAM.)

    sudo lxc-create -t ubuntu -n lpdev -- -r precise -a i386 -b $USER
  3. Start the container in the background.
    sudo lxc-start -n lpdev -d
  4. Find its IP address.
    sudo lxc-ls --fancy
  5. ssh -A IP_ADDRESS_FROM_LXC_LS to connect to the container. Your username and password will match your account on the host system. If your SSH key is in your local authorized_keys file you shouldn't be prompted for a password, as your home directory (including public and private keys) is bind mounted into the container. The -A permits you to access Launchpad code hosting from within the container without needing to reenter passphrases.

  6. [Inside the container] Install Bazaar so you can run rocketfuel-setup.

     sudo apt-get install bzr
  7. [Inside the container] You can now follow the normal LP installation instructions. Be warned that changes in your home directory will also be seen outside the container and vice versa. If your home directory already has a Launchpad work area set up you'll want to run rocketfuel-setup --no-workspace to avoid trying to recreate it, but all subsequent steps are still required.

  8. Follow Running/RemoteAccess to set up access from the host's applications to the container's Launchpad instance.

Assigning a static IP to the container

If you would like to assign a static IP to the container via dhcp:

  1. In /etc/default/lxc-net uncomment the line LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf

  2. Create /etc/lxc/dnsmasq.conf and add the following line (change IP to suit):

    dhcp-host=lpdev,10.0.3.210
  3. If running, stop the lpdev container.
    sudo lxc-stop --name lpdev
  4. Run sudo service lxc-net restart and start the container.

The lpdev container should restart with the specified IP.

Alternatively, a static IP can be configured directly in the container from /var/lib/lxc/lpdev/rootfs/etc/network/interfaces.

Troubleshooting

launchpad-database-setup fails

PostgreSQL will fail to create a cluster during installation if your locale is configured to something non-C but not supported by the container, so you need to install the relevant language pack.

Modern LXC container templates do this automatically, but you will know you need to do it manually if bzr or apt commands have been spewing locale warnings.

For instance, if your computer has a localised English locale, use this:

apt-get install language-pack-en

If you didn't install the language pack before running rocketfuel-setup, you'll need to run sudo pg_createcluster 9.3 main afterwards to fix the damage.