[Решено] Автомагические зависимости

magick.jpg

Мы рады сообщить о решении ещё одной довольно серьёзной проблемы - выявлении и устранении автомагических зависимостей в репозитории бинарных пакетов.

С ростом репозитория неизбежно начали выявляться проблемы. Самые безобидные из них - те, которые никто не замечает. Например пакет dev-libs/redland-1.0.16 собран с библиотекой sys-libs/db 4.8, в ebuild прописана зависимость sys-libs/db без слота, что правильно, т.к. пакет у пакета нет ограничений по версии. Через какое-то время версия 4.8 обновляется до 5.3 и тут наступает легкий конфуз:

!!! existing preserved libs:
>>> package: sys-libs/db-4.8.30-r2
* - /usr/lib64/libdb-4.8.so
* used by /usr/lib64/librdf.so.0.0.0 (dev-libs/redland-1.0.16)
Use emerge @preserved-rebuild to rebuild packages using these libraries

На работе системы такая проблема не сказывается, портежи уже достаточно хорошо работают, чтобы не удалить библиотеку, пока её использует какой-либо пакет. Но пользователя подобные сообщения вводят в недоумение, ведь выполнение emerge @preserved-rebuild не приводит к успеху, это предупреждение возникает вновь и вновь при каждой установке пакета.

Бывают и более неприятные случаи - настоящие автомагические зависимости, когда пакет при сборке начинает связываться с библиотеками не описанными по зависимостям. В сборочном образе пакетов предостаточно, но на установленной системе их может не оказаться и вот тогда могут начаться неприятные последствия в отказе работы программ, выявить которые на этапе тестирования в большинстве случаев просто невозможно. Из недавнего примера можно отметить Caja 1.16.1, а следом за ним и Nemo 3.2.0, слинкованные с библиотекой libselinux.so. К счастью, эта проблема выявилась на этапе тестирования работы обновления рабочего стола, не заметить проблему было слишком сложно, т.к. иконки попросту не отобразились на рабочем столе. Если бы такая ошибка попала в обновление, все столкнулись бы с большой проблемой, исправить которую смогла бы только следующая ревизия обновления.

В новой версии утилит Calculate 3.5.1 эта проблема останется в прошлом! Утилиты научатся выявлять и исправлять описанные случаи. Происходит это следующим образом. На этапе сборки (cl-builder-update) для собранных бинарных пакетов формируется список зависимостей через эмуляцию отсутствия пакетов в системе. Просчёт производится исключительно по дереву бинарных пакетов. После этого проверяется наличие в зависимостях пакетов, библиотеки которых используются в собранных пакетах. В случае с dev-libs/redland в построенном дереве зависимостей будет уже sys-libs/db 5-й версии, несмотря на то, что бинарный пакет 4.8 присутствует в репозитории. Для исправления таких связей, пакеты с неописанными зависимостями на время удаляются из системы, после чего бинарный пакет пересобирается. При наличии в системе dev-libs/redland 5-й версии, пакет dev-libs/redland будет собран с этой библиотекой, тем не менее, удаление 4-й версии гарантирует эту связь.

Помимо этого, просчёт зависимостей позволяет выявить неописанные в ebuild зависимости, а так же выполняет дополнительное тестирование на отсутствие нестыковок по зависимостям. Выявленные проблемы мы планируем отправлять в багтрекер генты.

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

[Выявленные проблемы мы планируем отправлять в багтрекер генты.]{style=“text-align:right;”}

Так держать!

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