QDAirPortTestSystemBackend/scripts/build_execute_package.sh
2026-01-27 15:24:05 +08:00

142 lines
4.1 KiB
Bash

#!/bin/bash
# Color definitions for output
GREEN='\033[0;32m'
RED='\033[0;31m'
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="collision_avoidance"
# Generate version number based on current time
VERSION=$(date +"%Y%m%d_%H%M%S")
log_info "Building version: ${VERSION}"
# Create temp directory
TEMP_DIR="${PROJECT_ROOT}/temp_build"
rm -rf "${TEMP_DIR}"
mkdir -p "${TEMP_DIR}/bin"
mkdir -p "${TEMP_DIR}/lib"
# Build the project
log_info "Building project..."
cd "${PROJECT_ROOT}"
rm -rf build
mkdir build
cd build
# Configure and build
cmake3 -DCMAKE_BUILD_TYPE=Release ..
if [ $? -ne 0 ]; then
log_error "CMake configuration failed"
exit 1
fi
make -j$(nproc)
if [ $? -ne 0 ]; then
log_error "Build failed"
exit 1
fi
# Copy executable
log_info "Copying executable..."
cp "bin/${PROJECT_NAME}" "${TEMP_DIR}/bin/" || {
log_error "Failed to copy executable"
exit 1
}
# --- BEGIN: Copy Libraries ---
log_info "Copying required runtime libraries to ${TEMP_DIR}/lib/ ..."
GCC_RUNTIME_LIB_PATH="/usr/local/lib64"
if [ -f "${GCC_RUNTIME_LIB_PATH}/libstdc++.so.6" ]; then
cp -Lv "${GCC_RUNTIME_LIB_PATH}/libstdc++.so.6" "${TEMP_DIR}/lib/"
log_info "Copied libstdc++.so.6 (and its target file)"
else
log_warn "libstdc++.so.6 not found in ${GCC_RUNTIME_LIB_PATH}"
fi
if [ -f "${GCC_RUNTIME_LIB_PATH}/libgcc_s.so.1" ]; then
cp -Lv "${GCC_RUNTIME_LIB_PATH}/libgcc_s.so.1" "${TEMP_DIR}/lib/"
log_info "Copied libgcc_s.so.1 (and its target file)"
else
log_warn "libgcc_s.so.1 not found in ${GCC_RUNTIME_LIB_PATH}"
fi
# Modified Boost library copying
ACTUAL_BOOST_LIB_PATH="/usr/lib64" # Actual .so.1.69.0 files are in /usr/lib64
BOOST_VERSIONED_FILES=(
"libboost_system.so.1.69.0"
"libboost_filesystem.so.1.69.0"
"libboost_thread.so.1.69.0"
"libboost_chrono.so.1.69.0"
"libboost_date_time.so.1.69.0"
"libboost_atomic.so.1.69.0"
"libboost_regex.so.1.69.0"
)
log_info "Attempting to copy Boost libraries from ${ACTUAL_BOOST_LIB_PATH}..."
for boost_file in "${BOOST_VERSIONED_FILES[@]}"; do
if [ -f "${ACTUAL_BOOST_LIB_PATH}/${boost_file}" ]; then
cp -v "${ACTUAL_BOOST_LIB_PATH}/${boost_file}" "${TEMP_DIR}/lib/"
log_info "Copied ${boost_file}"
else
log_warn "Boost library ${boost_file} not found in ${ACTUAL_BOOST_LIB_PATH}"
fi
done
# --- END: Copy Libraries ---
# Generate version file
echo "${VERSION}" > "${TEMP_DIR}/bin/version.txt"
# Generate checksum
cd "${TEMP_DIR}/bin"
sha256sum "${PROJECT_NAME}" > "${PROJECT_NAME}.sha256"
# Create deployment archive
cd "${TEMP_DIR}"
PACKAGE_NAME="${PROJECT_NAME}_${VERSION}.tar.gz"
tar czf "${PROJECT_ROOT}/${PACKAGE_NAME}" bin/ lib/
# Cleanup
cd "${PROJECT_ROOT}"
rm -rf "${TEMP_DIR}"
log_info "Package created: ${PACKAGE_NAME}"
log_info "Package contents:"
log_info " - Executable binary (in bin/)"
log_info " - Runtime libraries (in lib/)"
log_info " - Version file (in bin/)"
log_info " - Checksum file (in bin/)"
# Print instructions
echo
log_info "To deploy:"
echo "1. Copy ${PACKAGE_NAME} to production environment"
echo "2. Extract: tar xzf ${PACKAGE_NAME}"
echo " This will create 'bin/' and 'lib/' directories."
echo "3. Verify checksum: cd bin && sha256sum -c ${PROJECT_NAME}.sha256 && cd .."
echo "4. Stop service: systemctl stop collision-avoidance"
echo "5. Backup old binary and libraries (optional but recommended)"
echo " e.g., mv /opt/collision_avoidance/bin/${PROJECT_NAME} /opt/collision_avoidance/bin/${PROJECT_NAME}.bak"
echo " e.g., rsync -ab /opt/collision_avoidance/lib/ /opt/collision_avoidance/lib_bak/"
echo "6. Copy new binary: cp bin/${PROJECT_NAME} /opt/collision_avoidance/bin/"
echo "7. Copy new libraries: cp lib/* /opt/collision_avoidance/lib/"
echo "8. Start service: systemctl start collision-avoidance"
echo "9. Check status: systemctl status collision-avoidance"