After quite a lot of refactoring, the latest LightBuildServer release 0.2.2 is now available, quite cleanly packaged for Fedora 22.
The most important improvements are:
- runs now with uwsgi server and nginx
- uses sqlite to cope with persistent states, instead of using global variables
- a cronjob triggers the processing of the build queue
For the OS that hosts the build containers I currently recommend CentOS7, with LXC 1.0.x
Here is a short tutorial how to setup a server that runs the LightBuildServer on Jiffybox. This should work on similar offerings like from Rackspace or DigitalOcean.
I have created a Jiffybox with CentOS 7. Make sure in the settings of the Jiffybox to change the kernel to pvgrub64 because that will come with the latest features from the CentOS7 default kernel. Otherwise creating LXC containers might not work, because the default Jiffybox kernel does not support SquashFS.
On the CentOS7 machine, I will now install the LXC scripts. These are useful scripts for creating LXC containers, supporting various guest Operating Systems like CentOS, Fedora, Ubuntu and Debian. For more details, see https://github.com/tpokorra/lxc-scripts/blob/master/Readme.md
yum install yum-utils epel-release yum-config-manager --add-repo https://lbs.solidcharity.com/repos/tpokorra/lbs/centos/7/lbs-tpokorra-lbs.repo yum install lxc-scripts # setup the bridge for networking with the LXC containers systemctl enable libvirtd systemctl start libvirtd # create a symbolic link in the root directory, so that you get quicker to the scripts ln -s /usr/share/lxc-scripts scripts cd scripts ./initIPTables.sh ./initLXC.sh # we need nginx as proxy to redirect requests to the container yum install nginx systemctl enable nginx systemctl start nginx # make sure the firewall allows requests on port 80 (http) or 443 (https) iptables -A IN_public_allow -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT iptables -A IN_public_allow -p tcp -m tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT iptables-save > /etc/sysconfig/iptables |
The next step is to create a Fedora 22 container, which will run the LightBuildServer control server and Web UI:
cd ~/scripts # 50: this is container id, and will be used to generate the IP address of the container as well ./initFedora.sh 50-lbs.example.org 50 # configure the nginx proxy for the lbs.example.org website # if /var/lib/certs/lbs.example.org.crt and lbs.example.org.key exist, # it will be configured for https, otherwise just for http ./initWebproxy.sh 50 lbs.example.org # start the container lxc-start -d -n 50-lbs.example.org # see the IP address ./listcontainers.sh # and ssh into the container, using the password for the key you generated earlier when running initLXC.sh ssh root@192.168.122.50 |
Now you can install the LightBuildServer inside the Fedora 22 container:
dnf install 'dnf-command(config-manager)' dnf config-manager --add-repo https://lbs.solidcharity.com/repos/tpokorra/lbs/fedora/22/lbs-tpokorra-lbs.repo dnf install lightbuildserver # initialize the server # this will enable and start the services nginx, uwsgi and crond /usr/share/lightbuildserver/init.sh |
The configuration of the LightBuildServer happens in the file /etc/lightbuildserver/config.yml
. You can configure an SMTP account for the notification emails to be sent to you.
You should also define the LBSUrl and the DownloadUrl (probably the same) for your server.
You can also define your own Github or Gitlab account, both public and private. See https://github.com/SolidCharity/LightBuildServer/wiki/Config-Files#lbs_config_file for examples.
You can define your own projects and packages as well.
At last, you need to define the host for building your packages. We can define the CentOS7 host here. So replace build01.localhost
with build01.lbs.example.org
.
You need to add a line to the /etc/hosts
file on the LBS container,
# on the LBS container. # use the IP that is the gateway for the container to the host echo "192.168.122.1 build01.lbs.example.org" >> /etc/hosts # we changed config.yml and need to restart the LBS website: systemctl restart uwsgi |
You also need to copy the public key to the host, so that the LBS container can create build machines on the host. For production use, the LBS server should obviously not have root access to the host system. You should add another host for building.
# on the CentOS7 host. # make sure there is a new line echo >> /root/.ssh/authorized_keys cat /var/lib/lxc/50-lbs.example.org/rootfs/etc/lightbuildserver/container/container_rsa.pub >> /root/.ssh/authorized_keys |
Now test inside from the LBS container if you have access to the host, and accept the host key:
# on the LBS container: ssh -i /etc/lightbuildserver/container/container_rsa root@build01.lbs.example.org |
Now you should be able to login on the webinterface, with user demo
and password demo
. Try building a Debian or Fedora package, or a CentOS or an Ubuntu package!