GrabBag/GrabBagPrj/pkg_belttearingserver.sh

207 lines
6.7 KiB
Bash
Raw Normal View History

#!/bin/bash
# BeltTearingServer 版本配置
PKG_NAME="BeltTearingServer"
PKG_ARCH="arm64"
2025-09-10 00:31:27 +08:00
# 从Version.h文件中读取版本信息
2025-09-18 23:49:32 +08:00
VERSION_FILE="../App/BeltTearing/BeltTearingServer/Version.h"
2025-09-10 00:31:27 +08:00
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
2025-09-10 00:31:27 +08:00
mkdir -p ${PKG_PATH}/usr/lib
mkdir -p ${PKG_PATH}/etc/profile.d
mkdir -p ${PKG_PATH}/opt/belttearingserver
2025-09-18 23:49:32 +08:00
mkdir -p ${PKG_PATH}/opt/sysroot/lib
2025-09-10 00:31:27 +08:00
echo "复制 Qt 运行时环境..."
2025-09-18 23:49:32 +08:00
2025-09-10 00:31:27 +08:00
#QT depend
QT_PKG_PATH=/opt/firefly_qt5.15_arm64_20.04
2025-09-18 23:49:32 +08:00
QT_LIB_PATH=/opt/sysroot/firefly-arm64-sysroot-20.04/lib/aarch64-linux-gnu
2025-09-10 00:31:27 +08:00
cp -rfd ${QT_PKG_PATH}/ext ${PKG_PATH}/opt/firefly_qt5.15
cp ${QT_PKG_PATH}/target_qtEnv.sh ${PKG_PATH}/etc/profile.d/
2025-09-18 23:49:32 +08:00
# 复制 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
2025-09-10 00:31:27 +08:00
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/
2025-09-10 00:31:27 +08:00
cp ${CODE_PATH}/SDK/VzNLSDK/Arm/aarch64/*.so ${PKG_PATH}/usr/lib/
# 复制 BeltTearingServer 目录下的所有内容到 /opt
echo "复制 BeltTearingServer 内容到 /opt/..."
2025-09-10 00:31:27 +08:00
#APP
2025-09-18 23:49:32 +08:00
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 应用程序..."
2025-09-10 00:31:27 +08:00
# 安装并启用 belttearingserver.service
2025-10-08 21:45:37 +08:00
SERVICE_FILE="/opt/belttearingserver/belttearingserver.service"
TARGET_SERVICE_FILE="/etc/systemd/system/belttearingserver.service"
if [ -f "$SERVICE_FILE" ]; then
2025-09-10 00:31:27 +08:00
echo "安装 belttearingserver.service..."
2025-09-29 00:56:53 +08:00
# 检查服务是否已经存在,如果存在则先停止并禁用
2025-10-08 21:45:37 +08:00
if systemctl is-active --quiet belttearingserver.service 2>/dev/null; then
echo "检测到已运行的 belttearingserver.service,正在停止..."
2025-09-29 00:56:53 +08:00
systemctl stop belttearingserver.service
fi
2025-10-08 21:45:37 +08:00
if systemctl is-enabled --quiet belttearingserver.service 2>/dev/null; then
echo "检测到已启用的 belttearingserver.service,正在禁用..."
2025-09-29 00:56:53 +08:00
systemctl disable belttearingserver.service
fi
# 复制服务文件
2025-10-08 21:45:37 +08:00
cp "$SERVICE_FILE" "$TARGET_SERVICE_FILE"
# 设置正确的权限
chmod 644 "$TARGET_SERVICE_FILE"
systemctl daemon-reload
2025-09-10 00:31:27 +08:00
systemctl enable belttearingserver.service
systemctl start belttearingserver.service
echo "belttearingserver.service 已安装并设置为开机自启"
else
2025-09-10 00:31:27 +08:00
echo "错误: 未找到 belttearingserver.service 文件"
2025-10-08 21:45:37 +08:00
echo "请检查文件是否存在: $SERVICE_FILE"
exit 1
fi
2025-09-29 00:56:53 +08:00
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 应用程序..."
2025-09-10 00:31:27 +08:00
# 停止并禁用 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
2025-10-08 21:45:37 +08:00
# 只有在完全卸载时才删除 /opt/belttearingserver 目录
if [ "$1" = "remove" ]; then
# 清理 /opt/belttearingserver 目录
rm -rf /opt/belttearingserver
echo "已完全卸载 BeltTearingServer 应用程序"
else
echo "更新无需删除应用程序"
fi
2025-09-10 00:31:27 +08:00
echo "BeltTearingServer 应用程序卸载完成!"
2025-10-08 21:45:37 +08:00
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 "=========================================="