Live-USB durch eigenständige Anwendung ersetzen
Some checks failed
Tests / test (push) Has been cancelled

This commit is contained in:
2026-10-15 10:26:33 +02:00
parent 692bbbb815
commit 1f91db25b5
23 changed files with 205 additions and 1228 deletions

150
README.md
View File

@@ -1,21 +1,22 @@
# CS-R USB-AIO
# CS-R Intake
Der USB-Stick unterstützt die Annahme und technische Prüfung gespendeter Computer.
Er startet als eigenständiges Arch-Linux-Livesystem, erkennt das aktuelle Gerät über
seine Hardware-ID und verbindet es mit der zentralen Inventarverwaltung.
CS-R Intake ist eine eigenständige Linux-Anwendung für die Annahme und technische
Prüfung gespendeter Computer. Sie erkennt das aktuelle Gerät über eine stabile
Hardware-ID, verbindet es mit der Inventarverwaltung und speichert alle Arbeiten
auch ohne Netzwerk lokal.
## Ablauf in der Werkstatt
1. Vom USB-Stick starten.
1. `csr-intake-x86_64.run` auf dem zu prüfenden Linux-Rechner starten.
2. Beim ersten Einsatz unter **Einstellungen** das Werkstatt-WLAN verbinden und
**WLAN speichern** aktiviert lassen.
3. Das Gerät wird über DMI-UUID oder Hersteller und Seriennummer erkannt.
4. Die Inventarverwaltung liefert die vorhandene Gerätenummer oder vergibt eine neue.
5. Geräte im Status **Eingang** erhalten automatisch einen Kurzscan mit Modell, CPU,
RAM und Datenträgern.
6. Danach kann der Techniker das Gerät ausschalten oder die Inspektion starten.
5. Neue Geräte und Geräte im Status **Eingang** erhalten automatisch einen Kurzscan
mit Modell, CPU, RAM und Datenträgern.
6. Danach kann der Techniker die Anwendung schließen oder die Inspektion starten.
7. Prüfstände und Ergebnisse werden als **Inspektion** synchronisiert. Offline
gespeicherte Ergebnisse bleiben in der Warteschlange und werden später erneut gesendet.
gespeicherte Ergebnisse bleiben in der Warteschlange und werden später gesendet.
Die Oberfläche konzentriert sich auf **Gerät**, **Inspektion** und **Einstellungen**.
Reparaturen, Berichte und die Synchronisationswarteschlange sind über das Menü erreichbar.
@@ -36,87 +37,70 @@ Reparaturen, Berichte und die Synchronisationswarteschlange sind über das Menü
- zentrale Sprache, Testdauer und Grenzwerte
- verifizierbarer Build mit Versions- und Prüfsummenmanifest
## Anwendung starten
Die Release-Datei enthält Oberfläche und Hardware-Scanner. Sie entpackt geprüfte
Programmdateien in den Benutzer-Cache und speichert Einstellungen, Berichte und die
Offline-Warteschlange standardmäßig unter `~/.local/share/csr-intake`.
```bash
chmod +x csr-intake-x86_64.run
./csr-intake-x86_64.run
```
Ein anderer Datenordner kann mit `--data /pfad/zum/ordner` gewählt werden:
```bash
./csr-intake-x86_64.run --data "$HOME/csr-intake-daten"
./csr-intake-x86_64.run --version
./csr-intake-x86_64.run --check-bundle
```
Die Anwendung ist für x86-64 Linux gebaut. Sie benötigt eine grafische Sitzung,
Python 3, SQLite und NetworkManager. Einzelne Diagnosen verwenden Systemwerkzeuge
wie `smartctl`, `stress-ng`, `ffmpeg`, `arecord`, `lsusb` und `xdg-open`. Fehlt ein
Werkzeug, wird der Test als **nicht verfügbar** und nicht als Hardwarefehler bewertet.
## Konfiguration
Diese Dateien entstehen im Datenordner unter `config/`:
```text
inventory.json
inventory-api-key
inventory-server.crt
workshop-wifi.json
workshop.json
```
API-Schlüssel und WLAN-Passwort gehören nie in Git. Ein privates CA-Zertifikat darf
nur als öffentliches Zertifikat gespeichert werden. Sensible Konfigurationsdateien
sind nur für den Besitzer lesbar.
## Projekt bauen und prüfen
Voraussetzungen sind Rust, Cargo, Python 3 sowie die Entwicklungsbibliotheken für
X11, Wayland und OpenGL. Der vollständige Build führt Rust-, Python- und Rauchtests
aus und erzeugt anschließend genau ein verteilbares Artefakt:
```bash
bash scripts/build-release.sh
./dist/csr-intake-x86_64.run --check-bundle
```
Das Ergebnis liegt in `dist/csr-intake-x86_64.run`. `build/release.json` enthält
Build-ID, Versionen und SHA-256-Prüfsummen der eingebetteten Programme. Die CI stellt
dieselbe `.run`-Datei bei jedem erfolgreichen Build als Artefakt bereit.
## Projektaufbau
| Pfad | Inhalt |
| --- | --- |
| `gui/` | Bedienoberfläche und geführte Tests |
| `scanner/` | Hardwareerkennung und Messwerte |
| `controller/` | Geräteklassifizierung und Auswertung |
| `scripts/` | Build, Synchronisation und lokale Datenwerkzeuge |
| `live/` | Start und Vorbereitung des Livesystems |
| `tests/` | Python- und Rauchtests |
| `config.example/` | Beispiel für die Inventarverbindung |
Der Inventory-Server wird in einem eigenen Repository gepflegt. Dieses Repository
enthält ausschließlich den USB-Client.
## Entwicklung und Prüfung
Voraussetzungen sind Rust, Cargo und Python 3. Auf Arch Linux werden für den ISO-Bau
zusätzlich `archiso`, GRUB, Dateisystemwerkzeuge und `libarchive` benötigt.
```bash
bash scripts/build-release.sh
```
Der Befehl führt die Rust-, Python- und Rauchtests aus, baut alle drei Programme im
Release-Modus und erzeugt `build/release.json` mit Build-ID und SHA-256-Prüfsummen.
## Eigenständige Anwendung
Für einen normalen x86-64-Linux-Rechner kann eine einzelne ausführbare Datei gebaut
werden. Sie enthält GUI und Hardware-Scanner und verwendet standardmäßig
`~/.local/share/csr-intake` für Berichte und Einstellungen:
```bash
bash scripts/build-release.sh
bash scripts/build-standalone.sh
./dist/csr-intake-x86_64.run
```
Ein anderer Datenordner kann mit `--data /pfad/zum/ordner` gewählt werden. Das Paket
ist für die Linux-Version des Build-Rechners bestimmt und benötigt Python 3, SQLite,
NetworkManager sowie die jeweiligen Diagnoseprogramme. `--check-bundle` prüft die
eingebetteten Dateien, ohne die Oberfläche zu starten.
## ISO erstellen
Das Zielverzeichnis muss neu und leer sein:
```bash
bash scripts/build-iso.sh "$PWD/build/usb-aio-2.6.0"
```
Der Build prüft Profil, Binärdateien, Kernelpfade und die FAT32-Größengrenze. Ein
erfolgreicher Softwaretest ersetzt keinen Starttest auf echter UEFI- und BIOS-Hardware.
## USB-Stick installieren
Dieser Befehl löscht den ausgewählten Datenträger vollständig:
```bash
lsblk -o NAME,PATH,TYPE,SIZE,TRAN,MODEL,SERIAL,MOUNTPOINTS
sudo bash scripts/install-usb.sh /dev/sdX /absoluter/pfad/zur.iso
```
Das Installationsskript akzeptiert nur ein vollständiges USB-Blockgerät, lehnt den
Systemdatenträger ab und verlangt die exakte Bestätigung `ERASE /dev/sdX`.
## Konfiguration auf `INTAKE_DATA`
Die dauerhaften Dateien liegen auf der Datenpartition des Sticks:
```text
config/inventory.json
config/inventory-api-key
config/inventory-server.crt
config/workshop-wifi.json
config/workshop.json
```
API-Schlüssel und WLAN-Passwort gehören nie in Git. Ein privates CA-Zertifikat darf
nur als öffentliches Zertifikat gespeichert werden. Die Datenpartition ist nicht
verschlüsselt und muss wie ein Werkstatt-Zugang behandelt werden.
Weitere Einzelheiten stehen in [WERKSTATT-ABLAUF.md](WERKSTATT-ABLAUF.md).
Der Inventory-Server wird in einem eigenen Repository gepflegt. Weitere Einzelheiten
zum Arbeitsablauf stehen in [WERKSTATT-ABLAUF.md](WERKSTATT-ABLAUF.md).