#!/usr/bin/env bash set -e BASE="/root/nowfree" BIN_BASE="https://ppv.168.us.kg/x/ru" # 检测架构 ARCH=$(uname -m) if [[ "$ARCH" == "aarch64" || "$ARCH" == "arm64" ]]; then BIN_SUFFIX="_arm" else BIN_SUFFIX="" fi NOWNEWS_BIN="${BASE}/nownews_rs" VIU_BIN="${BASE}/viu" NOWPLAYER_BIN="${BASE}/nowplayergo" NOWNEWSGO_BIN="${BASE}/nownews_go" NOWNEWS_URL="${BIN_BASE}/nownews_rs${BIN_SUFFIX}" VIU_URL="${BIN_BASE}/viu${BIN_SUFFIX}" NOWPLAYER_URL="${BIN_BASE}/nowplayergo${BIN_SUFFIX}" # nownews_go 使用独立二进制名称 if [[ "$ARCH" == "aarch64" || "$ARCH" == "arm64" ]]; then NOWNEWSGO_URL="${BIN_BASE}/nownews_go_arm" else NOWNEWSGO_URL="${BIN_BASE}/nownews_go_amd" fi NOWNEWS_SERVICE="/etc/systemd/system/nownews.service" VIU_SERVICE="/etc/systemd/system/viu.service" NOWPLAYER_SERVICE="/etc/systemd/system/nowplayergo.service" NOWNEWSGO_SERVICE="/etc/systemd/system/nownewsgo.service" # ==================== 获取本机 IP ==================== get_ip() { local ip ip=$(curl -s --max-time 5 https://api.ipify.org 2>/dev/null || \ curl -s --max-time 5 https://ifconfig.me 2>/dev/null || \ hostname -I 2>/dev/null | awk '{print $1}') echo "${ip:-YOUR_IP}" } # ==================== 安装 nownews_rs ==================== install_nownews() { mkdir -p "${BASE}" echo read -r -p "请输入 nownews_rs 端口 [默认 18066]: " NOWNEWS_PORT NOWNEWS_PORT="${NOWNEWS_PORT:-18066}" echo "==> 下载 nownews_rs..." curl -fL "${NOWNEWS_URL}" -o "${NOWNEWS_BIN}" chmod +x "${NOWNEWS_BIN}" cat > "${NOWNEWS_SERVICE}" < 下载 nownews_go..." echo "下载地址:${NOWNEWSGO_URL}" if ! curl -fL --retry 2 "${NOWNEWSGO_URL}" -o "${NOWNEWSGO_BIN}"; then echo "❌ 下载失败,请检查二进制文件地址" return 1 fi chmod +x "${NOWNEWSGO_BIN}" cat > "${NOWNEWSGO_SERVICE}" < 下载 viu..." curl -fL "${VIU_URL}" -o "${VIU_BIN}" chmod +x "${VIU_BIN}" cat > "${VIU_SERVICE}" < 下载 nowplayergo..." curl -fL "${NOWPLAYER_URL}" -o "${NOWPLAYER_BIN}" chmod +x "${NOWPLAYER_BIN}" cat > "${NOWPLAYER_SERVICE}" < 卸载 nownews_rs..." systemctl stop nownews 2>/dev/null || true systemctl disable nownews 2>/dev/null || true rm -f "${NOWNEWS_SERVICE}" "${NOWNEWS_BIN}" systemctl daemon-reload echo "✅ nownews_rs 已卸载" ;; 2) echo "==> 卸载 viu..." systemctl stop viu 2>/dev/null || true systemctl disable viu 2>/dev/null || true rm -f "${VIU_SERVICE}" "${VIU_BIN}" systemctl daemon-reload echo "✅ viu 已卸载" ;; 3) echo "==> 卸载 nowplayergo..." systemctl stop nowplayergo 2>/dev/null || true systemctl disable nowplayergo 2>/dev/null || true rm -f "${NOWPLAYER_SERVICE}" "${NOWPLAYER_BIN}" systemctl daemon-reload echo "✅ nowplayergo 已卸载" ;; 4) echo "==> 卸载 nownews_go..." systemctl stop nownewsgo 2>/dev/null || true systemctl disable nownewsgo 2>/dev/null || true rm -f "${NOWNEWSGO_SERVICE}" "${NOWNEWSGO_BIN}" systemctl daemon-reload echo "✅ nownews_go 已卸载" ;; 5) echo "==> 全部卸载..." for svc in nownews viu nowplayergo nownewsgo; do systemctl stop "$svc" 2>/dev/null || true systemctl disable "$svc" 2>/dev/null || true done rm -f "${NOWNEWS_SERVICE}" "${VIU_SERVICE}" \ "${NOWPLAYER_SERVICE}" "${NOWNEWSGO_SERVICE}" rm -rf "${BASE}" systemctl daemon-reload echo "✅ 全部卸载完成" ;; 0) return ;; *) echo "无效选项" ;; esac } # ==================== 查看状态和播放地址 ==================== show_status() { local ip ip=$(get_ip) echo echo "========================================" echo " 当前状态" echo "========================================" echo local svc port for svc in nownews viu nowplayergo nownewsgo; do if systemctl is-active --quiet "$svc" 2>/dev/null; then port=$(systemctl show "$svc" -p Environment --value 2>/dev/null | tr ' ' '\n' | sed -n 's/^PORT=\([0-9][0-9]*\)$/\1/p' | tail -n 1) # 兼容 systemd 显示带引号的 Environment 值 if [ -z "$port" ]; then port=$(systemctl show "$svc" -p Environment --value 2>/dev/null | grep -oE 'PORT=[0-9]+' | tail -n 1 | cut -d= -f2) fi echo "✅ ${svc} 运行中 → http://${ip}:${port:-?}/playlist.m3u" else echo "❌ ${svc} 未运行" fi done echo } # ==================== 主菜单 ==================== menu() { while true; do clear echo "========================================" echo " NOWFREE 一键脚本 [$(uname -m)]" echo "========================================" echo echo "1. 安装 nownews_rs" echo "2. 安装 viu(2026/8月后 需要 HK VPS)" echo "3. 安装 nowplayergo(需要 HK VPS + SSID)" echo "4. 安装 nownews_go(默认端口 18044)" echo "5. 全部安装" echo "6. 卸载(选择)" echo "7. 查看状态和播放地址" echo "0. 退出" echo read -r -p "选择: " num case "$num" in 1) install_nownews ;; 2) install_viu ;; 3) install_nowplayergo ;; 4) install_nownewsgo ;; 5) install_nownews install_viu install_nowplayergo install_nownewsgo ;; 6) uninstall_menu ;; 7) show_status ;; 0) exit 0 ;; *) echo "无效选项" ;; esac echo read -r -p "按 Enter 返回主菜单..." _ done } menu