Em última análise, essa questão é sobre o Yum e o Amazon Linux AMI (veja o final para essa parte), mas primeiro vou dar um panorama de como cheguei à minha situação.
Eu instalei o PHP a partir do código-fonte
Estou trabalhando na configuração de um novo aplicativo PHP em um servidor da Web hospedado com o Amazon Web Services. A instância do EC2 está executando o "Amazon Linux AMI release 2012.09" (de acordo com o / etc / issue). Eu não sou o administrador principal deste servidor, por isso gostaria de limitar o impacto das alterações que faço.
Já existem alguns aplicativos PHP em execução neste servidor. Eu preciso de uma versão mais nova do PHP do que eles estão usando. Eles estão usando a versão do pacote distro, que é 5.3, muito antiga para meus propósitos.
Eu pensei em baixar o código fonte do PHP, compilá-lo e executá-lo ao lado da outra versão. (Como eu vou definir isso é um assunto diferente que eu não vou entrar aqui.)
Eu configurei meu build PHP com estas opções:
--prefix=/opt/php-5.5.9
--with-openssl
--with-mcrypt
--with-mysql
--with-pdo-mysql
--enable-fpm
--with-apxs2=/usr/sbin/apxs
Depois mudei para root e executei make install
. (Em retrospectiva, fazer isso como root foi um erro, eu deveria ter definido permissões de gravação de usuário no diretório de instalação e instalado como meu usuário para que eu pudesse ter certeza de que nenhum dos arquivos estava sendo colocado fora do diretório de instalação. .)
Em seguida, notei que o servidor da Web não estava respondendo. Depois de reiniciá-lo, funcionou bem. Fiz um pouco e notei que, para phpversion
, o servidor agora relata a nova versão que acabei de instalar em /opt
, não a versão da distro que eu pretendia deixar no lugar. Acontece que make install
foi em frente e substituiu o libphp5.so
existente. Relatórios de RPM:
[root@xxxx etc]# rpm -V php
S.5....T. /usr/lib64/httpd/modules/libphp5.so
Tudo ainda funciona muito bem na nova versão, tanto quanto eu sei, então provavelmente nenhum dano foi feito. No entanto, prefiro deixar a versão antiga do PHP no lugar para que os pacotes ainda possam ser gerenciados pelo gerenciador de pacotes. Esta foi minha intenção ao colocar a nova versão em /opt
.
Tentando colocar a versão antiga de volta, Yum falhou
Eu tentei restaurar a versão antiga de libphp5.so
com yum reinstall
. Aqui está a saída:
[root@xxxx etc]# yum reinstall php
Loaded plugins: fastestmirror, local, priorities, security, update-motd, upgrade-helper
Setting up Reinstall Process
Loading mirror speeds from cached hostfile
* amzn-main: packages.us-east-1.amazonaws.com
* amzn-updates: packages.us-east-1.amazonaws.com
amzn-main | 2.1 kB 00:00
amzn-updates | 2.3 kB 00:00
265 packages excluded due to repository priority protections
Installed package php-5.3.20-1.29.amzn1.x86_64 (from amzn-updates) not available.
Nothing to do
A partir desta mensagem, não estou claro qual é o problema. Está falhando em encontrar o pacote no servidor de atualização? O próprio servidor não está disponível (esperemos que temporariamente)? Ou está excluindo o pacote devido a proteções prioritárias e, portanto, recusando-se a reinstalá-lo?
Qual é a melhor resolução para esse problema que me permite restaurar a versão antiga do PHP e colocá-la de volta sob o controle do gerenciador de pacotes?