Diff for "Running/LXC"

Not logged in - Log In / Register

Differences between revisions 47 and 56 (spanning 9 versions)
Revision 47 as of 2011-07-19 04:15:44
Size: 4640
Editor: lifeless
Comment: oneiric
Revision 56 as of 2011-08-03 05:12:09
Size: 5898
Editor: lifeless
Comment: moah gotcha
Deletions are marked like this. Additions are marked like this.
Line 22: Line 22:
 1. Work around Bug:784093  1. Work around Bug:784093 (fixed in oneiric - doing this will break oneiric)
Line 35: Line 35:
 1. Work around Bug:798476 (optional if you run i386 or have a -tonne- of memory and don't care about 64-bit footprint.  1. Work around Bug:798476 (fixed in oneiric) (optional if you run i386 or have a -tonne- of memory and don't care about 64-bit footprint.
Line 44: Line 44:
#fuse (workaround for Bug:800886) #fuse (workaround for Bug:800886 (fixed in oneiric))
Line 52: Line 52:
 1. Create a container [oneiric]
 {{{
sudo lxc-create -t ubuntu -n lucid-test-lp -f /etc/lxc/local.conf -- -r lucid -a i386 -b robertc
}}}
   If you want a proxy:
   {{{
sudo http_proxy=http://host:port/ lxc-create -t ubuntu -n lucid-test-lp -f /etc/lxc/local.conf -- -r lucid -a i386 -b robertc
}}}
 
  And if you want to set a custom mirror, similar to http_proxy, but set MIRROR= instead.
Line 53: Line 63:
 1. Create a container  1. Create a container [natty]
Line 63: Line 73:
 1. (Outside the container) grab your user id and username so you can setup a bind mount outside the container:  1. [natty only] (Outside the container) grab your user id and username so you can setup a bind mount outside the container:
Line 90: Line 100:
# oneiric:
apt-get install bzr less sudo
# oneiric if you have a localised (non-C) locale:
# not doing this will cause postgresql to fail to install, with -hilarious- results as database-developer-setup will think you have 8.2 installed.
# You can tell if you need this if the prior apt commands spewed locale warnings.
# Pick your specific language pack.
apt-get install language-pack-en

# natty
Line 94: Line 113:
 1. Inside the container add the user:  1. Inside the container add the user [natty only]:
Line 97: Line 116:
}}}

 1. Inside the container grant the user sudo rights:
 {{{
Line 100: Line 123:
 1. To stop it now run 'poweroff -n' (normally you would use lxc-stop, but see Bug:784093).  1. Workaround Bug:819621 [oneiric only]:
 {{{
 wget https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/819621/+attachment/2249500/+files/lxcmount.conf -o /etc/init/lxcmount.conf
 }}}
 
 1. natty only: To stop it now run 'poweroff -n'
Line 102: Line 130:
 1. Setup a bind mount so you can access your home dir (and thus your LP source code) from within the lxc container:  1. oneiric only: To stop it now run sudo lxc-stop -n lucid-test-lp (Bug:819621 more or less).

 1. natty only:
Setup a bind mount so you can access your home dir (and thus your LP source code) from within the lxc container:
Line 121: Line 151:
{{{  {{{

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

Why?

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 (fixed in oneiric) and 801002

    sudo apt-get install cgroup-bin libvirt-bin
  3. Work around 784093 (fixed in oneiric - doing this will break oneiric)

    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
  4. Work around 798476 (fixed in oneiric) (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
    lxc.network.type=veth
    lxc.network.link=virbr0
    lxc.network.flags=up
    #fuse (workaround for Bug:800886 (fixed in oneiric))
    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
    EOF
  6. Create a container [oneiric]
    sudo lxc-create -t ubuntu -n lucid-test-lp -f /etc/lxc/local.conf -- -r lucid -a i386 -b robertc
    • If you want a proxy:
      sudo http_proxy=http://host:port/ lxc-create -t ubuntu -n lucid-test-lp -f /etc/lxc/local.conf -- -r lucid -a i386 -b robertc
    • And if you want to set a custom mirror, similar to http_proxy, but set MIRROR= instead.
  7. Create a container [natty]
    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.
  8. [natty only] (Outside the container) grab your user id and username so you can setup a bind mount outside the container:
    id -u
    id -nu
  9. 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.
  10. 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'
  11. The new container won't have your proxy / mirror settings preserved. Customise it at this point before going further if you care about this.
  12. Enable multiverse (rocketfuel-setup wants it, don't ask me why).
  13. Install some additional packages we'll need to run rocketfuel-setup etc.
    apt-get install python-software-properties
    apt-add-repository ppa:ubuntu-virt
    apt-get update
    # oneiric:
    apt-get install bzr less sudo
    # oneiric if you have a localised (non-C) locale:
    # not doing this will cause postgresql to fail to install, with -hilarious- results as database-developer-setup will think you have 8.2 installed.
    # You can tell if you need this if the prior apt commands spewed locale warnings.
    # Pick your specific language pack.
    apt-get install language-pack-en
    
    # natty
    apt-get install bzr less sudo lxcguest
    # select I for 'install' when prompted about console.conf
  14. Inside the container add the user [natty only]:
    adduser --uid $id $username
  15. Inside the container grant the user sudo rights:
    adduser $username sudo
  16. Workaround 819621 [oneiric only]:

     wget https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/819621/+attachment/2249500/+files/lxcmount.conf -o /etc/init/lxcmount.conf
  17. natty only: To stop it now run 'poweroff -n'
  18. oneiric only: To stop it now run sudo lxc-stop -n lucid-test-lp (819621 more or less).

  19. natty only: 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
  20. Start it up again - headless now, we have the ip address from before.
    sudo lxc-start -n lucid-test-lp -d
  21. ssh <vm IP address> to connect to the VM. Your ssh key is already present because of the bind mount to your home dir.

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

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

  24. rabbitmq may fail to start up. If that happens it appears to be a mnesia glitch best sorted by zapping mnesia.

    sudo rm -rf /var/lib/rabbitmq/mnesia/rabbit/*
    sudo service rabbit-mq start

References

Alternatively

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