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/local
mas 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 DESTDIR
variável, e se eu executar este comando no diretório de construção do gdb,
make DESTDIR=/tmp install
ele precede /tmp
cada 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 .rpm
em vez de a, .deb
você pode convertê-lo .deb
em a .rpm
ou talvez construir a .rpm
a 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.