BOINC xml-Manager
BOINC lässt sich über verschiedene Steuerdateien im .xml Format konfigurieren.
Dies geschieht einerseits bezogen auf das Verhalten des gesamten BOINC Middleware-Systems über die cc_config.xml Datei, die bei einer BOINC-Standardinstallation unter Windows 10 im BOINC-Hauptverzeichnis unter C:\ProgramData\BOINC liegt. Zusätzlich ermöglicht BOINC die Konfiguration auch auf Projekt- und Projekt-App-Ebene über app_config.xml Dateien, die dann in den jeweiligen Projektordnern abzulegen sind. Diese Projektordner finden sich bei einer BOINC-Standardinstallation unter Windows 10 im Ordner C:\ProgramData\BOINC\projects.
Weitere Informationen zu den BOINC Projektordnern, auch für andere Betriebssysteme, sind hier zusammengestellt. Außerdem gibt es einen früheren Wiki-Eintrag zur cc_config.xml mit Erläuterungen auf Deutsch.
Da die xml-Steuerdateien
- in versteckten / geschützten Bereichen des Betriebssystems abgelegt sein können,
- viele teils kryptische Einstellungsmöglichkeiten mit zudem nur fremdsprachigen Erklärungen enthalten,
- auf mehrere xml-Dateien verteilt sein können und sich
- zudem beim manellen Erstellen der u.U. recht umfangreichen Steuerdateien leicht Tippfehler einschleichen können,
scheint es insbesondere für Einsteiger in die BOINC-Welt des DistributedComputings nützlich zu sein, diese xml-Steuerdateien möglichst über eine grafische Benutzerschnittstelle (GUI) in verständlicher, möglichst mehrsprachiger Form handhaben zu können.
Zu diesem Zweck wurde am 23.12.22 von Michael Weber für die Rechenkraft.net Community eine erste funktionelle Testversion des BOINC xml-Managers (v0.1a) in der Programmiersprache Python fertiggestellt. Erster Screenshot der GUI des Programms:
Das Programm ermittelt zunächst vollautomatisch eine Reihe von Systeminformationen, darunter
- die aktuelle Bildschirmauflösung (um die GUI direkt daran anzupassen),
- das Betriebssystem (definiert den Ort der BOINC-Verzeichnisse bei Standardinstallation),
- die derzeitige Sprach-/Ländereinstellung (legt die Sprachinteraktion der GUI fest: Erklärungstexte, usw.),
- die Anzahl der logischen CPUs (zeigt dem Einsteiger direkt wieviele Einzeltasks auf seinem System maximal parallel laufen können),
- den genauen CPU-Typ,
- die Anzahl der OpenCL-fähigen Devices (GPUs & IGPs; zeigt dem Einsteiger direkt auf wievielen GPUs er zusätzlich zur CPU rechnen kann), sowie
- den Typ aller OpenCL-fähigen Devices (GPUs & IGPs).
Im Anschluss prüft das Programm das Vorhandensein einer BOINC-Standardinstallation und meldet diese als gefunden (True) oder nicht gefunden (False) im oberen Infopanel der GUI. Aktuell findet dieser Check nur unter Windows statt (die Standard-Verzeichnisstrukturen für Linux- und den angefressenen Apfel lassen sich aber problemlos basierend auf dem dynamisch identifizierten Betriebssystem (OS) nachrüsten).
Das in der GUI oben rechts angezeigte Team-Logo lässt sich durch ein beliebiges anderes Bild vom gleichen Dateiformat (.png) und -namen ersetzen. Macht man es zu gross, kann die GUI in ihrem Erscheinungsbild beeinträchtigt werden - trotz dynamischer Größenanpassungen.
Bei Klick-Aktivierung des Buttons "app_config.xml schreiben" schreibt das Programm die gewünschte app_confg.xml in das (derzeit noch zuvor vom User anzulegende) Verzeichnis c:/temp. Bislang erlaubt die bisherige Programmtestfassung nur die Konfiguration zweier projektbezogener Einstellungen:
- <project_max_concurrent>
- <report_results_immediately>
Im Programm sind sämtliche BOINC-Projekte als sogenannter "dictionary" abgelegt, d.h. der Projektname dient wie in einer SQL-Datenbank als Index mit dem dann jeweils eine Liste beliebig vieler weiterer Informationselemente verknüpft ist. Derzeit sind das der Projektverzeischnisname und die bekannten Apps, die zum jeweiligen BOINC-Projektnamen gehören. Dieser Dictionary ist aktuell noch als Variable hard-coded im Python-Programm integiert, das Ganze ist aber schon jetzt so angelegt, dass der Dictionary auch als externe (und damit künftig editierbare) Datei dynamisch eingelesen werden kann. Das erspart neue Programmversionen, wenn neue BOINC-Programme oder Apps rauskommen - man kann diese neuen Informationen dann einfach in die externe Dictionary-Datei editieren.
Dasselbe gilt für den Aufbau der GUI: Auch hier ist ein Dictionary implementiert, der es KÜNFTIG ermöglichen könnte, die GUI DYNAMISCH basierend auf einer externen Datei aufzubauen. Kämen also neue Konfigurationselemente hinzu, müßte das Porgramm nicht neu entwickelt/umgeschrieben werden, sondern es würde ledigich der Dictionary um die gewünschten Elemente ergänzt und die GUI würde sich in ihrem Erscheinungsbild selstständig anpassen.
Was fehlt / bisherige Probleme / Vorarbeiten:
- ich hatte bislang noch keine Zeit herauszufinden, wie ich unter Python 3.xx in geschützte / versteckte Systemverzeichnisse schreiben kann, daher die vorübergehende Notlösung mit der Ablage der app_config.xml in c:/temp. Dies ist das erste Problem, das ich in den Griff bekommen möchte.
- die BOINC-Standardinstallationsverzeichnisse für Linux & Mac habe ich inzwischen schon ermittelt (vgl. hier), dort muss ich im Programm noch die entsprechenden Strings hinterlegen und mit einer If-Abfrage dann an das Ergebnis der OS-Ermittlung koppeln.
- für den Fall von Nicht-Standardinstallationsverzeichnissen ist ein File-Handler vorgesehen, der in Teilen auch schon steht. Da soll man dann künftig händisch festlegen können, wohin die Kofigurationsdateien geschrieben werden sollen. Wäre die zweite Baustelle.
- eine Übersetzung sämtlicher Einstellungsschalter ins Deutsche habe ich schon fertig gestellt.
- zusätzlich habe ich sämtliche Schalter in Typen kategorisiert, d.h. konkret in einfache Checkboxen oder solche, wo die Eingabe von Werten erforderlich ist (sogenannte ValueBoxen - man sieht das auch jetzt schon im GUI-Erscheingunsbild).
- neben CheckBoxen und ValueBoxen gibt es bislang schon zusätzliche Ausgabeboxen (z.B. die Systeminfos im oberen GUI-Bereich). Hinzukommen sollen DropDown-Menüs, in denen man dann aus den schon implementierten Projekt-Dictionarys bequem ein Projekt und eine App auswählen kann, um für diese dann die Konfigurationseinstellungen vorzunehmen.
- als Programmieranfänger habe ich mich bis dato auf die app_config.xml konzentriert. Die cc_confg.xml möchte ich eigentlich gern mit demselben Programm behandeln können. Dazu wird es in der GUI entweder einen zweiten Reiter geben oder man wird über eine Schaltfläche zwischen zwei GUIs hin- und herschalten können.
Weitere gewünschte Features, Hinweise, usw. könnt ihr gern hier einschreiben, damit das Ganze langsam zu einer Art Community-Projekt werden kann.
Der bisherige Forenbereich zu dieser Entwicklung befindet sich hier.
Updates:
- inzwischen existiert auch eine "stand-alone" ausführbare .exe für Windows (getestet für Windows 10) und ein Vorgehen, wie man ausführbare Dateien auch für Linux und den angefressenen Apfel produziert.
