Buenas,
Hoy le he echado un vistazo a los updaters y creo que sería interesante crearlos de una forma más "modular", creando funciones, aprovechando el código común y dejando en los scripts únicamente las funciones concretas de cada uno.
De esta forma, cualquier modificación será más sencilla, y si afectasen a la parte común sólo habría que tocar en un fichero.
He cogido los 2 primeros que he visto (aircrack-ng y armitage) y los he convertido a este nuevo formato, decidme qué os parece.
Además, he puesto la comprobación de conexión a internet como primer paso, ya que ciertas variables hacen uso de la conexión para ver la VERSION, REVISION, etc.
Si os gusta, puedo reescribir poco a poco todos los demás (los que vayáis a crear nuevos, podéis hacerlos directamente en este formato).
funciones.sh:
#!/bin/bash
# Script by www.seguridadwireless.net
# Colores
CIERRE=${CIERRE:-"[0m"}
ROJO=${ROJO:-"[1;31m"}
VERDE=${VERDE:-"[1;32m"}
CYAN=${CYAN:-"[1;36m"}
AMARILLO=${AMARILLO:-"[1;33m"}
BLANCO=${BLANCO:-"[1;37m"}
ROSA=${ROSA:-"[1;35m"}
# Variables globales
NUCLEOS=$(grep -c \^processor /proc/cpuinfo)
BUILD=${BUILD:-1}
TAG=${TAG:-sw}
CWD=$(pwd)
TMP=${TMP:-/tmp/build/$PRGNAM}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
# Funcion que limpia
f_exitmode() {
rm -Rf $TMP &>/dev/null
exit 1
}
# Funcion que muestra Presentacion
f_presentacion() {
clear
echo ""
echo "$BLANCO *****************************$CIERRE"
echo "$VERDE Instalador/Actualizador $CIERRE"
echo "$VERDE para el programa $CIERRE"
echo "$CYAN $PRGNAM $CIERRE"
echo "$VERDE $CIERRE"
echo "$VERDE www.seguridadwireless.net $CIERRE"
echo "$BLANCO *****************************$CIERRE"
echo ""
sleep 3
}
# Comprobar conexion by geminis_demon
f_comprobarConexion() {
echo "$ROSA"Comprobando si hay acceso a internet"$CIERRE."
if [ "$(ping google.com -c1 2>/dev/null)" ]; then
echo "$VERDE"Tengo internet"$CIERRE ... $BLANCO"la tarea continuara."$CIERRE"
echo ""
else
echo "$ROJO"No tengo internet"$CIERRE ... $BLANCO"el script se cerrara."$CIERRE"
echo ""
sleep 5
exit 0
fi
}
# Comprobacion de updates para el script
f_comprobarUpdates() {
SERVIDOR_WEB="http://downloadwireless.net/wifislax-updaters"
DIRECTORIO=$(pwd)
SERVIDOR_VERSION=$(curl -s $SERVIDOR_WEB/${DIRECTORIO##*/}/${PRGNAM}_updater | grep "SCRIPT_VERSION=" | head -1 |cut -d "=" -f2)
echo ${CYAN}Version Script$CIERRE: $ROJO${SCRIPT_VERSION:6}$BLANCO/$AMARILLO${SCRIPT_VERSION:4:2}$BLANCO/$ROJO${SCRIPT_VERSION:0:4}$CIERRE
if [ "$(ping downloadwireless.net -c1 2>/dev/null)" ]; then
if [[ $SCRIPT_VERSION -lt $SERVIDOR_VERSION ]]; then
echo
echo "$ROSA"Comprobando si hay actualizaciones para el script..."$CIERRE."
echo ${ROJO}NUEVA VERSION$CIERRE
echo
echo ${ROSA}Version Server$CIERRE: $ROJO${SERVIDOR_VERSION:6}$BLANCO/$AMARILLO${SERVIDOR_VERSION:4:2}$BLANCO/$ROJO${SERVIDOR_VERSION:0:4}$CIERRE
echo
echo ${CYAN}Actualizando ${PRGNAM}_updater
curl -s $SERVIDOR_WEB/${DIRECTORIO##*/}/${PRGNAM}_updater -o $DIRECTORIO/${PRGNAM}_updater
echo ${ROJO}LISTO$CIERRE
sleep 3
$0
exit
fi
fi
}
# Definimos arquitectura del sistema. Se le pasa la arquitectura como parametro o la calcula automaticamente si no se indica nada
f_arquitectura() {
ARCH=$1
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) export ARCH=i486 ;;
arm*) export ARCH=arm ;;
*) export ARCH=$( uname -m ) ;;
esac
fi
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -eu
}
# Detecta la version instalada en el sistema
f_versionInstalada() {
if [ -f /var/log/packages/$PRGNAM-[0-9]* ]; then
INSTALADA=$(grep -r -i "package name" /var/log/packages/$PRGNAM-[0-9]* | awk '{print $3}' | sed "s/$PRGNAM-//g" | cut -d- -f-3)
echo ""
echo ""$AMARILLO"Su version actual es..."$CYAN"$PRGNAM-$INSTALADA"$CIERRE""
sleep 3
echo ""
echo "__________________________________________"
echo ""
echo ""$AMARILLO"La version mas actual es..."$CYAN"$PRGNAM-$VERSION-r$REVISION"$CIERRE""
echo ""
echo ""$BLANCO"Pulsa $ROJO"ENTER" $BLANCO"si deseas actualizarla""
read junk
echo ""
fi
# Si el sistema tiene una version anterior se eliminara
if [ -f /var/log/packages/$PRGNAM-[0-9]* ]; then
f_eliminaVersion
fi
}
# Elimina una version anterior
f_eliminaVersion() {
echo ""
echo "$ROJO"Se detecto una version antigua en el sistema... limpiando."$CIERRE"
sleep 5
removepkg /var/log/packages/$PRGNAM-[0-9]*
}
# Crea el directorio temporal de trabajo
f_directorioTemporal() {
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
}
# Creamos xzm , instalamos y salimos
f_tareasFinales() {
echo ""
echo "$VERDE"Instalando y creando modulo xzm ..."$CIERRE"
sleep 5
cd $PKG
stripdir $PKG
cleandir $PKG
dir2xzm $PKG $HOME/Desktop/$PRGNAM-$VERSION-r$REVISION-$ARCH-$BUILD$TAG.xzm
xzm2dir $HOME/Desktop/$PRGNAM-$VERSION-r$REVISION-$ARCH-$BUILD$TAG.xzm /
rm -Rf $TMP &>/dev/null
clear
echo ""
echo ""$VERDE"Creado modulo del paquete "$AMARILLO"$PRGNAM-$VERSION-r$REVISION"$CIERRE""
echo ""
echo "$VERDE"Las tareas han finalizado"$CIERRE"
sleep 3
echo ""
echo "$VERDE"Bye Bye"$CIERRE"
echo ""
sleep 3
exit 0
}
aircrack-updater:
#!/bin/bash
# Script by www.seguridadwireless.net
SCRIPT_VERSION=20140827
############################################################
## Funciones comunes. Su nombre empieza por f_ ##
############################################################
DIR="${BASH_SOURCE%/*}"
if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi
. "$DIR/funciones.sh"
############################################################
## Funciones propias del script. Su nombre empieza por F_ ##
############################################################
#Definicion de variables
F_variables() {
PRGNAM=aircrack-ng
VERSION=`curl -s http://svn.aircrack-ng.org/trunk/VERSION`
REVISION=`curl -s http://svn.aircrack-ng.org/trunk/ | grep -i revision | head -1 | cut -d ":" -f 1 | cut -d ' ' -f4`
SVN="svn co http://svn.aircrack-ng.org/trunk/"
}
# Compilamos
F_compila() {
cd $TMP/trunk
echo $CYAN
echo "Compilamos las sources de$VERDE $PRGNAM-$VERSION-r$REVISION"
sleep 3
make unstable=true prefix=/usr sqlite=true libnl=true
sleep 3
}
# Instalamos para que funcione el oui update
F_makeInstall() {
make prefix=/usr install
}
# Actualizamos la oui.list
F_actualizaOUI() {
echo $VERDE
echo "Actualizando aircrack oui.list ...."
echo $AMARILLO
airodump-ng-oui-update
sleep 2
}
# Instalamos
F_instala() {
make unstable=true prefix=/usr sqlite=true libnl=true DESTDIR=$PKG install &>/dev/null
mkdir -p $PKG/etc/aircrack-ng/ &>/dev/null
cp /etc/aircrack-ng/airodump-ng-oui.txt $PKG/etc/aircrack-ng/airodump-ng-oui.txt &>/dev/null
}
###################################
## BLOQUE PRINCIPAL DE EJECUCION ##
###################################
# Si se cierra el script inesperadamente, ejecutar la funcion de limpieza
trap f_exitmode SIGHUP SIGINT
#Comprobamos conexion a Internet
f_comprobarConexion
#Inicializamos las variables del script
F_variables
#Mostramos el mensaje de presentacion
f_presentacion
#Comprobamos updates del script
f_comprobarUpdates
#Asignamos o detectamos arquitectura
f_arquitectura
#Comprobamos version instalada del script
f_versionInstalada
#Creamos directorio de trabajo
f_directorioTemporal
#Compilamos
F_compila
#Instalamos para que funcione oui update
F_makeInstall
#Actualizamos oui.list
F_actualizaOUI
#Instalamos
F_instala
#Creamos xzm , instalamos y salimos
f_tareasFinales
armitage-updater:
#!/bin/bash
# Script by www.seguridadwireless.net
SCRIPT_VERSION=20140811
############################################################
## Funciones comunes. Su nombre empieza por f_ ##
############################################################
DIR="${BASH_SOURCE%/*}"
if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi
. "$DIR/funciones.sh"
############################################################
## Funciones propias del script. Su nombre empieza por F_ ##
############################################################
#Definicion de variables
F_variables() {
WEB=http://www.fastandeasyhacking.com/download
VERSION=`curl -s $WEB | grep .tgz | cut -d "/" -f2 | cut -d "." -f-1 | cut -d "e" -f 2`
REVISION=0
PRGNAM=armitage
}
# Comprobar dependencias
F_dependencias() {
if [ -d /opt/metasploit ]; then
EXIST=`echo "$VERDE"Instalada"$CIERRE"`
else
EXIST=`echo "$ROJO"No Instalada"$CIERRE"`
fi
echo "$ROSA"Comprobando dependencias ..."$CIERRE"
sleep 3
echo "$CYAN"Dependencias de este paquete:""
echo ""
echo "$AMARILLO"metasploit"$CIERRE: $EXIST"
if [ ! -d /opt/metasploit ]; then
echo ""
echo "$ROJO"No se cumplen los requisitos no se puede continuar"$CIERRE"
echo ""
sleep 5
exit 0
else
echo ""
echo "$VERDE"Bien ..podemos continuar"$CIERRE"
echo ""
sleep 5
fi
}
# Si el paquete no existe se descargara de internet
F_descargaPaquete() {
if [ ! -f $PRGNAM$VERSION.tgz ]; then
echo ""
echo "$CYAN"Descargando sources de $PRGNAM-$VERSION"$CIERRE"
sleep 5
wget $WEB/$PRGNAM$VERSION.tgz
fi
}
#Descomprime el fichero descargado
F_descomprime() {
# Descomprimimos el fichero descargado
echo ""
echo "$VERDE"Descomprimiendo ..."$CIERRE"
sleep 5
rm -rf $PRGNAM-$VERSION
tar xvf $PRGNAM$VERSION.tgz
mkdir -p $PKG/opt
mv -f $TMP/$PRGNAM $PKG/opt
}
# Creamos la ruta, el fichero desktop y copiamos icono a una ruta mejor
F_desktop() {
mkdir -p $PKG/usr/share/{applications/wifislax/Testing,pixmaps}
cp -rf $PKG/opt/armitage/armitage-logo.png $PKG/usr/share/pixmaps/$PRGNAM.png
# Ahora creamos el fichero desktop
echo "[Desktop Entry]
Categories=testing
Exec=/opt/armitage/armitage
Icon=armitage
Name[es]=Armitage
Name=Armitage
Path=/opt/armitage/
StartupNotify=true
Terminal=false
Type=Application
X-KDE-SubstituteUID=false
" > $PKG/usr/share/applications/wifislax/Testing/$PRGNAM.desktop
}
###################################
## BLOQUE PRINCIPAL DE EJECUCION ##
###################################
# Si se cierra el script inesperadamente, ejecutar la funcion de limpieza
trap f_exitmode SIGHUP SIGINT
#Comprobamos conexion a Internet
f_comprobarConexion
#Inicializamos las variables del script
F_variables
#Mostramos el mensaje de presentacion
f_presentacion
#Comprobamos updates del script
f_comprobarUpdates
#Asignamos o detectamos arquitectura
f_arquitectura noarch
#Comprobamos version instalada del script
f_versionInstalada
#Creamos directorio de trabajo
f_directorioTemporal
#Comprobamos dependencias necesarias
F_dependencias
#Descargamos el paquete si no existe
F_descargaPaquete
#Descomprimimos el paquete descargado
F_descomprime
#Creamos ficheros de desktop/icono
F_desktop
#Creamos xzm , instalamos y salimos
f_tareasFinales
Saludos