Как установить область сборки для каждого вызова rpmbuild - PullRequest
35 голосов
/ 04 июня 2010

Я изменяю автоматическую сборку и хочу сказать rpmbuild на использовать определенную область сборки при ее вызове .

Это похоже на существующий вопрос , но более конкретно.

  • Я не хочу запускать какие-либо команды сборки от имени пользователя root; цель состоит только в том, чтобы иметь RPM, а не устанавливать что-либо в систему.

  • Я не хочу требовать, чтобы пользователь изменил свои точечные файлы (например, $HOME/.rpmrc); сборка должна быть автономной и не влиять на существующие настройки пользователя.

  • Я не хочу жестко кодировать местоположение в файл foo.spec; этот файл должен использоваться как есть, если пользователь хочет создать его в другом месте.

  • Опция --buildroot - это не то, что мне нужно; который устанавливает псевдокорневую файловую систему для make части процесса сборки, но мне нужно указать «область сборки» для всего RPM процесса сборки.

Я ищу гипотетическую --build-area FOODIR опцию , которую можно передать команде rpmbuild, или эквивалентную переменную среды. Таким образом, это должно повлиять только на этот единственный вызов команды и заставить ее использовать указанное для записи место для своей области сборки.

Я видел ссылки на макрос _topdir, о котором я говорю, но он не настраивается для каждого вызова.

Было бы идеально, если бы rpmbuild мог настраивать свою собственную среду в этом месте, когда это необходимо, но я не против настроить каталоги для каждой сборки, так как это можно автоматизировать как часть сборки. , Цель состоит в том, чтобы имел это доступное для записи местоположение пользователя только на время выполнения сборки , а затем очистил, удалив все это местоположение после создания файла RPM.

Ответы [ 2 ]

71 голосов
/ 25 ноября 2010

Это не задокументировано, но макрос _topdir определяет область сборки.

Таким образом, вы можете установить этот индивидуальный вызов с помощью rpmbuild --define "_topdir ${PWD}/foobar" ..., чтобы установить для каталога то, что вы хотите.

--define - это ключ для установки значений для любого макроса, а не только для _topdir.

4 голосов
/ 04 июня 2010

Опция --buildroot - это не то, что вы ищете. Название немного вводит в заблуждение, поскольку оно не меняет root-корень, а вместо этого устанавливает корень для фазы установки сборки. RPM в основном выполняет "make install" как часть сборки, а затем упаковывает результаты этого. Опция buildroot позволяет сделать эту установку, например, в /tmp/myinstallroot.

Недавно мне пришлось интегрировать сборку пакетов rpm в автоматизированную сборку, и у меня возникла та же проблема. Я создал собственный файл .rpmmacros с соответствующим образом установленным% topdir. Затем я просто временно изменяю HOME на местоположение этого пользовательского файла .rpmmacros.

"HOME=mytopdir rpmbuild ...".
...