On Tue, Aug 07, 2007 at 03:34:49AM +0400, Alexey Tourbin wrote: > On Tue, Aug 07, 2007 at 02:20:48AM +0400, Alexey Tourbin wrote: > > ЗАОСТРЯЮ ПРОБЛЕМУ "ПОЛУ-АНМЕТОВ". > > > > > > Это проблема проявляется тогда, когда зависимость имеет вид /ПУТЬ, > > но у соответствующего пакета не стоит Provides: /ПУТЬ. На уровне > > rpm это не является unmet'ом: если при установке пакета с такой > > зависимостью имеется какой-либо другой пакет с файлом /ПУТЬ, > > то для rpm это "канает". > > > > С другой стороны, apt видит такую зависимость именно как unmet. > > Вообще-то у апта к каждому пакету есть файловые листы, и он использует > > их для разрешения такого рода зависимостей. Но при изготовлении > > репозитария аптовые листы у нас насильно "оптимизируются". > > > > Два простых варианта решения это проблемы: > > > > 1) Генерировать более полный content_index для hasher, чтобы любой путь > > более гарантированно трансформировался в название пакета (насколько > > более полный/гарантированно?). > > > > 2) Восстановить файловые листы для апт. Насколько потяжелеет > > pkglist.classic.bz2? > > Если мыслей нет, то утро вечера мудренее. Пока есть только идея > захачить hsh-sh-cache-contents-functions, чтобы он изготовлял > contents_index_all.gz. Предварительная реализация и тестирование contents_index_all.gz выявило вот какую проблему. При сборке startup: shell.req: /usr/src/tmp/startup-buildroot/etc/rc.d/init.d/clock: checking contents_index_all for /etc/init.d/functions shell.req: /usr/src/tmp/startup-buildroot/etc/rc.d/init.d/clock: /etc/init.d/functions -> service (via rpmdb) Здесь проблема в том, что вместо ". /etc/rc.d/init.d/functions" там используется ". /etc/init.d/functions", и поиск сначала обламывается по contens_index_bin, потому что "нельзя понять", что /etc/init.d это симлинк на /etc/rc.d/init.d. Потом, соответственно, запускается "дорогой" поиск по contents_index_all, и опять обламывается. В конечном счёте происходит fallback на текущий rpmdb, который и дает результат. Если бы поиск по rpmdb ничего не дал, то получился бы "полу-анмет" на /etc/init.d/functions. В общем, идея contents_index довольно примитивна, она в принципе не учитывает симлинки при разрешении путей. А менее примитивные идеи с неизбежностью будут более сложными...