Files

403 lines
21 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Reticulum MeshChatX
[English](../README.md) | [Deutsch](README.de.md) | [Italiano](README.it.md) | [Русский](README.ru.md) | [中文](README.zh.md)
Liam Cottle 氏による Reticulum MeshChat を大幅に改修・機能拡張したフォークです。
本プロジェクトはオリジナルの Reticulum MeshChat とは独立しており、提携関係にありません。
- ウェブサイト: [meshchatx.com](https://meshchatx.com)
- ソースコード: [git.quad4.io/RNS-Things/MeshChatX](https://git.quad4.io/RNS-Things/MeshChatX)
- 公式 GitHub ミラー: [github.com/Quad4-Software/MeshChatX](https://github.com/Quad4-Software/MeshChatX)
- リリース: [github.com/Quad4-Software/MeshChatX](https://github.com/Quad4-Software/MeshChatX)
- 変更履歴: [`CHANGELOG.md`](../CHANGELOG.md)
- 寄付: [`donate.md`](../donate.md) ([寄付](#寄付))
- Umbrel App Store: [apps.umbrel.com/app/meshchatx](https://apps.umbrel.com/app/meshchatx)
<a href="https://apps.obtainium.imranr.dev/redirect.html?r=obtainium://add/https://github.com/Quad4-Software/MeshChatX"><img src="https://raw.githubusercontent.com/ImranR98/Obtainium/main/assets/graphics/badge_obtainium.png" height="60" alt="Get it on Obtainium"></a>
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 `>=24`Electron 41 は Node 24 に揃う;`package.json` の `engines` と CI も同じライン)。
## 必要条件
- Python `>=3.11``pyproject.toml` より)
- Node.js `>=24``package.json``engines`
- pnpm `10.33.0``package.json``packageManager`
- Poetry`Taskfile.yml` および CI ワークフローで使用)
**Browser Versions Required:**
Safari 16.4 以降、Chrome 111 以降、Firefox 128 以降(同梱 Web UI)。
```bash
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`
```bash
docker compose up -d
```
```bash
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 が不適切な権限で作成するのを避けられます。
**名前付きボリュームの確認や削除**
```bash
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. 実行権限を付与して起動:
```bash
chmod +x ./ReticulumMeshChatX-v*-linux-*.AppImage
./ReticulumMeshChatX-v*-linux-*.AppImage
```
### 2) Debian/Ubuntu `.deb` (x64/arm64)
1. `ReticulumMeshChatX-v<バージョン>-linux-<アーキテクチャ>.deb` をダウンロード。
2. インストール:
```bash
sudo apt install ./ReticulumMeshChatX-v*-linux-*.deb
```
### 3) RPM ベースのシステム
1. リリースに `ReticulumMeshChatX-v<バージョン>-linux-<アーキテクチャ>.rpm` がある場合はダウンロード。
2. インストール:
```bash
sudo rpm -Uvh ./ReticulumMeshChatX-v*-linux-*.rpm
```
### 4) Python wheel (`.whl`)
リリースの wheel にはビルド済みの Web アセットが含まれます。
```bash
pip install ./reticulum_meshchatx-*-py3-none-any.whl
meshchatx --headless
```
`pipx` もサポート:
```bash
pipx install ./reticulum_meshchatx-*-py3-none-any.whl
```
## ソースからの実行(Web サーバーモード)
開発時やローカルのカスタムビルド向け。
```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 "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-lockfile``pnpm-lock.yaml` の更新を拒否し、ロックファイルが `package.json` と一致しない場合は失敗します。これにより、想定外の上流バージョンが暗黙的にインストールされるのを防げます。
- `verify-store-integrity=true` はプロジェクトの `.npmrc` にも設定されています。上記の `pnpm config set` の行はユーザー設定側も明示的に固めるためのものです。
- pnpm v10 以降、ライフサイクルスクリプト (`preinstall`/`postinstall`) はデフォルトでブロックされます。インストールスクリプトを実行できるのは `package.json``pnpm.onlyBuiltDependencies` に列挙されたパッケージ(現在 `electron``electron-winstaller``esbuild`)だけです。
- `uv lock --check``uv.lock``pyproject.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** または **Bubblewrap**`bwrap`)を使えます。詳しい例(pip/pipx、Poetry、USB シリアルの注意)は次を参照:
- [`docs/meshchatx_linux_sandbox.md`](../docs/meshchatx_linux_sandbox.md)
同梱または同期された `meshchatx-docs` から配信する場合、同じページがアプリ内 **ドキュメント** 一覧(MeshChatX ドキュメント)にも表示されます。
## Linux デスクトップ: 絵文字フォント
絵文字ピッカーはシステムフォント(Electron/Chromium)で標準 Unicode 絵文字を描画します。絵文字が空の四角(「豆腐」)になる場合はカラー絵文字パッケージをインストールし、アプリを再起動してください。
| ディストリビューション(例) | パッケージ |
| ---------------------------- | --------------------------------------------------------------------- |
| 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` |
インストール後も表示されない場合は `fc-cache -fv` を実行してください。最小インストールでは記号の網羅用に `noto-fonts` も任意で入れてください。
## ソースからのデスクトップパッケージビルド
スクリプトは `package.json``Taskfile.yml` に定義されています。
### 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
```
Task 経由:
```bash
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`、または `electron`x64 / arm64 の AppImage + deb、RPM はベストエフォート、wheel なし)。
ビルド:
```bash
docker build -f Dockerfile.build -t meshchatx-build:local .
```
wheel のみ:
```bash
docker build -f Dockerfile.build --build-arg MESHCHATX_BUILD_TARGETS=wheel -t meshchatx-build:wheel .
```
完成したイメージから `/artifacts` をホストにコピー:
```bash
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/README.md) 参照)
## Android
MeshChatX はネイティブ Android APK のビルドに対応しています(Termux のみに限りません)。
### ソースから APK をビルド
リポジトリのルートで:
```bash
# 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 の前にそのホイールをビルドします。
追加ドキュメント:
- [`docs/meshchatx_on_android_with_termux.md`](../docs/meshchatx_on_android_with_termux.md)
- [`android/README.md`](../android/README.md)
## 設定
| 引数 | 環境変数 | デフォルト | 説明 |
| -------------------------- | ---------------------------------------- | ----------- | --------------------------------------------------------------------------------------- |
| `--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` のよく使うタスク:
```bash
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.3` です。
- リリースのバージョン上げは **`package.json``version` のみ**編集します。
- **`pnpm run version:sync`****`pnpm run build`** 開始時にも実行)で、**`pyproject.toml`**、**`meshchatx/src/version.py`**、**`THIRD_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`](../SECURITY.md)
- [`LEGAL.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}` 等の保護)を使えます。
```bash
# 必要なら 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 --run``en.json` とのキー一致を検証。
その他のコードの変更は必要ありません。アプリ、言語セレクター、およびテストは、ビルド時に `meshchatx/src/frontend/locales/` ディレクトリからロケールを検出します。
## 寄付
寄付は任意です。このアプリを開発するための時間と労力に充てられます。
**寄付の方法:** [`donate.md`](../donate.md)Monero、Ko-Fi、Buy Me a Coffee)。
## クレジット
- [Liam Cottle](https://github.com/liamcottle) - オリジナル Reticulum MeshChat
- [RFnexus](https://github.com/RFnexus) - micron パーサー(JavaScript
- [markqvist](https://github.com/markqvist) - Reticulum, LXMF, LXST
## ライセンス
プロジェクト独自の部分は 0BSD です。
Reticulum MeshChat 由来の元の上流部分は MIT のままです。
全文と通知は [`../LICENSE`](../LICENSE) を参照してください。