Сделать установку во временный каталог?

Сделать установку во временный каталог?

Я хочу сделать следующее:

Сделать из проекта с открытым исходным кодом для компиляции/линковки в библиотеки и т. д. Однако я не хочу запускать это локально. Я хочу упаковать его в rpm-файл, чтобы его можно было установить в правильные каталоги на других машинах (которые, конечно, будут иметь похожую архитектуру). Я хочу, чтобы он компилировался, линковался и создавал символические ссылки, как будто он собирается установиться в /usr/local, но на самом деле я не хочу, чтобы он попадал в каталог в /usr/local/, а в какой-то временный каталог, который можно стереть, не удаляя файлы, размещенные там другими пакетами.

Есть ли какой-то параметр в make install, который позволил бы это сделать — например, выполнить сборку так, как будто она устанавливается в , /usr/localно на самом деле поместить «установку» в ~/tmp/usr/local, например.

Я рассматривал возможность просто НЕ запускать make install, а остановиться на make, но это смешает исполняемые файлы, объектный код и библиотеки в исходном каталоге.

решение1

Ответ на этот вопрос зависит от того, какой проект с открытым исходным кодом вы пытаетесь установить таким образом. Общий ответ заключается в том, что некоторые проекты с открытым исходным кодом имеют Makefile, которые предоставляют необязательные переменные для этой цели. Одним из конкретных примеров является gdb, чей Makefile верхнего уровня использует (но, кажется, не назначает) переменную DESTDIR, и если я запускаю эту команду в каталоге сборки gdb,

make DESTDIR=/tmp install

он добавляется /tmpк каждому пути назначения перед копированием файла.

Другой, более сложный подход — выполнить всю сборку, установку и все остальное в среде chroot. Используя что-то вродеOverlayFSможно облегчить этот процесс, но это, как правило, не путь наименьшего сопротивления.

Другая возможность, которая, вероятно, проще, если вы уже используете разновидность Debian (включающую Ubuntu среди многих других), — это извлечь исходный пакет Debian, соответствующий проекту с открытым исходным кодом (этот подход вряд ли будет простым, если такого исходного пакета нет) и следовать инструкциям по сборке пакета Debian из этого источника. Если вам действительно нужен , а .rpmне , .debвы можете преобразовать .debв .rpm, или, возможно, вы можете создать .rpmиз структуры каталогов, оставшейся в процессе сборки .deb.Этот ответодин из источников информации о сборке пакета Debian из исходного кода.

Для последнего openssl(упомянутого в комментарии, но еще не упомянутого в вопросе)УСТАНОВИТЬв файле говорится следующее:

 Package builders who want to configure the library for standard
 locations, but have the package installed somewhere else so that
 it can easily be packaged, can use

   $ make DESTDIR=/tmp/package-root install         # Unix
   $ mms/macro="DESTDIR=TMP:[PACKAGE-ROOT]" install ! OpenVMS

 The specified destination directory will be prepended to all
 installation target paths.

Это зависит от разных версий openssl; для 1.0.2УСТАНОВИТЬговорит следующее:

 Package builders who want to configure the library for standard
 locations, but have the package installed somewhere else so that
 it can easily be packaged, can use

   $ make INSTALL_PREFIX=/tmp/package-root install

 (or specify "--install_prefix=/tmp/package-root" as a configure
 option).  The specified prefix will be prepended to all
 installation target filenames.

Идея во многом та же самая, за исключением немного отличающихся деталей.

Связанный контент