Faça a instalação em um diretório temporário?

Faça a instalação em um diretório temporário?

Desejo fazer o seguinte:

Faça a partir de um projeto de código aberto para compilar/vincular em bibliotecas, etc. No entanto, não quero realmente executar isso localmente. Quero empacotá-lo em um rpm para que possa ser instalado nos diretórios corretos em outras máquinas (que obviamente teriam arquitetura semelhante). Eu quero que ele compile, vincule e crie links simbólicos como se fosse instalar em /usr/local, mas na verdade não quero que isso vá para um diretório em /usr/local/, mas para algum diretório temporário que possa ser eliminado sem excluir arquivos colocados lá por outros pacotes.

Existe algum parâmetro para fazer a instalação que permitiria que isso acontecesse - isso é construído como se fosse para ser instalado, /usr/localmas na verdade coloca a "instalação" em ~/tmp/usr/local, por exemplo.

Eu procurei simplesmente NÃO executar make install, mas parar em make, mas isso mistura executáveis, código de objeto e bibliotecas no diretório de origem.

Responder1

A resposta a esta pergunta depende de qual projeto de código aberto você está tentando instalar dessa forma. A resposta geral é que alguns projetos de código aberto possuem Makefiles que fornecem variáveis ​​​​opcionais para esse propósito. Um exemplo específico disso é o gdb, cujo Makefile de nível superior usa (mas não parece atribuir) uma DESTDIRvariável, e se eu executar este comando no diretório de construção do gdb,

make DESTDIR=/tmp install

ele precede /tmpcada caminho de destino antes de copiar o arquivo.

Outra abordagem mais difícil é fazer toda a construção, instalação e tudo, em um ambiente chroot. Usando algo comoSobreposiçãoFSpode tornar isso mais fácil, mas normalmente este não é o caminho de menor resistência.

Outra possibilidade, que provavelmente é mais fácil se você já estiver usando um tipo Debian (que inclui o Ubuntu entre muitos outros), é buscar o pacote fonte Debian correspondente ao projeto de código aberto (esta abordagem provavelmente não será fácil se não houver tal pacote fonte) e siga as instruções para construir o pacote Debian a partir dessa fonte. Se você realmente precisa de a .rpmem vez de a, .debvocê pode convertê-lo .debem a .rpmou talvez construir a .rpma partir da estrutura de diretórios deixada para trás no processo de construção do .deb.Esta respostaé uma fonte de informações sobre a construção de um pacote Debian a partir do código-fonte.

Para o mais recente openssl(mencionado em um comentário, mas ainda não mencionado na pergunta), oINSTALARarquivo diz o seguinte:

 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.

Isso varia entre diferentes versões do openssl; para 1.0.2INSTALARdiz isto:

 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.

A ideia é praticamente a mesma, com detalhes ligeiramente diferentes.

informação relacionada