272 lines
11 KiB
Bash
272 lines
11 KiB
Bash
#!/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 "$@"
|