# 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.0/mond-amd64-linux-static-0.18.5.0.tar.gz tar -xzf mond.tar.gz ./mond --config-file params.conf # 配置模板见仓库 conf/params.example.conf ``` ## 构建与发布 CI 定义于 [.gitea/workflows/ci.yaml](.gitea/workflows/ci.yaml): - **push 到 `main`/`develop`**:矩阵 `arch=[amd64,arm64]`,在原生 runner 上用 Docker(musl 纯静态)编译为 tar.gz 并打 `.deb`。 - **打 tag**:产物上传到 Generic / Debian 包仓库并创建 Release。 musl 纯静态在 `alpine:3.23` 下手编 5 个静态库(OpenSSL/libsodium/libzmq/expat/unbound——Alpine 仓库只有 `.so`/缺 `.a`)并 patch monero CMakeLists(去 `-pie`、Linux `STATIC_FLAGS` 改真 `-static`),产出 static-pie 零依赖二进制。换名 + patch 逻辑见 [init.sh](init.sh)。 本地构建: ```bash # 编译某架构二进制(输出到 ./output/linux_/mond) docker buildx build --platform linux/amd64 \ --build-arg MONERO_VERSION=v0.18.5.0 \ --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.0 mond-amd64-linux-static-0.18.5.0.tar.gz ``` ## 版本号约定 - **上游源码 git tag** 带 `v`(如 `v0.18.5.0`),CI 用 `MONERO_VERSION=v${PACKAGE_VERSION}` 检出。 - **包版本**(tar.gz / deb / registry 路径)一律用数字(如 `0.18.5.0`),符合 Debian 版本规范。 发版只需改 ci.yaml 的 `PACKAGE_VERSION`。 ## 修改内容 基于 [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 脚本 ```