ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Alexey Tourbin <at@altlinux.ru>
To: devel@lists.altlinux.org
Subject: Re: [devel] contents_index replacement [0]
Date: Mon, 27 Aug 2007 18:43:40 +0400
Message-ID: <20070827144340.GW26788@solemn.turbinal> (raw)
In-Reply-To: <20070827133350.GV26788@solemn.turbinal>

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

On Mon, Aug 27, 2007 at 05:33:50PM +0400, Alexey Tourbin wrote:
> Я размышлял над тем, чем бы заменить поиск по contens_index,
> чтобы не было некоторых неприятных приколов с поиском зависимостей.
> 
> Я сначала хотел сделать нечто похожее на rpmdb (типа rpmbox),
> чтобы пробивать пути по голбальной базе через -qf.  Вникнув, однако,
> в суть дела, я обнаружил e.g. следующий казус:
> 
> $ cd `mktemp -d`
> $ ln -s /usr/bin/perl ...
> $ rpm -qf ...
> perl-base-5.8.8-alt14
> $ 
> 
> Думаю теперь, что rpmdb в чистом виде для замены contents_index не
> подходит.  Нужна специальная реализация алгоритма типа namei (имеется
> в виду http://www.unix.org.ua/bach/glava_28.htm ).

Поясню суть проблемы.  В путях бывают симлинки, напр.
/etc/init.d/functions -> /etc/rc.d/init.d/functions
из-за симлинка /etc/init.d -> rc.d/init.d.

Когда в скрипте встречается ". /etc/init.d/functions",
то поиск по contents_index обламывается, потому что там
нет всех возможных вариантов путей с учетом разрешения
симлинков.

Однако "rpm -qf /etc/init.d/functions" дает правильный результат.
ТЕМ НЕ МЕНЕЕ, проверка через rpm -qf в значительной степени полагается
на то, что пакет уже установлен, т.е. зависит от состояния файловой
системы.

$ hsh --init                                                                                
$ hsh-shell --rooter
[root@solemn .in]# rpm -qf /etc/init.d/functions
service-0.5.14-alt1
[root@solemn .in]# rm -rfv /etc/init.d 
removed `/etc/init.d'
[root@solemn .in]# rpm -qf /etc/init.d/functions
error: file /etc/init.d/functions: No such file or directory
[root@solemn .in]# rpm -qf /etc/rc.d/init.d/functions
service-0.5.14-alt1
[root@solemn .in]# rm -rfv /etc/rc.d/init.d/functions
removed `/etc/rc.d/init.d/functions'
[root@solemn .in]# rpm -qf /etc/rc.d/init.d/functions
service-0.5.14-alt1
[root@solemn .in]# ^D
$

Это показывает, что поиск по файлу, у которого в пути есть симлинк,
работает только если пакет установлен (и симлинк смотрит куда надо).
Если убрать симлинк, то поиск уже не работает (а если убрать сам файл,
то поиск всё же работает).

Это означает, что глобальная rpmdb с прошитыми там путями не подходит
для разрешения путей в названия пакетов.  То есть, это получается
ничем не лучше, чем поиск по contents_index.

(прочитать как это работает можно в +/doLookup rpmdb/fprint.c)

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

      reply	other threads:[~2007-08-27 14:43 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-27 13:33 Alexey Tourbin
2007-08-27 14:43 ` Alexey Tourbin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070827144340.GW26788@solemn.turbinal \
    --to=at@altlinux.ru \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

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