Команда rpmbuild не находит каталог сборки

Я пытаюсь установить некоторые файлы конфигурации, используя пакет rpm, и у меня возникают проблемы с последним этапом сборки. Я пытался использовать множество различных комбинаций переменных, но я продолжаю получать ошибки «Файл не найден». Похоже, проблема в том, где rpmbuild распаковывает (или не распаковывает) файлы и где ожидает эти файлы. Прямо сейчас у меня есть файл спецификации, который выглядит так:

Summary: My Package
Name: my-package
Version: 1.1
Release: Public
Group: Applications/System
License: Public
Requires: collectd
Source: sources.tar.gz 

%prep
%setup

%install
mkdir -p %{buildroot}/etc/collectd/
mkdir -p %{buildroot}/etc/collectd/collectd.conf.d/
mkdir -p %{buildroot}/usr/bin/


# list files owned by the package here
%files
%defattr(-,root,root)
%config /etc/collectd/collectd.conf.custom
%config /etc/collectd/collectd.d/http.conf
%config /etc/collectd/collectd.d/csv.conf
/usr/local/bin/myfile.py
/usr/local/bin/my-package

%post
ln -sf /etc/collectd.conf.custom /etc/collectd.conf

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

Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.m5Qvz9
+ umask 022
+ cd ./BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ cd /BUILD
/var/tmp/rpm-tmp.m5Qvz9: line 31: cd: /BUILD: No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.m5Qvz9 (%prep)


RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.m5Qvz9 (%prep)

Я не уверен, почему он дважды пытается cd войти в каталог /BUILD.

Если я пропущу строку %setup, я получу следующий вывод:

Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.3c5as7
+ umask 022
+ cd ./BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.FAF3wq
+ umask 022
+ cd ./BUILD
+ '[' ./BUILDROOT/my-package-1.1-Public.x86_64 '!=' / ']'
+ rm -rf ./BUILDROOT/my-package-1.1-Public.x86_64
++ dirname ./BUILDROOT/my-package-1.1-Public.x86_64
+ mkdir -p ./BUILDROOT
+ mkdir ./BUILDROOT/my-package-1.1-Public.x86_64
+ LANG=C
+ export LANG
+ unset DISPLAY
+ mkdir -p ./BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd/
+ mkdir -p ./BUILDROOT/my-package-1.1-Public.x86_64/usr/bin/
+ mkdir -p ./BUILDROOT/my-package-1.1-Public.x86_64/usr/bin/collectd.conf.d/
+ /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
+ /usr/lib/rpm/brp-python-bytecompile
+ /usr/lib/rpm/redhat/brp-python-hardlink
+ /usr/lib/rpm/redhat/brp-java-repack-jars
Processing files: my-package-1.1-Public.x86_64
error: File not found: /BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd.conf.custom
error: File not found: /BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd.d/http.conf
error: File not found: /BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd.d/csv.conf
error: File not found: /BUILDROOT/my-package-1.1-Public.x86_64/usr/local/bin/myfile.py
error: File not found: /BUILDROOT/my-package-1.1-Public.x86_64/usr/local/bin/my-package


RPM build errors:
    File not found: /BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd.conf.custom
    File not found: /BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd.d/http.conf
    File not found: /BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd.d/csv.conf
    File not found: /BUILDROOT/my-package-1.1-Public.x86_64/usr/local/bin/myfile.py
    File not found: /BUILDROOT/my-package-1.1-Public.x86_64/usr/local/bin/my-package

Чего я ожидал после удаления %setup, так как он больше не распаковывает исходный код. Любая помощь приветствуется.


person eignhpants    schedule 30.08.2015    source источник


Ответы (1)


Вы можете игнорировать эти два «cd», скорее всего, это разные процессы. Итак, что на самом деле важно

cd /BUILD

И я предполагаю, что этого каталога действительно не существует. Задается макросом %_topdir. Настоятельно рекомендуется поставить

%_topdir %(echo $HOME)/rpmbuild

в файле ~/.rpmacros. Затем вам нужно будет создать несколько каталогов в ~/rpmbuild. Вы можете запустить команду «rpmdev-setuptree» (из пакета rpmdevtools), которая создаст его для вас.

Изменить:

Дополнительно эта строка:

error: File not found: /BUILDROOT/my-package-1.1-Public.x86_64/etc/collectd.conf.custom

означает, что rpmbuild не может найти этот файл в buildroot, пока вы указываете его в разделе %files. Вы должны поместить что-то вроде этого в раздел %install:

cp -a collectd.conf.custom %{buildroot}/etc/collectd/collectd.conf.custom

если этот файл является частью вашего файла tar.gz. Или используйте любую другую команду оболочки, которая создает этот файл в этом месте. Аналогично для всех файлов, которые сообщают об отсутствии rpmbuild.

person msuchy    schedule 30.08.2015
comment
У меня нет файла ~/.rpmmacros, возможно ли, что он будет установлен где-то еще? - person eignhpants; 31.08.2015
comment
Также кажется, что /BUILD в %_topdir действительно существует. Если я уменьшу содержимое моего каталога только до /SOURCES и /SPECS (где находятся мои файлы), rpmbuild создаст другие каталоги, включая /BUILD. Это когда я использую команду rpmbuild -bb -D '_topdir .' SPECS/my-package.spec - person eignhpants; 31.08.2015