BOINC is the leading platform for volunteer computing.
Scientists can create a project on the platform and submit computational jobs that will be executed on computers of volunteers all over the world.
In this post we'll deploy a BOINC server on Jetstream. All US scientists can get a free allocation on Jetstream via XSEDE.
The deployment will be based on the Docker setup developed by the Cosmology@Home project.
Prepare a Jetstream Virtual Machine
First we login on the Atmosphere Jetstream control panel and create a new instance of Ubuntu 16.04 with Docker preinstalled, a "small" size is enough for testing.
(Optional) Mount a Jetstream Volume for docker images
It is ideal to have a dedicated Jetstream Volume and mount it in the location where Docker stores its data. So we have more space, less usage of the root filesystem and no issues on the OS if we get out of disk space.
We can create a volume of 10/20 GB in the Jetstream control panel and attach it to
the running Virtual Machine. This will be automatically mounted to
want to mount instead to
sudo systemctl stop docker sudo mv /var/lib/docker/* /vol_b/ sudo umount /vol_b
zonca@js-xxx-xxx:~$ cat /etc/fstab LABEL=cloudimg-rootfs / ext4 defaults 0 0 /dev/sdb /var/lib/docker ext4 defaults,nofail 0 2
sudo mount /var/lib/docker sudo systemctl start docker
Docker in 16.04 is a bit old, we want to update it to a more recent version.
We also want to make sure to remove the old
sudo apt remove docker-compose docker
Then install a recent version, we can follow the instructions from the docker website or use this script:
I adapted it from kubeadm-bootstrap.
Finally install the latest
docker-compose, see the documentation
Last step, add your user to the
sudo adduser $USER docker
logout and back in and make sure you can run
docker commands without sudo:
Install BOINC server via Docker
Follow the instructions from
to launch a test deployment, in the last step, specify a
URL_BASE so that
the deployment will be accessible from outside connections:
URL_BASE=http://$(hostname) docker-compose up -d
You can check that the 3 containers are running with:
and inspect their logs with:
docker logs <container_id>
After a few minutes you should be able to check that the server is running at the public address of your instance:
(Optional) Mount Jetstream volumes on the containers
The Docker compose recipe defines 3 Docker volumes:
mysql: Data of the MySQL database
project: Files about the project
results: Result of the BOINC jobs
those volumes are managed internally
by Docker and stored somewhere inside
/var/lib/docker on the host node.
Docker also allows to mount specific folders from the host into a container, if we back these folders by a Jetstream volume, we can have dedicated detachable Jetstream volumes that live independently from any virtual machine.
Let's start by
mysql, the same process can then be replicated for the other resources.
We create another Jetstream volume from the Atmosphere, name it
mysql and attach it to the virtual machine,
this will be automatically mounted to
/vol_c, we can rename it by:
sudo umount /vol_c
sudo mount /mysql
Finally you can modify the
docker-compose.yml to use this folder instead of a Docker Volume:
volumes: section, remove
mysql:, in the definition of the MySQL service,
volumes: - "mysql:/var/lib/mysql"
volumes: - "/mysql:/var/lib/mysql"
So that instead of using a Docker Volume named
mysql is creating a bind-mount to
/mysql on the host.
Open a terminal in the BOINC server container:
docker exec -it <boincserver> /bin/bash bin/boinc2docker_create_work.py \ python:alpine python -c "open('/root/shared/results/hello.txt','w').write('Hello BOINC')"
Then we can test a client connection and execution either with a standard BOINC desktop client or on another Jetstream instance.
Test with a BOINC Desktop client
Follow the instructions on the BOINC website to install a client for your OS, install also VirtualBox, then set as the URL of the BOINC server the URL of the server we just created.
Test with a BOINC client in another Jetstream instance
Create another Ubuntu with Docker tiny instane on Jetstream, login,
sudo adduser $USER docker
We need Virtualbox: sudo apt install virtualbox-dkms
and reboot to make sure VirtualBox is active.
URL=http://js-xxx-xxx.jetstream-cloud.org/boincserver/ docker exec boinc boinccmd --create_account $URL email password name status: Success poll status: operation in progress poll status: operation in progress poll status: operation in progress account key: de9c4cc66b8c923d04f834a0609ae742
We can save the account key in a environment variable:
URL=http://js-xxx-xxx.jetstream-cloud.org/boincserver/ URL=http://js-xxx-xxx.jetstream-cloud.org/boincserver/ account_key=de9c4cc66b8c923d04f834a0609ae742 docker exec boinc boinccmd --project_attach $URL $account_key
Then we can check the logs for the job being received and executed:
docker logs boinc
30-Mar-2018 13:02:04 [boincserver] Started download of layer_e9e858f6a2ba5a3e5a04b5799ef2de1c21a58602ffd400838ed10599f1b4a42c.tar.manual.gz 30-Mar-2018 13:02:06 [boincserver] Finished download of layer_10ffed26db733866a346caf7c79558e4addb23ae085a991b5e7237edaa69f8e2.tar.manual.gz 30-Mar-2018 13:02:06 [boincserver] Finished download of layer_e9e858f6a2ba5a3e5a04b5799ef2de1c21a58602ffd400838ed10599f1b4a42c.tar.manual.gz 30-Mar-2018 13:02:06 [boincserver] Started download of layer_0e650ab7661f993eff514b84c6e7b775f5be8c6dde8b63eb584f0f22ea24005f.tar.manual.gz 30-Mar-2018 13:02:06 [boincserver] Started download of image_4fcaf5fb5f2b8230c53b5fd4c4325df00021d45272dc4bfbb2148e5ca91ac166.tar.manual.gz 30-Mar-2018 13:02:07 [boincserver] Finished download of layer_0e650ab7661f993eff514b84c6e7b775f5be8c6dde8b63eb584f0f22ea24005f.tar.manual.gz 30-Mar-2018 13:02:07 [boincserver] Finished download of image_4fcaf5fb5f2b8230c53b5fd4c4325df00021d45272dc4bfbb2148e5ca91ac166.tar.manual.gz 30-Mar-2018 13:02:07 [boincserver] Starting task boinc2docker_3766_1522410497.503524_0 30-Mar-2018 13:02:07 [boincserver] Sending scheduler request: To fetch work. 30-Mar-2018 13:02:07 [boincserver] Requesting new tasks for CPU 30-Mar-2018 13:02:08 [boincserver] Scheduler request completed: got 1 new tasks 30-Mar-2018 13:02:12 [---] Vbox app stderr indicates CPU VM extensions disabled 30-Mar-2018 13:02:13 [boincserver] Computation for task boinc2docker_3766_1522410497.503524_0 finished 30-Mar-2018 13:02:13 [boincserver] Output file boinc2docker_3766_1522410497.503524_0_r207563194_0.tgz for task boinc2docker_3766_1522410497.503524_0 absent 30-Mar-2018 13:02:13 [boincserver] Starting task boinc2docker_3766_1522410497.503524_1 30-Mar-2018 13:02:18 [---] Vbox app stderr indicates CPU VM extensions disabled 30-Mar-2018 13:02:18 [boincserver] Computation for task boinc2docker_3766_1522410497.503524_1 finished 30-Mar-2018 13:02:18 [boincserver] Output file boinc2docker_3766_1522410497.503524_1_r1095010587_0.tgz for task boinc2docker_3766_1522410497.503524_1 absent