Aktionen

BOINC installieren - Docker

Aus SETI.Germany Wiki

Das hier beschriebene Vorgehen wurde nur sehr rudimentär von mir getestet, Benutzung auf eigene Gefahr. Bitte testet das und sendet Feedback an vmc (im IRC oder via PM).

Docker installieren

Diese Übung wird dem Leser überlassen, die Methode unterscheidet sich eh je nach Distribution. Eine Warnung sei aber noch angebracht:

Einem User den Zugriff auf den Docker-Daemon zu geben entspricht ihm Root-Rechte zu geben!
Siehe z.B. https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface


Docker-Image erstellen

In den folgenden Abschnitten wird das Docker-Image erstellt. Zunächst wird ein Dockerfile erstellt, welches den Inhalt des Docker-Images beschreibt. Anschließend muss ein Script angelegt werden, welches als Einstiegspunkt beim Starten des Images als Container dient. Im dritten Schritt wird aus diesen beiden Dateien das Docker-Image erstellt. Für die folgenden Schritte sollte ein neuer Ordner angelegt werden und alle Dateien/Befehle innerhalb dieses Ordners erstellt/ausgeführt werden.

Dockerfile

Datei Dockerfile mit folgendem Inhalt erstellen:

FROM debian:stable

RUN apt-get update \
        && apt-get install -y --no-install-recommends boinc-client ca-certificates procps \
        && apt-get clean \
        && rm -rf /var/lib/apt/lists/*

COPY run.sh run.sh

EXPOSE 31416

WORKDIR /var/lib/boinc-client

ENTRYPOINT ["/run.sh"]

Startscript

Startscript run.sh mit folgendem Inhalt erstellen:

#!/bin/bash

set -eu
set -o pipefail
IFS="`printf '\n\t'`"

if [ "$1" = 'boinc' ]; then
    # as we want to use volumes for the working dir, we have to reconfigure the client and set permissions
    dpkg-reconfigure boinc-client
    chown -R boinc:boinc /var/lib/boinc-client
    su -c "$@" -s /bin/sh boinc
else
    # for debugging so we can just start with a shell
    exec "$@"
fi

Image generieren

Mit dem folgenden Snippet wird das Docker-Image generiert, mit dem Parameter -t wird dabei der Name (Tag) des Images angegeben. Wird ein anderer Name als hier im Beispiel gewählt, muss dieser auch beim Starten der Container (siehe unten) entsprechend verwendet werden.

$ docker build -t boinc/client .

Docker-Container starten

Nachdem das Image erstellt wurde, kann dieses in Containern gestartet werden. Die Idee dabei ist, dass jeder Container ein eigenes Arbeitsverzeichnis bekommt (realisiert via Docker-Volumes), somit als ein separater Host nach außen hin auftritt. Im Folgenden wird angenommen, dass das Image mit dem Namen/Tag boinc/client erstellt wurde. Bei einem anderen Namen müssen die Befehl entsprechend angepasst werden.

Docker-Volume erstellen

$ docker volume create boinc_data1

Docker-Container starten

Es wird das Image boinc/client als Container gestartet, dabei wird der Host-Port 12345 auf den Container-Port 31416 gemappt, das entspricht dem Default BOINC GUI-RPC-Port. Weiterhin wird das Docker-Volume boinc_data1 im Container auf /var/lib/boinc-client gemountet, also dem Workingdirectory des BOINC-Clients. Das --allow_remote_gui_rpc erlaubt den Zugriff via boinccmd/boincmgr.

$ docker run -d -p 12345:31416 -v boinc_data1:/var/lib/boinc-client boinc/client -- boinc --allow_remote_gui_rpc

Weitere Docker-Container starten

Bei Bedarf können mit dem Image beliebig viele Container gestartet werden. Wichtig dabei ist, dass für jeden Container ein separates Volume (hier boinc_data2) und ein anderer Host-Port (hier 12346) verwendet werden. Beispiel:

$ docker volume create boinc_data2
$ docker run -d -p 12346:31416 -v boinc_data2:/var/lib/boinc-client boinc/client -- boinc --allow_remote_gui_rpc

Zugriff auf den BOINC-Client

In den gestarteten Containern läuft ein BOINC-Client und der Port für den GUI-RPC-Zugriff wird auf einen Host-Port gemappt, in den Beispielen war das 12345 und 12346 (der erste Port des -p Flags). Es kann also mit boinccmd oder dem boincmgr ganz normal auf den Client zugegriffen werden.

Der Client im Container kann mit folgendem Befehl sauber runter gefahren werden, dabei beendet sich dann auch der Container:

$ boinccmd --host localhost:12345 --quit

TODOs/Erweiterungen

Der Artikel ist bestimmt noch nicht vollständig, das bisher beschriebene Image enthält nur die absoluten Basics, auch möglicherweise notwendige Prozesse wurden noch nicht betrachtet.

Mögliche TODOs:

  • Für den Zugriff auf den BOINC-Client wird aktuell kein Passwort benötigt, dies könnte man aber bei Bedarf sicherlich auch noch konfigurieren
  • Unterstützung einer cc_config.xml, z.B. initiales Setzen von ncpus
Single Sign On provided by vBSSO