Grüße an alle in der Fortsetzung des Themas zum eigenständigen Snap-Paket.
Seit der Veröffentlichung des vorherigen Artikels, in dem ich begonnen habe, Ihnen die Snap-Technologie aus meiner Erfahrung und Anwendung vorzustellen, ist viel Zeit vergangen. Die ganze Schuld der Zeit, des Geschäfts und der Faulheit war natürlich auch vorhanden)
Aber wir werden das Thema jetzt fortsetzen)
Als nächstes werden wir diese Technologie am Beispiel meiner Anwendung analysieren. Ich muss sagen, dass es noch nicht ganz fertig ist, aber etwas daran funktioniert. Einige Funktionen wurden überarbeitet. Unter dem Link können Sie es von meiner Dropbox herunterladen. Bisher ist die Anwendung noch nicht im offiziellen Store, da sie noch nicht vollständig fertig ist.
In den folgenden Artikeln werden wir uns ansehen, wie Sie die Anwendung in den Store stellen.
Projektstruktur:
/ --scripts ----bin ------projecttimer ----Qt --snap ----gui ----snapcraft.yaml
Die Installation der Anwendung ist einfach, die Übertragung auf den Computer und die Konsole.
sudo snap install --dangerous <Paketname>
Eine sehr wichtige Nuance, die Anwendung funktioniert nicht auf dem System, wenn Sie eine AMD-Karte haben und proprietäre Treiber installiert sind. Problem mit libdrm. Dies wird jetzt gelöst, aber im Moment sieht die Situation so aus.
name: managetime version: "0.1.0" summary: timer description: | Application for time management confinement: strict grade: stable architectures: [amd64] base: core18 apps: managetime: command: bin/projecttimer plugs: - home - unity7 - x11 - opengl - pulseaudio - wayland - network - desktop - desktop-legacy environment: XDG_RUNTIME_DIR: /run/user/1000 __EGL_VENDOR_LIBRARY_DIRS: $SNAP/etc/glvnd/egl_vendor.d:$SNAP/usr/share/glvnd/egl_vendor.d # XKB config XKB_CONFIG_ROOT: $SNAP/usr/share/X11/xkb # Qt Platform to Wayland #QT_QPA_PLATFORM: wayland QT_QPA_PLATFORM: xcb QTCHOOSER_NO_GLOBAL_DIR: 1 QT_SELECT: snappy-qt5 # Qt Modules LD_LIBRARY_PATH: $SNAP/Qt/5.11.0/gcc_64/lib:$LD_LIBRARY_PATH QT_PLUGIN_PATH: $SNAP/Qt/5.11.0/gcc_64/plugins QML2_IMPORT_PATH: $QML2_IMPORT_PATH:$SNAP/Qt/5.11.0/gcc_64/qml QT_QPA_PLATFORM_PLUGIN_PATH: $SNAP/Qt/5.11.0/gcc_64/plugins/platforms # XDG Config XDG_CONFIG_DIRS: $SNAP/etc/xdg:$SNAP/usr/xdg:$XDG_CONFIG_DIRS XDG_DATA_DIRS: $SNAP/usr/share:$XDG_DATA_DIRS # Font Config and themes FONTCONFIG_PATH: $SNAP/etc/fonts/conf.d FONTCONFIG_FILE: $SNAP/etc/fonts/fonts.conf # Tell libGL where to find the drivers LIBGL_DRIVERS_PATH: $SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/dri parts: managetime: plugin: dump source: scripts source-type: local build-attributes: - keep-execstack integration: plugin: nil stage-packages: - libc6 - zlib1g - libstdc++6 - libgcc1 - libglib2.0-0 - libpcre3 - libxext6 - libx11-6 - libxcb1 - libxau6 - libxdmcp6 - libbsd0 - libxdamage1 - libxfixes3 - libx11-xcb1 - libxcb-glx0 - libxcb-dri3-0 - libxcb-present0 - libxcb-dri2-0 - libxxf86vm1 - libxshmfence1 - libxcb-sync1 - libpulse-mainloop-glib0 - libpulse0 - libsystemd0 - liblzma5 - liblz4-1 - libgcrypt20 - libgpg-error0 - libwrap0 - libsndfile1 - libflac8 - libogg0 - libvorbis0a - libvorbisenc2 - libasyncns0 - libdbus-1-3 - libfontconfig1 - libfreetype6 - libpng16-16 - libexpat1 - libxi6 - libxrender1 - libdrm2 - libwayland-client0 - libwayland-cursor0 - libffi6 - libxkbcommon0 - libxcomposite1 - libgl1 - libgl1-mesa-dri - libgl1-mesa-glx - libdrm-common - libtinfo5
Beginnen wir mit einer kurzen Beschreibung:
Confinement: hat derzeit 3 Constraint-Modi, Strict, Classic und Devmode
- strict - strenge Sicherheitsbeschränkung des Systemkerns. Die Anwendung hat keinen Zugriff auf Systemschnittstellen, Benutzerverzeichnis, Netzwerkzugriff, Audiosystem usw.
- devmode - Debug-Modus. Wird für Entwickler verwendet.
- classic - Die Anwendung hat keine Einschränkungen. Analog - deb-Pakete, rpm. Das heißt, die Anwendung hat uneingeschränkten Zugriff auf das System.
base: core18 - Die Anwendung basiert auf core18, der für Schnittstellen im System und Anwendungen zuständig ist.
Anwendungen: - Teil der Anwendungskonfiguration
managetime: - der Name der Anwendung im System (z. B. in der Konsole bei der Suche)
Befehl: bin/projecttimer - was mit Namen aufgerufen wird (managetime). Es gibt auch eine Option, das Skript vor der Binärdatei zu platzieren, wenn Sie etwas im System tun müssen, bevor Sie die Anwendung starten.
Plugins: - Plugins, die die Anwendung verwendet. Bald sieht der Benutzer während der Installation ein Fenster auf dem Desktop, in dem er sieht, wo die Anwendung aufsteigt und was sie im System tut. Vereinfachen Sie das Verständnis der Funktionalität.
Es gibt Plugins, die automatisch verbunden werden, aber es gibt auch solche, die manuell verbunden werden müssen.
Mittwoch: - Umgebungseinstellung. Sie können dies in ein Bash-Skript einfügen und so etwas tun.
Befehl: myconfig.sh bin/projecttimer
aber ich habe es hierher gebracht, weil es einfacher ist zu sehen, was sich in den Umgebungseinstellungen befindet.
parts: managetime: plugin: dump source: scripts
All dies zusammen legt nahe, dass Sie die Anwendung erstellen müssen, z. B. aus dem Quellcode kompilieren, was bedeutet, dass Sie ein Plugin haben: cmake, qmake oder eine andere Option.
In meinem Fall wird alles aus dem Skriptverzeichnis kopiert und im Paket abgelegt. Es enthält sowohl die Anwendungsbinärdatei selbst als auch das erforderliche Qt
integration: plugin: nil stage-packages:
Dies ist der interessanteste Teil. In diesem Teil geben wir an, welche Pakete und deren Versionen benötigt werden, damit die Anwendung funktioniert, und nehmen sie isoliert vom Snap-Paket selbst heraus.
Möglicherweise fragen Sie sich, wie Sie alle Abhängigkeiten herausfinden können. Antwort, es gibt mehrere Möglichkeiten:
- ldd in der Anwendungskonsole und sehen, was es ausführen möchte. Natürlich haben die erforderlichen Abhängigkeiten andere Abhängigkeiten) ja, es macht Spaß, bis zum Ende zu kommen)
- Laufwerk in Abhängigkeitsschleife und Abhängigkeitsabhängigkeiten.
- Verwenden Sie die Anwendung von Interesse linuxdeployqt
Sie füttern die Anwendung mit einer Binärdatei, dem Pfad zu den Bibliotheken, die Sie für die Anwendung verwendet haben (ich spreche von Qt), und dieses Programm spuckt sowohl qt als auch system aus. Wenn ich mich nicht irre, wird diese App bald in Snap sein. So wird es für den Entwickler einfacher, damit zu arbeiten.
Im nächsten Artikel besprechen wir, wie Sie unsere Anwendung so einrichten, dass sie nicht nur von der Konsole, sondern auch von der Grafik aus gesucht und gestartet werden kann. Ein Snap-Paket mit einem Dienst und wie man ihn startet und beendet.
Bei Fragen oder Anregungen wenden Sie sich bitte an)
Danke allen.