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