[devel] Q: Каковы правильные зависимости на приватные библиотеки?

Aleksey Avdeev solo на solin.spb.ru
Пт Сен 4 14:44:05 MSK 2015


Приветствую.

  Каковы у нас должны быть правильные зависимости на приватные библиотеки?

  На данный момент, при опакечивании приложения слинкованного с
библиотеками содержащимися в пакете virtualbox -- я получаю пакет
автозависимости которого не могут быть удовлетворены оным пакетом
virtuflbox, содержащим требуемые библиотеки по факту. Т. е.:

$ hsh-install /tmp/.private/solo/hasher-vd vbox-app
...
Следующие пакеты имеют неудовлетворенные зависимости:
  vbox-app: Требует: /usr/lib64/virtualbox/VBoxRT.so но пакет не может
быть установлен
            Требует: /usr/lib64/virtualbox/VBoxXPCOM.so но пакет не
может быть установлен
E: Извините, `битые' пакеты

  Причина:

1. В пакете приложения для библиотек virtualbox`а прописаны _файловые_
зависимости:

$ rpm -qpR vbox-app-1.0.0-alt1.x86_64.rpm
...
/usr/lib64/virtualbox/VBoxRT.so
/usr/lib64/virtualbox/VBoxXPCOM.so

2. А virtualbox для своих библиотек предоставляет зависимости
_библиотечные_:

$ rpm -qp --provides virtualbox-4.3.30-alt2.x86_64.rpm
...
/usr/lib64/virtualbox/VBoxRT.so()(64bit) =
set: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
...
/usr/lib64/virtualbox/VBoxXPCOM.so()(64bit) =
set:odOgrzsNETguyJOs82jfzzU9G9FZ9Flb9fcgR3dWPr5byiJleTklKPAszLKauoJ3O1PHzsanbL

  Причины:

1. В спеке virtualbox (см.
<http://git.altlinux.org/gears/v/virtualbox.git?p=virtualbox.git;a=blob;f=virtualbox.spec;h=dbd76fe8faa61b15c247e76703f37da5d1f4830d;hb=0d98bdbb82901c9ce5b161243bf02e2c1d721315>)
присутствует строка:

%add_findprov_lib_path %vboxdir

где %vboxdir -- каталог с приватными библиотеками (%_libdir/virtualbox).
Строка добавлена на заре пакета (см.
<http://git.altlinux.org/gears/v/virtualbox.git?p=virtualbox.git;a=commit;h=5a82030eeae6fd4cd3b8aa2fd65b6dc943ffcbf7>)
и скорее всего до сих пор нужна.

2. При сборке vbox-app, на этапе поиска зависимости отрабатывает скрипт
/usr/lib/rpm/lib.req (см.
<http://git.altlinux.org/gears/r/rpm.git?p=rpm.git;a=blob;f=scripts/lib.req.in;h=2e57a8a8c2456ad79ace9e6ecfa2c04bcf7b172a;hb=b01060affd16e0299faf24db8f9dec342125b6f0>),
содержащий код проверки местоположения слинкованных библиотек:

[ -n "${RPM_LIBDIR-}" ] || RPM_LIBDIR=`rpm --eval %_libdir`
[ -n "${RPM_LIB-}" ] || RPM_LIB=`rpm --eval %_lib`
[ -n "${RPM_ARCH-}" ] || RPM_ARCH=`rpm --eval %_arch`

RPM_FINDREQ_RPATH="/$RPM_LIB $RPM_LIBDIR $("$dump_ld_config")"
[ -z "${RPM_BUILD_ROOT-}" ] ||
RPM_FINDREQ_RPATH="$("$dump_ld_config" '' "$RPM_BUILD_ROOT")
$RPM_FINDREQ_RPATH"
Debug "RPM_FINDREQ_RPATH=$RPM_FINDREQ_RPATH"

...
LibReq()
{
	...
	for vers in `printf '%s\n' "$dump" |"$shlib_req"`; do
		name="$(printf %s "$vers" |cut -d: -f1)"
		vers="$(printf %s "$vers" |cut -d: -f2-)"
		...
		for dir in $RPM_FINDREQ_RPATH; do
			if [ "$canon_prefix" = "$dir" ]; then
				prefix=
				break
			fi
		done
		[ -z "$prefix" ] || prefix="$prefix/"
		local filedep=
		if [ -n "$prefix" ]; then
			if [ -n "$under_buildroot" ]; then
				filedep=1
			elif [ -z "$vers" ]; then
				filedep=1
			fi
		fi
		if [ -n "$filedep" ]; then
			printf '%s\n' "$pathname"
			printf '%s\n' "$orig_pathname" >>"$tmpdir"/a/flib
			continue
		fi
		...

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

а) требуемые библиотеки virtualbox расположены в каталоге отличном от
перечисленных в $RPM_FINDREQ_RPATH => $prefix не очищается;

б) $vers для данных библиотек пуст, что вместе с предыдущим пунктом (а)
приводит к выставлению filedep=1;

в) непустой filedep приводит к генерации файловой зависимости...

  Для исправления ситуации вижу следующие варианты:

1. Добавить путь к библиотекам virtualbox в список стандартных путей
поиска библиотек, через некий /etc/ld.so.conf.d/virtualbox.conf.

2. Доработать /usr/lib/rpm/lib.req так, чтобы ему можно было передать
список путей, где ненужно заменять библиотечные зависимости на файловые.
По аналогии с %_findprov_lib_path (отображаемый на
$RPM_FINDPROV_LIB_PATH) для /usr/lib/rpm/lib.prov.

3. Добавить в virtualbox предоставление файловых зависимостей для
библиотек (через %filter_from_provides, см.
<https://www.altlinux.org/SpecTips/ReqProvFilter>).

4. В собираемом пакете заменять (через filter_from_requires, см.
<https://www.altlinux.org/SpecTips/ReqProvFilter>) файловые зависимости
на эрзац библиотечных, без версионной части (set:...).

  В какую сторону двигаться?

-- 

С уважением. Алексей.

----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : signature.asc
Тип     : application/pgp-signature
Размер  : 278 байтов
Описание: OpenPGP digital signature
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20150904/d367542a/attachment-0001.bin>


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