GrabBag/GrabBagPrj/project_pkg_desktop.sh

143 lines
3.6 KiB
Bash

#!/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}"
# 端口映射 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
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