Skip to content

kain88-de/buildserver

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mixxx Build Server README
================================================================================

* Updated 1/23/2011 by rryan

Machine and Directory Layout
================================================================================

We use VirtualBox for virtualization. The reasons behind this are that in the
short-term we need to virtualize Mac OSX and Windows directly in order to
produce builds for them. VirtualBox has the best OSX virtualization around as of
1/2011.

All VMs are stored in /opt/mixxx/vms
To save time re-downloading, all ISOs for e.g. Ubuntu versions are in /opt/mixxx/isos

In order to run a VM as your own user, you must be a member of the `vboxusers'
group. You can add yourself to this group like this:

  $ sudo adduser <username> vboxusers

Creating a Virtual Machine
================================================================================

To create a virtual machine, here are the basic steps to get started. In this
case we'll create a VM called "build-ubuntu-10.04-amd64", as per the naming
convention described below.

Let's make some environment variables to make this easier on ourselves:

  $ export HOSTIP="18.248.3.215" # This is the IP for mixxx.mit.edu
  $ export NAME="build-ubuntu-10.04-amd64"
  $ export VMROOT="/opt/mixxx/vms/"
  $ export VMPATH=$VMROOT$NAME

First, create the VM description (.vbox) file:

  $ VBoxManage createvm --name $NAME --register --basefolder $VMROOT

NOTE: this will create a folder with the name in /opt/mixxx/vms, make sure a VM
by the same name does not already exist.

Now, set machine characteristics like memory, networking, etc.

  $ VBoxManage modifyvm $NAME --memory 2048 --cpus 2 --acpi on --ioapic on --boot1 dvd --nic1 nat

In this case, you should pick nat to start for the networking. The reason is
that MIT networking will DHCP the machine into a subnet that requires
registration. If you use NAT, then the machine will have network to start with
since it will NAT through the host. You can change this later if the VM should
have a publicly accessible IP. Later, we'll make the machine SSH port forward to
a port on the host.

Now, create a hard disk for the machine. In this case, we create a 50GB drive in
the VirtualBox VDI format. We use Split2G so that the disk is allocated in 2GB
chunks, so it does not initially take up 50GB. If you expect the machine to
potentially require a lot of disk space, you should pick a large number because
it's a pain to change later.

  $ VBoxManage createhd --filename $VMPATH/$NAME.vdi --size 50000 --format VDI --variant Split2G

The machine by default does not have a storage controller. We have to add
one. Let's add a SATA controller:

  $ VBoxManage storagectl $NAME --name "SATA-1" --add sata --sataportcount 8 --hostiocache on

I was reading that apparently this causes problems for earlier than Vista. You
can just replace "-add sata" with "-add ide" and drop the "--sataportcount"
parameter instead.

Now we attach the VDI we created to this storage controller:

  $ VBoxManage storageattach $NAME --storagectl "SATA-1" --port 0 --device 0 --type hdd --medium $VMPATH/$NAME.vdi

Let's attach the install ISO to a virtual DVD-ROM drive:

  $ VBoxManage storageattach $NAME --storagectl "SATA-1" --port 1 --device 0 --type dvddrive --medium /opt/mixxx/isos/ubuntu-10.10-server-amd64.iso

To start the machine and have it host an RDP session for initially configuring
the box, we need to configure VRDE.

  $ VBoxManage modifyvm $NAME --vrde on --vrdeport 9000 --vrdeaddress $HOSTIP

To enable RDP authentication via PAM, turn on the default authentication library. You can then login
with your username and password for the host machine.

  $ VBoxManage modifyvm $NAME --vrdeauthtype external

Make sure to pick a port that is not used. You can look at currently bound ports
by doing `$ netstat --listening'.

Everything should be all set. Now you can run the machine with a VRDE host like so:

  $ VBoxHeadless --startvm $NAME

However, it'll shut down when that process dies. You can run it inside of
`screen' for when you'd like to administer the machine.

Once you're done installing the OS and it reboots, you can pop out the install ISO with this command:

  $ VBoxManage storageattach $NAME --storagectl "SATA-1" --port 1 --device 0 --type dvddrive --medium none

To view an overview of the settings of your virtual machine:

  $ VBoxManage showvminfo $NAME

After getting your machine setup using RDP, after you powerdown your machine,
VBoxHeadless will terminate. To start your machine again without RDP enabled, do
the following:

  $ VBoxManage startvm $NAME --type headless

This will start the VM in the background as your user. I believe it is nohup, so
you can log out. --rryan

To force power-down your machine:

  $ VBoxManage controlvm $NAME poweroff

There are more useful options, just type:

  $ VBoxManage controlvm $NAME

to see them.


Setting Up NAT
================================================================================

In order for you to have SSH access to a VM, you must setup NAT port forwarding
so that a port on the host machine is forwarded to the SSH port of your VM.

  $ VBoxManage modifyvm $NAME --natpf1 "ssh,tcp,,10000,,22"

'ssh' is the name of this rule, and the guest's ssh port will be available on
port 10000 of the host.

To delete this passthrough rule, use this command:

  $ VBoxManage modifyvm $NAME --natpf1 delete ssh

Naming Conventions
================================================================================

To keep the naming setup sane, let's distinguish between two types of VMs:
builders and testers.

For builders, let's name stuff like this (up for debate): build-$(OS)-$(VERSION)-$(ARCH)

For example:

build-ubuntu-10.04-amd64
build-windows-XP-amd64
build-windows-7-amd64
build-osx-10.6-amd64

At this stage, I'm not sure if we'll have multiple build VMs for a given
OS/version/arch setup, but in that case, maybe we can say builder1, builder2,
builder3, etc. instead of 'build'.

Similarly, for test machines, let's call them 'test'.

For example:
test-ubuntu-10.04-amd64

All test machines should have a checkpoint called "stable". After a test
environment is run, they should be automatically reset to this state.

Importing a Virtual Machine
================================================================================

Pretty easy. Copy the VM folder with the .vbox and .vdi files into
/opt/mixxx/vms/. Then run

  $ VBoxManage registervm /opt/mixxx/vms/$NAME/$NAME.vbox

Make sure to change the folder and files to be owned by the mixxx user and group
and setup group read/write permissions like this:

  $ chown mixxx:mixxx -R /opt/mixxx/vms/$NAME/
  $ chmod g+rw -R /opt/mixxx/vms/$NAME/

About

Tools for managing the Mixxx build server and build VMs.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published