rpmbuild завершается с ошибкой: файл не найден

Я пытаюсь создать свой первый RPM-пакет и борюсь с процессом rpmbuild.

Это моя среда, с которой мне приходится иметь дело:

cat /home/rpmadm/.rpmmacros

%_topdir /export/standardbuild
%_tmppath /export/standardbuild/tmp
%_sourcedir /export/standardbuild/SOURCES
%_rpmdir /export/standardbuild/RPMS
%_srcrpmdir /export/standardbuild/SRPMS
%_builddir /export/standardbuild/COMP_BUILDS/%{name}

Мой Makefile выглядит так:

packagename = metricconf

%_sourcedir = /export/standardbuild/SOURCES


# version number of package: make sure you also update the version
# number in the spec file
version = 1.0

all:
        @echo "usage: make dist | package"

install:
        if [ ! -d $(DESTDIR)/tmp/$(packagename) ]; \
        then \
                mkdir -p $(DESTDIR)/tmp/$(packagename); \
        fi
        
        cp mb_system_betrieb.yml        $(DESTDIR)/tmp/$(packagename)/mb_system_betrieb.yml
        cp metricbeat                   $(DESTDIR)/tmp/$(packagename)/metricbeat
        cp metricbeat.yml               $(DESTDIR)/tmp/$(packagename)/metricbeat.yml

dist:
        tar cvf $(packagename)-$(version).tar ../$(packagename)-$(version)
        gzip $(packagename)-$(version).tar
        cp $(packagename)-$(version).tar.gz $(%_sourcedir) && rm $(packagename)-$(version).tar.gz

package:        rpm

rpm:
        rpmbuild -ba $(packagename).spec
        rm -rf $(packagename)-$(version).tar

А это мой файл .spec:

Summary:        configures Metricbeat for AIX
Name:           metricconf
Version:        1.0
Release:        0
Vendor:         Comp 
Source:         metricconf-1.0.tar.gz
BuildRoot:      %{_builddir}/%{name}-{version}

Requires: metricbeat

%description
metricconf prepares AIX for metricbeat
%prep
%setup -c
%build
%install
%files
%defattr(644,root,system)
/tmp/metricbeat.yml
/tmp/mb_system_betrieb.yml
/tmp/metricbeat

make dist работает хорошо, и файл .tar.gz будет создан правильно. Но команда make rpm каждый раз терпит неудачу со следующей ошибкой:

make rpm
        rpmbuild -ba metricconf.spec
Executing(%prep): /bin/sh -e /export/standardbuild/tmp/rpm-tmp.cIlqQa
+ umask 022
+ cd /export/standardbuild/COMP_BUILDS/metricconf
+ cd /export/standardbuild/COMP_BUILDS/metricconf
+ rm -rf metricconf-1.0
+ /usr/bin/mkdir -p metricconf-1.0
+ cd metricconf-1.0
+ /bin/gzip -dc /export/standardbuild/SOURCES/metricconf-1.0.tar.gz
+ /bin/tar -xvvof -
x ../COOPmetricbeat-1.0
x ../COOPmetricbeat-1.0/metricconf.spec, 2289 bytes, 5 tape blocks
x ../COOPmetricbeat-1.0/ChangeLog, 135 bytes, 1 tape blocks
x ../COOPmetricbeat-1.0/Makefile, 885 bytes, 2 tape blocks
x ../COOPmetricbeat-1.0/README, 74 bytes, 1 tape blocks
x ../COOPmetricbeat-1.0/mb_system_betrieb.yml, 1161 bytes, 3 tape blocks
x ../COOPmetricbeat-1.0/metricbeat, 1552 bytes, 4 tape blocks
x ../COOPmetricbeat-1.0/metricbeat.yml, 1240 bytes, 3 tape blocks
+ STATUS=0
+ [ 0 -ne 0 ]
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
Executing(%build): /bin/sh -e /export/standardbuild/tmp/rpm-tmp.dalqQb
+ umask 022
+ cd /export/standardbuild/COMP_BUILDS/metricconf
+ cd COOPmetricbeat-1.0
+ exit 0
Executing(%install): /bin/sh -e /export/standardbuild/tmp/rpm-tmp.delqQc
+ umask 022
+ cd /export/standardbuild/COMP_BUILDS/metricconf
+ cd metricconf-1.0
+ exit 0
Processing files: metricconf-1.0-0.ppc
error: File not found: /export/standardbuild/tmp/metricconf-1.0-0.ppc/tmp/metricbeat.yml
error: File not found: /export/standardbuild/tmp/metricconf-1.0-0.ppc/tmp/mb_system_betrieb.yml
error: File not found: /export/standardbuild/tmp/metricconf-1.0-0.ppc/tmp/metricbeat


RPM build errors:
    File not found: /export/standardbuild/tmp/metricconf-1.0-0.ppc/tmp/metricbeat.yml
    File not found: /export/standardbuild/tmp/metricconf-1.0-0.ppc/tmp/mb_system_betrieb.yml
    File not found: /export/standardbuild/tmp/metricconf-1.0-0.ppc/tmp/metricbeat
make: 1254-004 The error code from the last command is 1.## Heading ##

Пожалуйста, кто-нибудь может мне объяснить, почему rpmbuild ищет файлы в /export/standardbuild/tmp/metricconf-1.0-0.ppc, а не в /export/standardbuild/COMP_BUILDS/metricconf/metricconf-1.0 ???

Я много читал о создании RPM, особенно на страницах документации Fedora, но не имеет значения, что я изменяю в файле Makefile или .spec, ошибка остается.


person Jörg Kauke    schedule 23.11.2020    source источник


Ответы (1)


Ваши %build и %install фазы пусты, поэтому он ничего не делает. Все, что у вас есть, это %prep, который разворачивает его во временную промежуточную зону.

Поищите примеры, например, если вы используете autoconf, вам, вероятно, понадобится %configure.

ETA: Также похоже, что вы пытаетесь поместить свои окончательные файлы в /tmp на целевой машине, что не сработает, потому что они исчезнут после перезагрузки. %files должен содержать список файлов, которые должны быть установлены в целевой без каких-либо начальных временных путей.

person Aaron D. Marasco    schedule 23.11.2020
comment
Привет, Аарон, Спасибо за ответ. Файлы перемещены в / tmp для дальнейшей обработки в скрипте% post. Пока это правильно. Я до сих пор не понимаю, где установлена ​​переменная для папки /export/standardbuild/tmp/metricconf-1.0-0.ppc/tmp/. Я проверю макрос% configure. - person Jörg Kauke; 24.11.2020
comment
Не делай этого. RPM перечисляет, куда идут файлы. В противном случае вы создадите проблемы для таких вещей, как автоматические сканеры, которые будут запускать rpm -aV на вашем компьютере и отображать тонны отсутствующих файлов. Поместите их в известное абсолютное место. Если вам нужно добавить одну-две символические ссылки в %post, ничего страшного. - person Aaron D. Marasco; 25.11.2020