LINUX.ORG.RU

Не работает переопределение buildroot в spec-файле для rpmbuild

 , , ,


0

1

Подскажите, как правильно переопределить путь BUILDROOT в описаниях SPEC-файла?

В заголовке прописал

....
BuildArch: noarch 
%define _topdir /home/snake/wrk
%define _prjdir /opt/%{name}

BuildRoot: %{_topdir}/rpm/buildroot/%{name}-%{version}-%{release}-fff
%define buildroot %{_topdir}/rpm/buildroot/%{name}-%{version}-%{release}-fff
....
т.е. по всем мануалам, я указал rpmbuild использовать папку

/home/snake/wrk/rpm/buildroot/MyPrj-1.0-1-fff

для записи туда файлов и последующей их архивации НО скрипт секции %install, при

%install
....
install -m 0644 file.a %{buildroot}%{_prjdir}/file.a

упорно искал файлы в директории

/home/snake/rpmbuild/BUILDROOT/MyPrj-1.0-1.x86_64

т.е. по пути который генерировал сам rpmbuild причем заметьте, что архитектуру, объявленную в шапке, он упорно не видит!

проверил значения этих макросов, прописал в секции %prep

%prep
echo %{buildroot}
echo $RPM_BUILD_ROOT

действительно, rpmbuild выдает пути

/home/snake/rpmbuild/BUILDROOT/MyPrj-1.0-1.x86_64

вместо указанного ему

/home/snake/wrk/rpm/buildroot/MyPrj-1.0-1-fff

Решение: Для %install - прописать определение макроса еще раз в секции %prep

%prep
%define buildroot %{_topdir}/rpm/buildroot/%{name}-%{version}-%{release}-fff

тогда секция %install начинает понимать директорию - куда записать файлы и

%install
....
install -m 0644 file.a %{buildroot}%{_prjdir}/file.a
....
записывает их по пути

/home/snake/wrk/rpm/buildroot/MyPrj-1.0-1-fff

НО, секция %files - упорно продолжает искать файлы для упаковки в своем изначально заданном каталоге

/home/snake/rpmbuild/BUILDROOT/MyPrj-1.0-1.x86_64

в файле /usr/lib/rpm/macros, написано следующее

....
#       The directory where buildroots will be created.
%_buildrootdir          %{_topdir}/BUILDROOT

#       Build root path, where %install installs the package during build.
%buildroot              %{_buildrootdir}/%{NAME}-%{VERSION}-%{RELEASE}.%{_arch}
....

т.е. свое значение для поиска rpmbuild явно берет из этого определения.

Подскажите! Как же правильно переопределить директории в spec-файле для корректной работы rpmbuild??

Ответ на: комментарий от t184256

так яже вроде define и делаю

....
%define buildroot %{_topdir}/rpm/buildroot/%{name}-%{version}-%{release}-fff
....

Если сделать в шапке - то rpmbuild класть хотел на это переопределение

для секции %install помогает определить внутри секции

в секции %files это определение не работает

может я не то переопределяю?? но я пробовал менять

%_buildrootdir

эффекта - 0

rpmbuild при создании своего пути даже не видит noarh и ставит свое x86_64 - по умолчанию

ssnakess
() автор топика

Ды твоюжеж налево!!

Ларчик просто открывался

надо эти %define ставить в самом начале spec-файла

%define _topdir /home/snake/wrk
%define _tmppath %{_topdir}/rpm/tmp
%define _builddir %{_topdir}
%define _rpmdir %{_topdir}/rpm/rpms
%define _prjdir /opt/%{name}
%define buildroot %{_topdir}/rpm/buildroot/%{name}-%{version}-%{release}-fff

Name: MyPrj
Version: 1.0
Release: 1
Summary: test-rpm project
License: none
URL: http://ya.ru
Group: Education
BuildArch: noarch


%description
testing rpm create process

%install
rm -rf %{buildroot}
mkdir -p %{buildroot}%{_prjdir}
install -m 0644 file.a %{buildroot}%{_prjdir}/file.a
mkdir -p %{buildroot}%{_sysconfdir}/%{name}
install -m 0644 conf/file.b %{buildroot}%{_sysconfdir}/%{name}/file.b
mkdir -p %{buildroot}%{_prjdir}/txt
install -m 0644 txt/file.c %{buildroot}%{_prjdir}/txt/file.c
%define buildroot %{_topdir}/rpm/buildroot/%{name}-%{version}-%{release}-fff

%files
%defattr(-,root,root,-)
%dir %{_prjdir}
%{_prjdir}/file.a
%{_prjdir}/txt/file.c
%config %{_sysconfdir}/%{name}/file.b

%post

%changelog
* Fri Jul 28 2023 user <user@domen.local> - 1.0
- Create test build
ssnakess
() автор топика