Командата 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

във файл ~/.rpmmacros. След това ще трябва да създадете няколко директории в ~/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