Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
# Keep shell scripts Linux-compatible
/.gitattributes text eol=lf
/.gitignore text eol=lf
*.sh text eol=lf
*.sh.in text eol=lf
easymesh text eol=lf
install.sh text eol=lf
relay-manager text eol=lf

# Markdown files
*.md text eol=lf
*.txt text eol=lf
*.env text eol=lf
*.yml text eol=lf
*.yaml text eol=lf

# Binary files
core/** binary
Expand Down
92 changes: 92 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
name: RC validation

on:
push:
branches:
- main
- "release/**"
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
validate-and-build:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Install validation tools
run: sudo apt-get update && sudo apt-get install --yes shellcheck unzip

- name: Bash syntax and regression tests
run: bash tests/static-smoke.sh

- name: ShellCheck at error severity
run: |
shellcheck --severity=error easymesh relay-manager install.sh uninstall.sh
shellcheck --severity=error release/build-release.sh release/online-install.sh.in
shellcheck --severity=error tests/*.sh

- name: Build verified RC packages
id: release
run: |
. ./versions.env
echo "version=$BEHIFY_EASYMESH_VERSION" >> "$GITHUB_OUTPUT"
bash release/build-release.sh

- name: Validate package contents and bootstrap failures
run: bash tests/run-all.sh release-output

- name: Retain exact tested RC bytes
uses: actions/upload-artifact@v4
with:
name: rc-release-assets-${{ github.sha }}
path: |
release-output/behify-easymesh-v${{ steps.release.outputs.version }}-linux-x86_64.tar.gz
release-output/behify-easymesh-v${{ steps.release.outputs.version }}-linux-aarch64.tar.gz
release-output/online-install-v${{ steps.release.outputs.version }}.sh
release-output/install.sh
release-output/SHA256SUMS
release-output/easytier-v2.6.4-source.tar.gz
if-no-files-found: error
retention-days: 7

native:
name: Native ${{ matrix.architecture }}
needs: validate-and-build
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
include:
- architecture: x86_64
runner: ubuntu-24.04
- architecture: aarch64
runner: ubuntu-24.04-arm
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v4

- name: Download exact built RC bytes
uses: actions/download-artifact@v4
with:
name: rc-release-assets-${{ github.sha }}
path: release-output

- name: Verify release checksums
run: cd release-output && sha256sum --check SHA256SUMS

- name: Execute matching package and strict-offline install
run: bash tests/native-package-smoke.sh release-output ${{ matrix.architecture }}

- name: Disposable real-systemd install, upgrade, and rollback
run: |
. ./versions.env
sudo bash tests/systemd-release-smoke.sh \
"release-output/behify-easymesh-v${BEHIFY_EASYMESH_VERSION}-linux-${{ matrix.architecture }}.tar.gz" \
"${{ matrix.architecture }}"
17 changes: 17 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,27 @@ tmp/
# Local test outputs
dist/
build/
.release-cache/
release-output/
release-staging/
*.tar.gz
SHA256SUMS.local

# Secrets / local env
.env
*.env.local
*.key
*.pem
*.secret
*.secrets
config.local.*
relays.local.json
mesh.env

# Installer and rollback output
*.backup
*.bak
backups/
easymesh-core-backup-*/

*.zip
59 changes: 59 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Changelog

All notable changes to Behify EasyMesh are documented here.

## [1.0.0] - 2026-09-05

### Stable Promotion

- Promoted the validated v1 release candidate to the first stable Behify EasyMesh release.
- Retained EasyTier v2.6.4 and architecture-specific packages for Linux x86_64 and aarch64.
- Retained transactional installation, strict-offline verification, service-state preservation, and rollback.
- Retained root-only mesh secret storage, secret-free service arguments, and WARN-level managed-service logging.
- Retained isolated Dokodemo-Door relay management and the tested EasyTier networking and routing behavior.
- Recorded the successful RC3 CI gates and real two-server direct-P2P test with bidirectional ping and 0% packet loss.

## [1.0.0-rc.3] - 2026-09-05

### Changed

- Reduced the Connect to Mesh introduction to one concise peer/UDP hint.
- Styled the generated 32-character network secret for visibility and made custom secret entry visible and directly editable.
- Removed the secret verification step and all second-confirmation behavior from network-secret entry.
- Clarified one-command stable and versioned candidate installation while keeping the installer non-interactive after installation.

### Security

- Preserved RC2's root-only secret files, config-based secret transport, secret-free service arguments, and WARN-level managed-service logging.
- Documented that visible interactive secret entry can be captured by terminal history or observers; the program does not repeat a custom value after entry.

## [1.0.0-rc.2] - 2026-09-05

### Changed

- Kept mesh secrets out of service arguments and INFO-level effective-config logs.
- Generated 32-character secrets are shown once for interactive copying; custom entry stays hidden.
- Encryption now defaults on, multi-thread defaults off, and IPv6 keeps its previous default.
- Removed the duplicate EasyTier version row from the dashboard.
- Clarified one-way peer initiation and connectivity troubleshooting.
- Added a checksummed, byte-identical `install.sh` release bootstrap alias.

## [1.0.0-rc.1] - 2026-09-04

### Added

- Verified architecture-specific release packages for Linux x86_64 and aarch64.
- Transactional installation, runtime upgrade, rollback, and bounded uninstall workflows.
- Isolated Dokodemo-Door relay management through `behify-relay.service`.
- Public security reporting guidance and third-party license notices.

### Changed

- EasyTier v2.6.4 is the only supported runtime.
- Runtime binaries are assembled from pinned official EasyTier release assets instead of being stored in Git.
- Mesh secrets are stored in a root-only environment file instead of the systemd unit.

### Removed

- Legacy EasyTier v2.0.3 binaries, selectors, and download fallbacks.
- Global EasyTier process termination from maintenance tasks.
116 changes: 116 additions & 0 deletions README.fa.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
<div dir="rtl">

# Behify EasyMesh

Behify EasyMesh ابزاری source-available برای مدیریت شبکه EasyTier و رله اختیاری و ایزوله Dokodemo-Door روی لینوکس است. نسخه `1.0.0` نسخه پایدار فعلی است، از EasyTier `v2.6.4` استفاده می‌کند و معماری‌های `x86_64` و `aarch64` را پشتیبانی می‌کند.

## ارتباط با پروژه اصلی و مجوز

این پروژه بر پایه [Easy-Mesh نوشته Musixal](https://github.com/Musixal/Easy-Mesh) ساخته شده است. فایل‌های `LICENSE` و `NOTICE` بدون تغییر حفظ شده‌اند. [EasyTier](https://github.com/EasyTier/EasyTier) و Xray-core رله، پروژه‌های بالادستی جداگانه‌اند؛ جزئیات در [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) آمده است.

مجوز سفارشی این مخزن source-available است و مجوز متن‌باز مورد تایید OSI نیست. طبق همین مجوز، استفاده از نرم‌افزار برای ساخت یا قرار دادن آن در محتوای منتشرشده در YouTube یا هر پلتفرم اشتراک ویدیو ممنوع است. پیش از استفاده یا بازنشر، [LICENSE](LICENSE) را بخوانید.

## پیش‌نیازها

- لینوکس دارای systemd
- معماری `x86_64` / `amd64` یا `aarch64` / `arm64`
- `bash`، OpenSSL، Python 3 و ابزارهای استاندارد GNU
- برای نصب آنلاین: `curl`، گواهی‌های CA و `tar`

نصب‌کننده بسته‌های سیستم‌عامل را خودکار نصب نمی‌کند. `iperf3` فقط برای آزمون دستی سرعت اختیاری است.

## نصب

برای نسخه پایدار، نصب با یک فرمان انجام می‌شود:

</div>

```bash
curl -fsSL https://github.com/behifyn/behify-easymesh/releases/latest/download/install.sh | sudo bash
```

<div dir="rtl">

این نشانی آخرین نسخه پایدار GitHub را هدف می‌گیرد. نصب‌کننده در پایان `Run: sudo easymesh` را نشان می‌دهد و منو را خودکار باز نمی‌کند.

برای نصب و سپس اجرای نسخه پایدار در یک فرمان:

</div>

```bash
curl -fsSL https://github.com/behifyn/behify-easymesh/releases/latest/download/install.sh -o /tmp/behify-install.sh && sudo bash /tmp/behify-install.sh && sudo easymesh
```

<div dir="rtl">

نصب مستقیم نسخه دقیق v1.0.0 نیز با این فرمان ممکن است:

</div>

```bash
curl -fsSL https://github.com/behifyn/behify-easymesh/releases/download/v1.0.0/install.sh | sudo bash
```

<div dir="rtl">

فرمان‌های pipe کوتاه‌اند، اما خود bootstrap را جداگانه بررسی نمی‌کنند. روش پیشنهادی نسخه پایدار، دریافت و بررسی فایل پیش از اجراست:

</div>

```bash
version=v1.0.0
curl -fLO "https://github.com/behifyn/behify-easymesh/releases/download/$version/install.sh"
curl -fLO "https://github.com/behifyn/behify-easymesh/releases/download/$version/SHA256SUMS"
grep ' install.sh$' SHA256SUMS | sha256sum -c -
sudo bash install.sh
```

<div dir="rtl">

فایل نسخه‌دار `online-install-v1.0.0.sh` از نظر بایت با `install.sh` یکسان است. هر دو معماری را تشخیص می‌دهند، بسته ثابت همان معماری را می‌گیرند، SHA-256 و مسیرهای archive را بررسی می‌کنند و سپس نصب‌کننده آفلاین داخل بسته را اجرا می‌کنند.

برای نصب کاملا آفلاین، بسته مناسب و `SHA256SUMS` را به سرور منتقل کنید:

</div>

```bash
grep 'behify-easymesh-v1.0.0-linux-x86_64.tar.gz$' SHA256SUMS | sha256sum -c -
tar -xzf behify-easymesh-v1.0.0-linux-x86_64.tar.gz
cd behify-easymesh-v1.0.0-linux-x86_64
sudo EASYMESH_OFFLINE=1 bash install.sh
```

<div dir="rtl">

روی ARM64 نام `aarch64` را جایگزین کنید. فایل‌های Source code خودکار GitHub نصب‌کننده آفلاین نیستند.

## استفاده

</div>

```bash
sudo easymesh
easymesh --version
```

<div dir="rtl">

باز کردن منو هیچ دانلود یا جایگزینی EasyTier انجام نمی‌دهد. گزینه **Connect to the Mesh Network** تنظیمات mesh را ایجاد یا جایگزین می‌کند. تنظیمات پیش‌فرض عمومی شامل رمزنگاری فعال، multi-thread غیرفعال و IPv6 فعال مطابق رفتار قبلی است. secret تصادفی ۳۲ نویسه‌ای یک بار و به‌شکل برجسته در ترمینال تعاملی نمایش داده می‌شود؛ Enter همان مقدار را می‌پذیرد، یا می‌توان secret سفارشی را به‌صورت قابل مشاهده تایپ و پیش از Enter اصلاح کرد. برنامه مقدار سفارشی را پس از ورود دوباره چاپ نمی‌کند.

فایل‌های `/etc/behify-easymesh/mesh.env` و `/etc/behify-easymesh/easytier.toml` فقط برای root و با سطح دسترسی `0600` هستند. سرویس مدیریت‌شده secret را از config خصوصی می‌خواند، آن را وارد آرگومان process نمی‌کند و برای جلوگیری از ثبت effective config در سطح INFO، گزارش کنسول را روی WARN می‌گذارد. گزینه ۵ منو فقط با درخواست مستقیم کاربر secret ذخیره‌شده را نشان می‌دهد.

برای جزئیات به [تنظیمات](docs/configuration.md) و [عملیات و نگهداری](docs/operations.md) مراجعه کنید.

## نکات اتصال

می‌توان آدرس سرور دوم را فقط روی یک node وارد کرد و در node شنونده یا reverse، فیلد peer را خالی گذاشت. اگر اتصال از A به B برقرار نشد، جهت B به A را امتحان کنید و دسترسی UDP، فایروال سیستم، فایروال ارائه‌دهنده، NAT و پروتکل پشتیبانی‌شده دیگری را بررسی کنید. ممکن است پس از شروع اتصال از یک سمت، مسیر مستقیم P2P شکل بگیرد. Behify به صورت خودکار peer معکوس اضافه نمی‌کند و routing خود EasyTier را تغییر نمی‌دهد.

نمایش Peer و Peer-Center از قالب ترمینالی EasyTier استفاده می‌کند. Routes در صورت پشتیبانی `watch` از حالت no-wrap استفاده می‌کند و در غیر این صورت به wrapping عادی برمی‌گردد.

## امنیت

آسیب‌پذیری‌ها را طبق [SECURITY.md](SECURITY.md) به صورت خصوصی گزارش کنید. secret واقعی mesh یا اطلاعات ورود سرور را در گزارش عمومی قرار ندهید.

نسخه منتشرشده RC3 همه مرحله‌های CI شامل validate-and-build، اجرای native روی x86_64 و aarch64، بررسی package، نصب strict-offline و آزمون real-systemd را با موفقیت گذراند. این نسخه همچنین روی دو سرور واقعی x86_64 نصب شد؛ هر دو سرویس active و enabled بودند، مسیر DIRECT/P2P برقرار شد و ping دوطرفه با ۰٪ packet loss موفق بود. نسخه پایدار v1.0.0 همان runtime و رفتار آزموده‌شده را بدون تغییر در شبکه یا سرویس‌ها ارتقا می‌دهد.

</div>
Loading
Loading