[devel] файловые зависимости на раскрытые альтернативы
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вт Авг 19 17:27:26 MSD 2008
On Tue, Aug 19, 2008 at 04:10:57PM +0300, Michael Shigorin wrote:
> On Tue, Aug 19, 2008 at 05:06:49PM +0400, Alexey Tourbin wrote:
> > Каждый компонент пути пробивается на предмет альтернатив -- см.
> > /usr/lib/rpm/find-package
>
> readlink путь | grep ^/etc/alternatives
> ?
Да, только идея доведена до логического конца.
*Каждый* компонент пути пробивается на предмет альтернатив.
/usr/lib/rpm/find-package
154 # Is it an alternative? Path components can be alternatives, too.
155 local p="$rep" alt_break= alt xalt xrep
156 xrep=$(readlink -vm "$rep")
157 while [ -n "$p" ]; do
158 # Check each path component whether it is an alternative.
вот он этот readlink:
159 if [ -L "$p" ] && readlink -v "$p" |grep -qs '^/etc/alternatives/'; then
160 alt=$(CanonPath "$p")
161 Verbose "$f: $rep -> $p -> $alt (alternative)"
162 printf '%s\n' "$alt"
163 # Now we have to decide if this alternative should eventually
164 # prevent final $rep dependency resolution.
165 xalt=$(readlink -vm "$p")
166 case "$xrep" in
167 "$xalt")
168 # alternative and $rep are more or less the same
169 alt_break=1 ;;
170 "$xalt"/*)
171 # $rep is under alternative dir, too bad
172 Info "$f: alternative $alt prevents $rep dependency resolution"
173 alt_break=1 ;;
174 esac
175 fi
176 p=${p%/*}
177 done
178 [ -z "$alt_break" ] || return 0
179 unset p alt_break alt xalt xrep ||:
Код выглядит правильно как святой отец папа римский, однако же,
сукин сын, подвержен тайным прегрешениям.
Вот пример того, что он может работать правильно.
$ ls -l /usr/share/design-current/gnome/splash/gnome-splash.png
-rw-r--r-- 1 root root 76260 Oct 4 2002 /usr/share/design-current/gnome/splash/gnome-splash.png
$ sh -c '. /usr/lib/rpm/find-package; FindPackage /some/symlink /usr/share/design-current/gnome/splash/gnome-splash.png'
/usr/share/design-current
sh: /some/symlink: alternative /usr/share/design-current prevents /usr/share/design-current/gnome/splash/gnome-splash.png dependency resolution
$
Появилась, как и требовалось, зависимость на альтернативный каталог
/usr/share/design-current.
А вот пример, что он может сбиться с истинного пути -- достаточно вместо
/usr/share/design-current/gnome/splash/gnome-splash.png
использовать путь
/usr/share/foo/bar/../../design-current/gnome/splash/gnome-splash.png
$ sh -c '. /usr/lib/rpm/find-package; FindPackage /some/symlink /usr/share/foo/bar/../../design-current/gnome/splash/gnome-splash.png'
design-graphics-sisyphus
$
Опа, при "неудачном" указании пути зависимость раскрылась в текущую
альтернативу.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 197 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20080819/db50ab03/attachment-0002.bin>
Подробная информация о списке рассылки Devel