2012-03-01 15 views
5

Mam uruchomiony proces Java (demon). Ten proces jest używany jako usługa. Dzięki tej usłudze mogę pobrać podpisane archiwum zip z zaufanego serwera. Po rozpakowaniu archiwum ZIP chcę wykonać plik binarny w folderze "unpacked".Wdróż i uruchom coś za pomocą Java w systemie UNIX

Problem polega na tym, że ten plik binarny nie jest wykonywalny (nie ma "x" w swoim trybie pliku) ... Wiem, że jest możliwe ustawienie go w Javie, ale chcę ogólny sposób.

Czy masz jakieś pomysły, jak wykonać wdrożenie w miły sposób?

(Tak, to musi być Java)

Zasadniczo chcę przywrócić bitów trybu plików UNIX po I rozpakowaniu archiwum ZIP. Czy istnieje Java Lib, który może to zrobić?

+0

Co masz na myśli mówiąc w miły sposób? Jeśli masz kontrolę nad plikami przechodzącymi do archiwum, upewnij się, że plik binarny ma odpowiednie tryby, zanim go zapakujesz. – Perception

+0

@Perception: Nie wszystkie kompresory zip obsługują przechowywanie bitów trybu plików Unix. I nie wszystkie dekompresory zip wspierają przywracanie go ... – thkala

+0

@thkala Tego właśnie potrzebuję. Czy istnieje Java Lib, który może to zrobić? – alexvetter

Odpowiedz

3

Możesz z łatwością wykonać polecenie call z aplikacji Java, aby dodać brakujący bit x. chmod jest standardem w systemie Unix jako sam plik wykonywalny (x).

Lub możesz to zrobić straight from Java.

Jeśli chcesz, aby bit wykonywalny pozostawał ustawiony przy dekompresji, prawdopodobnie nie powinieneś używać bibliotek dekompresji Java. Spróbuj użyć polecenia Unix unzip, aby rozpakować archiwum - od pewnego czasu obsługuje przechowywanie i przywracanie bitów trybu plików Unix. Jeśli twój Uniksowy sprzedawca go nie ma, możesz go uzyskać od the source.

+1

Niestety, nie pomagasz. Mogę ustawić flagę do wykonania bezpośrednio z Javy. Nie wiem o wszystkich plikach binarnych, więc nie mogę ustawić flagi. Najprościej byłoby "rozpakować" archiwum, a flagi są już ustawione. – alexvetter

+0

'unzip -X' zachowuje GID/UID. Problem polega na tym, że jarsigner (narzędzie, którego używam do podpisywania) nie zachowuje flag. Więc nie będzie działać po wyjęciu z pudełka. Zastanawiam się nad dodaniem metainfofile, który zawiera wszystkie pliki wykonywalne. 'odnaleźć . Wykonywana -type f 'może w tym pomóc. – alexvetter

+0

@alexvetter: więc do czasu, gdy aplikacja otrzyma archiwum, bity wykonywalne zostały już utracone: -/ – thkala

0

Jeśli zapiszesz swoje pliki za pomocą tar, a następnie opcjonalnie skompresujesz, zachowasz swoje uprawnienia tak, jak przed pakowaniem. Podczas rozpakowywania użyj --preserve-permissions.

Powiązane problemy