제가 개발 중인 웹 애플리케이션에서 사용자는 컴파일하고 실행하는 데 필요한 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에서는 제공됩니다.