Diff for "Running/LXD"

Not logged in - Log In / Register

Differences between revisions 8 and 18 (spanning 10 versions)
Revision 8 as of 2017-09-22 08:29:46
Size: 3555
Editor: cjwatson
Comment: production is on 16.04 now
Revision 18 as of 2022-06-17 12:36:25
Size: 75
Editor: cjwatson
Comment: update link
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 an LXD managed LXC container, superseding [[Running/LXC]].

= Why? =
Launchpad development setup makes significant changes to your machine; it's nice to be unaffected by those when you're not doing such development. Also, multiple containers can be used to work around Launchpad's limitations regarding concurrent test runs on a single machine.

LXD also has some nice snapshotting and ZFS capabilities that I find easier to use with LXD's frontend.

These instructions should work on Ubuntu 14.04 LTS or later. It has only been tested on 16.04 though.

= Create an LXD Container =
This assumes you already have LXD setup. If not, follow the instructions for getting lxd installed and configured on your network: https://linuxcontainers.org/lxd/getting-started-cli/

 1. If you haven't done so already, run this script to set up LXD to let you use your home directory inside the container:
{{{
#! /bin/sh

id=400000 # some large uid outside of typical range, and outside of already mapped ranges in /etc/sub{u,g}id
uid=$(id -u)
gid=$(id -g)
user=$(id -un)
group=$(id -gn)

# give lxc permission to map your user/group id through
sudo usermod --add-subuids ${uid}-${uid} --add-subgids ${gid}-${gid} root

# create a profile to control this
lxc profile create $user >/dev/null 2>&1

# configure profile
cat << EOF | lxc profile edit $user
name: $user
description: allow home dir mounting for $user
config:
  raw.lxc: |
    lxc.id_map = u $id $uid 1
    lxc.id_map = g $id $gid 1
  user.user-data: |
    #cloud-config
    runcmd:
      - "groupadd $group --gid $id"
      - "useradd $user --uid $id --gid $group --groups adm,sudo --shell /bin/bash"
      - "echo '$user ALL=(ALL) NOPASSWD:ALL' >/etc/sudoers.d/90-cloud-init-users"
      - "chmod 0440 /etc/sudoers.d/90-cloud-init-users"
devices:
  home:
    type: disk
    source: $HOME
    path: $HOME
EOF
}}}

 1. Create a container
 This command creates a Ubuntu 16.04 32-bit unprivileged container using the profile created in the previous step. Feel free to drop the i386 to use 64-bit if you have the RAM. As of this writing 32-bit takes 700MB and 64-bit takes 1.5GB of memory.
 {{{
 lxc launch ubuntu:16.04/i386 lpdev -p default -p $USER
 }}}

 1. Find the container IP, either from `lxc list` or `lxc info lpdev`.

 1. Then connect with:
 {{{
 ssh -A $user@IP_ADDRESS_FROM_LXC_LS
 }}}
 The -A permits you to access Launchpad code hosting from within the container without needing to reenter passphrases.

 1. [Inside the container] Install Bazaar so you can run rocketfuel-setup.
 {{{
 sudo apt-get install bzr
 }}}
 1. [Inside the container] You can now follow the normal [[Running|LP installation instructions]]. Be warned that changes in your home directory will also be seen outside the container and vice versa. If your home directory already has a Launchpad work area set up you'll want to run rocketfuel-setup --no-workspace to avoid trying to recreate it, but all subsequent steps are still required.

 1. Follow [[Running/RemoteAccess]] to set up access from the host's applications to the container's Launchpad instance or else going to launchpad.dev won't work.

= Notes =

If `/tmp` is on ZFS, such as in the LXD-on-ZFS case, then the test suite will produce a failure in `lp.soyuz.tests.test_packagediff.TestPackageDiffs.test_packagediff_max_size`. This is a bug in the Linux ZFS port (Bug:1656259) and can be ignored for now.
#refresh 0 https://launchpad.readthedocs.io/en/latest/how-to/running.html

Running/LXD (last edited 2022-06-17 12:36:25 by cjwatson)