#!/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" # 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 if ! command -v cmake3 &> /dev/null; then sudo yum install -y epel-release sudo yum install -y cmake3 fi # 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 collision_avoidance "${DEPLOY_DIR}/bin/" # Copy required libraries log_info "Copying required libraries..." LIBS=( "libboost_system.so" "libboost_filesystem.so" "libboost_thread.so" "libssl.so" "libcrypto.so" ) for lib in "${LIBS[@]}"; do # Find the library path 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 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/system_config.json" "${DEPLOY_DIR}/config/" cp "${PROJECT_ROOT}/config/vehicle_control.json" "${DEPLOY_DIR}/config/" # 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"