Доставка *.so и бинарных файлов при сборке пакета RPM

Я создал приложение Python, в котором я хотел бы отправить .so и некоторые двоичные файлы в окончательном пакете RPM. После долгого чтения я нашел способ добавить двоичные файлы/изображения и другие файлы данных в setup.py. Теперь, когда я собираю RPM с помощью команды python setup.py bdist_rpm, он жалуется на зависимость от архитектуры:

    Arch dependent binaries in noarch package
error: command 'rpmbuild' failed with exit status 1

Погуглив, я обнаружил, что мы можем добавить:

#%define _binaries_in_noarch_packages_terminate_build 0

или удаление строки BuildArch: noarch в файле packagename.spec для преодоления сбоя rpmbuild. Однако каждый раз, когда я добавляю или удаляю строку из build/bdist.linux-i686/rpm/SPECS/packagename.spec, команда python setup.py bdist_rpm всегда перезаписывает файл .spe.

Есть ли способ избежать Arch dependent binaries и отправлять *.so и другие бинарные файлы в rpm?


person sundar_ima    schedule 22.01.2014    source источник


Ответы (2)


Поведение bdist_rpm определяется набором настроек в:

  • /usr/lib/rpm/macros
  • /etc/rpm/macros
  • $HOME/.rpmmacros

Готов поспорить, что в вашей системе существует только /usr/lib/rpm/macros. Это нормально.

Итак, чтобы предотвратить ошибку «Зависимые от Arch двоичные файлы в пакете noarch», вы должны создать /etc/rpm/macros или ~/.rpmmacros и добавить следующее:

%_unpackaged_files_terminate_build      0
%_binaries_in_noarch_packages_terminate_build   0

Не изменяйте /usr/lib/rpm/macros, потому что этот файл будет перезаписан системой всякий раз, когда пакет rpm-build обновляется, понижается или переустанавливается.

Если вы хотите переопределить поведение для всех в системе, поместите настройки в /etc/rpm/macros. Если вы хотите переопределить поведение для определенного пользователя, добавьте настройки в $HOME/.rpmmacros.

.rpmmacros превосходит /etc/rpm/macros, который превосходит /usr/lib/rpm/macros.

Примечание: полезно изучить /usr/lib/rpm/macros, чтобы узнать, какие настройки доступны, и примеры синтаксиса.

Кстати, настройка %_unpackaged_files_terminate_build 0 предотвращает ошибку error: Installed (but unpackaged) file(s) found:.

person shrewmouse    schedule 15.11.2016
comment
вы также можете добавить в файл спецификации следующее: %define _binaries_in_noarch_packages_terminate_build 0 - person stephan schultchen; 04.10.2017
comment
Я добавил эти %define _binaries_in_noarch_packages_terminate_build 0 %define _unpackaged_files_terminate_build 0 в файл спецификации, и все заработало нормально. - person Dileep Dominic; 21.01.2021

Насколько мне известно, файлы .so всегда зависят от архитектуры.

В вашем случае, чтобы не редактировать спецификацию все время, вы можете добавить --force-arch=<your_arch> к нашему setup.py bdist_rpm

e.g.

python setup.py bdist_rpm --force-arch=x86_64
person frans    schedule 04.07.2014