BlinCT
BlinCTЖел. 9, 2018, 10:15 Т.Ж.

SNAP сабағы 02. Qt 5.11.0 негізіндегі snap пакет қолданбасының мысалы

Приветствую всех в продолжении темы, касающейся самодостаточного snap-пакета.
Прошло много времени с момента публикации предыдущей статьи, в которой я начал знакомить вас с технологией snap из своего опыта и применения. Вся вина времени, бизнеса и лени, конечно, тоже присутствовала)
Но мы сейчас продолжим тему)


Далее разберем эту технологию на примере моего приложения. Надо сказать, что он еще не полностью готов, но кое-что в нем работает. В нем переделывается некоторый функционал. Ниже по ссылке вы можете скачать его из моего дропбокса. Пока что приложения нет в официальном магазине, потому что оно еще не полностью готово.
В следующих статьях мы рассмотрим, как поставить приложение в магазин.

Структура проекта:

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

snap package

Установка приложения проста, перенос на компьютер и в консоль.
sudo snap install —dangerous <имя пакета>
Очень важный нюанс, приложение не будет работать в системе, если у вас карта AMD и установлены проприетарные драйвера. Проблема с либдрм. Это сейчас решается, но пока ситуация имеет такой вид.

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

Начнем с краткого описания:
confinement: в настоящее время имеет 3 режима ограничений, строгий, классический и devmode

  1. strict - строгое ограничение безопасности ядра системы. Приложение не будет иметь доступа к системным интерфейсам, пользовательскому каталогу, сетевому доступу, аудиосистеме и так далее.
  2. devmode - режим отладки. Используется для разработчиков.
  3. классический - Приложение не имеет ограничений. Аналог - пакеты deb, об/мин. То есть приложение имеет доступ к системе без ограничений.

base: core18 — Приложение основано на core18, отвечающем за интерфейсы в системе и приложениях.

Приложения: - часть конфигурации приложения
managetime: - название приложения в системе (например, в консоли при поиске)

команда: bin/projecttimer — что будет называться по имени (managetime). Также есть вариант разместить скрипт перед бинарником, если перед запуском приложения нужно что-то сделать в системе.

Плагины: - плагины, которые будет использовать приложение. Вскоре пользователь увидит на рабочем столе во время установки окно, в котором он увидит, куда будет лазить приложение и что оно будет делать в системе. Упрощение понимания функционала.

Есть плагины, которые подключаются автоматически, но есть и такие, которые нужно подключать вручную.

Среда: - настройка среды. Вы можете поместить это в сценарий bash и сделать что-то вроде этого.
команда: myconfig.sh bin/projecttimer
но я привел его сюда, так как проще посмотреть, что находится в настройках окружения.

parts:
    managetime:
        plugin: dump
        source: scripts

Это все вместе говорит о том, что вам нужно сделать сборку приложения, например, скомпилировать из исходников, а значит у вас будет плагин: cmake, qmake или другой вариант.
В моем случае все копируется из каталога scripts и помещается в package. Он содержит как сам бинарник приложения, так и необходимый Qt

integration:
        plugin: nil
        stage-packages:

вот это самое интересное, в этой части мы указываем какие пакеты и их версии нужны для работы приложения и выносим их в изоляцию от самого snap пакета.
Возможно, вы спросите, как узнать обо всех зависимостях. Отвечу, есть несколько вариантов:

  1. ldd в консоли приложения и посмотреть, что оно хочет работать. Само собой, зависимости, которые он требует, будут иметь другие зависимости) да, весело дойти до конца)
  2. диск в цикле зависимостей и зависимостях зависимостей.
  3. использовать интересующего приложения linuxdeployqt

Вы скармливаете приложению бинарник, путь к либам, которые вы использовали для приложения (я про Qt) и эта программа выплюнет вам и qt, и system. Если не ошибаюсь, это приложение скоро будет в снапе. Так разработчику будет проще с ним работать.

В следующей статье мы обсудим, как настроить наше приложение, чтобы его уже можно было искать и запускать не только из консоли, но и из графики. Snap-пакет с сервисом и как его запустить и остановить.

Если есть вопросы или предложения, обращайтесь)
Спасибо всем.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
Г

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:66ұпай,
  • Бағалау ұпайлары-1
t

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:33ұпай,
  • Бағалау ұпайлары-10
t

Qt - Тест 001. Сигналы и слоты

  • Нәтиже:52ұпай,
  • Бағалау ұпайлары-4
Соңғы пікірлер
G
GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssrАқп. 8, 2024, 6:43 Т.Қ.
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
F
FynjyШілде 22, 2024, 4:15 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCT
BlinCTМаусым 25, 2024, 1 Т.Ж.
Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
BlinCT
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
Evgenii Legotckoi
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

Бізді әлеуметтік желілерде бақылаңыз