2009-06-05 13 views
60

Algunos programas (por ejemplo, el NetBeans IDE) envían los instaladores de Linux en archivos .sh. Curioso acerca de cómo exactamente 'empaquetan' un IDE completo en un 'script de shell', abrí el archivo en un editor. Vi un código de script de shell de texto sin formato y luego un galimatías aleatorio, que considero que es texto "binario" o no claro.¿Cómo funcionan los instaladores binarios de Linux (.bin, .sh)?

Me pregunto cómo mezclan scripts simples de shell y luego probablemente llamen el material "no legible", que serían los binarios.

¿Alguna idea sobre esto?

+0

Elegí la respuesta de Curt porque explicó el proceso, en lugar de apuntar a una herramienta que lo hace. Gracias Seb, James y Nik. –

Respuesta

83

Básicamente, es un script de shell adjunto a un archivo comprimido de algún tipo, como un archivo tar. Utiliza el comando tail o sed en ti mismo (la variable $0 en Bourne shell) para quitar el script de shell en el frente y pasar el resto a tu desarchivar.

Por ejemplo, cree la siguiente secuencia de comandos como self-extracting:

#!/bin/sh -e 
sed -e '1,/^exit$/d' "$0" | tar xzf - && ./project/Setup 
exit 

El comando sed anterior elimina todas las líneas de la primera línea del archivo a la primera que comienza con "salida", y luego pasa a la descansar a través de. Si lo que comienza inmediatamente después de que la línea de "salida" es un archivo tar, el comando tar lo extraerá. Si eso es exitoso, se ejecutará el archivo ./project/Setup (presumiblemente extraído del tarball).

continuación:

mkdir project 
echo "#!/bin/sh" > project/Setup 
echo "echo This is the setup script!" >> project/Setup 
chmod +x project/Setup 
tar czf - project >> self-extracting 

Ahora, si usted deshacerse de su antiguo directorio project, puede ejecutar self-extracting y se va a extraer el archivo tar y ejecutar la secuencia de comandos de configuración.

+0

¿Cómo interactúa el script de shell con el contenido del archivo? (Que probablemente sea otro lenguaje-assembly/binary/bytecodes) –

+1

En muchos casos reales, la parte binaria será codificada en base64 u otra codificación similar para que todo el archivo contiene solo caracteres imprimibles. – SingleNegationElimination

+2

Amit: una vez que haya extraído el archivo, solo se trata de archivos en el disco, y puede hacer lo que cualquier script de shell pueda hacer con los archivos en el disco. Mi ejemplo ejecuta un script de configuración que se extrajo del archivo. –

51

Es posible que desee echa un vistazo a makeself.sh

De las notas de los autores.

makeself.sh es un pequeño script que genera un archivo tar.gz auto-extraíble de un directorio. El archivo resultante aparece como un script de shell (muchos de ellos tienen un sufijo .run) y se puede iniciar como está. El archivo se descomprimirá en un directorio temporal y se ejecutará un comando arbitrario opcional (por ejemplo, un script de instalación).

Los archivos propios incluyen también sumas de verificación para la autovalidación de integridad (sumas de comprobación CRC y/o MD5).

El script makeself.sh se usa solo para crear los archivos de un directorio de archivos. El archivo resultante es en realidad un archivo TAR comprimido (usando gzip, bzip2 o compress), con un pequeño script de shell al principio. Este pequeño apéndice realiza todos los pasos para extraer los archivos, ejecutar el comando incrustado y eliminar los archivos temporales cuando todo termina. Todo lo que el usuario tiene que hacer para instalar el software contenido en dicho archivo es "ejecutar" el archivo [que es ejecutar el script]

Estoy tratando de mantener el código de este script lo más portable posible, es decir no se basa en ninguna característica específica de bash y solo llama a comandos que están instalados en cualquier sistema compatible con UNIX que funcione. Este script, así como los archivos que genera, deben ejecutarse en cualquier formato Unix, con cualquier shell Bourne compatible, siempre que los programas de compresión estén disponibles.

Por último, el paquete makeself sí se presenta como una secuencia de comandos de extracción automática llamada makeself.run.

sharutils
+0

¡Genial, incluso hay un paquete en el repositorio de Ubuntu! sudo apt-get install self – weekens

4

GNU:

http://www.gnu.org/software/sharutils/

es un conjunto de herramientas para crear archivos de concha, y proporciona algunas características adicionales que pueden ser útiles (tales como sumas de verificación para asegurar que la carga útil no está dañado En tránsito).

Proteger contra modificaciones maliciosas no es realmente factible cuando el producto final debe ser interpretable por el intérprete de comandos; cualquiera que haya entendido la técnica de generación también podría modificar la suma de comprobación.

0

También hay otro creador de instalador de software comercial (como InstallAnywhere) que básicamente tienen su propia versión de shar/makeself.

Netbeans tiene su propio motor del instalador, y parte de ella, lo que hace el desempaquetado y la puesta en marcha se realiza en el componente lanzador nativo de NBI: http://wiki.netbeans.org/NBINativeLaunchers

Crea un archivo de comandos (script) para Linux/Unix/MacOS y ejecutable nativo para Windows. Puede usar esa herramienta para sus propios proyectos, también.

Cuestiones relacionadas