BlinCT
BlinCTDec. 9, 2018, 10:15 a.m.

SNAP Tutorial 02. Sample snap package of Qt 5.11.0 based application

I would like to welcome everyone to the continuation of the topic concerning a self-sufficient snap package.
A lot of time has passed since the publication of the previous article in which I began to acquaint you with snap technology from my experience and application. All the fault of time, business, and laziness, of course, was also present)
But we will now continue the topic)


Next, we will analyze this technology on the example of my application. I must say that it is not yet fully prepared, but something that works in it. Some functionality is being remade in it. Below the link you can download it from my dropbox. So far, the application is not in the official store because it is not yet fully ready.
In the following articles we will look at how to put an application in the store.

Project structure:

/
--scripts
----bin
------projecttimer
----Qt
--snap
----gui
----snapcraft.yaml

snap package

Installing the application is simple, transfer to the computer and in the console.
sudo snap install —dangerous <имя пакета>
A very important nuance, the application will not work on the system if you have an AMD card and proprietary drivers are installed. Problem with libdrm. This is now being solved, but so far the situation has this form.

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

Let's start with a short description:
confinement: имеет currently 3 modes of restrictions, strict, classic and devmode

  1. strict - strict limitation of the safety of the system core. The application will not have access to the system interfaces, user directory, network access, audio system and so on.
  2. devmode - debug mode. Used for developers.
  3. classic - The application has no limitations. Analog - deb packages, rpm. That is, the application has access to the system without restrictions.

base: core18 - The application is based on core18 which is responsible for the interfaces in the system and applications.

Apps: -application configuration part
managetime: - the name of the application in the system (for example, in the console when searching)

command: bin/projecttimer — what will be called by the name (managetime). There is also an option to place a script in front of the binary if you need to do something in the system before launching the application.

Plugs: - plugins that the application will use. Soon the user will see on the desktop during installation a window in which he will see where the application will climb and what it will do in the system. Simplify the understanding of the functional.

There are plugins that connect automatically, but there are some that need to be connected manually.

Environment: - environment setting. You can put this into a bash script and do something like this.
command: myconfig.sh bin/projecttimer
but I brought it here, as it is easier to see what is in the environment settings.

parts:
    managetime:
        plugin: dump
        source: scripts

This all together says that you need to do to build the application, for example, compile from source, which means you will have a plugin: cmake, qmake or another option.
In my case, everything is copied from the scripts directory and placed in the package. It contains both the application binary itself and the necessary Qt

integration:
        plugin: nil
        stage-packages:

here is the most interesting, in this part we indicate which packages and their versions are needed for the application to work and put them in isolation of the snap package itself.
Perhaps you ask how to find out about all the dependencies. I will answer, there are several options:

  1. ldd in the console for the application and see what it wants to work. By itself, the dependencies that it requires will have other dependencies) yes, it's fun to get to the end)
  2. drive in a dependency cycle and dependency dependencies.
  3. use interesting application linuxdeployqt

You feed the application a binary, the path to the libs that you used for the application (I'm talking about Qt) and this program will spit out to you both qt and system. If I'm not mistaken, this application will be in the snap soon. So the developer will make it easier to work with him.

In the next article we will discuss how to configure our application so that it can already be searched and launched not only from the console, but also from the graphics. Snap packet with service and how to start and stop it.

If you have questions or suggestions, please contact)
Thanks to all.

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

Comments

Only authorized users can post comments.
Please, Log in or Sign up
г
  • ги
  • April 23, 2024, 3:51 p.m.

C++ - Test 005. Structures and Classes

  • Result:41points,
  • Rating points-8
l
  • laei
  • April 23, 2024, 9:19 a.m.

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:10points,
  • Rating points-10
l
  • laei
  • April 23, 2024, 9:17 a.m.

C++ - Тест 003. Условия и циклы

  • Result:50points,
  • Rating points-4
Last comments
k
kmssrFeb. 8, 2024, 6:43 p.m.
Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVADec. 25, 2023, 10:30 a.m.
Boost - static linking in CMake project under Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
J
JonnyJoDec. 25, 2023, 8:38 a.m.
Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
G
GvozdikDec. 18, 2023, 9:01 p.m.
Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Now discuss on the forum
G
GarApril 22, 2024, 5:46 a.m.
Clipboard Как скопировать окно целиком в clipb?
DA
Dr Gangil AcademicsApril 20, 2024, 7:45 a.m.
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
a
a_vlasovApril 14, 2024, 6:41 a.m.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев
Павел ДорофеевApril 14, 2024, 2:35 a.m.
QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
f
fastrexApril 4, 2024, 4:47 a.m.
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

Follow us in social networks