LINUX.ORG.RU

Помогите допилить патч для Qt Base 5.3.2

 , ,


0

3

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

[username@localhost utorrent-linux-x86_64]$ ./utserver
utserver: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.16' not found (required by utserver)

Винда хотя бы окошко выдавала.

Поэтому, когда я решил собирать бинарь с лаунчером Minecraft для сервера Ttyh, я решил не просто положить Qt5 в архив с программой, но ещё и собрать его с максимально старой версией GLIBC: последняя версия имеет обратную совместимость со всеми старыми, а старая версия не имеет совместимости с новыми. Сказано - сделано, вот бинарь (если кому-нибудь нужен набор патчей для запуска Qt5 в CentOS 5 - говорите мне, я дам вам их). Работает абсолютно во всех версиях Linux, где есть Glibc 2.4 (а это 2006 год), Java и OpenGL. Осталось только дошлифовать детали, и можно делать RPM/DEB/tar.gz и выкладывать в раздел «Скачать лаунчер» сервера.

Что это за детали? Сглаживание шрифтов, внешний вид в GNOME и курсор мыши выглядят как говно. Как это можно починить? 1). Пропатчить Qtbase так, чтобы он научился старым fontconfig и GTK. 2). Собрать новые fontconfig и GTK, а затем таскать их в архиве с программой. Дело в том что есть некий набор библиотек, который обязан оставаться во всех десктопных дистрибутивах Linux, даже если вышла новая версия. Например у многих из нас все программы собраны с libjpeg8, но в /usr/lib по-прежнему остаётся лежать libjpeg62 - для совместимости со старыми приложениями. Поэтому freetype и fontconfig я не таскаю с игрой. Если же я соберу лаунчер с fontconfig 2.5 и не положу библиотеку с игрой, то все дистры с fontconfig 2.4 заругаются и не запустят игру - а это RHEL 5 и SLES 10, у которых немало пользователей.

Однако я решил сначала попробовать исправить ошибку компиляции с fontconfig 2.4.

fontdatabases/fontconfig/qtfontconfigdatabase.cpp:94: error: 
'FC_WEIGHT_ULTRABLACK' was not declared in this scope

Вот тут советуют обновиться до fontconfig 2.5. Я же решил просто найти коммит, добавляющий эту строку кода, и откатить его. Вот список коммитов, изменяющих именно этот файл, вот тот самый, вот получившийся патч. Вот что получается:

fontdatabases/fontconfig/qfontconfigdatabase.cpp: In function ‘void populateFromPattern(FcPattern*)’:
fontdatabases/fontconfig/qfontconfigdatabase.cpp:400:34: error: ‘fonts’ was not declared in this scope
fontdatabases/fontconfig/qfontconfigdatabase.cpp:400:47: error: ‘i’ was not declared in this scope

Что дальше? Дальше добавлять поддержку GTK 2.10 в gtkstyle, либо класть более новый GTK в архив с игрой. Именно из-за того что таскать с собой GTK нехорошо Google прекратила поддержку Chrome в RHEL. Был скандал, Red Hat спросила Google «почему Windows XP 2001 года поддерживается, а RHEL 2011 нет?». А если ещё и заставить видеть старый CUPS и линковаться с Xinput 2 и PulseAudio через dlopen(), то вообще идеально будет, но для лаунчера они не нужны.

Системные курсоры не подхватываются скорее всего потому что нужно добавить параметр запуска, указывающий на директорию с ними. Мне пришлось делать аналогично для шрифтов, указав путь к ним с помощью QT_QPA_FONTDIR.

И наконец, RPM и DEB пакеты. Я собираюсь сделать всего лишь три зависимости: lsb-desktop, мета-пакеты для OpenGL и Java. Я решил выпендриться, и установить игру в /usr/games. В связи с этим вопросы:

  1. В Gentoo есть ибилд games-misc/games-envd, добавляющий директорию /usr/games (а по умолчанию её нет). Задумка такая: если юзерам на компе запрещено играть, то они не состоят в группе games. Есть ли такие пакеты в Fedora, Opensuse и Debian, и если да, как называются?
  2. Есть ли GID группы games, общий для всех дистрибутивов? Можно ли запаковать tar.gz так, чтобы root:games было прописано буковками, а не цифрами?
  3. Состоят ли пользователи в группе games по умолчанию, например в Ubuntu?
  4. Как называются мета-пакеты для OpenGL и Java? Допустим, у меня нет Java в системе, и пакет подтягивает openjdk. А если есть Oracle JDK, то openjdk тянуться не должен.

И да, если кому-нибудь нужен набор патчей для запуска Qt5 в CentOS 5, говорите мне, я дам вам их.

ZenitharChampion ★★★★★ ()

Состоят ли пользователи в группе games по умолчанию, например в Ubuntu?

$ groups user
user : user wheel

$ uname -a
Linux localhost 3.18.7-200.fc21.i686 #1 SMP Wed Feb 11 22:26:31 UTC 2015 i686 i686 i386 GNU/Linux

$ cat /etc/fedora-release 
Fedora release 21 (Twenty One)

И думаю везде примерно такая картина.

mandala ★★★★ ()

Есть ли GID группы games, общий для всех дистрибутивов?

Хз, у меня:

$ cat /etc/group | grep games
games:x:20:

mandala ★★★★ ()
Ответ на: комментарий от ZenitharChampion

А есть ли у тебя /usr/games на диске?

Да, пустая. Мне кажется вся иерархия файловой системы должна идти с одним из базовых пакетов дистрибутива.

mandala ★★★★ ()
Ответ на: комментарий от ZenitharChampion
Зависимости определены

================================================================================
 Package             Архитектура  Версия                   Репозиторий    Размер
================================================================================
Установка:
 dosbox              i686         0.74-13.fc21             fedora         778 k
 neverball           i686         1.6.0-4.fc21             fedora          54 M
Установка зависимостей:
 SDL_net             i686         1.2.8-6.fc21             fedora          23 k
 SDL_sound           i686         1.0.3-14.fc21            fedora          88 k
 lzma-sdk457         i686         4.57-8.fc21              fedora         101 k
 physfs              i686         2.0.3-4.fc21             fedora          59 k

Итого за операцию
================================================================================
Установить  2 пакета (+4 зависимых)

Объем загрузки: 55 M
Объем изменений: 251 M
Is this ok [y/d/N]: 

А трафик (3G) тю-тю до послезавтра, остался на голодном пайке. Щас один доcбокс посмотрю.

mandala ★★★★ ()
Ответ на: комментарий от mandala
~ $ la /usr/games/bin/
total 47M
-rwxr-x--- 1 root games 1.8M Jan 21 23:16 angband*
-rwxr-x--- 1 root games 3.2M Dec  7 08:34 desmume*
-rwxr-x--- 1 root games 2.7M Dec  7 08:34 desmume-cli*
-rwxr-x--- 1 root games 1.8M Sep 13 11:46 hengband*
-rwxr-x--- 1 root games 4.7M Sep 26 23:16 minetest*
-rwxr-x--- 1 root games 3.4M Sep 26 23:16 minetestserver*
-rwxr-x--- 1 root games 373K Sep 13 11:53 moria*
lrwxrwxrwx 1 root root    10 Sep 11 14:22 renpy -> renpy-6.18*
lrwxrwxrwx 1 root games   34 Feb 11 12:21 renpy-6.18 -> ../../lib/python-exec/python-exec2*
-rwxr-x--- 1 root games 8.4M Feb 11 20:06 stepmania*
-rwxr-x--- 1 root games 849K Sep  2 18:47 tuxkart*
-rwxr-x--- 1 root games  18M Jan 28 16:26 wesnoth*
-rwxr-x--- 1 root games 203K Sep 13 11:46 wrogue*
-rwxr-x--- 1 root games 1.7M Sep 13 11:47 zangband*
wakuwaku ★★★★ ()
Последнее исправление: wakuwaku (всего исправлений: 1)
Ответ на: комментарий от mandala

> Dosbox поставил, пригодится.

Накати ещё патчи mt32, ащеугар будет (видео). MT-32 это MIDI от синтезатора Roland, это здорово улучшает музыку в играх. Особенно от Lucas Arts и Sierra.

Вот только для пересборки dosbox с патчем dosbox-0.74-mt32-patch.diff нужно скачать много -devel пакетов. «yum-builddep dosbox» утянет весь трафик. И это ещё не всё, ещё нужны ROM-ы звуковой карточки Roland. Поэтому если будешь делать, делай когда будет доступен нормальный интернет.

Патчить добавлением %patch2 в spec-файл SRPM-ки, и зависимости от программы Munt (по первой ссылке даже есть RPM-ка - но я не пробовал).

> Как и следовало ожидать, /usr/games он не трогал.

Ясно - поставлю в /opt.

ZenitharChampion ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

когда будет доступен нормальный интернет.

Он в принципе не плохой, только ценник конский. И скорость режут по исчерпанию трафика. А за совет спасибо, попробую.

mandala ★★★★ ()
Ответ на: комментарий от ZenitharChampion

Кстати, mednafen туда же кладёт бинарник. Только там нет такого крапа, какой хочешь ты, тебе лучше в /opt к прочему говну.

У меня гента. А bundled-либы и статическая линковка — одни из худших вещей, которые можно придумать, я надеюсь ты отдаешь себе отчёт в этом.

wakuwaku ★★★★ ()
Ответ на: комментарий от wakuwaku

Вот поэтому я и создал тему :-) Я не хочу таскать с игрой fontconfig, а хочу чтобы использовался системный. Поэтому мне нужно собрать Qtbase с fontconfig 2.4. Ещё можно откатиться до Qt 5.3.0, в крайнем случае оставить всё как есть.

ZenitharChampion ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

Ты хочешь странное.

~ $ ls -la /usr/lib64/libfontconfig.so*
lrwxrwxrwx 1 root root   22 Dec 24 14:27 /usr/lib64/libfontconfig.so -> libfontconfig.so.1.8.0*
lrwxrwxrwx 1 root root   22 Dec 24 14:27 /usr/lib64/libfontconfig.so.1 -> libfontconfig.so.1.8.0*
-rwxr-xr-x 1 root root 247K Dec 24 14:27 /usr/lib64/libfontconfig.so.1.8.0*
~ $ 

Installed versions: 2.11.1-r2(1.0)(02:27:23 PM 12/24/2014)(-doc -static-libs ABI_MIPS="-n32 -n64 -o32" ABI_PPC="-32 -64" ABI_S390="-32 -64" ABI_X86=«32 64 -x32»)

wakuwaku ★★★★ ()

Лучше бы портировал его на LSB-шный Qt 4.2

annulen ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

Я не хочу таскать с игрой fontconfig, а хочу чтобы использовался системный.

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

1) Таскать *все* зависимости программы, кроме glibc и ее компонентов (libdl, librt, libpthread, libm и т.п.), и собирать с наиболее старой glibc, которую ты хочешь поддерживать.

2) Собирать пакет для дистрибутива, собранный по правилам дистрибутива для конкретной версии дистрибутива, и не таскать ничего.

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

annulen ★★★★★ ()
Ответ на: комментарий от annulen

Но мой бинарь работает у тебя уже сейчас. Остались сущие мелочи - сделать так, чтобы шрифты сглаживались.

ZenitharChampion ★★★★★ ()

Обновил бинарь - добавил 64-битную версию. Шрифты всё ещё не починены - патч для Fontconfig не «допилен». Системные курсоры по-прежнему не подхватываются. И я так и не получил отзывов про /usr/games в DEB-based - устанавливает ли ваш пакетный менеджер игры туда?

Следующий шаг - создание DEB-пакетов. Следующий - RPM-пакетов. И самый последний - создание образов виртуальных машин для i386 и x86_64 с готовой средой сборки Qt 5.4 + Glibc 2.4. Чтобы компилировать программы, работающие в системах 2006 года и новее (прям как для Висты). А также написание руководства с патчами (возможно, на хабрахабр - туда можно постить картиночки).

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 2)

Сделал DEB-пакеты (32-bit/64-bit). Минимальные системные требования: Debian «Etch» 4.0, Ubuntu 7.04.

ZenitharChampion ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.