A few days ago, I did a fresh installation of my Jenkins build environment for my Ada projects (this was necessary after a disk crash on my OVH
server). I took this opportunity to setup a FreeBSD build node. This article is probably incomplete but tends to collect a number of tips for the installation.
Virtual machine setup
The FreeBSD build node is running within a QEMU virtual machine. The choice of the host turns out to be important since
not all versions of QEMU are able to run a FreeBSD/NetBSD or OpenBSD system. There is a bug in QEMU PCI emulation that prevents the NetBSD network driver
to recognize the emulated network cards (See qemu-kvm 1.0 breaks openbsd, netbsd, freebsd).
Ubuntu 12.04 and 12.10 provide a version of Qemu that has the problem. This is solved in Ubuntu 13.04, so this is the host linux distribution that I've installed.
For the virtual machine disk, I've setup some LVM partition on the host as follows:
sudo lvcreate -Z n -L 20G -n freebsd vg01
this creates a disk volume of 20G and label it freebsd.
The next step is to download the FreeBSD Installation CD (I've installed the FreeBSD-10.0-RC2).
To manage the virtual machines, one can use the virsh command but the virt-manager graphical front-end provides an easier setup.
The virtual machine is configured with:
- Memory: 1048576
- Disk type: raw, source: /dev/vg01/freebsd
- Network card model: e1000
- Boot on the CD image
After the virtual machine starts, the FreeBSD installation proceeds (it was so simple that I took no screenshot at all).
After the FreeBSD system is installed, it is almost ready to be used. Some additional packages are added
by using the pkg install command (which is very close to the Debian apt-get command).
pkg install jed
pkg install sudo bash tcpdump
By default the /proc is not setup and some application like the OpenJDK need to access it.
Edit the file /etc/fstab and add the following lines:
fdesc /dev/fd fdescfs rw 0 0
proc /proc procfs rw 0 0
and mount the new partitions with:
The FreeBSD repository provides some packages for Ada development. They are easily installed as follows:
pkg install gmake
pkg install gnat-aux-20130412_1 gprbuild-20120510
pkg install xmlada-188.8.131.52_1 zip-ada-45
pkg install aws-184.108.40.206
pkg install gdb-7.6.1_1
After the installation, change the path and setup the ADA_PROJECT_PATH variables to be able to use gnatmake:
Jenkins slave node installation
Jenkins uses a Java application that runs on each build node. It is necessary to install some Java JRE.
To use subversion on the build node, we must make sure to install some 1.6 version since the 1.8 and 1.7 version have incompatibilities with the Jenkins master. The following packages are necessary:
pkg install openjdk6-jre-b28_7
pkg install subversion-1.6.23_2
Jenkins needs a user to connect to the build node. The user is created by the adduser command. The Jenkins user does not need any privilege.
Jenkins master will use SSH to connect to the slave node. During the first connection, it installs the slave.jar
file which manages the launch of remote builds on the slave. For the SSH connection, the password authentication is possible but I've setup a public key authentication that I've setup on the FreeBSD node by using ssh-copy-id.
At this stage, the FreeBSD build node is ready to be added on the Jenkins master node (through the Jenkins UI Manage Jenkins/Manage Nodes).
The MySQL installation is necessary for some of my projects. This is easily done as follows:
pkg install mysql55-server-5.5.35 mysql55-client-5.5.35
Then add the following line to /etc/rc.conf
and start the server manyally:
The database tables are setup during the first start.
Some packages that are necessary for some projets:
pkg install autoconf-2.69 curl-7.33.0_1
pkg install ImageMagick-nox11-220.127.116.11_3
The jenkins master is now building 7 projects automatically for FreeBSD 10: FreeBSD Ada Jobs