Como atualizar o software instalado a partir do código-fonte?

11

Eu instalei o NGinx a partir do código-fonte, já que os pacotes do repositório do Ubuntu são bem antigos. Eu queria saber qual é o melhor método para atualizar esses tipos de instalações?

Meu fluxo de trabalho atual envolve.

  • Download da nova fonte
  • Instale o software com os mesmos caminhos.
  • Reiniciando o software.

Algo me diz que este não é o melhor caminho.

Sugestões?

    
por The Pixel Developer 07.06.2009 / 17:26

6 respostas

9

Você está certo em pensar que este não é o melhor caminho. Essa rota exige muitas etapas manuais e é muito propensa a erros e não é bem dimensionada.

Ao trabalhar com distribuições Linux, você deve se ater ao gerenciamento de pacotes, tanto quanto possível.

As vantagens de usar o gerenciamento de pacotes:

  • Suporte de dependência
  • Instalação / remoção fácil
  • Inventário de software
  • Suporte para upgrade / downgrade, incluindo o gerenciamento de arquivos de configuração
  • O pacote de origem basicamente documenta seu processo de criação e o automatiza para você assim que for escrito.
  • Assinatura de pacote
  • e muito mais.

Quando você começa a trabalhar somente a partir da fonte, perde todos esses ótimos recursos e as coisas começam a ficar confusas rapidamente.

Para resolver o seu problema específico, você deve verificar o repositório de backports do ubuntu , talvez eles tenham uma versão atualizada para NGinx que você pode usar.

Se eles não têm uma versão adequada, então a melhor solução seria criar um pacote portado no Ubuntu você mesmo. Realmente não é tão difícil, e é menos trabalho do que compilá-lo a partir da fonte manualmente a cada vez. Backporting requer, basicamente, pegar o pacote fonte do Ubuntu, substituindo o antigo arquivo upsteam tar.gz com o último que você quer, e reconstruindo o pacote.

Você pode usar este guia para ajudá-lo a fazer backport do pacote.

    
por 07.06.2009 / 18:28
9

Eu achei bastante conveniente instalar uma versão diferente em locais separados e criar um link simbólico para a versão que você deseja usar, como:

lrwxr-xr-x  1 root  wheel     7B Jun  7 18:26 /usr/local/foo -> foo-1.0
drwxr-xr-x  2 root  wheel   512B Jun  7 18:26 /usr/local/foo-1.0
drwxr-xr-x  2 root  wheel   512B Jun  7 18:26 /usr/local/foo-1.1

Os benefícios são:

  • tempo de inatividade minimizado durante uma atualização
  • reversão fácil
  • você ainda pode usar o mesmo caminho, como /usr/local/foo/bin/bar

É claro que você ainda precisa reaplicar quaisquer alterações de configuração feitas na versão anterior, mas para isso você pode usar algum sistema de controle de versão (RCS / SVN / GIT) ou ferramenta de gerenciamento de configuração como Bcfg2 .

E, claro, isso é adequado apenas para um punhado ou menos hosts.

    
por 07.06.2009 / 18:35
2

Da próxima vez ... que tal compilá-lo em um * .rpm ou * .deb?

    
por 07.06.2009 / 18:38
1

Se você estiver instalando isso em uma única máquina, fazer isso da fonte toda vez é problema da melhor maneira. Se você estiver instalando isso em várias máquinas e quiser ter certeza de que é consistente, provavelmente vale a pena aprender como fazer os pacotes Debian. Você provavelmente poderia usar o pacote no Ubuntu como base.

    
por 07.06.2009 / 18:30
1

Não há um ótimo caminho. A razão pela qual o gerenciamento efetivo de pacotes foi criado foi resolver esse mesmo problema. Atualizar e desinstalar as coisas compiladas por fontes é difícil.

Concordo com o Tom e o David.

Se este for um caso único, a recompilação da fonte provavelmente é sua melhor aposta. Se estiver em uma matriz de máquinas, é definitivamente hora de migrar para o gerenciamento de pacotes suportado.

    
por 07.06.2009 / 18:33
0

eu tenho medo que este seja o único caminho. se você tiver mais servidores para manter - considere ter um ambiente de teste separado onde você compila e possivelmente empacota o resultado de sua compilação.

isso padronizará levemente suas configurações e facilitará a implantação em muitos servidores. você também não precisará do gcc em máquinas de produção [que muitos considerarão como benefício de segurança].

    
por 07.06.2009 / 17:51