2012-03-01 9 views
5

Tengo un proceso Java (daemon) que se está ejecutando. Este proceso se usa como un servicio. Con ese servicio puedo descargar un archivo zip firmado desde un servidor de confianza. Después de descomprimir el archivo ZIP, quiero ejecutar un archivo binario en la carpeta "desempaquetar".Implementar y ejecutar algo con Java en UNIX

El problema es que este binario no es ejecutable (no hay 'x' en su modo de archivo) ... Sé que es posible configurarlo con Java pero quiero una forma genérica.

¿Tiene alguna idea de cómo hacer la implementación de una manera agradable?

(Sí, es necesario que haya Java)

Básicamente quiero restaurar los bits de modo de archivo de Unix después de desempaquetar el archivo ZIP. ¿Hay una Java Lib que pueda hacer esto?

+0

¿Qué quiere decir con una buena manera? Si tiene control sobre los archivos que entran en el archivo, simplemente asegúrese de que el binario tenga los modos adecuados antes de empaquetarlo. – Perception

+0

@Perception: no todos los compresores zip admiten almacenar los bits de modo de archivo Unix. Y no todos los descompresores zip admiten restaurarlo ... – thkala

+0

@thkala Eso es lo que necesito. ¿Hay una Java Lib que pueda hacer esto? – alexvetter

Respuesta

3

Puede fácilmente call el comando de su aplicación Java para agregar el bit x que falta. chmod es de serie en Unix como el ejecutable (x) bit a sí mismo.

O podría hacerlo straight from Java.

Si desea que el bit ejecutable permanezca configurado en la descompresión, no debería utilizar las bibliotecas de descompresión de Java. Intente utilizar el comando Unix unzip para descomprimir su archivo: ha admitido el almacenamiento y la restauración de los bits del modo de archivo Unix durante bastante tiempo. Si su proveedor de Unix no lo tiene, puede obtenerlo llamando al the source.

+1

Lo siento, no estás ayudando. Puedo establecer el indicador ejecutable directamente desde Java. No sé sobre todos los binarios, así que no puedo configurar la bandera. Lo mejor sería "descomprimir" el archivo y las banderas ya están configuradas. – alexvetter

+0

'unzip -X' mantiene el GID/UID. El problema es que jarsigner (herramienta que uso para firmar) no conserva las banderas. Por lo tanto, no funcionará con la caja. Estoy pensando en agregar un metainfofile que contenga todos los archivos ejecutables. 'encontrar . -executable -type f 'puede ayudar con eso. – alexvetter

+0

@alexvetter: para cuando su aplicación reciba el archivo, los bits ejecutables ya se han perdido: -/ – thkala

0

Si empaqueta sus archivos con tar y luego opcionalmente comprime, mantiene sus permisos como estaban antes de empaquetar. Use --preserve-permissions al desempacar.

Cuestiones relacionadas