CentOS 5.5 - создание символической ссылки в файл спецификации RPM - PullRequest
7 голосов
/ 28 января 2011

Мне нужно создать следующие символические ссылки в RPM-файле

/bin/ln -sf libcrypto.so.0.9.8e /lib/libcrypto.so.0.9.8
/bin/ln -sf libssl.so.0.9.8e /lib/libssl.so.0.9.8

В моем файле спецификации RPM:

%files
%defattr(-,root,root)
/lib/libcrypto.so.0.9.8
/lib/libssl.so.0.9.8
<other files...>

%install
/bin/ln -sf libcrypto.so.0.9.8e /lib/libcrypto.so.0.9.8
/bin/ln -sf libssl.so.0.9.8e /lib/libssl.so.0.9.8

/lib/libcrypto.so.0.9.8e и/lib/libssl.so.0.9.8e существует на моем ПК, но когда я пытаюсь установить свой RPM, я получил ошибку:

libcrypto.so.0.9.8 is needed by my-test-rpm-1.el5.i686
libssl.so.0.9.8 is needed by my-test-rpm-1.el5.i686

Что не так?Что мне нужно сделать для создания символических ссылок при установке RPM?

Спасибо

Ответы [ 4 ]

2 голосов
/ 01 февраля 2011

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

AutoReqProv: no

в мой файл спецификаций. Я все еще ищу реальное решение.

1 голос
/ 05 января 2013

1) Только для символических ссылок вам не нужно вызывать ldconfig на стадии post.

2) Как уже упоминалось ldav1s: убедитесь, что ваши файлы перечислены в разделе% files.

3) Еще раз: убедитесь, что ваши файлы перечислены - особенно , если вы используете что-то вроде

%define _unpackaged_files_terminate_build 0

RHEL rpmbuild завершается с ошибкой, если в buildroot обнаружены файлы, которых нет в разделе% files. С помощью этого определения вы можете отключить поведение / ошибку, но вы должны точно знать, что вы на самом деле делаете. Если вы используете эту строку, вы должны удалить ее из вашего spec-файла.

4) Не собирайте пакет rpm от имени пользователя root. Если вы забудете использовать rpm_build_root, вы не уничтожите свою работающую систему. Ваш пример выглядит так, как будто он взят из файла спецификации Red Hat 4.2 1997 года. Начиная с Red Hat 5 (не RHEL 5!) В 1997 году команда rpm / rpmbuild знает определение RPM_BUILD_ROOT. Я думаю, что это ваша проблема : вы не используете buildroot, а устанавливаете непосредственно в корневую FS и запускаете rpmbuild от имени пользователя root.

Учитывая ваш пример, его следует изменить на:

%install
/bin/ln -sf libcrypto.so.0.9.8e $RPM_BUILD_ROOT/lib/libcrypto.so.0.9.8
/bin/ln -sf libssl.so.0.9.8e $RPM_BUILD_ROOT/lib/libssl.so.0.9.8

Использование buildroot описано в RPM документах .

1 голос
/ 28 января 2011

Вам нужно запустить ldconfig в части% post файла спецификации:

%post
umask 007
/sbin/ldconfig > /dev/null 2>&1


%postun
umask 007
/sbin/ldconfig > /dev/null 2>&1

должен это сделать.

0 голосов
/ 29 июля 2014

Лучший способ сделать это - запретить проверку созданных символических ссылок автоматическими зависимостями и требует генераторов:

%filter_provides_in libcrypto.so.0.9.8e
%filter_provides_in libssl.so.0.9.8e
%filter_requires_in libcrypto.so.0.9.8e
%filter_requires_in libssl.so.0.9.8e
%filter_setup

Более подробная информация о фильтрах зависит / требует здесь .

...