143 lines
3.6 KiB
Bash
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
|