5.3 KiB
5.3 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
仓库性质
本仓库只包含构建与打包基础设施,不含矿机源码。矿机源码在编译时从外部仓库克隆(见两个 Dockerfile):
- 源码仓库:
github.com/wangdefaa/xxxig.git(注意结尾是 wangdefaa,双 a) - 发布仓库:Gitea
gitea.bcde.io下的wangdefa/xxxig(结尾是 wangdefa,单 a)
这两个名字极易混淆,改动 URL 时务必区分。xxxig 是 XMRig(RandomX CPU 矿机)的定制/换名构建,带 CC(Central Control 集中管理)功能。
整体架构:三个二进制
编译产出三个可执行文件,构成 XMRig-CC 的 client/server 架构:
xxxig—— 实际挖矿程序,由 daemon 拉起xxxigDaemon—— 客户端守护进程,控制xxxig,通过cc-client配置连接到中心服务器。这是安装后作为主服务运行的进程xxxigServer—— 中心控制服务器,带 Web UI(index.html),daemon 连到它上报/受控
两份配置:config.json(daemon/矿机用)与 config_cc.json(server 用),均来自源码 src/ 目录。
构建与发布流程(CI)
.gitea/workflows/ci.yaml 是 Gitea Actions 流水线:
- build-and-test(矩阵
arch=[amd64,arm64],跑在对应架构的原生 runner 上):用docker buildx按docker/Dockerfile原生编译 → 打成 tar.gz → 调debian/build-deb.sh打 .deb → 上传 artifact。 - release(仅 tag 触发):下载 artifact,上传 tar.gz 到 Generic Package Registry、上传 .deb 到 Debian Registry(stable/main),并创建 Gitea Release。
关键点:
- 版本号硬编码在 ci.yaml 的
PACKAGE_VERSION: "6.26.0"(纯数字,符合 Debian 版本规范),发版改这里。关键分界:上游源码 git tag 带v(CI 用XXXIG_VERSION=v${PACKAGE_VERSION}检出v6.26.0),而 tar.gz/deb/registry 路径等包版本一律用数字;release job 用VERSION="${TAG#v}"归一,install 脚本下载时同样${version#v}。 - 编译选项(
docker/Dockerfile,musl 全静态):-DWITH_CC_CLIENT=ON -DWITH_CC_SERVER=ON -DBUILD_STATIC=ON -DWITH_OPENCL=OFF -DWITH_CUDA=OFF,即 CPU-only 全静态构建;arm64/arm 在对应架构原生 runner 上编译并设-DARM_TARGET=8/7。 - 为何用 musl(alpine) 而非 glibc(勿改回 glibc 全静态):glibc 的
getaddrinfo依赖运行时dlopenNSS 模块,-static全静态后无法加载,跨 glibc 版本运行时 DNS 解析失败(errno=EBUSY→ libuvUV_EBUSY→DNS error: "resource busy or locked")。musl 的getaddrinfo自带实现,全静态也能正常解析。曾用的 glibc(ubuntu) 构建线已删除。 - 架构名映射:
x86_64→amd64、aarch64→arm64。 - tar.gz 下载 URL 形如
https://gitea.bcde.io/api/packages/wangdefa/generic/xxxig/{version}/xxxig-{arch}-linux-static-{version}.tar.gz。
本地常用命令
# 本地编译某架构/发行版的二进制(输出到 ./output/linux_<arch>/)
docker buildx build --platform linux/amd64 \
--build-arg XXXIG_VERSION=v6.26.0 \
--output type=local,dest=./output \
-f docker/Dockerfile .
# 用已有 tar.gz 打 .deb 包
./debian/build-deb.sh amd64 6.26.0 xxxig-amd64-linux-static-6.26.0.tar.gz
# 改 shell 脚本后做静态检查(仓库未配置,需自行安装 shellcheck)
shellcheck script/*.sh debian/*.sh
无单元测试;CI 中唯一的冒烟测试是解包后跑 xxxigDaemon --version。
两种分发渠道与安装布局(差异很大)
| tar.gz(script/install.sh) | .deb / APT(script/install.deb.sh) | |
|---|---|---|
| 来源 | Generic Registry 直接下载解包 | 加 APT 源后 apt-get install |
| 二进制 | /etc/miner/xxxig/(仅 daemon+矿机) |
/opt/xxxig/(含 Server) |
| 配置 | /etc/miner/xxxig/config.json |
/etc/xxxig/config.json、config_cc.json |
| 服务 | 单个 xxxig(systemd 或 Alpine OpenRC) |
xxxig-daemon + xxxig-server(仅 systemd) |
| 默认启用 | xxxig |
仅 xxxig-daemon(server 需手动 enable) |
.deb 的服务文件、维护脚本在 debian/;postinst 不自动启用服务,但 install.deb.sh 会主动 enable daemon。卸载统一用 script/uninstall.sh(自动探测安装方式)。
配置改写逻辑(改动重点:代码重复)
install.sh 与 install.deb.sh 各自维护一份近乎相同的 parse_args / replace_config / configure_cpu_rx / configure_hugepages。修改任何安装参数或配置写入逻辑时,两个文件都要同步改。
- 配置全部用
jq改写 config.json(矿池 url/user/pass/algo/tls/nicehash、cc-client、donate-level=0等)。 - CPU 亲和性
configure_cpu_rx:线程数 ≤ 核数一半时step=2(隔核分配,避开超线程),否则step=1,生成cpu.rx数组(algo 为panthera时写cpu.panthera)。 - 已知差异:install.sh 把
log-file设为/etc/miner/xxxig/xxxig.log;install.deb.sh 设为空串(由 systemd 服务用--log-file显式指定到/var/log/xxxig/)。 - 两脚本都会先卸载旧版再装(幂等重装);缺省 wallet/password/cc-work-id 会自动生成。