mirror of
https://github.com/Dichgrem/singbox-example.git
synced 2025-07-31 00:59:32 -04:00
update:check_update
This commit is contained in:
82
singbox.sh
82
singbox.sh
@ -21,6 +21,45 @@ CONFIG_DIR=/etc/singbox
|
|||||||
STATE_FILE="$CONFIG_DIR/state.env"
|
STATE_FILE="$CONFIG_DIR/state.env"
|
||||||
BIN_NAME=sing-box
|
BIN_NAME=sing-box
|
||||||
|
|
||||||
|
# 检查本地与远程版本,并提示
|
||||||
|
check_update() {
|
||||||
|
if command -v curl &>/dev/null && command -v grep &>/dev/null; then
|
||||||
|
LOCAL_VER=$($BIN_NAME version 2>/dev/null | head -n1 | awk '{print $NF}') || LOCAL_VER="未安装"
|
||||||
|
LATEST_VER=$(curl -s https://api.github.com/repos/SagerNet/sing-box/releases/latest |
|
||||||
|
grep '"tag_name"' | head -n1 | cut -d '"' -f4 | sed 's/^v//') || LATEST_VER="未知"
|
||||||
|
if [[ "$LOCAL_VER" != "$LATEST_VER" ]]; then
|
||||||
|
printf "${YELLOW}检测到新版本:${LATEST_VER},当前版本:${LOCAL_VER}。请选择 6) 升级 Sing-box 二进制。${NC}\n"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 升级/安装 Sing-box 二进制
|
||||||
|
update_singbox() {
|
||||||
|
printf "${CYAN}===== 升级/安装 Sing-box 二进制 =====${NC}\n"
|
||||||
|
if command -v apt-get &>/dev/null; then
|
||||||
|
printf "${BLUE}使用官方 deb 安装脚本升级...${NC}\n"
|
||||||
|
bash <(curl -fsSL https://sing-box.app/deb-install.sh)
|
||||||
|
elif command -v dnf &>/dev/null || command -v yum &>/dev/null; then
|
||||||
|
printf "${BLUE}使用官方 rpm 安装脚本升级...${NC}\n"
|
||||||
|
bash <(curl -fsSL https://sing-box.app/rpm-install.sh)
|
||||||
|
elif command -v pacman &>/dev/null; then
|
||||||
|
printf "${BLUE}使用官方 arch 安装脚本升级...${NC}\n"
|
||||||
|
bash <(curl -fsSL https://sing-box.app/arch-install.sh)
|
||||||
|
else
|
||||||
|
printf "${RED}无法识别发行版,请手动升级 Sing-box 二进制${NC}\n" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
hash -r
|
||||||
|
NEW_VER=$($BIN_NAME version | head -n1 | awk '{print $NF}')
|
||||||
|
printf "${GREEN}Sing-box 已升级到版本:%s${NC}\n" "$NEW_VER"
|
||||||
|
printf "${CYAN}重启服务...${NC}\n"
|
||||||
|
if systemctl restart sing-box.service; then
|
||||||
|
printf "${GREEN}服务已重启。${NC}\n"
|
||||||
|
else
|
||||||
|
printf "${YELLOW}服务重启失败,请手动检查。${NC}\n"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# 安装 Sing-box 并生成配置
|
# 安装 Sing-box 并生成配置
|
||||||
install_singbox() {
|
install_singbox() {
|
||||||
printf "${CYAN}===== 安装 Sing-box 并生成配置 =====${NC}\n"
|
printf "${CYAN}===== 安装 Sing-box 并生成配置 =====${NC}\n"
|
||||||
@ -34,22 +73,7 @@ install_singbox() {
|
|||||||
read -r SNI
|
read -r SNI
|
||||||
SNI=${SNI:-s0.awsstatic.com}
|
SNI=${SNI:-s0.awsstatic.com}
|
||||||
|
|
||||||
# 安装
|
update_singbox
|
||||||
if command -v apt-get &>/dev/null; then
|
|
||||||
printf "${BLUE}检测到 Debian/Ubuntu,使用官方 deb 安装脚本...${NC}\n"
|
|
||||||
bash <(curl -fsSL https://sing-box.app/deb-install.sh)
|
|
||||||
elif command -v dnf &>/dev/null || command -v yum &>/dev/null; then
|
|
||||||
printf "${BLUE}检测到 RHEL/CentOS,使用官方 rpm 安装脚本...${NC}\n"
|
|
||||||
bash <(curl -fsSL https://sing-box.app/rpm-install.sh)
|
|
||||||
elif command -v pacman &>/dev/null; then
|
|
||||||
printf "${BLUE}检测到 Arch Linux,使用官方 arch 安装脚本...${NC}\n"
|
|
||||||
bash <(curl -fsSL https://sing-box.app/arch-install.sh)
|
|
||||||
else
|
|
||||||
printf "${RED}无法识别发行版,请手动安装 Sing-box 内核${NC}\n" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 确认安装路径
|
|
||||||
hash -r
|
hash -r
|
||||||
BIN_PATH=$(command -v $BIN_NAME || true)
|
BIN_PATH=$(command -v $BIN_NAME || true)
|
||||||
[[ -z "$BIN_PATH" ]] && {
|
[[ -z "$BIN_PATH" ]] && {
|
||||||
@ -57,20 +81,18 @@ install_singbox() {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
VERSION=$($BIN_PATH version | head -n1 | awk '{print $NF}')
|
VERSION=$($BIN_PATH version | head -n1 | awk '{print $NF}')
|
||||||
printf "${GREEN}已安装 $BIN_NAME 版本:%s${NC}\n" "$VERSION"
|
printf "${GREEN}已安装/更新 $BIN_NAME 版本:%s${NC}\n" "$VERSION"
|
||||||
|
|
||||||
# 生成参数
|
|
||||||
UUID=$($BIN_PATH generate uuid)
|
UUID=$($BIN_PATH generate uuid)
|
||||||
KEY_OUTPUT=$($BIN_PATH generate reality-keypair)
|
KEY_OUTPUT=$($BIN_PATH generate reality-keypair)
|
||||||
PRIVATE_KEY=$(echo "$KEY_OUTPUT" | awk -F': ' '/PrivateKey/ {print $2}')
|
PRIVATE_KEY=$(echo "$KEY_OUTPUT" | awk -F': ' '/PrivateKey/ {print \$2}')
|
||||||
PUB_KEY=$(echo "$KEY_OUTPUT" | awk -F': ' '/PublicKey/ {print $2}')
|
PUB_KEY=$(echo "$KEY_OUTPUT" | awk -F': ' '/PublicKey/ {print \$2}')
|
||||||
SHORT_ID=$(openssl rand -hex 8)
|
SHORT_ID=$(openssl rand -hex 8)
|
||||||
FP="chrome"
|
FP="chrome"
|
||||||
SERVER_IP=$(curl -s https://ifconfig.me)
|
SERVER_IP=$(curl -s https://ifconfig.me)
|
||||||
PORT=443
|
PORT=443
|
||||||
SPX="/"
|
SPX="/"
|
||||||
|
|
||||||
# 写入配置和状态
|
|
||||||
mkdir -p "$CONFIG_DIR"
|
mkdir -p "$CONFIG_DIR"
|
||||||
cat >"$CONFIG_DIR/config.json" <<EOF
|
cat >"$CONFIG_DIR/config.json" <<EOF
|
||||||
{
|
{
|
||||||
@ -106,11 +128,7 @@ PORT="$PORT"
|
|||||||
SPX="$SPX"
|
SPX="$SPX"
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# 启用并启动官方 systemd 单元
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl enable sing-box.service
|
systemctl enable sing-box.service
|
||||||
systemctl restart sing-box.service
|
|
||||||
|
|
||||||
printf "${GREEN}安装并启动完成。${NC}\n"
|
printf "${GREEN}安装并启动完成。${NC}\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,6 +175,7 @@ reinstall_singbox() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# 菜单主循环
|
# 菜单主循环
|
||||||
|
check_update
|
||||||
while true; do
|
while true; do
|
||||||
printf "${BOLD}${BLUE}请选择操作:${NC}\n"
|
printf "${BOLD}${BLUE}请选择操作:${NC}\n"
|
||||||
printf " ${YELLOW}1)${NC} 安装 Sing-box 并生成配置\n"
|
printf " ${YELLOW}1)${NC} 安装 Sing-box 并生成配置\n"
|
||||||
@ -164,11 +183,18 @@ while true; do
|
|||||||
printf " ${YELLOW}3)${NC} 显示 VLESS Reality 链接\n"
|
printf " ${YELLOW}3)${NC} 显示 VLESS Reality 链接\n"
|
||||||
printf " ${YELLOW}4)${NC} 卸载 Sing-box\n"
|
printf " ${YELLOW}4)${NC} 卸载 Sing-box\n"
|
||||||
printf " ${YELLOW}5)${NC} 重新安装 Sing-box\n"
|
printf " ${YELLOW}5)${NC} 重新安装 Sing-box\n"
|
||||||
printf " ${YELLOW}6)${NC} 退出\n"
|
printf " ${YELLOW}6)${NC} 升级 Sing-box 二进制\n"
|
||||||
printf "${BOLD}输入数字 [1-6]: ${NC}"
|
printf " ${YELLOW}7)${NC} 退出\n"
|
||||||
|
printf "${BOLD}输入数字 [1-7]: ${NC}"
|
||||||
read -r choice
|
read -r choice
|
||||||
case "$choice" in
|
case "$choice" in
|
||||||
1) install_singbox ;; 2) status_singbox ;; 3) show_link ;; 4) uninstall_singbox ;; 5) reinstall_singbox ;; 6)
|
1) install_singbox ;;
|
||||||
|
2) status_singbox ;;
|
||||||
|
3) show_link ;;
|
||||||
|
4) uninstall_singbox ;;
|
||||||
|
5) reinstall_singbox ;;
|
||||||
|
6) update_singbox ;;
|
||||||
|
7)
|
||||||
printf "${GREEN}退出。${NC}\n"
|
printf "${GREEN}退出。${NC}\n"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
|
Reference in New Issue
Block a user