A melhor maneira de disponibilizar o RHSCL PHP globalmente

10

Instalei o RHSCL 2 usando o seguinte URL:

https://access.redhat.com/documentation/en-US/Red_Hat_Software_Collections/2/html/2.0_Release_Notes/chap-Installation.html

usando o gerenciador de assinaturas RedHat.

Eu então corri yum remove php*seguido poryum install rh-php56

Tudo correu bem, exceto que agora o PHP não é encontrado em lugar algum. Eu executei find / -name phpe encontrei rh-php56nos seguintes diretórios:

/var/opt/rh/rh-php56/lib/php
/opt/rh/rh-php56/register.content/var/opt/rh/rh-php56/lib/php
/opt/rh/rh-php56/root/usr/bin/php
/opt/rh/rh-php56/root/usr/lib64/php
/opt/rh/rh-php56/root/usr/share/php

Qual é a melhor maneira de obter esses binários /usr/binou qualquer outro diretório que geralmente esteja disponível globalmente para todos os usuários?

Perdi uma etapa ao instalar os pacotes e é por isso que não está disponível globalmente? Ou é exatamente isso que acontece ao usar RHSCLs?

Eu testei os binários nessas pastas e eles funcionam quando eu executo, php -vportanto está funcionando bem.

Meu primeiro pensamento é apenas cpentrar /binou /usr/binmas talvez haja uma maneira oficial de fazer o que estou pedindo?

editar

Não posso comentar, não rep ... do capítulo 3 do link que eu postei, ele diz que os pacotes de coleta de software devem ser executados da seguinte maneira:

scl enable rh-php56 'php -v'

O que funciona ... no entanto, como posso executá-lo para todos os usuários, $ php -vsem comandos adicionais. Eu preciso dos binários php disponíveis globalmente para que os servidores da web possam usá-lo e usuários ssh com shells normais.

Ozzy
fonte
Você esqueceu de ler o capítulo 3 do link que você deu ....
Sven
1
Sven ... eu mesmo li .. e tudo o que tem é iniciar um sub-shell com a coleção disponibilizada. NÃO detalha como disponibilizar uma coleção POR padrão, sem que o usuário precise executar um sub-shell. Vou detalhar uma solução adequada abaixo.
anthony
Sven, isso significaria que todo usuário e daemon precisaria executar scl enable rh-php56 command, o que é complicado. Habilitar globalmente via resposta da @ antofthy é muito mais elegante.
Stefan Lasiewski 13/02/16

Respostas:

16

A maneira de importar uma coleção de software para o seu shell atual (não iniciar um sub-shell) é obter o arquivo "enable".

Por exemplo, para rh-php56 em uma máquina Redhat 7 ...

fonte / opt / rh / rh-php56 / ativar

Agora você pode executar "php" ou ler as páginas de manual "man php" normalmente.

que adicionará as variáveis ​​de ambiente apropriadas ao ambiente de shells atual. Usuários individuais podem fazer isso nos arquivos .bashrc, permitindo que ele esteja disponível no SSH (shells não interativos)

Você também pode copiar (ou vincular) o arquivo de ativação para /etc/profile.d/ com o sufixo ".sh" para ativá-lo automaticamente para TODOS os usuários.

Por exemplo

ln -s / opt / rh / rh-php56 / enable /etc/profile.d/rh-php56.sh

Seja cuidadoso ao fazer isso se mais do que o ambiente for necessário (como daemons?). Ou se várias versões desse software estiverem presentes em um sistema (para compatibilidade com outros softwares / serviços), pois pode haver interação entre as versões. Os usuários também podem não querer a versão 'mais recente' ou ficar confusos quanto ao motivo pelo qual o sistema 'base' (EG: / etc configs) não afeta a versão da coleção de software.

Anthony Thyssen (Um administrador de sistema muito antigo)

Anthony
fonte
qual instância do php.ini esse método chama?
Darvanen
1
O arquivo php.ini lido está codificado no programa php. No exemplo acima, é "/etc/opt/rh/rh-php56/php.ini". Você pode verificar isso usando o script PHP <? Php phpinfo ()?> Em uma página da web ".php" ou usando o comando CLI PHP.
Anthony
Ahhh ... Eu estava reiniciando o httpd em vez do serviço php-fpm. Postando aqui, caso mais alguém fique preso dessa maneira.
Darvanen
Isso é realmente suficiente para habilitar um pacote SCL? access.redhat.com/solutions/527703 parece criar um script que faz algo parecidosource scl_source enable python33
Stefan Lasiewski
Deve ser suficiente. Basicamente, define o ambiente para usar a versão específica sobre a versão do sistema. Mas apenas dentro do sub-shell iniciado.
Anthony