ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] файловые зависимости на раскрытые альтернативы
@ 2008-08-19 12:09 Valery V. Inozemtsev
  2008-08-19 12:27 ` Michael Shigorin
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Valery V. Inozemtsev @ 2008-08-19 12:09 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 418 bytes --]

Hi

собственно subj
$ rpmquery -R kdebase-wm-3.5.9-alt10 | grep Term
/usr/share/design/Terminal/kde/kicker/pics/kside.png
/usr/share/design/Terminal/kde/kicker/pics/kside_tile.png
/usr/share/design/Terminal/kde/ktip-wizard_small.png
/usr/share/design/Terminal/kde/splash/pics

и в результате хотим design-graphics-terminal. ну и риторический вопрос - на 
что повесить что нибудь неподъемное?

-- 
Valery V. Inozemtsev

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [devel] файловые зависимости на раскрытые альтернативы
  2008-08-19 12:09 [devel] файловые зависимости на раскрытые альтернативы Valery V. Inozemtsev
@ 2008-08-19 12:27 ` Michael Shigorin
  2008-08-19 13:06 ` Alexey Tourbin
    2 siblings, 0 replies; 10+ messages in thread
From: Michael Shigorin @ 2008-08-19 12:27 UTC (permalink / raw)
  To: ALT Linux Team development discussions

On Tue, Aug 19, 2008 at 04:09:38PM +0400, Valery V. Inozemtsev wrote:
> собственно subj
> $ rpmquery -R kdebase-wm-3.5.9-alt10 | grep Term
> /usr/share/design/Terminal/kde/kicker/pics/kside.png
> /usr/share/design/Terminal/kde/kicker/pics/kside_tile.png
> /usr/share/design/Terminal/kde/ktip-wizard_small.png
> /usr/share/design/Terminal/kde/splash/pics
> 
> и в результате хотим design-graphics-terminal. ну и
> риторический вопрос - на что повесить что нибудь неподъемное?

IMHO эту -- на rpm-build: не следует раскрывать симлинки,
содержащие "/etc/alternatives/".

Но всё равно схожая проблема (произвольный выбор варианта
по "лексикографической крутости") и с altlinux-release.

Предыдущее обсуждение тихо заглохло, но проблема-то есть:
http://lists.altlinux.org/pipermail/devel/2008-May/074650.html

-- 
 ---- WBR, Michael Shigorin <mike@altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [devel] файловые зависимости на раскрытые альтернативы
  2008-08-19 12:09 [devel] файловые зависимости на раскрытые альтернативы Valery V. Inozemtsev
  2008-08-19 12:27 ` Michael Shigorin
@ 2008-08-19 13:06 ` Alexey Tourbin
  2008-08-19 13:10   ` Michael Shigorin
  2008-08-19 13:13   ` Mikhail Gusarov
    2 siblings, 2 replies; 10+ messages in thread
From: Alexey Tourbin @ 2008-08-19 13:06 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 3250 bytes --]

On Tue, Aug 19, 2008 at 04:09:38PM +0400, Valery V. Inozemtsev wrote:
> собственно subj
> $ rpmquery -R kdebase-wm-3.5.9-alt10 | grep Term
> /usr/share/design/Terminal/kde/kicker/pics/kside.png
> /usr/share/design/Terminal/kde/kicker/pics/kside_tile.png
> /usr/share/design/Terminal/kde/ktip-wizard_small.png
> /usr/share/design/Terminal/kde/splash/pics
> 
> и в результате хотим design-graphics-terminal. ну и риторический вопрос - на 
> что повесить что нибудь неподъемное?

Собак на меня можно вешать.

Дело тут вот какое.  Когда идёт поиск зависимостей на относительные
симлинки, то сначала создаётся полный путь.  Потом идёт поиск
зависимостей по полному пути -- см. /usr/lib/rpm/symlinks.req

В kdedabse-wm имеем симлинк
/usr/share/apps/kdewizard/pics/wizard_small.png -> ../../../design-current/kde/ktip-wizard_small.png

Тогда создаётся путь
/usr/share/apps/kdewizard/pics/../../../design-current/kde/ktip-wizard_small.png

Каждый компонент пути пробивается на предмет альтернатив -- см.
/usr/lib/rpm/find-package

Происходит вот что:

+ '[' -L /usr/share/apps/kdewizard/pics/../../../design-current/kde/ktip-wizard_small.png ']'
+ p=/usr/share/apps/kdewizard/pics/../../../design-current/kde
+ set +x
+ '[' -L /usr/share/apps/kdewizard/pics/../../../design-current/kde ']'
+ p=/usr/share/apps/kdewizard/pics/../../../design-current
+ set +x
+ '[' -L /usr/share/apps/kdewizard/pics/../../../design-current ']'
+ p=/usr/share/apps/kdewizard/pics/../../..
+ set +x
+ '[' -L /usr/share/apps/kdewizard/pics/../../.. ']'
+ p=/usr/share/apps/kdewizard/pics/../..
+ set +x
+ '[' -L /usr/share/apps/kdewizard/pics/../.. ']'
+ p=/usr/share/apps/kdewizard/pics/..
+ set +x
+ '[' -L /usr/share/apps/kdewizard/pics/.. ']'
+ p=/usr/share/apps/kdewizard/pics
+ set +x
+ '[' -L /usr/share/apps/kdewizard/pics ']'
+ p=/usr/share/apps/kdewizard
+ set +x
+ '[' -L /usr/share/apps/kdewizard ']'
+ p=/usr/share/apps
+ set +x
+ '[' -L /usr/share/apps ']'
+ p=/usr/share
+ set +x
+ '[' -L /usr/share ']'
+ p=/usr
+ set +x
+ '[' -L /usr ']'
+ p=
+ set +x

Путь /usr/share/design-current является альтернативой.
Если бы сработала проверка 
[ -L /usr/share/apps/kdewizard/pics/../../../design-current ]

то вместо раскрытой зависимости на альтернативу типа
/usr/share/design/Terminal/kde/kicker/pics/kside.png
появилась бы всего лишь зависимость на альтернативный каталог
/usr/share/design-current

К сожалению, проверка 
[ -L /usr/share/apps/kdewizard/pics/../../../design-current ]
не срабатывает.  Легко понять, почему: промежуточных компонентов пути,
из которых мы потом выбираемся через ../.. , просто не существует.

$ [ -L /usr/share/apps/kdewizard/pics/../../../design-current ] || echo no
no
$ ls -l /usr/share/design-current
lrwxrwxrwx 1 root root 49 May  1 13:11 /usr/share/design-current -> /etc/alternatives/links/|usr|share|design-current/
$ l /usr/share/apps/kdewizard
ls: cannot access /usr/share/apps/kdewizard: No such file or directory
$

Мне казалось, что я придумал правильную стратегию разрешения путей
для поиске файловых зависимостей (с учетом альтернатив, отличия между
хост-системой и RPM_BUILD_ROOT, и т.д.), а всё-таки она лажается.
*Разводит руками*

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [devel] файловые зависимости на раскрытые альтернативы
  2008-08-19 13:06 ` Alexey Tourbin
@ 2008-08-19 13:10   ` Michael Shigorin
  2008-08-19 13:13     ` Mikhail Gusarov
  2008-08-19 13:27     ` Alexey Tourbin
  2008-08-19 13:13   ` Mikhail Gusarov
  1 sibling, 2 replies; 10+ messages in thread
From: Michael Shigorin @ 2008-08-19 13:10 UTC (permalink / raw)
  To: ALT Linux Team development discussions

On Tue, Aug 19, 2008 at 05:06:49PM +0400, Alexey Tourbin wrote:
> Каждый компонент пути пробивается на предмет альтернатив -- см.
> /usr/lib/rpm/find-package

readlink путь | grep ^/etc/alternatives
?

-- 
 ---- WBR, Michael Shigorin <mike@altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [devel] файловые зависимости на раскрытые альтернативы
  2008-08-19 13:06 ` Alexey Tourbin
  2008-08-19 13:10   ` Michael Shigorin
@ 2008-08-19 13:13   ` Mikhail Gusarov
  2008-08-19 13:54     ` Alexey Tourbin
  2008-08-19 20:55     ` Alexey Tourbin
  1 sibling, 2 replies; 10+ messages in thread
From: Mikhail Gusarov @ 2008-08-19 13:13 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 549 bytes --]

Twas brillig at 17:06:49 19.08.2008 UTC+04 when at@altlinux.ru did gyre and gimble:

 AT> Происходит вот что:

 AT> + '[' -L /usr/share/apps/kdewizard/pics/../../../design-current/kde/ktip-wizard_small.png ']'
 AT> + p=/usr/share/apps/kdewizard/pics/../../../design-current/kde

А если перед началом этой операции схлопнуть каждый .. с предыдущим
компонентом пути? Сломает ли это какую-нибудь другую ситуацию?

-- 

[-- Attachment #2: Type: application/pgp-signature, Size: 196 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [devel] файловые зависимости на раскрытые альтернативы
  2008-08-19 13:10   ` Michael Shigorin
@ 2008-08-19 13:13     ` Mikhail Gusarov
  2008-08-19 13:27     ` Alexey Tourbin
  1 sibling, 0 replies; 10+ messages in thread
From: Mikhail Gusarov @ 2008-08-19 13:13 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 328 bytes --]

Twas brillig at 16:10:57 19.08.2008 UTC+03 when mike@osdn.org.ua did gyre and gimble:

 >> Каждый компонент пути пробивается на предмет альтернатив -- см.
 >> /usr/lib/rpm/find-package

 MS> readlink путь | grep ^/etc/alternatives ?

Там же buildroot.

-- 

[-- Attachment #2: Type: application/pgp-signature, Size: 196 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [devel] файловые зависимости на раскрытые альтернативы
  2008-08-19 13:10   ` Michael Shigorin
  2008-08-19 13:13     ` Mikhail Gusarov
@ 2008-08-19 13:27     ` Alexey Tourbin
  1 sibling, 0 replies; 10+ messages in thread
From: Alexey Tourbin @ 2008-08-19 13:27 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 2752 bytes --]

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
$

Опа, при "неудачном" указании пути зависимость раскрылась в текущую
альтернативу.

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [devel] файловые зависимости на раскрытые альтернативы
  2008-08-19 13:13   ` Mikhail Gusarov
@ 2008-08-19 13:54     ` Alexey Tourbin
  2008-08-19 20:55     ` Alexey Tourbin
  1 sibling, 0 replies; 10+ messages in thread
From: Alexey Tourbin @ 2008-08-19 13:54 UTC (permalink / raw)
  To: ALT Linux Team development discussions

[-- Attachment #1: Type: text/plain, Size: 1297 bytes --]

On Tue, Aug 19, 2008 at 08:13:01PM +0700, Mikhail Gusarov wrote:
> Twas brillig at 17:06:49 19.08.2008 UTC+04 when at@altlinux.ru did gyre and gimble:
> 
>  AT> Происходит вот что:
> 
>  AT> + '[' -L /usr/share/apps/kdewizard/pics/../../../design-current/kde/ktip-wizard_small.png ']'
>  AT> + p=/usr/share/apps/kdewizard/pics/../../../design-current/kde
> 
> А если перед началом этой операции схлопнуть каждый .. с предыдущим
> компонентом пути?
> Сломает ли это какую-нибудь другую ситуацию?

Хе-хе.
Тут есть над чем голову ломать.

Допустим у нас есть путь
/usr/share/design-current/../automake

Хочется преобразовать его в
/usr/share/automake

Но на самом деле он никуда не преобразуется
$ realpath /usr/share/design-current/../automake
realpath: /usr/share/design-current/../automake: No such file or  directory
$

Потому что симлинк /usr/share/design-current меняет уровень вложенности

$ realpath /usr/share/design-current 
/usr/share/design/Sisyphus
$

Так что на самом деле из каталога придётся выбираться
два раза:

$ realpath /usr/share/design-current/../../automake
/usr/share/automake-1.10
$

Войдя в "симлиночный" каталог, мы можем оказаться где угодно,
и наивное схлопывание ".." с предыдущим компонентом пути, вообще говоря,
не работает.

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [devel] design-graphics-sisyphus -- образец (was: файловые зависимости на раскрытые альтернативы )
  @ 2008-08-19 16:14     ` Michael Shigorin
  0 siblings, 0 replies; 10+ messages in thread
From: Michael Shigorin @ 2008-08-19 16:14 UTC (permalink / raw)
  To: ALT Linux Team development discussions

On Tue, Aug 19, 2008 at 08:04:50PM +0400, Sergey V Turchin wrote:
> > > и в результате хотим design-graphics-terminal
> > Миша зачем-то повысил версию

Чтоб заменялся пакет предыдущей версии (d-g-t 4.0.2), наверное.

> > а она не должна быть больше, чем у design-graphics-sisyphus,
> > т.к. он является образцом.

Ух как интересно, а кто-то ещё это знал? ;-)

Просьба добавить сюда: http://www.altlinux.org/Design

> Т.е., если у design-graphics-sisyphus меняется версия, то это
> означает, что я сделал там такие изменения, после которых в
> каком-то пакете может возникнуть зависимость на
> design-graphics >= эта_версия.
> Т.е. для остальных design-graphics-* нужно взять _весь_ design-
> graphics-sisyphus со спеком и заменить графику на свою.

Спасибо.

Не хочешь поднять версию d-g-s?

-- 
 ---- WBR, Michael Shigorin <mike@altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [devel] файловые зависимости на раскрытые альтернативы
  2008-08-19 13:13   ` Mikhail Gusarov
  2008-08-19 13:54     ` Alexey Tourbin
@ 2008-08-19 20:55     ` Alexey Tourbin
  1 sibling, 0 replies; 10+ messages in thread
From: Alexey Tourbin @ 2008-08-19 20:55 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 2409 bytes --]

On Tue, Aug 19, 2008 at 08:13:01PM +0700, Mikhail Gusarov wrote:
>  AT> + '[' -L /usr/share/apps/kdewizard/pics/../../../design-current/kde/ktip-wizard_small.png ']'
>  AT> + p=/usr/share/apps/kdewizard/pics/../../../design-current/kde
> 
> А если перед началом этой операции схлопнуть каждый .. с предыдущим
> компонентом пути? Сломает ли это какую-нибудь другую ситуацию?

Короче, так и сделал.  Вообще-то схлопывать ".." нельзя, если предыдущий
компонент пути является симлинком, который меняет глубину вложенности.
Но, в общем, это всё не для программирования на шелле, а вносить перл
в rpm-build я пока сознательно не хочу.

Тут есть маленькое оправдание: в случае c symlinks.req схлопывание
компонентов (с конца), соответствующих каталогу, в котором находится
симлинк, всегда будет корректным (потому что на вход symlinks.req
не подаются пути с промежуточными симлинками; т.е. в примере выше
%buildroot/usr/share/apps/kdewizard/pics -- это железно каталог без
промежуточных симлинков, от которого можно откусывать последние
компоненты, схлопывая их с первыми компонентами ".." значения симлинка).


Придётся пересобрить kdebase.


commit b46be108bdf00639d5f775efb150472a9544ea5f
Author: Alexey Tourbin <at@altlinux>
Date:   Tue Aug 19 22:47:46 2008 +0400

    find-package: updated check for file path components being alternatives

diff --git a/scripts/find-package.in b/scripts/find-package.in
index d74d375..9d471c0 100755
--- a/scripts/find-package.in
+++ b/scripts/find-package.in
@@ -152,8 +152,16 @@ FindByPath()
 	fi
 
 	# Is it an alternative?  Path components can be alternatives, too.
-	local p="$rep" alt_break= alt xalt xrep
+	local alt_break= alt xalt xrep p
 	xrep=$(readlink -vm "$rep")
+	# Blind cleanup-only canonicalization required (the same as CanonPath first pass),
+	# to fold intermediate path components.  E.g. in /usr/share/foo/../java/rt.jar,
+	# /usr/share/foo might not exist, but [ -L .../rt.jar ] test should still work.
+	# XXX This "blind" technique is basically wrong -- one cannot always fold ".."
+	# along with previous path component, specifically if the previous path component
+	# is a symbolic link.
+	p=$(readlink -vm "/-$$-/$rep")
+	p=${p##/-$$-}
 	while [ -n "$p" ]; do
 		# Check each path component whether it is an alternative.
 		if [ -L "$p" ] && readlink -v "$p" |grep -qs '^/etc/alternatives/'; then

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2008-08-19 20:55 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-08-19 12:09 [devel] файловые зависимости на раскрытые альтернативы Valery V. Inozemtsev
2008-08-19 12:27 ` Michael Shigorin
2008-08-19 13:06 ` Alexey Tourbin
2008-08-19 13:10   ` Michael Shigorin
2008-08-19 13:13     ` Mikhail Gusarov
2008-08-19 13:27     ` Alexey Tourbin
2008-08-19 13:13   ` Mikhail Gusarov
2008-08-19 13:54     ` Alexey Tourbin
2008-08-19 20:55     ` Alexey Tourbin
2008-08-19 16:14     ` [devel] design-graphics-sisyphus -- образец (was: файловые зависимости на раскрытые альтернативы ) Michael Shigorin

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git