Como definir $ LD_LIBRARY_PATH para uma aplicação web Tomcat depois que ela é automaticamente desfeita?

1

Eu tenho um webapp do Tomcat que precisa de LD_LIBRARY_PATH para ser definido.

Estou usando o RHEL6 e o Tomcat6 (do gerenciador de pacotes yum), o webapp é chamado de adore-djatoka .

Estou começando o tomcat usando um script fornecido que exporta várias variáveis de ambiente, mas parece que LD_LIBRARY_PATH está sendo desativado, acho que esse é um recurso de segurança, já que o script de inicialização é executado pelo usuário " root ", mas o tomcat está sendo executado como" tomcat ".

Quando eu reinicio o tomcat, vejo a seguinte linha no arquivo de log " djatoka.log "

2013-01-04/10:25:04.118/EST [main] DEBUG envParams: LD_LIBRARY_PATH=null | null/kdu_compress

O que eu li como dizendo que o aplicativo está esperando que o LD_LIBRARY_PATH esteja definido, mas acha que ele é nulo e, portanto, ele procurará kdu_compress no diretório null/ .

Eu já coloquei o script de inicialização com echo , então posso ver que LD_LIBRARY_PATH está sendo definido e exportado, então estou assumindo que ele deve estar sendo desativado.

Existem alguns scripts incluídos no webapp para testar se ele está instalado corretamente e eles são executados bem na linha de comando, mas eles são muito curtos, eles simplesmente exportam as vars do ambiente (incluindo LD_LIBRARY_PATH ) e fazem uma chamada para java.

Eu tentei adicionar

LD_LIBRARY_PATH="/opt/adore-djatoka-1.1/lib/Linux-x86-64"
export LD_LIBRARY_PATH

para /usr/share/tomcat6/bin/setenv.sh

Eu tentei adicionar

LD_LIBRARY_PATH="/opt/adore-djatoka-1.1/lib/Linux-x86-64"

para '/etc/tomcat6/tomcat6.conf

LD_LIBRARY_PATH já foi exportado no script de inicialização que liga para /etc/init.d/tomcat6 [start/stop/restart]

Sou bastante novo em alguns assuntos aqui, então algumas orientações sobre como ter uma idéia melhor de onde procurar ou quais informações seriam úteis para postar também serão apreciadas. Eu já li "por que LD_LIBRARY_PATH é ruim"

Então, minha pergunta é: como posso inicializar o tomcat, para que ele não defina LD_LIBRARY_PATH como nulo? ou como posso redefinir para o que eu quero, depois de ter sido definido como nulo? ou como posso impedir que a webapp dependa dela?

Felicidades,

    
por Andrew Martin 04.01.2013 / 16:57

3 respostas

0

Eu finalmente trabalhei em torno deste problema, pegando a fonte da webapp, codificando o caminho necessário para a linha relevante, compilando e reimplantando.

O caminho em questão foi simplesmente retirado como uma string na fonte, portanto, não foi necessário que ele fosse armazenado em LD_LIBRARY_PATH.

Para torná-lo mais portátil, devo remover a codificação e substituí-la por uma chamada para uma variável de ambiente personalizada definida em um script de configuração.

Isso significa que, pelo que eu saiba, a resposta para "Como eu configuro a variável de ambiente LD_LIBRARY_PATH, depois que ela é retirada do escopo de um programa setuid" é "Você não pode, a menos que o programa tenha um recurso para passar essas informações após a execução ".

    
por 08.01.2013 / 11:42
2

O que você realmente precisava era colocar uma bandeira apropriada em seu JAVA_OPTS (o que é um pouco contra-intuitivo).

Em uma caixa RHEL, coloque isso em / etc / sysconfig / tomcat6 ou /etc/tomcat6/tomcat.conf

JAVA_OPTS="-Xminf0.1 -Xmaxf0.3 -Xms1536m -Xmx1536m -XX:MaxPermSize=512m -Djava.awt.headless=true -DdjatokaUri=//thing.example.com/adore-djatoka -Dkakadu.home=/opt/adore-djatoka/bin/Linux-x86-64 -DLD_LIBRARY_PATH=/opt/adore-djatoka/lib/Linux-x86-64"

Você pode verificar se isso está definido em Java usando o seguinte:

# tr '
2015-08-31/08:33:01.683/NZST [http-bio-8080-exec-1] DEBUG envParams: LD_LIBRARY_PATH=/opt/adore-djatoka/lib/Linux-x86-64 | /opt/adore-djatoka/bin/Linux-x86-64/kdu_expand
' '\n' < /proc/$(pidof java)/environ

, além de ver o seguinte no log do djatoka:

# echo "/opt/adore-djatoka/lib/Linux-x86-64" > /etc/ld.so.conf.d/adore-djatoka
# ldconfig

Ou você pode configurá-lo globalmente (em um arquivo como /etc/ld.so.conf.d/adore-djatoka)

JAVA_OPTS="-Xminf0.1 -Xmaxf0.3 -Xms1536m -Xmx1536m -XX:MaxPermSize=512m -Djava.awt.headless=true -DdjatokaUri=//thing.example.com/adore-djatoka -Dkakadu.home=/opt/adore-djatoka/bin/Linux-x86-64 -DLD_LIBRARY_PATH=/opt/adore-djatoka/lib/Linux-x86-64"
    
por 30.08.2015 / 22:42
0

Com o TOMCAT 7 , simplesmente definindo um par de linhas no $ CATALINA_HOME / conf / tomcat.conf resolveu o problema (onde uma biblioteca chamada eg Crypto se torna libCrypto. então):

JAVA_OPTS="-Djava.library.path=/usr/share/tomcat/sharedLibs"
# NOTE: the above instructs only the JVM, the next is ALSO required by native libs to load dependent native libs! 
LD_LIBRARY_PATH="/usr/share/tomcat/sharedLibs"

O fato é que cada < tag >="< valor >" line em tomcat.conf se torna uma tag de exportação < tag > = < value > " (por exemplo, fazer engenharia reversa no script de início do serviço Tomcat: /etc/init.d/tomcat).

Você também pode sobrecarregar o valor globalmente em / etc / sysconfig / tomcat para todos os serviços TOMCAT que você possa ter configurado.

Portanto, se as configurações no tomcat.conf parecem não ter efeito, verifique o que o / etc / sysconfig / tomcat possivelmente sobrecarrega ...

    
por 20.08.2018 / 15:36