У меня сейчас реально много работы, но игра в снапкрафтера мне помогает отвлечься и научиться чему-то новому. Чем ещё интересен процесс упаковки в пакет snap, так тем, что вы можете не дойти до логического конца, и не сможете представить пакет на стабильном канале Ubuntu Store. Игра где можно проиграть и нельзя сыграть снова - прикольное ощущение. После упаковки XnSketch очень хотел упаковать их флагмана семейства XnView MP.
Статья носит исторический характер. Автор программы сам начал паковать своё детище в flatpak формате и мне лучше самоустраниться. Данную программу вы легко найдёте в графическом установщике Ubuntu Software и KDE Discover.
Первое ложное впечатление было такое. Всё семейство программ автор пишет с использованием фреймворка Qt и с привычным набором дополнительных библиотек. Это действительно так, но отча́сти. Дьявол прячется в мелочах.
Ход мысли автора примерно был понятен, его попытка помочь сделать портативную версию помогала, но сто́ит отметить минусы. Автор программ Gougelet Pierre-Emmanuel сделал на сайте xnview.com даже deb пакеты, но только в них нет понятия зависимостей как класс. В какой системе такой пакет найдёт всё установленное по умолчанию? Непонятно.
Итак, зависимости программы придётся искать самому. К этому времени созрел до написания скрипта find_need_library.sh, который обходит все файлы в папке с программой и с помощью ldd узнаёт каких библиотек нет в данной системе (not found), а какие библиотеки есть, но они тянутся в систему (/usr/lib/). В обоих случаях все библиотеки должны быть найдены и добавлены в пакет snap с программой любым способом, так как технология snap - это самодостаточность.
Правильный способ - узнать из какого deb пакета идёт эта библиотека и добавить имя пакета в раздел stage-package, чтобы snapcraft при упаковке сам скачал-добавил. Но мысль разыскивать теперь имя пакета через dpkg -S /path/to/lib
заставляла опускать руки и пойти рабочим, но, возможно, не элегантным путём. Просто заставил find_need_library.sh скопировать нужный программе набор библиотек и поместил его в подкаталог lib/, который уже хранил библиотеки, которые автор программы посчитал достаточными для работы.
И всё! Программа запускалась корректно и корректно начала отображать картинки. Казалось, вот-вот и можно начинать паковать и выкладывать. Но когда обнаружил, что XnViewMP умеет ещё и видео показывать, то стало понятно, что программист не сам будет разбирать и декодировать видео. Обычно подключают к программе какой-либо знаменитый проект. В данном случае это оказался GStreamer версии 0.10. В данном месте совершил ошибку, которую даже и не понял. Всё что нужно было проекту GStreamer из пакетов типа gstreamer0.10-plugins-[good|bad|ugly] распаковал во всё тот же бедный подкаталог lib/. С помощью переменных окружения
export GST_PLUGIN_PATH="$SNAP/usr/bin/lib/" export GST_PLUGIN_PATH_1_0="$SNAP/usr/bin/lib/" export GST_PLUGIN_SYSTEM_PATH="$SNAP/usr/bin/lib/" export GST_PLUGIN_SYSTEM_PATH_1_0="$SNAP/usr/bin/lib/"
указал проекту GStreamer где брать его плагины и библиотеки. Но проблема была в том, что XnViewMP упорно выводил ошибку
ffmpegcolorspace-vo: size 1221120 is not a multiple of unit size 457920
а если увеличить уровень отладки,
export GST_DEBUG="*:3" export GST_DEBUG_NO_COLOR="1" export GST_DEBUG_COLOR_MODE="off" export GST_DEBUG_FILE="$SNAP_USER_COMMON/.debug/gst_debug_file.log"
то можно было найти и
ffmpegcolorspace-vo unknown output size
Но парадокс в том, что внутрь snap пакета поместил утилиты GStreamer, взяв их из deb пакета gstreamer0.10-tools. Среди утилит есть gst-launch-0.10 и она тестовый ролик проигрывала отлично! О чём говорит ошибка XnViewMP? Неизвестен размер output или что-то не так с его размером, который 1221120 не делиться нацело на размер юнита 457920. Не знал что делать и тупо решил с нуля записать нужные плагины и библиотеки GStreamer снова и по-другому. Дело в том, что кашу библиотек в lib/ сделал, скачав нужное с packages.ubuntu.com и, возможно, где-то ошибся с версиями. Взял чистую виртуальную систему Ubuntu 14.04 и в ней установил нужные пакеты GStreamer версии 0.10. Из системы аккуратно взял все плагины и библиотеки и перезаписал всё в многострадальном lib/. Сработало!
Так как XnViewMP - шикарный просмотрщик изображений и инструмент манипулирования ими, то нужен был тестовый набор изображений различных форматов. Ничего толкового не нашёл и пришлось, как обезьянке, скачать из Интернета различные форматы картинок. На просмотре картинки в формате eps, в Терминале мелькнуло сообщение о проблеме с утилитой gs. Давайте разбираться с Ghostscript!
Переменные окружения GS_FONTPATH и GS_LIB помогли указать на нужное.
В программе есть функционал отображения тегов EXIF, которое осуществляется через perl скрипт. С Пёрл знакомство состоялось при упаковке Perl Auto Connector и поэтому особых проблем не возникло.
Вы можете установить XnViewMP через Gnome Software или в Терминале - sudo snap install xnviewmp
Это настраиваемый и очень гибкий просмотрщик и менеджер изображений, который поможет в каталогизации ваших галерей. Есть функционал создания Обзорных листов, где на странице автоматически будут разложены в удобном вам порядке выделенные изображения. Можете делать скриншоты сайтов, заливать выбранные изображения на FTP сервер или отправлять по почте.
XnViewMP поддерживает русский язык, но мне влом делать новые скриншоты помимо тех, что нужно было залить в Ubuntu Store, так что .. английский. Инструмент пакетной обработки позволит легко провести манипуляцию над множеством картинок. Можно провести массовое переименование файлов с поддержкой регулярных выражений.
Есть функционал поиска подобных картинок, чтобы дубликаты не захламляли вашу коллекцию.
Остальные пакеты в Ubuntu Store.
Первый snap пакет. Java программа LanguageTool. sudo snap install languagetool
Второй snap пакет. GTK программа DeaDBeeF. sudo snap install deadbeef-vs
Третий snap пакет. Java программа TuxGuitar. sudo snap install tuxguitar-vs
Четвёртый snap пакет. Java программа Vuze. sudo snap install vuze-vs
Пятый snap пакет. Java программа Oracle SQL Developer Data Modeler. sudo snap install osddm
Шестой snap пакет. Менеджер сессий Perl Auto Connector. sudo snap install pac-vs
Седьмой snap пакет. DRAKON в snap. sudo snap install drakon
Восьмой snap пакет. XnSketch в snap. sudo snap install xnsketch