¿Hacer la instalación en un directorio temporal?

¿Hacer la instalación en un directorio temporal?

Deseo hacer lo siguiente:

Haga desde un proyecto de código abierto para compilar/vincular a bibliotecas, etc. Sin embargo, no quiero ejecutar esto localmente. Quiero empaquetarlo en un rpm para que pueda instalarse en los directorios correctos en otras máquinas (que por supuesto tendrían una arquitectura similar). Quiero que se compile, vincule y cree enlaces simbólicos como si fuera a instalarse en /usr/local, pero en realidad no quiero que esto vaya a un directorio en /usr/local/ sino a algún directorio temporal que pueda ser eliminado sin eliminar los archivos colocados allí por otros paquetes.

¿Existe algún parámetro para realizar la instalación que permita que esto suceda? Es decir, compilar como si se instalara en /usr/localpero en realidad colocara la "instalación" en ~/tmp/usr/local, por ejemplo.

He investigado simplemente NO ejecutar make install sino detenerme en make, pero esto mezcla ejecutables, código objeto y bibliotecas en el directorio fuente.

Respuesta1

La respuesta a esta pregunta depende del proyecto de código abierto que esté intentando instalar de esta manera. La respuesta general es que algunos proyectos de código abierto tienen Makefiles que proporcionan variables opcionales para este propósito. Un ejemplo específico de esto es gdb, cuyo Makefile de nivel superior usa (pero no parece asignar) una DESTDIRvariable, y si ejecuto este comando en el directorio de compilación de gdb,

make DESTDIR=/tmp install

antepone /tmpa cada ruta de destino antes de copiar el archivo.

Otro enfoque más difícil es realizar toda la compilación, instalación y todo, en un entorno chroot. Usando algo comoSuperposición FSpuede hacerlo más fácil, pero éste no suele ser el camino de menor resistencia.

Otra posibilidad, que probablemente sea más fácil si ya estás usando una versión de Debian (que incluye Ubuntu entre muchos otros), es buscar el paquete fuente de Debian correspondiente al proyecto de código abierto (es poco probable que este enfoque sea fácil si no hay dicho paquete fuente) y siga las instrucciones para construir el paquete Debian a partir de esa fuente. Si realmente necesita a .rpmen lugar de a, .debpuede convertirlo .deba .rpm, o tal vez pueda construir a .rpma partir de la estructura de directorios que quedó en el proceso de construcción del archivo .deb.esta respuestaes una fuente de información sobre cómo crear un paquete Debian desde el código fuente.

Para lo último openssl(mencionado en un comentario pero aún no mencionado en la pregunta) elINSTALARel archivo dice esto:

 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.

Eso varía según las diferentes versiones de openssl; para 1.0.2INSTALARdice esto:

 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.

La idea es muy parecida, con detalles ligeramente diferentes.

información relacionada