LXC 컨테이너의 busybox에 Java JDK 설치 - java/lang/NoClassDefFoundError: java/lang/Object

LXC 컨테이너의 busybox에 Java JDK 설치 - java/lang/NoClassDefFoundError: java/lang/Object

제가 개발 중인 웹 애플리케이션에서 사용자는 컴파일하고 실행하는 데 필요한 Java 코드를 업로드할 수 있습니다. 보안상의 이유로 LXC 컨테이너 안에 넣고 싶고, 공간상의 이유로 비지박스가 되기를 원합니다. 그래서 나는 busybox 컨테이너를 성공적으로 만들었습니다.

lxc-create -n my-box -t busybox

시작하고 잘 실행됩니다. 그런 다음 jdk-8u31-linux-i586.rpm을 다음에서 다운로드했습니다.여기그리고 ran ​​은 rpm -i jdk-8u31-linux-i586.rpm출력을 반환하지 않지만 /usr/java/jdk1.8.0_31모든 것이 좋아 보이는 결과를 생성합니다.

그러나 run 으로 이동하면 /usr/java/jdk1.8.0_31/bin다음 ./javac -version을 얻습니다.

/usr/java/jdk1.8.0_31/bin # ./javac -version
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object

나는 이것이 classpath 또는 java_home이 올바르게 설정되지 않았기 때문일 것이라고 생각하여 하나를 만들었습니다 /etc/profile.

JAVA_HOME=/usr/java/jdk1.8.0_31
CLASSPATH=/usr/java/jdk1.8.0_31/lib
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME
export CLASSPATH
export PATH

이것은 잘 작동합니다. 변수를 에코하면 내가 설정한 값이 있습니다. 그러나 문제는 여전히 남아 있습니다 javac. java정확히 동일한 출력을 갖습니다.

내가 여기서 무엇을 놓치고 있는 걸까요?

호스트 시스템은 Ubuntu Server 14.04입니다. 또한 동일한 결과로 x64 버전을 시도했습니다.

답변1

문제는 똑같다는 것이 밝혀졌습니다여기: Java 설치의 lib 및 jre/lib 폴더에서 *.pack 파일을 추출해야 합니다. unpack200, *.pack 파일을 .jar 파일로 압축 해제하는 프로그램은 busybox에서는 사용할 수 없지만 java에서는 제공됩니다.

관련 정보