Как установить область сборки для rpmbuild для каждого вызова
Я изменяю автоматическую сборку и хочу сказать rpmbuild
использовать определенную область сборки при вызове.
Это похоже на существующий вопрос, но более конкретный.
-
Я не хочу запускать какие-либо команды сборки в качестве пользователя root; цель состоит в том, чтобы иметь только RPM, а не устанавливать что-либо в систему.
-
Я не хочу, чтобы требовал от пользователя изменения своих точечных файлов (например, $HOME/.rpmrc
); сборка должна быть самодостаточной и не влиять на существующие пользователем настройки.
-
Я не хочу жестко закодировать местоположение в файле foo.spec
; этот файл должен использоваться как есть, если пользователь хочет построить в другом месте.
-
--buildroot
опция не то, что мне нужно; который устанавливает псевдо-корневую файловую систему для части make
процесса сборки, но мне нужно указать "область сборки" для всего процесса сборки RPM.
Я ищу гипотетический --build-area FOODIR
вариант, который может быть присвоен команде rpmbuild
или эквивалентной переменной окружения. Это должно влиять только на то, что один вызов команды и заставить ее использовать указанное место для записи для своей области сборки.
Я видел ссылки на макрос _topdir
, который, кажется, является тем, о чем я говорю, но он не кажется настраиваемым для каждого вызова.
Было бы идеально, если бы rpmbuild
мог настроить свою собственную среду в этом месте, когда она ему нужна, но я не против создания каталогов для каждой сборки, поскольку это может быть автоматизировано как часть сборки, Цель состоит в том, чтобы иметь доступное для пользователя местоположение только в течение времени выполнения сборки, а затем очистить, удалив все это место после создания файла RPM.
Ответы
Ответ 1
Он не задокументирован, но макрос _topdir
определяет область сборки.
Таким образом, вы можете установить это для каждого вызова с помощью rpmbuild --define "_topdir ${PWD}/foobar" ...
, чтобы установить каталог в нужное вам положение.
--define
является ключом к настройке значений для любого макроса, а не только для _topdir.
Ответ 2
Параметр --buildroot - это не то, что вы ищете. Имя немного вводит в заблуждение, поскольку оно не меняет buildroot, а вместо этого устанавливает корень для этапа установки сборки. RPM в основном делает "make install" как часть сборки и затем упаковывает результаты этого. Параметр buildroot позволяет выполнить эту установку, например, /tmp/myinstallroot.
Недавно мне пришлось интегрировать создание пакета rpm в автоматическую сборку и иметь такую же проблему. Я сделал, чтобы создать пользовательский файл .rpmmacros с% topdir, установленным соответствующим образом. Затем я просто временно изменяю HOME в местоположение этого файла .rpmmacros.
"HOME=mytopdir rpmbuild ...".