All checks were successful
Build and Release / build-and-test (arm64, alpine) (push) Successful in 13s
Build and Release / build-and-test (amd64, alpine) (push) Successful in 21s
Build and Release / build-and-test (arm64, ubuntu) (push) Successful in 24s
Build and Release / build-and-test (amd64, ubuntu) (push) Successful in 35s
Build and Release / release (push) Has been skipped
274 lines
8.4 KiB
Bash
Executable File
274 lines
8.4 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# XXXigCC 安装脚本 - DEB 版本
|
|
# 通过 APT 从 Gitea Generic Package Registry 安装 XXXigCC
|
|
#
|
|
|
|
set -e
|
|
|
|
declare -r BLUE="\033[0;34m"
|
|
declare -r RED="\033[0;31m"
|
|
declare -r GREEN="\033[0;32m"
|
|
declare -r YELLOW="\033[0;33m"
|
|
declare -r RESET="\033[0m"
|
|
|
|
# 基本配置
|
|
CONFIG_DIR="/etc/xxxigcc"
|
|
LOG_DIR="/var/log/xxxigcc"
|
|
CONFIG_FILE="$CONFIG_DIR/config.json"
|
|
|
|
# Gitea 配置
|
|
GITEA_SERVER="gitea.bcde.io"
|
|
GITEA_OWNER="wangdefa"
|
|
|
|
# 默认参数
|
|
DEFAULT_VERSION="latest"
|
|
DEFAULT_THREADS=0
|
|
DEFAULT_POOL_ALGO="rx/0"
|
|
DEFAULT_POOL_TLS="false"
|
|
DEFAULT_POOL_KEEPALIVE="false"
|
|
DEFAULT_POOL_DAEMON="false"
|
|
DEFAULT_POOL_SUBMIT_TO_ORIGIN="false"
|
|
DEFAULT_POOL_NICEHASH="true"
|
|
DEFAULT_ONE_GB_PAGES="false"
|
|
DEFAULT_VERBOSE="true"
|
|
DEFAULT_CC_ENABLED="false"
|
|
DEFAULT_CC_TLS="false"
|
|
|
|
# 辅助函数
|
|
log() { echo -e "${1}${2}${RESET}"; }
|
|
error() { log "$RED" "错误: $1"; exit 1; }
|
|
|
|
check_os() {
|
|
grep -qiE 'debian|ubuntu' /etc/os-release || error "仅支持 Debian/Ubuntu 系统"
|
|
}
|
|
|
|
get_arch() {
|
|
case $(uname -m) in
|
|
x86_64) echo "amd64" ;;
|
|
aarch64) echo "arm64" ;;
|
|
*) error "不支持的架构: $(uname -m)" ;;
|
|
esac
|
|
}
|
|
|
|
# 添加 APT 源并更新
|
|
add_apt_repository() {
|
|
echo "deb [trusted=yes] https://${GITEA_SERVER}/api/packages/${GITEA_OWNER}/debian bookworm main" \
|
|
>/etc/apt/sources.list.d/xxxigcc.list
|
|
apt-get update -qq
|
|
}
|
|
|
|
# 卸载旧版本
|
|
uninstall_xxxigcc() {
|
|
systemctl stop xxxigcc-daemon xxxigcc-server 2>/dev/null || true
|
|
systemctl disable xxxigcc-daemon xxxigcc-server 2>/dev/null || true
|
|
apt-get remove -y xxxigcc 2>/dev/null || true
|
|
rm -rf "$CONFIG_DIR" "$LOG_DIR" /etc/apt/sources.list.d/xxxigcc.list
|
|
systemctl daemon-reload 2>/dev/null || true
|
|
}
|
|
|
|
# 安装并启动服务
|
|
install_and_start() {
|
|
log "$BLUE" "安装 XXXigCC $version..."
|
|
if [[ "$version" == "latest" ]]; then
|
|
apt-get install -y xxxigcc
|
|
else
|
|
apt-get install -y xxxigcc="$version"
|
|
fi
|
|
|
|
log "$BLUE" "启动服务..."
|
|
systemctl daemon-reload
|
|
systemctl enable --now xxxigcc-daemon.service
|
|
log "$GREEN" "安装完成"
|
|
}
|
|
|
|
# 配置 CPU 亲和性
|
|
configure_cpu_rx() {
|
|
local cpu_cores=$(nproc)
|
|
local rx_array="" step=1
|
|
|
|
[[ "$threads" -le $((cpu_cores / 2)) ]] && step=2
|
|
|
|
for ((i = 0; i < threads; i++)); do
|
|
[[ $i -gt 0 ]] && rx_array+=", "
|
|
rx_array+="$((i * step))"
|
|
done
|
|
|
|
local field="rx"
|
|
[[ "$pool_algo" == "panthera" ]] && field="panthera"
|
|
|
|
jq ".cpu.$field = [ $rx_array ]" "$CONFIG_FILE" >"$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
|
|
}
|
|
|
|
# 更新配置文件
|
|
replace_config() {
|
|
[[ ! -f "$CONFIG_FILE" ]] && error "配置文件缺失"
|
|
|
|
local jq_cmd=".\"log-file\" = \"\"
|
|
| .\"donate-level\" = 0
|
|
| .\"donate-over-proxy\" = 0
|
|
| .pools[0].algo = \"$pool_algo\"
|
|
| .pools[0].url = \"$pool_address\"
|
|
| .pools[0].user = \"$wallet_address\"
|
|
| .pools[0].pass = \"$pool_password\"
|
|
| .pools[0].tls = $pool_tls
|
|
| .pools[0].nicehash = $pool_nicehash
|
|
| .\"verbose\" = $verbose"
|
|
|
|
[[ "$one_gb_pages" == "true" ]] && jq_cmd+=" | .randomx.\"1gb-pages\" = true"
|
|
[[ "$pool_keepalive" == "true" ]] && jq_cmd+=" | .pools[0].keepalive = true"
|
|
[[ -n "$pool_tls_fingerprint" ]] && jq_cmd+=" | .pools[0].\"tls-fingerprint\" = \"$pool_tls_fingerprint\""
|
|
[[ "$pool_daemon" == "true" ]] && jq_cmd+=" | .pools[0].daemon = true"
|
|
|
|
if [[ "$pool_submit_to_origin" == "true" ]]; then
|
|
jq_cmd+=" | .pools[0].\"submit-to-origin\" = true | .pools[0].\"self-select\" = \"$pool_self_select\""
|
|
fi
|
|
|
|
if [[ "$cc_enabled" == "true" ]]; then
|
|
jq_cmd+=" | .\"cc-client\".enabled = true
|
|
| .\"cc-client\".servers[0].url = \"$cc_url\"
|
|
| .\"cc-client\".servers[0].\"access-token\" = \"$cc_token\"
|
|
| .\"cc-client\".servers[0].\"use-tls\" = $cc_tls
|
|
| .\"cc-client\".\"worker-id\" = \"$cc_work_id\""
|
|
else
|
|
jq_cmd+=" | .\"cc-client\".enabled = false"
|
|
fi
|
|
|
|
jq "$jq_cmd" "$CONFIG_FILE" >"$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
|
|
configure_cpu_rx
|
|
}
|
|
|
|
show_usage() {
|
|
cat <<EOF
|
|
用法: $0 [选项]
|
|
|
|
选项:
|
|
-v, --version <版本> XXXigCC 版本 (默认: $DEFAULT_VERSION)
|
|
-t, --threads <数字> 线程数 (默认: 自动)
|
|
-a, --algo <算法> 矿池算法 (默认: $DEFAULT_POOL_ALGO)
|
|
-o, --pool <地址> 矿池地址 (必需)
|
|
-w, --wallet <地址> 钱包地址
|
|
-p, --password <密码> 矿池密码 (默认自动生成)
|
|
--1gb-pages 启用 1GB 大页
|
|
--tls 启用 TLS
|
|
--keepalive 启用 KeepAlive
|
|
--daemon 启用 SOLO 挖矿
|
|
--nicehash 启用 NiceHash 模式 (默认: 启用)
|
|
--submit-to-origin 提交到原始矿池
|
|
--self-select <地址> 自选矿池地址
|
|
--verbose 启用详细输出 (默认: 启用)
|
|
--cc 启用 CC
|
|
--cc-url <地址> CC 服务器地址
|
|
--cc-work-id <ID> CC 工作 ID
|
|
--cc-token <令牌> CC 访问令牌
|
|
--cc-tls 启用 CC TLS
|
|
-h, --help 显示帮助信息
|
|
|
|
示例:
|
|
$0 -o pool.example.com:3333 -w YOUR_WALLET_ADDRESS
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
parse_args() {
|
|
version=$DEFAULT_VERSION
|
|
threads=$DEFAULT_THREADS
|
|
pool_algo=$DEFAULT_POOL_ALGO
|
|
pool_tls=$DEFAULT_POOL_TLS
|
|
pool_keepalive=$DEFAULT_POOL_KEEPALIVE
|
|
pool_submit_to_origin=$DEFAULT_POOL_SUBMIT_TO_ORIGIN
|
|
pool_daemon=$DEFAULT_POOL_DAEMON
|
|
pool_nicehash=$DEFAULT_POOL_NICEHASH
|
|
pool_self_select=""
|
|
pool_address=""
|
|
wallet_address=""
|
|
pool_password=""
|
|
pool_tls_fingerprint=""
|
|
verbose=$DEFAULT_VERBOSE
|
|
cc_enabled=$DEFAULT_CC_ENABLED
|
|
cc_url=""
|
|
cc_work_id=""
|
|
cc_token=""
|
|
cc_tls=$DEFAULT_CC_TLS
|
|
one_gb_pages=$DEFAULT_ONE_GB_PAGES
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
-v | --version) version="$2"; shift 2 ;;
|
|
-t | --threads) threads="$2"; shift 2 ;;
|
|
-a | --algo) pool_algo="$2"; shift 2 ;;
|
|
-o | --pool) pool_address="$2"; shift 2 ;;
|
|
-w | --wallet) wallet_address="$2"; shift 2 ;;
|
|
-p | --password) pool_password="$2"; shift 2 ;;
|
|
--1gb-pages) one_gb_pages="true"; shift ;;
|
|
--cc-url) cc_url="$2"; shift 2 ;;
|
|
--cc-work-id) cc_work_id="$2"; shift 2 ;;
|
|
--cc-token) cc_token="$2"; shift 2 ;;
|
|
--tls-fingerprint) pool_tls_fingerprint="$2"; shift 2 ;;
|
|
--tls) pool_tls="true"; shift ;;
|
|
--keepalive) pool_keepalive="true"; shift ;;
|
|
--daemon) pool_daemon="true"; shift ;;
|
|
--nicehash) pool_nicehash="true"; shift ;;
|
|
--submit-to-origin) pool_submit_to_origin="true"; shift ;;
|
|
--self-select) pool_self_select="$2"; shift 2 ;;
|
|
--verbose) verbose="true"; shift ;;
|
|
--cc) cc_enabled="true"; shift ;;
|
|
--cc-tls) cc_tls="true"; shift ;;
|
|
-h | --help) show_usage ;;
|
|
*) error "无效选项: $1" ;;
|
|
esac
|
|
done
|
|
|
|
# 验证必需参数
|
|
[[ -z "$pool_address" ]] && error "矿池地址不能为空"
|
|
[[ ! "$threads" =~ ^[0-9]+$ ]] && error "无效线程数"
|
|
[[ "$pool_submit_to_origin" == "true" && -z "$pool_self_select" ]] && \
|
|
error "启用 submit_to_origin 必须设置 self_select"
|
|
|
|
# 处理默认值
|
|
if [[ -z "$pool_password" ]]; then
|
|
local ip=$(curl -4s --retry 3 --connect-timeout 10 ifconfig.me 2>/dev/null || echo "0.0.0.0")
|
|
local random_str=$(tr -dc '0-9a-zA-Z' </dev/urandom | head -c 5)
|
|
pool_password=$(echo "$ip" | awk -F. '{print $3"_"$4}')"_$random_str"
|
|
fi
|
|
|
|
[[ -z "$cc_work_id" ]] && cc_work_id="$(get_arch)_$pool_password"
|
|
[[ -z "$wallet_address" ]] && wallet_address="empty_wallet_$(date +%s)"
|
|
|
|
if [[ "$threads" -le 0 ]]; then
|
|
threads=$(nproc)
|
|
elif [[ "$threads" -gt $(nproc) ]]; then
|
|
threads=$(nproc)
|
|
fi
|
|
}
|
|
|
|
main() {
|
|
parse_args "$@"
|
|
check_os
|
|
|
|
# 检查并安装依赖
|
|
command -v curl &>/dev/null || apt-get install -y curl
|
|
command -v jq &>/dev/null || apt-get install -y jq
|
|
|
|
log "$BLUE" "配置信息:"
|
|
echo " 版本: $version"
|
|
echo " 架构: $(get_arch)"
|
|
echo " 线程: $threads"
|
|
echo " 算法: $pool_algo"
|
|
echo " 矿池: $pool_address"
|
|
echo " 钱包: $wallet_address"
|
|
|
|
uninstall_xxxigcc
|
|
add_apt_repository
|
|
install_and_start
|
|
replace_config
|
|
systemctl restart xxxigcc-daemon.service
|
|
|
|
echo "管理命令:"
|
|
echo " systemctl status xxxigcc-daemon"
|
|
echo " journalctl -u xxxigcc-daemon -f"
|
|
echo " systemctl restart xxxigcc-daemon"
|
|
}
|
|
|
|
main "$@"
|