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

1

Eu gostaria de fazer o seguinte:

Crie a partir de um projeto de código aberto para compilar / vincular em bibliotecas etc. No entanto, não quero realmente executá-lo localmente. Eu quero empacotá-lo em um rpm para que ele possa ser instalado nos diretórios corretos em outras máquinas (o que, é claro, teria arquitetura semelhante). Eu quero compilar e vincular e criar links simbólicos como se fosse instalar em / usr / local, mas eu realmente não quero que isso vá para um diretório sob / 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 - que é construído como se fosse instalado em /usr/local , mas na verdade coloque a "instalação" sob ~/tmp/usr/local , por exemplo.

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

    
por Steve Cohen 22.09.2016 / 22:47

1 resposta

3

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

make DESTDIR=/tmp install

pré-acrescenta /tmp a cada caminho de destino antes de copiar o arquivo.

Outra abordagem mais difícil é fazer toda a compilação, instalação e tudo, em um ambiente chroot. Usar algo como OverlayFS pode facilitar, mas esse não é o caminho de menor resistência.

Outra possibilidade, que provavelmente é mais fácil se você já estiver usando um sabor Debian (que inclui o Ubuntu, entre muitos outros), é buscar o pacote fonte Debian correspondente ao projeto de código aberto (esta abordagem é improvável que seja fácil se não existe tal pacote fonte) e siga as instruções para construir o pacote Debian a partir dessa fonte. Se você realmente precisa de um .rpm em vez de um .deb , é possível converter .deb em .rpm ou talvez seja possível construir um .rpm a partir da estrutura de diretórios deixada no processo de criação do .deb . Esta resposta é uma fonte de informações sobre como construir um pacote Debian a partir da fonte.

Para o último openssl (mencionado em um comentário, mas ainda não mencionado na pergunta), o INSTALL diz isso:

 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 em diferentes versões de openssl ; para 1.0.2 INSTALL diz 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 é muito parecida, com detalhes ligeiramente diferentes.

    
por 23.09.2016 / 01:17

Tags