142 lines
4.1 KiB
Bash
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" |