Diff for "Running/LXC"

Not logged in - Log In / Register

Differences between revisions 27 and 28
Revision 27 as of 2011-06-22 19:37:41
Size: 3605
Editor: lifeless
Comment: more
Revision 28 as of 2011-06-22 19:42:10
Size: 3640
Editor: lifeless
Comment: and grant sudo access
Deletions are marked like this. Additions are marked like this.
Line 60: Line 60:
 1. Start it  1. (Outside the container) grab your user id and username so you can setup a bind mount outside the container:
{{{
id -u
id -nu
}}}

 1. Start the container
Line 79: Line 85:
 1. (Outside the container) grab your user id and username so you can setup a bind mount outside the container:
{{{
id -u
id -nu
}}}
Line 88: Line 88:
adduser $username sudo

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
  1. Work around 800456

sudo apt-get install cgroup-bin
  1. 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;
}
EOF
sudo service cgconfig restart
  1. 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.
  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
  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. (Outside the container) grab your user id and username so you can setup a bind mount outside the container:

id -u
id -nu
  1. 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.
  1. 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'
  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.
  2. Install some additional packages we'll need to run rocketfuel-setup etc.

apt-get install bzr less sudo
  1. Inside the container add the user:

adduser --uid $id $username
adduser $username sudo
  1. To stop it now run 'poweroff -n'.
  2. 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. Start it up again - headless now, we have the ip address from before.

sudo lxc-start -n lucid-test-lp -d
  1. ssh <vm IP address> to connect to the VM. Your ssh key is already present because of the bind mount to your home dir.

  2. You can now follow the getting-started on LP instructions. Be warned that changes in ~ will affect you outside the container.

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

References

Alternatively

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

Running/LXC (last edited 2017-09-22 08:30:24 by cjwatson)