next up previous contents
Next: 程式線上測驗 Up: CHROOT Previous: PHP 移除 JavaScript 及   Contents

chroot java not work

  1. 使用 chroot 後直行 java 出現函式找不到的訊息。
    java: error while loading shared libraries: cannot open shared object file: No such file or directory
  2. 將 java 執行連結到 jvm 目錄中的 java 執行檔。
    [root@dywang script]# cd usr/bin
    [root@dywang bin]# ln -sf ../../usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java java
  3. 將 chroot 中 proc 目錄連結到 /proc。
    [root@dywang script]# mount -o bind /proc proc
  4. 將 chroot 中 dev 目錄連結到 /dev。
    [root@dywang script]# mount -o bind /dev dev
  5. 執行的 java class 不在目前目錄中,出現以下錯誤訊息。
    [root@dywang script]# sudo chroot /var/www/moodledata23/script java program/A/R/AR program/A/R/R.txt 2
    Exception in thread "main" java.lang.NoClassDefFoundError: program/A/R/AR (wrong name: AR)
    	at java.lang.ClassLoader.defineClass1(Native Method)
    	at java.lang.ClassLoader.defineClass(
    	at Method)
    	at java.lang.ClassLoader.loadClass(
    	at sun.misc.Launcher$AppClassLoader.loadClass(
    	at java.lang.ClassLoader.loadClass(
    	at sun.launcher.LauncherHelper.checkAndLoadMain(
  6. 執行的 java class 不在目前目錄中,不可以直接以路徑指到 class,而是要下 -cp 參數,指定 class 所在目錄。
    [root@dywang script]# sudo chroot /var/www/moodledata23/script java -cp program/A/R AR program/A/R/R.txt 2
  7. 執行的 java 程式,出現以下錯誤訊息。
    OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f75fd000000, 2555904, 1) failed; error='Permission denied' (errno=13)
          # There is insufficient memory for the Java Runtime Environment to continue.
          # Native memory allocation (malloc) failed to allocate 2555904 bytes for committing reserved memory.
          # An error report file with more information is saved as:
  8. 檢查原因為 SELinux 阻擋,使用自訂 SELinux 政策方式解決。1.6

De-Yu Wang 2018-08-08