Bug 14917

Summary: Плохо отрабатывает откат на "меньший" SONAME
Product: Sisyphus Reporter: Evgenii Terechkov <evg>
Component: glibc-coreAssignee: placeholder <placeholder>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: minor    
Priority: P2 CC: at, glebfm, ldv, mike, placeholder, vvk, wrar
Version: unstable   
Hardware: all   
OS: Linux   

Description Evgenii Terechkov 2008-03-15 06:31:34 MSK
В ходе разборок после массового обновления пакетов откатил glib2 с 2.16.1-alt1
на 2.15.6-alt1. При этом обнаружил, что перестал работать mc (возможно, не
только он), жалуясь на ненаденность библиотеки, к которой слинкован.

Выяснилось, что симлинки в каталоге /lib/, принадлежащие пакету, битые:
указывают не на *.so.0.1506*, а на *.so.0.1600* (rpm -V glib2 подтвердил, выведа
8 строки с модификатором "L"). После ручного разруливания работоспособность mc
восстановилась.

Не знаю, кто именно виноват - новый glib2 или старый, но, надеюсь, в будущих
версиях это будет учтено и поправлено (если ещё не).
Steps to Reproduce:
1.apt-get install glib2=2.16.1-alt1
2.apt-get install glib2=2.15.6-alt1
3.mc
Actual Results:  
lib not found

Expected Results:  
mc runs
Comment 1 Alexey Rusakov 2008-03-15 08:49:37 MSK
Эта проблема относится не к glib2, а к rpm, я подозреваю. Точно такую же беду я
схлопотал на откате gnome-panel, симлинки повисли в воздухе.
Comment 2 Sir Raorn 2008-03-15 09:49:55 MSK
Проблема даже не в rpm, а в /sbin/postun_ldconfig из пакета glibc-core.

ldconfig в этом случае вызывается только если пакет удаляется.  Предыдущий вызов
ldconfig из %post проходит при наличии двух версий библиотеки и симлинк
проставляется на бОльший SONAME.

В случае когда SONAME уменьшается в пакете надо рисовать триггеры.  Когда откат
н астарый пакет идёт руками, надо вызывать ldconfig вручную.  Это такая фича.

P.S. В пакетах xscreensaver и vim-* я решил эту проблему, когда "post" скрипты
запускаются после удаления файлов старой версии пакета, но с библиотеками такой
хак не прокатит.
Comment 3 Evgenii Terechkov 2008-03-15 16:54:55 MSK
Можно как-то автоматизировать и стандартизировать процедуру "починки"? ldv?
Comment 4 Dmitry V. Levin 2008-03-15 17:47:14 MSK
(In reply to comment #3)
> Можно как-то автоматизировать и стандартизировать процедуру "починки"? ldv?

Можно выкинуть эту оптимизацию из postun_ldconfig, тогда пи откатах библиотек не
надо будет вызывать ldconfig вручную, ценой двукратного увеличения числа вызовов
ldconfig при любом обновлении библиотек.
Comment 5 Andrey Rahmatullin 2008-03-16 14:35:39 MSK
Не надо нам такой цены.
Comment 6 Michael Shigorin 2008-03-16 18:23:21 MSK
(In reply to comment #5)
> Не надо нам такой цены.
Угу... возможно, разумным хаком могло бы быть откладывание в той ветке
оптимизации, где ldconfig не выполняется, его на одноразовую post mortem часть?
Comment 7 Evgenii Terechkov 2008-06-13 15:36:08 MSD
ldv: можно так сделать, как Миша предлагает? А то в Сизифе иногда либы откатывать надо :-)
Comment 8 Dmitry V. Levin 2008-11-14 01:50:24 MSK
С внедрением в librpm posttrans filetriggers появился ещё один вариант решения проблемы, который мне кажется более предпочтительным:
Превратить post_ldconfig и postun_ldconfig в ссылки на ldconfig,
а в самом ldconfig сделать проверку на RPM_INSTALL_NAME, т.е. просто деактивировать ldconfig, запускаемый скриптами пакетов.
Comment 9 Dmitry V. Levin 2008-11-21 04:35:43 MSK
Fixed in glibc-core-2.9-alt1 by disabling all kinds of ldconfig when RPM_INSTALL_NAME is set.
Comment 10 Evgenii Terechkov 2008-11-21 16:13:44 MSK
Угу, filetriggers rulez.