Boinc Container and Good Causes

March 23, 2019
Learn how to contribute to good causes with boinc and docker.

What’s boinc?

The Berkeley Open Infrastructure for Network Computing (BOINC, pronounced /bɔɪŋk/ – rhymes with “oink”), an open-source middleware system, supports volunteer and grid computing. Originally developed to support the SETI@home project, it became generalized as a platform for other distributed applications in areas as diverse as mathematics, linguistics, medicine, molecular biology, climatology, environmental science, and astrophysics, among others. BOINC aims to enable researchers to tap into the enormous processing resources of multiple personal computers around the world. source: wikipedia

So putting it simply boinc allows scientists to split up large amounts of data and spread the compute power to process it over many many machines. I decided to connect this container to the https://www.worldcommunitygrid.org which runs a multitude of projects (Although I’m working on a version dedicated to climate change). Currently I’m taking part in:

All great causes and I hope you dedicate some CPU to this also.

The container

I wanted to make this super simple for everyone to get involved so I built a simple boinc container built on debian stretch (slim). This container will run the boinc client and by default connect into the world community grid. The default credentials are for richarvey and the weak key is provided (all this key can do is contribute). However you can configure it to run as you and contribute to any team you wish.

You can grab the container here: https://gitlab.com/ric_harvey/boinc-container

or simply pull it from docker hub:

docker pull richarvey/boinc:latest

To run on your desktop, just type:

docker run -d --name boinc richarvey/boinc:latest

I’m auto rebuilding the image every week to patch the underlaying OS.

I also set up a super simple task definition to run the container in fargate and/or ECS, here’s my JSON with account ID redacted

{
  "ipcMode": null,
  "executionRoleArn": "arn:aws:iam::<YOUR ACCOUNT ID>:role/ecsTaskExecutionRole",
  "containerDefinitions": [
    {
      "dnsSearchDomains": null,
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/boinc",
          "awslogs-region": "eu-west-1",
          "awslogs-stream-prefix": "ecs"
        }
      },
      "entryPoint": null,
      "portMappings": [],
      "command": null,
      "linuxParameters": null,
      "cpu": 0,
      "environment": [],
      "resourceRequirements": null,
      "ulimits": null,
      "dnsServers": null,
      "mountPoints": [],
      "workingDirectory": null,
      "secrets": null,
      "dockerSecurityOptions": null,
      "memory": 4096,
      "memoryReservation": null,
      "volumesFrom": [],
      "image": "richarvey/boinc:latest",
      "disableNetworking": null,
      "interactive": null,
      "healthCheck": null,
      "essential": true,
      "links": null,
      "hostname": null,
      "extraHosts": null,
      "pseudoTerminal": null,
      "user": null,
      "readonlyRootFilesystem": null,
      "dockerLabels": null,
      "systemControls": null,
      "privileged": null,
      "name": "boinc"
    }
  ],
  "placementConstraints": [],
  "memory": "4096",
  "taskRoleArn": null,
  "compatibilities": [
    "EC2",
    "FARGATE"
  ],
  "taskDefinitionArn": "arn:aws:ecs:eu-west-1:<YOUR ACCOUNT ID>:task-definition/boinc:1",
  "family": "boinc",
  "requiresAttributes": [
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "ecs.capability.task-eni"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "ecs.capability.execution-role-awslogs"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
    },
    {
      "targetId": null,
      "targetType": null,
      "value": null,
      "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
    }
  ],
  "pidMode": null,
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "networkMode": "awsvpc",
  "cpu": "2048",
  "revision": 1,
  "status": "ACTIVE",
  "volumes": []
}

All you’d then need to do is create a service and run as many copies of this as you can. The example below shows 3 copies running.

Boinc Service

Join the team

I’d love to know who runs this container and even more so I’d love you all to join the container team on the world community grid! This lets us show that containers are awesome and pool our results. Please come and join at the following URL:

https://www.worldcommunitygrid.org/team/viewTeamInfo.do?teamId=0WGND0WR52

Like I say its all for a good cause come and join the digilution ;)


Creative Commons Licence
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.