CollisionAvoidance/scripts/prepare_deploy.sh
2024-12-20 17:56:49 +08:00

157 lines
4.2 KiB
Bash

#!/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"
# 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" "${DEPLOY_DIR}/tools/"
cp "${PROJECT_ROOT}/tools/map_websocket.html" "${DEPLOY_DIR}/tools/"
cp "${PROJECT_ROOT}/tools/test_websocket.html" "${DEPLOY_DIR}/tools/"
# 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"