1498
Comment: bzr whoami is needed.
|
5232
Trim stuff only relevant to <12.04 hosts
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
This page explains how to set up and run Launchpad (for development) inside a VM. | This page explains how to set up and run Launchpad (for development) inside a LXC. |
Line 5: | Line 5: |
Launchpad development setup makes numerous changes to your machine; its nice to be unaffected by those except when you are actually doing such development. | Launchpad development setup makes significant changes to your machine; its nice to be unaffected by those except when you are actually doing such development. |
Line 7: | Line 7: |
Also, launchpad has limitations on concurrent testing per-machine and so forth - multiple VM's can be used to work around this. | Also, Launchpad has some limitations on concurrent testing per-machine and so forth - multiple containers can be used to work around this. These instructions should work on Ubuntu 12.04 LTS and later. |
Line 9: | Line 9: |
= Make a LXC = | |
Line 10: | Line 11: |
= Make a VM image = | 1. Install lxc {{{ sudo apt-get install lxc libvirt-bin }}} |
Line 12: | Line 16: |
1. Install KVM | 1. Create a container. In the following commands, replace ''$username'' with your username on the host. {{{ sudo lxc-create -t ubuntu -n lpdev -- -r lucid -a i386 -b $username }}} * If you want a proxy: {{{ sudo http_proxy=http://host:port/ lxc-create -t ubuntu -n lpdev -- -r lucid -a i386 -b $username }}} * And if you want to set a custom mirror, similar to http_proxy, but set MIRROR= instead. 1. Start the container {{{ sudo lxc-start -n lpdev }}} Ignore the warning about openssh crashing - it restarts on a later event. 1. '''[Inside the container]''' Log in with your normal username and password. You'll have full sudo powers. 1. '''[Inside the container]''' Grab the IP address (handed out via LXC's dnsmasq 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. '''[Inside the container]''' Install some additional packages we'll need to run rocketfuel-setup etc. Most people with an English locale will simply want to do this: `apt-get install bzr language-pack-en` If your locale is not English, or if you want more details, try/read this. {{{ apt-get install bzr # 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 }}} 1. To stop it now run 'poweroff' in the lxc container. If it works smoothly, you will eventually be dumped back out to your host system. If it looks like it is hanging, then use "{{{sudo lxc-stop -n lpdev}}}" in the host. 1. Start it up again, headless this time (-d). The previous IP address will be used. {{{ sudo lxc-start -n lpdev -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, though using ssh -A might give you a better ssh agent experience. 1. You can now follow the [[Getting|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. 1. 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. = Problems = == rabbitmq does not start up == rabbitmq may fail to start up. If that happens it appears to be a [[http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2010-April/007024.html|mnesia glitch]] best sorted by zapping mnesia. {{{ sudo rm -rf /var/lib/rabbitmq/mnesia/rabbit/* sudo service rabbit-mq start }}} == database-developer-setup fails, and thinks you are on Postgres 8.2 == As noted above, if you have a localised (non-C) locale, you need to install your specific language pack. For instance, if your computer has a localised English locale, use this: |
Line 15: | Line 81: |
% sudo apt-get install virt-manager | apt-get install language-pack-en |
Line 18: | Line 84: |
1. Download the Lucid server ISO | == lxc-start hangs == |
Line 20: | Line 86: |
1. Run virt-manager. | [[http://paste.ubuntu.com/772517/|The symptom looks like this]]. It hangs after that. |
Line 22: | Line 88: |
1. Double click on localhost(QEMU) | No fix or workaround identified yet, other than making a new lxc container. |
Line 24: | Line 90: |
1. click on the New virtual machine icon | To debug, try '''{{{lxc-start -n $containername -l debug -o outout}}}''' and look at outout. |
Line 26: | Line 92: |
1. follow your nose here, using the ISO as the install media, and allocating no less than 2G of disk and 1G of memory. I suggest 4G if you can spare it. | == DNS fails inside the container == |
Line 28: | Line 94: |
1. After its installed, connect to the image and install {{{acpid}}} and {{{openssh-server}}} | After restarting in daemon mode and logging in as a regular user, DNS was not working. Ensure there is a nameserver in the container's /etc/resolv.conf, which is created at startup by resolverconf. Stopping and starting the container solved the problem. |
Line 30: | Line 97: |
1. Use ssh-copy-id to copy your public key into the VM. | == Random flakiness == |
Line 32: | Line 99: |
1. ssh -A <vm IP address> to connect to the VM. | Using lxc via juju I ran into all sorts of problems with DNS, version mismatches, etc. Since it was via juju I wasn't able to muck around with /etc/resolv.conf (the damage was done before I got the chance to ssh to the guest.) I found {{{sudo rm -rf /var/cache/lxc}}} solved the problem. It is rather brutal but worked. Of course the next run took a long time as all of that previously cached stuff had to be refetched. |
Line 34: | Line 101: |
1. {{{bzr whoami "Your Name <your.email@example.com>"}}} to set your bzr identity in the VM. | == Other problems == |
Line 36: | Line 103: |
1. You can now follow the [[Getting|getting-started]] on LP instructions. | 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. |
Line 40: | Line 107: |
See also this email thread about [[https://lists.launchpad.net/launchpad-dev/msg03456.html|running Launchpad in a virtual machine]], and this [[https://lists.launchpad.net/launchpad-dev/msg03454.html|discussion of the differences]] between running in a [[Running/Schroot|chroot]] environment and running a VM. | = Alternatively = You can also run in a [[Running/Schroot|chroot]] environment or a [[Running/VirtualMachine|VM]]. |
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 containers can be used to work around this. These instructions should work on Ubuntu 12.04 LTS and later.
Make a LXC
- Install lxc
sudo apt-get install lxc libvirt-bin
Create a container. In the following commands, replace $username with your username on the host.
sudo lxc-create -t ubuntu -n lpdev -- -r lucid -a i386 -b $username
- If you want a proxy:
sudo http_proxy=http://host:port/ lxc-create -t ubuntu -n lpdev -- -r lucid -a i386 -b $username
- And if you want to set a custom mirror, similar to http_proxy, but set MIRROR= instead.
- Start the container
sudo lxc-start -n lpdev
- Ignore the warning about openssh crashing - it restarts on a later event.
[Inside the container] Log in with your normal username and password. You'll have full sudo powers.
[Inside the container] Grab the IP address (handed out via LXC's dnsmasq 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'
[Inside the container] Install some additional packages we'll need to run rocketfuel-setup etc. Most people with an English locale will simply want to do this: apt-get install bzr language-pack-en
- If your locale is not English, or if you want more details, try/read this.
apt-get install bzr # 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
To stop it now run 'poweroff' in the lxc container. If it works smoothly, you will eventually be dumped back out to your host system. If it looks like it is hanging, then use "sudo lxc-stop -n lpdev" in the host.
- Start it up again, headless this time (-d). The previous IP address will be used.
sudo lxc-start -n lpdev -d
ssh <vm IP address> to connect to the VM. Your ssh key is already present because of the bind mount to your home dir, though using ssh -A might give you a better ssh agent experience.
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.
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.
Problems
rabbitmq does not start up
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
database-developer-setup fails, and thinks you are on Postgres 8.2
As noted above, if you have a localised (non-C) locale, you need to install your specific language pack. For instance, if your computer has a localised English locale, use this:
apt-get install language-pack-en
lxc-start hangs
The symptom looks like this. It hangs after that.
No fix or workaround identified yet, other than making a new lxc container.
To debug, try lxc-start -n $containername -l debug -o outout and look at outout.
DNS fails inside the container
After restarting in daemon mode and logging in as a regular user, DNS was not working. Ensure there is a nameserver in the container's /etc/resolv.conf, which is created at startup by resolverconf. Stopping and starting the container solved the problem.
Random flakiness
Using lxc via juju I ran into all sorts of problems with DNS, version mismatches, etc. Since it was via juju I wasn't able to muck around with /etc/resolv.conf (the damage was done before I got the chance to ssh to the guest.) I found sudo rm -rf /var/cache/lxc solved the problem. It is rather brutal but worked. Of course the next run took a long time as all of that previously cached stuff had to be refetched.
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