Diff for "Running/LXC"

Not logged in - Log In / Register

Differences between revisions 62 and 63
Revision 62 as of 2011-11-01 16:56:17
Size: 6014
Editor: sidnei
Comment: Some updates for oneiric.
Revision 63 as of 2011-12-14 20:28:08
Size: 6350
Editor: gary
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was copied from Running/VirtualMachine
Line 14: Line 13:
sudo apt-get install lxc sudo apt-get install lxc libvirt-bin
Line 16: Line 15:

 1. Work around Bug:800456 (fixed in oneiric) and Bug:801002

 {{{
sudo apt-get install cgroup-lite libvirt-bin
}}}

 1. Work around Bug: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
}}}

 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.
    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.
Line 45: Line 22:
#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
Line 53: Line 24:
 1. Create a container [oneiric]
1. Create a container
Line 64: Line 36:
 1. 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.

 1. [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
}}}
Line 85: Line 41:
    The initial credentials are root:root.       1. You'll be logged in as your user, but without sudo powers. You'll want to be root for much of the next few steps, so "su root". The initial credentials are root:root.
Line 98: Line 55:
 1. Enable multiverse (rocketfuel-setup wants it, don't ask me why).  1. Enable multiverse (rocketfuel-setup wants it, don't ask me why).  See the "Updating" section below for more details on this.
Line 102: Line 59:
#natty
apt-get install python-software-properties
apt-add-repository ppa:ubuntu-virt
apt-get update
# oneiric:
Line 108: Line 60:
# oneiric if you have a localised (non-C) locale: # if you have a localised (non-C) locale:
Line 113: Line 65:

# natty
apt-get install bzr less sudo lxcguest
# select I for 'install' when prompted about console.conf
}}}

 1. Inside the container add the user [natty only]:
 {{{
adduser --uid $id $username
Line 137: Line 80:
Line 139: Line 81:
 1. natty only: To stop it now run 'poweroff -n'

 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:
    * 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
}}}
 1. To stop it now run 'poweroff -n' in the lxc instance and then 'sudo lxc-stop -n lucid-test-lp' in the host.
Line 167: Line 100:
= Updating =

Updating deb packages in an LXC has a few issues as of this writing.

 1. To get started, you'll need to add the apt sources. Here's an example /etc/apt/sources.list.
 {{{
deb http://archive.ubuntu.com/ubuntu lucid main universe
deb-src http://archive.ubuntu.com/ubuntu lucid main universe
deb http://archive.ubuntu.com/ubuntu lucid-updates main universe
deb-src http://archive.ubuntu.com/ubuntu lucid-updates main universe
deb http://archive.ubuntu.com/ubuntu lucid main multiverse
deb-src http://archive.ubuntu.com/ubuntu lucid main multiverse
deb http://archive.ubuntu.com/ubuntu lucid-updates main multiverse
deb-src http://archive.ubuntu.com/ubuntu lucid-updates main multiverse
}}}

 1. [[Bug:902190|Bug 902190]] describes the first problem when you will try to update. To work around this, at the bottom of "/var/lib/lxc/''server''/config" (e.g. /var/lib/lxc/lucid-test-lp/config) add this snippet:
 {{{
# Mods to allow udev upgrade
lxc.cgroup.devices.allow = c 108:0 rwm
lxc.cgroup.devices.allow = b 7:0 rwm
lxc.cgroup.devices.allow = c 10:200 rwm
}}}

 1. [[Bug:892892|Bug 892892]] describes the next problem you will encounter. Serge Hallyn reports that Stephane Graber has fixed this in Precise, and they will SRU it into Oneiric. [He suggests that for a quick fix, we can just turn off the devices cgroup - edit the container's config and comment out all 'lxc.cgroup.devices =' lines, but gary was unable to get this to work.] A quick workaround is to specify that you don't want to upgrade this package. I did it somehow with an aptitude gyration; documented approaches welcome.

= Problems =

== lxc-create fails with errors that it is unable to access archive.ubuntu.com ==

Gary encountered this problem when trying to contain a second lxc container. After trying more careful approaches, Serge Hallyn recommended that we just wipe out the lxc cache. "rm -rf /var/cache/lxc/*". This solved the problem. He went on to say that he wondered if we ought to automatically purge the cache every week or so, so the cache does seem potentially problematic.

== Other problems ==

If other lxc users don't have an idea (known lxc users as of this writing include lifeless, wgrant, frankban and gary_poster) try asking hallyn or Spamaps on #ubuntu-server on freenode.

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 libvirt-bin
  2. 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
  3. Create a container
    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.
  4. Start the container
    sudo lxc-start -n lucid-test-lp
    • Ignore the warning about openssh crashing - it restarts on a later event.
  5. You'll be logged in as your user, but without sudo powers. You'll want to be root for much of the next few steps, so "su root". The initial credentials are root:root.
  6. 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'
    • Alternatively, if you add '192.168.122.1' (libvirt's dnmasq default address) to your /etc/resolv.conf you can use:
    ssh <container-name>. 
  7. The new container won't have your proxy / mirror settings preserved. Customise it at this point before going further if you care about this.
  8. Enable multiverse (rocketfuel-setup wants it, don't ask me why). See the "Updating" section below for more details on this.
  9. Install some additional packages we'll need to run rocketfuel-setup etc.
    apt-get install bzr less sudo
    # 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
  10. Inside the container grant the user sudo rights:
    adduser $username sudo
  11. And add their user group:
     addgroup --gid NNN $username
    where NNN is as reported by
     groups $username
  12. To stop it now run 'poweroff -n' in the lxc instance and then 'sudo lxc-stop -n lucid-test-lp' in the host.
  13. Start it up again - headless now, we have the ip address from before.
    sudo lxc-start -n lucid-test-lp -d
  14. ssh <vm IP address> to connect to the VM. Your ssh key is already present because of the bind mount to your home dir.

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

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

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

Updating

Updating deb packages in an LXC has a few issues as of this writing.

  1. To get started, you'll need to add the apt sources. Here's an example /etc/apt/sources.list.
    deb http://archive.ubuntu.com/ubuntu lucid main universe
    deb-src http://archive.ubuntu.com/ubuntu lucid main universe
    deb http://archive.ubuntu.com/ubuntu lucid-updates main universe
    deb-src http://archive.ubuntu.com/ubuntu lucid-updates main universe
    deb http://archive.ubuntu.com/ubuntu lucid main multiverse
    deb-src http://archive.ubuntu.com/ubuntu lucid main multiverse
    deb http://archive.ubuntu.com/ubuntu lucid-updates main multiverse
    deb-src http://archive.ubuntu.com/ubuntu lucid-updates main multiverse
  2. Bug 902190 describes the first problem when you will try to update. To work around this, at the bottom of "/var/lib/lxc/server/config" (e.g. /var/lib/lxc/lucid-test-lp/config) add this snippet:

    # Mods to allow udev upgrade
    lxc.cgroup.devices.allow = c 108:0 rwm
    lxc.cgroup.devices.allow = b 7:0 rwm
    lxc.cgroup.devices.allow = c 10:200 rwm
  3. Bug 892892 describes the next problem you will encounter. Serge Hallyn reports that Stephane Graber has fixed this in Precise, and they will SRU it into Oneiric. [He suggests that for a quick fix, we can just turn off the devices cgroup - edit the container's config and comment out all 'lxc.cgroup.devices =' lines, but gary was unable to get this to work.] A quick workaround is to specify that you don't want to upgrade this package. I did it somehow with an aptitude gyration; documented approaches welcome.

Problems

lxc-create fails with errors that it is unable to access archive.ubuntu.com

Gary encountered this problem when trying to contain a second lxc container. After trying more careful approaches, Serge Hallyn recommended that we just wipe out the lxc cache. "rm -rf /var/cache/lxc/*". This solved the problem. He went on to say that he wondered if we ought to automatically purge the cache every week or so, so the cache does seem potentially problematic.

Other problems

If other lxc users don't have an idea (known lxc users as of this writing include lifeless, wgrant, frankban and gary_poster) try asking hallyn or Spamaps on #ubuntu-server on freenode.

References

Alternatively

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