Not logged in - Log In / Register

Revision 40 as of 2011-06-23 19:08:56

Clear message

This page explains how to set up and run Launchpad (for development) inside a LXC.


Launchpad development setup makes significant changes to your machine; its nice to be unaffected by those except when you are actually doing such development.

Also, launchpad has some limitations on concurrent testing per-machine and so forth - multiple container's can be used to work around this.

Make a LXC

  1. Install lxc
    sudo apt-get install lxc
  2. Work around 800456 and 801002

    sudo apt-get install cgroup-bin libvirt-bin
  3. Work around 784093

    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;
    sudo service cgconfig restart
  4. Work around 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.
  5. Create a config for your containers
    sudo dd of=/etc/lxc/local.conf << EOF
    #fuse (workaround for Bug:800886)
    lxc.cgroup.devices.allow = c 10:229 rwm
    # part of the Bug:798476 workaround - 
    # remove if you are running a 64 bit lxc or
    # 32 bit on 32-bit base os
    lxc.arch = i686
  6. 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.
  7. (Outside the container) grab your user id and username so you can setup a bind mount outside the container:
    id -u
    id -nu
  8. Start the container
    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.
  9. Grab the ip address (handed out via libvirt's dhcp server) - you may wish to ssh in rather than using the console (seems to have better termcap experience).
    ip addr show dev eth0 | grep 'inet'
  10. The new container won't have your proxy / mirror settings preserved. Customise it at this point before going further if you care about this.
  11. Enable multiverse (rocketfuel-setup wants it, don't ask me why).
  12. Install some additional packages we'll need to run rocketfuel-setup etc.
    apt-add-repository ppa:ubuntu-virt
    apt-get update
    apt-get install bzr less sudo lxcguest
    # select I for 'install' when prompted about console.conf
  13. Inside the container add the user:
    adduser --uid $id $username
    adduser $username sudo
  14. To stop it now run 'poweroff -n' (normally you would use lxc-stop, but see 784093).

  15. Setup a bind mount so you can access your home dir (and thus your LP source code) from within the lxc container:
    • edit /var/lib/lxc/lucid-test-lp/fstab
    • Add a line:
    /home/$username /var/lib/lxc/lucid-test-lp/rootfs/home/$username none bind 0 0
  16. Start it up again - headless now, we have the ip address from before.
    sudo lxc-start -n lucid-test-lp -d
  17. ssh <vm IP address> to connect to the VM. Your ssh key is already present because of the bind mount to your home dir.

  18. You can now follow the getting-started on LP instructions. Be warned that changes in ~ will affect you outside the container. You will want to run rocketfuel-setup with --no-workspace if your home already has a workarea. You may need to run utilities/launchpad-database-setup separately too.

  19. You will need to edit rocketfuel-setup to change the command used to install packages. Some of the Launchpad developer dependencies recommend fuse be installed but LXC doesn't support fuse yet.
    Change "aptitude install $pkg" to "apt-get install -o Apt::Install-Recommends=no $pkg"
    • -- RobertCollins: this shouldn't be needed; the config above explicitly supports fuse. What are the symptoms you saw? Are we sure that running without recommends will bring in enough for LP development?

  20. You probably want to follow Running/RemoteAccess has a discussion for how you can configure things so your non-container browser can access web pages from within the container.



You can also run in a chroot environment or a VM.