Files
MeshChatX/lang/README.it.md
T

18 KiB

Reticulum MeshChatX

English | Deutsch | Русский | 中文 | 日本語

Un fork ampiamente modificato e ricco di funzionalita di Reticulum MeshChat di Liam Cottle.

Questo progetto e indipendente dal progetto originale Reticulum MeshChat e non e affiliato ad esso.

rngit: git clone rns://926baefe13daf5178c174f158dae1b45/quad4/MeshChatX NomadNet Node: c10d80b1a42fa958c37a6cc30dc04f53:/page/index.mu

Modifiche importanti rispetto a Reticulum MeshChat

  • Usa LXST per le chiamate
  • Peewee ORM sostituito con SQL diretto
  • Axios sostituito con fetch nativo
  • Electron 41.x (runtime Node 24 incluso)
  • Wheel .whl con web server e asset frontend integrati per piu opzioni di deploy
  • i18n
  • PNPM e Poetry per le dipendenze

Warning

MeshChatX non garantisce la compatibilita dei dati con le versioni precedenti di Reticulum MeshChat. Eseguire un backup prima della migrazione o dei test.

Warning

I sistemi legacy non sono ancora supportati. Base attuale: Python >=3.11 e Node >=24 (Electron 41 allineato a Node 24; engines in package.json e la CI seguono la stessa linea).

Requisiti

  • Python >=3.11 (da pyproject.toml)
  • Node.js >=24 (da package.json, campo engines)
  • pnpm 10.33.0 (da package.json, campo packageManager)
  • Poetry (utilizzato in Taskfile.yml e nei workflow CI)

Browser Versions Required:

Safari 16.4 o successivo, Chrome 111 o successivo, Firefox 128 o successivo (interfaccia web integrata).

task install
task lint:all
task test:all
task build:all

Metodi di installazione

Scegli il metodo in base all'ambiente e al formato del pacchetto.

Metodo Include frontend Architetture Ideale per
Immagine Docker Si linux/amd64, linux/arm64 Avvio rapido su server Linux
Python wheel (.whl) Si Qualsiasi architettura supportata da Python Installazione headless/web-server senza build Node
Linux AppImage Si x64, arm64 Uso desktop portatile
Pacchetto Debian (.deb) Si x64, arm64 Installazione Debian/Ubuntu
Pacchetto RPM (.rpm) Si Dipende dal runner CI per l'artefatto pubblicato Fedora/RHEL/openSUSE
Da sorgente Compilato localmente Architettura host Sviluppo e build personalizzati

Note:

  • GitHub Actions compila le release con tag (Linux wheel/AppImage/deb/rpm, Windows, macOS, Flatpak, APK Android se il tag è su dev/master, SLSA, bozza di release) in un'unica esecuzione tramite .github/workflows/build-release.yml; l'immagine container tramite .github/workflows/docker.yml. CI Android per branch e PR: .github/workflows/android-build.yml.
  • Per Linux, x64 e arm64 AppImage + DEB sono compilate su GitHub; il RPM e tentato e viene caricato quando l'artefatto e prodotto.

Docker

  • Docker Hub: quad4io/meshchatx
  • GHCR: ghcr.io/quad4-software/meshchatx
docker compose up -d
docker run -d --name reticulum-meshchatx \
  --restart unless-stopped \
  --security-opt no-new-privileges:true \
  -p 127.0.0.1:8000:8000 \
  -v "$(pwd)/meshchat-config:/config" \
  ghcr.io/quad4-software/meshchatx:latest

Al posto dell'immagine GHCR puoi usare quad4io/meshchatx:latest se preferisci Docker Hub.

Il file compose predefinito mappa:

  • 127.0.0.1:8000 sull'host -> porta 8000 del container
  • ./meshchat-config -> /config per la persistenza

In caso di errori di permessi:

sudo chown -R 1000:1000 ./meshchat-config

Installazione da artefatti di release

1) Linux AppImage (x64/arm64)

  1. Scaricare ReticulumMeshChatX-v<versione>-linux-<arch>.AppImage dalle release.
  2. Rendere eseguibile e avviare:
chmod +x ./ReticulumMeshChatX-v*-linux-*.AppImage
./ReticulumMeshChatX-v*-linux-*.AppImage

2) Debian/Ubuntu .deb (x64/arm64)

  1. Scaricare ReticulumMeshChatX-v<versione>-linux-<arch>.deb.
  2. Installare:
sudo apt install ./ReticulumMeshChatX-v*-linux-*.deb

3) Sistemi RPM

  1. Scaricare ReticulumMeshChatX-v<versione>-linux-<arch>.rpm se presente nella release.
  2. Installare:
sudo rpm -Uvh ./ReticulumMeshChatX-v*-linux-*.rpm

4) Python wheel (.whl)

I wheel delle release includono gli asset web compilati.

pip install ./reticulum_meshchatx-*-py3-none-any.whl
meshchatx --headless

pipx e supportato:

pipx install ./reticulum_meshchatx-*-py3-none-any.whl

Esecuzione da sorgente (modalita web server)

Per sviluppo o build locali personalizzate.

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

Note sui comandi di installazione:

  • pnpm install --frozen-lockfile rifiuta di aggiornare pnpm-lock.yaml e fallisce se il lockfile non corrisponde a package.json. Cosi' si evita che una versione upstream inattesa venga installata silenziosamente.
  • verify-store-integrity=true e' impostato anche nel .npmrc del progetto; la riga esplicita pnpm config set rafforza inoltre la configurazione utente.
  • Gli script di lifecycle (preinstall/postinstall) sono bloccati di default in pnpm v10+. Solo i pacchetti elencati in pnpm.onlyBuiltDependencies di package.json possono eseguire script di installazione (attualmente electron, electron-winstaller, esbuild).
  • poetry check --lock fallisce subito se poetry.lock non e' allineato con pyproject.toml; poetry install risolve poi solo dal lockfile.
  • Per un'installazione Poetry strettamente basata sul lockfile (senza refresh implicito), fissa Poetry con pip install "poetry==2.3.4", in linea con la CI.

Se vuoi aggiornare intenzionalmente le dipendenze, esegui pnpm update / poetry update in un commit dedicato e rivedi il diff del lockfile prima del push.

Esecuzione in sandbox (Linux)

Per eseguire il binario nativo meshchatx (alias: meshchat) con isolamento aggiuntivo del filesystem, puoi usare Firejail o Bubblewrap (bwrap) mantenendo l'accesso di rete normale per Reticulum e l'interfaccia web. Esempi completi (pip/pipx, Poetry, note sulla seriale USB) sono in:

La stessa pagina compare nell'elenco Documentazione (documentazione MeshChatX) in-app quando viene servita dai file meshchatx-docs in bundle o sincronizzati.

Desktop Linux: font emoji

Il selettore emoji mostra gli emoji Unicode standard usando i font di sistema (Electron/Chromium). Se compaiono quadrati vuoti ("tofu"), installate un pacchetto emoji a colori e riavviate l'app.

Famiglia (esempi) Pacchetto
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

Dopo l'installazione, eseguite fc-cache -fv se i glifi non compaiono fino al prossimo accesso. Opzionale: noto-fonts per una copertura simboli più ampia su installazioni minime.

Compilazione pacchetti desktop da sorgente

Gli script sono definiti in package.json e Taskfile.yml.

Linux x64 AppImage + DEB

pnpm run dist:linux-x64

Linux arm64 AppImage + DEB

pnpm run dist:linux-arm64

RPM

pnpm run dist:rpm

Oppure tramite Task:

task dist:fe:rpm

Build container (wheel, AppImage, deb, rpm)

Dockerfile.build esegue le stesse fasi usate in CI (Poetry, pnpm, task, dipendenze APT). Orientato a linux/amd64 (tarball NodeSource amd64, Task amd64). Il target predefinito e completo; si puo sovrascrivere con un build-arg.

Valori per MESHCHATX_BUILD_TARGETS: all (default), wheel o electron (AppImage + deb per x64 e arm64, RPM se possibile, senza wheel).

Build:

docker build -f Dockerfile.build -t meshchatx-build:local .

Solo wheel:

docker build -f Dockerfile.build --build-arg MESHCHATX_BUILD_TARGETS=wheel -t meshchatx-build:wheel .

Copiare /artifacts dall'immagine finita all'host:

cid=$(docker create meshchatx-build:local)
docker cp "${cid}:/artifacts" ./meshchatx-artifacts
docker rm "${cid}"

Supporto architetture

  • Immagine Docker: amd64, arm64
  • Linux AppImage: x64, arm64
  • Linux DEB: x64, arm64
  • Windows: x64, arm64 (script di build disponibili)
  • macOS: script di build disponibili (arm64, universal) per ambienti di build locali
  • Android: solo APK universale (vedi android/README.md)

Android

MeshChatX supporta build APK Android native (non solo Termux).

Build APK da sorgente

Dalla root del repository:

# 1) Build delle wheel Chaquopy usate da android/app/build.gradle
bash scripts/build-android-wheels-local.sh

# 2) Build APK universal (un debug + una release per esecuzione; vedi android/README.md)
cd android
./gradlew --no-daemon :app:assembleDebug :app:assembleRelease

Una sola variante Android. Gradle sincronizza l'intera directory meshchatx/ in app/src/main/python/meshchatx/, incluse le wheel offline del repository. Build documentate e pubblicate usano solo packaging universal: un APK debug e uno release per esecuzione, ciascuno con tutti gli ABI nativi configurati in android/app/build.gradle.

  • Debug: android/app/build/outputs/apk/debug/app-debug.apk
  • Release: android/app/build/outputs/apk/release/app-release-unsigned.apk

Note:

  • Gli output di release non sono firmati finche non configuri la firma (scripts/sign-android-apks.sh).
  • Gli ABI nativi nel APK universale seguono android/app/build.gradle (incluso armeabi-v7a se abilitato). Le wheel per armeabi-v7a richiedono Android SDK su ANDROID_HOME (vedi android/README.md).
  • Se esiste in root dist/reticulum_meshchatx-*.whl (es. da python -m build --wheel -o dist .), l'aggiornamento del repository in bundle preferisce quella wheel rispetto a PyPI. In CI la wheel viene costruita prima del passo Gradle Android.

Documentazione aggiuntiva:

Configurazione

Argomento Variabile d'ambiente Predefinito Descrizione
--host MESHCHAT_HOST 127.0.0.1 Indirizzo di bind del web server
--port MESHCHAT_PORT 8000 Porta del web server
--no-https MESHCHAT_NO_HTTPS false Disattiva HTTPS
--ssl-cert / --ssl-key MESHCHAT_SSL_CERT / MESHCHAT_SSL_KEY (nessuno) Percorsi PEM certificato e chiave; impostare entrambi. Sostituisce i certificati auto-generati sotto l'identita nella directory ssl/.
--rns-log-level MESHCHAT_RNS_LOG_LEVEL (nessuno) Livello di log Reticulum (RNS): none, critical, error, warning, notice, verbose, debug, extreme o numerico. La CLI ha priorita sulla variabile d'ambiente se entrambe sono impostate.
--headless MESHCHAT_HEADLESS false Non aprire il browser automaticamente
--auth MESHCHAT_AUTH false Attiva autenticazione base
--storage-dir MESHCHAT_STORAGE_DIR ./storage Directory dei dati
--public-dir MESHCHAT_PUBLIC_DIR auto/bundled Directory dei file frontend (necessaria per installazioni da sorgente senza asset in bundle)

Branch

Branch Scopo
master Release stabili. Solo codice pronto per la produzione.
dev Sviluppo attivo. Potrebbe contenere modifiche instabili o incomplete.

Sviluppo

Attivita comuni da Taskfile.yml:

task install
task lint:all
task test:all
task build:all

Scorciatoie Makefile:

Comando Descrizione
make install Installa dipendenze pnpm e poetry
make run Esegue MeshChatX tramite poetry
make build Compila il frontend
make lint Esegue eslint e ruff
make test Test frontend e backend
make clean Rimuove artefatti di build e node_modules

Versionamento

Versione attuale nel repository: 4.6.0.

  • L'unico valore che modifichi per un bump di release e version in package.json.
  • Esegui pnpm run version:sync (all'inizio anche di pnpm run build) per propagare in pyproject.toml, meshchatx/src/version.py, THIRD_PARTY_NOTICES.txt (riga prodotto), README / lang/README.* (righe "versione attuale"), esempio pipx in docs/meshchatx_on_raspberry_pi.md, e aiuti in packaging/arch/PKGBUILD.
  • meshchatx.__version__ si legge da meshchatx/src/version.py senza importare meshchatx.src, cosi un semplice import meshchatx resta leggero.
  • Le voci del changelog restano manuali quando tagghi una release.

Sicurezza

  • SECURITY.md
  • LEGAL.md
  • Controlli di integrita integrati e valori predefiniti HTTPS/WSS nel runtime dell'app.
  • Build CI e release su GitHub Actions.

Aggiungere una lingua

Flusso dell'autore: ArgosTranslate, poi LLM locale (Qwen 3 + Gemma 4).

Poi si accettano volentieri fix dalla community (LXMF o come mi contattate).

Il rilevamento locale e automatico. Aggiungi un file in meshchatx/src/frontend/locales/ (es. xx.json) con le stesse chiavi di en.json e un _languageName in cima per l'etichetta nel selettore. Puoi copiare en.json e tradurre tutto a mano; la generazione assistita da machine e opzionale e non e mai obbligatoria.

Opzionale: avvio con Argos Translate -- per una bozza partendo da en.json puoi usare scripts/argos_translate.py (formattazione, output a colori, variabili di interpolazione come {count}).

# Installa argostranslate se non l'hai gia
pipx install argostranslate

# Esegui lo script di traduzione
python scripts/argos_translate.py --from en --to xx --input meshchatx/src/frontend/locales/en.json --output meshchatx/src/frontend/locales/xx.json --name "Nome della tua lingua"

Dopo qualsiasi passaggio automatico, un LLM o un revisore umano controlli grammatica, contesto e tono (es. formale vs informale).

Esegui pnpm test -- tests/frontend/i18n.test.js --run per verificare la parita delle chiavi con en.json.

Non sono necessarie altre modifiche al codice. L'app, il selettore della lingua e i test scoprono le lingue dalla cartella meshchatx/src/frontend/locales/ durante la compilazione.

Crediti

Licenza

Le parti di proprieta del progetto sono rilasciate sotto 0BSD. Le parti originali upstream da Reticulum MeshChat restano sotto MIT. Per testo completo e note, vedi ../LICENSE.