Preâmbulo: Conforme observado na pergunta, o openssl é instalado por padrão em /usr/local/ssl
. Minha recomendação é usar ./config --prefix=/usr/local shared
(observe o espaço antes de "compartilhado") para que ele seja instalado lá (e construa a biblioteca compartilhada, libssl
), em vez de seu próprio subdiretório particular. Se você não fizer isso, terá que adicionar um arquivo a /etc/ld.so.conf.d
com /usr/local/ssl/lib
(veja abaixo a importância dos arquivos /etc/ld.so.conf.d
) e adicionar /usr/local/bin
a $PATH
.
Você precisará executar ldconfig
após make install
para adicionar as bibliotecas ao cache do vinculador. Se isso não funcionar, continue a ler.
make install
provavelmente, por padrão, foi para /usr/local
, o que deve ter precedência, mas não pode. Assim, você pode deixar a instalação openssl da sua distribuição para evitar mexer com o gerenciador de pacotes e os pré-requisitos, mas ainda usar sua própria versão localmente construída como padrão. Para verificar:
ldd $(which ssh) | grep libssl
Se você não obtiver nenhuma saída, seu ssh
foi vinculado estaticamente e precisa ser reconstruído (veja a resposta de Anton). Caso contrário, isso deve apontar para sua versão /usr/local
. Se apontar para outra coisa:
ldconfig -p | grep libssl
A versão /usr/local
deve ser mostrada, mas depois de outra. Se sim, pule para "/ usr / local / lib não tem precedência" abaixo. Caso contrário, verifique se /usr/local
está no caminho do vinculador em geral:
ldconfig -p | grep "/usr/local"
Se não, grep -r "/usr/local" /etc/ld.so.conf.d
. Se não estiver lá, adicione um arquivo a /etc/ld.so.conf.d
chamado 00-local.conf
com uma linha:
/usr/local/lib
Execute ldconfig
(sem opções) e repita isso novamente.
/ usr / local / lib não tem precedência
Encontre o arquivo de configuração do cache do vinculador onde o caminho é adicionado:
grep -r "/usr/local" /etc/ld.so.conf.d
Se não estiver lá, você terá que adicionar um arquivo como explicado acima. Presumindo que seja, o problema é que os arquivos são processados lexicograficamente. Por exemplo, se o conteúdo de /etc/ld.so.conf.d
for:
addtheselibraries.conf
libc.conf
E libc.conf
contém /usr/local/lib
, mas addtheselibraries.conf
contém, por ex. /usr/lib
, 1 então o último terá precedência. Se o arquivo /usr/local/lib
não contiver mais nada, basta renomeá-lo com algo que substituirá os outros arquivos; números vão primeiro, então 000-whatever
é bom.
Como você tem controle total sobre /usr/local/lib
, ele deve ter precedência sobre os caminhos usados pelo gerenciador de pacotes de distribuição (e geralmente faz).
1. / usr / lib é um padrão compilado no linker, mas ele e outros locais padrão do sistema (/ lib, etc) são adicionados last , o que permite que você os substitua. Por causa disso, às vezes (por exemplo) /usr/lib
é adicionado a um arquivo .conf para fazer com que ele substitua algum outro arquivo .conf.