GrabBag/GrabBagPrj/pkg_app.sh

237 lines
7.6 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
#grabbag 版本配置
PKG_NAME="GrabBag"
PKG_ARCH="arm64"
# 从Version.h文件中读取版本信息
VERSION_FILE="../GrabBagApp/Version.h"
if [ -f "${VERSION_FILE}" ]; then
# 读取版本号(从 GRABBAG_VERSION_STRING 中提取)
PKG_VERSION=$(grep '#define GRABBAG_VERSION_STRING' ${VERSION_FILE} | sed 's/.*"\(.*\)".*/\1/')
# 读取构建号(从 GRABBAG_BUILD_STRING 中提取)
BUILD_NUMBER=$(grep '#define GRABBAG_BUILD_STRING' ${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/GrabBagPkg
CODE_PATH=../
RELEASE_PATH=../Release
echo "=========================================="
echo "开始打包 GrabBag 应用程序 v${PKG_VERSION}..."
echo "=========================================="
if [ -d "${PKG_PATH}" ];then
echo "清理旧的打包目录..."
rm -irf ${PKG_PATH}
fi
#QT depend
QT_PKG_PATH=/opt/firefly_qt5.15_arm64_20.04
echo "创建打包目录结构..."
mkdir -p ${PKG_PATH}/DEBIAN
mkdir -p ${PKG_PATH}/etc/profile.d
mkdir -p ${PKG_PATH}/etc/xdg/autostart
mkdir -p ${PKG_PATH}/opt
mkdir -p ${PKG_PATH}/usr/local/bin
mkdir -p ${PKG_PATH}/usr/lib
mkdir -p ${PKG_PATH}/usr/share/applications
mkdir -p ${PKG_PATH}/usr/share/pixmaps
echo "复制 Qt 运行时环境..."
cp -rfd ${QT_PKG_PATH}/ext ${PKG_PATH}/opt/firefly_qt5.15
cp ${QT_PKG_PATH}/target_qtEnv.sh ${PKG_PATH}/etc/profile.d/
echo "复制依赖库文件..."
#depend
cp -a ${CODE_PATH}/SDK/OpenCV480/Arm/aarch64/*opencv_core*.so* ${PKG_PATH}/usr/lib/
cp -a ${CODE_PATH}/SDK/OpenCV480/Arm/aarch64/*opencv_imgproc*.so* ${PKG_PATH}/usr/lib/
cp -a ${CODE_PATH}/SDK/OpenCV480/Arm/aarch64/*opencv_highgui*.so* ${PKG_PATH}/usr/lib/
cp ${CODE_PATH}/SDK/bagPosition/Arm/aarch64/*.so ${PKG_PATH}/usr/lib/
cp ${CODE_PATH}/SDK/VzNLSDK/Arm/aarch64/*.so ${PKG_PATH}/usr/lib/
echo "复制应用程序主文件..."
#APP
cp ${CODE_PATH}/GrabBagPrj/buildarm/GrabBagApp/GrabBagApp ${PKG_PATH}/usr/local/bin/
echo "复制应用程序图标..."
#LOGO
cp ${CODE_PATH}/GrabBagApp/resource/logo.png ${PKG_PATH}/usr/share/pixmaps/grabbag.png
echo "生成桌面自启动配置文件..."
#desktop autostart configuration
AUTOSTART_PATH=${PKG_PATH}/etc/xdg/autostart/grabbag.desktop
cat > ${AUTOSTART_PATH} << EOF
[Desktop Entry]
Type=Application
Name=GrabBag
Comment=GrabBag Application Auto Start
Exec=/usr/local/bin/GrabBagApp
Icon=/usr/share/pixmaps/grabbag.png
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
AutostartCondition=GNOME3 unless-session gnome
EOF
echo "生成 control 文件..."
#control
CONTROL_PATH=${PKG_PATH}/DEBIAN/control
echo "Package: ${PKG_NAME}" > ${CONTROL_PATH}
echo "Version: ${PKG_VERSION}" >> ${CONTROL_PATH}
echo "Section: grabbagapp" >> ${CONTROL_PATH}
echo "Architecture: ${PKG_ARCH}" >> ${CONTROL_PATH}
echo "Priority: optional" >> ${CONTROL_PATH}
echo "Maintainer: GrabBag Team <support@grabbag.com>" >> ${CONTROL_PATH}
echo "Description: grabbag app" >> ${CONTROL_PATH}
echo "生成安装后脚本..."
#postinst install exec script
POSTINST_PATH=${PKG_PATH}/DEBIAN/postinst
cat > ${POSTINST_PATH} << 'EOF'
#!/bin/bash
echo "配置 GrabBag 应用程序..."
# 设置库文件路径
echo "/usr/lib" > /etc/ld.so.conf.d/grabbag.conf
ldconfig
# 确保应用程序可执行
chmod +x /usr/local/bin/GrabBagApp
# 配置端口映射 502 -> 5020
echo "配置端口映射 502 -> 5020..."
iptables -t nat -A PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020
# 检查并创建systemd服务确保重启后规则生效
if [ ! -f /etc/systemd/system/grabbag-port-mapping.service ]; then
echo "创建端口映射服务..."
cat > /etc/systemd/system/grabbag-port-mapping.service << 'PORTEOF'
[Unit]
Description=GrabBag Port Mapping Service
After=network.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'iptables -t nat -A PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
PORTEOF
systemctl enable grabbag-port-mapping.service
systemctl start grabbag-port-mapping.service
else
echo "端口映射服务已存在,跳过创建..."
# 确保服务处于启用状态
systemctl enable grabbag-port-mapping.service 2>/dev/null || true
systemctl start grabbag-port-mapping.service 2>/dev/null || true
fi
# 为所有用户设置桌面自启动复制到用户的autostart目录会在用户登录时自动处理
echo "GrabBag 应用程序安装完成!"
echo "应用程序将在用户登录桌面后自动启动。"
echo "端口映射已配置502 -> 5020"
echo "如需立即启动,请运行: /usr/local/bin/GrabBagApp"
echo "如需禁用自启动,请删除文件: ~/.config/autostart/grabbag.desktop"
EOF
chmod +x ${POSTINST_PATH}
echo "生成卸载脚本..."
#postrm uninstall exec script
POSTRM_PATH=${PKG_PATH}/DEBIAN/postrm
cat > ${POSTRM_PATH} << 'EOF'
#!/bin/bash
echo "卸载 GrabBag 应用程序..."
# 清理库文件配置
rm -f /etc/ld.so.conf.d/grabbag.conf
ldconfig
# 清理端口映射配置
echo "清理端口映射配置..."
systemctl stop grabbag-port-mapping.service 2>/dev/null || true
systemctl disable grabbag-port-mapping.service 2>/dev/null || true
rm -f /etc/systemd/system/grabbag-port-mapping.service
# 清理iptables规则
iptables -t nat -D PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020 2>/dev/null || true
# 重新加载systemd
systemctl daemon-reload
# 提醒用户手动清理自启动配置(如果需要)
echo "GrabBag 应用程序卸载完成!"
echo "端口映射配置已清理"
echo "如需彻底清理自启动配置,请手动删除: ~/.config/autostart/grabbag.desktop"
EOF
chmod +x ${POSTRM_PATH}
echo "生成桌面快捷方式..."
#desktop
DESKTOP_PATH=${PKG_PATH}/usr/share/applications/grabbag.desktop
echo "[Desktop Entry]" > ${DESKTOP_PATH}
echo "Version=${PKG_VERSION}" >> ${DESKTOP_PATH}
echo "Name=GrabBag" >> ${DESKTOP_PATH}
echo "Type=Application" >> ${DESKTOP_PATH}
echo "Comment=GrabBag App" >> ${DESKTOP_PATH}
echo "Terminal=false" >> ${DESKTOP_PATH}
echo "Exec=/usr/local/bin/GrabBagApp" >> ${DESKTOP_PATH}
echo "Icon=/usr/share/pixmaps/grabbag.png" >> ${DESKTOP_PATH}
echo "Categories=Development;" >> ${DESKTOP_PATH}
echo "GenericName=GrabBag App" >> ${DESKTOP_PATH}
echo "Keywords=grabbag;app;" >> ${DESKTOP_PATH}
echo "SingleMainWindow=true" >> ${DESKTOP_PATH}
echo "StartupNotify=true" >> ${DESKTOP_PATH}
echo "设置文件权限..."
# 设置usr目录权限不包括DEBIAN
chmod -R 755 ${PKG_PATH}/usr
chmod -R 755 ${PKG_PATH}/etc
chmod -R 755 ${PKG_PATH}/opt
echo "开始构建 DEB 包..."
# 生成带时间戳和构建号的包文件名
TIMESTAMP=$(date +%Y%m%d%H%M%S)
DEB_FILENAME="${RELEASE_PATH}/${PKG_NAME}_${PKG_VERSION}_${BUILD_NUMBER}_${PKG_ARCH}_${TIMESTAMP}.deb"
fakeroot dpkg -b ${PKG_PATH} ${DEB_FILENAME}
echo "=========================================="
echo "打包完成!"
echo "生成的包文件: ${DEB_FILENAME}"
echo "文件大小: $(ls -lh ${DEB_FILENAME} | awk '{print $5}')"
echo "=========================================="