
Я хочу сделать следующее:
Сделать из проекта с открытым исходным кодом для компиляции/линковки в библиотеки и т. д. Однако я не хочу запускать это локально. Я хочу упаковать его в 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.
Идея во многом та же самая, за исключением немного отличающихся деталей.