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

chroot java not work

  1. 使用 chroot 後執行 java 出現函式找不到的訊息。
    java: error while loading shared libraries: libjli.so:
     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(ClassLoader.java:800)
    	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    	at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    	at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
    
  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
    17+...+43=810
    
  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 2020-05-19