Как пропатчить KDE4 под OpenBSD
LVEE Winter 2014
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
Назад