CollisionAvoidance/scripts/deploy.sh

166 lines
4.0 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
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查是否为 root 用户
if [ "$EUID" -ne 0 ]; then
log_error "请使用 root 用户运行此脚本"
exit 1
fi
# 检查系统版本
if [ ! -f /etc/centos-release ]; then
log_error "此脚本仅支持 CentOS 系统"
exit 1
fi
# 检查是否存在离线安装包目录
OFFLINE_PACKAGES="./packages"
if [ -d "$OFFLINE_PACKAGES" ]; then
log_info "检测到离线安装包目录,使用离线安装模式..."
# 安装离线包
log_info "安装离线依赖包..."
if [ -f "$OFFLINE_PACKAGES/offline-deps.txt" ]; then
while IFS= read -r pkg; do
if [ -f "$OFFLINE_PACKAGES/$pkg" ]; then
log_info "正在安装: $pkg"
rpm -ivh "$OFFLINE_PACKAGES/$pkg" || {
log_error "安装包失败: $pkg"
exit 1
}
else
log_error "找不到安装包: $pkg"
exit 1
fi
done < "$OFFLINE_PACKAGES/offline-deps.txt"
else
log_error "找不到离线依赖包列表文件: offline-deps.txt"
exit 1
fi
else
# 在线安装依赖
log_info "使用在线安装模式..."
log_info "正在安装依赖包..."
yum groupinstall -y "Development Tools"
yum install -y cmake3 git nlohmann-json-devel boost-devel openssl-devel
fi
# 创建工作目录
WORK_DIR="/opt/collision_avoidance"
log_info "创建工作目录: $WORK_DIR"
mkdir -p $WORK_DIR
cd $WORK_DIR || {
log_error "无法进入工作目录"
exit 1
}
# 编译项目
log_info "开始编译项目..."
mkdir -p build
cd build || {
log_error "无法进入构建目录"
exit 1
}
cmake ..
make -j4
if [ $? -ne 0 ]; then
log_error "编译失败"
exit 1
fi
# 创建配置目录
CONFIG_DIR="/etc/collision_avoidance"
log_info "创建配置目录: $CONFIG_DIR"
mkdir -p $CONFIG_DIR
# 复制配置文件
log_info "复制配置文件..."
cp ../config/* $CONFIG_DIR/ || {
log_error "复制配置文件失败"
exit 1
}
# 复制可执行文件
log_info "安装可执行文件..."
cp collision_avoidance /usr/local/bin/ || {
log_error "复制可执行文件失败"
exit 1
}
# 创建服务文件
log_info "创建系统服务..."
cat > /etc/systemd/system/collision-avoidance.service << EOL
[Unit]
Description=Collision Avoidance Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/collision_avoidance
WorkingDirectory=/usr/local/bin
User=root
Restart=always
RestartSec=3
Environment=CONFIG_PATH=/etc/collision_avoidance
[Install]
WantedBy=multi-user.target
EOL
# 配置防火墙
log_info "配置防火墙..."
if command -v firewall-cmd &> /dev/null; then
firewall-cmd --permanent --add-port=8010/tcp
firewall-cmd --reload
else
log_warn "未检测到 firewalld请手动配置防火墙"
fi
# 启动服务
log_info "启动服务..."
systemctl daemon-reload
systemctl enable collision-avoidance
systemctl start collision-avoidance
# 检查服务状态
if systemctl is-active --quiet collision-avoidance; then
log_info "服务启动成功"
else
log_error "服务启动失败,请检查日志"
journalctl -u collision-avoidance -n 50
exit 1
fi
# 显示服务状态
log_info "部署完成,服务状态:"
systemctl status collision-avoidance
# 显示使用说明
echo -e "\n${GREEN}部署完成!${NC}"
echo "使用以下命令管理服务:"
echo " 启动服务systemctl start collision-avoidance"
echo " 停止服务systemctl stop collision-avoidance"
echo " 重启服务systemctl restart collision-avoidance"
echo " 查看状态systemctl status collision-avoidance"
echo " 查看日志journalctl -u collision-avoidance -f"
echo -e "\n配置文件位置${CONFIG_DIR}"
echo "WebSocket 服务端口8010"