From a362c1a85990d39c41ec6f5fc0f0defa7484b224 Mon Sep 17 00:00:00 2001 From: Wang Defa <2-wangdefa@users.noreply.gitlab.bcde.io> Date: Tue, 9 Jun 2026 16:59:25 +0800 Subject: [PATCH] =?UTF-8?q?Docker=20=E6=94=B9=E9=9D=99=E6=80=81=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=20OpenSSL=EF=BC=8C=E4=BF=AE=E5=A4=8D=E8=B7=A8?= =?UTF-8?q?=E5=8F=91=E8=A1=8C=E7=89=88=E8=BF=90=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- CLAUDE.md | 6 +++--- README.md | 2 +- docker/Dockerfile.alpine | 13 +++++++------ docker/Dockerfile.ubuntu | 15 ++++++++------- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index dbadd58..2a3badc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -15,7 +15,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co 编译产出单个可执行文件 `xxxig-proxy`:矿机代理服务,监听矿机接入并把算力聚合转发到上游矿池,降低矿池侧连接数。配置来自源码 `src/config.json`。 -> **与矿工项目 `xxxig` 的关键差异**:矿工是 `xxxig / xxxigDaemon / xxxigServer` 三件套 + CC(Central Control)+ Web 控制台;proxy 是**单二进制、无 C&C、无 GPU、动态链接**。本仓库的 build-deb.sh / postinst / service 都只处理这一个二进制。 +> **与矿工项目 `xxxig` 的关键差异**:矿工是 `xxxig / xxxigDaemon / xxxigServer` 三件套 + CC(Central Control)+ Web 控制台;proxy 是**单二进制、无 C&C、无 GPU、全静态链接**。本仓库的 build-deb.sh / postinst / service 都只处理这一个二进制。 ## 构建与发布流程(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}"` 归一。 - 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`。 - 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}`。 - postinst 创建 `xxxig-proxy` 系统用户、把默认配置复制到 `/etc/xxxig-proxy/config.json`、`/opt` 归 `root:root`(目录/二进制 755、数据文件 644)。**服务不自动启用/启动**(默认上游 `localhost` 无效),升级时仅 `try-restart` 已在运行的服务。 - 本仓库**不含 `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。 diff --git a/README.md b/README.md index 57573d2..6871469 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ XXXig Proxy 是 [XMRig-Proxy](https://github.com/xmrig/xmrig-proxy) 的定制构 ## 产物 -每次构建产出单个可执行文件(网络服务,动态链接 libuv/OpenSSL,运行时依赖 glibc): +每次构建产出单个可执行文件(网络服务,**全静态链接**,含 OpenSSL/libuv,无外部动态库依赖,任意 Linux 发行版可跑): | 二进制 | 作用 | |---|---| diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine index f92a43d..fdb3f14 100644 --- a/docker/Dockerfile.alpine +++ b/docker/Dockerfile.alpine @@ -5,18 +5,18 @@ ARG TARGETARCH RUN apk update && apk add --no-cache \ git \ + wget \ make \ cmake \ libstdc++ \ gcc \ g++ \ + musl-dev \ automake \ libtool \ autoconf \ linux-headers \ - libuv-dev \ - openssl-dev \ - hwloc-dev + perl FROM base AS build @@ -31,15 +31,16 @@ RUN git clone --recursive https://github.com/wangdefaa/xxxig-proxy.git && \ WORKDIR /xxxig-proxy -# 根据目标架构优化编译 -RUN mkdir build && cd build && \ +# 先编译静态依赖(libuv/OpenSSL)到 scripts/deps,再静态链接构建 proxy +RUN mkdir build && cd scripts && chmod +x ./*.sh && \ if [ "$BUILDPLATFORM" != "$TARGETPLATFORM" ]; then \ MAKE_JOBS="-j2"; \ else \ MAKE_JOBS="-j$(nproc)"; \ fi && \ 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 FROM scratch diff --git a/docker/Dockerfile.ubuntu b/docker/Dockerfile.ubuntu index 7a9bf92..2173e48 100644 --- a/docker/Dockerfile.ubuntu +++ b/docker/Dockerfile.ubuntu @@ -11,10 +11,10 @@ RUN apt-get update && apt-get install -y \ wget \ build-essential \ cmake \ - libuv1-dev \ - libssl-dev \ - libhwloc-dev \ - openssl \ + automake \ + autoconf \ + libtool \ + perl \ && rm -rf /var/lib/apt/lists/* FROM base AS build @@ -30,15 +30,16 @@ RUN git clone --recursive https://github.com/wangdefaa/xxxig-proxy.git && \ WORKDIR /xxxig-proxy -# 根据目标架构优化编译 -RUN mkdir build && cd build && \ +# 先编译静态依赖(libuv/OpenSSL)到 scripts/deps,再静态链接构建 proxy +RUN mkdir build && cd scripts && chmod +x ./*.sh && \ if [ "$BUILDPLATFORM" != "$TARGETPLATFORM" ]; then \ MAKE_JOBS="-j2"; \ else \ MAKE_JOBS="-j$(nproc)"; \ fi && \ 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 FROM scratch