Bug 40058

Summary: При обновлении ядра разрушается /etc/libnvidiacurrent/libEGL.so
Product: Sisyphus Reporter: Eugine V. Kosenko <eugine.kosenko>
Component: update-kernelAssignee: Vitaly Chikunov <vt>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: aen, boyarsh, evg, glebfm, lav, ldv, mike, stalker, vt, zerg
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Eugine V. Kosenko 2021-05-16 11:46:54 MSK
Перед обновлением:

$ ls -l /etc/libnvidiacurrent/libEGL.so
-rw-r--r-- 1 root root 987736 мар  3 11:08 /etc/libnvidiacurrent/libEGL.so

$ hexdump /etc/libnvidiacurrent/libEGL.so|head
0000000 457f 464c 0102 0001 0000 0000 0000 0000
0000010 0003 003e 0001 0000 4240 0002 0000 0000
...

$ sudo update-kernel
Running kernel version: kernel-image-std-def-2:5.10.29-alt1
Checking for available std-def kernel packages...
пакет kernel-image-std-def-2:5.10.35-alt1:sisyphus+271317.100.1.1@1620400388 не установлен
Try to install new kernel kernel-image-std-def-2:5.10.35-alt1:sisyphus+271317.100.1.1@1620400388 and update its modules [y]/n? 
update-kernel: kernel-modules-drm is installed, trying to update...
update-kernel: kernel-modules-nvidia is installed, trying to update...
update-kernel: kernel-modules-virtualbox is installed, trying to update...
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие НОВЫЕ пакеты будут установлены:
  kernel-image-std-def#2:5.10.35-alt1:sisyphus+271317.100.1.1@1620400388 kernel-modules-drm-std-def#2:5.10.35-alt1:sisyphus+271317.100.1.1@1620400070
  kernel-modules-nvidia-std-def#460.73.01-alt1.330275.1:sisyphus+271317.2500.1.1@1620401518
  kernel-modules-virtualbox-std-def#6.1.20-alt1.330275.1:sisyphus+271317.4600.1.1@1620402263
0 будет обновлено, 4 новых установлено, 0 пакетов будет удалено и 0 не будет обновлено.
Необходимо получить 0B/111MB архивов.
После распаковки потребуется дополнительно 493MB дискового пространства.
Совершаем изменения...
Подготовка...                                     #################################################################################################### [100%]
Обновление / установка...
1: kernel-image-std-def-2:5.10.35-alt1            #################################################################################################### [ 25%]
2: kernel-modules-drm-std-def-2:5.10.35-alt1      #################################################################################################### [ 50%]
3: kernel-modules-nvidia-std-def-460.73.01-alt1.33#################################################################################################### [ 75%]
4: kernel-modules-virtualbox-std-def-6.1.20-alt1.3#################################################################################################### [100%]
[00:00:00] Config file: /etc/initrd.mk
[00:00:01] Generating module dependencies on host ...
[00:00:05] Creating initrd image ...
initrd-put: copy_file_range: /etc/libnvidiacurrent/libEGL.so -> /etc/libnvidiacurrent/libEGL.so: Invalid argument
make[2]: *** [/usr/share/make-initrd/mk/make-initrd.mk:101: create] Ошибка 123
make[1]: *** [/usr/share/make-initrd/mk/make-initrd.mk:167: process-config] Ошибка 2
make: *** [/usr/share/make-initrd/mk/make-initrd.mk:157: all] Ошибка 1
Generating grub configuration file ...
Found theme: /boot/grub/themes/workstation/theme.txt
Found background image: /usr/share/plymouth/themes/workstation/grub.jpg
Found linux image: /boot/vmlinuz-5.10.35-std-def-alt1
Found linux image: /boot/vmlinuz
Found initrd image: /boot/initrd.img
Found linux image: /boot/vmlinuz-std-def
skipping symlink: /boot/vmlinuz-std-def
Found linux image: /boot/vmlinuz-5.10.29-std-def-alt1
Found initrd image: /boot/initrd-5.10.29-std-def-alt1.img
Found linux image: /boot/vmlinuz-5.4.91-std-def-alt1
Found initrd image: /boot/initrd-5.4.91-std-def-alt1.img
Found linux image: /boot/vmlinuz-5.4.80-std-def-alt1
Found initrd image: /boot/initrd-5.4.80-std-def-alt1.img
Found memtest image: memtest-5.31b.bin
done
Завершено.
ldconfig: /etc/libnvidiacurrent/libEGL.so не является файлом в формате ELF — неправильная сигнатура в начале.

ldconfig: /etc/libnvidiacurrent/libEGL.so.1 не является файлом в формате ELF — неправильная сигнатура в начале.

$ ls -l /etc/libnvidiacurrent/libEGL.so
-rw-r--r-- 1 root root 987736 мая 16 11:43 /etc/libnvidiacurrent/libEGL.so

$ hexdump /etc/libnvidiacurrent/libEGL.so|head
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
00f1250 0000 0000 0000 0000                    
00f1258

Файлы легко восстанавливаются после

$ sudo apt-get reinstall nvidia_glx_340.108
Comment 1 Eugine V. Kosenko 2021-05-16 11:52:54 MSK
Вообще конкретно достало, что регулярно ломается изображение в Google Chrome и Skype после срабатывания хранителя экрана, либо засыпания и дальнейшего просыпания. После перезапуска все хорошо до следующего хранителя экрана или засыпания. А иногда отваливается и сам хранитель, экран тупо перестает гаснуть по времени.

Грешил на все: на сам Хром, на его плагины, на аппаратуру, на версию ядра. Сегодня решил попробовать таки перейти на nouveau, и сразу обнаружил вот это. Теперь уже точно nvidia не запустится.
Comment 2 Eugine V. Kosenko 2021-05-16 12:15:07 MSK
И да, после перехода на nouveau проблемы в самом деле ушли
Comment 3 Eugine V. Kosenko 2021-05-16 12:43:52 MSK
Но перестало работать выключение экрана :-)
Comment 4 Sergey V Turchin 2021-05-17 11:12:26 MSK
> ldconfig: /etc/libnvidiacurrent/libEGL.so не является файлом в формате ELF — 
> неправильная сигнатура в начале.
Я вообще слабо понимаю, как такое может быть. Я нигде сами файлы не трогаю.

Эта проблема иногда вылазит при обновлении vlc и libgdk-pixbuf, когда они в post запускает обновление кэша модулей, которые подгружают и обламываются на том, что слинкован с libGL, который в тот момент от nvidia.
Comment 5 Sergey V Turchin 2021-05-17 11:32:10 MSK
В /etc/libnvidiacurrent/ симлинки все упакованные, непереключаемые и указывают только на соседние файлы. Переключается только сам симлинк на каталог -- /etc/libnvidiacurrent .
Comment 6 Anton V. Boyarshinov 2021-05-17 11:34:45 MSK
(Ответ для Sergey V Turchin на комментарий #5)
> В /etc/libnvidiacurrent/ симлинки все упакованные, непереключаемые и
> указывают только на соседние файлы. Переключается только сам симлинк на
> каталог -- /etc/libnvidiacurrent .

а в какой момент переключается этот симлинк на каталог?
Comment 7 Eugine V. Kosenko 2021-05-17 11:40:09 MSK
(In reply to Anton V. Boyarshinov from comment #6)
> (Ответ для Sergey V Turchin на комментарий #5)
> > В /etc/libnvidiacurrent/ симлинки все упакованные, непереключаемые и
> > указывают только на соседние файлы. Переключается только сам симлинк на
> > каталог -- /etc/libnvidiacurrent .
> 
> а в какой момент переключается этот симлинк на каталог?

А! Кажется, понял. Возможно, это битые файлы в самом /usr/X11R6/lib64/nvidia_0/, куда переключается libnvidiacurrent. Тогда да, проблема в самом драйвере, получается.
Comment 8 Eugine V. Kosenko 2021-05-17 11:47:04 MSK
(In reply to Sergey V Turchin from comment #5)
> В /etc/libnvidiacurrent/ симлинки все упакованные, непереключаемые и
> указывают только на соседние файлы. Переключается только сам симлинк на
> каталог -- /etc/libnvidiacurrent .

Еще страньше. Только что, на новом ядре, поставил заново драйвера nvidia, все поднялось и без ошибок. Так что воспроизвести ситуацию не получилось. Вечером попробую повторить на экспериментальном ноуте.
Comment 9 Sergey V Turchin 2021-05-17 11:48:43 MSK
(Ответ для Eugine V. Kosenko на комментарий #8)
> воспроизвести ситуацию не получилось
В этом и есть самая большая проблема.
Comment 10 Sergey V Turchin 2021-05-17 11:52:24 MSK
(Ответ для Anton V. Boyarshinov на комментарий #6)
> а в какой момент переключается этот симлинк на каталог?
В момент обновления пакетов nvidia, когда в их %post определили, что нужно переключить для _текущего_ ядра. После такого и ldconfig запускается сразу.
Comment 11 Sergey V Turchin 2021-05-17 12:11:33 MSK
> когда в их %post определили, что нужно переключить для _текущего_ ядра.
git.altlinux.org/gears/n/nvidia_glx_common.git?p=nvidia_glx_common.git;a=blob;f=set_gl_nvidia/preset.c#l416
Возможно, тут не надо всегда надо пересоздавать /etc/libnvidiacurrent. Делаю на всякий для восстановления. Не особо представляю, как может повлиять.
Но, оно и ранее воспроизводилось, когда совсем не было /etc/libnvidiacurrent .

> После такого и ldconfig запускается сразу.
git.altlinux.org/gears/n/nvidia_glx_common.git?p=nvidia_glx_common.git;a=blob;f=set_gl_nvidia/preset.c#l557
Comment 12 Sergey V Turchin 2021-05-17 12:12:29 MSK
> не надо всегда надо пересоздавать
не надо всегда пересоздавать
Comment 13 Eugine V. Kosenko 2021-05-17 14:59:34 MSK
(In reply to Sergey V Turchin from comment #9)
> (Ответ для Eugine V. Kosenko на комментарий #8)
> > воспроизвести ситуацию не получилось
> В этом и есть самая большая проблема.

Да, беда. На экспериментальном ноуте тоже уже были полностью удалены драйвера nvidia, и поставить их можно теперь только для последнего ядра. После установки все работает, как часики.

Жаль, я сразу не проверил, куда смотрит сам libnvidiacurrent. Возможно, у меня в самом деле где-то мусор завалялся, и он туда упорно переключался.

Пока могу порекомендовать как решение этой проблемы, полный снос всех драйверов nvidia и переустановку их с нуля.

Ну и еще есть вариант, что проблема проявится при следующем обновлении ядра.
Comment 14 Sergey V Turchin 2021-05-19 12:18:51 MSK
Каким-то образом иногда портятся файлы библиотек.

Например https://t.me/alt_linux/114424 :
rpm -V nvidia_glx_340.108
..5....T.    /usr/lib64/nvidia_340.108/libEGL.so
..5....T.    /usr/lib64/nvidia_340.108/libGL.so
Comment 15 Sergey V Turchin 2021-05-19 12:37:20 MSK
А не может ли где-то колбасить из-за того, что
a) файлы lib*.so, а симлинки lib*.so.X.Y ?
b) в /etc/ld.so.cond.d/* указан список каталогов, в которых лежат одноимённые файлы для 64 и для 32-бит?
Comment 16 Sergey V Turchin 2021-05-19 12:40:37 MSK
Если вдруг prelink используется, нужно прекратить.
Comment 17 Anton V. Boyarshinov 2021-05-19 13:41:28 MSK
(Ответ для Sergey V Turchin на комментарий #14)
> Каким-то образом иногда портятся файлы библиотек.
> 
> Например https://t.me/alt_linux/114424 :
> rpm -V nvidia_glx_340.108
> ..5....T.    /usr/lib64/nvidia_340.108/libEGL.so
> ..5....T.    /usr/lib64/nvidia_340.108/libGL.so

Как-то это совсем некрасиво выглядит, да.. Как бы отловить это "иногда"?...