Как изменить каталог rpmbuild по умолчанию с формы / root / каталога rpmbuild на другой

Мне нужно собрать пакет rpm для некоторых драйверов. Мне нужно собрать rpm из архива .tar.gz. Пакет tar также содержит файл .spec. Я настроил свою среду rpmbuild, как описано здесь: http://wiki.centos.org/HowTos/SetupRpmBuildEnvironment < / а>

Моя структура каталогов такова:

/home/rpmbuild
/home/rpmbuild/BUILD
/home/rpmbuild/RPMS
/home/rpmbuild/SOURCES
/home/rpmbuild/SPECS
/home/rpmbuild/SRPMS

Файл .tar.gz содержит файл спецификации и находится в / home / rpmbuild / SOURCES.

Если я затем перейду в этот каталог и запустил следующее, пакет rpm будет построен правильно, но будет помещен в / root / rpmbuild / RPMS вместо / home / rpmbuild / RPMS (где я ожидал).

sudo rpmbuild -ta driver.tar.gz

Я предполагаю, что это потому, что я запускал rpmbuild с sudo. Я правильно об этом думаю? Есть ли способ направить его вместо этого на сборку в / home / rpmbuild?

Я знаю, что использовать rpmbuild как root - плохая практика, но если я не запустил его как root, я столкнусь со многими ошибками (не имея прав доступа к каталогам, принадлежащим root, например / tmp / orbit-root). Похоже, что было бы намного сложнее изменить разрешения каждого из этих каталогов, чем изменить их обратно.

Это правильный способ сделать это? Я очень ценю помощь.


person user1764386    schedule 31.05.2014    source источник
comment
НИКОГДА не запускайте rpmbuild как root. Вы можете очень легко испортить всю вашу систему.   -  person Aaron D. Marasco    schedule 31.05.2014


Ответы (4)


Не создавайте установочное дерево для rpm с помощью такой команды:

rpmdev-setuptree

Создайте дерево rpm, в котором вы хотите построить rpm, с помощью команды, приведенной ниже:

mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

Теперь скопируйте соответствующие файлы в папки как specs и tar.gz и выполните следующую команду в каталоге rpmbuild:

rpmbuild --define "_topdir `pwd`" -v -ba SPECS/{*spec_file.specs*}
person Cherry    schedule 05.03.2020

непривилегированный пользователь должен иметь доступ к BUILDROOT. Я бы проверил .rpmmacros файл внутри $HOME/rpmbuild, он определяет, где находится ваш верхний каталог.

Я настроил свой .rpmmacros следующим образом:

%packager YourName
%_topdir /home/build/rpmbuild 
%_tmppath /home/build/rpmbuild/tmp
person nolimit    schedule 03.03.2015
comment
Этот tmppath был ключевым - person catalin.costache; 04.10.2020

Если вам требуется разрешение на запись в системные каталоги без полномочий root, то ваш %install скриптлет не устанавливается в %{buildroot}.

Для установки в %{buildroot} вам нужно будет исправить свою сборку.

Для Make-файлов, сгенерированных autoconf, это часто делается как

make DESTDIR=%{buildroot} ...
person Jeff Johnson    schedule 09.01.2015

Чтобы файлы сборки не находились в расположении по умолчанию, я указываю другой корень сборки, используя параметр --root для rpmbuild:

rpmbuild --root /home/rpmbuild -ta driver.tar.gz

Он будет рассматривать этот каталог как общий корень и пытаться использовать /home/rpmbuild/root/rpmbuild/{BUILDROOT,RPMS} и /home/rpmbuild/root/rpmbuild/var/tmp. Последний вам может потребоваться создать перед вызовом команды. Вы можете удалить /root/ часть имени, добавив к команде rpmbuild префикс HOME="".

person Allen Luce    schedule 05.04.2016