UNIX/Linux 시스템에서 사용자 계정으로 java 컴파일이 발생한 경우 다음과 같은 에러가 발생한다. 이는 컴파일이나 라이브러리를 구동할 때 사용하는 임시파일을 쓸 권한이 없어 발생하는 문제이다. 특히 root권한을 가진 계정으로 구동 시에 문제가 없을 경우는 100% 권한으로 인한 문제이다. 다만 매번 root 계정을 사용할 수 없으므로, 해당 권한이 필요한 디렉토리가 어디인지 확인하고 시스템/사용자 계정에 쓰기권한을 부여해야 한다.

 

 

 

실제 발생했던 에러와 테스트를 위해 구현한 에러 메세지는 조금 다른데, 핵심은 아래와 같다. 

 

java.io.IOException : Permision denied

at java.io.UnixFileSystem.createFileExclusively(Native Method)

at java.io.File.createTempFile

 

 

본 case의 경우 /tmp 내에 2개의 디렉토리가 생성되는데, 각각의 디렉토리가 생성되는 이유는 아래와 같다.

[그림 1] /tmp 디렉토리 내에 umsadm이라는 계정으로 생성된 디렉토리가 2개 보인다.

 

1.   Hsperfdata 디렉토리 및 내부의 파일은 JVM에서 모니터링을 수행하기 위해 생성된다.

 

2.   poifiles 디렉토리는 Apache POI API를 사용할 경우 /tmp에 생성된다. Apache POI API의 역할은 다양한 포맷의 문서파일에서 text를 추출하는 역할을 수행한다. (https://poi.apache.org/text-extraction.html)

 

 

Solution

JVM Apache POI API가 정상적으로 /tmp 디렉토리에서 쓰기작업을 할 수 있도록 해당 계정에 쓰기 권한을 부여한다. 

+ Recent posts