Boinc srv docker
Inhalt
Boinc Server Installation unter podman
Die Installation erfolgt auf Basis von Ubuntu 24.04 als user jst.
Basisinstallation Container
Podman installieren
sudo apt install podman
Permissions setzen
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 jst
Image von Ubuntu laden
sudo podman pull ubuntu:latest
sudo podman images # zeigt geladene Images
Das geladene Image mit einem Tag versehen
sudo podman tag <imageID> boincserver # ImageID aus sudo podman images
Erzeugen eines lokalen Volumes
sudo podman volume create boincvol
sudo podman volume ls # zeigt alle volumes
Erzeugen des Containers
sudo podman create --name boincserver ubuntu:latest
sudo podman ps -a # zeigt angelegte container
Starten des Container in dem localen Volume
sudo podman run -it --rm -v boincvol:/boincvol localhost/boincserver /bin/bash
Achtung! Es muss IMMER(!!) ein weiteres Fenster auf dem host aufgemacht werden, um die Änderungen im Container persistent zu machen!
Sichern der Änderungen in neuem Fenster auf dem host
sudo podman ps # schauen, welche containerID aktuell ist
sudo podman commit --include-volumes <containerID> boincserver
An dieser Stelle noch ein Tipp. Nachdem man die Änderungen in das Volume geschrieben hat kann man mit timeshift auf dem host einen Zwischenschritt einfrieren. ;)
Im Fenster des Containers Boinc User anlegen und verschiedene Tools installieren
groupadd --gid 1100 boincadm
useradd --uid 1100 -m -d /home/boincadm --gid 1100 -s /bin/bash boincadm
passwd boincadm # ich habe boincadm einfachhalber vergeben ;)
apt update
apt install vim ssh sudo python3-dev default-libmysqlclient-dev build-essential pkg-config
usermod -a -G sudo boincadm
Danach einen public ssh-key auf dem container für den neuen User boincadm einrichten
su - boincadm
mkdir .ssh
chmod 0700 .ssh
cd .ssh
Dann authorized_keys mit pub key versorgen, wenn man remote auf dem System mit ssh arbeiten will.
Den passenden private key auf dem host des Containers hinterlegen für den ssh Zugangstest.
Jetzt wieder auf dem host den Container schreiben! Beachte: anderes Fenster!
sudo podman ps # schauen, welche containerID aktuell ist
sudo podman commit --include-volumes <containerID> boincserver
Den container verlassen mit 2 x "exit".
sudo podman ps # um zu schauen, dass nichts mehr aktiv ist
Neustart des zuvor gespeicherten Containers, diesmal mit Umleitung des ssh ports
Container port 22 an host port 8022
sudo podman run -it --rm -p 8022:22 -v boincvol:/boincvol localhost/boincserver /bin/bash
Prüfen, ob die vorher gemachten Änderungen noch vorhanden sind, z.B vim aufrufen
Ich habe den ssh Dienst nicht per autostart integriert!
su - boincadm
sudo service ssh start
Test vom host (private key muss dort liegen) aus mit
ssh -p 8022 boincadm@localhost
Wenn das nicht geht... "UsePAM no" in /etc/ssh/sshd_config setzen. Ist default auf yes
Im container
service ssh restart
Wenn das geht, dann geht es auch von einer Remote Maschine, die den private key hat.
Installation Python, Mysql und Apache
Ab hier Installation via cookbook bis zur Sektion „Install the Python MySQL interface:„
Hier geht es ohne das Python virtuelle environment in Ubuntu 22/24 nicht weiter!
sudo apt install python3.12-venv
python3 -m venv /home/boincadm/venv-boinc
source /home/boincadm/venv-boinc/bin/activate
pip install -U pip
pip install mysqlclient
Wenn sich der mysqlclient nicht fehlerfrei installieren lässt, dann...
sudo apt-get update
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential pkg-config
Install mysqlclient via pip3:
pip3 install mysqlclient
Den source Befehl am Besten in der .bashrc hinterlegen
Guter Zeitpunkt, um auf dem host wieder einmal das image zu sichern
sudo podman ps # zur herausfinden der containerID
sudo podman commit --include-volumes <containerID> boincserver
Mit 2 x "exit" den Container verlassen
Neustart mit einem weiteren Port für Apache
sudo podman run -it --rm -p 8022:22 -p 8080:80 -v boincvol:/boincvol localhost/boincserver /bin/bash
Im Container
su - boincadm
sudo service ssh start # wenn remote gearbeitet wird
Jetzt nach cookbook weiter bis zur Sektion "Configure MySQL"
Nun muss mysql gestartet werden…
sudo usermod -d /var/lib/mysql/ mysql # homedir vergeben um Fehlermeldung zu vermeiden
sudo service mysql start
Danach mit cookbook sudo mysql_secure_installation weitermachen
Jetzt gibt es wieder einen Fehler, deshalb folgendermaßen weitermachen
sudo mysql
CREATE USER 'boincadm'@'localhost' IDENTIFIED BY 'foobar99!'; # am Ende des Passworts ist ein Ausrufezeichen
GRANT ALL ON *.* TO 'boincadm'@'localhost';
^D
Danach muss das Socket Verzeichnis auf 0775 gesetzt werden
cd /var/run
sudo chmod 0775 mysqld
Der user boincadm muss in die Gruppe mysql
sudo usermod -a -G mysql boincadm
Check der mysql DB
mysql -u boincadm -p
show databases;
^D
Wenn die Tests geklappt haben erstmal wieder das image auf Platte schreiben
sudo podman ps zur herausfinden der containerID
sudo podman commit --include-volumes <containerID> boincserver
Mit 2 x "exit" den Container verlassen
Danach Neustart des Containers
sudo podman run -it --rm -p 8022:22 -p 8080:80 -v boincvol:/boincvol localhost/boincserver /bin/bash
service ssh start
service mysql start
Als nächstes wird Apache konfiguriert
su - boincadm
sudo usermod -a -G boincadm www-data
sudo a2enmod cgi
sudo service apache2 restart
Test ob Apache erreicht werden kann wie im Cookbook beschrieben.
Installation BOINC Server Software
Ich beschreibe hier, wie ich es gemacht habe, da es nach Cookbook nicht ging…
su - boincadm
cd
git clone https://github.com/BOINC/boinc.git
cd boinc
./_autosetup
Hier musste ich zuerst noch JSON und libzip-dev installieren, was so nicht im Cookbook stand, da der nächste Schritt auf die Nase gefallen ist!
sudo apt install nlohmann-json3-dev libzip-dev
pip install setuptools
./configure --disable-client --disable-manager --enable-apps
make
Jetzt ging das configure und auch das make durch :D
Die Kompiler Fehlermeldungen kann man ignorieren (sagt das Cookbook)
Jetzt erstmal wieder das image auf Platte schreiben
sudo podman ps zur herausfinden der containerID
sudo podman commit --include-volumes <containerID> boincserver
Mit exit den Container verlassen
Podman Konfiguration um Subnet erweitern
Jetzt wird es noch einmal spannend, da innerhalb des Containers jedesmal nach dem Neustart eine andere IP vergeben wird. Deshalb erzeugen wir auf dem Host noch ein neues Subnet und weisen dem Container eine feste IP zu.
sudo podman network create --subnet=192.168.101.0/24 stony1
Danach Neustart des Containers mit fester IP aus dem neuen Subnet stony1
sudo podman run -it --rm --net stony1 --ip 192.168.101.10 -p 8022:22 -p 8080:80 -v boincvol:/boincvol localhost/boincserver /bin/bash
service ssh start
BOINC Projekt konfigurieren, Vorarbeiten
Ich beschreibe hier lieber selber, was ich gemacht habe, um ein BOINC Projekt aufzusetzen!
su - boincadm
sudo apt-get install python3-mysqldb # Das fehlt wohl auch noch...
Um das Netzwerk zu untersuchen und die IP zu finden
sudo apt-get install iproute2 # ss cmdcommand
ip addr # zeigt IP des Containers an
Abhängig von der Version der Datenbank MUSS der Strict Mode der Datenbank abgeschaltet werden.
Wo auch immer die Konfigurationsdatei der mysqlDB liegt... in unserem Fall
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
Suchen nach "sql_mode" in der Section [mysqld] und ersetzen mit
sql_mode= ""
Wenn nichts gefunden wird dann das Statement in der Sektion [mysqld] einsetzen und speichern.
sudo apt install cron # wird später auch noch gebraucht
sudo service mysql start
sudo service apache2 start
ss -plnt # zeigt die offenen Ports an: prüfen, ob mysql + apache2 laufen
BOINC Projekt konfigurieren
Hier geht es so weiter, wie im Cookbook in der Sektion "Create a BOINC project" beschrieben wird.
Ein paar Anmerkungen dazu:
Beim Aufruf von make_projekt ist das PW foobar99! und die IP die statische IP des Containers!
Dann die weiteren Schritte ausführen
Leider gibt es zwei Stellen, die bei mir viel Zeit gekostet haben…
Stelle 1: Sektion: Create an app version
Hier muss zuerst als Admin auf der Webseite die App angelegt werden, bevor bin/update_versions aufgerufen wird! Wird im Video zum Cookbook auch so gemacht
Stelle 2: Sektion: Submit and run a job
Hier muss ein anderes php script laufen!
bin/submit_job uppercase infile funktioniert nicht!
bin/create_work –appname uppercase infile funktioniert!