将安装到临时目录中?

将安装到临时目录中?

我希望做到以下几点:

从开源项目制作以编译/链接到库等。但是,我实际上并不想在本地运行它。我想将其打包成 rpm,以便可以将其安装到其他机器上的正确目录中(这些机器当然具有类似的架构)。我希望它编译和链接并创建符号链接,就好像它要安装在 /usr/local 下一样,但我实际上不希望它转到 /usr/local/ 下的目录,而是转到某个临时目录,可以将其清除而无需删除其他软件包放置在那里的文件。

是否有一些参数可以使安装发生这种情况 - 即构建为好像它要安装在 下/usr/local但实际上将“安装”放在 下~/tmp/usr/local,例如。

我研究过简单地不运行 make install 而是在 make 处停止,但这会使源目录中的可执行文件、目标代码和库混合在一起。

答案1

这个问题的答案取决于你试图以这种方式安装哪个开源项目。一般答案是,一些开源项目有 Makefile,它们为此目的提供了可选变量。一个具体的例子是 gdb,它的顶层 Makefile 使用(但似乎没有分配)一个DESTDIR变量,如果我在 gdb 构建目录中运行此命令,

make DESTDIR=/tmp install

它会/tmp在复制文件之前将其添加到每个目标路径的前面。

另一种更困难的方法是在 chroot 环境中完成整个构建、安装等操作。使用类似覆盖文件系统可以使这变得更容易,但这通常不是阻力最小的路径。

另一种可能性是,如果您已经在使用 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.

其想法大致相同,只是细节略有不同。

相关内容