$RPM_BUILD_ROOT
(или эквивалентный %{buildroot}
макрос файла SPEC) всегда содержит каталог, в котором RPM будет искать любые файлы для упаковки. Сценарии RPM (например, сценарий, сжимающий страницы руководства) также будут использовать это значение, чтобы знать, где искать только что установленные файлы. Обычно это значение будет непустым и будет содержать местоположение вдали от системных каталогов - обычно где-то ниже /tmp
или /var/tmp
.
Автор файла SPEC должен убедиться, что make install
(или какой-либо инсталлятор, который использует рассматриваемое программное обеспечение) поместит любые файлы в $RPM_BUILD_ROOT
с той же иерархией, которая должна использоваться, когда программное обеспечение наконец установлено. Например. чтобы RPM установил ls
в /bin/ls
, в разделе %install
SPEC file должен быть указан ls
в $RPM_BUILD_ROOT/bin/ls
.
Автор файла SPEC также должен использовать тег BuildRoot:
, чтобы указать правильное местоположение. Кроме того, система сборки может иметь файл конфигурации rpmrc
RPM с соответствующей записью. В любом случае должен быть установлен корень сборки, так что:
Обычные пользователи смогут создавать исходный пакет.
Если суперпользователь когда-либо соберет пакет с исходным кодом, процесс сборки не затрет какие-либо системные файлы, если суперпользователь не установит полученный двоичный пакет. И да, может быть хорошая причина для сборки некоторых пакетов как root
- например, для запуска полного glibc
testsuite требуется root
привилегий для некоторых тестов.
Тем не менее, RPM может и будет собирать пакет с пустой корневой переменной сборки. В этом случае и установка сборки, и конечные места назначения будут совпадать. Потенциальный вызов, например, make install
будет использовать местоположения по умолчанию, что приводит к засорению системных файлов, например, под. /usr/lib
если запустить с достаточными привилегиями. Кроме того, наличие /usr/bin/*
в вашем разделе %files
с радостью вытянет все содержимое каталога сборки хоста /usr/bin/
в ваш двоичный пакет.
Итог:
Никогда не используйте пустой корень сборки.
Не собирайте пакеты как root
, если нет абсолютно никакого другого пути.