TypicalPackagingErrors/SonameUpdate

Материал из ALT Linux Wiki
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Обновление библиотеки

Если библиотека обновляется, есть два культурных варианта при изменившемся soname --

  • пересобираются все зависимые пакеты; или
  • новая версия собирается в версионированный пакет, а вытеснение старой происходит по мере пересборки репозитория.

Есть нюанс, когда библиотека обновилась, но ABI не изменился. Тогда для снятия необходимости пересборки возможно добавление симлинка, соответствующего старому soname, на .so.$NEW. При этом необходим триггер:

> expat-2.0.0-alt2 с рекомендованными исправлениями отправлен в Sisyphus.
> Однако я обнаружил проблему при обновлении с expat-1.95.8-alt2: старый   
> симлинк libexpat.so.0 почему-то не заменяется новым и все клиенты
> перестают запускаться. После еще одного rpm -i --force симлинк встал на
> место.

Это явление известно давно и имеет простое объяснение.

Достаточно мысленно разбить обновление libexpat на этапы:
1. все файлы нового пакета установлены; в этот момент libexpat.so.0
указывает на новую библиотеку;
2. ldconfig из %post нового пакета выполнен; в этот момент libexpat.so.0
снова указывает на старую библиотеку;
3. все файлы старого пакета удалены; в этот момент libexpat.so.0 является
битой ссылкой.
В результате ссылка остаётся битой.  Что нам остаётся?  %triggerpostun.

ldv@

PS: варианты изменения ABI без увеличения soname оставим на совести авторов таких либлиотек ;-)