Diff for "Running/LXC"

Not logged in - Log In / Register

Differences between revisions 23 and 106 (spanning 83 versions)
Revision 23 as of 2011-06-22 06:40:59
Size: 4028
Editor: lifeless
Comment: create the user
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.
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was copied from Running/VirtualMachine
This page explains how to set up and run Launchpad (for development) inside a LXC.
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.
Line 6: Line 5:
Launchpad development setup makes significant changes to your machine; its nice to be unaffected by those except when you are actually doing such development. 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.
Line 8: Line 7:
Also, launchpad has some limitations on concurrent testing per-machine and so forth - multiple container's can be used to work around this. 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.
Line 10: Line 9:
= Create an LXC container =
Line 11: Line 11:
= Make a LXC =

 1. Install lxc

{{{
 1. Install LXC's userspace tools.
 {{{
Line 19: Line 16:
 1. Work around Bug:800456
{{{
sudo apt-get install cgroup-bin
 1. 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
Line 24: Line 21:
 1. Work around Bug:784093  1. Start the container in the background.
 {{{
sudo lxc-start -n lpdev -d
}}}

 1. Find its IP address.
 {{{
sudo lxc-ls --fancy
}}}
    
 1. `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.

 1. '''[Inside the container]''' Install Bazaar so you can run `rocketfuel-setup`.
 {{{
 sudo apt-get install bzr
}}}

 1. '''[Inside the container]''' You can now follow the normal [[Running|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.

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


= Troubleshooting =

<<Anchor(postgresql-locale-breakage)>>
== 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:
Line 27: Line 59:
sudo dd of=/etc/cgconfig.conf << EOF
mount {
 cpu = /sys/fs//cgroup/cpu;
 cpuacct = /sys/fs/cgroup/cpu;
 devices = /sys/fs/cgroup/cpu;
 memory = /sys/fs/cgroup/cpu;
}
EOF
sudo service cgconfig restart
apt-get install language-pack-en
Line 38: Line 62:
 1. Work around Bug:798476 (optional if you run i386 or have a -tonne- of memory and don't care about 64-bit footprint.
    Grab the patch from the bug and apply it to /usr/lib/lxc/templates/lxc-lucid. If you're running i386 already or want a 64-bit lxc then do not pass arch= on the lxc-create command line.

 1. Create a config for your containers
{{{
sudo dd of=/etc/lxc/local.conf << EOF
lxc.network.type=veth
lxc.network.link=virbr0
lxc.network.flags=up
EOF
}}}

 1. Create a container
{{{
sudo arch=i386 lxc-create -n lucid-test-lp -t lucid -f /etc/lxc/local.conf
}}}
    If you want to use a proxy
{{{
sudo arch=i386 http_proxy=http://host:port/ lxc-create -n lucid-test-lp -t lucid -f /etc/lxc/local.conf
}}}
    And if you want to set a custom mirror, similar to http_proxy, but set MIRROR= instead.

 1. Start it
{{{
sudo lxc-start -n lucid-test-lp
}}}
    Ignore the warning about openssh crashing - it restarts on a later event.
    The initial credentials are root:root.

 1. To stop it log in and run 'poweroff -n'.
 
 1. The new container won't have your proxy / mirror settings preserved. Customise it at this point before going further if you care about this.

 1. Grab your user id and username so you can setup a bind mount outside the container:
{{{
id -u
id -nu
}}}

 1. Inside the container add the user:
{{{
adduser --uid $id $username
}}}

 1. below this is not yet updated from the vm instructions

 1. After its installed, connect to the image and install {{{acpid}}} and {{{openssh-server}}}

 1. Use ssh-copy-id to copy your public key into the VM.

 1. ssh -A <vm IP address> to connect to the VM.

 1. {{{bzr whoami "Your Name <your.email@example.com>"}}} to set your bzr identity in the VM.

 1. You can now follow the [[Getting|getting-started]] on LP instructions.

= References =

See also this email thread about [[https://lists.launchpad.net/launchpad-dev/msg03456.html|running Launchpad in a virtual machine]], and this [[https://lists.launchpad.net/launchpad-dev/msg03454.html|discussion of the differences]] between running in a [[Running/Schroot|chroot]] environment and running a VM. [[Running/RemoteAccess]] has a discussion for how you can configure the VM to allow the host machine to access the web pages, etc.

= Alternatively =

You can skip some manual steps of installing from an ISO using a command like this:

{{{
sudo ubuntu-vm-builder kvm lucid --domain vm --dest ~/vm/lp-dev \
 --hostname lp-dev \
 --mem 2048 --cpus 2 \
 --components main,universe,multiverse,restricted \
 --mirror http://10.113.3.35:3142/mirror.internode.on.net/pub/ubuntu/ubuntu \
 --libvirt qemu:///system \
 --debug -v \
 --ssh-user-key ~/.ssh/id_rsa.pub --ssh-key ~/.ssh/id_rsa.pub \
 --rootsize 24000 \
 --user $USER
}}}

After installation completes, it should show up in your virt-manager menu.

= In LXC =

It seems like it would be nice to run Launchpad in [[http://lxc.teegra.net/|LXC containers]]: they should be more efficient than a VM (especially with regard to memory and disk) but more isolated than a chroot. More testing or documentation is needed.
If you didn't install the language pack before running rocketfuel-setup,
you'll need to run `sudo pg_createcluster 9.1 main` afterwards to fix
the damage.

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.

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.1 main afterwards to fix the damage.