mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-02 21:33:56 +08:00
🍕 Sync 2026-10-13 13:11:55
This commit is contained in:
1 parent
de5c7f129c
commit
315fd3c2ee
38 files changed
+1245
-1717
No files matched your search
@@ -1,208 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Open-Box 命令行管理工具
|
||||
INSTALL_ROOT="/opt/open-box"
|
||||
OPENBOX_PORT_FILE="$INSTALL_ROOT/data/panel-port"
|
||||
OPENBOX_PORT_FALLBACK=2026
|
||||
OPENBOX_PORT_DEFAULT=3036
|
||||
OPENBOX_RESERVED_PORTS="9095 7853 7854 7891 53 22 80 443"
|
||||
|
||||
if [ -f "$INSTALL_ROOT/openwrt/bin/open-box" ] && [ "$0" != "$INSTALL_ROOT/openwrt/bin/open-box" ] && [ ! -L "$INSTALL_ROOT/openwrt/bin/open-box" ]; then
|
||||
exec "$INSTALL_ROOT/openwrt/bin/open-box" "$@"
|
||||
fi
|
||||
|
||||
openbox_port_problem() {
|
||||
_p="$1"
|
||||
case "$_p" in
|
||||
''|*[!0-9]*) echo "端口要填 1024-65535 的数字"; return 0 ;;
|
||||
esac
|
||||
if [ "$_p" -lt 1024 ] || [ "$_p" -gt 65535 ]; then
|
||||
echo "端口要在 1024-65535 之间(1024 以下是系统保留端口)"
|
||||
return 0
|
||||
fi
|
||||
for _r in $OPENBOX_RESERVED_PORTS; do
|
||||
if [ "$_p" = "$_r" ]; then
|
||||
echo "$_p 是 Open-Box 自己或系统服务在用的端口(内核 API / DNS / SSH / HTTP 等),换一个"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
_busy=""
|
||||
if command -v ss >/dev/null 2>&1; then
|
||||
_busy=$(ss -ltn 2>/dev/null | awk 'NR>1 {print $4}' | sed 's/.*[:.]//' | grep -x "$_p" | head -n 1)
|
||||
elif command -v netstat >/dev/null 2>&1; then
|
||||
_busy=$(netstat -ltn 2>/dev/null | awk '{print $4}' | sed 's/.*[:.]//' | grep -x "$_p" | head -n 1)
|
||||
fi
|
||||
if [ -n "$_busy" ]; then
|
||||
echo "$_p 已经被别的程序占用(已在监听)"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
openbox_current_port() {
|
||||
_cp=$(cat "$OPENBOX_PORT_FILE" 2>/dev/null | tr -dc '0-9')
|
||||
[ -n "$_cp" ] || _cp="$OPENBOX_PORT_DEFAULT"
|
||||
printf '%s\n' "$_cp"
|
||||
}
|
||||
|
||||
openbox_get_lan_ip() {
|
||||
LAN_IP=""
|
||||
command -v uci >/dev/null 2>&1 && LAN_IP=$(uci -q get network.lan.ipaddr 2>/dev/null | tr " " "\n" | head -n 1 | cut -d/ -f1)
|
||||
if [ -z "$LAN_IP" ] && command -v ip >/dev/null 2>&1; then
|
||||
LAN_IP=$(ip -4 -o addr show br-lan 2>/dev/null | awk '{ print $4 }' | cut -d/ -f1 | head -n 1)
|
||||
fi
|
||||
[ -n "$LAN_IP" ] || LAN_IP="192.168.1.1"
|
||||
printf '%s\n' "$LAN_IP"
|
||||
}
|
||||
|
||||
openbox_get_password() {
|
||||
if [ -f "$INSTALL_ROOT/data/openbox.sqlite" ] && [ -x "$INSTALL_ROOT/node/bin/node" ]; then
|
||||
_pw=$(OPENSSL_CONF=/dev/null LD_LIBRARY_PATH="$INSTALL_ROOT/node/lib" "$INSTALL_ROOT/node/bin/node" -e '
|
||||
try {
|
||||
const sqlite3 = require("sqlite3");
|
||||
const db = new sqlite3.Database("'$INSTALL_ROOT'/data/openbox.sqlite", sqlite3.OPEN_READONLY, (err) => {
|
||||
if (err) process.exit(1);
|
||||
db.get("SELECT value FROM settings WHERE key = ?", ["password"], (e, row) => {
|
||||
if (row && row.value) console.log(row.value);
|
||||
db.close();
|
||||
});
|
||||
});
|
||||
} catch (_) {}
|
||||
' 2>/dev/null)
|
||||
if [ -n "$_pw" ]; then
|
||||
printf '%s\n' "$_pw"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
if [ -f "$INSTALL_ROOT/data/password" ]; then
|
||||
cat "$INSTALL_ROOT/data/password" 2>/dev/null
|
||||
return 0
|
||||
fi
|
||||
echo "尚未设置(首次打开面板设置管理密码)"
|
||||
}
|
||||
|
||||
openbox_get_version() {
|
||||
_ver=$(sed -n 's/.*"version" *: *"\([^"]*\)".*/\1/p' "$INSTALL_ROOT/meta.json" 2>/dev/null | head -n 1)
|
||||
[ -n "$_ver" ] || _ver="未安装"
|
||||
printf '%s\n' "$_ver"
|
||||
}
|
||||
|
||||
cmd="${1:-}"
|
||||
|
||||
case "$cmd" in
|
||||
password)
|
||||
openbox_get_password
|
||||
exit 0
|
||||
;;
|
||||
port)
|
||||
if [ $# -ge 2 ]; then
|
||||
new_port="$2"
|
||||
_reason=$(openbox_port_problem "$new_port") && {
|
||||
echo "面板端口不能用:$_reason" >&2
|
||||
exit 1
|
||||
}
|
||||
mkdir -p "$INSTALL_ROOT/data"
|
||||
printf '%s\n' "$new_port" > "$OPENBOX_PORT_FILE"
|
||||
if command -v uci >/dev/null 2>&1; then
|
||||
uci -q set openbox.main.port="$new_port"
|
||||
uci -q set firewall.openbox_panel.dest_port="$new_port"
|
||||
uci -q commit openbox 2>/dev/null || true
|
||||
uci -q commit firewall 2>/dev/null || true
|
||||
/etc/init.d/firewall reload >/dev/null 2>&1 || true
|
||||
fi
|
||||
echo "面板端口已修改为: $new_port"
|
||||
/etc/init.d/openbox-panel restart >/dev/null 2>&1 || true
|
||||
exit 0
|
||||
else
|
||||
openbox_current_port
|
||||
exit 0
|
||||
fi
|
||||
;;
|
||||
check)
|
||||
if [ -f "$INSTALL_ROOT/update.sh" ]; then
|
||||
sh "$INSTALL_ROOT/update.sh" --probe direct
|
||||
elif [ -f /usr/share/openbox/update.sh ]; then
|
||||
sh /usr/share/openbox/update.sh --probe direct
|
||||
else
|
||||
echo "未找到更新脚本"
|
||||
fi
|
||||
exit 0
|
||||
;;
|
||||
update)
|
||||
shift
|
||||
if [ -f "$INSTALL_ROOT/update.sh" ]; then
|
||||
sh "$INSTALL_ROOT/update.sh" "$@"
|
||||
elif [ -f /usr/share/openbox/update.sh ]; then
|
||||
sh /usr/share/openbox/update.sh "$@"
|
||||
else
|
||||
echo "未找到更新脚本" >&2
|
||||
exit 1
|
||||
fi
|
||||
exit 0
|
||||
;;
|
||||
restart)
|
||||
/etc/init.d/openbox restart
|
||||
/etc/init.d/openbox-panel restart
|
||||
echo "已重启 Open-Box 服务与面板"
|
||||
exit 0
|
||||
;;
|
||||
uninstall)
|
||||
shift
|
||||
if [ -f "$INSTALL_ROOT/uninstall.sh" ]; then
|
||||
sh "$INSTALL_ROOT/uninstall.sh" "$@"
|
||||
elif [ -f /usr/share/openbox/uninstall.sh ]; then
|
||||
sh /usr/share/openbox/uninstall.sh "$@"
|
||||
else
|
||||
/etc/init.d/openbox stop
|
||||
/etc/init.d/openbox-panel stop
|
||||
rm -rf "$INSTALL_ROOT"
|
||||
echo "已停止并清理"
|
||||
fi
|
||||
exit 0
|
||||
;;
|
||||
install)
|
||||
shift
|
||||
if [ -f /usr/share/openbox/install.sh ]; then
|
||||
sh /usr/share/openbox/install.sh "$@"
|
||||
else
|
||||
curl -fsSL https://raw.githubusercontent.com/liandu2024/Open-Box/main/scripts/install.sh | sh -s -- "$@"
|
||||
fi
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
VERSION=$(openbox_get_version)
|
||||
echo ""
|
||||
echo "Open-Box $VERSION"
|
||||
echo " 1) 当前密码"
|
||||
echo " 2) 重新启动"
|
||||
echo " 3) 检查升级"
|
||||
echo " 4) 卸载"
|
||||
echo " 5) 退出"
|
||||
printf '请选择 [1-5]: '
|
||||
read -r choice
|
||||
case "$choice" in
|
||||
1)
|
||||
port=$(openbox_current_port)
|
||||
lan_ip=$(openbox_get_lan_ip)
|
||||
pw=$(openbox_get_password)
|
||||
echo ""
|
||||
echo " 面板地址: http://$lan_ip:$port"
|
||||
echo " 当前密码: $pw"
|
||||
echo ""
|
||||
;;
|
||||
2)
|
||||
/etc/init.d/openbox restart
|
||||
/etc/init.d/openbox-panel restart
|
||||
echo "服务已重启。"
|
||||
;;
|
||||
3)
|
||||
sh "$0" update
|
||||
;;
|
||||
4)
|
||||
sh "$0" uninstall
|
||||
;;
|
||||
5|*)
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
Reference in new issue
Block a user