Удаление путей из файлов .so, чтобы RPM check-buildroot был успешным - PullRequest
0 голосов
/ 11 октября 2018

Я упаковываю некоторые библиотеки Python как RPM.Некоторые из библиотек доступны только как исходные дистрибутивы (без колес).

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

pip install --root=%{buildroot} --prefix=/x/y tornado

Когда rpmbuild заканчивает работу, он запускается check-buildroot, исборка завершается с ошибками типа:

Двоичный файл /a/b/c/BUILDROOT/my-rpm-1.0.0-1.el7.x86_64/x/y/lib64/python2.7/site-packages/tornado/speedups.so соответствует

Я вижу путь %{buildroot} в списке, если я запускаю strings tornado.so | grep BUILDROOT.

Как можно очистить файлы .so?Или, в общем, как я могу сделать check-buildroot проход?

1 Ответ

0 голосов
/ 12 октября 2018

Я выяснил, как удалить пути из SO-файлов.

Я определил, что пути были встроены в отладочную информацию, используя эту команду:

readelf --debug-dump=line speedups.so | less

Команда strip можетудалите отладочную информацию из SO-файлов, поэтому я добавил это в свою спецификацию RPM:

BuildRequires: binutils

set +e
find "%{buildroot}{%_prefix}/lib64/python2.7/site-packages" -type f -name "*.so" | while read so_file
do
    strip --strip-debug "$so_file"
done
set -e

Примечание: strip segfaults в некоторых SO-файлах, и не понятно почему.Я отключил немедленный выход с помощью set +e, чтобы сборка игнорировала их.

...