ubuntuusers.de

Kodi Omega als Snap

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Tibsun75

Avatar von Tibsun75

Anmeldungsdatum:
9. Juni 2008

Beiträge: 238

Hallo,

Die ganze Welt jammert über Snaps, also dachte ich mir wird es Zeit sich damit zu beschäftigen. Da die Kodi-Entwickler bald keine ppa's mehr supporten und es Kodi aktuell nicht als Snap gibt, habe selbst eins gebaut.

Kodi mit Snapcraft auf die übliche Weise zu erstellen, ist eine große Herausforderung, das habe ich nach einem 12 Stunden Ausprobiertag aufgegeben...

In habe stattdessen Kodi mit der Standardmethode kompiliert. Nach dem Ausführen von make install wurden die Dateien mit checkinstall in eine .deb-Datei gepackt und anschließend alle Dateien in einen Ordner extrahiert. Anschließend mit einer sehr intensiven snapcraft.yaml recherche mit snapcraft gebaut.

Die Dateien findet ihr hier auf der Github Seite : https://github.com/Tibsun75/kodi-omega-snap und mein Build im SnapStore : https://snapcraft.io/kodi-omega

Testen, herunterladen und Rückmeldungen sind gern erwünscht.

Einschränkungen : Aktuell läuft es ohne Hardware-Beschleunigung wie Vaapi usw. Vielleicht kann ja jemand einen Blick auf die snapcraft.yaml werfen, ein vainfo im snap selbst geht. Warum im snap selbst keine Hardwarebeschleunigung geht, da bin ich noch am herausfinden. Die Lernkurve war auf jeden Fall sehr steil 😉

sh4711

Anmeldungsdatum:
13. Februar 2011

Beiträge: 1125

Hey Tibsun75,

es folgt keine fertige Lösung (alle Ergebnisse ungetestet) aber vielleicht eine Hilfe wie du hier suchend weiter vorgehen kannst:

Erste Vermutung es hat etwas mit Berechtigungen zu tun. Also KI deines Vertrauens fragen:

Wenn ich unter Ubuntu ein snap baue muss ich da irgendetwas beachten, wenn dieses Hardware Beschleunigung nutzen möchte? Müssen da irgendwelche Rechte verteilt werden?

Antwort ChatGPT:

Ja, beim Erstellen eines Snap-Pakets unter Ubuntu, das Hardwarebeschleunigung nutzen möchte, gibt es einige spezielle Aspekte zu beachten, insbesondere in Bezug auf Berechtigungen und Zugriffsrechte. Hier sind die wichtigsten Punkte:

### 1. **Zugriff auf GPU und Hardwarebeschleunigung:**
   Snap-Pakete laufen in einer strengeren Sandbox-Umgebung als traditionelle Anwendungen, was bedeutet, dass sie standardmäßig eingeschränkten Zugriff auf Systemressourcen wie die GPU haben. Damit ein Snap GPU-Beschleunigung verwenden kann, muss explizit der Zugriff auf die entsprechenden Geräte und Funktionen in der Snap-Konfiguration gewährt werden.

   Um GPU-Zugriff zu ermöglichen, sind folgende Berechtigungen erforderlich:

   - **`devmode` oder spezifische Schnittstellen:**
     - Du kannst dein Snap im "devmode" bauen, um alle Einschränkungen zu umgehen, was jedoch für Produktionsumgebungen nicht empfohlen wird.
     - Eine bessere Lösung ist es, die entsprechenden Snap-Schnittstellen zu verwenden, um den Zugriff auf Hardware und Ressourcen zu erlauben. Dazu gehören:
       - `hardware-observe`: Für den Zugriff auf Hardware.
       - `removable-media`: Wenn die Anwendung auf Medien wie USB-Geräte zugreifen muss.
       - `opengl` oder `mesa`: Für OpenGL-Zugriff auf die GPU (wichtig für grafische Anwendungen).
       - `gpu`: Wird für den Zugriff auf die GPU genutzt, falls eine explizite Schnittstelle erforderlich ist.

     Beispiel für die Nutzung von OpenGL:
     ```yaml
     plugs:
       - opengl
       - pulseaudio
     ```

   - **`allow-sandbox`** (optional):
     Falls du GPU-Beschleunigung in einer isolierten Umgebung (Sandbox) verwenden möchtest, kann es erforderlich sein, die Snap-Sandbox explizit zu konfigurieren, um den Zugriff auf die GPU zu ermöglichen.

### 2. **Hardware- und OpenGL-Unterstützung:**
   Wenn du OpenGL oder eine andere GPU-beschleunigte Technologie (wie Vulkan oder CUDA) verwenden möchtest, musst du sicherstellen, dass dein Snap auch die richtigen Bibliotheken und Treiber umfasst. Abhängig von der Zielplattform und den verwendeten Technologien, könnte es notwendig sein, zusätzliche Pakete oder Treiber in dein Snap zu integrieren.

   Für OpenGL speziell gibt es eine Snap-Schnittstelle `opengl`, die es ermöglicht, die GPU über die standardisierten OpenGL-Bibliotheken zu nutzen:
   ```yaml
   plugs:
     - opengl
   ```

   Dies stellt sicher, dass das Snap die OpenGL-Bibliotheken verwenden kann, um Hardwarebeschleunigung zu nutzen.

### 3. **Zugriff auf GPU über X11 oder Wayland:**
   Für Desktop-Anwendungen, die Hardwarebeschleunigung benötigen, musst du sicherstellen, dass dein Snap auch Zugriff auf den X-Server oder Wayland hat, je nach dem, was auf dem System verwendet wird. Die notwendigen Snap-Schnittstellen wie `x11`, `wayland` und `opengl` sollten in deiner `snapcraft.yaml` definiert sein:
   ```yaml
   plugs:
     - x11
     - opengl
   ```

### 4. **Zusätzliche Berechtigungen für spezialisierte Hardware:**
   Falls deine Anwendung auf spezielle Hardware zugreifen muss (z. B. CUDA-kompatible GPUs), musst du sicherstellen, dass der Zugriff auf diese Geräte in den Snap-Schnittstellen definiert ist, oder du musst gegebenenfalls das Snap-Paket mit spezifischen Berechtigungen bauen.

### Beispiel einer Snapcraft-Konfiguration für GPU-Beschleunigung:
Hier ein einfaches Beispiel, wie du dein Snap konfigurieren könntest, wenn du OpenGL oder eine ähnliche Technologie verwenden möchtest:

```yaml
name: deine-anwendung
version: '1.0'
summary: Beispiel-Anwendung mit GPU-Unterstützung
description: |
  Eine Anwendung, die GPU-Beschleunigung benötigt.

base: core20
architectures:
  - amd64
  - arm64

plugs:
  - opengl
  - x11
  - pulseaudio

apps:
  deine-anwendung:
    command: bin/deine-anwendung
    plugs:
      - opengl
      - x11
      - pulseaudio
```

### 5. **Testen und Debuggen:**
   Nachdem du dein Snap erstellt hast, solltest du sicherstellen, dass die Hardwarebeschleunigung korrekt funktioniert. Du kannst das mit Tools wie `snap run --devmode deine-anwendung` oder durch Verwendung von `snap debug` und `snapcraft` testen.

### Fazit:
Um Hardwarebeschleunigung in einem Snap zu ermöglichen, musst du die richtigen Berechtigungen und Schnittstellen in der `snapcraft.yaml` konfigurieren, insbesondere die `opengl`, `x11` oder `mesa` Schnittstellen, je nachdem, welche Art von Hardwarebeschleunigung du benötigst. Achte darauf, dass dein Snap die richtigen Bibliotheken und Treiber enthält, und teste die Anwendung gründlich auf der Zielplattform.

Hier erscheint das Schlüsselwort opengl.
Suche mit der Suchmaschine deines Vertrauens nach "snap yaml opengl". Es werden unter anderem ausgeworfen:

  1. https://snapcraft.io/blog/lets-build-a-snap-together-a-complex-snapcraft-yaml-walkthrough

  2. https://forum.snapcraft.io/t/adding-opengl-gpu-support-to-a-snap/6273

  3. https://forum.snapcraft.io/t/is-it-possible-to-access-host-libgl-libraries-within-a-snap-confined-environment/37734

Im ersten Link wird das Schlüsselwort acceleration genutzt.
Suche nach : "snap" "yaml" "acceleration" ergibt unter anderem:

  1. https://snapcraft.io/blog/snapcraft-confinement-interfaces

  2. https://github.com/ogra1/kodi-pi-standalone/blob/master/snap/snapcraft.yaml

Der zweite Link verweist auf eine yaml-Datei auf github, wo vor ca. drei Jahren der GitHub-Nutzer ogra1 bereits eine yaml Datei für Kodi standalone kiosk snap with RPi MMAL hardware acceleration geschrieben hat. 😀

Schau bitte ob du hier etwas adaptieren kannst.

Viel Glück.

Gruß SH

Tibsun75

(Themenstarter)
Avatar von Tibsun75

Anmeldungsdatum:
9. Juni 2008

Beiträge: 238

sh4711 schrieb:

Hey Tibsun75,

Erste Vermutung es hat etwas mit Berechtigungen zu tun. Also KI deines Vertrauens fragen:

Wo bleibt dann der Lerneffekt ? 😉.

OpenGL Support ist in meinen Snap mit drin und wird von Kodi auch erkannt. Ich habe auch das vainfo Paket mit drin und liefert in der Snap Kommandozeile auch das Ergebnis wie ich es erwarte. Meine stage-packeges: Section ist mittlerweile fast 1,5 Seiten lang und und unter plugs: habe ich alles was man normalerweise benötigt mit drin harware-observe opengl usw. Und während der Entwicklung habe ich alles mit --devmode ausprobiert , leider hatte es keinen Erfolg. Aber trotzdem danke für die Informationen, ich werde mich noch weiter damit befassen.

Das Paket läuft auf jeden Fall auch mit einem schwachprünstigen Intel Atom Prozessor und man IpTV und HD-Filme gucken ohne das es lagt und stottert. Nur die CPU Belastung ist aktuell etwas höher als es sein sollte

sh4711

Anmeldungsdatum:
13. Februar 2011

Beiträge: 1125

Tibsun75 schrieb:

... OpenGL Support ist in meinen Snap mit drin und wird von Kodi auch erkannt.

Hätte ich wissen können, hätte ich mir nur deine yaml auf git angesehen 😬

Alternativ mal im Snapcraft-Forum nachfragen.

Tibsun75

(Themenstarter)
Avatar von Tibsun75

Anmeldungsdatum:
9. Juni 2008

Beiträge: 238

sh4711 schrieb:

...

Alternativ mal im Snapcraft-Forum nachfragen.

Also ich bin mit meinem Latein am Ende. Vaapi selbst und open-gl funktionieren im snap. Nur scheint es kodi nicht zu nutzen / nutzen zu wollen. Die KI meines Vertrauens liefert bei snapcraft nur mist. Es erfindet schalter und parameter die es nicht gibt.

Habe ein Post im Snapcraft Forum angelegt. Aber trotzdem danke.

Antworten |