From e442278b74a5d029b50cc0a345d20ceeea3ca583 Mon Sep 17 00:00:00 2001 From: yiyi Date: Mon, 1 Dec 2025 21:35:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=89=93=E5=8C=85=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/BeltTearing/BeltTearingServer/Version.md | 1 + GrabBagPrj/pkg_belttearingserver.sh | 78 +++++++++++++- GrabBagPrj/pkg_grabbagapp.sh | 107 ++++++++++++++++--- GrabBagPrj/pkg_lapweld.sh | 107 ++++++++++++++++--- GrabBagPrj/pkg_particlesize.sh | 107 ++++++++++++++++--- GrabBagPrj/pkg_workpiece.sh | 107 ++++++++++++++++--- 6 files changed, 448 insertions(+), 59 deletions(-) diff --git a/App/BeltTearing/BeltTearingServer/Version.md b/App/BeltTearing/BeltTearingServer/Version.md index 8068d05..ce90592 100644 --- a/App/BeltTearing/BeltTearingServer/Version.md +++ b/App/BeltTearing/BeltTearingServer/Version.md @@ -2,6 +2,7 @@ ## build_1 2025-11-30 1. 协议增加最大撕裂的ID 2. 页面修改:上下去掉间隙 +3. 增加了温度传感器数据读取 # 2.0.4 ## build_2 2025-11-24 diff --git a/GrabBagPrj/pkg_belttearingserver.sh b/GrabBagPrj/pkg_belttearingserver.sh index ef7169a..88a002a 100644 --- a/GrabBagPrj/pkg_belttearingserver.sh +++ b/GrabBagPrj/pkg_belttearingserver.sh @@ -117,24 +117,48 @@ cat > ${POSTINST_PATH} << 'EOF' echo "配置 BeltTearingServer 应用程序..." +# 创建应用注册目录和文件 +REGISTRY_DIR="/var/lib/vr-apps" +REGISTRY_FILE="${REGISTRY_DIR}/installed-apps.list" +APP_NAME="BeltTearingServer" + +mkdir -p "${REGISTRY_DIR}" +touch "${REGISTRY_FILE}" + +# 检查是否是首次安装VR应用 +FIRST_INSTALL=false +if [ ! -s "${REGISTRY_FILE}" ]; then + FIRST_INSTALL=true + echo "检测到首次安装VR应用,将安装公共资源..." +fi + +# 如果不是首次安装,公共库已经配置过,只需要更新 +if [ "${FIRST_INSTALL}" = true ]; then + echo "配置公共库路径..." + ldconfig +else + echo "公共库已存在,仅更新配置..." + ldconfig +fi + # 安装并启用 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" # 设置正确的权限 @@ -149,7 +173,16 @@ else exit 1 fi +# 注册应用到系统 +if ! grep -q "^${APP_NAME}$" "${REGISTRY_FILE}"; then + echo "${APP_NAME}" >> "${REGISTRY_FILE}" + echo "应用 ${APP_NAME} 已注册到系统" +else + echo "应用 ${APP_NAME} 已经注册,跳过..." +fi + echo "BeltTearingServer 应用程序安装完成!" +echo "已安装的VR应用: $(cat ${REGISTRY_FILE} | tr '\n' ' ')" EOF @@ -163,11 +196,45 @@ cat > ${POSTRM_PATH} << 'EOF' echo "卸载 BeltTearingServer 应用程序..." +# 应用注册信息 +REGISTRY_DIR="/var/lib/vr-apps" +REGISTRY_FILE="${REGISTRY_DIR}/installed-apps.list" +APP_NAME="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 +# 从注册表中移除应用 +if [ -f "${REGISTRY_FILE}" ]; then + sed -i "/^${APP_NAME}$/d" "${REGISTRY_FILE}" + echo "应用 ${APP_NAME} 已从系统注册表中移除" +fi + +# 检查是否还有其他VR应用在使用公共资源 +REMAINING_APPS=0 +if [ -f "${REGISTRY_FILE}" ]; then + REMAINING_APPS=$(grep -c . "${REGISTRY_FILE}" 2>/dev/null || echo "0") +fi + +echo "系统中剩余的VR应用数量: ${REMAINING_APPS}" + +# 如果没有其他应用了,清理公共资源 +if [ "${REMAINING_APPS}" -eq 0 ]; then + echo "没有其他VR应用,开始清理公共资源..." + + # 清理注册目录 + rm -rf "${REGISTRY_DIR}" + + echo "公共资源已清理" +else + echo "系统中还有 ${REMAINING_APPS} 个VR应用在运行,保留公共资源" + if [ -f "${REGISTRY_FILE}" ]; then + echo "剩余应用: $(cat ${REGISTRY_FILE} | tr '\n' ' ')" + fi +fi + # 重新加载systemd systemctl daemon-reload @@ -181,6 +248,11 @@ else fi echo "BeltTearingServer 应用程序卸载完成!" +if [ "${REMAINING_APPS}" -eq 0 ]; then + echo "所有VR应用已卸载,公共资源已清理" +else + echo "公共资源已保留供其他VR应用使用" +fi EOF diff --git a/GrabBagPrj/pkg_grabbagapp.sh b/GrabBagPrj/pkg_grabbagapp.sh index 2060c65..7db0075 100644 --- a/GrabBagPrj/pkg_grabbagapp.sh +++ b/GrabBagPrj/pkg_grabbagapp.sh @@ -134,17 +134,39 @@ cat > ${POSTINST_PATH} << 'EOF' echo "配置 GrabBag 应用程序..." -# 设置库文件路径 +# 创建应用注册目录和文件 +REGISTRY_DIR="/var/lib/vr-apps" +REGISTRY_FILE="${REGISTRY_DIR}/installed-apps.list" +APP_NAME="GrabBag" + +mkdir -p "${REGISTRY_DIR}" +touch "${REGISTRY_FILE}" + +# 检查是否是首次安装VR应用 +FIRST_INSTALL=false +if [ ! -s "${REGISTRY_FILE}" ]; then + FIRST_INSTALL=true + echo "检测到首次安装VR应用,将安装公共资源..." +fi + +# 设置库文件路径(每个应用独立配置) echo "/usr/lib" > /etc/ld.so.conf.d/grabbag.conf echo "/opt/sysroot/lib/" >> /etc/ld.so.conf.d/grabbag.conf -ldconfig + +# 如果不是首次安装,公共库已经配置过,只需要更新 +if [ "${FIRST_INSTALL}" = true ]; then + echo "配置公共库路径..." + ldconfig +else + echo "公共库已存在,仅更新配置..." + ldconfig +fi # 确保应用程序可执行 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/vr-port-mapping.service ]; then @@ -172,6 +194,14 @@ else systemctl start vr-port-mapping.service 2>/dev/null || true fi +# 检查iptables规则是否已存在 +if ! iptables -t nat -C PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020 2>/dev/null; then + echo "添加iptables端口映射规则..." + iptables -t nat -A PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020 +else + echo "iptables规则已存在,跳过添加..." +fi + # 检查并创建当前用户的桌面快捷方式 echo "检查当前用户的桌面快捷方式..." @@ -222,12 +252,21 @@ else echo "当前用户没有找到桌面目录(Desktop/桌面/desktop),跳过桌面快捷方式创建" fi +# 注册应用到系统 +if ! grep -q "^${APP_NAME}$" "${REGISTRY_FILE}"; then + echo "${APP_NAME}" >> "${REGISTRY_FILE}" + echo "应用 ${APP_NAME} 已注册到系统" +else + echo "应用 ${APP_NAME} 已经注册,跳过..." +fi + echo "GrabBag 应用程序安装完成!" echo "应用程序将在用户登录桌面后自动启动。" echo "端口映射已配置:502 -> 5020" echo "桌面快捷方式已创建(如果用户有Desktop目录)" echo "如需立即启动,请运行: /usr/local/bin/GrabBagApp" echo "如需禁用自启动,请删除文件: ~/.config/autostart/grabbag.desktop" +echo "已安装的VR应用: $(cat ${REGISTRY_FILE} | tr '\n' ' ')" EOF chmod +x ${POSTINST_PATH} @@ -240,19 +279,55 @@ cat > ${POSTRM_PATH} << 'EOF' echo "卸载 GrabBag 应用程序..." -# 清理库文件配置 +# 应用注册信息 +REGISTRY_DIR="/var/lib/vr-apps" +REGISTRY_FILE="${REGISTRY_DIR}/installed-apps.list" +APP_NAME="GrabBag" + +# 从注册表中移除应用 +if [ -f "${REGISTRY_FILE}" ]; then + sed -i "/^${APP_NAME}$/d" "${REGISTRY_FILE}" + echo "应用 ${APP_NAME} 已从系统注册表中移除" +fi + +# 清理应用专属的库文件配置 rm -f /etc/ld.so.conf.d/grabbag.conf + +# 检查是否还有其他VR应用在使用公共资源 +REMAINING_APPS=0 +if [ -f "${REGISTRY_FILE}" ]; then + REMAINING_APPS=$(grep -c . "${REGISTRY_FILE}" 2>/dev/null || echo "0") +fi + +echo "系统中剩余的VR应用数量: ${REMAINING_APPS}" + +# 如果没有其他应用了,清理公共资源 +if [ "${REMAINING_APPS}" -eq 0 ]; then + echo "没有其他VR应用,开始清理公共资源..." + + # 清理端口映射配置 + echo "清理端口映射配置..." + systemctl stop vr-port-mapping.service 2>/dev/null || true + systemctl disable vr-port-mapping.service 2>/dev/null || true + rm -f /etc/systemd/system/vr-port-mapping.service + + # 清理iptables规则 + iptables -t nat -D PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020 2>/dev/null || true + + # 清理注册目录 + rm -rf "${REGISTRY_DIR}" + + echo "公共资源已清理" +else + echo "系统中还有 ${REMAINING_APPS} 个VR应用在运行,保留公共资源" + if [ -f "${REGISTRY_FILE}" ]; then + echo "剩余应用: $(cat ${REGISTRY_FILE} | tr '\n' ' ')" + fi +fi + +# 更新库缓存 ldconfig -# 清理端口映射配置 -echo "清理端口映射配置..." -systemctl stop vr-port-mapping.service 2>/dev/null || true -systemctl disable vr-port-mapping.service 2>/dev/null || true -rm -f /etc/systemd/system/vr-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 @@ -289,7 +364,11 @@ if [ "$shortcut_found" = false ]; then fi echo "GrabBag 应用程序卸载完成!" -echo "端口映射配置已清理" +if [ "${REMAINING_APPS}" -eq 0 ]; then + echo "所有VR应用已卸载,公共资源已清理" +else + echo "公共资源已保留供其他VR应用使用" +fi echo "桌面快捷方式已清理" echo "如需彻底清理自启动配置,请手动删除: ~/.config/autostart/grabbag.desktop" EOF diff --git a/GrabBagPrj/pkg_lapweld.sh b/GrabBagPrj/pkg_lapweld.sh index 26d3d80..3caff89 100644 --- a/GrabBagPrj/pkg_lapweld.sh +++ b/GrabBagPrj/pkg_lapweld.sh @@ -135,17 +135,39 @@ cat > ${POSTINST_PATH} << 'EOF' echo "配置 LapWeld 应用程序..." -# 设置库文件路径 +# 创建应用注册目录和文件 +REGISTRY_DIR="/var/lib/vr-apps" +REGISTRY_FILE="${REGISTRY_DIR}/installed-apps.list" +APP_NAME="LapWeld" + +mkdir -p "${REGISTRY_DIR}" +touch "${REGISTRY_FILE}" + +# 检查是否是首次安装VR应用 +FIRST_INSTALL=false +if [ ! -s "${REGISTRY_FILE}" ]; then + FIRST_INSTALL=true + echo "检测到首次安装VR应用,将安装公共资源..." +fi + +# 设置库文件路径(每个应用独立配置) echo "/usr/lib" > /etc/ld.so.conf.d/lapweld.conf echo "/opt/sysroot/lib/" >> /etc/ld.so.conf.d/lapweld.conf -ldconfig + +# 如果不是首次安装,公共库已经配置过,只需要更新 +if [ "${FIRST_INSTALL}" = true ]; then + echo "配置公共库路径..." + ldconfig +else + echo "公共库已存在,仅更新配置..." + ldconfig +fi # 确保应用程序可执行 chmod +x /usr/local/bin/LapWeldApp # 配置端口映射 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/vr-port-mapping.service ]; then @@ -173,6 +195,14 @@ else systemctl start vr-port-mapping.service 2>/dev/null || true fi +# 检查iptables规则是否已存在 +if ! iptables -t nat -C PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020 2>/dev/null; then + echo "添加iptables端口映射规则..." + iptables -t nat -A PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020 +else + echo "iptables规则已存在,跳过添加..." +fi + # 检查并创建当前用户的桌面快捷方式 echo "检查当前用户的桌面快捷方式..." @@ -223,12 +253,21 @@ else echo "当前用户没有找到桌面目录(Desktop/桌面/desktop),跳过桌面快捷方式创建" fi +# 注册应用到系统 +if ! grep -q "^${APP_NAME}$" "${REGISTRY_FILE}"; then + echo "${APP_NAME}" >> "${REGISTRY_FILE}" + echo "应用 ${APP_NAME} 已注册到系统" +else + echo "应用 ${APP_NAME} 已经注册,跳过..." +fi + echo "LapWeld 应用程序安装完成!" echo "应用程序将在用户登录桌面后自动启动。" echo "端口映射已配置:502 -> 5020" echo "桌面快捷方式已创建(如果用户有Desktop目录)" echo "如需立即启动,请运行: /usr/local/bin/LapWeldApp" echo "如需禁用自启动,请删除文件: ~/.config/autostart/lapweld.desktop" +echo "已安装的VR应用: $(cat ${REGISTRY_FILE} | tr '\n' ' ')" EOF chmod +x ${POSTINST_PATH} @@ -241,19 +280,55 @@ cat > ${POSTRM_PATH} << 'EOF' echo "卸载 LapWeld 应用程序..." -# 清理库文件配置 +# 应用注册信息 +REGISTRY_DIR="/var/lib/vr-apps" +REGISTRY_FILE="${REGISTRY_DIR}/installed-apps.list" +APP_NAME="LapWeld" + +# 从注册表中移除应用 +if [ -f "${REGISTRY_FILE}" ]; then + sed -i "/^${APP_NAME}$/d" "${REGISTRY_FILE}" + echo "应用 ${APP_NAME} 已从系统注册表中移除" +fi + +# 清理应用专属的库文件配置 rm -f /etc/ld.so.conf.d/lapweld.conf + +# 检查是否还有其他VR应用在使用公共资源 +REMAINING_APPS=0 +if [ -f "${REGISTRY_FILE}" ]; then + REMAINING_APPS=$(grep -c . "${REGISTRY_FILE}" 2>/dev/null || echo "0") +fi + +echo "系统中剩余的VR应用数量: ${REMAINING_APPS}" + +# 如果没有其他应用了,清理公共资源 +if [ "${REMAINING_APPS}" -eq 0 ]; then + echo "没有其他VR应用,开始清理公共资源..." + + # 清理端口映射配置 + echo "清理端口映射配置..." + systemctl stop vr-port-mapping.service 2>/dev/null || true + systemctl disable vr-port-mapping.service 2>/dev/null || true + rm -f /etc/systemd/system/vr-port-mapping.service + + # 清理iptables规则 + iptables -t nat -D PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020 2>/dev/null || true + + # 清理注册目录 + rm -rf "${REGISTRY_DIR}" + + echo "公共资源已清理" +else + echo "系统中还有 ${REMAINING_APPS} 个VR应用在运行,保留公共资源" + if [ -f "${REGISTRY_FILE}" ]; then + echo "剩余应用: $(cat ${REGISTRY_FILE} | tr '\n' ' ')" + fi +fi + +# 更新库缓存 ldconfig -# 清理端口映射配置 -echo "清理端口映射配置..." -systemctl stop vr-port-mapping.service 2>/dev/null || true -systemctl disable vr-port-mapping.service 2>/dev/null || true -rm -f /etc/systemd/system/vr-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 @@ -290,7 +365,11 @@ if [ "$shortcut_found" = false ]; then fi echo "LapWeld 应用程序卸载完成!" -echo "端口映射配置已清理" +if [ "${REMAINING_APPS}" -eq 0 ]; then + echo "所有VR应用已卸载,公共资源已清理" +else + echo "公共资源已保留供其他VR应用使用" +fi echo "桌面快捷方式已清理" echo "如需彻底清理自启动配置,请手动删除: ~/.config/autostart/lapweld.desktop" EOF diff --git a/GrabBagPrj/pkg_particlesize.sh b/GrabBagPrj/pkg_particlesize.sh index c8fb606..74c2366 100644 --- a/GrabBagPrj/pkg_particlesize.sh +++ b/GrabBagPrj/pkg_particlesize.sh @@ -134,17 +134,39 @@ cat > ${POSTINST_PATH} << 'EOF' echo "配置 ParticleSize 应用程序..." -# 设置库文件路径 +# 创建应用注册目录和文件 +REGISTRY_DIR="/var/lib/vr-apps" +REGISTRY_FILE="${REGISTRY_DIR}/installed-apps.list" +APP_NAME="ParticleSize" + +mkdir -p "${REGISTRY_DIR}" +touch "${REGISTRY_FILE}" + +# 检查是否是首次安装VR应用 +FIRST_INSTALL=false +if [ ! -s "${REGISTRY_FILE}" ]; then + FIRST_INSTALL=true + echo "检测到首次安装VR应用,将安装公共资源..." +fi + +# 设置库文件路径(每个应用独立配置) echo "/usr/lib" > /etc/ld.so.conf.d/particlesize.conf echo "/opt/sysroot/lib/" >> /etc/ld.so.conf.d/particlesize.conf -ldconfig + +# 如果不是首次安装,公共库已经配置过,只需要更新 +if [ "${FIRST_INSTALL}" = true ]; then + echo "配置公共库路径..." + ldconfig +else + echo "公共库已存在,仅更新配置..." + ldconfig +fi # 确保应用程序可执行 chmod +x /usr/local/bin/ParticleSizeApp # 配置端口映射 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/vr-port-mapping.service ]; then @@ -172,6 +194,14 @@ else systemctl start vr-port-mapping.service 2>/dev/null || true fi +# 检查iptables规则是否已存在 +if ! iptables -t nat -C PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020 2>/dev/null; then + echo "添加iptables端口映射规则..." + iptables -t nat -A PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020 +else + echo "iptables规则已存在,跳过添加..." +fi + # 检查并创建当前用户的桌面快捷方式 echo "检查当前用户的桌面快捷方式..." @@ -222,12 +252,21 @@ else echo "当前用户没有找到桌面目录(Desktop/桌面/desktop),跳过桌面快捷方式创建" fi +# 注册应用到系统 +if ! grep -q "^${APP_NAME}$" "${REGISTRY_FILE}"; then + echo "${APP_NAME}" >> "${REGISTRY_FILE}" + echo "应用 ${APP_NAME} 已注册到系统" +else + echo "应用 ${APP_NAME} 已经注册,跳过..." +fi + echo "ParticleSize 应用程序安装完成!" echo "应用程序将在用户登录桌面后自动启动。" echo "端口映射已配置:502 -> 5020" echo "桌面快捷方式已创建(如果用户有Desktop目录)" echo "如需立即启动,请运行: /usr/local/bin/ParticleSizeApp" echo "如需禁用自启动,请删除文件: ~/.config/autostart/particlesize.desktop" +echo "已安装的VR应用: $(cat ${REGISTRY_FILE} | tr '\n' ' ')" EOF chmod +x ${POSTINST_PATH} @@ -240,19 +279,55 @@ cat > ${POSTRM_PATH} << 'EOF' echo "卸载 ParticleSize 应用程序..." -# 清理库文件配置 +# 应用注册信息 +REGISTRY_DIR="/var/lib/vr-apps" +REGISTRY_FILE="${REGISTRY_DIR}/installed-apps.list" +APP_NAME="ParticleSize" + +# 从注册表中移除应用 +if [ -f "${REGISTRY_FILE}" ]; then + sed -i "/^${APP_NAME}$/d" "${REGISTRY_FILE}" + echo "应用 ${APP_NAME} 已从系统注册表中移除" +fi + +# 清理应用专属的库文件配置 rm -f /etc/ld.so.conf.d/particlesize.conf + +# 检查是否还有其他VR应用在使用公共资源 +REMAINING_APPS=0 +if [ -f "${REGISTRY_FILE}" ]; then + REMAINING_APPS=$(grep -c . "${REGISTRY_FILE}" 2>/dev/null || echo "0") +fi + +echo "系统中剩余的VR应用数量: ${REMAINING_APPS}" + +# 如果没有其他应用了,清理公共资源 +if [ "${REMAINING_APPS}" -eq 0 ]; then + echo "没有其他VR应用,开始清理公共资源..." + + # 清理端口映射配置 + echo "清理端口映射配置..." + systemctl stop vr-port-mapping.service 2>/dev/null || true + systemctl disable vr-port-mapping.service 2>/dev/null || true + rm -f /etc/systemd/system/vr-port-mapping.service + + # 清理iptables规则 + iptables -t nat -D PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020 2>/dev/null || true + + # 清理注册目录 + rm -rf "${REGISTRY_DIR}" + + echo "公共资源已清理" +else + echo "系统中还有 ${REMAINING_APPS} 个VR应用在运行,保留公共资源" + if [ -f "${REGISTRY_FILE}" ]; then + echo "剩余应用: $(cat ${REGISTRY_FILE} | tr '\n' ' ')" + fi +fi + +# 更新库缓存 ldconfig -# 清理端口映射配置 -echo "清理端口映射配置..." -systemctl stop vr-port-mapping.service 2>/dev/null || true -systemctl disable vr-port-mapping.service 2>/dev/null || true -rm -f /etc/systemd/system/vr-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 @@ -289,7 +364,11 @@ if [ "$shortcut_found" = false ]; then fi echo "ParticleSize 应用程序卸载完成!" -echo "端口映射配置已清理" +if [ "${REMAINING_APPS}" -eq 0 ]; then + echo "所有VR应用已卸载,公共资源已清理" +else + echo "公共资源已保留供其他VR应用使用" +fi echo "桌面快捷方式已清理" echo "如需彻底清理自启动配置,请手动删除: ~/.config/autostart/particlesize.desktop" EOF diff --git a/GrabBagPrj/pkg_workpiece.sh b/GrabBagPrj/pkg_workpiece.sh index cae1055..a0e17b1 100644 --- a/GrabBagPrj/pkg_workpiece.sh +++ b/GrabBagPrj/pkg_workpiece.sh @@ -134,17 +134,39 @@ cat > ${POSTINST_PATH} << 'EOF' echo "配置 Workpiece 应用程序..." -# 设置库文件路径 +# 创建应用注册目录和文件 +REGISTRY_DIR="/var/lib/vr-apps" +REGISTRY_FILE="${REGISTRY_DIR}/installed-apps.list" +APP_NAME="Workpiece" + +mkdir -p "${REGISTRY_DIR}" +touch "${REGISTRY_FILE}" + +# 检查是否是首次安装VR应用 +FIRST_INSTALL=false +if [ ! -s "${REGISTRY_FILE}" ]; then + FIRST_INSTALL=true + echo "检测到首次安装VR应用,将安装公共资源..." +fi + +# 设置库文件路径(每个应用独立配置) echo "/usr/lib" > /etc/ld.so.conf.d/workpiece.conf echo "/opt/sysroot/lib/" >> /etc/ld.so.conf.d/workpiece.conf -ldconfig + +# 如果不是首次安装,公共库已经配置过,只需要更新 +if [ "${FIRST_INSTALL}" = true ]; then + echo "配置公共库路径..." + ldconfig +else + echo "公共库已存在,仅更新配置..." + ldconfig +fi # 确保应用程序可执行 chmod +x /usr/local/bin/WorkpieceApp # 配置端口映射 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/vr-port-mapping.service ]; then @@ -172,6 +194,14 @@ else systemctl start vr-port-mapping.service 2>/dev/null || true fi +# 检查iptables规则是否已存在 +if ! iptables -t nat -C PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020 2>/dev/null; then + echo "添加iptables端口映射规则..." + iptables -t nat -A PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020 +else + echo "iptables规则已存在,跳过添加..." +fi + # 检查并创建当前用户的桌面快捷方式 echo "检查当前用户的桌面快捷方式..." @@ -222,12 +252,21 @@ else echo "当前用户没有找到桌面目录(Desktop/桌面/desktop),跳过桌面快捷方式创建" fi +# 注册应用到系统 +if ! grep -q "^${APP_NAME}$" "${REGISTRY_FILE}"; then + echo "${APP_NAME}" >> "${REGISTRY_FILE}" + echo "应用 ${APP_NAME} 已注册到系统" +else + echo "应用 ${APP_NAME} 已经注册,跳过..." +fi + echo "Workpiece 应用程序安装完成!" echo "应用程序将在用户登录桌面后自动启动。" echo "端口映射已配置:502 -> 5020" echo "桌面快捷方式已创建(如果用户有Desktop目录)" echo "如需立即启动,请运行: /usr/local/bin/WorkpieceApp" echo "如需禁用自启动,请删除文件: ~/.config/autostart/workpiece.desktop" +echo "已安装的VR应用: $(cat ${REGISTRY_FILE} | tr '\n' ' ')" EOF chmod +x ${POSTINST_PATH} @@ -240,19 +279,55 @@ cat > ${POSTRM_PATH} << 'EOF' echo "卸载 Workpiece 应用程序..." -# 清理库文件配置 +# 应用注册信息 +REGISTRY_DIR="/var/lib/vr-apps" +REGISTRY_FILE="${REGISTRY_DIR}/installed-apps.list" +APP_NAME="Workpiece" + +# 从注册表中移除应用 +if [ -f "${REGISTRY_FILE}" ]; then + sed -i "/^${APP_NAME}$/d" "${REGISTRY_FILE}" + echo "应用 ${APP_NAME} 已从系统注册表中移除" +fi + +# 清理应用专属的库文件配置 rm -f /etc/ld.so.conf.d/workpiece.conf + +# 检查是否还有其他VR应用在使用公共资源 +REMAINING_APPS=0 +if [ -f "${REGISTRY_FILE}" ]; then + REMAINING_APPS=$(grep -c . "${REGISTRY_FILE}" 2>/dev/null || echo "0") +fi + +echo "系统中剩余的VR应用数量: ${REMAINING_APPS}" + +# 如果没有其他应用了,清理公共资源 +if [ "${REMAINING_APPS}" -eq 0 ]; then + echo "没有其他VR应用,开始清理公共资源..." + + # 清理端口映射配置 + echo "清理端口映射配置..." + systemctl stop vr-port-mapping.service 2>/dev/null || true + systemctl disable vr-port-mapping.service 2>/dev/null || true + rm -f /etc/systemd/system/vr-port-mapping.service + + # 清理iptables规则 + iptables -t nat -D PREROUTING -p tcp --dport 502 -j REDIRECT --to-port 5020 2>/dev/null || true + + # 清理注册目录 + rm -rf "${REGISTRY_DIR}" + + echo "公共资源已清理" +else + echo "系统中还有 ${REMAINING_APPS} 个VR应用在运行,保留公共资源" + if [ -f "${REGISTRY_FILE}" ]; then + echo "剩余应用: $(cat ${REGISTRY_FILE} | tr '\n' ' ')" + fi +fi + +# 更新库缓存 ldconfig -# 清理端口映射配置 -echo "清理端口映射配置..." -systemctl stop vr-port-mapping.service 2>/dev/null || true -systemctl disable vr-port-mapping.service 2>/dev/null || true -rm -f /etc/systemd/system/vr-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 @@ -289,7 +364,11 @@ if [ "$shortcut_found" = false ]; then fi echo "Workpiece 应用程序卸载完成!" -echo "端口映射配置已清理" +if [ "${REMAINING_APPS}" -eq 0 ]; then + echo "所有VR应用已卸载,公共资源已清理" +else + echo "公共资源已保留供其他VR应用使用" +fi echo "桌面快捷方式已清理" echo "如需彻底清理自启动配置,请手动删除: ~/.config/autostart/workpiece.desktop" EOF