GrabBag/GrabBagPrj/project_pkg_desktop.sh

192 lines
6.2 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
# 桌面应用打包
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/project_pkg_common.sh"
write_desktop_autostart() {
cat > "${PKG_PATH}/etc/xdg/autostart/${DESKTOP_FILE_NAME}" <<EOF
[Desktop Entry]
Type=Application
Name=${PACKAGE_NAME}
Comment=${PACKAGE_NAME} Application Auto Start
Exec=${EXEC_INSTALL_PATH}
Icon=${ICON_INSTALL_PATH}
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
AutostartCondition=GNOME3 unless-session gnome
EOF
}
write_desktop_entry() {
cat > "${PKG_PATH}/usr/share/applications/${DESKTOP_FILE_NAME}" <<EOF
[Desktop Entry]
Version=${PKG_VERSION}
Name=${PACKAGE_NAME}
Type=Application
Comment=${PACKAGE_COMMENT}
Terminal=false
Exec=${EXEC_INSTALL_PATH}
Icon=${ICON_INSTALL_PATH}
Categories=Development;
GenericName=${PACKAGE_NAME} App
Keywords=${PACKAGE_SLUG};app;
StartupNotify=true
EOF
}
write_desktop_postinst() {
cat > "${PKG_PATH}/DEBIAN/postinst" <<EOF
#!/bin/bash
set -e
LD_CONF_FILE="/etc/ld.so.conf.d/${PACKAGE_SLUG}.conf"
EXEC_PATH="${EXEC_INSTALL_PATH}"
DESKTOP_FILE="${DESKTOP_FILE_NAME}"
cat > "\${LD_CONF_FILE}" <<'LDEOF'
/usr/lib
/opt/sysroot/lib/
${PACKAGE_LD_CONF_EXTRA_LINES}
LDEOF
ldconfig
chmod +x "\${EXEC_PATH}"
# ParkingSpaceGuide board emergency-stop sysfs access.
if [ "${PACKAGE_NAME}" = "ParkingSpaceGuide" ]; then
GPIO_PATH_UNIT="parkingspaceguide-gpio-permissions.path"
GPIO_SERVICE_UNIT="parkingspaceguide-gpio-permissions.service"
ZLM_SERVICE_UNIT="parkingspaceguide-zlmediakit.service"
MARIADB_SETUP_UNIT="parkingspaceguide-mariadb-setup.service"
chmod 0644 "/etc/systemd/system/\${GPIO_PATH_UNIT}" \
"/etc/systemd/system/\${GPIO_SERVICE_UNIT}" \
"/etc/systemd/system/\${ZLM_SERVICE_UNIT}" \
"/etc/systemd/system/\${MARIADB_SETUP_UNIT}"
chmod 0755 /opt/parkingspaceguide/install-mariadb.sh
systemctl daemon-reload
systemctl enable --now "\${GPIO_PATH_UNIT}" >/dev/null 2>&1 || true
if [ -e /sys/external_gpio/jwsioc_inout_gpio3 ] &&
[ -e /sys/external_gpio/jwsioc_gpio3 ]; then
systemctl start "\${GPIO_SERVICE_UNIT}" >/dev/null 2>&1 || true
echo "[${PACKAGE_NAME}] GPIO sysfs permission ready"
else
echo "[${PACKAGE_NAME}] [WARN] GPIO sysfs files do not exist; path unit will apply permissions when they appear"
fi
if systemctl enable "\${ZLM_SERVICE_UNIT}" >/dev/null 2>&1 &&
systemctl restart "\${ZLM_SERVICE_UNIT}" >/dev/null 2>&1; then
echo "[${PACKAGE_NAME}] ZLMediaKit HTTP-FLV server started on port 8080"
else
echo "[${PACKAGE_NAME}] [WARN] Failed to start ZLMediaKit; check: systemctl status \${ZLM_SERVICE_UNIT}"
fi
# MariaDB 离线包在应用 DEB 内;不能在 postinst 里嵌套 dpkg,等当前安装解锁后再装。
echo "[${PACKAGE_NAME}] Installing bundled MariaDB from /opt/parkingspaceguide/mariadb-offline"
if systemctl enable "\${MARIADB_SETUP_UNIT}" >/dev/null 2>&1 &&
systemctl start --no-block "\${MARIADB_SETUP_UNIT}" >/dev/null 2>&1; then
echo "[${PACKAGE_NAME}] MariaDB setup started after dpkg unlock"
echo "[${PACKAGE_NAME}] Check: journalctl -u \${MARIADB_SETUP_UNIT} -n 50 --no-pager"
else
echo "[${PACKAGE_NAME}] [WARN] Failed to queue MariaDB setup; run: sudo /opt/parkingspaceguide/install-mariadb.sh"
fi
fi
# 端口映射 502 -> 5020
if [ ! -f /etc/systemd/system/vr-port-mapping.service ]; then
cat > /etc/systemd/system/vr-port-mapping.service <<'PORTEOF'
[Unit]
Description=VR Common Port Mapping Service
After=network.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'iptables-legacy -t nat -A PREROUTING -p tcp -m tcp --dport 502 -j REDIRECT --to-port 5020'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
PORTEOF
systemctl daemon-reload
fi
systemctl enable vr-port-mapping.service 2>/dev/null || true
systemctl start vr-port-mapping.service 2>/dev/null || true
if ! iptables-legacy -t nat -C PREROUTING -p tcp -m tcp --dport 502 -j REDIRECT --to-port 5020 2>/dev/null; then
iptables-legacy -t nat -A PREROUTING -p tcp -m tcp --dport 502 -j REDIRECT --to-port 5020
fi
# 桌面快捷方式
${DETECT_CURRENT_USER_SNIPPET}
${RESOLVE_DESKTOP_DIR_SNIPPET}
desktop_dir=\$(resolve_desktop_dir "\${current_home}" || true)
if [ -n "\${desktop_dir}" ]; then
desktop_shortcut="\${desktop_dir}/\${DESKTOP_FILE}"
if [ ! -f "\${desktop_shortcut}" ]; then
cp "/usr/share/applications/\${DESKTOP_FILE}" "\${desktop_shortcut}"
chown "\${current_user}:\${current_user}" "\${desktop_shortcut}" 2>/dev/null || true
chmod 755 "\${desktop_shortcut}"
fi
fi
EOF
chmod +x "${PKG_PATH}/DEBIAN/postinst"
}
write_desktop_postrm() {
cat > "${PKG_PATH}/DEBIAN/postrm" <<EOF
#!/bin/bash
set -e
DESKTOP_FILE="${DESKTOP_FILE_NAME}"
rm -f "/etc/ld.so.conf.d/${PACKAGE_SLUG}.conf"
# 清理端口映射
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-legacy -t nat -D PREROUTING -p tcp -m tcp --dport 502 -j REDIRECT --to-port 5020 2>/dev/null || true
if [ "${PACKAGE_NAME}" = "ParkingSpaceGuide" ]; then
if [ "\$1" = "remove" ] || [ "\$1" = "purge" ]; then
systemctl stop parkingspaceguide-zlmediakit.service 2>/dev/null || true
systemctl disable parkingspaceguide-zlmediakit.service 2>/dev/null || true
systemctl stop parkingspaceguide-gpio-permissions.path 2>/dev/null || true
systemctl stop parkingspaceguide-gpio-permissions.service 2>/dev/null || true
systemctl disable parkingspaceguide-gpio-permissions.path 2>/dev/null || true
fi
fi
ldconfig
systemctl daemon-reload
# 清理桌面快捷方式
${DETECT_CURRENT_USER_SNIPPET}
${RESOLVE_DESKTOP_DIR_SNIPPET}
desktop_dir=\$(resolve_desktop_dir "\${current_home}" || true)
if [ -n "\${desktop_dir}" ]; then
rm -f "\${desktop_dir}/\${DESKTOP_FILE}"
fi
EOF
chmod +x "${PKG_PATH}/DEBIAN/postrm"
}
# ===== 主流程 =====
load_package_context "$@" "desktop"
echo "开始打包桌面应用 ${PACKAGE_NAME}"
run_common_packaging_steps
log_info "写入桌面集成脚本"
write_desktop_autostart
write_desktop_entry
write_desktop_postinst
write_desktop_postrm
finalize_package