#!/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 mkdir -p $WORK_DIR/tools # 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 "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"