CollisionAvoidance/scripts/prepare_deploy.sh
2024-12-20 15:23:05 +08:00

134 lines
3.3 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"
# 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 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"