Files
mond/README.md
T
wangdefa 596ffc1567
CI / validate (push) Successful in 5s
CI / build (amd64) (push) Successful in 3m38s
CI / build (arm64) (push) Successful in 8m39s
Release / build (amd64) (push) Successful in 3m35s
Release / build (arm64) (push) Successful in 8m58s
Release / release (push) Successful in 42s
feat: 重构 CI/CD 流水线,拆分为独立的构建和发布流程,更新相关文档和脚本
- 新增 .gitea/workflows/ci.yml,包含版本校验、构建和冒烟测试
- 新增 .gitea/workflows/release.yml,处理 tag 发布,上传包到仓库并创建 Release
- 更新 README.md 和 CLAUDE.md,描述新的 CI/CD 流程和版本号约定
- 修改 init.sh,增加对关键锚点的检查,确保源码结构一致性
- 更新 Dockerfile,使用 OpenSSL 3.0.21 和 unbound 1.25.1,确保与 Monero 版本一致
- 更新 build-deb.sh 示例,反映最新版本号
- 新增 VERSION 文件,统一版本管理
2026-08-07 09:51:47 +08:00

4.5 KiB
Raw Permalink Blame History

Mond

Mond 是 Monero 守护进程 monerod 的定制换名构建——Monero 全节点,负责 P2P 同步区块链、提供 RPC。换名(monero→mond、monerod→mond、MONERO_*→MOND_*)由 init.sh 在构建期对官方源码做 sed 改写完成,不维护源码分叉。

本仓库只包含构建与打包基础设施,不含 mond 源码:二进制在 CI 中从上游官方仓库 github.com/monero-project/monero 编译(init.sh 现场换名),再打包分发到 gitea.bcde.io 的 Generic / Debian 包仓库。

产物

每次构建产出单个可执行文件(musl 纯静态,boost/OpenSSL/libzmq/libsodium/unbound/expat 及 libc 全部静态链入,无外部动态库依赖,任意 Linux 发行版可跑):

二进制 作用
mond Monero 全节点守护进程:P2P 同步区块链、提供 RPC

支持架构 amd64 / arm64;musl 纯静态(static-pie),任意 Linux 发行版(Debian/Ubuntu/Alpine/CentOS 等)开箱即跑。

安装

APT(Debian / Ubuntu)

sudo curl https://gitea.bcde.io/api/packages/wangdefa/debian/repository.key -o /etc/apt/keyrings/gitea-wangdefa.asc
echo "deb [signed-by=/etc/apt/keyrings/gitea-wangdefa.asc] https://gitea.bcde.io/api/packages/wangdefa/debian stable main" | sudo tee /etc/apt/sources.list.d/wangdefa.list
sudo apt-get update && sudo apt-get install mond

安装布局:

路径
二进制 /opt/mond/mond
默认配置 /opt/mond/params.conf(postinst 复制到 /etc/mond/params.conf)
数据 /var/lib/mond/data
日志 /var/log/mond/
服务 mond.service

安装后服务不会自动启动(首次全节点同步前需确认配置)。按需编辑 /etc/mond/params.conf,再启用:

sudo systemctl enable --now mond

tar.gz(通用:Alpine / Ubuntu / Debian)

从 Generic Package Registry 下载对应架构的 tar.gz,解压即用(单二进制):

curl -fSL -o mond.tar.gz \
  https://gitea.bcde.io/api/packages/wangdefa/generic/mond/0.18.5.1/mond-amd64-linux-static-0.18.5.1.tar.gz
tar -xzf mond.tar.gz
./mond --config-file params.conf   # 配置模板见仓库 conf/params.example.conf

构建与发布

Gitea Actions 分为两条流水线:

  • .gitea/workflows/ci.yml:分支推送时检查版本、配置和 shell 语法,并在 amd64、arm64 原生 runner 上编译、严格冒烟测试和验证 DEB 包内容。
  • .gitea/workflows/release.yml:tag 推送时构建 tar.gz 和 DEB,生成 SHA256SUMS,上传包仓库并创建或更新 Release。

musl 纯静态在 alpine:3.23 下手编 5 个静态库(OpenSSL 3.0.21、libsodium 1.0.20、libzmq 4.3.5、expat 2.6.4、unbound 1.25.1)并 patch monero CMakeLists(去 -pie、Linux STATIC_FLAGS 改真 -static),产出 static-pie 零依赖二进制。换名 + patch 逻辑见 init.sh。

本地构建:

# 编译某架构二进制(输出到 ./output/linux_<arch>/mond)
docker buildx build --platform linux/amd64 \
  --build-arg MONERO_VERSION="v$(cat VERSION)" \
  --output type=local,dest=./output \
  -f docker/Dockerfile .

# 校验纯静态(应输出 "statically linked")
ldd output/linux_amd64/mond

# 用产物 tar.gz 打 .deb
./debian/build-deb.sh amd64 0.18.5.1 mond-amd64-linux-static-0.18.5.1.tar.gz

版本号约定

  • 根目录 VERSION 是唯一版本来源,使用不带 v 的四段版本号。
  • 上游源码 git tag 带 v(如 v0.18.5.1),CI 构建时自动补回。
  • 包版本(tar.gz / deb / registry 路径)一律用数字(如 0.18.5.1),符合 Debian 版本规范。
  • 发布 tag 可写成 0.18.5.1 或 v0.18.5.1,去掉 v 后必须与 VERSION 一致。

发版时先更新 VERSION 并提交,再创建同版本 tag。

修改内容

基于 Monero(BSD-3-Clause),由 init.sh 在构建期自动应用,不维护源码分叉:

  • 项目名 monero → mond
  • 二进制 monerod → mond
  • 版本宏 MONERO_* → MOND_*

目录结构

.gitea/workflows/   CI 流水线
docker/             Dockerfile(musl 纯静态,从上游官方源码编译 + init.sh 换名)
debian/             .deb 打包:control 模板、维护脚本、systemd 服务
conf/               params.example.conf 默认配置模板
init.sh             构建期换名 + 静态 patch 脚本