Self extracting shell script (o como hacer un shell auto extraible)
Si se desea distribuir un paquete de software a veces es deseable empaquetarlo todo en un solo archivo y moverlo de esa forma. Si el archivo es un shell script que tiene la capacidad de contener un archivo binario (un tarball o similar) mejor. Hay varios distribuidores que usan esta metodologia, por ejemplo Nvidia, la cual resulta bastante comoda. Veamos un ejemplo sencillo.
El metodo a usar es bastante sencillo, se arma un tarball de la misma forma de siempre y con un 'cat tarball.tar.gz >> script.sh' se le apendea al final del script. Teniendo la precaucion de no dejar ningun renglon en blanco luego del 'exit 0'.
El script al ejecutarse se quitara a si mismo de los primeros renglones dejando solo el binario, esto lo hace con la sentencia del sed, y luego redirige la salida al archivo almacenado en la variable '$MI_ARC'.
Al extraer el tarball se notara que finaliza con un error, esto se debe a como maneja los binarios el shell, si miramos el tarball que nos dejo el script en disco, podemos hacerlo con el comando 'cat archivo.tar.gz | od -ta', vamos a ver que el ultimo caracter es un "\n" cuando en el archivo original finaliza con un "null". Debido a esto el programa tar finaliza con error, aunque esto no imposibilita la extraccion exitosa del contenido del mismo. Solamente es una desprolijidad.
Hay varios "work-around" para esto pero el que mas me gusto por su disponibilidad tanto en LINUX como UNIX fue la del 'uuencode uudecode'. Mas alla de mi objetivo esta el explicar el funcionamiento de estas herramientas, pero basicamente lo que hacen es tomar el binario y recodificarlo usando la tabla de caracteres ASCII para permitir su transmision mediante un correo electronico. Con esta herramienta entonces podemos recodificar nuestro binario para que al ser apendeado al final del script no moleste el "\n".
Entonces con la modificacion realizada quedaria asi:
Esto es solamente un ejemplo sencillo sin demasiada complejidad, un detalle a tener en cuenta es que la sintaxis del uudecode-uuenconde varia en UNIX y LINUX.
Aqui algunos enlaces que me sirvieron de base para abordar el tema:
Suscribirse a:
Enviar comentarios (Atom)

No hay comentarios:
Publicar un comentario