Files

21 KiB
Raw Permalink Blame History

Reticulum MeshChatX

English | Deutsch | Italiano | Русский | 中文

Liam Cottle 氏による Reticulum MeshChat を大幅に改修・機能拡張したフォークです。

本プロジェクトはオリジナルの Reticulum MeshChat とは独立しており、提携関係にありません。

Get it on Obtainium

rngit NomadNet Node: 5399f5a0212477618821e91e88ce053b:/page/index.mu

rngit: git clone rns://926baefe13daf5178c174f158dae1b45/quad4/MeshChatX

MeshChatX NomadNet Node: c10d80b1a42fa958c37a6cc30dc04f53:/page/index.mu

Reticulum MeshChat からの主な変更

  • 通話に LXST を使用
  • Peewee ORM を生 SQL に置き換え
  • Axios をネイティブ fetch に置き換え
  • Electron 41.x(同梱 Node 24 ランタイム)
  • Web サーバーと同梱フロントエンドを含む .whl によりデプロイの選択肢を拡張
  • i18n
  • 依存関係管理に PNPM と Poetry

Warning

MeshChatX は旧バージョンの Reticulum MeshChat とのデータ互換性を保証しません。マイグレーションやテスト前にデータをバックアップしてください。

Warning

レガシーシステムはまだサポートされません。現在の基準は Python >=3.11 と Node >=24Electron 41 は Node 24 に揃う;package.jsonengines と CI も同じライン)。

必要条件

  • Python >=3.11pyproject.toml より)
  • Node.js >=24package.jsonengines
  • pnpm 10.33.0package.jsonpackageManager
  • PoetryTaskfile.yml および CI ワークフローで使用)

Browser Versions Required:

Safari 16.4 以降、Chrome 111 以降、Firefox 128 以降(同梱 Web UI)。

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

インストール方法

環境とパッケージ形式に合わせて選んでください。

方法 フロントエンド含む アーキテクチャ 最適な用途
Docker イメージ はい linux/amd64, linux/arm64 Linux サーバーでの迅速なセットアップ
Python wheel (.whl) はい Python がサポートする全アーキテクチャ Node ビルド不要のヘッドレス/Web サーバー
Linux AppImage はい x64, arm64 ポータブルデスクトップ
Debian パッケージ (.deb) はい x64, arm64 Debian/Ubuntu
RPM パッケージ (.rpm) はい 公開用 CI ランナーに依存 Fedora/RHEL/openSUSE
ソースから ローカルビルド ホストアーキテクチャ 開発・カスタムビルド

備考:

  • GitHub Actions はタグ付きリリース(Linux wheel / AppImage / deb / rpm、Windows、macOS、Flatpak、dev/master 上のタグ時の Android APK、SLSA、ドラフトリリース)を 1 回のワークフローでビルドします: .github/workflows/build-release.yml。コンテナイメージは .github/workflows/docker.yml。ブランチと PR の Android CI は .github/workflows/android-build.yml
  • Linux x64 および arm64 の AppImage + DEB は GitHub でビルド。RPM も試行し、成果物があればアップロードします。

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 meshchatx-config:/config \
  ghcr.io/quad4-software/meshchatx:latest

GHCR の代わりに Docker Hub の quad4io/meshchatx:latest を使えます。

デフォルトの compose ファイル:

  • ホスト 127.0.0.1:8000 -> コンテナポート 8000
  • Docker の名前付きボリューム meshchatx-config -> /config(イメージの meshchat ユーザー UID 1000 と整合し、bind mount 用のホスト側 chown が不要になりやすい)

任意: ホストディレクトリをマウントする

ボリューム行を -v "$(pwd)/meshchat-config:/config" に置き換えます(Compose ではサービスの volumes を変更)。コンテナは UID 1000 で動きます。ホスト側ディレクトリはその UID で書き込み可能にしてください(例: sudo chown -R 1000:1000 ./meshchat-config)。初回起動前に空ディレクトリを作成しておくと、Docker が不適切な権限で作成するのを避けられます。

名前付きボリュームの確認や削除

docker volume inspect meshchatx-config
docker rm -f reticulum-meshchatx
docker volume rm meshchatx-config

リリースアーティファクトからのインストール

1) Linux AppImage (x64/arm64)

  1. リリースから ReticulumMeshChatX-v<バージョン>-linux-<アーキテクチャ>.AppImage をダウンロード。
  2. 実行権限を付与して起動:
chmod +x ./ReticulumMeshChatX-v*-linux-*.AppImage
./ReticulumMeshChatX-v*-linux-*.AppImage

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

  1. ReticulumMeshChatX-v<バージョン>-linux-<アーキテクチャ>.deb をダウンロード。
  2. インストール:
sudo apt install ./ReticulumMeshChatX-v*-linux-*.deb

3) RPM ベースのシステム

  1. リリースに ReticulumMeshChatX-v<バージョン>-linux-<アーキテクチャ>.rpm がある場合はダウンロード。
  2. インストール:
sudo rpm -Uvh ./ReticulumMeshChatX-v*-linux-*.rpm

4) Python wheel (.whl)

リリースの wheel にはビルド済みの Web アセットが含まれます。

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

pipx もサポート:

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

ソースからの実行(Web サーバーモード)

開発時やローカルのカスタムビルド向け。

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 "uv==0.11.12"
uv lock --check
uv sync --group dev
pnpm run build-frontend
uv run python -m meshchatx.meshchat --headless --host 127.0.0.1

上記インストールコマンドに関する補足:

  • pnpm install --frozen-lockfilepnpm-lock.yaml の更新を拒否し、ロックファイルが package.json と一致しない場合は失敗します。これにより、想定外の上流バージョンが暗黙的にインストールされるのを防げます。
  • verify-store-integrity=true はプロジェクトの .npmrc にも設定されています。上記の pnpm config set の行はユーザー設定側も明示的に固めるためのものです。
  • pnpm v10 以降、ライフサイクルスクリプト (preinstall/postinstall) はデフォルトでブロックされます。インストールスクリプトを実行できるのは package.jsonpnpm.onlyBuiltDependencies に列挙されたパッケージ(現在 electronelectron-winstalleresbuild)だけです。
  • uv lock --checkuv.lockpyproject.toml が同期していない場合に即時失敗します。その後の uv sync --group dev はロックファイルからのみ解決します。
  • 厳密にロックファイルだけで Poetry をインストールしたい場合は、CI と揃えるために pip install "uv==0.11.12" で Poetry バージョンを固定してください。

意図的に依存を更新する場合は、pnpm update / uv lock を専用コミットで実行し、push 前にロックファイルの diff を必ず確認してください。

サンドボックスで実行(Linux

ネイティブの meshchatx(エイリアス: meshchat)をファイルシステムをより隔離した状態で動かすには、Reticulum と Web UI 向けの通常のネットワークアクセスを保ちつつ Firejail または Bubblewrapbwrap)を使えます。詳しい例(pip/pipx、Poetry、USB シリアルの注意)は次を参照:

同梱または同期された meshchatx-docs から配信する場合、同じページがアプリ内 ドキュメント 一覧(MeshChatX ドキュメント)にも表示されます。

Linux デスクトップ: 絵文字フォント

絵文字ピッカーはシステムフォント(Electron/Chromium)で標準 Unicode 絵文字を描画します。絵文字が空の四角(「豆腐」)になる場合はカラー絵文字パッケージをインストールし、アプリを再起動してください。

ディストリビューション(例) パッケージ
Arch Linux, Artix, Manjaro noto-fonts-emojisudo pacman -S noto-fonts-emoji
Debian, Ubuntu fonts-noto-color-emojisudo apt install fonts-noto-color-emoji
Fedora google-noto-emoji-color-fonts

インストール後も表示されない場合は fc-cache -fv を実行してください。最小インストールでは記号の網羅用に noto-fonts も任意で入れてください。

ソースからのデスクトップパッケージビルド

スクリプトは package.jsonTaskfile.yml に定義されています。

Linux x64 AppImage + DEB

pnpm run dist:linux-x64

Linux arm64 AppImage + DEB

pnpm run dist:linux-arm64

RPM

pnpm run dist:rpm

Task 経由:

task dist:fe:rpm

コンテナビルド(wheel、AppImage、deb、rpm

Dockerfile.build は CI と同じ手順(Poetry、pnpm、task、APT 依存)を実行します。linux/amd64 向け(NodeSource の amd64 tarball、Task の amd64 バイナリ)。デフォルトは全ターゲット。build-arg で上書き可能。

MESHCHATX_BUILD_TARGETS の値: all(既定)、wheel、または electronx64 / arm64 の AppImage + deb、RPM はベストエフォート、wheel なし)。

ビルド:

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

wheel のみ:

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

完成したイメージから /artifacts をホストにコピー:

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

アーキテクチャサポート

  • Docker イメージ: amd64, arm64
  • Linux AppImage: x64, arm64
  • Linux DEB: x64, arm64
  • Windows: x64, arm64(ビルドスクリプトあり)
  • macOS: ローカルビルド向けにビルドスクリプトあり(arm64, universal
  • Android: universal APK のみ(android/README.md 参照)

Android

MeshChatX はネイティブ Android APK のビルドに対応しています(Termux のみに限りません)。

ソースから APK をビルド

リポジトリのルートで:

# 1) android/app/build.gradle で使う Chaquopy 用ホイールをビルド
bash scripts/build-android-wheels-local.sh

# 2) universal APK をビルド(1 回の実行で debug 1 本 + release 1 本;android/README.md 参照)
cd android
./gradlew --no-daemon :app:assembleDebug :app:assembleRelease

単一の Android バリアント。Gradle が meshchatx/ ツリー全体を app/src/main/python/meshchatx/ に同期し、オフラインリポジトリ用ホイールも含みます。ドキュメントおよび公開ビルドは universal パッケージのみです。実行ごとにデバッグ APK 1 本とリリース APK 1 本が生成され、それぞれ android/app/build.gradle で選んだ全ネイティブ ABI を含みます。

  • デバッグ: android/app/build/outputs/apk/debug/app-debug.apk
  • リリース: android/app/build/outputs/apk/release/app-release-unsigned.apk

備考:

  • リリース成果物は、署名を設定するまで既定で未署名(scripts/sign-android-apks.sh)。
  • universal APK に埋め込まれるネイティブ ABI は android/app/build.gradle の一覧(armeabi-v7a 有効時を含む)。armeabi-v7a 用ホイールのビルドには ANDROID_HOME の Android SDK が必要(android/README.md 参照)。
  • リポジトリルートに dist/reticulum_meshchatx-*.whl があると(例: python -m build --wheel -o dist .)、同梱リポジトリの更新で PyPI よりその MeshChatX ホイールを優先。CI では Android Gradle の前にそのホイールをビルドします。

追加ドキュメント:

設定

引数 環境変数 デフォルト 説明
--host MESHCHAT_HOST 127.0.0.1 Web サーバーのバインドアドレス
--port MESHCHAT_PORT 8000 Web サーバーポート
--no-https MESHCHAT_NO_HTTPS false HTTPS を無効化
--ssl-cert / --ssl-key MESHCHAT_SSL_CERT / MESHCHAT_SSL_KEY (なし) PEM 証明書と鍵のパス。両方指定。アイデンティティの ssl/ 下の自動生成証明書を上書き。
--rns-log-level MESHCHAT_RNS_LOG_LEVEL (なし) Reticulum(RNS)のログレベル(上記の名前または数値)。CLI は環境変数より優先。
--headless MESHCHAT_HEADLESS false ブラウザを自動で開かない
--auth MESHCHAT_AUTH false 基本認証を有効化
--reset-password MESHCHAT_RESET_PASSWORD false 保存されたパスワードハッシュを消去し、Web UI から新しいパスワードを設定できるようにする
--storage-dir MESHCHAT_STORAGE_DIR ./storage データディレクトリ
--public-dir MESHCHAT_PUBLIC_DIR 自動/同梱 フロントエンドのディレクトリ(同梱資産なしのソースインストールで必要)

ブランチ

ブランチ 目的
master 安定版リリース。本番向けのコードのみ。
dev 活発な開発。不安定または不完全な変更を含む場合があります。

開発

Taskfile.yml のよく使うタスク:

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

Makefile のショートカット:

コマンド 説明
make install pnpm と UV の依存関係をインストール
make run UV 経由で MeshChatX を実行
make build フロントエンドをビルド
make lint eslint と ruff を実行
make test フロントエンドとバックエンドのテスト
make clean ビルド成果物と node_modules を削除

バージョン管理

このリポジトリの現在のバージョンは 4.6.2 です。

  • リリースのバージョン上げは package.jsonversion のみ編集します。
  • pnpm run version:syncpnpm run build 開始時にも実行)で、pyproject.tomlmeshchatx/src/version.pyTHIRD_PARTY_NOTICES.txt(製品行)、README / lang/README.*(現在のバージョン行)、docs/meshchatx_on_raspberry_pi.md の pipx 例、packaging/arch/PKGBUILD の補助フィールドに反映します。
  • meshchatx.__version__meshchatx/src/version.py から読み、meshchatx.src をインポートしないため、単なる import meshchatx は軽量のままです。
  • Changelog のエントリはリリース時に手作業のままです。

セキュリティ

  • SECURITY.md
  • LEGAL.md
  • アプリランタイムの組み込み整合性チェックと既定の HTTPS/WSS。
  • GitHub Actions での CI およびリリースビルド。

言語の追加

作業手順: ArgosTranslate から ローカル LLMQwen 3 + Gemma 4)へ。

そのあと、LXMF 等で修正を歓迎します。

ロケールの検出は自動です。meshchatx/src/frontend/locales/ に新しいファイル(例: xx.json)を追加し、en.json と同じキーに加え、セレクタ表示用の _languageName を最上位に置きます。en.json をコピーし手作業で訳すこともできます。機械補助は任意で、求められません。

任意: Argos Translate で土台 -- en.json から下書きするには scripts/argos_translate.py(整形・カラー出力、 {count} 等の保護)を使えます。

# 必要なら argostranslate を導入
pipx install argostranslate

# 翻訳スクリプトを実行
python scripts/argos_translate.py --from en --to xx --input meshchatx/src/frontend/locales/en.json --output meshchatx/src/frontend/locales/xx.json --name "言語名"

機械下書きのあと、文法・文脈・トーンは LLM か人が確認(フォーマル/カジュアル等)。

pnpm test -- tests/frontend/i18n.test.js --runen.json とのキー一致を検証。

その他のコードの変更は必要ありません。アプリ、言語セレクター、およびテストは、ビルド時に meshchatx/src/frontend/locales/ ディレクトリからロケールを検出します。

寄付

寄付は任意です。このアプリを開発するための時間と労力に充てられます。

寄付の方法: donate.mdMonero、Ko-Fi、Buy Me a Coffee)。

クレジット

ライセンス

プロジェクト独自の部分は 0BSD です。 Reticulum MeshChat 由来の元の上流部分は MIT のままです。 全文と通知は ../LICENSE を参照してください。