#!/bin/bash # BeltTearingServer 版本配置 PKG_NAME="BeltTearingServer" PKG_ARCH="arm64" # 从Version.h文件中读取版本信息 VERSION_FILE="../App/BeltTearing/BeltTearingServer/Version.h" if [ -f "${VERSION_FILE}" ]; then # 读取版本号(从 BELT_TEARING_SERVER_VERSION_STRING 中提取) PKG_VERSION=$(grep '#define BELT_TEARING_SERVER_VERSION_STRING' ${VERSION_FILE} | sed 's/.*"\(.*\)".*/\1/') # 读取构建号(从 BELT_TEARING_SERVER_VERSION_BUILD 中提取) BUILD_NUMBER=$(grep '#define BELT_TEARING_SERVER_VERSION_BUILD' ${VERSION_FILE} | sed 's/.*"\(.*\)".*/\1/') echo "从 ${VERSION_FILE} 读取版本信息:" echo " 版本号: ${PKG_VERSION}" echo " 构建号: ${BUILD_NUMBER}" # 如果读取失败,使用默认值 if [ -z "${PKG_VERSION}" ]; then PKG_VERSION="1.0.0" echo "警告: 无法读取版本号,使用默认值: ${PKG_VERSION}" fi if [ -z "${BUILD_NUMBER}" ]; then BUILD_NUMBER="1" echo "警告: 无法读取构建号,使用默认值: ${BUILD_NUMBER}" fi else # Version.h文件不存在时的默认值 PKG_VERSION="1.0.0" BUILD_NUMBER="1" echo "警告: ${VERSION_FILE} 文件不存在,使用默认版本信息" echo " 版本号: ${PKG_VERSION}" echo " 构建号: ${BUILD_NUMBER}" fi PKG_PATH=$HOME/BeltTearingServerPkg CODE_PATH=../ RELEASE_PATH=../Publish echo "==========================================" echo "开始打包 BeltTearingServer 应用程序 v${PKG_VERSION}..." echo "==========================================" if [ -d "${PKG_PATH}" ];then echo "清理旧的打包目录..." rm -irf ${PKG_PATH} fi echo "创建打包目录结构..." mkdir -p ${PKG_PATH}/DEBIAN mkdir -p ${PKG_PATH}/usr/lib mkdir -p ${PKG_PATH}/etc/profile.d mkdir -p ${PKG_PATH}/opt/belttearingserver mkdir -p ${PKG_PATH}/opt/sysroot/lib echo "复制 Qt 运行时环境..." #QT depend QT_PKG_PATH=/opt/firefly_qt5.15_arm64_20.04 QT_LIB_PATH=/opt/sysroot/firefly-arm64-sysroot-20.04/lib/aarch64-linux-gnu cp -rfd ${QT_PKG_PATH}/ext ${PKG_PATH}/opt/firefly_qt5.15 cp ${QT_PKG_PATH}/target_qtEnv.sh ${PKG_PATH}/etc/profile.d/ # 复制 Qt 库文件 for libfile in ${QT_LIB_PATH}/*.so*; do # 获取文件名用于比较 filename=$(basename "$libfile") # 跳过 LLVM、flite、clang 和 X11 相关库文件 if [[ "$filename" == *icu* ]]; then # 复制其他库文件,保持符号链接 cp -rfd "$libfile" ${PKG_PATH}/opt/sysroot/lib/ continue fi done echo "复制依赖库文件..." #depend cp -a ${CODE_PATH}/SDK/OpenCV320/Arm/aarch64/*opencv_core*.so* ${PKG_PATH}/usr/lib/ cp -a ${CODE_PATH}/SDK/OpenCV320/Arm/aarch64/*opencv_imgproc*.so* ${PKG_PATH}/usr/lib/ cp -a ${CODE_PATH}/SDK/OpenCV320/Arm/aarch64/*opencv_highgui*.so* ${PKG_PATH}/usr/lib/ cp ${CODE_PATH}/SDK/beltTearing/Arm/aarch64/*.so ${PKG_PATH}/usr/lib/ cp ${CODE_PATH}/SDK/VzNLSDK/Arm/aarch64/*.so ${PKG_PATH}/usr/lib/ # 复制 BeltTearingServer 目录下的所有内容到 /opt echo "复制 BeltTearingServer 内容到 /opt/..." #APP cp ${CODE_PATH}/GrabBagPrj/buildarm/App/BeltTearing/BeltTearingServer/BeltTearingServer ${PKG_PATH}/opt/belttearingserver/ #service cp ${CODE_PATH}/App/BeltTearing/BeltTearingServer/belttearingserver.service ${PKG_PATH}/opt/belttearingserver/ echo "生成 control 文件..." #control CONTROL_PATH=${PKG_PATH}/DEBIAN/control echo "Package: ${PKG_NAME}" > ${CONTROL_PATH} echo "Version: ${PKG_VERSION}" >> ${CONTROL_PATH} echo "Section: belttearingserver" >> ${CONTROL_PATH} echo "Architecture: ${PKG_ARCH}" >> ${CONTROL_PATH} echo "Priority: optional" >> ${CONTROL_PATH} echo "Maintainer: BeltTearingServer Team " >> ${CONTROL_PATH} echo "Description: BeltTearingServer application" >> ${CONTROL_PATH} echo "生成安装后脚本..." #postinst install exec script POSTINST_PATH=${PKG_PATH}/DEBIAN/postinst cat > ${POSTINST_PATH} << 'EOF' #!/bin/bash echo "配置 BeltTearingServer 应用程序..." # 安装并启用 belttearingserver.service if [ -f /opt/belttearingserver/belttearingserver.service ]; then echo "安装 belttearingserver.service..." # 检查服务是否已经存在,如果存在则先停止并禁用 if systemctl is-active --quiet belttearingserver.service; then echo "检测到已运行的 belttearingserver.service,正在停止..." systemctl stop belttearingserver.service fi if systemctl is-enabled --quiet belttearingserver.service; then echo "检测到已启用的 belttearingserver.service,正在禁用..." systemctl disable belttearingserver.service fi # 复制服务文件 cp /opt/belttearingserver/belttearingserver.service /etc/systemd/system/ systemctl daemon-reload systemctl enable belttearingserver.service systemctl start belttearingserver.service echo "belttearingserver.service 已安装并设置为开机自启" else echo "错误: 未找到 belttearingserver.service 文件" fi echo "BeltTearingServer 应用程序安装完成!" EOF chmod +x ${POSTINST_PATH} echo "生成卸载脚本..." #postrm uninstall exec script POSTRM_PATH=${PKG_PATH}/DEBIAN/postrm cat > ${POSTRM_PATH} << 'EOF' #!/bin/bash echo "卸载 BeltTearingServer 应用程序..." # 停止并禁用 belttearingserver.service systemctl stop belttearingserver.service 2>/dev/null || true systemctl disable belttearingserver.service 2>/dev/null || true rm -f /etc/systemd/system/belttearingserver.service # 重新加载systemd systemctl daemon-reload # 清理 /opt/belttearingserver 目录 rm -rf /opt/belttearingserver echo "BeltTearingServer 应用程序卸载完成!" echo "端口映射配置已清理" EOF chmod +x ${POSTRM_PATH} echo "设置文件权限..." # 设置opt目录权限(不包括DEBIAN) chmod -R 755 ${PKG_PATH}/opt # 确保publish目录存在 mkdir -p ${RELEASE_PATH} # 生成带时间戳和构建号的包文件名 TIMESTAMP=$(date +%Y%m%d%H%M%S) DEB_FILENAME="${RELEASE_PATH}/${PKG_NAME}_${PKG_VERSION}_${BUILD_NUMBER}_${PKG_ARCH}_${TIMESTAMP}.deb" # 开始构建 DEB 包 fakeroot dpkg -b ${PKG_PATH} ${DEB_FILENAME} echo "==========================================" echo "打包完成!" echo "生成的包文件: ${DEB_FILENAME}" echo "文件大小: $(ls -lh ${DEB_FILENAME} | awk '{print $5}')" echo "=========================================="