Warum ich Pakete für den Snap-Store bereitstelle

Neben der AusweisApp2 habe ich mit PyMOL eine weitere Anwendung für den Snap-Store paketiert.

Was ist PyMOL?

PyMOL ist ein 3D-Viewer und Editor für Proteine und im Bereich der Protoemik eine Standardanwendung. Nahezu alle Bilder, welche die Struktur von Proteinen zeigen, wurden mit Hilfe von PyMOL erstellt. Ein Beispiel sieht man hier:

PDB 1ABI: Thrombin (Grüne und rote Oberflächen) mit Hirudin („Stick“-Darstellung) gerendert mit PyMOL (Eigene Arbeit).

Ein Problem der Software ist, dass sie in zwei Versionen vertrieben wird:

Eine kommerzielle Version mit Support und eine freie Version (MIT-Lizenz). Letztere enthält etwas weniger Features (z.B. kein Antialiasing in der OpenGL-Darstellung), für die meisten Benutzer ist diese aber vollkommen ausreichend. Die freie Version dürfte von den meisten Benutzern verwendet werden, da die günstigste Lizenz der kommerziellen Version $99 pro Jahr kostet.

Die kommerzielle Version wird mit einer kompletten Python-3.7-Umgebung ausgeliefert (Conda), die freie Version ist in vielen Distributionen verfügbar. Leider liefern gerade die LTS-Distributionen nur die Version 1.8 oder noch ältere Versionen aus. Als Anwender hat man also nur die Möglichkeit die kommerzielle Version einzusetzen oder das Programm aus dem Quellcode selbst zu bauen.

PyMOL selbst ist eine Mischung aus Python -und C++-Code. Die Oberfläche ist dabei in Python (PyQT, früher Tcl/Tk) realisiert, der grundlegende Code in C++. Die Anzahl der Abhängigkeiten ist zwar relativ klein, aber in dem Umfeld wo das Programm üblicherweise eingesetzt wird, finden sich nur sehr wenige versierte Linux-Benutzer, welche einfach so mal ein Programm kompilieren können. Vor allem, weil PyMOL ein externes Python-Modul und eine externe C++-Headerdatei benötigt, welche jeweils händisch installiert werden müssen.

Warum also ein Snap-Paket?

Ich habe das Paket eigentlich nur für knapp ein Dutzend Studenten an meiner Hochschule erstellt. Diese entsprechen dem oben genannten Umfeld und die Installation aus dem Quellcode ist für sie (noch) keine Option. Das Paket habe ich in den Store hochgeladen (Ich hätte auch die Snap-Datei direkt weitergeben können. Der Store ist also nicht unbedingt notwendig!), weil ich auch anderen Personen da draußen das Paket zur Verfügung stellen wollte (Wie richtig ich damit lag, kann man weiter unten lesen).

Durch den einfachen Aufbau der Snapcraft-YAML-Dateien konnte ich das Paket innerhalb weniger Stunden erstellen. Das externe Python-Modul lies sich z.B. mit wenigen Zeilen einbinden und direkt aus den Github-Quellen bauen:

pmw:
    plugin: python
    python-version: python3
    source-type: git
    source: https://github.com/schrodinger/pmw-patched.git
    stage-packages:
      - libpython3-dev
      - python3
    override-build:
      python3 setup.py --no-user-cfg install

Ich musste mir dadurch keine weiteren Gedanken darüber machen, wie ich das Modul einbinden kann. Bei einem Debian-Paket wären einige Verrenkungen notwendig geworden um dieses externe Modul und die Header-Datei einzubinden.

Der Hauptgrund warum ich ein Snap-Paket erstellt habe, war und ist die Tatsache dass ein solches Paket problemlos auf allen möglichen Distributionen eingesetzt werden kann. Als Entwickler oder Paket-Maintainer kann man sich komplett auf eine Laufzeitumgebung konzentrieren und kann sicherstellen, dass das Programm perfekt in dieser Umgebung funktioniert. Möglichen Problemen mit unterschiedlichen Versionen von Bibliotheken in den unterschiedlichen Distributionen wird dadurch komplett aus dem Weg gegangen.

Das größte Problem beim Erstellen von Snap-Paketen war mal wieder die Anpassung der Pfad. Ich musste z.B. das Shell-Skript zum Starten von PyMOL dahingehend anpassen, dass es erstens im korrekten Pfad nach dem Programm sucht und zweitens die Python3-Installation des Snap-Pakets benutzt.

Darum ein Snap-Paket!

Das ich mit der Erstellung des Pakets einen Nerv getroffen habe, habe einen Tag nach der Einstellung des Pakets in den Store erfahren. Ich habe keine 24 Stunden danach eine E-Mail eines Benutzers erhalten, welcher sich für die Erstellung des Pakets bedankt hat, weil er an der Kompilierung fast verzweifelt ist:

Dear Stefan,

Thanks so much for packaging pymol-oss as a snap!

I discovered this after a frustrating afternoon of failed cloning and compiling on Ubuntu 18.04.

The snap seems to work very well and it’s great to have the most recent version. I work on a large structural biology campus and will be communicating this to my colleagues. I imagine this will gain a lot of traction.

Best regards,

Darren

6 Kommentare

    • Und hier muss ich dir vehement widersprechen:

      Flatpak und Snap schließen eine gewaltige Lücke im Linux-Ökosystem, da sie es Entwicklern ermöglichen mit sehr wenig Aufwand Distributions-unabhängig ihre Programme zu vertreiben. Das ist ein Riesenfortschritt, da aktuell die Maintainer einer Distribution über das Wohl und Wehe eines Programms entscheiden und nicht der Entwickler selbst. Und für den normalen Benutzer, dem die ideologischen Grabenkämpfe am Arsch vorbeigehen, sind Flatpak und Snap ein Segen, da sie mit sehr wenig Aufwand an aktuelle Versionen ihrer Programme kommen.

      > Zumal ist Snap auch noch ziemlich langsam.
      Wenn du damit die Ladezeit eines Programms meinst, diese hat sich massiv verbessert. Beim ersten Start ist sie zwar immer noch langsamer als bei „nativen“ Programmen, beim wiederholten Start ist sie aber, je nach Programm, fast nicht von mehr von den „nativen“ Programmen zu unterscheiden.

    • Ich habe halt angefangen Snap-Pakete zu erstellen, weil ich einige im Einsatz habe und diese sehr gut funktionieren. Man kann sie vor allem wie normale Programme benutzen und ist nicht auf „flatpak run“ zum Starten angewiesen. Auch finde ich den Aufbau einer YAML-Datein ein wenig intuitiver. Bei JSON-Dateien muss man immer erst mal nachschauen ob diese noch korrekt ist.

Schreibe einen Kommentar zu Torsten Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.