BlinCT
BlinCT09 грудня 2018 р. 10:15

Підручник із SNAP 02. Зразок пакета прив’язок програми на основі Qt 5.11.0

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


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

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

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

пакет snap

Установка програми проста, перенесення на комп'ютер та консоль.
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 хостинг.

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50бали,
  • Рейтинг балів-4
m
  • molni99
  • 26 жовтня 2024 р. 01:37

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80бали,
  • Рейтинг балів4
m
  • molni99
  • 26 жовтня 2024 р. 01:29

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20бали,
  • Рейтинг балів-10
Останні коментарі
ИМ
Игорь Максимов22 листопада 2024 р. 11:51
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 жовтня 2024 р. 14:37
Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 жовтня 2024 р. 08:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 07:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 11:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi
Evgenii Legotckoi24 червня 2024 р. 15:11
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey115 листопада 2024 р. 06:04
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProject04 червня 2022 р. 03:49
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9Anonim25 жовтня 2024 р. 09:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Слідкуйте за нами в соціальних мережах