Os binários criados a partir do código-fonte podem ser instalados em uma segunda máquina?

2

Eu não tenho certeza se este é o melhor lugar para fazer isso - por favor, me aponte na direção certa se houver um lugar melhor.

Digamos, hipoteticamente, que eu tenha duas máquinas - A é uma máquina de desenvolvimento e B é uma máquina de produção. A tem software como um compilador que pode ser usado para construir software a partir da fonte, enquanto B não.

Em A, posso criar software facilmente a partir da origem, seguindo a rotina habitual:

./configure
make

Depois, posso instalar o software criado em A executando sudo make install . No entanto, o que eu realmente gostaria de fazer é instalar o software que acabei de construir em B. Qual é a melhor maneira de fazer isso?

Existem algumas opções que eu considerei:

  1. Use um gerenciador de pacotes para instalar o software em B: isso não é uma opção para mim porque o software disponível no gerenciador de pacotes está muito desatualizado.
  2. Instale o compilador e outras ferramentas de compilação em B: Prefiro não instalar ferramentas de compilação na máquina de produção devido a várias restrições.
  3. Copie manualmente os binários de A para B: isso é propenso a erros e gostaria de garantir que os binários sejam instalados de maneira consistente nas máquinas de produção.
  4. Instale somente make em B, transfira o diretório de origem e execute sudo make install em B: esta é a melhor solução que encontrei até agora, mas por algum motivo (talvez compensações de clock), make será tente reconstruir o software que já deveria ter sido construído, o que falha, pois as ferramentas de compilação não estão instaladas no B. Como minhas máquinas também possuem velocidades de I / O terríveis, a transferência do diretório de origem leva muito tempo.

O que seria realmente bom seria se houvesse uma maneira de fazer algum tipo de pacote contendo os binários construídos que podem ser transferidos e executados para instalar os binários e os arquivos de configuração. Existe alguma ferramenta desse tipo?

    
por millinon 23.05.2017 / 16:59

2 respostas

2

Usando o que você tem até agora e se o makefile é gerado com o GNU autotools, eu definiria o local de destino ou o caminho de instalação com

./configure --prefix=/somewhere/else/than/the/usual/usr/local

e, em seguida, execute

make && make install

e, finalmente, copie os arquivos da pasta de prefixo para a pasta usr/ na outra máquina. Isto está assumindo que ambas as máquinas têm a mesma arquitetura, se não, então use o toolchain cruzado de acordo.

    
por 23.05.2017 / 18:27
2

A maneira mais limpa de fazer isso provavelmente seria usar as ferramentas de empacotamento que o sistema operacional usa para criar um pacote para o aplicativo e instalá-lo como qualquer outro. Como isso varia entre os gerenciadores de pacotes e sistemas), e há uma certa curva de aprendizado lá.

A instalação manual pode ser facilitada se o pacote de fontes suportar a instalação do software em alguma subárvore (por exemplo, /opt/packagename ou /usr/local/packagename ). Compile e instale em uma máquina e copie apenas essa subárvore para o mesmo local na outra máquina. O diretório deve incluir todos os arquivos relevantes e apenas eles.

Se você precisar de alterações em /etc , terá que fazer isso manualmente. Além disso, para realmente acessar os binários, você terá que criar links simbólicos para algum diretório em seu caminho ou incluir o diretório packages bin to path. A maioria dos pacotes que usam autoconf / automake pode levar o argumento --prefix ao script ./configure para definir o caminho de instalação.

Em qualquer caso, você precisa descobrir quais bibliotecas, etc., o aplicativo que você compilou precisa, e certifique-se de ter versões compatíveis em ambas as máquinas.

    
por 23.05.2017 / 17:11