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!"