LINUX.ORG.RU

Сборка rpm


0

0

Столкнулся с одной странностью. Сдаётся мне, что rpmbuild обладает излишней интеллектуальностью. :-\
Написал я для проекта шаблоны autotools, проверил сборку - вроде всё нормально. После этого стал писать спек-файл для сборки rpm
и наткнулся на одну странность. Пакет собирается, но помимо тех зависимостей, которые я указал, он каким-то образом подхватывает
ещё две зависимости. При попытке установить пакет, rpm выдаёт следующее:

error: Failed dependencies:
       libclntsh.so.10.1 is needed by myrpm-5.0-5.rh4.i386
       libocci.so.10.1 is needed by myrpm-5.0-5.rh4.i386

Причём, эти библиотеки установлены. Но в зависимости попадает не пакет, содержащий эти библиотеки, а а сами библиотеки. :-\

У меня пока подозрения есть на один сторонний m4-скрипт, который я использовал для проверки доступности библиотек Oracle:
  http://autoconf-archive.cryp.to/ax_lib_oracle_oci.html

Кто-нибудь может подсказать, откуда rpmbuild может получать информацию о зависимостях, помимо файла .spec?

> Но в зависимости попадает не пакет, содержащий эти библиотеки, а а сами библиотеки. :-\

Это обычное поведение rpm - ставить ссылки на файлы, а не на пакеты, которые содержат эти файлы. Обоснование - разные пакеты могут предоставлять одни и те же файлы. Если тебе такое поведение не нравится, отключи автоопределние зависимостей, (AutoReqProv: no, кажется), и да поможет тебе ТНБ.

> Кто-нибудь может подсказать, откуда rpmbuild может получать информацию о зависимостях

Из кучи мест... у него есть целый ворох скриптов для этого. Навскидку - сканируется вывод ldd и shebang-строки, но отнюдь не только.

tailgunner ★★★★★
()

> Причём, эти библиотеки установлены. Но в зависимости попадает не 
пакет, содержащий эти библиотеки, а а сами библиотеки.

Вместо отключения AutoReqProv лучше отфильтровать "лишние" 
зависимости и в Provides прописать имя пакета с библиотеками.
http://osdir.com/ml/altlinux.devel/2005-02/msg00543.html

Или если библиотеки ставились руками, то можно создать пакет,
который описывает только зависимости и не содержит файлов

Summary: Virtual package for Oracle libraries
Name: vpkg-oracle-libs
Version: 10.2
Release: 2
Copyright: virtual package
Group: System Environment/Libraries
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildArch: noarch
Provides: libclntsh.so.10.1 libocci.so.10.1
%description
%{summary}

%files

%changelog

amm
()
Ответ на: комментарий от amm

> лучше отфильтровать "лишние" зависимости и в Provides прописать имя пакета с библиотеками

Точно в Provides? Может, в Requires?

tailgunner ★★★★★
()
Ответ на: комментарий от amm

Если эти библиотеки не входят в состав ни одного установленного
RPM пакета, то добавление в Requires не поможет.
Есть простой, но "некрасивый" способ: добавь эти две библиотеки
в свой пакет.

romanSA
()
Ответ на: комментарий от romanSA

> Если эти библиотеки не входят в состав ни одного установленного RPM пакета, то добавление в Requires не поможет.

Так библиотеки уже установлены, решаются проблемы с зависимостями.

amm
()
Ответ на: комментарий от amm

Ню-ню...
1. Ставим клиента ORACLE из его родного дистрибутива
(libocci.so.10.1 и libclntsh.so.10.1 в комплекте).
2. Проставляем путь к библиотекам в PATH и LDPATH.
3. Пробуем установить rpm-ку, которую мы сделали с указанием этих
библиотек в Requires.
4. Имеем:
error: Failed dependencies:
libclntsh.so.10.1 is needed by myrpm-...-i386
libocci.so.10.1 is needed by myrpm-...-i386

Проверено на RHEL4 и производных дистрибутивах.
Просто при установке пакета RPM выполняет поиск необходимых
библиотек только по своей базе, а не по файловой системе.


romanSA
()
Ответ на: комментарий от romanSA

> Имеем:
error: Failed dependencies:
libclntsh.so.10.1 is needed by myrpm-...-i386
libocci.so.10.1 is needed by myrpm-...-i386

Давай еще раз:

Этих зависимостей не будет, они отфильтруются, а в Requires будет 
прописана зависимость от oracle-instantclient.

Если же оракловский клиент ставится не из rpm, то дополнительно 
устанавливается виртуальный пакет с необходимыми зависимостями.

amm
()
Ответ на: комментарий от romanSA

Виртуальные пакеты -- пакеты, описывающие зависимости в Provides, но 
фактически их не предоставляющие. Служат для прикрытия в базе rpm 
пакетов, которые ставятся руками.

Пример спека смотри выше. 

amm
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.