diff --git a/debian/build-deb.sh b/debian/build-deb.sh index 32a2459..065c891 100755 --- a/debian/build-deb.sh +++ b/debian/build-deb.sh @@ -46,6 +46,7 @@ PKG_DIR="${BUILD_DIR}/${PKG_NAME}_${DEB_VERSION}_${DEB_ARCH}" mkdir -p "${PKG_DIR}/DEBIAN" mkdir -p "${PKG_DIR}/opt/xxxig" mkdir -p "${PKG_DIR}/lib/systemd/system" +mkdir -p "${PKG_DIR}/usr/libexec" # 解压二进制文件 echo "📂 Extracting binaries..." @@ -70,6 +71,8 @@ chmod 755 "${PKG_DIR}/DEBIAN/postrm" echo "🔧 Installing systemd services..." cp debian/xxxig-server.service "${PKG_DIR}/lib/systemd/system/" cp debian/xxxig-daemon.service "${PKG_DIR}/lib/systemd/system/" +cp debian/xxxig-hugepages.service "${PKG_DIR}/lib/systemd/system/" +cp debian/xxxig-enable-1gb-pages "${PKG_DIR}/usr/libexec/" # 设置权限 chmod 755 "${PKG_DIR}/opt/xxxig/xxxigServer" @@ -80,6 +83,8 @@ chmod 644 "${PKG_DIR}/opt/xxxig/config_cc.json" chmod 644 "${PKG_DIR}/opt/xxxig/index.html" chmod 644 "${PKG_DIR}/lib/systemd/system/xxxig-server.service" chmod 644 "${PKG_DIR}/lib/systemd/system/xxxig-daemon.service" +chmod 644 "${PKG_DIR}/lib/systemd/system/xxxig-hugepages.service" +chmod 755 "${PKG_DIR}/usr/libexec/xxxig-enable-1gb-pages" # 构建 deb 包 echo "🔨 Building package..." diff --git a/debian/control.template b/debian/control.template index da5af7f..bfe66f0 100644 --- a/debian/control.template +++ b/debian/control.template @@ -3,7 +3,7 @@ Version: {{VERSION}} Section: net Priority: optional Architecture: {{ARCH}} -Depends: libc6 (>= 2.31) +Depends: libc6 (>= 2.31), procps Maintainer: XXXig Team Homepage: https://github.com/wangdefaa/xxxig Description: Cryptocurrency mining software suite diff --git a/debian/prerm b/debian/prerm index 5332521..b04de79 100755 --- a/debian/prerm +++ b/debian/prerm @@ -3,7 +3,7 @@ set -e # 仅在卸载(remove)时停用服务;升级(upgrade)时保持运行与开机自启状态 if [ "$1" = "remove" ] && [ -d /run/systemd/system ]; then - for service in xxxig-server.service xxxig-daemon.service; do + for service in xxxig-server.service xxxig-daemon.service xxxig-hugepages.service; do if systemctl is-active --quiet "$service"; then echo "Stopping $service..." systemctl stop "$service" diff --git a/debian/xxxig-daemon.service b/debian/xxxig-daemon.service index 93cf9f2..e88c204 100644 --- a/debian/xxxig-daemon.service +++ b/debian/xxxig-daemon.service @@ -1,6 +1,7 @@ [Unit] Description=XXXig Daemon (Miner Client) -After=network.target +Requires=xxxig-hugepages.service +After=network.target xxxig-hugepages.service [Service] Type=simple @@ -24,7 +25,7 @@ NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true -ReadWritePaths=/var/log/xxxig +ReadWritePaths=/var/log/xxxig /etc/xxxig # 日志设置 StandardOutput=journal diff --git a/debian/xxxig-enable-1gb-pages b/debian/xxxig-enable-1gb-pages new file mode 100644 index 0000000..14c15a4 --- /dev/null +++ b/debian/xxxig-enable-1gb-pages @@ -0,0 +1,16 @@ +#!/bin/sh +set -eu + +sysctl -w vm.nr_hugepages="$(nproc)" + +found=0 +for node in /sys/devices/system/node/node*; do + file="$node/hugepages/hugepages-1048576kB/nr_hugepages" + [ -e "$file" ] || continue + printf '3\n' >"$file" + actual=$(cat "$file") + [ "$actual" -ge 3 ] || exit 1 + found=1 +done + +[ "$found" -eq 1 ] diff --git a/debian/xxxig-hugepages.service b/debian/xxxig-hugepages.service new file mode 100644 index 0000000..6a89547 --- /dev/null +++ b/debian/xxxig-hugepages.service @@ -0,0 +1,9 @@ +[Unit] +Description=Reserve Huge Pages for XXXig +Before=xxxig-daemon.service +ConditionPathExists=/etc/xxxig/1gb-pages.enabled +ConditionPathExists=/sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages + +[Service] +Type=oneshot +ExecStart=/usr/libexec/xxxig-enable-1gb-pages diff --git a/script/install.deb.sh b/script/install.deb.sh index f25cef1..3af56e6 100755 --- a/script/install.deb.sh +++ b/script/install.deb.sh @@ -16,10 +16,10 @@ declare -r RESET="\033[0m" CONFIG_DIR="/etc/xxxig" LOG_DIR="/var/log/xxxig" CONFIG_FILE="$CONFIG_DIR/config.json" -HUGEPAGES_HELPER="/usr/local/libexec/xxxig-enable-1gb-pages" -HUGEPAGES_SERVICE="/etc/systemd/system/xxxig-hugepages.service" -DAEMON_DROPIN_DIR="/etc/systemd/system/xxxig-daemon.service.d" -DAEMON_DROPIN="$DAEMON_DROPIN_DIR/installer.conf" +HUGEPAGES_MARKER="$CONFIG_DIR/1gb-pages.enabled" +LEGACY_HUGEPAGES_HELPER="/usr/local/libexec/xxxig-enable-1gb-pages" +LEGACY_HUGEPAGES_SERVICE="/etc/systemd/system/xxxig-hugepages.service" +LEGACY_DAEMON_DROPIN="/etc/systemd/system/xxxig-daemon.service.d/installer.conf" # Gitea 配置 GITEA_SERVER="gitea.bcde.io" @@ -66,11 +66,10 @@ add_apt_repository() { # 卸载旧版本 uninstall_xxxig() { - systemctl stop xxxig-daemon xxxig-server xxxig-hugepages 2>/dev/null || true - systemctl disable xxxig-daemon xxxig-server xxxig-hugepages 2>/dev/null || true + systemctl stop xxxig-daemon xxxig-server 2>/dev/null || true + systemctl disable xxxig-daemon xxxig-server 2>/dev/null || true apt-get remove -y xxxig 2>/dev/null || true - rm -rf "$CONFIG_DIR" "$LOG_DIR" /etc/apt/sources.list.d/xxxig.list - rm -f "$HUGEPAGES_HELPER" "$HUGEPAGES_SERVICE" "$DAEMON_DROPIN" + rm -rf "$CONFIG_DIR" "$LOG_DIR" "/etc/apt/sources.list.d/${GITEA_OWNER}.list" systemctl daemon-reload 2>/dev/null || true } @@ -86,75 +85,19 @@ install_xxxig() { log "$GREEN" "安装完成" } -write_hugepages_helper() { - mkdir -p "$(dirname "$HUGEPAGES_HELPER")" - cat >"$HUGEPAGES_HELPER" <<'EOF' -#!/bin/sh -set -eu - -sysctl -w vm.nr_hugepages="$(nproc)" - -found=0 -for node in /sys/devices/system/node/node*; do - file="$node/hugepages/hugepages-1048576kB/nr_hugepages" - [ -e "$file" ] || continue - printf '3\n' >"$file" - actual=$(cat "$file") - [ "$actual" -ge 3 ] || exit 1 - found=1 -done - -[ "$found" -eq 1 ] -EOF - chmod 755 "$HUGEPAGES_HELPER" -} - -write_hugepages_service() { - cat >"$HUGEPAGES_SERVICE" <"$DAEMON_DROPIN" -} - configure_hugepages() { - write_daemon_dropin - [[ "$one_gb_pages" == "true" ]] || return 0 - - log "$BLUE" "配置 1GB Huge Pages 持久池..." - write_hugepages_helper - write_hugepages_service - log "$GREEN" "1GB Huge Pages 初始化服务配置完成" + if [[ "$one_gb_pages" == "true" ]]; then + touch "$HUGEPAGES_MARKER" + chmod 644 "$HUGEPAGES_MARKER" + log "$GREEN" "已启用 DEB 包内置的 1GB Huge Pages 服务" + else + rm -f "$HUGEPAGES_MARKER" + fi } start_service() { log "$BLUE" "启动服务..." systemctl daemon-reload - if [[ "$one_gb_pages" == "true" ]]; then - systemctl enable xxxig-hugepages.service - fi systemctl enable --now xxxig-daemon.service }