mirror of
https://github.com/hotyue/IP-Sentinel.git
synced 2026-09-05 23:49:56 +08:00
refactor(core): 实施全局动态版本嗅探 (SSOT)。彻底移除引导外壳与内部安装链路中硬编码的静态版本号文本,提升 CI/CD 自动化持续集成效率
This commit is contained in:
+10
-4
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
# 脚本名称: install.sh (v4.3.0 模块化终极引导入口)
|
# 脚本名称: install.sh (动态模块化终极引导入口)
|
||||||
# 核心功能: 权限鉴定、沙盒创建、Ctrl+C 熔断保护、业务流引导
|
# 核心功能: 权限鉴定、沙盒创建、Ctrl+C 熔断保护、动态版本嗅探
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
|
|
||||||
if [ "$EUID" -ne 0 ]; then
|
if [ "$EUID" -ne 0 ]; then
|
||||||
@@ -23,9 +23,14 @@ trap 'rm -rf "$SECURE_TMP" 2>/dev/null' EXIT HUP
|
|||||||
|
|
||||||
REPO_RAW_URL="https://raw.githubusercontent.com/hotyue/IP-Sentinel/main"
|
REPO_RAW_URL="https://raw.githubusercontent.com/hotyue/IP-Sentinel/main"
|
||||||
|
|
||||||
echo -e "\n⏳ 正在拉取 IP-Sentinel v4.3.0 安装模块引擎..."
|
# ----------------------------------------------------------
|
||||||
|
# [核心架构升级] 动态嗅探云端真理之源 (SSOT)
|
||||||
|
# ----------------------------------------------------------
|
||||||
|
TARGET_VERSION=$( (curl -fsSL --connect-timeout 5 --retry 2 "${REPO_RAW_URL}/version.txt?t=$(date +%s)" || curl -4 -fsSL --connect-timeout 5 --retry 2 "${REPO_RAW_URL}/version.txt?t=$(date +%s)") 2>/dev/null | grep "^AGENT_VERSION=" | cut -d'=' -f2 | tr -d '[:space:]')
|
||||||
|
TARGET_VERSION=${TARGET_VERSION:-"4.3.1"}
|
||||||
|
|
||||||
|
echo -e "\n⏳ 正在拉取 IP-Sentinel v${TARGET_VERSION} 安装模块引擎..."
|
||||||
|
|
||||||
# 【核心防线】追加 ?t=$(date +%s) 强行击穿 GitHub CDN 缓存
|
|
||||||
curl -fsSL --connect-timeout 10 --retry 3 "${REPO_RAW_URL}/install/build_agent.sh?t=$(date +%s)" -o "${SECURE_TMP}/build_agent.sh"
|
curl -fsSL --connect-timeout 10 --retry 3 "${REPO_RAW_URL}/install/build_agent.sh?t=$(date +%s)" -o "${SECURE_TMP}/build_agent.sh"
|
||||||
|
|
||||||
if [ ! -s "${SECURE_TMP}/build_agent.sh" ]; then
|
if [ ! -s "${SECURE_TMP}/build_agent.sh" ]; then
|
||||||
@@ -35,6 +40,7 @@ fi
|
|||||||
|
|
||||||
export SECURE_TMP
|
export SECURE_TMP
|
||||||
export REPO_RAW_URL
|
export REPO_RAW_URL
|
||||||
|
export TARGET_VERSION
|
||||||
|
|
||||||
chmod +x "${SECURE_TMP}/build_agent.sh"
|
chmod +x "${SECURE_TMP}/build_agent.sh"
|
||||||
bash "${SECURE_TMP}/build_agent.sh"
|
bash "${SECURE_TMP}/build_agent.sh"
|
||||||
|
|||||||
+3
-19
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
# 模块名称: env_setup.sh
|
# 模块名称: env_setup.sh
|
||||||
# 核心功能: 靶机架构预检、云端版本解析、多分支包管理器依赖补全
|
# 核心功能: 靶机架构预检、多分支包管理器依赖补全
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
|
|
||||||
is_systemd() {
|
is_systemd() {
|
||||||
@@ -35,9 +35,6 @@ version_lt() {
|
|||||||
test "$(printf '%s\n' "$1" "$2" | sort -V | head -n 1)" = "$1" && test "$1" != "$2"
|
test "$(printf '%s\n' "$1" "$2" | sort -V | head -n 1)" = "$1" && test "$1" != "$2"
|
||||||
}
|
}
|
||||||
|
|
||||||
# ----------------------------------------------------------
|
|
||||||
# [时序 1] 预检系统环境,输出雷达面板
|
|
||||||
# ----------------------------------------------------------
|
|
||||||
do_env_precheck() {
|
do_env_precheck() {
|
||||||
echo -e "\n======================================"
|
echo -e "\n======================================"
|
||||||
echo -e "📊 \033[36mIP-Sentinel 靶机环境侦测预检\033[0m"
|
echo -e "📊 \033[36mIP-Sentinel 靶机环境侦测预检\033[0m"
|
||||||
@@ -56,22 +53,14 @@ do_env_precheck() {
|
|||||||
CONFIG_FILE="${INSTALL_DIR}/config.conf"
|
CONFIG_FILE="${INSTALL_DIR}/config.conf"
|
||||||
}
|
}
|
||||||
|
|
||||||
# ----------------------------------------------------------
|
|
||||||
# [时序 2] 解析远端版本锚点
|
|
||||||
# ----------------------------------------------------------
|
|
||||||
do_fetch_version() {
|
do_fetch_version() {
|
||||||
# 动态抓取,若失败则提供硬编码保底
|
# 已由外壳入口拉取并 export TARGET_VERSION,此处只需保障兜底容错
|
||||||
TARGET_VERSION=$( (curl -fsSL --connect-timeout 5 --retry 2 "${REPO_RAW_URL}/version.txt" || curl -4 -fsSL --connect-timeout 5 --retry 2 "${REPO_RAW_URL}/version.txt") 2>/dev/null | grep "^AGENT_VERSION=" | cut -d'=' -f2 | tr -d '[:space:]')
|
TARGET_VERSION=${TARGET_VERSION:-"4.3.1"}
|
||||||
TARGET_VERSION=${TARGET_VERSION:-"4.2.3"}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# ----------------------------------------------------------
|
|
||||||
# [时序 3] 唤醒包管理器,补全战地依赖
|
|
||||||
# ----------------------------------------------------------
|
|
||||||
do_install_deps() {
|
do_install_deps() {
|
||||||
echo -e "\n[1/7] 正在探测并安装基础环境依赖 (curl, jq, cron, procps, python3, sqlite3)..."
|
echo -e "\n[1/7] 正在探测并安装基础环境依赖 (curl, jq, cron, procps, python3, sqlite3)..."
|
||||||
|
|
||||||
# [修改点] 将 sqlite3 统一纳入全端基础依赖池
|
|
||||||
REQUIRED_CMDS=("curl" "jq" "crontab" "pgrep" "python3" "openssl" "sqlite3")
|
REQUIRED_CMDS=("curl" "jq" "crontab" "pgrep" "python3" "openssl" "sqlite3")
|
||||||
MISSING_CMDS=()
|
MISSING_CMDS=()
|
||||||
|
|
||||||
@@ -86,7 +75,6 @@ do_install_deps() {
|
|||||||
|
|
||||||
if command -v apt-get >/dev/null 2>&1; then
|
if command -v apt-get >/dev/null 2>&1; then
|
||||||
apt-get update -y >/dev/null 2>&1
|
apt-get update -y >/dev/null 2>&1
|
||||||
# [修改点] apt-get 阵营追加 sqlite3
|
|
||||||
apt-get install -y --no-install-recommends curl jq cron procps python3 openssl sqlite3 >/dev/null 2>&1
|
apt-get install -y --no-install-recommends curl jq cron procps python3 openssl sqlite3 >/dev/null 2>&1
|
||||||
systemctl enable cron >/dev/null 2>&1 && systemctl start cron >/dev/null 2>&1
|
systemctl enable cron >/dev/null 2>&1 && systemctl start cron >/dev/null 2>&1
|
||||||
|
|
||||||
@@ -104,20 +92,17 @@ do_install_deps() {
|
|||||||
$PKG_MGR install -y epel-release >/dev/null 2>&1 || true
|
$PKG_MGR install -y epel-release >/dev/null 2>&1 || true
|
||||||
|
|
||||||
echo -e "\033[90m (正在拉取核心组件...)\033[0m"
|
echo -e "\033[90m (正在拉取核心组件...)\033[0m"
|
||||||
# [修改点] RHEL 阵营追加 sqlite
|
|
||||||
$PKG_MGR install -y $OPT_ARGS curl jq cronie procps-ng python3 openssl sqlite
|
$PKG_MGR install -y $OPT_ARGS curl jq cronie procps-ng python3 openssl sqlite
|
||||||
systemctl enable crond >/dev/null 2>&1 && systemctl start crond >/dev/null 2>&1
|
systemctl enable crond >/dev/null 2>&1 && systemctl start crond >/dev/null 2>&1
|
||||||
|
|
||||||
elif command -v apk >/dev/null 2>&1; then
|
elif command -v apk >/dev/null 2>&1; then
|
||||||
echo "Alpine 探测到系统类型为 Alpine Linux,正在执行轻量级安装..."
|
echo "Alpine 探测到系统类型为 Alpine Linux,正在执行轻量级安装..."
|
||||||
# [修改点] Alpine 阵营追加 sqlite
|
|
||||||
apk add --no-cache curl jq cronie procps python3 bash openssl sqlite || apk add --no-cache curl jq procps python3 bash openssl sqlite
|
apk add --no-cache curl jq cronie procps python3 bash openssl sqlite || apk add --no-cache curl jq procps python3 bash openssl sqlite
|
||||||
mkdir -p /var/spool/cron/crontabs
|
mkdir -p /var/spool/cron/crontabs
|
||||||
rc-update add crond default >/dev/null 2>&1
|
rc-update add crond default >/dev/null 2>&1
|
||||||
service crond start >/dev/null 2>&1
|
service crond start >/dev/null 2>&1
|
||||||
|
|
||||||
elif command -v pacman >/dev/null 2>&1; then
|
elif command -v pacman >/dev/null 2>&1; then
|
||||||
# [修改点] Arch 阵营追加 sqlite
|
|
||||||
pacman -S --needed --noconfirm curl jq cronie procps-ng python openssl sqlite >/dev/null 2>&1
|
pacman -S --needed --noconfirm curl jq cronie procps-ng python openssl sqlite >/dev/null 2>&1
|
||||||
mkdir -p /root/.cache/crontab 2>/dev/null
|
mkdir -p /root/.cache/crontab 2>/dev/null
|
||||||
systemctl enable cronie >/dev/null 2>&1 && systemctl start cronie >/dev/null 2>&1
|
systemctl enable cronie >/dev/null 2>&1 && systemctl start cronie >/dev/null 2>&1
|
||||||
@@ -125,7 +110,6 @@ do_install_deps() {
|
|||||||
else
|
else
|
||||||
echo -e "\033[31m❌ 自动安装失败:系统未知的包管理器。\033[0m"
|
echo -e "\033[31m❌ 自动安装失败:系统未知的包管理器。\033[0m"
|
||||||
echo -e "\033[33m⚠️ 请根据您的操作系统,手动执行以下安装命令后重新运行本脚本:\033[0m"
|
echo -e "\033[33m⚠️ 请根据您的操作系统,手动执行以下安装命令后重新运行本脚本:\033[0m"
|
||||||
# [修改点] 手动提示文案追加 sqlite3/sqlite
|
|
||||||
echo -e " Debian/Ubuntu: \033[36mapt-get update && apt-get install -y --no-install-recommends curl jq cron procps python3 openssl sqlite3\033[0m"
|
echo -e " Debian/Ubuntu: \033[36mapt-get update && apt-get install -y --no-install-recommends curl jq cron procps python3 openssl sqlite3\033[0m"
|
||||||
echo -e " CentOS/RHEL: \033[36myum install -y curl jq cronie procps-ng python3 openssl sqlite\033[0m"
|
echo -e " CentOS/RHEL: \033[36myum install -y curl jq cronie procps-ng python3 openssl sqlite\033[0m"
|
||||||
echo -e " Alpine Linux: \033[36mapk add --no-cache curl jq cronie procps python3 bash openssl sqlite\033[0m"
|
echo -e " Alpine Linux: \033[36mapk add --no-cache curl jq cronie procps python3 bash openssl sqlite\033[0m"
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ do_master_env_precheck() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
do_fetch_master_version() {
|
do_fetch_master_version() {
|
||||||
TARGET_VERSION=$( (curl -fsSL --connect-timeout 5 --retry 2 "${REPO_RAW_URL}/version.txt" || curl -4 -fsSL --connect-timeout 5 --retry 2 "${REPO_RAW_URL}/version.txt") 2>/dev/null | grep "^MASTER_VERSION=" | cut -d'=' -f2 | tr -d '[:space:]')
|
TARGET_VERSION=${TARGET_VERSION:-"4.3.1"}
|
||||||
TARGET_VERSION=${TARGET_VERSION:-"4.0.7"}
|
TARGET_VERSION=${TARGET_VERSION:-"4.0.7"}
|
||||||
|
|
||||||
MASTER_DIR="/opt/ip_sentinel_master"
|
MASTER_DIR="/opt/ip_sentinel_master"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
# 脚本名称: install_master.sh (v4.3.0 终极模块化引导入口)
|
# 脚本名称: install_master.sh (动态模块化终极引导入口)
|
||||||
# 核心功能: 极简引导入口。包含 Ctrl+C 优雅中断,采用物理文件执行规避管道污染
|
# 核心功能: 极简引导入口。包含 Ctrl+C 优雅中断,动态版本嗅探
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
|
|
||||||
cleanup_and_exit() {
|
cleanup_and_exit() {
|
||||||
@@ -22,9 +22,14 @@ fi
|
|||||||
SECURE_TMP=$(mktemp -d /tmp/ips_master_install.XXXXXX)
|
SECURE_TMP=$(mktemp -d /tmp/ips_master_install.XXXXXX)
|
||||||
REPO_RAW_URL="https://raw.githubusercontent.com/hotyue/IP-Sentinel/main"
|
REPO_RAW_URL="https://raw.githubusercontent.com/hotyue/IP-Sentinel/main"
|
||||||
|
|
||||||
echo -e "\n⏳ 正在拉取 IP-Sentinel Master v4.3.0 安装引擎..."
|
# ----------------------------------------------------------
|
||||||
|
# [核心架构升级] 动态嗅探云端真理之源 (SSOT)
|
||||||
|
# ----------------------------------------------------------
|
||||||
|
TARGET_VERSION=$( (curl -fsSL --connect-timeout 5 --retry 2 "${REPO_RAW_URL}/version.txt?t=$(date +%s)" || curl -4 -fsSL --connect-timeout 5 --retry 2 "${REPO_RAW_URL}/version.txt?t=$(date +%s)") 2>/dev/null | grep "^MASTER_VERSION=" | cut -d'=' -f2 | tr -d '[:space:]')
|
||||||
|
TARGET_VERSION=${TARGET_VERSION:-"4.3.1"}
|
||||||
|
|
||||||
|
echo -e "\n⏳ 正在拉取 IP-Sentinel Master v${TARGET_VERSION} 安装引擎..."
|
||||||
|
|
||||||
# 【核心防线】追加 ?t=$(date +%s) 强行击穿 GitHub CDN 缓存
|
|
||||||
curl -fsSL --connect-timeout 10 --retry 3 "${REPO_RAW_URL}/install/build_master.sh?t=$(date +%s)" -o "${SECURE_TMP}/build_master.sh"
|
curl -fsSL --connect-timeout 10 --retry 3 "${REPO_RAW_URL}/install/build_master.sh?t=$(date +%s)" -o "${SECURE_TMP}/build_master.sh"
|
||||||
|
|
||||||
if [ ! -s "${SECURE_TMP}/build_master.sh" ]; then
|
if [ ! -s "${SECURE_TMP}/build_master.sh" ]; then
|
||||||
@@ -34,6 +39,7 @@ fi
|
|||||||
|
|
||||||
export SECURE_TMP
|
export SECURE_TMP
|
||||||
export REPO_RAW_URL
|
export REPO_RAW_URL
|
||||||
|
export TARGET_VERSION
|
||||||
|
|
||||||
chmod +x "${SECURE_TMP}/build_master.sh"
|
chmod +x "${SECURE_TMP}/build_master.sh"
|
||||||
bash "${SECURE_TMP}/build_master.sh"
|
bash "${SECURE_TMP}/build_master.sh"
|
||||||
|
|||||||
Reference in New Issue
Block a user