Summary: | Программы не находят библиотеку libQt5Core.so | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | Branch p9 | Reporter: | Aleksey Cheusov <vle> | ||||||
Component: | libqt5-core | Assignee: | 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: |
|
Дополнение: 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 $ Даже не знаю, как ты умудрился такого добиться. Коллеги, есть идеи? У нас ловушки на разработчиков NetBSD? :) (In reply to Michael Shigorin from comment #2) > Даже не знаю, как ты умудрился такого добиться. > Коллеги, есть идеи? У нас ловушки на разработчиков NetBSD? :) Я не виноват. Оно само у меня в руках рассыпается :-( Дима ldv@. Кажется, loader по твоей части. Created attachment 8752 [details]
strace от телеграма
Добавил strace от телеграма. Loader ищет libQt5Core в очень странных местах (-Wl,-rpath?), в итоге находит, но что-то ему в нем не нравится.
Нашел, что ему не нравится. Ядро ovz. С ядром std все работает. Судя по выводу file /usr/lib64/libQt5Core.so.5.12.8 эта либа хочет ядро 3.17.0, а openvz -- 3.10.0 P.S. С учетом того, что эта либа тянется даже альтератором, с тестированием плохо совсем :-( acc с ovz ядром нерабочий. Можешь попробовать ovz-el7 (правда, это уже совсем другой ovz), но в любом разе предупреждать надо ;-) Из альтового репозитория много что можно вылепить, только работать будут не все комбинации. (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 есть возможность выставить версию ядра в контейнере. (Ответ для Michael Shigorin на комментарий #7) > Можешь попробовать ovz-el7 (правда, это уже совсем другой ovz), Так он его и поставил :-) > но в любом > разе предупреждать надо ;-) Из альтового репозитория много что можно > вылепить, только работать будут не все комбинации. Это серверная установка, никаких Qt/Telegram/Xorg/alterator не предусмотрено by design! (In reply to Michael Shigorin from comment #7) > Можешь попробовать ovz-el7 (правда, это уже совсем другой ovz), но в любом > разе предупреждать надо ;-) Из альтового репозитория много что можно > вылепить, только работать будут не все комбинации. Так у меня и есть альтовское ядро ovz-el7, и от него я ожидаю, что оно будет работать не только в консоли на сервере. (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 как-то больше доверяю. Тем более, что у вас он из коробки. (In reply to Andrew Vasilyev from comment #9) > Это серверная установка, никаких Qt/Telegram/Xorg/alterator не > предусмотрено by design! Я внимательно прочитал новости "Девятой платформы". Нигде не сказано, что на десктопе нельзя использовать ovz ядро. Всегда работал openvz на десктопе. Для разработки ПО -- очень удобно. Ребята (mike@), я не согласен с подходом "Мы такое не поддерживаем, поэтому баг просто Resolved". Честно говоря "твои хотелки нам кажутся странными" -- не очень тянет на нормальное обоснование. Проблема чинится не слишком сложным образом -- отвязать Одну библиотеку от ядра 3.17, которое старше вашего ядра ovz-el7, которое из коробки. Негодую (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. Я просто так не могу сказать, какие именно задействованные фичи в Qt5 требуют ядра 3.17 . https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/global/minimum-linux_p.h getrandom, уж извиняйте. ;-) (Ответ для Sergey V Turchin на комментарий #15) > https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/global/minimum-linux_p.h Там уже 4.11 выглядывает. Т.е. "шлите патчи", разве что. В qrandom.cpp можно отвязать, но я даже как не специалист вижу, что это не очень хорошая идея. P.S. Ну и с 4.11 потом ещё неизвестно, что будет. А новый Qt я уже скоро начну собирать. (In reply to Sergey V Turchin from comment #18) > В qrandom.cpp можно отвязать, но я даже как не специалист вижу, что это не > очень хорошая идея. Чем ядерный getentropy лучше, чем /dev/random? Поддежка /dev/urandom в qt из коробки. Патч на один символ :-) > P.S. > Ну и с 4.11 потом ещё неизвестно, что будет. А новый Qt я уже скоро начну > собирать. До p10 еще дожить надо (Ответ для Sergey V Turchin на комментарий #14) > Я просто так не могу сказать, какие именно задействованные фичи в Qt5 > требуют ядра 3.17 . getentropy, renameat2 и statx Все эти вызовы есть в ядре OVZ7 Патч для Qt: https://phabricator.kde.org/R257:a029f2957e947f6e32fe8a595edb0ac553654e90 (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 не будет никакой. *** Bug 38393 has been marked as a duplicate of this bug. *** export LD_ASSUME_KERNEL=3.17.0 ? (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> (Ответ для Andrew Vasilyev на комментарий #20) > Патч для Qt: > https://phabricator.kde.org/R257:a029f2957e947f6e32fe8a595edb0ac553654e90 Дык, это тупое отрывание. (Ответ для Andrew Vasilyev на комментарий #20) > getentropy, renameat2 и statx > Все эти вызовы есть в ядре OVZ7 Тогда проще номер требуемой версии пропатчить. Я уверен, вопрос лишь в желании. Технических возможностей полно разных. Они перечислены здесь Я бы statx оторвал, а для остального занизил версию до 3.10 . (Ответ для 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 . Т.е. только это сделаю. (Ответ для 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 не работает. (Ответ для Andrew Vasilyev на комментарий #30) > Более глубокое исследование показало, что в RHEL7 (и, следовательно, в > OVZ7) нет statx С этим нет проблем. В glibc определяется, "есть он или нет". > и getentropy А это я без авторитетного одобрения отключать не хочу. Если LDV или ещё кто одобрит, то я не против. Код можно глянуть тут https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/global/qrandom.cpp#n100 https://github.com/boostorg/uuid/issues/92#issuecomment-480826628 Тут, например, пишут, что в 3.10.0-957.1.3.el7 сбэкпортили getrandom (Ответ для Andrew Vasilyev на комментарий #30) > Более глубокое исследование показало, что в RHEL7 (и, следовательно, в > OVZ7) нет statx и getentropy (есть только renameat2 и getrandom)! Так, getrandom и нужен https://code.woboq.org/userspace/glibc/sysdeps/unix/sysv/linux/getentropy.c.html Для истории добавлю, что с OVZ6 была подобная история: https://bugzilla.altlinux.org/show_bug.cgi?id=35297 Ну и история про подобную проблему с WSL, которая ещё раз подтверждает, что разработчики Qt очень недальновидно испортили совместимость, нарушив уровень абстракции (минуя glibc, выставили зависимость на версию ядра) и всё ради использования системного вызова getrandom, который долго не мог найти дорогу в glibc. https://github.com/microsoft/WSL/issues/3023 |
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 На всякий случай в приложении список установленных пакетов.