Вітаю всіх у продовженні теми щодо самодостатнього snap-пакету.
Пройшло багато часу з моменту публікації попередньої статті, в якій я почав знайомити вас із технологією snap зі свого досвіду та застосування. Вся вина часу, бізнесу та ліні, звичайно, теж була присутня)
Але ми зараз продовжимо тему)
Далі розберемо цю технологію з прикладу мого додатка. Треба сказати, що він ще не повністю готовий, але дещо працює в ньому. У ньому переробляється певний функціонал. Нижче за посиланням ви можете завантажити його з мого дропбоксу. Поки що програми немає в офіційному магазині, тому що вона ще не повністю готова.
У наступних статтях ми розглянемо, як поставити програму в магазин.
Структура проекту:
/ --scripts ----bin ------projecttimer ----Qt --snap ----gui ----snapcraft.yaml
Установка програми проста, перенесення на комп'ютер та консоль.
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
- strict – суворе обмеження безпеки ядра системи. Додаток не матиме доступу до системних інтерфейсів, користувача каталогу, мережного доступу, аудіосистеми і так далі.
- devmode – режим налагодження. Використовується для розробників.
- Класичний - Додаток не має обмежень. Аналог - пакети 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 пакета.
Можливо, ви запитаєте, як дізнатися про всі залежності. Відповім, є кілька варіантів:
- ldd в консолі програми і подивитися, що вона хоче працювати. Само собою, залежності, які він вимагає, матимуть інші залежності) так, весело дійти до кінця)
- диск у циклі залежностей та залежностях залежностей.
- використовувати цікаву програму linuxdeployqt
Ви згодуєте з додатком бінарник, шлях до лібів, які ви використовували для програми (я про Qt) і ця програма виплюне вам і qt, і system. Якщо не помиляюся, ця програма скоро буде в снапі. Тож розробнику буде простіше з ним працювати.
У наступній статті ми обговоримо, як налаштувати нашу програму, щоб її вже можна було шукати і запускати не тільки з консолі, але і з графіки. Snap-пакет із сервісом і як його запустити та зупинити.
Якщо є питання чи пропозиції, звертайтесь)
Спасибі всім.