Problemas do RedHat 7 msodbcsql17

Problemas do RedHat 7 msodbcsql17

Inicialmente perguntei isso no StackOverflow, mas na minha opinião não é um problema de desenvolvimento de aplicativos. Basicamente, tenho um aplicativo C++ que se conecta ao SQL Server usando o pacote msodbcsql17. Ele está rodando no servidor Linux RedHat 7. Ao implantar este aplicativo em um novo ambiente, os administradores locais instalaram o pacote msodbcsql17 mais recente disponível com yum, que é 17.6.1.1-1. Nosso aplicativo trava ao se conectar ao banco de dados, o systemctl não consegue pará-lo, apenas eliminando-o depois de algum tempo. Verifiquei em nosso laboratório, o aplicativo funciona bem com msodbcsql17 versão 17.4.2.1.1-1. Então testei as versões pegando um de nossos servidores de laboratório, clonando-o e verificando se o aplicativo estava funcionando bem em ambos. Atualizei um dos servidores para a versão 17.6 do msodbcsql17, o aplicativo quebrou "conforme esperado". Então fiz downgrade para a versão 17.4 e o aplicativo ainda está quebrado.

Pelo que sei, os binários instalados (tudo na pasta /opt/microsoft) são os mesmos nos dois servidores. Fora isso, só consigo ver um único link simbólico de/usr/lib64 que aponta para um arquivo SO em/opt/microsoft. De acordo com o yum, nenhuma outra dependência foi instalada ou removida, verifiquei isso exportando 'lista yum instalada' para um arquivo e comparando-as por diff.

Então, o que tentei foi usar o rsync para copiar arquivos do servidor original em funcionamento para o novo servidor. Primeiro fiz testes, mas não encontrei nenhuma diferença. Então copiei toda a pasta /usr, ainda não funcionando. Então copiei toda a pasta /etc com rsync, alterei novamente o nome do host e a configuração do IP (obviamente esses arquivos também foram substituídos) e o aplicativo começou a funcionar novamente. Então eu quebrei novamente instalando a versão mais recente do msodbcsql17, removendo-o e instalando a versão anterior, e fiz outra simulação do rsync. Na pasta usr, sem diferenças, o rsync apenas registra que está ignorando links simbólicos (ignorando o arquivo não regular "tmp"). No entanto, na pasta etc havia algumas diferenças e, durante toda a minha vida, não consigo ver qual é o arquivo problemático aqui:

sudo rsync -r --dry-run --out-format="[%t]:%o:%f:Last Modified %M" [email protected]:/etc/ /etc/ | less

[2020/12/16 00:59:54]:recv:hostname:Last Modified 2019/11/07-17:10:40
[2020/12/16 00:59:54]:recv:ld.so.cache:Last Modified 2020/12/16-00:40:20
[2020/12/16 00:59:54]:recv:odbcinst.ini:Last Modified 2019/11/27-17:03:27
[2020/12/16 00:59:54]:recv:sysconfig/network-scripts/ifcfg-ens160:Last Modified 2019/11/07-17:09:02
[2020/12/16 00:59:54]:recv:tuned/active_profile:Last Modified 2020/09/15-09:51:08
[2020/12/16 00:59:54]:recv:tuned/profile_mode:Last Modified 2020/09/15-09:51:08

/etc/hostname e /etc/sysconfig/network-scripts/ifcfg-ens160 são obviamente diferentes. /etc/odbcinst.ini foi regenerado durante a instalação do msodbcsql17, mas o conteúdo é o mesmo de acordo com o diff. Quanto ao resto, novamente, o conteúdo é o mesmo de acordo com o diff. Bom, exceto o ld.so.cache que é binário, mas o tamanho é diferente, copiei esse arquivo manualmente e não resolveu.

Portanto, não tenho certeza do que exatamente está resolvendo o problema aqui. A parte mais interessante: se eu sincronizar novamente a pasta /etc com o msodbcsql17 mais recente instalado, o aplicativo começará a funcionar novamente. Então, quase como se algo quebrasse na pasta /etc?

Responder1

Ok, depois de algumas verificações mais extensas, parece que perdi a primeira: odbcinst.ini é realmente diferente! Durante a instalação do msodbc 17.6, uma linha foi removida. Depois de adicioná-lo novamente, começou a funcionar imediatamente:

odbcinst.ini

Por que essa linha foi removida, eu não sei. Ou, no caso de uma nova instalação, esta linha nunca foi adicionada ao odbcinst.ini. De qualquer forma, funciona agora.

informação relacionada