Atualiza o Apache da fonte se o original foi instalado a partir de um rpm?

1

(migrado de stackoverflow. com )

Recentemente eu herdei um conjunto de máquinas rodando o Red Hat Enterprise Linux 5.4. Eles foram provisionados com o Apache Server v2.2.3 instalado a partir do rpms. Eu preciso atualizar o Apache para v2.2.19. Por várias razões, estou construindo o Apache a partir da fonte. Instalar minha nova versão do Apache não é problema, mas eu tenho duas instâncias do Apache, v2.2.3 em / usr / sbin / httpd e v2.2.19 em / usr / local / sbin / httpd. Na maioria dos casos, eu apenas removia a versão existente do Apache com o rpm -e, mas há uma tonelada de outros rpms que têm o Apache como uma dependência. Eu não consigo encontrar um rpm do Apache 2.2.19 para REL 5.4, então eu não posso fazer um upgrade de rpm. Se eu construir o Apache 2.2.19 com o prefixo da instância existente do Apache (/ usr / sbin / httpd), a instalação falhará porque / usr / sbin / httpd já existe. Eu explorei usando o yum para atualizar os pacotes, mas o servidor está atrás de um firewall e não pode ver o mundo exterior.

Neste ponto, estou inclinado a criar meu próprio rpm, mas parece que há muito trabalho extra para uma tarefa aparentemente pequena. Parece que há algo realmente básico que não estou conseguindo.

    
por Logan 22.07.2011 / 05:04

4 respostas

3

Você realmente quer criar um RPM. Você não deveria ter que fazer isso do zero; Haverá vários pacotes existentes por aí que você pode usar (ou pelo menos usar como base) - incluindo o pacote RPM existente.

A instalação a partir do código-fonte em um ambiente gerenciado por pacotes está apenas causando problemas, de qualquer pessoa que tenha que administrar o servidor no futuro ou até mesmo quando, em três anos, você esquecer o horror que causou.

    
por 22.07.2011 / 06:09
3

Eu costumo usar pacotes fornecidos pela distribuição, mas se por algum motivo eu precisar compilar algo como o Apache da fonte, eu me certifico de

  1. instale-o para separar o caminho (como /usr/local/apache2 ou /opt/apache2
  2. crie meus próprios scripts de inicialização para eles (como /etc/init.d/apache2_custom ) - bagunçar os scripts fornecidos pela distribuição afetará você mais cedo ou mais tarde
  3. update /etc/motd e outra documentação para indicar claramente o fato de que este servidor usa o pacote auto-compilado FOO
por 22.07.2011 / 07:49
1

Mova seu antigo httpd binário para fora do caminho e instale.

mv /usr/sbin/httpd /usr/sbin/httpd.old -v , defina seu --prefix=/usr/sbin para o Apache ./configure e, em seguida, instale. Certifique-se de fazer backup dos seus arquivos de configuração do Apache, primeiro. ( tar czpf /etc/httpd-backup-$(date +%s).tar.gz /etc/httpd/ )

    
por 22.07.2011 / 06:40
1

Embora isso possa levá-lo a um escorregadio declive da remoção de dependências, você deve verificar quais pacotes requerem que o httpd seja instalado.

# rpm -q --whatrequires httpd

Se você pode remover os pacotes do que você poderia ter sua resposta, se você não pode remover o apache devido a dependências e você absolutamente deve executar a versão mais recente do que eu sugiro desligar a versão rpm do httpd e pará-lo de iniciar na inicialização.

# service httpd stop
# chkconfig httpd off

Sugiro que você instale sua versão compilada personalizada e execute-a em outro diretório para configuração / binários. Se você seguir essa rota, também seria prudente copiar o script init padrão, modificar os caminhos e adicioná-lo como um nome diferente.

# chkconfig --add httpd-custom
# chkconfig httpd-custom on

Tenha em mente que se você estiver usando o suporte Redhat, eles não o ajudarão com a versão compilada personalizada do httpd, e eles realmente não o suportarão se você mexesse com os binários originais.

    
por 22.07.2011 / 06:44