On Mon, May 10, 2010 at 06:29:09AM +0300, Alexander Bokovoy wrote: > 2010/5/9 Alexey Tourbin : > > Я нарисовал предварительную (и пока весьма несовершенную) реализацию > > этого дела.  Суть этого дела в том, что сонеймы (имена библиотек) > > будут предоставлять "множество символов", то есть функций (и переменных), > > которые из них можно загрузить.  Соответственно при линковке можно > > требовать символы, которые туда разрешаются - и это делается > > автоматически в lib.req с помощью специальных возможностей ld.so/ldd. > > http://git.altlinux.org/people/at/packages/rpm.git?a=shortlog;h=refs/heads/libhash > > > > С целью тестирования я пересобрал (приватно) базовую систему; и теперь > > например у пакета librpm появилась зависимость > > Requires: libz.so.1()(64bit) >= set:gzclose;gzdopen;gzerror;gzflush;gzopen;gzread;gzseek;gzwrite > > > > Соответственно у пакета zlib появился более длинная зависимость > > Provides: libz.so.1()(64bit) = set:adler32;adler32_combine;compress;compress2;compressBound;crc32;... > > > > set-версии надо будет переделать - вместо "poor man's" реализации, когда > > символы просто конкатенируются, надо придумать какую-то схему > > хеширования (чтобы версии у зависимостей были более "короткие"). > > Пожалуй напишу об этом подробнее - позже. > Такой механизм можно использовать для выражения сервисных зависимостей > между сложными пакетными группами? Предполагается реализовать общий механизм "множество строк" (или элементов) в виде версии. Использовать его дальше можно как угодно, но есть интерес №1 сделать таким образом зависимости на библиотеки. > Provides: infrastructure = > set:file-server;domain-controller;dns-server;ldap-server;...;cifs-client > > Provides: infrastructure = set:nfs-server > > Provides: infrastructure = set:nfs-client > > и > > Requires: infrastructure >= set:nfs-server;ldap-server;dns-server;file-server; > > Можно ли объявлять множества, объединяемые из Provides: разных > пакетов? Так, чтобы Provides: infrastructure = set:...; можно было > "пополнять" из разных пакетов? Нет, объединять Provides нельзя. Какой-то один Provides может удовлетворить какой-то конкретный Requires (такова логика работы rpm). В этом есть смысл: либо какая-то одна библиотека предоставляет всё что нам нужно, либо какой тогда смысл если есть две библиотеки с одинаковым именем... Но можно расщепить Requires! Для твоего примера "infrastructure" использовать set-dependencies кажется оверкиллом. Ты можешь просто требовать infrastructure-nfs-server или infrastructure = nfs-server или как старый добрый пример просто MTA.