#!/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" } # Get script directory and project root SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")" PROJECT_NAME="$(basename "${PROJECT_ROOT}")" # Create deploy directory structure DEPLOY_DIR="${PROJECT_ROOT}/deploy" log_info "Creating deploy directory: ${DEPLOY_DIR}" rm -rf "${DEPLOY_DIR}" mkdir -p "${DEPLOY_DIR}/bin" mkdir -p "${DEPLOY_DIR}/lib" 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..." cd "${DEPLOY_DIR}/rpm" # Install required tools log_info "Installing required tools..." if ! command -v repotrack &> /dev/null; then sudo yum install -y yum-utils fi # Install build dependencies log_info "Installing build dependencies..." sudo yum groupinstall -y "Development Tools" sudo yum install -y epel-release sudo yum install -y cmake3 boost-devel openssl-devel python3-devel libcurl-devel # Install nlohmann-json from EPEL log_info "Installing nlohmann-json..." sudo yum install -y nlohmann-json-devel # Install GCC 11 log_info "Installing GCC 11..." sudo yum install -y centos-release-scl sudo yum install -y devtoolset-11-gcc devtoolset-11-gcc-c++ # Enable GCC 11 log_info "Enabling GCC 11..." source /opt/rh/devtoolset-11/enable # Download Python3 and dependencies repotrack python3 python3-pip python3-devel # Build the project log_info "Building project..." cd "${PROJECT_ROOT}" rm -rf build mkdir build cd build cmake3 .. make -j4 if [ $? -ne 0 ]; then log_error "Build failed" exit 1 fi # Copy executable log_info "Copying executable..." cp "bin/collision_avoidance" "${DEPLOY_DIR}/bin/" || { log_error "Failed to copy executable" exit 1 } # Copy required libraries log_info "Copying required libraries..." LIBS=( "/usr/lib64/libboost_system.so.1.69.0" "/usr/lib64/libboost_filesystem.so.1.69.0" "/usr/lib64/libboost_thread.so.1.69.0" "/usr/lib64/libssl.so.1.0.2k" "/usr/lib64/libcrypto.so.1.0.2k" ) for lib in "${LIBS[@]}"; do if [[ "$lib" == /* ]]; then # 对于完整路径的库文件,直接复制 if [ -f "$lib" ]; then cp "$lib" "${DEPLOY_DIR}/lib/" log_info "Copied $(basename $lib)" else log_warn "Library $lib not found" fi else # 对于其他库文件,使用 ldd 查找 lib_path=$(ldd "${DEPLOY_DIR}/bin/collision_avoidance" | grep "$lib" | awk '{print $3}') if [ -n "$lib_path" ]; then cp "$lib_path" "${DEPLOY_DIR}/lib/" log_info "Copied $lib" else log_warn "Library $lib not found" fi fi done # Copy Python dependencies log_info "Copying Python dependencies..." pip3 download --no-deps -d "${DEPLOY_DIR}/python" \ flask==2.0.1 \ werkzeug==2.0.1 \ click==8.0.1 \ itsdangerous==2.0.1 \ Jinja2==3.0.1 \ MarkupSafe==2.0.1 # Copy configuration files log_info "Copying configuration files..." cp "${PROJECT_ROOT}/config/airport_bounds.json" "${DEPLOY_DIR}/config/" cp "${PROJECT_ROOT}/config/intersections.json" "${DEPLOY_DIR}/config/" cp "${PROJECT_ROOT}/config/system_config.json" "${DEPLOY_DIR}/config/" cp "${PROJECT_ROOT}/config/vehicle_control.json" "${DEPLOY_DIR}/config/" # Copy tools log_info "Copying tools..." 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}" tar czf "${PROJECT_NAME}_deploy.tar.gz" deploy/ log_info "Deployment package created: ${PROJECT_NAME}_deploy.tar.gz" echo "Package contents:" echo " - Executable binary" echo " - Required runtime libraries" echo " - Python3 RPM packages" echo " - Python dependencies" echo " - Configuration files" echo " - Tools" echo " - Deployment scripts"