On Wed, Sep 12, 2007 at 01:16:49PM +0400, Anton Farygin wrote: > Это выглядит странно: > @@ -19337,2 +19611,3 @@ > design-graphics-desktop-4.0-alt0.1 Requires > /etc/alternatives/packages.d > +design-graphics-desktop-4.0-alt0.1 Requires > /usr/share/wallpapers > design-graphics-desktop-4.0-alt0.1 Requires(interp) /bin/sh В пакете design-graphics-desktop имеется симлинк /usr/share/design/desktop/backgrounds/more -> ../../../wallpapers Я реализовал поиск зависимостей на все "битые" симлинки (другими словами, поиск зависимостей на все симлинки, которые смотрят за пределы пакета). Как определить, что симлинк смотрит за пределы пакета, я сейчас объяснять не буду. Это не совсем тривиально, хотя и не очень сложно. Суть в том, что можно довольно точно определить, что симлинк смотрит за пределы пакета, и узнать его "канонический" таргет. Считается, что нельзя поставить пакет с битым симлинком, то есть при установке пакета для каждого внешнего симлинка должен быть также поставлен пакет с таргетом этого симлинка. Далее запускается поиск зависимостей на таргет симлинка, через стандартную процедуру /usr/lib/rpm/find-package. Каталог /usr/share/wallpapers принадлежит более чем одному пакету. $ rpm -qf /usr/share/wallpapers wallpapers-mike-20030214-alt0.2.1 wallpapers-piter_xix-0.1-alt1 wallpapers-orange-0.1-alt0.1.1 wallpapers-gc-0.1-alt2 wallpapers-lav-20030331-alt1.1 wallpapers-landscapes-1-alt1 wallpapers-nordnature-1-alt1.1 kde-common-3.5.5-alt1 $ Поэтому алгоритм find-package проставляет "raw" зависимость на /usr/share/wallpapers. На самом деле идет поиск через недавно реализованный в hasher contents_index_all, хотя в данном случае он не дает ничего нового. symlinks.req: /usr/src/tmp/design-graphics-desktop-buildroot/usr/share/design/desktop/backgrounds/more: checking contents_index_all for /usr/share/wallpapers symlinks.req: /usr/src/tmp/design-graphics-desktop-buildroot/usr/share/design/desktop/backgrounds/more: /usr/share/wallpapers -> /usr/share/wallpapers (via contents_index_all) Думаю, что ничего подозрительного в данном случае нету. Цель здесь не только в поиске зависимостей, но и в защите от битых симлинков. Пакет с битым симлинком теперь не удастся установить по зависимостям, пока кто-то не начнет предоставлять таргет симлинка.