Diff for "Running/LXC"

Not logged in - Log In / Register

Differences between revisions 1 and 58 (spanning 57 versions)
Revision 1 as of 2010-05-24 23:55:17
Size: 1063
Editor: lifeless
Comment: create
Revision 58 as of 2011-08-05 02:12:46
Size: 6036
Editor: lifeless
Comment: groups too
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. ## page was copied from Running/VirtualMachine
This page explains how to set up and run Launchpad (for development) inside a LXC.
Line 5: Line 6:
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 8:
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 container's can be used to work around this.

= Make a LXC =

 1. Install lxc
 {{{
sudo apt-get install lxc
}}}

 1. Work around Bug:800456 (fixed in oneiric) and Bug:801002
 {{{
sudo apt-get install cgroup-bin 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.

 1. 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
}}}
 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.

 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
}}}

 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.

 1. Enable multiverse (rocketfuel-setup wants it, don't ask me why).

 1. 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
}}}

 1. Inside the container add the user [natty only]:
 {{{
adduser --uid $id $username
}}}

 1. Inside the container grant the user sudo rights:
 {{{
adduser $username sudo
}}}

 1. And add their user group:
 {{{
 addgroup --gid NNN $username
 }}}
 where NNN is as reported by
 {{{
 groups $username
 }}}

 1. Workaround Bug:819621 [oneiric only]:
 {{{
 wget https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/819621/+attachment/2250880/+files/lxcmount.conf -o /etc/init/lxcmount.conf
 }}}
 
 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. 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.

 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.

 1. 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
}}}

= References =
Line 10: Line 168:
= Make a VM image = = Alternatively =
Line 12: Line 170:
 1. Install KVM

{{{
% sudo apt-get install virt-manager
}}}

 1. Download the Lucid server ISO

 1. Run virt-manager.

 1. Double click on localhost(QEMU)

 1. click on the New virtual machine icon

 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.

 1. After its installed, connect to the image and install {{{acpid}}} and {{{openssh-server}}}

 1. Use ssh-copy-id to copy your public key into the VM.

 1. ssh -A <vm IP address> to connect to the VM. You can now follow the [[Getting|getting-started]] on LP instructions.
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 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. And add their user group:
     addgroup --gid NNN $username
    where NNN is as reported by
     groups $username
  17. Workaround 819621 [oneiric only]:

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

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

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

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

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

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