3931
Comment: lxcguest
|
4233
linux32
|
Deletions are marked like this. | Additions are marked like this. |
Line 82: | Line 82: |
1. Enable multiverse (rocketfuel-setup wants it, don't ask me why). |
|
Line 108: | Line 110: |
# if you created a 32 bit lxc on a 64 bit host you need to mask # the architecture: (this will also be covered when lxc supports # this directly - e.g. in oneiric sudo lxc-start -n lucid-test-lp -d usr/bin/linux32 sbin/init |
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
- Install lxc
sudo apt-get install lxc
Work around 800456
sudo apt-get install cgroup-bin
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
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.
- 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) lxc.cgroup.devices.allow = c 10:229 rwm EOF
- 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.
- (Outside the container) grab your user id and username so you can setup a bind mount outside the container:
id -u id -nu
- 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.
- 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'
- The new container won't have your proxy / mirror settings preserved. Customise it at this point before going further if you care about this.
- Enable multiverse (rocketfuel-setup wants it, don't ask me why).
- 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
- Inside the container add the user:
adduser --uid $id $username adduser $username sudo
- To stop it now run 'poweroff -n'.
- 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
- Start it up again - headless now, we have the ip address from before.
sudo lxc-start -n lucid-test-lp -d # if you created a 32 bit lxc on a 64 bit host you need to mask # the architecture: (this will also be covered when lxc supports # this directly - e.g. in oneiric sudo lxc-start -n lucid-test-lp -d usr/bin/linux32 sbin/init
ssh <vm IP address> to connect to the VM. Your ssh key is already present because of the bind mount to your home dir.
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 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