CyberAlberto

Mi rincón personal en internet

Linux Mint 9 liberado

El esperado Linux Mint 9 ha sido liberado hace unos días.

Tengo instalado Linux Mint 8 en dos portátiles y va estupendamente bien, reconociendo todo el hardware y con excelente rendimiento. Personalmente me gusta más que Ubuntu. En cuanto pueda, lo probaré.

Anuncios

Sábado, 8 mayo 2010 Posted by | Informática e Internet, Personal | Comentarios desactivados en Linux Mint 9 liberado

Compresor que genera ficheros autoextraíbles

Es una idea que siempre me ha rondado por la cabeza, hasta que he decidido desarrollarla. Quería tener un fichero comprimido con las instrucciones en su interior para descomprimirse a sí mismo.

Los ficheros generados por esta utilidad contienen un shell script en su cabecera que contiene las instrucciones para descomprimirse. La sobrecarga que produce es de poco más de medio Kbyte, por lo que no supone ningún inconveniente. Se ha probado en Mac OS X, Linux y CygWin, por lo que seguramente funcione en el resto de sabores UNIX (o lo que es lo mismo: en cualquier sistema operativo distinto de Windows). Para que funcione en Windows es necesario instalar CygWin.

Se necesitará tener instalados los siguientes ejecutables en el sistema: bash, tar, gzip, bzip2, cat, wc, tail, chmod, rm, mv. md5 y mkdir. Esto normalmente no supone ningun problema, debido a que son comandos estándar en cualquier distribución.

La sintáxis es la siguiente:

comprime nombre_de_archivo [formato_de_compresión]
  • nombre_de_archivo: es el nombre de archivo a generar junto con su ruta
  • formato_de_compresión: puede ser b (bzip2) o g (gzip)

Por ejemplo:

cd /home/user/documents
comprime ~/fichero g

Crea el archivo ejecutable ~/fichero.tgz.sfx que contiene el directorio /home/user/documents comprimido mediante gzip

A la hora de descomprimir el fichero generado, se ha incluido código hash md5, para saber si ha sido alterado el fichero comprimido.

El código es el siguiente:

#!/bin/bash

if [ "$2" = "g" ]; then
	compresor="z"
	extension="tgz"
else
	if [ "$2" = "b" ]; then
		compresor="j"
		extension="tbz"
	else
		if [ "$2" = "" ]; then
			compresor="j"
			extension="tbz"
		else
			echo "ERROR: \"$2\" is an invalid format, choose g (gzip) or b (bzip2)."
			exit -1
		fi
	fi
fi

if [ $1 ] ; then
	tar cvf$compresor /tmp/compressed .
	SIZE=$(cat /tmp/compressed | wc -c)
	SALIDA="$1.$extension.sfx"
	echo "#!/bin/bash" >/tmp/comp.sfx
	echo "">>/tmp/comp.sfx
	echo "SIZE=\"$SIZE\"">>/tmp/comp.sfx
	echo "compresor=\"$compresor\"">>/tmp/comp.sfx
	echo "extension=\"$extension\"">>/tmp/comp.sfx
	echo "fecha=\"$(date)\"">>/tmp/comp.sfx
	echo "mdf=\"$(cat /tmp/compressed | md5)\"">>/tmp/comp.sfx
	cat "$0" | tail -35 >>/tmp/comp.sfx
	cat /tmp/compressed >>/tmp/comp.sfx
	chmod 755 /tmp/comp.sfx
	rm /tmp/compressed
	mv /tmp/comp.sfx "$SALIDA"
	echo
	echo The file $SALIDA has been created.
	exit 0
fi

echo
echo SYNTAX: $(basename $0) filename [format]
echo 
echo WHERE:
echo "        filename --> The desired name and path"
echo "        format   --> g (gzip) or b (bzip2)"
echo
echo $(basename $0) compresses the current directory as a self-extracting file.
echo 
echo
exit 1

# --------------------------------------------------------

if [ -f "$0" ] ; then
	DIRECTORIO=$(basename $(basename "$0" .sfx) .$extension)
	
	if [ -d "$DIRECTORIO" ] ; then
		echo
		echo "ERROR: The directory named \"./$DIRECTORIO\" exists"
		exit -1
	else
		echo "This file was packed on $fecha."
		echo
		while true
			do
			echo -n "Do you want to unpack the file named \"$0\" in the folder \"$DIRECTORIO\"? "
			read CONFIRM
			case $CONFIRM in
				y|Y|yes|yeS|yEs|yES|Yes|YeS|YEs|YES) break ;;
				n|N|no|NO|No|nO) exit  ;;
			*) echo -n "(yes or no) "
			esac
		done
		mkdir "$DIRECTORIO"
		mdfc=\"$(tail -c $SIZE "$0" | md5)\"
		echo
		echo "MD5 Stored:     \"$mdf\""
		echo "MD5 Calculated: $mdfc"
		tail -c $SIZE "$0" | tar -x$compresor -C
		echo
		echo "File \"$0\" unpacked."
		exit 0
	fi
fi

echo ERROR!
exit -1

Puede ser descargado desde Sourceforge.

Viernes, 7 mayo 2010 Posted by | Personal, Script bash | Comentarios desactivados en Compresor que genera ficheros autoextraíbles