safesight-edge/scripts/systemd/install-systemd.sh

272 lines
11 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# RK3588 Media Server & Agent Systemd 服务安装脚本
# 适用于 Orange Pi 5 Plus (RK3588)
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 默认路径
MEDIA_SERVER_BIN="${MEDIA_SERVER_BIN:-$(pwd)/build/media-server}"
AGENT_BIN="${AGENT_BIN:-$(pwd)/agent/rk3588-agent_linux_arm64}"
MEDIA_SERVER_CONFIG="${MEDIA_SERVER_CONFIG:-$(pwd)/configs/sample_cam1.json}"
AGENT_CONFIG="${AGENT_CONFIG:-$(pwd)/agent/agent_cam1.config.json}"
INSTALL_DIR="/opt"
SERVICE_DIR="/etc/systemd/system"
echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ RK3588 Media Server & Agent Systemd 安装 ║${NC}"
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
echo ""
# 检查 root 权限
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}错误: 请使用 sudo 运行此脚本${NC}"
exit 1
fi
# 检查 systemd
if ! command -v systemctl &> /dev/null; then
echo -e "${RED}错误: 未找到 systemctl此系统可能不支持 systemd${NC}"
exit 1
fi
# 函数:安装 media-server
install_media_server() {
echo -e "${YELLOW}[1/6] 安装 Media Server...${NC}"
# 检查二进制文件
if [ ! -f "$MEDIA_SERVER_BIN" ]; then
echo -e "${RED}错误: 未找到 media-server 二进制文件: $MEDIA_SERVER_BIN${NC}"
echo "请确认已编译,或设置 MEDIA_SERVER_BIN 环境变量"
return 1
fi
# 创建目录
mkdir -p "$INSTALL_DIR/rk3588-media-server"/{bin,lib,etc,logs}
# 复制二进制文件
cp "$MEDIA_SERVER_BIN" "$INSTALL_DIR/rk3588-media-server/bin/"
chmod +x "$INSTALL_DIR/rk3588-media-server/bin/media-server"
# 复制依赖库(如果有)
if [ -d "$(dirname $MEDIA_SERVER_BIN)/../lib" ]; then
cp -r "$(dirname $MEDIA_SERVER_BIN)/../lib"/* "$INSTALL_DIR/rk3588-media-server/lib/" 2>/dev/null || true
fi
# 复制或创建配置文件
if [ -f "$MEDIA_SERVER_CONFIG" ]; then
cp "$MEDIA_SERVER_CONFIG" "$INSTALL_DIR/rk3588-media-server/etc/media-server.json"
echo -e "${GREEN}${NC} 配置文件: $INSTALL_DIR/rk3588-media-server/etc/media-server.json"
else
echo -e "${YELLOW}⚠ 未找到配置文件,请手动创建: $INSTALL_DIR/rk3588-media-server/etc/media-server.json${NC}"
fi
# 安装服务文件
cp "$(dirname $0)/media-server.service" "$SERVICE_DIR/"
echo -e "${GREEN}${NC} Media Server 安装完成"
}
# 函数:安装 agent
install_agent() {
echo -e "${YELLOW}[2/6] 安装 RK3588 Agent...${NC}"
# 检查二进制文件
if [ ! -f "$AGENT_BIN" ]; then
# 尝试其他可能的名称
if [ -f "$(dirname $AGENT_BIN)/rk3588-agent" ]; then
AGENT_BIN="$(dirname $AGENT_BIN)/rk3588-agent"
else
echo -e "${YELLOW}⚠ 未找到 Agent 二进制文件,跳过 Agent 安装${NC}"
return 0
fi
fi
# 创建目录
mkdir -p "$INSTALL_DIR/rk3588-agent"/{logs,models}
# 复制二进制文件
cp "$AGENT_BIN" "$INSTALL_DIR/rk3588-agent/rk3588-agent"
chmod +x "$INSTALL_DIR/rk3588-agent/rk3588-agent"
# 复制或创建配置文件
if [ -f "$AGENT_CONFIG" ]; then
cp "$AGENT_CONFIG" "$INSTALL_DIR/rk3588-agent/agent.config.json"
echo -e "${GREEN}${NC} 配置文件: $INSTALL_DIR/rk3588-agent/agent.config.json"
else
echo -e "${YELLOW}⚠ 未找到 Agent 配置文件,请手动创建${NC}"
fi
# 安装服务文件
cp "$(dirname $0)/rk3588-agent.service" "$SERVICE_DIR/"
echo -e "${GREEN}${NC} RK3588 Agent 安装完成"
}
# 函数:重载 systemd
reload_systemd() {
echo -e "${YELLOW}[3/6] 重载 systemd...${NC}"
systemctl daemon-reload
echo -e "${GREEN}${NC} systemd 已重载"
}
# 函数:启动服务
start_services() {
echo -e "${YELLOW}[4/6] 启动服务...${NC}"
# 启动 media-server
if [ -f "$SERVICE_DIR/media-server.service" ]; then
echo " 启动 media-server..."
systemctl enable media-server
systemctl start media-server
sleep 2
if systemctl is-active --quiet media-server; then
echo -e "${GREEN}${NC} media-server 运行中"
else
echo -e "${RED}${NC} media-server 启动失败,请检查日志"
fi
fi
# 启动 agent
if [ -f "$SERVICE_DIR/rk3588-agent.service" ] && [ -f "$INSTALL_DIR/rk3588-agent/rk3588-agent" ]; then
echo " 启动 rk3588-agent..."
systemctl enable rk3588-agent
systemctl start rk3588-agent
sleep 1
if systemctl is-active --quiet rk3588-agent; then
echo -e "${GREEN}${NC} rk3588-agent 运行中"
else
echo -e "${RED}${NC} rk3588-agent 启动失败,请检查日志"
fi
fi
}
# 函数:显示状态
show_status() {
echo -e "${YELLOW}[5/6] 服务状态...${NC}"
echo ""
if [ -f "$SERVICE_DIR/media-server.service" ]; then
echo -e "${BLUE}Media Server:${NC}"
systemctl status media-server --no-pager | head -5
echo ""
fi
if [ -f "$SERVICE_DIR/rk3588-agent.service" ]; then
echo -e "${BLUE}RK3588 Agent:${NC}"
systemctl status rk3588-agent --no-pager | head -5
echo ""
fi
}
# 函数:显示使用说明
show_usage() {
echo -e "${YELLOW}[6/6] 使用说明${NC}"
echo ""
echo "┌─────────────────────────────────────────────────────────────┐"
echo "│ 管理命令 │"
echo "├─────────────────────────────────────────────────────────────┤"
echo "│ 查看状态 │"
echo "│ systemctl status media-server │"
echo "│ systemctl status rk3588-agent │"
echo "│ │"
echo "│ 启动/停止/重启 │"
echo "│ systemctl start media-server │"
echo "│ systemctl stop media-server │"
echo "│ systemctl restart media-server │"
echo "│ │"
echo "│ 开机自启 │"
echo "│ systemctl enable media-server # 启用 │"
echo "│ systemctl disable media-server # 禁用 │"
echo "│ │"
echo "│ 查看日志 │"
echo "│ journalctl -u media-server -f # 实时跟踪 │"
echo "│ journalctl -u media-server -n 100 # 最近100行 │"
echo "│ journalctl -u rk3588-agent -f │"
echo "│ │"
echo "│ 文件位置 │"
echo "│ 安装目录: /opt/rk3588-media-server/ │"
echo "│ 配置文件: /opt/rk3588-media-server/etc/media-server.json │"
echo "│ Agent目录: /opt/rk3588-agent/ │"
echo "│ Agent配置: /opt/rk3588-agent/agent.config.json │"
echo "└─────────────────────────────────────────────────────────────┘"
}
# 主流程
main() {
# 如果传入了参数,解析环境变量
while [[ $# -gt 0 ]]; do
case $1 in
--media-bin)
MEDIA_SERVER_BIN="$2"
shift 2
;;
--agent-bin)
AGENT_BIN="$2"
shift 2
;;
--media-config)
MEDIA_SERVER_CONFIG="$2"
shift 2
;;
--agent-config)
AGENT_CONFIG="$2"
shift 2
;;
--help|-h)
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " --media-bin <路径> Media Server 二进制文件路径"
echo " --agent-bin <路径> Agent 二进制文件路径"
echo " --media-config <路径> Media Server 配置文件路径"
echo " --agent-config <路径> Agent 配置文件路径"
echo ""
echo "环境变量:"
echo " MEDIA_SERVER_BIN Media Server 二进制文件路径"
echo " AGENT_BIN Agent 二进制文件路径"
echo " MEDIA_SERVER_CONFIG Media Server 配置文件路径"
echo " AGENT_CONFIG Agent 配置文件路径"
exit 0
;;
*)
echo "未知选项: $1"
exit 1
;;
esac
done
echo "安装路径: $INSTALL_DIR"
echo "Media Server: $MEDIA_SERVER_BIN"
echo "Agent: $AGENT_BIN"
echo ""
read -p "确认安装? (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "安装已取消"
exit 0
fi
install_media_server
install_agent
reload_systemd
start_services
show_status
show_usage
echo ""
echo -e "${GREEN}╔════════════════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ 安装完成! ║${NC}"
echo -e "${GREEN}╚════════════════════════════════════════════════════════════╝${NC}"
}
main "$@"