1

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

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

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

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

1 ответ1

3

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

make DESTDIR=/tmp install

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

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

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

Для последней версии openssl (упомянутой в комментарии, но еще не упомянутой в вопросе) файл INSTALL сообщает следующее:

 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 INSTALL говорит это:

 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.

Идея почти такая же, с немного другими деталями.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .