LINUX.ORG.RU

AstraLinux. Проблемы с OpenGL и драйверами Nvidia

 , ,


0

2

Всем доброго времени суток. Возникла достаточно специфическая проблема: При установке сначала Qt, а впоследствии и драйверов Nvidia (с официального сайта AstraLinux) при запуске qtcreator из xterm появляется следующее сообщение:

user@astra:~$ qtcreator
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
Unrecognized OpenGL version
Unrecognized OpenGL version

Вывод glxgears

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  153 (GLX)
  Minor opcode of failed request:  3 (X_GLXCreateContext)
  Value in failed request:  0x0
  Serial number of failed request:  35
  Current serial number in output stream:  37

Результаты выполнения

sudo ldconfig -p | grep -i gl.so

Со снесенными драйверами :

        libvgagl.so.1 (libc6) => /usr/lib32/libvgagl.so.1
        libfltk_gl.so.1.1 (libc6) => /usr/lib32/libfltk_gl.so.1.1
        libQt5OpenGL.so.5 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5
        libQtOpenGL.so.4 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libQtOpenGL.so.4
        libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so.1
        libGL.so.1 (libc6, ABI ОС: Linux 2.4.20) => /usr/lib32/libGL.so.1
        libEGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so.1

С установленными драйверами:

        libvgagl.so.1 (libc6) => /usr/lib32/libvgagl.so.1
        libfltk_gl.so.1.1 (libc6) => /usr/lib32/libfltk_gl.so.1.1
        libQt5OpenGL.so.5 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5
        libQtOpenGL.so.4 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libQtOpenGL.so.4
        libOpenGL.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libOpenGL.so.0
        libOpenGL.so.0 (libc6) => /usr/lib32/libOpenGL.so.0
        libOpenGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libOpenGL.so
        libOpenGL.so (libc6) => /usr/lib32/libOpenGL.so
        libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so.1
        libGL.so.1 (libc6,x86-64) => /usr/lib/libGL.so.1
        libGL.so.1 (libc6, ABI ОС: Linux 2.4.20) => /usr/lib32/libGL.so.1
        libGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so
        libEGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so.1
        libEGL.so.1 (libc6) => /usr/lib32/libEGL.so.1
        libEGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so
        libEGL.so (libc6) => /usr/lib32/libEGL.so

Однако, занимательный момент. Если сначала поставить Qtcreator, а потом уже только драйвера, то вроде бы даже Qt запускается!

Подскажите, добрые люди, почему оно конфликтует, и как от этого избавиться?


Так же, небольшое дополнение, как мне приходится ломать зависимости чтобы установить драйвер nvidia :


user@astra:~/Зaгpyзки$ sudo dpkg -i nvidia-drivers-astra-smolensk-1.5-375.20-signed.deb
Bыбop paнee нe выбpaннoгo пaкeтa nvidia-drivers-astra-smolensk-1.5.
(Чтeниe бaзы дaнныx … нa дaнный мoмeнт ycтaнoвлeнo 125607 фaйлoв и кaтaлoгoв.)
Pacпaкoвывaeтcя пaкeт nvidia-drivers-astra-smolensk-1.5 (из фaйлa nvidia-drivers-astra-smolensk-1.5-375.20-signed.deb) …
dpkg: oшибкa пpи oбpaбoткe пapaмeтpa nvidia-drivers-astra-smolensk-1.5-375.20-signed.deb (--install):
 пoпыткa пepeзaпиcaть «/usr/lib/x86_64-linux-gnu/libGL.so», кoтopый yжe имeeтcя в пaкeтe libgl1-mesa-dev:amd64 10.5.9-2astra2
update-initramfs: Generating /boot/initrd.img-4.2.0-23-pax
update-initramfs: Generating /boot/initrd.img-4.2.0-23-generic
Oбpaбaтывaютcя тpиггepы для desktop-file-utils …
Oбpaбaтывaютcя тpиггepы для man-db …
Oбpaбaтывaютcя тpиггepы для libc-bin …
ldconfig deferred processing now taking place
Πpи oбpaбoткe cлeдyющиx пaкeтoв пpoизoшли oшибки:
 nvidia-drivers-astra-smolensk-1.5-375.20-signed.deb
user@astra:~/Зaгpyзки$ sudo dpkg -P --force-depends libgl1-mesa-dev
dpkg: libgl1-mesa-dev:amd64: имeютcя пpoблeмы c зaвиcимocтями, нo пo вaшeмy yкaзaнию
oн вcë paвнo бyдeт yдaлëн:
 libqt4-opengl-dev зaвиcит oт libgl1-mesa-dev.
 qtbase5-dev:amd64 зaвиcит oт libgl1-mesa-dev | libgl-dev, oднaкo:
  Πaкeт libgl1-mesa-dev:amd64 бyдeт yдaлëн.
  Πaкeт libgl-dev нe ycтaнoвлeн.
  Πaкeт libgl1-mesa-dev:amd64 пpeдocтaвляeт libgl-dev, нo дoлжeн быть yдaлëн.
 libglu1-mesa-dev зaвиcит oт libgl1-mesa-dev | libgl-dev, oднaкo:
  Πaкeт libgl1-mesa-dev:amd64 бyдeт yдaлëн.
  Πaкeт libgl-dev нe ycтaнoвлeн.
  Πaкeт libgl1-mesa-dev:amd64 пpeдocтaвляeт libgl-dev, нo дoлжeн быть yдaлëн.
 qtbase5-dev:amd64 зaвиcит oт libgl1-mesa-dev | libgl-dev, oднaкo:
  Πaкeт libgl1-mesa-dev:amd64 бyдeт yдaлëн.
  Πaкeт libgl-dev нe ycтaнo
(Чтeниe бaзы дaнныx … нa дaнный мoмeнт ycтaнoвлeнo 125582 фaйлa и кaтaлoгa.)
Удaляeтcя пaкeт libgl1-mesa-dev:amd64 …
user@astra:~/Зaгpyзки$ sudo dpkg -i nvidia-drivers-astra-smolensk-1.5-375.20-signed.deb
(Чтeниe бaзы дaнныx … нa дaнный мoмeнт ycтaнoвлeнo 125599 фaйлoв и кaтaлoгoв.)
Pacпaкoвывaeтcя пaкeт nvidia-drivers-astra-smolensk-1.5 (из фaйлa nvidia-drivers-astra-smolensk-1.5-375.20-signed.deb) …
Hacтpaивaeтcя пaкeт nvidia-drivers-astra-smolensk-1.5 (1.0) …
/sbin/ldconfig.real: /usr/lib/x86_64-linux-gnu/libGLESv1_CM.so.1 нe являeтcя cимвoльнoй ccылкoй

/sbin/ldconfig.real: /usr/lib/x86_64-linux-gnu/libGLESv2.so.2 нe являeтcя cимвoльнoй ccылкoй

/sbin/ldconfig.real: /usr/lib/x86_64-linux-gnu/libEGL.so.1 нe являeтcя cимвoльнoй ccылкoй

update-initramfs: Generating /boot/initrd.img-4.2.0-23-pax
update-initramfs: Generating /boot/initrd.img-4.2.0-23-generic
You must restart your computer to apply nvidia settings.
Oбpaбaтывaютcя тpиггepы для desktop-file-utils …
Oбpaбaтывaютcя тpиггepы для man-db …
Ukio ()
Ответ на: комментарий от Ukio

В Astra Linux криво сделано, либо надо читать официальную документацию.

К примеру, как это сделано в Debian. В репозитории присутствуют два различных пакета с открытой реализацией libgl из состава mesa и с реализацией libgl из состава драйвера Nvidia. Далее после установки драйвера nvidia посредством update-alternatives осуществляется переключение символьных ссылок из /usr/lib/libGL* на соответствующую реализацию LibGL, соответствующую используемому драйверу.

Почему в Astra Linux они так не сделали - спрашивай у разработчиков и пиши им в баг трекер.

Ну либо читай официальную документацию, возможно там написано как это правильно сделать.

Но я думаю, что у них просто косяк в зависимостях пакетов, ну либо они вообще не делали символьных ссылок и в пакете с драйвером Nvidia есть конфликт файлов LibGL из состава Mesa.

В общем, это вопрос к разработчикам дистрибутива, пиши на их форум.

Ну и драйвер, всё же должен ставиться не посредством dpkg -i nvidia*.deb, а обычно через apt-get install nvidia...что-то там.

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

Да, я понимаю, что Astra - это косяк на косяке. И было бы хорошо написать на их форум, или почитать документацию, однако из документации там только указание через dpkg установить драйвер на nvidia. Все. Это же система чтобы документы офицеров печатать, а не для того чтобы нормально занимать разработкой. Может быть еще какие идеи есть, как это руками можно все пофиксить?

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

И было бы хорошо написать на их форум

В чём проблема?

однако из документации там только указание через dpkg установить драйвер на nvidia

Ну так и напиши им, что дескать при установке описанным способом возникает конфликт с файлами другого пакета.

Может быть еще какие идеи есть, как это руками можно все пофиксить?

Ковертни deb пакет с nvidia драйвером в архив и тупо разархивируй в корень. Предварительно переустанови пакет с libgl1-mesa.

Но это всё неправильно. При установке пакетов из официального репозитория проблем быть не должно. Так же должны быть рабочими все механизмы. Если что-то не так - вперёд писать в тех. поддержку.

Ну либо ты можешь разобраться как изменить пакет libgl1-mesa и пакет с драйвером nvidia, что бы он ставили свои реализации LibGL в разные директории и последний создавал символьные ссылки на свои файлы. Сценарием, который вызывается после установки пакета.

Удачи.

kostik87 ★★★★★ ()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от Ukio

Графические приложения слинкованы с библиотекой LibGL.so, которая находится в /usr/lib/x86_64-linux-gnu/libGL.so. В Linux есть несколько реализаций этой библиотеки, открытая из состава mesa и закрытые из состава драйверов Nvidia и AMD. Т.е. в системе может быть установлено несколько драйверов, то реализация каждой соответствующей библиотеки LibGL должна быть установлена в свою отдельную директорию, например что-то вроде /usr/lib64/opengl/nvidia/lib/libGL.so, как это сделано в Gentoo.

Т.к. приложения слинкованы с /usr/lib/x86_64-linux-gnu/libGL.so, то /usr/lib/x86_64-linux-gnu/libGL.so должны быть ссылкой на соответствующую реализацию LibGL, т.е. ссылкой на реализации библиотек из состава драйвера Nvidia.

В Astra же mesa реализация библиотеки ставится сразу в /usr/lib/x86_64-linux-gnu/libGL.so, но в составе пакета с драйвером Nvidia есть тоже своя библиотека и она тоже ставится в /usr/lib/x86_64-linux-gnu/libGL.so.

Пакетный менеджер видит конфликт библиотек и препятствует установке пакета.

Разработчики должны были собрать пакеты таким способом, что бы LibGL из mesa, nvidia и amd ставились в отдельные директории, а в /usr/lib/x86_64-linux-gnu/libGL.so создавались символьные ссылки на конкретную реализацию посредством скрипта, который бы вызывался уже после установки пакета.

В таком случае бы конфликтов не было бы и файлы не перезаписывались.

Т.е. должны быть что-то вроде:

/usr/lib/x86_64-linux-gnu/libGL.so -> /usr/lib64/opengl/mesa/lib/libGL.so
а после установки драйвера nvidia:
/usr/lib/x86_64-linux-gnu/libGL.so -> /usr/lib64/opengl/nvidia/lib/libGL.so
Но там библиотек несколько больше.

kostik87 ★★★★★ ()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

Я правильно понимаю, что надо тот же самый libGl.so распихать по папкам, соответствующим производителю (например ..../mesa/libGL.so ; ..../nvidia/libGL.so), а потом создать символическую ссылку аж на несколько файлов? Нормально ли поведут себя в таком случае программы, которые эти библиотеки используют?

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

Я правильно понимаю, что надо тот же самый libGl.so распихать по папкам,

Не тот же самый, а в папку с mesa реализации библиотек mesa, в папку nvidia реализации библиотек nvidia, в папку amd - реализации amd.

а потом создать символическую ссылку аж на несколько файлов?

Разных ссылок и на разные файлы, вот как это выглядит для Nvidia в Gentoo:

/usr/lib/libEGL.so -> opengl/nvidia/lib/libEGL.so.340.24
/usr/lib/libEGL.so.1 -> opengl/nvidia/lib/libEGL.so.340.24
/usr/lib/libGLcore.so -> opengl/nvidia/lib/libGLcore.so.195.36.31
/usr/lib/libGLESv1_CM.so -> opengl/nvidia/lib/libGLESv1_CM.so.340.24
/usr/lib/libGLESv1_CM.so.1 -> opengl/nvidia/lib/libGLESv1_CM.so.340.24
/usr/lib/libGLESv2.so -> opengl/nvidia/lib/libGLESv2.so.340.24
/usr/lib/libGLESv2.so.2 -> opengl/nvidia/lib/libGLESv2.so.340.24
/usr/lib/libGL.so -> opengl/nvidia/lib/libGL.so.340.24
/usr/lib/libGL.so.1 -> opengl/nvidia/lib/libGL.so.340.24

Нормально ли поведут себя в таком случае программы, которые эти библиотеки используют?

Да.

kostik87 ★★★★★ ()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от Difrex

Драйвера нвидиа нормально встают на ту версию Астры, под которую были собраны.

Проблему не подтверждаю, для разъяснения ситуации предложил пройти в специальную группу по Астре

Cogniter ★★★ ()
Последнее исправление: Cogniter (всего исправлений: 1)
Ответ на: комментарий от Cogniter

Проблема:
Почему пакет с драйвером Nvidia не в официальном репозитории?

И, возможно, вторая проблема, почему нет пакета под нужную версию Astra Linux? Smolensk - это последний релиз или нет?

Всё это приводит к описанной в теме проблеме.

Всё должно быть в репозитории и нормально поддерживаться.

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

Драйвера встают не всегда нормально, хотя по идее должны бы. Суть проблемы я изложил тут.

Ну и действительно, использовать Астру - не самое приятное что может быть.

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

Однако, для своих задач, которые я вижу, которые могут возникнуть у целевой аудитории, которая будет использовать продукт, Астра походит, и проблем с ней особых не должно быть.

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

А за канал в телеграмме - спасибо!

Ukio ()