[devel] проблемы с поиском зависимостей [2]

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пн Мар 12 15:36:30 MSK 2007


On Thu, Mar 01, 2007 at 11:31:09PM +0300, Alexey Tourbin wrote:
> 1) вариации шарпбанга можно использовать для отключения распознавания.
> 2) find-requires и find-provides не модульные.

Я начал решал вторую проблему, и оказалось, что в процессе решения
второй проблемы в значительной степени решается и первая проблема.

Я выложил в git.alt:/people/at/packages/rpm.git бранч mod.  Основные
изменения там в основном закончены (кроме тех, которые явно не
закончены; такие, как остатки старого кода в find-requires и
find-provides).

Вкратце, как это работает.  find-requires и find-provides запускает
file(1) и скармливает его вывод в фильтры .req.files и .prov.files (от
идеи общего .files для .req и .prov пришлось отказаться).  Дальше
фильтры выводят список файлов, и этот список файлов скармливается
в .req или .prov.

Выглядит это вполне даже благовидно.
Примеры.

Вывести список шелл-файлов для поиска зависимостей из пакета rpm-utils.

$ rpm -ql rpm-utils |file -NF$'\t' -f - |/usr/lib/rpm/shell.req.files
/usr/bin/add_changelog
/usr/bin/buildreq
/usr/bin/cleanup_spec
/usr/bin/compare_packages
/usr/bin/filereq
/usr/bin/packagereq
/usr/bin/rebuild_package
/usr/bin/rebuild_packages
/usr/bin/stamp_spec
/usr/share/buildreqs/filter_strace
/usr/share/buildreqs/strace_files
$

Найти зависимости в shell-файлах из пакета rpm-utils.

$ rpm -ql rpm-utils |file -NF$'\t' -f - |/usr/lib/rpm/shell.req.files |/usr/lib/rpm/shell.req |sort -u
coreutils
diffutils
ed
findutils
gawk
grep
perl-base
rpm
rpm-utils
sed
strace
$

Поскольку нет билдрута, то "естественным образом" появляется зависимость
на rpm-utils.

Если в req/prov скриптах использовать опцию --verbose, то можно узнать
что-нибудь интересное.

$ rpm -ql rpm-utils |file -NF$'\t' -f - |/usr/lib/rpm/shell.req.files |/usr/lib/rpm/shell.req -v 2>&1| head
shell.req: /usr/bin/add_changelog: cat -> /bin/cat -> ... (via which)
shell.req: /usr/bin/add_changelog: /bin/cat -> coreutils (via rpmdb)
shell.req: /usr/bin/add_changelog: ed -> /bin/ed -> ... (via which)
shell.req: /usr/bin/add_changelog: /bin/ed -> ed (via rpmdb)
shell.req: /usr/bin/add_changelog: grep -> /bin/grep -> ... (via which)
shell.req: /usr/bin/add_changelog: /bin/grep -> grep (via rpmdb)
shell.req: /usr/bin/add_changelog: rm -> /bin/rm -> ... (via which)
shell.req: /usr/bin/add_changelog: /bin/rm -> coreutils (via rpmdb)
shell.req: /usr/bin/add_changelog: sed -> /bin/sed -> ... (via which)
shell.req: /usr/bin/add_changelog: /bin/sed -> sed (via rpmdb)
$

Опция -vv может сказать ещё больше интересного, а -vvv для особо
интересующихся включит -x.

Аналогично работают другие req/prov скрипты.

$ rpm -ql rpm-utils |file -NF$'\t' -f - |/usr/lib/rpm/lib.req.files |/usr/lib/rpm/lib.req -vv
lib.req: processing /usr/bin/packageof
rtld(GNU_HASH)
libc.so.6(GLIBC_2.4)
libc.so.6(GLIBC_2.1)
libc.so.6(GLIBC_2.3.4)
libc.so.6(GLIBC_2.2.5)
libc.so.6(GLIBC_2.0)
librpmdb-4.0.4.so
libgcc_s.so.1(GCC_3.0)
libstdc++.so.6(CXXABI_1.3)
libstdc++.so.6(GLIBCXX_3.4)
librpmio-4.0.4.so
librpm-4.0.4.so
lib.req: processing /usr/bin/rpmdups
rtld(GNU_HASH)
libc.so.6(GLIBC_2.1.3)
libc.so.6(GLIBC_2.0)
librpmdb-4.0.4.so
libgcc_s.so.1(GCC_3.0)
libstdc++.so.6(CXXABI_1.3)
libstdc++.so.6(GLIBCXX_3.4)
librpmio-4.0.4.so
librpm-4.0.4.so
lib.req: processing /usr/bin/rpmevrcmp
rtld(GNU_HASH)
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.3.4)
librpmdb-4.0.4.so
lib.req: processing /usr/bin/rpmrdups
rtld(GNU_HASH)
libc.so.6(GLIBC_2.1.3)
libc.so.6(GLIBC_2.0)
librpmdb-4.0.4.so
libgcc_s.so.1(GCC_3.0)
libstdc++.so.6(CXXABI_1.3)
libstdc++.so.6(GLIBCXX_3.4)
librpmio-4.0.4.so
librpm-4.0.4.so
lib.req: processing /usr/bin/rpmvercmp
rtld(GNU_HASH)
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.3.4)
librpmdb-4.0.4.so
$ 

Выборочная пересборка нескольких пакетов дала идентичные зависимости.

Кроме того, пакет git не собирается, потому что там в некоторых
шелл-скриптах после `exit 0' идет некомментированный plain text.

Кроме того, будут проблемы с питоном, потому что `#!/usr/bin/env python'
теперь отыскиваются слишком хорошо.  Всё это я готов обсудить вечером,
если буду не слишком пьян от своих скромных успехов.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?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/20070312/71ee4ea2/attachment-0001.bin>


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