Boinc srv docker

Aus Rechenkraft
Zur Navigation springen Zur Suche springen

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!