Международная конференция разработчиков
и пользователей свободного программного обеспечения

Как пропатчить KDE4 под OpenBSD

Vadim Zhukov, Moscow, Russia

LVEE Winter 2014

For a long time OpenBSD did not ship modern KDE versions. But during two last years situation changed. The talk is about what happened behind the scenes to make the working KDE4 platform usable by OpenBSD users. There will be covered such things as tweaking CMake modules, authentication support and so on. Also, there was a success in making KDE 3 and 4 co-exist that involved solving assorted technical problems. The experience gained during process could be useful for porting other software on OpenBSD as well as for porting in general.

KDE – крупный открытый проект, включающий в себя множество различных компонентов. Определённое множество этих компонентов составляет KDE Software Compilation (KDE SC):

* основные библиотеки, например: kdelibs, kdepimlibs;
* служебные приложения, например: lnusertemp, kded, kreadconfig;
* основные пользовательские приложения, например: Konqueror, Dolphin, KMail;
* компоненты среды KDE, например: kde-workspace (включает, среди прочего, KDM и KWin), kde-artwork;
* дополнительные компоненты: игры, обучающие приложения, всевозможные полезные утилиты.

За пределами KDE SC находится ряд связанных проектов, которые можно условно разделить на две группы:

* KDE Support: полусамостоятельные проекты, необходимые для сборки и работы KDE, например: сервер Akonadi, libattica, набор модулей для CMake.
* базирующиеся на KDE проекты, как-то: Calligra Suite, Digikam SC, KMyMoney, Amarok и т.д.

Портирование KDE состоит из следующих этапов:

1) Определение и портирование недостающих зависимостей. В случае OpenBSD это были весь KDE Support (включая сервер Akonadi), Virtuoso и ряд небольших библиотек. Моменты, которые хочется отметить:

* Akonadi: ни с одним бэкендом до сих пор не наблюдается 100% стабильной работы. В лучшем случае очередь запросов к серверу забивается из-за плохого планирования. Патчи, внесённые разработчиками Akonadi в SQLite-бэкенд, выглядят не совсем корректными, поэтому в OpenBSD добавлена возможность использовать штатный, из состава Qt4.

* Virtuoso: ряд встроенных в дистрибутив Virtuoso тестов на регрессии до сих пор не проходит, по различным причинам. Однако, во-первых, имеющегося функционала вполне хватает для нужд Nepomuk – единственного пользователя Virtuoso; а во-вторых, в KDE в данный момент ведётся работа над следующим поколением Nepomuk под кодовым названием Nepomuk, в которой значительно переделана и упрощена внутренняя архитектура данной подсистемы, в результате чего хранилище RDF-данных вроде Virtuoso становится не нужным.

* Модули CMake: часть этих модулей дублировала имеющиеся в поставке CMake (в портах OpenBSD силами dcoppa@ всегда есть актуальная версия), некоторые потребовали полного переписывания. А в случае с FindGettext.cmake пришлось писать обвязку для KDE4-портов, которая исправляет на лету файлы CMakeLists.txt, в которых производится компиляция файлов локализация.

2) Портирование kdelibs и других базовых компонентов. Этот процесс в OpenBSD, на самом деле, продолжается до сих пор. Все известные критичные проблемы устранены, для ряда подсистем обновлены или написаны “с нуля” специфичные для ОС реализации. На данный момент под OpenBSD в KDE недоступны следующие возможности:

* Solid: отсутствует поддержка OpenBSD, поэтому KDE не умеет получать данные об устройствах в системе.

* KDM: отсутствует поддержка multi-seat X (т.н. “быстрое переключение пользователей”) из-за ограничений базовой ОС.

* Незначительно ограничены возможности управления звуковой подсистемой из-за привязки некоторых компонентов Phonon к ALSA. Учитывая сравнительно малую проблемность звуковой подсистемы в OpenBSD (в большинстве случаев не требуется делать абсолютно ничего), данный пункт упомянут скорее для полноты картины.

3) Портирование остальных частей KDE SC. Выполнено практически полностью, со следующими оговорками:

* Отсутствует поддержка Web-камер и Jingle/GoogleTalk в Kopete.

* Порт Kalzium отмечен как BROKEN из-за проблем с зависимостями. Проблема обходится при использовании официального репозитория WIP-портов ( https://github.com/jasperla/openbsd-wip/ ), в котором имеются обновлённые, но не до конца проработанные порты.

* Не собираются биндинги к libattica. Проблема скорее в самом фреймворке Smoke, но, поскольку эти биндинги не требуются ни для одного портированного приложения, изучение проблемы отложено до лучших времён.

4) Обеспечение совместной установки приложений KDE 3 и 4. В случае с OpenBSD для этого была переименована часть каталогов, в которых хранятся данные приложений KDE 3. Благодаря централизованности управления списками каталогов с данными в KDE, данное решение удалось разработать и внедрить в течение всего двух месяцев, включая отладку и тестирование. Единственный побочный эффект – некоторое разрастание пользовательского профиля KDE, из-за того, что приложение может считать данные из одного локального конфигурационного файла, а записать данные уже по другому пути, внутри того же профиля – это связано с тем, что иерархия “системных” и “пользовательских” каталогов в KDE едина.

Следует отметить, что, в отличие от других немногочисленных ОС, предоставлявших возможность параллельной установки KDE 3 и 4, в OpenBSD это сделано без ущерба для целостности системной структуры каталогов: никаких /opt или /usr/local/kde3.

5) Обеспечение совместной работы приложений KDE 3 и 4. Это потребовало внесения изменений в пакеты kdelibs, kde-runtime и kde-workspaces, чтобы приложения KDE4 использовали альтернативные пути к различным хранилищам временных файлов: KDE создаёт каталоги вида “/var/tmp/kdecache-username”, а для доступа к ним использует символические ссылки в каталоге профиля пользователя. Данное изменение, в отличие от предыдущего, было внесено в KDE 4 с целью избежать ненужных проблем у пользователей KDE 3.

6) Обеспечение совместной сборки KDE 3 и 4. Пользователям, не собирающим пакеты самостоятельно, эта проблема совершенно не очевидна и не видна. Однако для менйтейнеров она составляла заметную головную боль: невозможность собрать KDE 3 при установленном KDE 4 и наоборот ставила крест на используемой в OpenBSD технике непрерывной сборки пакетов. Для решения этой проблемы пришлось убедить в её серьёзности Марка Эспи, главного разработчика инфраструктуры портов и, в прошлом, мейнтейнера портов KDE. Это было сделано на EuroBSDCon 2013, а уже через несколько недель появился патч для dpb(1), позволявший разграничивать сборку портов по так называемым тегам. Фактически, это самый крупный “костыль”, который был добавлен в OpenBSD в связи с портированием KDE.

В последние пару месяцев KDE 4 были подготовлены и частично внесены в дерево портов патчи, позволяющие KDE 3 собираться в присутствии KDE 4 и наоборот. Однако уже подготовленное полное решение в OpenBSD 5.5 не попадёт из-за близости момента заморозки дерева, которая должна произойти буквально в дни проведения нынешней конференции.

7) Портирование приложений за пределами KDE SC. На текущий момент подгтовлены в WIP-репозитории и по большей части отлажены порты для Calligra Suite, Digikam SC, K3b, Kdenlive, Kile, KMyMoney, KTorrent, Tellico и Yakuake. Их импортирование так же ожидается на следующей итерации цикла разработки OpenBSD. Желающие же могут уже сейчас подключить WIP-репозитории и собрать интересующие их порты самостоятельно.

Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license

Назад