GrabBag/GrabBagPrj/pkg_belttearingserver.sh
2025-10-08 21:45:37 +08:00

207 lines
6.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 <support@belttearing.com>" >> ${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
SERVICE_FILE="/opt/belttearingserver/belttearingserver.service"
TARGET_SERVICE_FILE="/etc/systemd/system/belttearingserver.service"
if [ -f "$SERVICE_FILE" ]; then
echo "安装 belttearingserver.service..."
# 检查服务是否已经存在,如果存在则先停止并禁用
if systemctl is-active --quiet belttearingserver.service 2>/dev/null; then
echo "检测到已运行的 belttearingserver.service,正在停止..."
systemctl stop belttearingserver.service
fi
if systemctl is-enabled --quiet belttearingserver.service 2>/dev/null; then
echo "检测到已启用的 belttearingserver.service,正在禁用..."
systemctl disable belttearingserver.service
fi
# 复制服务文件
cp "$SERVICE_FILE" "$TARGET_SERVICE_FILE"
# 设置正确的权限
chmod 644 "$TARGET_SERVICE_FILE"
systemctl daemon-reload
systemctl enable belttearingserver.service
systemctl start belttearingserver.service
echo "belttearingserver.service 已安装并设置为开机自启"
else
echo "错误: 未找到 belttearingserver.service 文件"
echo "请检查文件是否存在: $SERVICE_FILE"
exit 1
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 目录
if [ "$1" = "remove" ]; then
# 清理 /opt/belttearingserver 目录
rm -rf /opt/belttearingserver
echo "已完全卸载 BeltTearingServer 应用程序"
else
echo "更新无需删除应用程序"
fi
echo "BeltTearingServer 应用程序卸载完成!"
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 "=========================================="