Chroot build environment

From Armagetron
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Working on this as I build a new virtual machine for semi-automated Linux and Windows builds.

Chroot

Our "weekly" builds are done in a virtual machine with a chroot prison for 32 and 64 bit builds and wine for the Windows build. Here I document step by step how to set one up. I write this as I go, so it is incomplete.

Make snapshots after every section or so.

Base system

Install Ubuntu Trusty in a virtual machine. Straightforward :) Pick LVM in the setup options so you can resize partitions later.

Install bzr and (optinal, I use it for remote access) ssh and stuff:

sudo apt-get update
sudo apt-get install bzr ssh schroot

Add common volume to host builds

Edit: These steps are provided as is because I set my system up that way. They're not required. /mnt/builds on the root system side can be any old directory.

Use LVM to add a new volume. My VM has 150 G total space:

lvcreate -L 100G -n builds ubuntu-vg
mkfs.ext4 /dev/ubuntu-vg/builds

If there is not enough space, reduce existing volumes. This needs to be done from a Live CD:

resize2fs /dev/ubuntu-vg/root 50G
lvresize /dev/ubuntu-vg/root 50G

Add the new volume to fstab:

/dev/mapper/ubuntu--vg-builds /mnt/builds  ext4    errors=remount-ro 0       1

This new volume will be mounted into the chroots for easy access.

Set up chroot environments

Follow this documentation: [1] You can stop before "Setting up a dchroot (non-root) environment"

Our /etc/schroot/schroot.conf:

[64]
description=Ubuntu 64 Bit
location=/var/chroot/64
priority=3
users=manuel
groups=sbuild,root
root-groups=root
[32]
description=Ubuntu 32 Bit
location=/var/chroot/32
priority=3
users=manuel
groups=sbuild,root
root-groups=root
personality=linux32
aliases=dokochroot,default


Creating the actual installations:

debootstrap --variant=buildd --arch i386 trusty /var/chroot/32 http://archive.ubuntu.com/ubuntu/
debootstrap --variant=buildd --arch amd64 trusty /var/chroot/64 http://archive.ubuntu.com/ubuntu/

To change into the new environments, you can do "schroot -c 32" or "schroot -c 64".

Create mount points for the shared files in the chroots:

mkdir /var/chroot/32/mnt/builds
mkdir /var/chroot/64/mnt/builds

Add bind mounts for them into /etc/fstab:

/mnt/builds /var/chroot/32/mnt/builds none bind
/mnt/builds /var/chroot/64/mnt/builds none bind

Mount them with "mount -a". Inside the chroots, you should now see /mnt/build.