Docker 改静态链接 OpenSSL,修复跨发行版运行
Build and Release / build-and-test (arm64, alpine) (push) Successful in 6s
Build and Release / build-and-test (amd64, alpine) (push) Successful in 12s
Build and Release / build-and-test (amd64, ubuntu) (push) Successful in 22s
Build and Release / build-and-test (arm64, ubuntu) (push) Successful in 22s
Build and Release / release (push) Successful in 19s

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Wang Defa
2026-06-09 16:59:25 +08:00
co-authored by Claude Opus 4.8
parent 116023cd24
commit a362c1a859
4 changed files with 19 additions and 17 deletions
+3 -3
View File
@@ -15,7 +15,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
编译产出单个可执行文件 `xxxig-proxy`:矿机代理服务,监听矿机接入并把算力聚合转发到上游矿池,降低矿池侧连接数。配置来自源码 `src/config.json` 编译产出单个可执行文件 `xxxig-proxy`:矿机代理服务,监听矿机接入并把算力聚合转发到上游矿池,降低矿池侧连接数。配置来自源码 `src/config.json`
> **与矿工项目 `xxxig` 的关键差异**:矿工是 `xxxig / xxxigDaemon / xxxigServer` 三件套 + CCCentral Control+ Web 控制台;proxy 是**单二进制、无 C&C、无 GPU、态链接**。本仓库的 build-deb.sh / postinst / service 都只处理这一个二进制。 > **与矿工项目 `xxxig` 的关键差异**:矿工是 `xxxig / xxxigDaemon / xxxigServer` 三件套 + CCCentral Control+ Web 控制台;proxy 是**单二进制、无 C&C、无 GPU、全静态链接**。本仓库的 build-deb.sh / postinst / service 都只处理这一个二进制。
## 构建与发布流程(CI ## 构建与发布流程(CI
@@ -27,7 +27,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
关键点: 关键点:
- 版本号**硬编码**在 ci.yaml 的 `PACKAGE_VERSION: "6.26.0"`(纯数字,符合 Debian 版本规范),发版改这里。**关键分界**:上游源码 git tag 带 `v`CI 用 `XXXIG_PROXY_VERSION=v${PACKAGE_VERSION}` 检出 `v6.26.0`),而 tar.gz/deb/registry 路径等包版本一律用数字;release job 用 `VERSION="${TAG#v}"` 归一,build-deb.sh 用 `DEB_VERSION="${VERSION#v}"` 归一。 - 版本号**硬编码**在 ci.yaml 的 `PACKAGE_VERSION: "6.26.0"`(纯数字,符合 Debian 版本规范),发版改这里。**关键分界**:上游源码 git tag 带 `v`CI 用 `XXXIG_PROXY_VERSION=v${PACKAGE_VERSION}` 检出 `v6.26.0`),而 tar.gz/deb/registry 路径等包版本一律用数字;release job 用 `VERSION="${TAG#v}"` 归一,build-deb.sh 用 `DEB_VERSION="${VERSION#v}"` 归一。
- Dockerfile build-arg 名为 `XXXIG_PROXY_VERSION`(注意 `_PROXY_`,与矿工的 `XXXIG_VERSION` 区分),ci.yaml 与两个 Dockerfile 三处必须一致。 - Dockerfile build-arg 名为 `XXXIG_PROXY_VERSION`(注意 `_PROXY_`,与矿工的 `XXXIG_VERSION` 区分),ci.yaml 与两个 Dockerfile 三处必须一致。
- 构建用 `cmake .. -DCMAKE_BUILD_TYPE=Release`**动态链接**,依赖 libuv/OpenSSL),与矿工的静态构建不同;Dockerfile.ubuntu 基于 `ubuntu:20.04`glibc 2.31,与 control.template 的 `libc6 (>= 2.31)` 对齐) - **静态构建(对齐矿工)**Dockerfile 先 `cd scripts && ./build_deps.sh` 编译静态 libuv/OpenSSL 到 `scripts/deps`,再 `cmake .. -DXMRIG_DEPS=scripts/deps -DBUILD_STATIC=ON` 全静态链接(proxy 的 `cmake/OpenSSL.cmake` 仅在 WIN/APPLE 下设静态,Linux 靠 flags.cmake 在 `BUILD_STATIC` 下加 `-static` 强制全静态)。产物 `ldd` 为 "not a dynamic executable",任意发行版可跑。Dockerfile.ubuntu 基于 `ubuntu:20.04`
- 架构名映射:`x86_64→amd64``aarch64→arm64` - 架构名映射:`x86_64→amd64``aarch64→arm64`
- tar.gz 下载 URL 形如 `https://gitea.bcde.io/api/packages/wangdefa/generic/xxxig-proxy/{version}/xxxig-proxy-{arch}-{os}-{version}.tar.gz` - tar.gz 下载 URL 形如 `https://gitea.bcde.io/api/packages/wangdefa/generic/xxxig-proxy/{version}/xxxig-proxy-{arch}-{os}-{version}.tar.gz`
@@ -54,4 +54,4 @@ shellcheck debian/*.sh
- 二进制装到 `/opt/xxxig-proxy/`systemd 服务文件 `debian/xxxig-proxy.service`,维护脚本 `debian/{postinst,prerm,postrm}` - 二进制装到 `/opt/xxxig-proxy/`systemd 服务文件 `debian/xxxig-proxy.service`,维护脚本 `debian/{postinst,prerm,postrm}`
- postinst 创建 `xxxig-proxy` 系统用户、把默认配置复制到 `/etc/xxxig-proxy/config.json``/opt``root:root`(目录/二进制 755、数据文件 644)。**服务不自动启用/启动**(默认上游 `localhost` 无效),升级时仅 `try-restart` 已在运行的服务。 - postinst 创建 `xxxig-proxy` 系统用户、把默认配置复制到 `/etc/xxxig-proxy/config.json``/opt``root:root`(目录/二进制 755、数据文件 644)。**服务不自动启用/启动**(默认上游 `localhost` 无效),升级时仅 `try-restart` 已在运行的服务。
- 本仓库**不含 `script/` 安装脚本**(与矿工项目不同),.deb 安装后需用户手动 `systemctl enable --now xxxig-proxy` - 本仓库**不含 `script/` 安装脚本**(与矿工项目不同),.deb 安装后需用户手动 `systemctl enable --now xxxig-proxy`
- **已知待办**:proxy 为动态链接(依赖 libuv/OpenSSL),但 control.template `Depends` 目前仅 `libc6`。待 CI 首次构建出产物后用 `ldd` 实测,再补全 `libuv1``libssl`(按构建发行版包名,ubuntu 20.04 为 `libssl1.1`22.04 为 `libssl3`,写错会导致 apt 拒装) - **运行时依赖**:产物全静态(含 OpenSSL/libuv),`control.template` `Depends: libc6` 即可,无需 libssl/libuv。改用静态构建正是为修复动态链接 OpenSSL 1.1 在新发行版上 `libssl.so.1.1 not found` 的问题。源码 `scripts/`build_deps/build.uv/build.openssl3)由矿工项目移植、去掉 hwloc
+1 -1
View File
@@ -8,7 +8,7 @@ XXXig Proxy 是 [XMRig-Proxy](https://github.com/xmrig/xmrig-proxy) 的定制构
## 产物 ## 产物
每次构建产出单个可执行文件(网络服务,动态链接 libuv/OpenSSL,运行时依赖 glibc): 每次构建产出单个可执行文件(网络服务,**全静态链接**,含 OpenSSL/libuv,无外部动态库依赖,任意 Linux 发行版可跑):
| 二进制 | 作用 | | 二进制 | 作用 |
|---|---| |---|---|
+7 -6
View File
@@ -5,18 +5,18 @@ ARG TARGETARCH
RUN apk update && apk add --no-cache \ RUN apk update && apk add --no-cache \
git \ git \
wget \
make \ make \
cmake \ cmake \
libstdc++ \ libstdc++ \
gcc \ gcc \
g++ \ g++ \
musl-dev \
automake \ automake \
libtool \ libtool \
autoconf \ autoconf \
linux-headers \ linux-headers \
libuv-dev \ perl
openssl-dev \
hwloc-dev
FROM base AS build FROM base AS build
@@ -31,15 +31,16 @@ RUN git clone --recursive https://github.com/wangdefaa/xxxig-proxy.git && \
WORKDIR /xxxig-proxy WORKDIR /xxxig-proxy
# 根据目标架构优化编译 # 先编译静态依赖(libuv/OpenSSL)到 scripts/deps,再静态链接构建 proxy
RUN mkdir build && cd build && \ RUN mkdir build && cd scripts && chmod +x ./*.sh && \
if [ "$BUILDPLATFORM" != "$TARGETPLATFORM" ]; then \ if [ "$BUILDPLATFORM" != "$TARGETPLATFORM" ]; then \
MAKE_JOBS="-j2"; \ MAKE_JOBS="-j2"; \
else \ else \
MAKE_JOBS="-j$(nproc)"; \ MAKE_JOBS="-j$(nproc)"; \
fi && \ fi && \
echo "Building with parallel jobs: $MAKE_JOBS (cross-compile: $([ "$BUILDPLATFORM" != "$TARGETPLATFORM" ] && echo yes || echo no))" && \ echo "Building with parallel jobs: $MAKE_JOBS (cross-compile: $([ "$BUILDPLATFORM" != "$TARGETPLATFORM" ] && echo yes || echo no))" && \
cmake .. -DCMAKE_BUILD_TYPE=Release && \ ./build_deps.sh $MAKE_JOBS && cd ../build && \
cmake .. -DCMAKE_BUILD_TYPE=Release -DXMRIG_DEPS=scripts/deps -DBUILD_STATIC=ON && \
make $MAKE_JOBS make $MAKE_JOBS
FROM scratch FROM scratch
+8 -7
View File
@@ -11,10 +11,10 @@ RUN apt-get update && apt-get install -y \
wget \ wget \
build-essential \ build-essential \
cmake \ cmake \
libuv1-dev \ automake \
libssl-dev \ autoconf \
libhwloc-dev \ libtool \
openssl \ perl \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
FROM base AS build FROM base AS build
@@ -30,15 +30,16 @@ RUN git clone --recursive https://github.com/wangdefaa/xxxig-proxy.git && \
WORKDIR /xxxig-proxy WORKDIR /xxxig-proxy
# 根据目标架构优化编译 # 先编译静态依赖(libuv/OpenSSL)到 scripts/deps,再静态链接构建 proxy
RUN mkdir build && cd build && \ RUN mkdir build && cd scripts && chmod +x ./*.sh && \
if [ "$BUILDPLATFORM" != "$TARGETPLATFORM" ]; then \ if [ "$BUILDPLATFORM" != "$TARGETPLATFORM" ]; then \
MAKE_JOBS="-j2"; \ MAKE_JOBS="-j2"; \
else \ else \
MAKE_JOBS="-j$(nproc)"; \ MAKE_JOBS="-j$(nproc)"; \
fi && \ fi && \
echo "Building with parallel jobs: $MAKE_JOBS (cross-compile: $([ "$BUILDPLATFORM" != "$TARGETPLATFORM" ] && echo yes || echo no))" && \ echo "Building with parallel jobs: $MAKE_JOBS (cross-compile: $([ "$BUILDPLATFORM" != "$TARGETPLATFORM" ] && echo yes || echo no))" && \
cmake .. -DCMAKE_BUILD_TYPE=Release && \ ./build_deps.sh $MAKE_JOBS && cd ../build && \
cmake .. -DCMAKE_BUILD_TYPE=Release -DXMRIG_DEPS=scripts/deps -DBUILD_STATIC=ON && \
make $MAKE_JOBS make $MAKE_JOBS
FROM scratch FROM scratch