mirror of
https://git.quad4.io/RNS-Things/MeshChatX.git
synced 2026-04-28 01:56:12 +00:00
347 lines
16 KiB
Markdown
347 lines
16 KiB
Markdown
# Reticulum MeshChatX
|
||
|
||
[English](../README.md) | [Русский](README.ru.md) | [Italiano](README.it.md) | [中文](README.zh.md) | [日本語](README.ja.md)
|
||
|
||
Ein umfassend modifizierter und funktionsreicher Fork von Reticulum MeshChat von Liam Cottle.
|
||
|
||
Dieses Projekt ist unabhaengig vom originalen Reticulum MeshChat und steht in keiner Verbindung dazu.
|
||
|
||
- Website: [meshchatx.com](https://meshchatx.com)
|
||
- Quellcode: [git.quad4.io/RNS-Things/MeshChatX](https://git.quad4.io/RNS-Things/MeshChatX)
|
||
- Offizieller Spiegel: [github.com/Quad4/MeshChatX](https://github.com/Quad4/MeshChatX) – derzeit auch fuer Windows- und macOS-Builds genutzt.
|
||
- Releases: [git.quad4.io/RNS-Things/MeshChatX/releases](https://git.quad4.io/RNS-Things/MeshChatX/releases)
|
||
- Aenderungsprotokoll: [`CHANGELOG.md`](../CHANGELOG.md)
|
||
- TODO: [Boards](https://git.quad4.io/RNS-Things/MeshChatX/projects)
|
||
|
||
## Wichtige Aenderungen gegenueber Reticulum MeshChat
|
||
|
||
- Verwendet LXST
|
||
- Peewee-ORM durch direktes SQL ersetzt
|
||
- Axios durch natives `fetch` ersetzt
|
||
- Electron 41.x (mit Node-24-Laufzeit)
|
||
- `.whl`-Pakete mit Webserver und eingebauten Frontend-Assets fuer mehr Deploy-Optionen
|
||
- i18n
|
||
- PNPM und Poetry fuer Abhaengigkeiten
|
||
|
||
> [!WARNING]
|
||
> MeshChatX garantiert keine Datenkompatibilitaet mit aelteren Reticulum-MeshChat-Versionen. Erstellen Sie vor Migration oder Tests eine Datensicherung.
|
||
|
||
> [!WARNING]
|
||
> Aeltere Systeme werden noch nicht vollstaendig unterstuetzt. Aktuelle Mindestanforderungen: Python `>=3.11` und Node `>=24` (Electron 41 entspricht Node 24; `engines` in `package.json` und CI folgen derselben Vorgabe).
|
||
|
||
## Voraussetzungen
|
||
|
||
- Python `>=3.11` (aus `pyproject.toml`)
|
||
- Node.js `>=24` (aus `package.json`, Feld `engines`)
|
||
- pnpm `10.33.0` (aus `package.json`, Feld `packageManager`)
|
||
- Poetry (verwendet in `Taskfile.yml` und CI-Workflows)
|
||
|
||
```bash
|
||
task install
|
||
task lint:all
|
||
task test:all
|
||
task build:all
|
||
```
|
||
|
||
## Installationsmethoden
|
||
|
||
Waehlen Sie die Methode passend zu Umgebung und Paketierung.
|
||
|
||
| Methode | Frontend enthalten | Architekturen | Geeignet fuer |
|
||
| --------------------- | ------------------ | ------------------------------------- | ----------------------------------- |
|
||
| Docker-Image | Ja | `linux/amd64`, `linux/arm64` | Schnellster Start auf Linux-Servern |
|
||
| Python Wheel (`.whl`) | Ja | Jede Python-unterstuetzte Architektur | Headless/Webserver ohne Node-Build |
|
||
| Linux AppImage | Ja | `x64`, `arm64` | Portabler Desktop-Einsatz |
|
||
| Debian-Paket (`.deb`) | Ja | `x64`, `arm64` | Debian/Ubuntu-Installation |
|
||
| RPM-Paket (`.rpm`) | Ja | CI-abhaengig | Fedora/RHEL/openSUSE |
|
||
| Aus Quellcode | Lokal gebaut | Host-Architektur | Entwicklung und individuelle Builds |
|
||
|
||
Hinweise:
|
||
|
||
- Der Release-Workflow baut explizit Linux `x64` und `arm64` AppImage + DEB.
|
||
- RPM wird ebenfalls versucht und bei Erfolg hochgeladen.
|
||
|
||
## Schnellstart: Docker
|
||
|
||
```bash
|
||
docker compose up -d
|
||
```
|
||
|
||
Standard-Compose-Datei:
|
||
|
||
- `127.0.0.1:8000` auf dem Host -> Container-Port `8000`
|
||
- `./meshchat-config` -> `/config` fuer Persistenz
|
||
|
||
Bei Berechtigungsproblemen:
|
||
|
||
```bash
|
||
sudo chown -R 1000:1000 ./meshchat-config
|
||
```
|
||
|
||
## Installation aus Release-Artefakten
|
||
|
||
### 1) Linux AppImage (x64/arm64)
|
||
|
||
1. `ReticulumMeshChatX-v<version>-linux-<arch>.AppImage` von den Releases herunterladen.
|
||
2. Ausfuehrbar machen und starten:
|
||
|
||
```bash
|
||
chmod +x ./ReticulumMeshChatX-v*-linux-*.AppImage
|
||
./ReticulumMeshChatX-v*-linux-*.AppImage
|
||
```
|
||
|
||
### 2) Debian/Ubuntu `.deb` (x64/arm64)
|
||
|
||
1. `ReticulumMeshChatX-v<version>-linux-<arch>.deb` herunterladen.
|
||
2. Installieren:
|
||
|
||
```bash
|
||
sudo apt install ./ReticulumMeshChatX-v*-linux-*.deb
|
||
```
|
||
|
||
### 3) RPM-basierte Systeme
|
||
|
||
1. `ReticulumMeshChatX-v<version>-linux-<arch>.rpm` herunterladen, falls im Release vorhanden.
|
||
2. Installieren:
|
||
|
||
```bash
|
||
sudo rpm -Uvh ./ReticulumMeshChatX-v*-linux-*.rpm
|
||
```
|
||
|
||
### 4) Python Wheel (`.whl`)
|
||
|
||
Release-Wheels enthalten die gebauten Web-Assets.
|
||
|
||
```bash
|
||
pip install ./reticulum_meshchatx-*-py3-none-any.whl
|
||
meshchatx --headless
|
||
```
|
||
|
||
`pipx` wird ebenfalls unterstuetzt:
|
||
|
||
```bash
|
||
pipx install ./reticulum_meshchatx-*-py3-none-any.whl
|
||
```
|
||
|
||
## Aus Quellcode ausfuehren (Webserver-Modus)
|
||
|
||
Fuer Entwicklung oder lokale Custom-Builds.
|
||
|
||
```bash
|
||
git clone https://git.quad4.io/RNS-Things/MeshChatX.git
|
||
cd MeshChatX
|
||
corepack enable
|
||
pnpm config set verify-store-integrity true
|
||
pnpm install --frozen-lockfile
|
||
pip install "poetry==2.3.4"
|
||
poetry check --lock
|
||
poetry install
|
||
pnpm run build-frontend
|
||
poetry run python -m meshchatx.meshchat --headless --host 127.0.0.1
|
||
```
|
||
|
||
Hinweise zu den Installationsbefehlen:
|
||
|
||
- `pnpm install --frozen-lockfile` verweigert Aenderungen an `pnpm-lock.yaml` und schlaegt fehl, wenn die Lockdatei nicht zu `package.json` passt. Damit wird verhindert, dass eine unerwartete Upstream-Version still eingespielt wird.
|
||
- `verify-store-integrity=true` ist auch in der projektweiten `.npmrc` gesetzt; die explizite `pnpm config set`-Zeile haertet zusaetzlich die Benutzerkonfiguration.
|
||
- Lifecycle-Skripte (`preinstall`/`postinstall`) sind in pnpm v10+ standardmaessig blockiert. Nur die unter `pnpm.onlyBuiltDependencies` in `package.json` aufgefuehrten Pakete duerfen Installationsskripte ausfuehren (aktuell `electron`, `electron-winstaller`, `esbuild`, `protobufjs`).
|
||
- `poetry check --lock` schlaegt frueh fehl, wenn `poetry.lock` nicht mit `pyproject.toml` synchron ist; `poetry install` aufloest danach nur aus der Lockdatei.
|
||
- Fuer eine strikte Lockfile-Installation (ohne implizite Lock-Aktualisierung) Poetry mit `pip install "poetry==2.3.4"` pinnen, passend zur CI-Version.
|
||
|
||
Wenn Sie absichtlich Abhaengigkeiten aktualisieren wollen, fuehren Sie `pnpm update` / `poetry update` in einem dedizierten Commit aus und pruefen Sie das resultierende Lockdatei-Diff vor dem Push.
|
||
|
||
## Sandboxing (Linux)
|
||
|
||
Um das native `meshchatx`-Programm (Alias: `meshchat`) mit zusaetzlicher Dateisystem-Isolation auszufuehren, koennen Sie **Firejail** oder **Bubblewrap** (`bwrap`) nutzen, bei weiterhin normalem Netzwerkzugriff fuer Reticulum und die Web-Oberflaeche. Vollstaendige Beispiele (pip/pipx, Poetry, Hinweise zu USB-Seriell) finden Sie in:
|
||
|
||
- [`docs/meshchatx_linux_sandbox.md`](../docs/meshchatx_linux_sandbox.md)
|
||
|
||
Dieselbe Seite erscheint in der in-app-**Dokumentation** (MeshChatX-Docs), wenn sie aus den gebuendelten oder synchronisierten `meshchatx-docs`-Dateien ausgeliefert wird.
|
||
|
||
## Linux-Desktop: Emoji-Schriften
|
||
|
||
Die Emoji-Auswahl rendert Standard-Unicode-Emoji mit den Systemschriften (Electron/Chromium). Wenn Emoji als leere Kaestchen („Tofu“) erscheinen, installieren Sie ein Farb-Emoji-Paket und starten Sie die App neu.
|
||
|
||
| Distribution (Beispiele) | Paket |
|
||
| -------------------------- | -------------------------------------------------------------------- |
|
||
| Arch Linux, Artix, Manjaro | `noto-fonts-emoji` (`sudo pacman -S noto-fonts-emoji`) |
|
||
| Debian, Ubuntu | `fonts-noto-color-emoji` (`sudo apt install fonts-noto-color-emoji`) |
|
||
| Fedora | `google-noto-emoji-color-fonts` |
|
||
|
||
Nach der Installation bei Bedarf `fc-cache -fv` ausfuehren. Optional: `noto-fonts` fuer breitere Symbolabdeckung bei minimalen Installationen.
|
||
|
||
## Desktop-Pakete aus Quellcode bauen
|
||
|
||
Diese Skripte sind in `package.json` und `Taskfile.yml` definiert.
|
||
|
||
### Linux x64 AppImage + DEB
|
||
|
||
```bash
|
||
pnpm run dist:linux-x64
|
||
```
|
||
|
||
### Linux arm64 AppImage + DEB
|
||
|
||
```bash
|
||
pnpm run dist:linux-arm64
|
||
```
|
||
|
||
### RPM
|
||
|
||
```bash
|
||
pnpm run dist:rpm
|
||
```
|
||
|
||
Oder ueber Task:
|
||
|
||
```bash
|
||
task dist:fe:rpm
|
||
```
|
||
|
||
## Architekturunterstuetzung
|
||
|
||
- Docker-Image: `amd64`, `arm64`
|
||
- Linux AppImage: `x64`, `arm64`
|
||
- Linux DEB: `x64`, `arm64`
|
||
- Windows: `x64`, `arm64` (Build-Skripte vorhanden)
|
||
- macOS: Build-Skripte vorhanden (`arm64`, `universal`) fuer lokale Build-Umgebungen
|
||
- Android: native APKs — ABIs `arm64-v8a`, `x86_64`, plus universal
|
||
|
||
## Android
|
||
|
||
MeshChatX unterstuetzt native Android-APK-Builds (nicht nur Termux).
|
||
|
||
### APKs aus Quellcode bauen
|
||
|
||
Vom Repository-Root:
|
||
|
||
```bash
|
||
# 1) Chaquopy-Wheels gemaess android/app/build.gradle bauen
|
||
bash scripts/build-android-wheels-local.sh
|
||
|
||
# 2) Beide APK-Varianten bauen
|
||
cd android
|
||
./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
|
||
```
|
||
|
||
APK-Ausgaben (ABI-Splits plus universelles APK; siehe `splits { abi { ... } }` in `android/app/build.gradle`):
|
||
|
||
Debug (`android/app/build/outputs/apk/debug/`):
|
||
|
||
- `app-arm64-v8a-debug.apk` (ARM64-Geraete)
|
||
- `app-x86_64-debug.apk` (x86_64-Emulatoren)
|
||
- `app-universal-debug.apk` (alle gebundelten ABIs in einem Paket)
|
||
|
||
Release (`android/app/build/outputs/apk/release/`):
|
||
|
||
- `app-arm64-v8a-release-unsigned.apk`
|
||
- `app-x86_64-release-unsigned.apk`
|
||
- `app-universal-release-unsigned.apk`
|
||
|
||
Hinweise:
|
||
|
||
- Release-Ausgaben sind standardmaessig unsigniert, sofern keine Signatur konfiguriert ist.
|
||
- Wenn nur eine Variante noetig ist: `:app:assembleDebug` oder `:app:assembleRelease`.
|
||
- Android zielt auf die ABIs `arm64-v8a` und `x86_64` gemaess `android/app/build.gradle`.
|
||
|
||
Weitere Dokumentation:
|
||
|
||
- [`docs/meshchatx_on_android_with_termux.md`](../docs/meshchatx_on_android_with_termux.md)
|
||
- [`android/README.md`](../android/README.md)
|
||
|
||
## Konfiguration
|
||
|
||
| Argument | Umgebungsvariable | Standard | Beschreibung |
|
||
| -------------------------- | ---------------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| `--host` | `MESHCHAT_HOST` | `127.0.0.1` | Webserver-Bind-Adresse |
|
||
| `--port` | `MESHCHAT_PORT` | `8000` | Webserver-Port |
|
||
| `--no-https` | `MESHCHAT_NO_HTTPS` | `false` | HTTPS deaktivieren |
|
||
| `--ssl-cert` / `--ssl-key` | `MESHCHAT_SSL_CERT` / `MESHCHAT_SSL_KEY` | (keine) | PEM-Zertifikat und Schluessel; beide setzen. Ueberschreibt automatisch erzeugte Zertifikate unter der Identitaet im Verzeichnis `ssl/`. |
|
||
| `--rns-log-level` | `MESHCHAT_RNS_LOG_LEVEL` | (keine) | Reticulum (RNS) Log-Level: `none`, `critical`, `error`, `warning`, `notice`, `verbose`, `debug`, `extreme` oder numerisch. CLI ueberschreibt die Umgebungsvariable, wenn beide gesetzt sind. |
|
||
| `--headless` | `MESHCHAT_HEADLESS` | `false` | Browser nicht automatisch oeffnen |
|
||
| `--auth` | `MESHCHAT_AUTH` | `false` | Basis-Authentifizierung aktivieren |
|
||
| `--storage-dir` | `MESHCHAT_STORAGE_DIR` | `./storage` | Datenverzeichnis |
|
||
| `--public-dir` | `MESHCHAT_PUBLIC_DIR` | auto/bundled | Frontend-Verzeichnis (fuer Installationen ohne gebundelte Assets) |
|
||
|
||
## Branches
|
||
|
||
| Branch | Zweck |
|
||
| -------- | ------------------------------------------------------------------------------ |
|
||
| `master` | Stabile Releases. Nur produktionsreifer Code. |
|
||
| `dev` | Aktive Entwicklung. Kann instabile oder unvollstaendige Aenderungen enthalten. |
|
||
|
||
## Entwicklung
|
||
|
||
Gaengige Aufgaben aus `Taskfile.yml`:
|
||
|
||
```bash
|
||
task install
|
||
task lint:all
|
||
task test:all
|
||
task build:all
|
||
```
|
||
|
||
`Makefile`-Kurzformen:
|
||
|
||
| Befehl | Beschreibung |
|
||
| -------------- | --------------------------------------------- |
|
||
| `make install` | pnpm- und Poetry-Abhaengigkeiten installieren |
|
||
| `make run` | MeshChatX ueber Poetry starten |
|
||
| `make build` | Frontend bauen |
|
||
| `make lint` | eslint und ruff ausfuehren |
|
||
| `make test` | Frontend- und Backend-Tests |
|
||
| `make clean` | Build-Artefakte und node_modules entfernen |
|
||
|
||
## Versionierung
|
||
|
||
Aktuelle Version in diesem Repository: `4.5.0`.
|
||
|
||
- `package.json` ist die Quelle fuer die JavaScript/Electron-Version.
|
||
- `meshchatx/src/version.py` wird aus `package.json` synchronisiert mit:
|
||
|
||
```bash
|
||
pnpm run version:sync
|
||
```
|
||
|
||
Fuer konsistente Releases die Versionsfelder dort abgleichen, wo noetig (`package.json`, `pyproject.toml`, `meshchatx/__init__.py`).
|
||
|
||
## Sicherheit
|
||
|
||
- [`SECURITY.md`](../SECURITY.md)
|
||
- Integrierte Integritaetspruefungen und HTTPS/WSS-Standardeinstellungen in der App
|
||
- CI-Scanning-Workflows in `.gitea/workflows/`
|
||
|
||
## Sprache hinzufuegen
|
||
|
||
Die Locale-Erkennung erfolgt automatisch. Legen Sie eine neue Datei unter `meshchatx/src/frontend/locales/` an (z. B. `xx.json`) mit denselben Schluesseln wie `en.json` und einem obersten Feld `_languageName` fuer die Anzeige in der Sprachauswahl. Sie koennen `en.json` kopieren und alles von Hand uebersetzen; **maschinelle Erzeugung ist optional** und nie verpflichtend.
|
||
|
||
**Korrekturen und menschliche Uebersetzungen sind willkommen.** Verbesserungen an bestehenden Locale-Dateien oder vollstaendig manuell uebersetzte Dateien koennen Sie per Pull Request oder Issue im [Quellcode-Repository](https://git.quad4.io/RNS-Things/MeshChatX) oder beim [GitHub-Spiegel](https://github.com/Sudo-Ivan/MeshChatX) einreichen.
|
||
|
||
**Optional: Argos-Translate-Bootstrap** -- Wenn Sie einen maschinellen Erstentwurf aus `en.json` wollen, koennen Sie `scripts/argos_translate.py` nutzen. Es kuemmert sich um Formatierung und schuetzt Interpolationsvariablen (wie `{count}`) vor versehentlichen Aenderungen.
|
||
|
||
```bash
|
||
# Installieren Sie argostranslate, falls noch nicht geschehen
|
||
pip install argostranslate
|
||
|
||
# Fuehren Sie das Uebersetzungsskript aus
|
||
python scripts/argos_translate.py --from en --to xx --input meshchatx/src/frontend/locales/en.json --output meshchatx/src/frontend/locales/xx.json --name "Ihr Sprachname"
|
||
```
|
||
|
||
Nach einem maschinellen Entwurf sollten ein LLM oder ein Mensch Grammatik, Kontext und Ton pruefen (z. B. formell vs. informell).
|
||
|
||
Schluesselparitaet pruefen: `pnpm test -- tests/frontend/i18n.test.js --run`
|
||
|
||
Keine weiteren Code-Aenderungen noetig. App, Sprachwahl und Tests lesen Locales zur Build-Zeit aus `meshchatx/src/frontend/locales/`.
|
||
|
||
## Mitwirkende
|
||
|
||
- [Liam Cottle](https://github.com/liamcottle) - Originales Reticulum MeshChat
|
||
- [RFnexus](https://github.com/RFnexus) - Micron-Parser (JavaScript)
|
||
- [markqvist](https://github.com/markqvist) - Reticulum, LXMF, LXST
|
||
|
||
## Lizenz
|
||
|
||
Die projekt-eigenen Anteile stehen unter 0BSD.
|
||
Urspruengliche Upstream-Anteile von MeshChat bleiben unter MIT.
|
||
Vollstaendiger Text und Hinweise in [`../LICENSE`](../LICENSE).
|