Подтвердить что ты не робот

Как установить область сборки для rpmbuild для каждого вызова

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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 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 ...".