OutWiker 3.0.0.852 unstable и формат snap

OutWiker 3.0.0.852 unstable и формат snap

Привет! Сегодня я выложил следующую нестабильную версию OutWiker под номером 3.0.0.852. Если не считать исправления ошибок, то эта версия должна больше заинтересовать линуксоидов.

С версией под Linux всегда было сложно. Когда-то для распространения deb-пакетов OutWiker использовался PPA (Personal Packages Archive). В те давние времена приходилось привязываться к версиям библиотек, которые были в репозиториях Ubuntu разных версий. Но от версии к версии постоянно что-то ломалось, и поддерживать даже две-три версии этого дистрибутива было настоящим мучением. Это даже не ад DLL в Windows — это намного хуже.

После перехода на Python 3 и wxPython 4 такие deb-пакеты в принципе невозможно было создавать, потому что необходимых библиотек в стандартных репозиториях Ubuntu не стало, да и в имеющихся версиях библиотеки wxPython наблюдаются ошибки различной степени критичности. В последнее время для Ubuntu собирается deb-пакет, который содержит в себе бинарную сборку со всеми необходимыми для запуска библиотеками. Такая же сборка выкладывается в виде архива без привязки к формату deb, чтобы программу можно было бы запускать в дистрибутивах, которые не были порождены от Debian. К сожалению, успех запуска такой бинарной сборки гарантировать невозможно, потому что это грязный хак, который должен работать на всех дистрибутивах Linux только теоретически. Возникает вопрос, что делать?

OutWiker и snap

Одним из решений является формат snap. Этот формат, который в последнее время активно продвигает Canonical, должен решить сразу несколько проблем. Приложение, упакованное в формат snap, должно успешно запускаться независимо от того, в каком дистрибутиве Linux был создан такой пакет. А если уж приложение запустилось, то оно должно выполняться в своей песочнице со своей домашней папкой, причем приложение ограничено в действиях, которые может выполнять, но пользователь должен явно разрешить программе выполнять некоторые действия. Например, по умолчанию нет доступа к принтерам и подсоединенным к компьютеру флешкам.

У Canonical есть свой магазин приложений наподобие Google Play Market для Android. В этот магазин приложений могут быть добавлены программы в формате snap. Теперь у OutWiker там есть своя страничка — https://snapcraft.io/outwiker.

В последнее время я занимался упаковкой OutWiker в snap, теперь для установки OutWiker под Linux достаточно выполнить одну команду:

snap install —beta outwiker

Это даже проще, чем устанавливать приложение из PPA.

Затем, если вы хотите, чтобы OutWiker мог выводить заметки на принтер, нужно явно разрешить это делать с помощью команды

snap connect outwiker:cups-control

Аналогично можно разрешить программе доступ к флешкам:

snap connect outwiker:removable-media

На странице https://snapcraft.io/outwiker есть возможность установить OutWiker с помощью настольного приложения Desktop store.

В этом случае права на доступ к принтеру и флешкам можно установить через графический интерфейс, если нажать кнопку «Permissions».

Некоторые пользователи справедливо жаловались на дискриминацию линуксоидов — для Windows есть сборка, которая включает в себя все имеющиеся плагины, а под Linux такой сборки нет. Snap исправил эту несправедливость, он включает в себя сразу все стандартные плагины к OutWiker. Позже я добавлю плагины в бинарный deb-пакет.

Поскольку формат snap я только начал использовать, я мог не заметить какие-то проблемы, которые могут появиться при переходе к этому формату распространения. Из известных проблем — в данный момент не работает плагин ExternalTools, разбираться с ним я буду в ближайшее время.

Если вы впервые поставите OutWiker из snap, то заметите, что первый запуск будет долгий — это нормально, уже во второй раз OutWiker будет запускаться быстрее.

Сразу после первого запуска из snap программа запустится в девственно чистом виде — все настройки пропадут. Это связано с тем, что у каждой программы в формате snap своя домашняя папка. Для OutWiker она находится в ~/snap/outwiker/current/, а настройки OutWiker из snap хранятся в ~/snap/outwiker/current/.config/outwiker/. Туда вы можете скопировать свой рабочий outwiker.ini из ~/.config/outwiker/, и тогда при следующем запуске OutWiker будет настроен привычным вам образом.

В Snap Store вы можете устанавливать приложения из разных каналов — стабильные версии, бета-версии и edge-версии (самые свежие, что только существуют, можно сказать, что это альфа-версии). Каждый нестабильный релиз OutWiker попадает в канал beta, но в процессе разработки создаются сборки, которые попадают в канал edge. Если вам любопытно посмотреть на очередную версию программы до того, как она появится на сайте https://jenyay.net, то можете установить OutWiker из канала edge с помощью команды

snap install —edge outwiker

При этом имейте в виду, что в этой версии в процессе разработки может что-то ломаться.

Немного технических особенностей

Формат snap я начал изучать еще два месяца назад, разбираться с ним было не просто. Документация вроде бы есть, но она отвечает на вопрос «что можно делать?», но не на вопросы «как это работает?» и «зачем это надо?», поэтому изучать формат snap пришлось во многом методом тыка, чтением форумов и багтрекера.

С технической точки зрения пакеты snap представляют собой контейнеры LXC (Linux containers). Если вы работали с Docker, то здесь что-то подобное. Для окончательной сборки snap-пакета используется образ Ubuntu 16.04, благодаря чему обеспечивается повторяемость сборки, и должно гарантироваться выполнение приложения независимо от того, на какой системе snap собирали. По сути сборка snap представляет собой настройку образа контейнера с Ubuntu 16.04.

Формат snap мне понравился, но все-таки проблему ада библиотек он не решает полностью, и для этого формата иногда приходится исправлять исходную программу.

Появление snap-пакета OutWiker на свет сначала было легким. Все было хорошо кроме одной вещи — не работала проверка орфографии. В OutWiker для проверки орфографии используется библиотека pyenchant, которая является оболочкой над библиотекой enchant. Библиотека enchant может работать с разными движками для проверки орфографии, в том числе myspell, которая мне и нужна. Недавно автор pyenchant написал, что больше не будет поддерживать свое творение, и этот проект осиротел, что заставило меня задуматься о замене pyenchant, но в ближайшее время я этого делать не собирался.

Неработающая проверка орфографии меня удивила, библиотека просто не видела нужные словари. Я пытался собирать пакеты snap и так, и эдак, добавлял отладочную информацию. Никаких критических ошибок не возникало, библиотека успешно загружалась, но словари не видела. В качестве последнего средства спасения задал вопрос на форуме, посвященному созданию snap-пакетов. И там мне ответили, что да, это известная проблема библиотеки enchant, она не работает в snap, но есть способ ее запустить — нужно скомпилировать ее из исходников во время сборки snap-пакета. И даже подсказали, что так поступает программа poedit, и у нее можно подсмотреть код для сборки. Я так и сделал, и на тестовой программе все заработало. Но в OutWiker все осталось по-старому.

После долгих экспериментов оказалось, что библиотеку enchant еще использует движок WebKit, причем во время сборки snap-пакета он устанавливает его из репозитория Ubuntu, а то, что я в процессе сборки snap устанавливаю enchant из исходников, ни на что не влияет — в системе все равно используется версия из репозитория. Возможно, есть способ с помощью хаков заставить работать enchant, собранный из исходников, вместо enchant из репозитория, но я с этим заморачиваться уже не стал. Все сложилось вместе: и неработающий enchant, и неподдерживаемый pyenchant, поэтому я решил искать альтернативу библиотеке pyenchant.

Как ни странно, но библиотек проверки орфографии для Python нашлось не так много. Самая разумная альтернатива — это pyhunspell — очень тонкая оболочка над библиотекой hunspell (наследник myspell). Попробовал ее в тестовом snap-пакете — работает. Начал использовать ее в OutWiker — работает. Казалось бы, все хорошо, все довольны, но нет — не оказалось библиотеки pyhunspell под Windows. В интернете можно найти сборку под Windows, но старой версии и под старую версию Python. Чтобы собрать pyhunspell под Windows нужен компилятор C++, да и то сборка проходит не так гладко, как хотелось бы. Поэтому сейчас в OutWiker под Linux используется библиотека pyhunspell, а под Windows — по-прежнему pyenchant.

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

Я надеюсь, что snap решит основные проблемы, связанные с распространением OutWiker под Linux. Если все пойдет хорошо, то можно будет отказаться от бинарных deb-пакетов, оставив только архив с бинарной сборкой на всякий случай.

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

А теперь я жду от вас отзывов по работе OutWiker, установленного из snap, на мой взгляд это перспективный формат, если его получше распиарят.

PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.

Пожалуйста, оцените запись

УжасноПлохоТак себеХорошоОтлично (Количество голосов: 2, средняя оценка: 5,00)
Загрузка...

Leave a comment

Subscribe without commenting