237 lines
7.6 KiB
Bash
237 lines
7.6 KiB
Bash
#!/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 "=========================================="
|