Creación de un script bash de auto extracciones para Linux usando hormiga en Windows
-
16-10-2019 - |
Pregunta
Estoy tratando de generar un script de auto extracería utilizando el método discutido aquí: http://www.linuxjournal.com/node/1005818
Usando Ant (en Windows) creo el archivo de carga útil usando tarea TAR (compresión GZIP) y concatizo el script y el alquitrán utilizando la siguiente tarea concat.
<concat destfile="${output}/selfextract.bsx"
append="true"
eol="lf">
<fileset file="${installer}/decompress"/>
<fileset file="${output}/payload.tar.gz"/>
</concat>
El archivo se está creando y parece contener los datos del archivo, pero cuando se ejecuta en nuestra máquina Red Hat Gzip se queja "Datos comprimidos no válidos -Formato violado".
¿Alguien ha tenido éxito en esto antes?
Solución
A menos que uses el fixlastline
argumento (apagado por defecto) entonces eol
no se usa.
Probablemente Adivina: tienes una línea adicional al final de tu script de "descompresión" después del __ARCHIVE_BELOW__
línea. No puede tener líneas extra (incluso vacías) allí o llevará esos bytes al alquitrán. Esto podría ser causado, como dijo Dennis, por problemas de EOL, pero tendría que tener un awk
Eso no es GNU tener este problema, creo.
La manera fácil de confirmar es cambiar su tail
Para redirigir a un archivo en lugar de alquitrán, luego hexdump los primeros bytes del alquitrán original y el alquitrán de salida para ver qué bytes extra (o faltantes) están entrando allí.
Una última cosa para verificar es si necesitas establecer el binary
opción en tu concat
.
Otros consejos
Resuelto.
Más alto en el script de hormiga, estaba usando el FixCRLF
apuntar con eol="unix"
en descompress.sh. Por defecto, esta tarea agrega una nueva línea adicional al final del archivo a menos que agregue fixlast="false"
.
También agregué el binary="yes"
atributo a concat.
Mi error por no incluir el resto del guión, y gracias por la ayuda.
Código final:
<concat destfile="${output}/selfextract.bsx"
binary="yes">
<fileset file="${installer}/decompress"/>
<fileset file="${output}/payload.tar.gz"/>
</concat>