diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 678a80e..9b32bd4 100644 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -19,12 +19,6 @@ log_error() { echo -e "${RED}[ERROR]${NC} $1" } -# Check if running on CentOS -if [ ! -f /etc/centos-release ]; then - log_error "This script must be run on CentOS" - exit 1 -fi - # Check if running as root if [ "$EUID" -ne 0 ]; then log_error "Please run as root" @@ -35,124 +29,42 @@ fi SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")" -# Check if offline packages exist -if [ -d "${PROJECT_ROOT}/packages" ]; then - log_info "检测到离线安装包目录,使用离线安装模式..." - - # Configure local repository - log_info "配置本地仓库..." - if [ -f "${PROJECT_ROOT}/packages/local.repo" ]; then - # Backup existing repo files - log_info "备份现有仓库配置..." - mkdir -p /etc/yum.repos.d/backup - mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ 2>/dev/null || true - - # Copy local repo configuration - cp "${PROJECT_ROOT}/packages/local.repo" /etc/yum.repos.d/ - - # Clean and update repo cache - log_info "清理并更新仓库缓存..." - yum clean all - yum makecache - else - log_error "找不到本地仓库配置文件: local.repo" - exit 1 - fi - - # Install packages from local repository - log_info "从本地仓库安装依赖包..." - yum install -y \ - cmake3 \ - json-devel \ - boost-devel \ - openssl-devel \ - python3 \ - python3-pip \ - python3-devel \ - python3-libs \ - python3-setuptools \ - gcc \ - gcc-c++ \ - make \ - autoconf \ - automake \ - libtool || { - log_error "安装依赖包失败" - exit 1 - } - - # Install Python packages - if [ -f "${PROJECT_ROOT}/packages/requirements.txt" ]; then - log_info "安装 Python 依赖包..." - pip3 install --no-index --find-links="${PROJECT_ROOT}/packages/python_packages" \ - -r "${PROJECT_ROOT}/packages/requirements.txt" || { - log_error "安装 Python 包失败" - exit 1 - } - fi - - # Restore original repo files - log_info "恢复原有仓库配置..." - rm -f /etc/yum.repos.d/local.repo - mv /etc/yum.repos.d/backup/* /etc/yum.repos.d/ 2>/dev/null || true - rmdir /etc/yum.repos.d/backup 2>/dev/null || true -else - # Online installation - log_info "使用在线安装模式..." - log_info "正在安装依赖包..." - yum groupinstall -y "Development Tools" - yum install -y cmake3 json-devel boost-devel openssl-devel python3 python3-pip - - # Install Python packages - log_info "安装 Python 依赖..." - pip3 install flask==2.0.1 -fi +# Install RPM packages +log_info "Installing RPM packages..." +cd "${PROJECT_ROOT}/deploy/rpm" +# Install Python3 and its dependencies +rpm -Uvh --nodeps python3*.rpm # Create work directory WORK_DIR="/opt/collision_avoidance" -log_info "创建工作目录: $WORK_DIR" +log_info "Creating work directory: $WORK_DIR" mkdir -p $WORK_DIR -cd $WORK_DIR || { - log_error "无法进入工作目录" - exit 1 -} +mkdir -p $WORK_DIR/tools -# Compile project -log_info "开始编译项目..." -mkdir -p build -cd build || { - log_error "无法进入构建目录" - exit 1 -} -cmake .. -make -j4 - -if [ $? -ne 0 ]; then - log_error "编译失败" - exit 1 -fi +# Copy files +log_info "Copying files..." +cp -r "${PROJECT_ROOT}/deploy/bin/"* "/usr/local/bin/" +cp -r "${PROJECT_ROOT}/deploy/lib/"* "/usr/lib64/" +cp -r "${PROJECT_ROOT}/deploy/python/"* "/tmp/" +cp -r "${PROJECT_ROOT}/deploy/tools/"* "$WORK_DIR/tools/" # Create config directory CONFIG_DIR="/etc/collision_avoidance" -log_info "创建配置目录: $CONFIG_DIR" +log_info "Creating config directory: $CONFIG_DIR" mkdir -p $CONFIG_DIR +cp -r "${PROJECT_ROOT}/deploy/config/"* "$CONFIG_DIR/" -# Copy config files -log_info "复制配置文件..." -cp ../config/* $CONFIG_DIR/ || { - log_error "复制配置文件失败" - exit 1 -} - -# Copy executable -log_info "安装可执行文件..." -cp collision_avoidance /usr/local/bin/ || { - log_error "复制可执行文件失败" - exit 1 -} +# Install Python packages +log_info "Installing Python packages..." +cd /tmp +for pkg in *.whl; do + if [ -f "$pkg" ]; then + pip3 install --no-index "$pkg" + fi +done # Create service file -log_info "创建系统服务..." +log_info "Creating system service..." cat > /etc/systemd/system/collision-avoidance.service << EOL [Unit] Description=Collision Avoidance Service @@ -166,48 +78,49 @@ User=root Restart=always RestartSec=3 Environment=CONFIG_PATH=/etc/collision_avoidance +Environment=LD_LIBRARY_PATH=/usr/lib64 [Install] WantedBy=multi-user.target EOL # Configure firewall -log_info "配置防火墙..." +log_info "Configuring firewall..." if command -v firewall-cmd &> /dev/null; then firewall-cmd --permanent --add-port=8010/tcp firewall-cmd --permanent --add-port=8081/tcp firewall-cmd --reload else - log_warn "未检测到 firewalld,请手动配置防火墙" + log_warn "firewalld not detected, please configure firewall manually" fi # Start service -log_info "启动服务..." +log_info "Starting service..." systemctl daemon-reload systemctl enable collision-avoidance systemctl start collision-avoidance # Check service status if systemctl is-active --quiet collision-avoidance; then - log_info "服务启动成功" + log_info "Service started successfully" else - log_error "服务启动失败,请检查日志" + log_error "Service failed to start, check logs" journalctl -u collision-avoidance -n 50 exit 1 fi # Display service status -log_info "部署完成,服务状态:" +log_info "Deployment completed, service status:" systemctl status collision-avoidance # Display usage instructions -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" -echo "Mock Server 端口:8081" \ No newline at end of file +echo -e "\n${GREEN}Deployment completed!${NC}" +echo "Use these commands to manage the service:" +echo " Start service: systemctl start collision-avoidance" +echo " Stop service: systemctl stop collision-avoidance" +echo " Restart service: systemctl restart collision-avoidance" +echo " Check status: systemctl status collision-avoidance" +echo " View logs: journalctl -u collision-avoidance -f" +echo -e "\nConfig files location: ${CONFIG_DIR}" +echo "WebSocket port: 8010" +echo "Mock Server port: 8081" \ No newline at end of file diff --git a/scripts/deploy_minimal.sh b/scripts/deploy_minimal.sh deleted file mode 100644 index c062e29..0000000 --- a/scripts/deploy_minimal.sh +++ /dev/null @@ -1,124 +0,0 @@ -#!/bin/bash - -# Color definitions for output -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -NC='\033[0m' # No Color - -# Logging functions -log_info() { - echo -e "${GREEN}[INFO]${NC} $1" -} - -log_warn() { - echo -e "${YELLOW}[WARN]${NC} $1" -} - -log_error() { - echo -e "${RED}[ERROR]${NC} $1" -} - -# Check if running as root -if [ "$EUID" -ne 0 ]; then - log_error "Please run as root" - exit 1 -fi - -# Get script directory and project root -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")" - -# Install RPM packages -log_info "Installing RPM packages..." -cd "${PROJECT_ROOT}/deploy/rpm" -# Install Python3 and its dependencies -rpm -Uvh --nodeps python3*.rpm - -# Create work directory -WORK_DIR="/opt/collision_avoidance" -log_info "Creating work directory: $WORK_DIR" -mkdir -p $WORK_DIR - -# Copy files -log_info "Copying files..." -cp -r "${PROJECT_ROOT}/deploy/bin/"* "/usr/local/bin/" -cp -r "${PROJECT_ROOT}/deploy/lib/"* "/usr/lib64/" -cp -r "${PROJECT_ROOT}/deploy/python/"* "/tmp/" - -# Create config directory -CONFIG_DIR="/etc/collision_avoidance" -log_info "Creating config directory: $CONFIG_DIR" -mkdir -p $CONFIG_DIR -cp -r "${PROJECT_ROOT}/deploy/config/"* "$CONFIG_DIR/" - -# Install Python packages -log_info "Installing Python packages..." -cd /tmp -for pkg in *.whl; do - if [ -f "$pkg" ]; then - pip3 install --no-index "$pkg" - fi -done - -# Create service file -log_info "Creating system service..." -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 -Environment=LD_LIBRARY_PATH=/usr/lib64 - -[Install] -WantedBy=multi-user.target -EOL - -# Configure firewall -log_info "Configuring firewall..." -if command -v firewall-cmd &> /dev/null; then - firewall-cmd --permanent --add-port=8010/tcp - firewall-cmd --permanent --add-port=8081/tcp - firewall-cmd --reload -else - log_warn "firewalld not detected, please configure firewall manually" -fi - -# Start service -log_info "Starting service..." -systemctl daemon-reload -systemctl enable collision-avoidance -systemctl start collision-avoidance - -# Check service status -if systemctl is-active --quiet collision-avoidance; then - log_info "Service started successfully" -else - log_error "Service failed to start, check logs" - journalctl -u collision-avoidance -n 50 - exit 1 -fi - -# Display service status -log_info "Deployment completed, service status:" -systemctl status collision-avoidance - -# Display usage instructions -echo -e "\n${GREEN}Deployment completed!${NC}" -echo "Use these commands to manage the service:" -echo " Start service: systemctl start collision-avoidance" -echo " Stop service: systemctl stop collision-avoidance" -echo " Restart service: systemctl restart collision-avoidance" -echo " Check status: systemctl status collision-avoidance" -echo " View logs: journalctl -u collision-avoidance -f" -echo -e "\nConfig files location: ${CONFIG_DIR}" -echo "WebSocket port: 8010" -echo "Mock Server port: 8081" \ No newline at end of file diff --git a/scripts/prepare_deploy.sh b/scripts/prepare_deploy.sh index c17dec8..ed241b1 100644 --- a/scripts/prepare_deploy.sh +++ b/scripts/prepare_deploy.sh @@ -34,6 +34,7 @@ mkdir -p "${DEPLOY_DIR}/python" mkdir -p "${DEPLOY_DIR}/config" mkdir -p "${DEPLOY_DIR}/rpm" mkdir -p "${DEPLOY_DIR}/tools" +mkdir -p "${DEPLOY_DIR}/scripts" # Download Python3 RPM packages log_info "Downloading Python3 RPM packages..." @@ -142,6 +143,11 @@ cp "${PROJECT_ROOT}/tools/mock_server.py" "${DEPLOY_DIR}/tools/" cp "${PROJECT_ROOT}/tools/map_websocket.html" "${DEPLOY_DIR}/tools/" cp "${PROJECT_ROOT}/tools/test_websocket.html" "${DEPLOY_DIR}/tools/" +# Copy deployment scripts +log_info "Copying deployment scripts..." +cp "${PROJECT_ROOT}/scripts/deploy.sh" "${DEPLOY_DIR}/scripts/" +chmod +x "${DEPLOY_DIR}/scripts/"*.sh + # Create deployment archive log_info "Creating deployment archive..." cd "${PROJECT_ROOT}" @@ -154,4 +160,5 @@ echo " - Required runtime libraries" echo " - Python3 RPM packages" echo " - Python dependencies" echo " - Configuration files" -echo " - Tools" \ No newline at end of file +echo " - Tools" +echo " - Deployment scripts" \ No newline at end of file