fix: 版本变量改 PACKAGE_VERSION、CI 触发 tags['*']、修正静态措辞
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,7 @@ name: Build and Release Mond
|
||||
on:
|
||||
push:
|
||||
branches: [main, master, develop]
|
||||
tags: ['v*']
|
||||
tags: ['*']
|
||||
|
||||
env:
|
||||
DOCKER_BUILDKIT: "1"
|
||||
@@ -60,9 +60,11 @@ jobs:
|
||||
# 快速验证
|
||||
mkdir -p test && tar -xzf "${TARGZ}" -C test
|
||||
test/mond --version 2>/dev/null || echo "⚠️ 跳过版本检查"
|
||||
# 纯静态校验(depends 系统应产出无动态依赖的二进制)
|
||||
ldd test/mond 2>&1 | grep -q "not a dynamic executable" \
|
||||
&& echo "✅ 纯静态链接" || echo "⚠️ 非纯静态二进制"
|
||||
# 依赖校验:第三方库(boost/ssl/zmq 等)应已被 depends 静态链入,
|
||||
# 运行时只应依赖 glibc(libc/libm/libpthread/ld-linux)
|
||||
EXTRA=$(ldd test/mond 2>/dev/null | awk '{print $1}' \
|
||||
| grep -vE '(^|/)(linux-vdso|libc\.so|libm\.so|libpthread\.so|libdl\.so|librt\.so|libresolv\.so|libutil\.so|ld-linux)' || true)
|
||||
[ -z "$EXTRA" ] && echo "✅ 运行时仅依赖 glibc" || echo "⚠️ 检测到非 glibc 动态依赖: ${EXTRA}"
|
||||
rm -rf test
|
||||
|
||||
- name: Build Debian package
|
||||
|
||||
@@ -25,8 +25,8 @@ mond 是 Monero 守护进程 `monerod` 的定制换名构建。换名通过 [ini
|
||||
2. **release**(仅 tag 触发):下载 artifact,上传 tar.gz 到 Generic Package Registry、上传 .deb 到 Debian Registry(stable/main),并用 `jq` 生成描述创建 Gitea Release。
|
||||
|
||||
关键点:
|
||||
- **只构建 ubuntu,不做 alpine**(与参考项目不同,刻意取舍):mond 用 Monero **官方 depends 系统**(`make depends target=…`)交叉编译,产物为纯静态二进制(`ldd` 显示 "not a dynamic executable"),任意发行版可跑,Alpine 无需单独构建;且单次构建耗时 30–60 分钟,加 distro 维度会让 CI 翻倍而无收益。
|
||||
- **版本号约定**:包版本硬编码在 ci.yaml 的 `PACKAGE_VERSION: "0.18.5.0"`(**纯数字、无 v**,符合 Debian 版本规范)。**关键分界**:上游 Monero git tag 带 `v`,故 build job 用 `MONERO_VERSION=v${PACKAGE_VERSION}` 补回 v 传给 Dockerfile `git checkout`;tar.gz / deb / registry 路径 / Release 标题等包版本一律直接用 `${PACKAGE_VERSION}`;release job 用 `VERSION="${TAG#v}"` 归一。发版改 `PACKAGE_VERSION` 并打对应 `v*` tag。
|
||||
- **只构建 ubuntu,不做 alpine**(刻意取舍):mond 用 Monero **官方 depends 系统**(`make depends target=…`)交叉编译,将 boost/openssl/zmq 等第三方依赖全部静态链入,**运行时仅动态依赖 glibc**(`ldd` 仍列出 libc/libm/libpthread/ld-linux —— 并非纯静态,故 Alpine/musl 系统无法直接运行)。主分发渠道是面向 Debian/Ubuntu 的 .deb(`Depends: libc6 (>= 2.31)`);单次构建耗时 30–60 分钟,加 distro 维度会让 CI 翻倍。若要支持 Alpine 须改用 musl + `-static-pie` 真静态构建(当前未做)。
|
||||
- **版本号约定**:包版本硬编码在 ci.yaml 的 `PACKAGE_VERSION: "0.18.5.0"`(**纯数字、无 v**,符合 Debian 版本规范)。**关键分界**:上游 Monero git tag 带 `v`,故 build job 用 `MONERO_VERSION=v${PACKAGE_VERSION}` 补回 v 传给 Dockerfile `git checkout`;tar.gz / deb / registry 路径 / Release 标题等包版本一律直接用 `${PACKAGE_VERSION}`;release job 用 `VERSION="${TAG#v}"` 归一(tag 带不带 v 都兼容)。CI 触发条件为 `tags: ['*']`,发版改 `PACKAGE_VERSION` 并打对应 tag(纯数字,如 `0.18.5.0`)。
|
||||
- **依赖精简**:depends 系统已将 boost/openssl/zmq/unbound/sodium/unwind 静态链入,故 [debian/control.template](debian/control.template) 仅 `Depends: libc6`,无需列动态库。
|
||||
- 架构名映射:Dockerfile 内 `arm64→aarch64-linux-gnu`、`amd64→x86_64-linux-gnu` 作为 depends target。
|
||||
- tar.gz 下载 URL 形如 `https://gitea.bcde.io/api/packages/wangdefa/generic/mond/{version}/mond-{arch}-ubuntu-{version}.tar.gz`(version 为纯数字)。
|
||||
@@ -47,7 +47,7 @@ docker buildx build --platform linux/amd64 \
|
||||
shellcheck debian/*.sh
|
||||
```
|
||||
|
||||
无单元测试;CI 中唯一的冒烟测试是解包后跑 `mond --version` 并 `ldd` 校验纯静态。
|
||||
无单元测试;CI 中唯一的冒烟测试是解包后跑 `mond --version`,并用 `ldd` 校验运行时仅依赖 glibc(无第三方动态库)。
|
||||
|
||||
## Debian 包布局与服务
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
- 🏗️ **多架构支持** - 原生支持 AMD64 和 ARM64 架构
|
||||
- 📦 **多种安装方式** - 提供 Debian 包和通用二进制包
|
||||
- 🐧 **多发行版兼容** - 支持 Ubuntu 和 Debian
|
||||
- 🔗 **纯静态链接** - 无需依赖,可在任意 Linux 系统运行
|
||||
- 🔗 **依赖精简** - 第三方库(boost/OpenSSL/ZMQ 等)全部静态链入,运行时仅依赖系统 glibc(libc6 ≥ 2.31)
|
||||
- 🔒 **隐私优先** - 基于 Monero 的隐私保护技术
|
||||
- 🔄 **自动更新** - 通过 Debian 仓库轻松安装和更新
|
||||
|
||||
@@ -144,7 +144,7 @@ sudo systemctl restart mond.service
|
||||
|
||||
### Docker 构建(推荐)
|
||||
|
||||
本项目使用 Docker 和官方 depends 系统构建,确保纯静态链接。
|
||||
本项目使用 Docker 和官方 depends 系统构建,将 boost/OpenSSL/ZMQ 等第三方依赖全部静态链入(运行时仅依赖系统 glibc)。
|
||||
|
||||
#### 构建多架构二进制文件
|
||||
|
||||
@@ -169,15 +169,12 @@ docker buildx build --platform linux/arm64 \
|
||||
--output type=local,dest=./output .
|
||||
```
|
||||
|
||||
#### 验证静态链接
|
||||
#### 验证依赖
|
||||
|
||||
```bash
|
||||
# 检查二进制文件是否为纯静态链接
|
||||
# 运行时动态依赖应只有 glibc 组件(libc/libm/libpthread/ld-linux),无第三方库
|
||||
ldd output/linux_amd64/mond
|
||||
# 预期输出: "not a dynamic executable"
|
||||
|
||||
file output/linux_amd64/mond
|
||||
# 预期输出: "statically linked"
|
||||
# 预期: 仅 linux-vdso、libc、libm、libpthread、ld-linux 等 glibc 组件
|
||||
```
|
||||
|
||||
### 本地构建
|
||||
|
||||
Reference in New Issue
Block a user