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
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:
co-authored by
Claude Opus 4.8
parent
116023cd24
commit
a362c1a859
@@ -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` 三件套 + 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)
|
## 构建与发布流程(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。
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ XXXig Proxy 是 [XMRig-Proxy](https://github.com/xmrig/xmrig-proxy) 的定制构
|
|||||||
|
|
||||||
## 产物
|
## 产物
|
||||||
|
|
||||||
每次构建产出单个可执行文件(网络服务,动态链接 libuv/OpenSSL,运行时依赖 glibc):
|
每次构建产出单个可执行文件(网络服务,**全静态链接**,含 OpenSSL/libuv,无外部动态库依赖,任意 Linux 发行版可跑):
|
||||||
|
|
||||||
| 二进制 | 作用 |
|
| 二进制 | 作用 |
|
||||||
|---|---|
|
|---|---|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user