[devel] symlinks.req: semi-unmets

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пт Авг 10 12:21:34 MSD 2007


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 довольно примитивна, она в принципе не
учитывает симлинки при разрешении путей.  А менее примитивные идеи
с неизбежностью будут более сложными...
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20070810/e0d9f5d9/attachment-0001.bin>


Подробная информация о списке рассылки Devel