A única solução que encontrei até agora:
- compatível com a instalação de vários aplicativos ( como não raiz ),
- permitindo que cada aplicativo tenha seu próprio conjunto de dependências (com possíveis versões diferentes usadas de um conjunto de dependências para outro)
é:
recompile tudo
(e por tudo, quero dizer até mesmo gcc
se necessário, já que o /usr/swf/bin/gcc
instalado por padrão em nossos servidores Solaris é ainda mais antigo que o pré-requisito gcc
3.4.6)
Todas as versões usadas nesta recompilação global são provenientes de sunfreeware , que detalha todas as dependências necessárias e fornecerá um link para as fontes de cada pacote.
Isso funciona tanto no Linux quanto no Solaris.
Cada fonte de pacote é baixada, compilada e instalada em $HOME/usr/local
(ou seja, não em um caminho do sistema).
A chave é ter um .bashrc
(por exemplo) que irá alterar o $ PATH para não ter nenhum /usr/bin
ou /usr/local/bin
, mas apenas $HOME/usr/local/bin
.
Encontrei ao longo do tempo várias vantagens :
- As bibliotecas em
/usr
podem mudar, o que terá 0 impacto nos vários serviços atualmente em execução (porque todos eles foram compilados em seu próprio conjunto de dependências instalado em$HOME/usr/local
) - O usuário não-root que executa um aplicativo compilado é praticamente root em seu próprio ambiente, e esse usuário pode ativar / desativar / atualizar / recompilar qualquer elemento dentro de
$HOME/usr/local
- É fácil criar um novo diretório no
$HOME
e compilar novamente todas as dependências para testar uma atualização de um determinado aplicativo. Você pode acabar com várias versões de um mesmo pacote e testar / alternar de uma versão para outra. - Você controla as opções de compilação, e é muito fácil compilar um Apache Httpd com todos módulos ativados nele se você quiser (ao contrário de um pacote pré-compilado onde você pega o que obtém ).
As principais desvantagens são:
- Qualquer compilação completa pode levar tempo (até 1 hora no Linux, 3 a 4 horas no Solaris).
Mas nem sempre é necessário recompilar tudo. - As opções de compilação são diferentes para cada pacote e podem ser bastante complexas para serem configuradas corretamente
- As variáveis de ambiente (
LDFLAGS
,CFLAGS
,CPPFLAGS
,LD_LIBRARY_PATH
) podem ser difíceis de configurar com os valores corretos - Se você não tem um script capaz de extrair para você as dependências certas e lançar as compilações, isso significa: processo manual , que é um empecilho.
(Eu estou no processo de fazer esse script e publicarei no GitHub)