Bug 38421

Summary: Программы не находят библиотеку libQt5Core.so
Product: Branch p9 Reporter: Aleksey Cheusov <vle>
Component: libqt5-coreAssignee: qa-team <qa-team>
Status: CLOSED FIXED QA Contact: qa-p9 <qa-p9>
Severity: normal    
Priority: P5 CC: andy, glebfm, lav, ldv, mike, vt, zerg
Version: не указана   
Hardware: x86_64   
OS: Linux   
See Also: https://bugzilla.altlinux.org/show_bug.cgi?id=35297
Attachments:
Description Flags
список установелнных на системе пакетов
none
strace от телеграма none

Description Aleksey Cheusov 2020-05-01 03:06:56 MSK
Created attachment 8750 [details]
список установелнных на системе пакетов

Ниже -- полный type script.

1)
Ставим пакет telegram-desktop

[root@ryzen ~]# apt-get install telegram-desktop
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  telegram-desktop
0 upgraded, 1 newly installed, 0 removed and 13 not upgraded.
Need to get 0B/16.5MB of archives.
After unpacking 39.7MB of additional disk space will be used.
Committing changes...
Preparing...                            ############################################# [100%]
Updating / installing...
1: telegram-desktop-2.0.1-alt1          ############################################# [100%]
Done.
[root@ryzen ~]#

2) Запускаем телеграм. Никогда не ставил его из пакетов дистрибутивов и систем :-)

$ telegram
telegram: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory
$ ldd `which telegram` | grep 'not found' | uniq
	libQt5Core.so.5 => not found
$

3) Проверяем консистентность pkgdb. Насколько я понимаю (я не силен в rpm), команда ниже должна проверить среди прочего и все зависимости. В смысле, что все они удовлетворены.

[root@ryzen ~]# rpm -Va --nofiledigest --nomtime --nogroup --nouser --nosize --nomode
missing     /var/run/o2cb
missing     /var/lock/sane
........P    /usr/bin/gnome-keyring-daemon
missing     /var/run/kernel
........P    /usr/bin/slock
missing     /var/run/winbindd
........P    /usr/libexec/gstreamer-1.0/gst-ptp-helper
missing     /var/run/setrans
missing     /var/run/autoipd
[root@ryzen ~]# 

Ничего подозрительного я не вижу. Много --no* просто для того, чтобы уменьшить количество нерелевантного мусора.

4) Смотрим, все ли в порядке с пакетом telegram-desktop. Вывод немного обрезан, чтобы не мусорить set-ами.

$ rpm -q --requires telegram-desktop | grep -i qt5core | cut -b -60
libQt5Core.so.5()(64bit) >= set:qgvtxYyY5WmiMrixqGS0gCFXdXQ0
libQt5Core.so.5(Qt_5)(64bit)
libQt5Core.so.5(Qt_5.12)(64bit)
$

Вроде все чики-пуки.

5) Находим нужный qt5core пакет и смотрим на него.

$ apt-cache show libqt5-core | grep '^Provides:' | grep -o '.libQt5Core.so.5.........' | head -2
 libQt5Core.so.5()(64bit)
 libQt5Core.so.5(Qt_5)(64
$

Вроде все на месте, но ни rpm ни apt ничегошеньки нам не сообщает о проблеме.

P.S.
На всякий случай проверяем, кому еще нужен qt5core из установленных пакетов.

$ rpm -qa --queryformat '%{NAME}\n[%{REQUIRES}\n]\n' | awk 'NF == 0 {pkg = ""; next} !pkg {pkg = $1; next} /libQt5Core/ {print pkg}' | uniq | sort
alterator-browser-qt5
apt-indicator
libdbusmenu-qt52
libkf5windowsystem
libqt5-hunspellinputmethod
libqt5-qml
libqt5-quick
libqt5-quickshapes
libqt5-svg
libqt5-virtualkeyboard
libqt5-x11extras
libqtxdg
packageinstall
qasmixer
qt5-imageformats
qt5-virtualkeyboard
rosa-imagewriter
rpminstall
screengrab
telegram-desktop
vlc-interface-qt
$

P.P.S
На всякий случай в приложении список установленных пакетов.
Comment 1 Aleksey Cheusov 2020-05-01 03:56:44 MSK
Дополнение: 
1) пакет libqt5-core установлен

[root@ryzen ~]# rpm -q libqt5-core
libqt5-core-5.12.8-alt2.x86_64
[root@ryzen ~]#

2) При попытке снести  libqt5-core, и apt и rpm ругаются, так что проблема не в них. Я поторопился с выводами.

3) файл libQt5Core.so есть, он не пустой, и это не мусор.

[root@ryzen ~]# objdump -p /usr/lib64/libQt5Core.so.5 | awk '/SONAME/ {print "soname: " $0; next} /Version definitions:/, NF == 0'
soname:   SONAME               libQt5Core.so.5
Version definitions:
1 0x01 0x00028eb5 libQt5Core.so.5
2 0x00 0x0dcbd2c9 Qt_5_PRIVATE_API
3 0x00 0x00058a25 Qt_5
4 0x00 0x058a2810 Qt_5.0
	Qt_5 
5 0x00 0x058a2811 Qt_5.1
	Qt_5.0 
6 0x00 0x058a2812 Qt_5.2
	Qt_5.1 
7 0x00 0x058a2813 Qt_5.3
	Qt_5.2 
8 0x00 0x058a2814 Qt_5.4
	Qt_5.3 
9 0x00 0x058a2815 Qt_5.5
	Qt_5.4 
10 0x00 0x058a2816 Qt_5.6
	Qt_5.5 
11 0x00 0x058a2817 Qt_5.7
	Qt_5.6 
12 0x00 0x058a2818 Qt_5.8
	Qt_5.7 
13 0x00 0x058a2819 Qt_5.9
	Qt_5.8 
14 0x00 0x08a28110 Qt_5.10
	Qt_5.9 
15 0x00 0x08a28111 Qt_5.11
	Qt_5.10 
16 0x00 0x08a28112 Qt_5.12
	Qt_5.11 

[root@ryzen ~]#

4) Щупаем телеграм
$ objdump -p /usr/bin/telegram | awk '/NEEDED/ && /Qt5Core/ {print; next} /required from libQt5Core/, 0'
  NEEDED               libQt5Core.so.5
  required from libQt5Core.so.5:
    0x08a28112 0x00 27 Qt_5.12
    0x00058a25 0x00 03 Qt_5
  required from libQt5Gui.so.5:
    0x0dcbd2c9 0x00 08 Qt_5_PRIVATE_API
    0x00058a25 0x00 02 Qt_5
$

5) и не только

$ ldd /usr/bin/rpminstall | grep 'not found' | uniq
	libQt5Core.so.5 => not found
$ ldd /usr/bin/alterator-browser-qt5 | grep 'not found' | uniq
	libQt5Core.so.5 => not found
$

6) ld.so.cache

$ ldconfig -p | grep Qt5Core
	libQt5Core.so.5.12 (libc6,x86-64, OS ABI: Linux 3.17.0) => /usr/lib64/libQt5Core.so.5.12
	libQt5Core.so.5 (libc6,x86-64, OS ABI: Linux 3.17.0) => /usr/lib64/libQt5Core.so.5
$
Comment 2 Michael Shigorin 2020-05-01 16:00:11 MSK
Даже не знаю, как ты умудрился такого добиться.
Коллеги, есть идеи?  У нас ловушки на разработчиков NetBSD? :)
Comment 3 Aleksey Cheusov 2020-05-01 16:09:10 MSK
(In reply to Michael Shigorin from comment #2)
> Даже не знаю, как ты умудрился такого добиться.
> Коллеги, есть идеи?  У нас ловушки на разработчиков NetBSD? :)

Я не виноват. Оно само у меня в руках рассыпается :-(
Comment 4 Aleksey Cheusov 2020-05-01 16:10:55 MSK
Дима ldv@. Кажется, loader по твоей части.
Comment 5 Aleksey Cheusov 2020-05-01 16:20:23 MSK
Created attachment 8752 [details]
strace от телеграма

Добавил strace от телеграма. Loader ищет libQt5Core в очень странных местах (-Wl,-rpath?), в итоге находит, но что-то ему в нем не нравится.
Comment 6 Aleksey Cheusov 2020-05-01 16:42:56 MSK
Нашел, что ему не нравится. Ядро ovz. С ядром std все работает. Судя по выводу

file /usr/lib64/libQt5Core.so.5.12.8

эта либа хочет ядро 3.17.0, а openvz -- 3.10.0

P.S.
С учетом того, что эта либа тянется даже альтератором, с тестированием плохо совсем :-( acc с ovz ядром нерабочий.
Comment 7 Michael Shigorin 2020-05-01 17:56:59 MSK
Можешь попробовать ovz-el7 (правда, это уже совсем другой ovz), но в любом разе предупреждать надо ;-)  Из альтового репозитория много что можно вылепить, только работать будут не все комбинации.
Comment 8 Dmitry V. Levin 2020-05-01 18:00:14 MSK
(In reply to Aleksey Cheusov from comment #6)
> Нашел, что ему не нравится. Ядро ovz. С ядром std все работает. Судя по
> выводу
> 
> file /usr/lib64/libQt5Core.so.5.12.8
> 
> эта либа хочет ядро 3.17.0, а openvz -- 3.10.0

А зачем она этого хочет?

P.S. В ovz есть возможность выставить версию ядра в контейнере.
Comment 9 Andrew Vasilyev 2020-05-01 18:09:19 MSK
(Ответ для Michael Shigorin на комментарий #7)
> Можешь попробовать ovz-el7 (правда, это уже совсем другой ovz),

  Так он его и поставил :-)

> но в любом
> разе предупреждать надо ;-)  Из альтового репозитория много что можно
> вылепить, только работать будут не все комбинации.

  Это серверная установка, никаких Qt/Telegram/Xorg/alterator не предусмотрено by design!
Comment 10 Aleksey Cheusov 2020-05-01 18:18:01 MSK
(In reply to Michael Shigorin from comment #7)
> Можешь попробовать ovz-el7 (правда, это уже совсем другой ovz), но в любом
> разе предупреждать надо ;-)  Из альтового репозитория много что можно
> вылепить, только работать будут не все комбинации.

Так у меня и есть альтовское ядро ovz-el7, и от него я ожидаю, что оно будет работать не только в консоли на сервере.
Comment 11 Aleksey Cheusov 2020-05-01 18:24:35 MSK
(In reply to Dmitry V. Levin from comment #8)
> (In reply to Aleksey Cheusov from comment #6)
> > Нашел, что ему не нравится. Ядро ovz. С ядром std все работает. Судя по
> > выводу
> > 
> > file /usr/lib64/libQt5Core.so.5.12.8
> > 
> > эта либа хочет ядро 3.17.0, а openvz -- 3.10.0
> 
> А зачем она этого хочет?
Не знаю. Надо спросить ментейнера пакета libqt5-core и тебя, который вроде делал сборочную ферму. Пальцем в небо: если бы сборочная ферма работала на вашем же ядре ovz, такой проблемы бы не возникло. Но это неточно :-)

> P.S. В ovz есть возможность выставить версию ядра в контейнере.
Речь не о версии ядра в контейнере, а в том, что я, будучи не совсем нормальным пользователем, хочу на десктопе иметь контейнеры. Для тестирования, сборки и разработки ПО под разные Линуксы. Время от времени я кое-что под openSuSE собираю, например. С lxc связываться не хочется, я openvz как-то больше доверяю. Тем более, что у вас он из коробки.
Comment 12 Aleksey Cheusov 2020-05-01 18:32:42 MSK
(In reply to Andrew Vasilyev from comment #9)
>   Это серверная установка, никаких Qt/Telegram/Xorg/alterator не
> предусмотрено by design!

Я внимательно прочитал новости "Девятой платформы". Нигде не сказано, что на десктопе нельзя использовать ovz ядро. Всегда работал openvz на десктопе. Для разработки ПО -- очень удобно. 

Ребята (mike@), я не согласен с подходом "Мы такое не поддерживаем, поэтому баг просто Resolved". Честно говоря "твои хотелки нам кажутся странными" -- не очень тянет на нормальное обоснование. Проблема чинится не слишком сложным образом -- отвязать Одну библиотеку от ядра 3.17, которое старше вашего ядра ovz-el7, которое из коробки.

Негодую
Comment 13 Dmitry V. Levin 2020-05-01 18:35:15 MSK
(In reply to Aleksey Cheusov from comment #11)
> (In reply to Dmitry V. Levin from comment #8)
> > (In reply to Aleksey Cheusov from comment #6)
> > > Нашел, что ему не нравится. Ядро ovz. С ядром std все работает. Судя по
> > > выводу
> > > 
> > > file /usr/lib64/libQt5Core.so.5.12.8
> > > 
> > > эта либа хочет ядро 3.17.0, а openvz -- 3.10.0
> > 
> > А зачем она этого хочет?
> Не знаю. Надо спросить ментейнера пакета libqt5-core

Давай спросим мантейнера пакета libqt5-core.
Comment 14 Sergey V Turchin 2020-05-01 20:34:02 MSK
Я просто так не могу сказать, какие именно задействованные фичи в Qt5 требуют ядра 3.17 .
Comment 15 Sergey V Turchin 2020-05-01 20:37:26 MSK
https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/global/minimum-linux_p.h
getrandom, уж извиняйте. ;-)
Comment 16 Sergey V Turchin 2020-05-01 20:40:06 MSK
(Ответ для Sergey V Turchin на комментарий #15)
> https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/global/minimum-linux_p.h
Там уже 4.11 выглядывает.
Comment 17 Sergey V Turchin 2020-05-01 20:46:19 MSK
Т.е. "шлите патчи", разве что.
Comment 18 Sergey V Turchin 2020-05-01 20:52:03 MSK
В qrandom.cpp можно отвязать, но я даже как не специалист вижу, что это не очень хорошая идея.

P.S.
Ну и с 4.11 потом ещё неизвестно, что будет. А новый Qt я уже скоро начну собирать.
Comment 19 Aleksey Cheusov 2020-05-01 21:16:02 MSK
(In reply to Sergey V Turchin from comment #18)
> В qrandom.cpp можно отвязать, но я даже как не специалист вижу, что это не
> очень хорошая идея.

Чем ядерный getentropy лучше, чем /dev/random? Поддежка /dev/urandom в qt из коробки. Патч на один символ :-)

> P.S.
> Ну и с 4.11 потом ещё неизвестно, что будет. А новый Qt я уже скоро начну
> собирать.

До p10 еще дожить надо
Comment 20 Andrew Vasilyev 2020-05-01 21:41:00 MSK
(Ответ для Sergey V Turchin на комментарий #14)
> Я просто так не могу сказать, какие именно задействованные фичи в Qt5
> требуют ядра 3.17 .

getentropy, renameat2 и statx
Все эти вызовы есть в ядре OVZ7
Патч для Qt: https://phabricator.kde.org/R257:a029f2957e947f6e32fe8a595edb0ac553654e90
Comment 21 Aleksey Cheusov 2020-05-01 21:48:59 MSK
(In reply to Andrew Vasilyev from comment #20)
> (Ответ для Sergey V Turchin на комментарий #14)
> > Я просто так не могу сказать, какие именно задействованные фичи в Qt5
> > требуют ядра 3.17 .
> 
> getentropy, renameat2 и statx
> Все эти вызовы есть в ядре OVZ7
> Патч для Qt:
> https://phabricator.kde.org/R257:a029f2957e947f6e32fe8a595edb0ac553654e90

Отлично! Есть надежда увидеть это в p9?

Но даже если бы не было 1) /dev/{u,}random (Линуксовый же!) мне кажется вполне адекватным решением. Он не должен быть хуже по качеству собственно getentropy 2) Я глянул на qfilesystemengine_unix.cpp/FileSystemEngine::renameFile. Честно скажу, я не вижу ничего страшного даже в отключении этой фичи. Два сискола вместо одного. Учитывая то, о чем мы говорим (работа с файловой системой) разницы в производительности qt/kde не будет никакой.
Comment 22 Aleksey Cheusov 2020-05-01 21:50:47 MSK
*** Bug 38393 has been marked as a duplicate of this bug. ***
Comment 23 Vitaly Chikunov 2020-05-01 22:41:15 MSK
export LD_ASSUME_KERNEL=3.17.0 ?
Comment 24 Aleksey Cheusov 2020-05-01 23:26:53 MSK
(In reply to Vitaly Chikunov from comment #23)
> export LD_ASSUME_KERNEL=3.17.0 ?

Похоже на нормальный workaround, но нет.

0 cheusov>env LD_ASSUME_KERNEL=3.17.0 /usr/bin/telegram
/usr/bin/telegram: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory

cheusov@ryzen.chizhovka.net |
127 cheusov>env LD_ASSUME_KERNEL=3.17.0 ldd /usr/bin/telegram | grep 'not found'
	libQt5Core.so.5 => not found
	libQt5Core.so.5 => not found
	libQt5Core.so.5 => not found
	libQt5Core.so.5 => not found
	libQt5Core.so.5 => not found
	libQt5Core.so.5 => not found

cheusov@ryzen.chizhovka.net |
0 0 cheusov>
Comment 25 Sergey V Turchin 2020-05-06 11:02:41 MSK
(Ответ для Andrew Vasilyev на комментарий #20)
> Патч для Qt:
> https://phabricator.kde.org/R257:a029f2957e947f6e32fe8a595edb0ac553654e90
Дык, это тупое отрывание.

(Ответ для Andrew Vasilyev на комментарий #20)
> getentropy, renameat2 и statx
> Все эти вызовы есть в ядре OVZ7
Тогда проще номер требуемой версии пропатчить.
Comment 26 Aleksey Cheusov 2020-05-06 11:57:41 MSK
Я уверен, вопрос лишь в желании. Технических возможностей полно разных. Они перечислены здесь
Comment 27 Sergey V Turchin 2020-05-06 12:26:27 MSK
Я бы statx оторвал, а для остального занизил версию до 3.10 .
Comment 28 Sergey V Turchin 2020-05-06 12:57:43 MSK
(Ответ для Sergey V Turchin на комментарий #27)
> Я бы statx оторвал
В
https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/global/minimum-linux_p.h
есть коментарий, исходя из которого отрывать нет смысла.
https://code.woboq.org/userspace/glibc/sysdeps/unix/sysv/linux/statx.c.html

> , а для остального занизил версию до 3.10 .
Т.е. только это сделаю.
Comment 30 Andrew Vasilyev 2020-05-06 13:53:48 MSK
(Ответ для Sergey V Turchin на комментарий #28)
> (Ответ для Sergey V Turchin на комментарий #27)
> > Я бы statx оторвал
> В
> https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/global/minimum-
> linux_p.h
> есть коментарий, исходя из которого отрывать нет смысла.
> https://code.woboq.org/userspace/glibc/sysdeps/unix/sysv/linux/statx.c.html
> 
> > , а для остального занизил версию до 3.10 .
> Т.е. только это сделаю.

  Более глубокое исследование показало, что в RHEL7 (и, следовательно, в OVZ7) нет statx и getentropy (есть только renameat2 и getrandom)!
  Так что их нужно отключить, чтобы работало с 3.10. 

  Ну или написать, что с OVZ7 libQt5Core не работает.
Comment 31 Sergey V Turchin 2020-05-06 15:05:15 MSK
(Ответ для Andrew Vasilyev на комментарий #30)
>   Более глубокое исследование показало, что в RHEL7 (и, следовательно, в
> OVZ7) нет statx 
С этим нет проблем. В glibc определяется, "есть он или нет".

> и getentropy
А это я без авторитетного одобрения отключать не хочу.
Если LDV или ещё кто одобрит, то я не против.

Код можно глянуть тут
https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/global/qrandom.cpp#n100
Comment 32 Sergey V Turchin 2020-05-06 17:43:26 MSK
https://github.com/boostorg/uuid/issues/92#issuecomment-480826628
Тут, например, пишут, что в 3.10.0-957.1.3.el7 сбэкпортили getrandom
Comment 33 Sergey V Turchin 2020-05-06 17:55:51 MSK
(Ответ для Andrew Vasilyev на комментарий #30)
>   Более глубокое исследование показало, что в RHEL7 (и, следовательно, в
> OVZ7) нет statx и getentropy (есть только renameat2 и getrandom)!
Так, getrandom и нужен
https://code.woboq.org/userspace/glibc/sysdeps/unix/sysv/linux/getentropy.c.html
Comment 34 Vitaly Lipatov 2020-06-24 12:08:44 MSK
Для истории добавлю, что с OVZ6 была подобная история:
https://bugzilla.altlinux.org/show_bug.cgi?id=35297
Comment 35 Vitaly Lipatov 2020-06-26 22:05:14 MSK
Ну и история про подобную проблему с WSL, которая ещё раз подтверждает, что разработчики Qt очень недальновидно испортили совместимость, нарушив уровень абстракции (минуя glibc, выставили зависимость на версию ядра) и всё ради использования системного вызова getrandom, который долго не мог найти дорогу в glibc.
https://github.com/microsoft/WSL/issues/3023