Tomcat webapp 自動取消設置後如何設置 $LD_LIBRARY_PATH?
我有一個需要
LD_LIBRARY_PATH
設置的 Tomcat webapp。我正在使用 RHEL6 和 Tomcat6(來自 yum 包管理器),webapp 被稱為
adore-djatoka
.我通過使用提供的導出許多環境變數的腳本來啟動 tomcat,但它似乎
LD_LIBRARY_PATH
沒有設置,我認為這是一個安全功能,因為 init 腳本由使用者執行“root
”但 tomcat 執行為“tomcat
”。當我重新啟動 tomcat 時,我在日誌文件中看到以下行“
djatoka.log
”2013-01-04/10:25:04.118/EST [main] DEBUG envParams: LD_LIBRARY_PATH=null | null/kdu_compress
我讀到它告訴我該應用程序期望設置 LD_LIBRARY_PATH ,但發現它為空,因此它將
kdu_compress
在目錄中查找null/
。我已經亂扔了啟動腳本,
echo
所以我可以看到它LD_LIBRARY_PATH
正在被設置和導出,所以我假設它必須被取消設置。有幾個腳本與 webapp 捆綁在一起,用於測試它是否已正確安裝,它們可以從命令行執行良好,但它們非常短,它們只是導出環境變數(包括
LD_LIBRARY_PATH
)並呼叫 java.util 。我試過添加
LD_LIBRARY_PATH="/opt/adore-djatoka-1.1/lib/Linux-x86-64" export LD_LIBRARY_PATH
到
/usr/share/tomcat6/bin/setenv.sh
我試過添加
LD_LIBRARY_PATH="/opt/adore-djatoka-1.1/lib/Linux-x86-64"
到`/etc/tomcat6/tomcat6.conf
LD_LIBRARY_PATH
已在繼續呼叫的啟動腳本中導出/etc/init.d/tomcat6 [start/stop/restart]
我對這裡的一些主題還是很陌生,所以一些關於如何更好地了解下一步看哪裡的指導,或者哪些資訊對發布有用的資訊也將不勝感激。我已經讀過“為什麼 LD_LIBRARY_PATH 不好”
所以我的問題是如何啟動tomcat,使其不設置
LD_LIBRARY_PATH
為null?或者如何在將其設置為空後將其重新設置為我想要的?或者我怎樣才能阻止 webapp 依賴它?乾杯,
我最終通過獲取 webapp 的原始碼、將所需路徑硬編碼到相關行、編譯和重新部署來解決這個問題。
有問題的路徑只是作為字元串在源中提取出來,因此不需要將其儲存在 LD_LIBRARY_PATH 中。
為了使其更便攜,我應該刪除硬編碼並將其替換為對配置腳本中設置的自定義環境變數的呼叫。
這意味著,據我所知,“如何設置 LD_LIBRARY_PATH 環境變數,在 setuid 程序範圍內取消設置後”的答案是,“你不能,除非程序本身俱有執行後傳遞此資訊”。
您實際需要的是在您的 JAVA_OPTS 中放置一個適當的標誌(這有點違反直覺)。
在 RHEL 機器上,將其放入 /etc/sysconfig/tomcat6 或 /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"
您可以使用以下方法驗證是否在 Java 中設置:
# tr '\0' '\n' < /proc/$(pidof java)/environ
以及在 djatoka 日誌中看到以下內容:
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
或者您可以只在全域範圍內設置它(在 /etc/ld.so.conf.d/adore-djatoka 等文件中)
# echo "/opt/adore-djatoka/lib/Linux-x86-64" > /etc/ld.so.conf.d/adore-djatoka # ldconfig