Flatpak Manifest - Icons fehlen

Ich habe ein manifest erstellt, um PortfolioPerformance als flatpak Anwendung zu nutzen.

Das Program lässt sich problemlos starten. Allerdings fehlen einige Icons in der Nutzerschnittstelle. Vermutlich fehlt eine Abhängigkeit.

Könnte mir jemand einen Tipp geben, welche Komponente für die Darstellung dieser Symbole verantwortlich sein könnte. Das wäre eine Hilfe bei der Fehlersuche.

image

Hat sich geklärt. Ich habe den build in ein lokales Repo exportiert und von dort installiert.

Die Anwendung läuft gut, soweit ich sehe. Bis auf die Abhängigkeit von webkitgt bei der Holding Ansicht und den vergrößerten Icons gut (siehe unten).

Ich teste noch eine Weile. Werde das manifest dann posten. Ist möglicherweise ein interessanter Distributionskanal für Linux Anwender.

Auch wenn ich keine Erfahrung mit LINUX habe, worin besteht der Unterschied zwischen der bereits vorhandenen LINUX Version im Vergleich zu der via flatpak?

eine sehr gute und berichtige Frage. Durch flatpaks (oder snaps) sollen Anwendungen leichter zu finden, zu installieren, und zu warten sein. Es müssen keine distributionsabhängige Packete mehr erstellt werden. So das Marketing.

So weit ich verstehe: Flatpak und Snap sind Technologien mit deren Hilfe Nutzer distributionsunabhängig (Desktop) Anwendungen installieren können. Die so installierten Anwendungen laufen isoliert und fordern explizite Rechte an. Flatpak (https://flathub.org/home) wird von der freedesktop Initiative unterstützt (und kann dezentral betrieben) und Snap von Canonical (die als Gatekeeper auftreten, siehe https://snapcraft.io/).

Anwendungen, die in flatpak oder snap Format vorliegen, können in „Software Centern“ / „Application Stores“ verteilt werden (z.B. Gnome Software, KDE Discover, Flathub, etc.), siehe https://www.freedesktop.org/software/appstream/docs/

Ich nutze zur Zeit die https://clearlinux.org/ Distribution, die von sich aus flatpaks nutzt. Da ich PP häufig verwende, habe ich das PP Manifest für mich selber erstellt. Das Einreichen bei flathub oder snap sollte sowieso nur durch Software Autoren selber durchgeführt werden. Hier kann man auch noch abwarten, wie sich Snap/Flatpak entwickeln werden.

Das Flatpak Manifest sieht übrigens so aus:

{
    "app-id": "org.buchen.PortfolioPerformance",
    "runtime": "org.freedesktop.Sdk",
    "runtime-version": "18.08",
    "sdk": "org.freedesktop.Sdk",
    "sdk-extensions" : [ "org.freedesktop.Sdk.Extension.openjdk11" ],
    "command": "/app/jre/bin/PortfolioPerformance",
    "finish-args": [
            "--persist=.java",
            "--socket=x11", "--socket=wayland",
            "--share=network",
            "--env=PATH=/app/jre/bin:/usr/bin",
            "--env=JAVA_HOME=/app/jre",
            "--filesystem=host"
    ],
      "build-options" : {
              "append-path": "/usr/lib/sdk/openjdk11/bin"
                },
    "modules": [
        {"name" : "openjdk",
    "buildsystem" : "simple",
    "build-commands" : [ "/usr/lib/sdk/openjdk11/install.sh" ]
  },
  {
    "name": "PortfolioPerformance",
    "buildsystem": "simple",
         "build-commands": [
                "unzip plugins/name.abuchen.portfolio.ui_0.41.1.jar 'icons/*'",
                "install -Dm644 icons/pp_16.png /app/share/icons/hicolor/16x16/apps/${FLATPAK_ID}.png",
                "install -Dm644 icons/pp_48.png /app/share/icons/hicolor/48x48/apps/${FLATPAK_ID}.png",
                "install -Dm644 icons/pp_256.png /app/share/icons/hicolor/256x256/apps/${FLATPAK_ID}.png",
                "install -Dm644 icons/pp_512.png /app/share/icons/hicolor/512x512/apps/${FLATPAK_ID}.png",
                "rm -rf icons",
                "mv * /app/jre/bin/",
                "echo  '[Desktop Entry]\nType=Application\nName=PortfolioPerformance\nComment=A simple tool to calculate the overall performance of an investment portfolio.\nExec=/app/jre/bin/PortfolioPerformance\nIcon=pp\nTerminal=false\nCategories=Office' > pp.desktop",
                "install -Dm644 pp.desktop ${FLATPAK_DEST}/share/applications/${FLATPAK_ID}.desktop",
                "desktop-file-edit --set-icon=${FLATPAK_ID} /app/share/applications/${FLATPAK_ID}.desktop"
         ],

    "sources": [
      {
        "type": "archive",
        "url": "https://github.com/buchen/portfolio/releases/download/0.41.1/PortfolioPerformance-0.41.1-linux.gtk.x86_64.tar.gz",
        "sha256": "d4e9b56dfa38022a9186dd0e85b39388af9f5b6696aa8cad7255534908bb0729"
      }
    ]
  }

    ]
}

Ich riskiere einen Monolog. Aber hier noch das Manifest mit Webkitgtk Integration. Jetzt werden auch die Charts in „Bestände“ und den Klassifizierung korrekt angezeigt.

Folgende Verbesserungen sehe ich noch:

  • Die Icongröße in der Ansicht „Vermögensaufstellung“ und „Wertpapiere“ ist zu groß (und pixlig)
  • Wenn die Webkitgtk Bilder neu gezeichnet werden, wird manchmal der Canvas gelöscht und nicht neu gerendert. Ein Ansichtswechsel behebt das Problem.

Allerdings beobachte ich das auch bei Installationen ohne flatpak.

Zum Nachvollziehen:

Manifest unter org.buchen.PortfolioPerfomance abspeichern und kompilieren:

flatpak-builder  --repo=repo --force-clean build-dir org.buchen.PortfolioPerformance.json

Dann ein lokales repo zu flatpak hinzufügen und installieren:

flatpak --user remote-add --no-gpg-verify local_repo repo
flatpak --user install local_repo org.buchen.PortfolioPerformance

Oder ein single bundle file erstellen und installieren

flatpak build-bundle repo pp.flatpak org.buchen.PortfolioPerformance
flatpak install pp.flatpak

Das Komplieren dauert etwas länger. Vermutlich kann man einige Optionen noch reduzieren und verbessern. Ebenfalls könnten die Berechtigungen vielleicht noch reduziert werden.

org.buchen.PortfolioPerformance.json

 {
  "app-id": "org.buchen.PortfolioPerformance",
  "runtime": "org.freedesktop.Sdk",
  "runtime-version": "18.08",
  "sdk": "org.freedesktop.Sdk",
  "sdk-extensions": [
    "org.freedesktop.Sdk.Extension.openjdk11"
  ],
  "command": "/app/jre/bin/PortfolioPerformance",
  "finish-args": [
    "--persist=.java",
    "--socket=x11",
    "--socket=wayland",
    "--socket=session-bus",
    "--share=network",
    "--share=ipc",
    "--env=PATH=/app/jre/bin:/usr/bin",
    "--env=JAVA_HOME=/app/jre",
    "--filesystem=host"
  ],
  "build-options": {
    "append-path": "/usr/lib/sdk/openjdk11/bin"
  },
  "modules": [
    {
      "name": "openjdk",
      "buildsystem": "simple",
      "build-commands": [
        "/usr/lib/sdk/openjdk11/install.sh"
      ]
    },
    {
      "name": "libwpe",
      "buildsystem": "cmake-ninja",
      "config-opts": [
        "-DCMAKE_BUILD_TYPE=Release",
        "-DCMAKE_C_FLAGS_RELEASE=-DNDEBUG",
        "-DCMAKE_CXX_FLAGS_RELEASE=-DNDEBUG",
        "-DCMAKE_INSTALL_PREFIX=/app"
      ],
      "sources": [
        {
          "type": "archive",
          "url": "https://wpewebkit.org/releases/libwpe-1.4.0.1.tar.xz",
          "sha256": "09849dfb34877354f34f318e138971cf22e677b2179e1f0a8ea00ab0b7bd8e9b"
        }
      ]
    },
    {
      "name": "wpebackend-fdo",
      "buildsystem": "cmake-ninja",
      "config-opts": [
        "-DCMAKE_BUILD_TYPE=Release",
        "-DCMAKE_C_FLAGS_RELEASE=-DNDEBUG",
        "-DCMAKE_CXX_FLAGS_RELEASE=-DNDEBUG",
        "-DCMAKE_INSTALL_PREFIX=/app"
      ],
      "sources": [
        {
          "type": "archive",
          "url": "https://wpewebkit.org/releases/wpebackend-fdo-1.4.0.tar.xz",
          "sha256": "a919ca4a5bc445f9419a5b7f3781cfc98e5abcf5d7259eb1869f5ab20fd18baf"
        }
      ]
    },
    {
      "name": "webkitgtk",
      "buildsystem": "cmake-ninja",
      "config-opts": [
        "-DPORT=GTK",
        "-DENABLE_SPELLCHECK=False",
        "-DUSE_LIBNOTIFY=False",
        "-DUSE_OPENJPEG=False",
        "-DUSE_WOFF2=False",
        "-DUSE_LIBSECRET=False",
        "-DENABLE_VIDEO=OFF"
      ],
      "build-options": {
        "env": {
          "PYTHON": "/usr/bin/python3"
        },
        "cflags": "-O2 -g -pipe -Wno-expansion-to-defined -Wno-class-memaccess -fno-delete-null-pointer-checks -fpermissive",
        "cflags-override": true,
        "cxxflags": "-O2 -g -pipe -Wno-expansion-to-defined -Wno-class-memaccess -fno-delete-null-pointer-checks -fpermissive",
        "cxxflags-override": true,
        "arch": {
          "aarch64": {
            "cflags": "-O2 -g -pipe -DENABLE_YARR_JIT=0 -Wno-expansion-to-defined -Wno-class-memaccess -fno-delete-null-pointer-checks -fpermissive",
            "cflags-override": true,
            "cxxflags": "-O2 -g -pipe -DENABLE_YARR_JIT=0 -Wno-expansion-to-defined -Wno-class-memaccess -fno-delete-null-pointer-checks -fpermissive",
            "cxxflags-override": true,
            "config-opts": [
              "--disable-jit"
            ]
          }
        }
      },
      "cleanup": [
        "/share/doc",
        "/bin"
      ],
      "sources": [
        {
          "type": "archive",
          "url": "https://www.webkitgtk.org/releases/webkitgtk-2.26.1.tar.xz",
          "sha256": "6b4b21801d2b1008422a1075dbd6fb4ae8b5127503faf657cf9671289d9cd155"
        }
      ]
    },
    {
      "name": "PortfolioPerformance",
      "buildsystem": "simple",
      "build-commands": [
        "unzip plugins/name.abuchen.portfolio.ui_0.41.1.jar 'icons/*'",
        "install -Dm644 icons/pp_16.png /app/share/icons/hicolor/16x16/apps/${FLATPAK_ID}.png",
        "install -Dm644 icons/pp_48.png /app/share/icons/hicolor/48x48/apps/${FLATPAK_ID}.png",
        "install -Dm644 icons/pp_256.png /app/share/icons/hicolor/256x256/apps/${FLATPAK_ID}.png",
        "install -Dm644 icons/pp_512.png /app/share/icons/hicolor/512x512/apps/${FLATPAK_ID}.png",
        "rm -rf icons",
        "mv * /app/jre/bin/",
        "echo  '[Desktop Entry]\nType=Application\nName=PortfolioPerformance\nComment=A simple tool to calculate the overall performance of an investment portfolio.\nExec=/app/jre/bin/PortfolioPerformance\nIcon=pp\nTerminal=false\nCategories=Office' > pp.desktop",
        "install -Dm644 pp.desktop ${FLATPAK_DEST}/share/applications/${FLATPAK_ID}.desktop",
        "desktop-file-edit --set-icon=${FLATPAK_ID} /app/share/applications/${FLATPAK_ID}.desktop"
      ],
      "sources": [
        {
          "type": "archive",
          "url": "https://github.com/buchen/portfolio/releases/download/0.41.1/PortfolioPerformance-0.41.1-linux.gtk.x86_64.tar.gz",
          "sha256": "d4e9b56dfa38022a9186dd0e85b39388af9f5b6696aa8cad7255534908bb0729"
        }
      ]
    }
  ]
}

Jain, da dies eine strategische Entscheidung ist kann sich vermutlich nur @AndreasB dazu äußern.

Aber bevor jetzt ein weiteres Repository läuft, es gibt da das MAVEN Plugin Eclipse-flatpak-packager, welches lt. Beschreibung eine fertige FLATPAK Anwendung erstellt und anscheinend veröffentlichen kann.

Create a Flatpak application from the archived product output of the tycho-p2-director-plugin and exports the application to a Flatpak repository. Signing the Flatpak repository is optional, but highly recommended.

Auch wenn ich mich vielleicht weit aus dem Fenster lehne, wenn die Flatpak App via MAVEN und GitHub gebaut und veröffentlicht wird, könnte es gut aussehen. Wenn du es via MAVEN versuchen möchtest, die Parameter für das Plugin findest du hier.

Ich kann es nur leider mangels Linux nicht testen…