Benutzer-Werkzeuge

Webseiten-Werkzeuge


hadesd

hadesd

hadesd ist das Herzstück der hades-Distribution.

Abhängigkeiten

Die Entwicklung erfolgt in C++17.

  • cmake
  • libconfig++-dev
  • libdbus-1-dev
  • libsystemd-dev

Funktionsweise

hadesd baut zwei Verbindungen über den DBus auf.

  1. Der UDisks2-Daemon wird über DBus angesprochen, um Informationen zu den verbundenen Festplatten zu gewinnen.
  2. Hadesd bietet selbst DBus-Interfaces an, um von Clients gesteuert werden zu können. Über Signale werden alle Clients über die Aktionen anderer Clients, Statusänderungen von Aufträgen und angeschlossene Geräte informiert.

Spezifikation der DBus-Schnittstellen

Sollte der Wunsch bestehen, Server in anderen Programmiersprachen zu entwickeln, sollte aus Kompatibilitätsgründen auf die folgende Spezifikation zurückgegriffen werden. Ein DBus-Server muss die im Folgenden angegebenen Interfaces und Methoden implementieren, um mit allen Clients kompatibel zu sein.

Mit einem [✓] werden Methoden und Signale gekennzeichnet, die in Hadesd bereits implementiert sind.


Interface org.computerwerk.Hades.DeviceManager

Der DeviceManager verwaltet alle Geräte, die beschrieben werden können. Konkret sind das alle angeschlossenen Massenspeicher, die nicht auf der Blacklist stehen. Einzelne Partitionen werden nicht aufgeführt, da Partitionstabellen sowieso überschrieben werden.

[✓] Signal: DeviceAdd ⮕ (String deviceid)

[✓] Signal: DeviceRemove ⮕ (String deviceid)

[✓] ListDevices() ⮕ (String devicelist)

Gibt eine Liste aller Devices in Form einer JSON-Liste von JSON-Objekten zurück. Ein Objekt hat die Struktur:

{
    "id": "<ID>",
    "blockdevice": "<BLOCKDEVICE>"
}

Interface org.computerwerk.Hades.JobManager

Der JobManager verwaltet Aufträge, die von Clients erteilt werden. Ein Auftrag besteht darin, Daten von einer Quelldatei auf ein Gerät zu kopieren. Aufträge werden parallel abgearbeitet, wobei jeder Auftrag einen eigenen Thread hat. Pro Gerät kann nur ein Auftrag abgearbeitet werden.

Signal: JobAdd ⮕ (String jobid)

Wird ausgelöst, wenn ein Auftrag hinzugefügt wurde. Das ist nützlich, wenn mehrere Clients mit Hadesd kommunizieren.

Signal: JobCancel ⮕ (String jobid)

Wird beim Abbrechen eines Auftrags durch einen Client ausgelöst.

Signal: JobFinish ⮕ (String jobid)

Wird ausgelöst, wenn ein Auftrag erfolgreich abgeschlossen wurde.

Signal: JobError ⮕ (String jobid)

Dieses Signal wird ausgelöst, wenn ein Auftrag aufgrund eines Fehlers (z.B. Platte kaputt) abbricht.

[✓] ActiveJobs() ⮕ (Int32 active)

Gibt die Zahl laufender Jobs zurück.

[✓] AddJob(String source, String device) ⮕ (String job)

Fügt einen neuen Job hinzu; einen Auftrag, der darin besteht, aus der Quelle source auf ein Gerät device zu schreiben.

AddEraseJob(String device) ⮕ (String job)

Fügt einen neuen Auftrag hinzu, der eine Festplatte mit dem ATA-erase Kommando löscht. Dabei wird die Platte mit Nullen überschrieben.

AddSecureEraseJob(String device) ⮕ (String job)

Fügt einen neuen Auftrag hinzu, der eine Festplatte mit dem dafür vorgesehenen ATA-secure-erase Kommando löscht. Die Daten auf der Platte werden mit vom Hersteller definierten Mustern überschrieben. Je nach Implementierung auf dem Festplatten(/SSD)-Controller kann es sein, dass dieses Kommando durch eine Verschlüsselung der Platte mit einem zufälligen Schlüssel – der nach dem „Löschen“ verworfen wird – realisiert wird.

[✓] InactiveJobs() ⮕ (Int32 inactive)

Gibt, analog zu ActiveJobs, die Zahl inaktiver, d.h. pausierter oder abgeschlossener, Jobs zurück.

[✓] JobStatus(String id) ⮕ (String status)

Gibt den Status eines Jobs als String zurück.

[✓] ListJobs() ⮕ (String joblist)

Gibt eine Liste aller Jobs als JSON-Liste von JSON-Objekten zurück. Auch abgeschlossene Jobs werden gelistet, sofern das betreffende Zielgerät noch angeschlossen ist. Ein Objekt hat die Form

{
    "id": "<JOB ID>",
    "progress": "<JOB PROGRESS [%]>"
}

PauseJob(String jobid) ⮕ (Bool status)

Pausiert einen Auftrag. Solange das Gerät angeschlossen ist, kann der Auftrag wieder aufgenommen werden. Andere Jobs können erst dann gestartet werden, wenn (a) das Gerät entfernt und wieder angeschlossen oder (b) der aktuelle Auftrag per StopJob beendet wurde.

StopJob(String jobid) ⮕ (Bool status)

Beendet einen Auftrag.

ResumeJob(String jobid) ⮕ (Bool status)

Nimmt einen pausierten Auftrag wieder auf.


Interface org.computerwerk.Hades.SourceManager

[✓] ListSources() ⮕ (String sourcelist)

Gibt eine Liste aller Quellobjekte als JSON-Liste zurück. Ein Objekt hat die Form

{
    "name": "<NAME>",
    "filename": "<FILENAME>"
}

Die Liste ist im Laufe des Programms stets konstant, sodass die Methode nur einmalig vom Client aufgerufen werden muss.

hadesd.txt · Zuletzt geändert: 2019/02/27 20:14 von henry.krumb