From 3999996e98a04988bce302e1af04ca5ffaf29d41 Mon Sep 17 00:00:00 2001 From: Harald Date: Tue, 6 Oct 2026 12:36:10 +0200 Subject: [PATCH] =?UTF-8?q?fix(packaging):=20Debian-Paket-Abh=C3=A4ngigkei?= =?UTF-8?q?ten,=20AppStream-Metadaten=20und=20reproduzierbares=20AppImage-?= =?UTF-8?q?Build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packaging/eu.pansi.ink-notes.desktop | 18 ++++ packaging/eu.pansi.ink-notes.metainfo.xml | 38 +++++++ packaging/ink-notes.desktop | 2 +- packaging/ink-notes.metainfo.xml | 6 +- scripts/package-appimage.sh | 59 +++++++++-- scripts/package-deb.sh | 116 ++++++++++++++++++---- 6 files changed, 204 insertions(+), 35 deletions(-) create mode 100644 packaging/eu.pansi.ink-notes.desktop create mode 100644 packaging/eu.pansi.ink-notes.metainfo.xml diff --git a/packaging/eu.pansi.ink-notes.desktop b/packaging/eu.pansi.ink-notes.desktop new file mode 100644 index 0000000..dc1b8a4 --- /dev/null +++ b/packaging/eu.pansi.ink-notes.desktop @@ -0,0 +1,18 @@ +[Desktop Entry] +Version=1.0 +Name=ink-notes +GenericName=Notizbuch- & Inking-App +Comment=Latenzoptimierte Vektor-Notizen mit Stylus, Stift & Geometrie-Erkennung +Exec=ink-notes %F +Icon=eu.pansi.ink-notes +Terminal=false +Type=Application +Categories=Office;Graphics;Utility; +Keywords=Note;Notiz;Pen;Stift;Ink;Inking;Stylus;Drawing;Zeichnen;PDF;Vector; +StartupWMClass=ink-notes +MimeType=application/x-inknotes; +Actions=NewWindow; + +[Desktop Action NewWindow] +Name=Neues Fenster +Exec=ink-notes diff --git a/packaging/eu.pansi.ink-notes.metainfo.xml b/packaging/eu.pansi.ink-notes.metainfo.xml new file mode 100644 index 0000000..fa3db17 --- /dev/null +++ b/packaging/eu.pansi.ink-notes.metainfo.xml @@ -0,0 +1,38 @@ + + + eu.pansi.ink-notes + CC0-1.0 + MIT + ink-notes + Latenzoptimierte Vektor-Notizbuch- und Inking-App für Linux + +

+ ink-notes ist eine hardwarebeschleunigte, hochperformante Notizbuch- und Inking-Anwendung für Linux, + geschrieben in Rust mit wgpu. Sie bietet minimale Eingabelatenz mit Stylus, Touchpad oder Maus. +

+

Hauptmerkmale:

+
    +
  • Zwei-Stufen-Inking-Modell: Echtzeit-Glättung mit 1€-Filter und akausale Ecken-Erhaltung
  • +
  • Automatische Geometrie- und Formerkennung (Geraden, Rechtecke, Kreise, Koordinatensysteme, Polygone)
  • +
  • Stufenloser Viewport mit cursor-zentriertem Zoom (25% bis 500%) und Panning
  • +
  • Objektauswahl, Lasso, Skalieren, stufenloses Drehen und Multicolor-Umfärbung
  • +
  • Multi-Dokumenten- und Notizbuch-Verwaltung mit atomarem Autosave
  • +
  • Vektor-PDF-Export für Druck und Weitergabe
  • +
+
+ eu.pansi.ink-notes.desktop + + ink-notes + + + Office + Graphics + Utility + + + Harald + + https://gitea.pansi.eu/harald/ink-notes + https://gitea.pansi.eu/harald/ink-notes/issues + +
diff --git a/packaging/ink-notes.desktop b/packaging/ink-notes.desktop index f333f24..dc1b8a4 100644 --- a/packaging/ink-notes.desktop +++ b/packaging/ink-notes.desktop @@ -4,7 +4,7 @@ Name=ink-notes GenericName=Notizbuch- & Inking-App Comment=Latenzoptimierte Vektor-Notizen mit Stylus, Stift & Geometrie-Erkennung Exec=ink-notes %F -Icon=ink-notes +Icon=eu.pansi.ink-notes Terminal=false Type=Application Categories=Office;Graphics;Utility; diff --git a/packaging/ink-notes.metainfo.xml b/packaging/ink-notes.metainfo.xml index faad2c9..fa3db17 100644 --- a/packaging/ink-notes.metainfo.xml +++ b/packaging/ink-notes.metainfo.xml @@ -20,7 +20,7 @@
  • Vektor-PDF-Export für Druck und Weitergabe
  • - ink-notes.desktop + eu.pansi.ink-notes.desktop ink-notes @@ -32,7 +32,7 @@ Harald - https://farmersdog.pansi.eu/harald/ink-notes - https://farmersdog.pansi.eu/harald/ink-notes/issues + https://gitea.pansi.eu/harald/ink-notes + https://gitea.pansi.eu/harald/ink-notes/issues diff --git a/scripts/package-appimage.sh b/scripts/package-appimage.sh index 94fd434..b51997c 100755 --- a/scripts/package-appimage.sh +++ b/scripts/package-appimage.sh @@ -18,11 +18,22 @@ APPDIR="${ROOT_DIR}/target/AppDir" CACHE_DIR="${ROOT_DIR}/target/tools" APPIMAGETOOL="${CACHE_DIR}/appimagetool-x86_64.AppImage" +# Pinned appimagetool Release & SHA-256 Hash +APPIMAGETOOL_VERSION="1.9.1" +APPIMAGETOOL_URL="https://github.com/AppImage/appimagetool/releases/download/${APPIMAGETOOL_VERSION}/appimagetool-x86_64.AppImage" +APPIMAGETOOL_SHA256="ed4ce84f0d9caff66f50bcca6ff6f35aae54ce8135408b3fa33abfc3cb384eb0" + echo "=== [1/5] Stelle Release-Binary sicher (ink-notes v${VERSION}) ===" if [ ! -f "target/release/ink-notes" ]; then cargo build --release fi +# Prüfe glibc-Mindestversion +echo "=== Prüfe glibc-Symbolversionen ===" +MAX_GLIBC=$(objdump -T "target/release/ink-notes" | grep "GLIBC_" | sed -e 's/.*GLIBC_//' | cut -d')' -f1 | sort -V | tail -n 1 || echo "unknown") +echo "Höchste benötigte glibc-Symbolversion: GLIBC_${MAX_GLIBC}" +echo "Hinweis: ink-notes nutzt den Host-Grafikstack (Vulkan ICD, Wayland/X11) und glibc >= ${MAX_GLIBC}." + # Sicherstellen, dass das PNG-Icon existiert if [ ! -f "assets/ink-notes.png" ]; then echo "Generiere PNG-Icon..." @@ -41,15 +52,20 @@ mkdir -p "${APPDIR}/usr/share/metainfo" cp "target/release/ink-notes" "${APPDIR}/usr/bin/ink-notes" chmod 755 "${APPDIR}/usr/bin/ink-notes" -cp "packaging/ink-notes.desktop" "${APPDIR}/usr/share/applications/ink-notes.desktop" -cp "packaging/ink-notes.desktop" "${APPDIR}/ink-notes.desktop" +# Desktop-Datei +cp "packaging/eu.pansi.ink-notes.desktop" "${APPDIR}/usr/share/applications/eu.pansi.ink-notes.desktop" +cp "packaging/eu.pansi.ink-notes.desktop" "${APPDIR}/eu.pansi.ink-notes.desktop" +ln -sf "eu.pansi.ink-notes.desktop" "${APPDIR}/ink-notes.desktop" -cp "assets/ink-notes.svg" "${APPDIR}/usr/share/icons/hicolor/scalable/apps/ink-notes.svg" -cp "assets/ink-notes.png" "${APPDIR}/usr/share/icons/hicolor/256x256/apps/ink-notes.png" -cp "assets/ink-notes.png" "${APPDIR}/ink-notes.png" -ln -sf "ink-notes.png" "${APPDIR}/.DirIcon" +# Icons +cp "assets/ink-notes.svg" "${APPDIR}/usr/share/icons/hicolor/scalable/apps/eu.pansi.ink-notes.svg" +cp "assets/ink-notes.png" "${APPDIR}/usr/share/icons/hicolor/256x256/apps/eu.pansi.ink-notes.png" +cp "assets/ink-notes.png" "${APPDIR}/eu.pansi.ink-notes.png" +ln -sf "eu.pansi.ink-notes.png" "${APPDIR}/.DirIcon" -cp "packaging/ink-notes.metainfo.xml" "${APPDIR}/usr/share/metainfo/eu.pansi.ink-notes.metainfo.xml" +# Metainfo +cp "packaging/eu.pansi.ink-notes.metainfo.xml" "${APPDIR}/usr/share/metainfo/eu.pansi.ink-notes.metainfo.xml" +cp "packaging/eu.pansi.ink-notes.metainfo.xml" "${APPDIR}/usr/share/metainfo/eu.pansi.ink-notes.appdata.xml" # AppRun Skript erstellen cat <<'EOF' > "${APPDIR}/AppRun" @@ -62,11 +78,32 @@ exec "${SELF_DIR}/usr/bin/ink-notes" "$@" EOF chmod 755 "${APPDIR}/AppRun" -echo "=== [3/5] Hole appimagetool (gecacht in ${CACHE_DIR}) ===" +echo "=== [3/5] Hole & verifiziere gepinntes appimagetool v${APPIMAGETOOL_VERSION} ===" mkdir -p "${CACHE_DIR}" -if [ ! -f "${APPIMAGETOOL}" ]; then - echo "Lade appimagetool herunter..." - curl -fsSL -o "${APPIMAGETOOL}" "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" + +need_download=true +if [ -f "${APPIMAGETOOL}" ]; then + CURRENT_HASH=$(sha256sum "${APPIMAGETOOL}" | cut -d' ' -f1) + if [ "${CURRENT_HASH}" = "${APPIMAGETOOL_SHA256}" ]; then + need_download=false + else + echo "Gecachtes appimagetool hat ungültigen Hash. Lade neu herunter..." + rm -f "${APPIMAGETOOL}" + fi +fi + +if [ "${need_download}" = true ]; then + echo "Lade appimagetool v${APPIMAGETOOL_VERSION} herunter..." + curl -fsSL -o "${APPIMAGETOOL}.tmp" "${APPIMAGETOOL_URL}" + DOWNLOAD_HASH=$(sha256sum "${APPIMAGETOOL}.tmp" | cut -d' ' -f1) + if [ "${DOWNLOAD_HASH}" != "${APPIMAGETOOL_SHA256}" ]; then + echo "FEHLER: SHA256-Prüfsumme für appimagetool stimmt nicht überein!" + echo "Erwartet: ${APPIMAGETOOL_SHA256}" + echo "Erhalten: ${DOWNLOAD_HASH}" + rm -f "${APPIMAGETOOL}.tmp" + exit 1 + fi + mv "${APPIMAGETOOL}.tmp" "${APPIMAGETOOL}" chmod +x "${APPIMAGETOOL}" fi diff --git a/scripts/package-deb.sh b/scripts/package-deb.sh index 7cdf155..f6b8860 100755 --- a/scripts/package-deb.sh +++ b/scripts/package-deb.sh @@ -16,7 +16,7 @@ ARCH="amd64" DEB_NAME="${PKG_NAME}_${VERSION}_${ARCH}.deb" STAGING_DIR="${ROOT_DIR}/target/deb_staging" -echo "=== [1/4] Baue Release-Binary mit Cargo (ink-notes v${VERSION}) ===" +echo "=== [1/5] Baue Release-Binary mit Cargo (ink-notes v${VERSION}) ===" cargo build --release # Sicherstellen, dass das PNG-Icon existiert @@ -25,7 +25,23 @@ if [ ! -f "assets/ink-notes.png" ]; then python3 scripts/generate_png_icon.py fi -echo "=== [2/4] Erstelle Paketstruktur in ${STAGING_DIR} ===" +echo "=== [2/5] Ermittle tatsächliche Abhängigkeiten (ldd & dpkg-shlibdeps) ===" +echo "Linker-Abhängigkeiten (ldd):" +ldd target/release/ink-notes + +if command -v dpkg-shlibdeps >/dev/null 2>&1; then + echo "Ermittle automatische shlibdeps via dpkg-shlibdeps..." + TEMP_CONTROL_DIR="$(mktemp -d)" + mkdir -p "${TEMP_CONTROL_DIR}/debian" + echo "Source: ${PKG_NAME}" > "${TEMP_CONTROL_DIR}/debian/control" + ( + cd "${TEMP_CONTROL_DIR}" + dpkg-shlibdeps -O "${ROOT_DIR}/target/release/ink-notes" 2>/dev/null || true + ) + rm -rf "${TEMP_CONTROL_DIR}" +fi + +echo "=== [3/5] Erstelle Paketstruktur in ${STAGING_DIR} ===" rm -rf "${STAGING_DIR}" mkdir -p "${STAGING_DIR}/DEBIAN" mkdir -p "${STAGING_DIR}/usr/bin" @@ -33,44 +49,104 @@ mkdir -p "${STAGING_DIR}/usr/share/applications" mkdir -p "${STAGING_DIR}/usr/share/icons/hicolor/scalable/apps" mkdir -p "${STAGING_DIR}/usr/share/icons/hicolor/256x256/apps" mkdir -p "${STAGING_DIR}/usr/share/metainfo" +mkdir -p "${STAGING_DIR}/usr/share/doc/${PKG_NAME}" -# 2. Dateien kopieren +# Dateien kopieren cp "target/release/ink-notes" "${STAGING_DIR}/usr/bin/ink-notes" + +# Desktop-Dateien (sowohl mit AppStream ID als auch Legacy Name) +cp "packaging/eu.pansi.ink-notes.desktop" "${STAGING_DIR}/usr/share/applications/eu.pansi.ink-notes.desktop" +cp "packaging/eu.pansi.ink-notes.desktop" "${STAGING_DIR}/usr/share/applications/ink-notes.desktop" + +# Icons (eu.pansi.ink-notes & ink-notes) +cp "assets/ink-notes.svg" "${STAGING_DIR}/usr/share/icons/hicolor/scalable/apps/eu.pansi.ink-notes.svg" +cp "assets/ink-notes.svg" "${STAGING_DIR}/usr/share/icons/hicolor/scalable/apps/ink-notes.svg" +cp "assets/ink-notes.png" "${STAGING_DIR}/usr/share/icons/hicolor/256x256/apps/eu.pansi.ink-notes.png" +cp "assets/ink-notes.png" "${STAGING_DIR}/usr/share/icons/hicolor/256x256/apps/ink-notes.png" + +# AppStream Metainfo +cp "packaging/eu.pansi.ink-notes.metainfo.xml" "${STAGING_DIR}/usr/share/metainfo/eu.pansi.ink-notes.metainfo.xml" + +# Debian doc: copyright +cat <<'EOF' > "${STAGING_DIR}/usr/share/doc/ink-notes/copyright" +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: ink-notes +Upstream-Contact: Harald +Source: https://gitea.pansi.eu/harald/ink-notes + +Files: * +Copyright: 2026 Harald Pansi +License: MIT + +License: MIT + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +EOF + +# Debian doc: changelog.gz +CHANGELOG_TMP="$(mktemp)" +cat < "${CHANGELOG_TMP}" +ink-notes (${VERSION}-1) stable; urgency=medium + + * Release v${VERSION}. + * Low-latency vector inking with two-stage pipeline. + * Shape recognition and infinite canvas with zoom/pan. + * Multi-notebook management and PDF export. + + -- Harald $(date -R) +EOF +gzip -n -9 -c "${CHANGELOG_TMP}" > "${STAGING_DIR}/usr/share/doc/ink-notes/changelog.gz" +rm -f "${CHANGELOG_TMP}" + +# Berechtigungen penibel setzen +find "${STAGING_DIR}" -type d -exec chmod 755 {} + +find "${STAGING_DIR}/usr/share" -type f -exec chmod 644 {} + +chmod 755 "${STAGING_DIR}/DEBIAN" chmod 755 "${STAGING_DIR}/usr/bin/ink-notes" -cp "packaging/ink-notes.desktop" "${STAGING_DIR}/usr/share/applications/ink-notes.desktop" -chmod 644 "${STAGING_DIR}/usr/share/applications/ink-notes.desktop" - -cp "assets/ink-notes.svg" "${STAGING_DIR}/usr/share/icons/hicolor/scalable/apps/ink-notes.svg" -chmod 644 "${STAGING_DIR}/usr/share/icons/hicolor/scalable/apps/ink-notes.svg" - -cp "assets/ink-notes.png" "${STAGING_DIR}/usr/share/icons/hicolor/256x256/apps/ink-notes.png" -chmod 644 "${STAGING_DIR}/usr/share/icons/hicolor/256x256/apps/ink-notes.png" - -cp "packaging/ink-notes.metainfo.xml" "${STAGING_DIR}/usr/share/metainfo/eu.pansi.ink-notes.metainfo.xml" -chmod 644 "${STAGING_DIR}/usr/share/metainfo/eu.pansi.ink-notes.metainfo.xml" - -# 3. DEBIAN/control Datei generieren +# DEBIAN/control Datei generieren cat < "${STAGING_DIR}/DEBIAN/control" Package: ${PKG_NAME} Version: ${VERSION} Architecture: ${ARCH} Maintainer: Harald Installed-Size: $(du -ks "${STAGING_DIR}/usr" | cut -f1) -Depends: libc6, libx11-6, libxcursor1, libxrandr2, libxi6, libxkbcommon0 +Depends: libc6 (>= 2.38), libgcc-s1, libvulkan1, mesa-vulkan-drivers | vulkan-icd, libwayland-client0, libx11-6, libxcursor1, libxrandr2, libxi6, libxkbcommon0, xdg-utils Section: utils Priority: optional -Homepage: https://farmersdog.pansi.eu/harald/ink-notes +Homepage: https://gitea.pansi.eu/harald/ink-notes Description: Latenzoptimierte Vektor-Notizbuch- und Inking-App für Linux ink-notes kombiniert minimale Stylus-Latenz mit GPU-Hardwarebeschleunigung (wgpu), stufenlosem Viewport, Geometrie- und Formerkennung, Objekt-Transformationen, Multi-Dokumenten-Verwaltung und Vektor-PDF-Export. EOF +chmod 644 "${STAGING_DIR}/DEBIAN/control" -echo "=== [3/4] Schnüre .deb-Paket mit dpkg-deb ===" +echo "=== [4/5] Schnüre .deb-Paket mit dpkg-deb ===" dpkg-deb --build --root-owner-group "${STAGING_DIR}" "${ROOT_DIR}/target/${DEB_NAME}" -echo "=== [4/4] Paket erfolgreich erstellt: target/${DEB_NAME} ===" +echo "=== [5/5] Paket erfolgreich erstellt: target/${DEB_NAME} ===" ls -lh "${ROOT_DIR}/target/${DEB_NAME}" dpkg-deb -I "${ROOT_DIR}/target/${DEB_NAME}" + +if command -v lintian >/dev/null 2>&1; then + echo "=== Prüfe Paket mit lintian ===" + lintian "${ROOT_DIR}/target/${DEB_NAME}" || true +fi + echo "Fertig!"