2012-03-01 1 views
5

실행중인 Java 프로세스 (데몬)가 있습니다. 이 프로세스는 서비스처럼 사용됩니다. 이 서비스를 사용하면 신뢰할 수있는 서버에서 서명 된 zip 파일을 다운로드 할 수 있습니다. ZIP 아카이브를 압축 해제 한 후 "압축을 푼"폴더에 바이너리를 실행하려고합니다.UNIX에서 Java로 전개하고 실행하십시오.

문제는이 바이너리가 실행 가능하지 않다는 것입니다 (파일 모드에서 'x'없음). Java로 설정할 수는 있지만 일반적인 방법이 필요합니다.

좋은 방법으로 배포를 수행하는 방법에 대한 아이디어가 있습니까?

는 기본적으로 나는 내가 ZIP 압축 파일을 압축 해제 한 후 유닉스 파일 모드 비트를 복원 할 (예, 자바 있어야합니다). 이 일을 할 수있는 Java Lib이 있습니까?

+0

좋은 점은 무엇을 의미합니까? 압축 파일에 대한 제어권이 있다면 압축을 풀기 전에 바이너리가 올바른 모드인지 확인하십시오. – Perception

+0

@Perception : 모든 zip 압축기가 유닉스 파일 모드 비트 저장을 지원하는 것은 아닙니다. 그리고 모든 압축 해제 기가 복원을 지원하는 것은 아닙니다 ... – thkala

+0

@thkala 그게 내가 필요한거야. 이 일을 할 수있는 Java Lib이 있습니까? – alexvetter

답변

3

Java 응용 프로그램에서 callchmod 명령을 사용하여 해당 누락 문자 인 x을 쉽게 추가 할 수 있습니다. chmod은 실행 파일 (x) 비트 자체로서 유닉스에서 표준으로 사용됩니다.

또는 straight from Java 할 수 있습니다.

그러나 압축 해제시 실행 가능 비트를 설정하려면 Java 압축 해제 라이브러리를 사용하지 않아야합니다. Unix unzip 명령을 사용하여 아카이브 압축을 풀어보십시오.이 파일은 Unix 파일 모드 비트를 저장하고 복원하는 것을 지원합니다. 유닉스 벤더가 가지고 있지 않다면, the source에서 얻을 수 있습니다.

+1

죄송합니다, 당신은 도움이되지 않습니다. Java에서 executeable 플래그를 바로 설정할 수 있습니다. 모든 바이너리에 대해 알지 못하므로 플래그를 설정할 수 없습니다. 가장 좋은 방법은 아카이브를 "압축 해제"하는 것이며 플래그는 이미 설정되어 있습니다. – alexvetter

+0

'unzip -X'는 GID/UID를 유지합니다. 문제는 jarsigner (서명에 사용하는 도구)가 플래그를 유지하지 않는다는 것입니다. 그래서 그것은 상자 밖으로 작동하지 않습니다. 나는 모든 실행 파일을 포함하는 metainfofile을 추가하는 것에 대해 생각하고있다. 찾는다. -executable -type f '가 도움이 될 수 있습니다. – alexvetter

+0

@alexvetter : 응용 프로그램이 아카이브를 수신 할 때까지 실행 비트는 이미 손실되었습니다. -/ – thkala

0

tar으로 파일을 압축 한 다음 선택적으로 압축하면 파일을 압축하기 전에 사용 권한을 그대로 유지합니다. 포장을 풀 때 --preserve-permissions을 사용하십시오.