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

105 lines
4.5 KiB
Markdown
Raw 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.
# Mond
Mond 是 [Monero](https://github.com/monero-project/monero) 守护进程 `monerod` 的定制换名构建——Monero 全节点,负责 P2P 同步区块链、提供 RPC。换名(`monero→mond`、`monerod→mond`、`MONERO_*→MOND_*`)由 [init.sh](init.sh) 在构建期对官方源码做 `sed` 改写完成,不维护源码分叉。
**本仓库只包含构建与打包基础设施**,不含 mond 源码:二进制在 CI 中从上游官方仓库 `github.com/monero-project/monero` 编译(init.sh 现场换名),再打包分发到 [gitea.bcde.io](https://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)
```bash
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`,再启用:
>
> ```bash
> sudo systemctl enable --now mond
> ```
### tar.gz(通用:Alpine / Ubuntu / Debian)
从 Generic Package Registry 下载对应架构的 tar.gz,解压即用(单二进制):
```bash
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](.gitea/workflows/ci.yml):分支推送时检查版本、配置和 shell 语法,并在 amd64、arm64 原生 runner 上编译、严格冒烟测试和验证 DEB 包内容。
- [.gitea/workflows/release.yml](.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](init.sh)。
本地构建:
```bash
# 编译某架构二进制(输出到 ./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](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](https://github.com/monero-project/monero)(BSD-3-Clause),由 [init.sh](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 脚本
```