TypicalPackagingErrors/SonameUpdate
Обновление библиотеки
Если библиотека обновляется, есть два культурных варианта при изменившемся 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.
PS: варианты изменения ABI без увеличения soname оставим на совести авторов таких либлиотек ;-)