#!/bin/bash



echo "#########################################################"
echo "###### Script de instalación de Asterisk by saghul ######"
echo "######            http://www.saghul.net            ######"
echo "######                    v0.1                     ######"
echo "#########################################################"
echo ""


## Variables generales

TITLE="Script de instalación de Asterisk 1.4 by saghul -- http://www.saghul.net"
VBASE=1.4
SVNBASE="http://svn.digium.com/svn"
DIRBASE="/usr/src/asterisk"


## Comprobación preliminar

which dialog &> /dev/null
if [ $? -ne 0 ]
then
	echo "Para utilizar el script es necesario tener instalado el paquete 'dialog'."
	echo "Puedes hacerlo ejecutado apt-get install dialog"
	echo ""
	exit 1
fi


## Funciones

function mensajeSiNo
{
	dialog --title "Pregunta" --backtitle "$TITLE" --yesno "$1" 10 60
}

function mensaje
{
	dialog --title "$1" --backtitle "$TITLE" --msgbox "$2" 10 60
}

function info
{
	dialog --title "INFO" --backtitle "$TITLE" --infobox "$1" 10 60
}

function progreso
{
	dialog --backtitle "$TITLE" --guage "$1" 10 60 0
}

function inputbox
{
	dialog --inputbox "$1" 10 60 "$2" 2> /tmp/saghul.dialog.$$
}


## Bienvenida

mensaje "Bienvenido" "Con este script podrás instalar Asterisk, Asterisk-Addons, LibPRI y Zaptel en tu sistema en tan solo unos pocos pasos"
info "A continuación se instalarán las dependencias necesarias..."
sleep 1


## Instalación de dependencias

{
	apt-get install -y build-essential linux-headers-$(uname -r) > /dev/null 2>&1
	echo 50
	sleep 1
	apt-get install -y libssl-dev libncurses5-dev subversion libnewt-dev > /dev/null 2>&1
	echo 95
	sleep 1
	echo 100
} | progreso "Instalando dependencias..."

info "Dependencias Instaladas."
sleep 1
mensajeSiNo "¿Quieres soporte de MySQL?"
if [ $? -eq 0 ]
then
	{
		apt-get install -y mysql-server-5.0 libmysqlclient15-dev > /dev/null 2>&1
		echo 50
		sleep 1
		echo 100
	} | progreso "Instalando dependencias..."
	info "Dependencias Instaladas."
else
        info "Se continua la nstalación SIN soporte de MySQL"
fi

sleep 1


## Descarga de versiones

info "Consultando las versiones disponibles, espere por favor..."
VASTERISK=$VBASE"."$(svn list $SVNBASE/asterisk/tags | grep $VBASE | cut -d"." -f3 | sort -r -n | head -n 1 | cut -d"/" -f1)
VADDONS=$VBASE"."$(svn list $SVNBASE/asterisk-addons/tags | grep $VBASE | cut -d"." -f3 | sort -r -n | head -n 1 | cut -d"/" -f1)
VZAPTEL=$VBASE"."$(svn list $SVNBASE/zaptel/tags | grep $VBASE | cut -d"." -f3 | sort -r -n | head -n 1 | cut -d"/" -f1)
VLIBPRI=$VBASE"."$(svn list $SVNBASE/libpri/tags | grep $VBASE | cut -d"." -f3 | sort -r -n | head -n 1 | cut -d"/" -f1)
mensaje "INFO" "Estas son las últimas versiones: \n * Asterisk: $VASTERISK\n * Asterisk-Addons: $VADDONS\n * Zaptel: $VZAPTEL\n * LibPRI: $VLIBPRI\n"

inputbox "Que version de Asterisk quieres?" $VASTERISK
UVASTERISK=$(cat /tmp/saghul.dialog.$$)
info "Versión selecionada: $UVASTERISK"

inputbox "Que version de Asterisk-Addons quieres?" $VADDONS
UVADDONS=$(cat /tmp/saghul.dialog.$$)
info "Versión selecionada: $UVADDONS"

inputbox "Que version de Zaptel quieres?" $VZAPTEL
UVZAPTEL=$(cat /tmp/saghul.dialog.$$)
info "Versión selecionada: $UVZAPTEL"

inputbox "Que version de LibPRI quieres?" $VLIBPRI
UVLIBPRI=$(cat /tmp/saghul.dialog.$$)
info "Versión selecionada: $UVLIBPRI"

mensaje "INFO" "Versiones seleccionadas que van a instalarse: \n * Asterisk: $UVASTERISK\n * Asterisk-Addons: $UVADDONS\n * Zaptel: $UVZAPTEL\n * LibPRI: $UVLIBPRI\n"

mkdir -p $DIRBASE
cd $DIRBASE

info "Descargando Asterisk..."
sleep 0.5
SVN_ASTERISK=$(2>&1 svn co $SVNBASE/asterisk/tags/$UVASTERISK asterisk-$UVASTERISK)
if [ $? -ne 0 ]
then
	echo 1>&2 "$0: $SVN_ASTERISK Se interrumpe la ejecución."
	exit 1
else
	info "Asterisk descargado correctamente."
fi

info "Descargando Asterisk-Addons..."
sleep 0.5
SVN_ADDONS=$(2>&1 svn co $SVNBASE/asterisk-addons/tags/$UVADDONS asterisk-addons-$UVADDONS)
if [ $? -ne 0 ]
then
	echo 1>&2 "$0: $SVN_ADDONS Se interrumpe la ejecución."
	exit 1
else
	info "Asterisk-Addons descargado correctamente."
fi

info "Descargando Zaptel..."
sleep 0.5
SVN_ZAPTEL=$(2>&1 svn co $SVNBASE/zaptel/tags/$UVZAPTEL zaptel-$UVZAPTEL)
if [ $? -ne 0 ]
then
	echo 1>&2 "$0: $SVN_ZAPTEL Se interrumpe la ejecución."
	exit 1
else
	info "Zaptel descargado correctamente."
fi

info "Descargando LibPRI..."
sleep 0.5
SVN_LIBPRI=$(2>&1 svn co $SVNBASE/libpri/tags/$UVLIBPRI libpri-$UVLIBPRI)
if [ $? -ne 0 ]
then
	echo 1>&2 "$0: $SVN_LIBPRI Se interrumpe la ejecución."
	exit 1
else
	info "LibPRI descargado correctamente."
fi

info "Todas las descargas han finalizado correctamente."
sleep 1


## Instalando el software

# Zaptel
info "Instalando Zaptel..."
cd zaptel-$UVZAPTEL

ZAPTEL_STATUS=$(2>&1 ./configure && make && make install && make config)
if [ $? -ne 0 ]
then
	echo 1>&2 "$0: $ZAPTEL_STATUS Se interrumpe la ejecución."
	exit 1
else
	info "Zaptel instalado correctamente."
fi

mensajeSiNo "¿Quieres instalar los ficheros de ejemplo de Zaptel?"
if [ $? -eq 0 ]
then
	make samples
	info "Ficheros de ejemplo de Zaptel instalados."
else
        info "Se continua la nstalación SIN ficheros de ejemplo de Zaptel."
fi

sleep 1
{
	sleep 0.5
	echo 50
	modprobe zaptel
	modprobe ztdummy
	echo 100
	sleep 0.5
} | progreso "Cargando módulos de Zaptel..."


# LibPRI
info "Instalando LibPRI..."
cd ..
cd libpri-$UVLIBPRI

LIBPRI_STATUS=$(2>&1 make && make install)
if [ $? -ne 0 ]
then
	echo 1>&2 "$0: $LIBPRI_STATUS Se interrumpe la ejecución."
	exit 1
else
	info "LibPRI instalado correctamente."
fi
sleep 1


# Asterisk
info "Instalando Asterisk..."
cd ..
cd asterisk-$UVASTERISK

ASTERISK_STATUS=$(2>&1 ./configure && make && make install && make config)
if [ $? -ne 0 ]
then
	echo 1>&2 "$0: $ASTERISK_STATUS Se interrumpe la ejecución.$?--"
	exit 1
else
	info "Asterisk instalado correctamente."
fi

mensajeSiNo "¿Quieres instalar los ficheros de ejemplo de Asterisk?"
if [ $? -eq 0 ]
then
	make samples
	info "Ficheros de ejemplo de Asterisk instalados."
else
        info "Se continua la nstalación SIN ficheros de ejemplo de Asterisk."
fi
sleep 1


# Asterisk-Addons
info "Instalando Asterisk-Addons..."
cd ..
cd asterisk-addons-$UVADDONS

ADDONS_STATUS=$(2>&1 ./configure && make && make install)
if [ $? -ne 0 ]
then
	echo 1>&2 "$0: $ADDONS_STATUS Se interrumpe la ejecución."
	exit 1
else
	info "Asterisk-Addons instalado correctamente."
fi

mensajeSiNo "¿Quieres instalar los ficheros de ejemplo de Asterisk-Addons?"
if [ $? -eq 0 ]
then
	make samples
	info "Ficheros de ejemplo de Asterisk-Addons instalados."
else
        info "Se continua la nstalación SIN ficheros de ejemplo de Asterisk-Addons."
fi
sleep 1


# Script de inico
info "Descargando script de inicio de Asterisk mejorado... (cobtribución de Iñaki Baz)"
wget "http://bugs.digium.com/file_download.php?file_id=15850&type=bug&download" -O /tmp/rc.asterisk
mv -f /tmp/rc.asterisk /etc/init.d/asterisk
info "Script de inicio instalado."
sleep 1


## Finalizar instalación

mensaje "INFO" "Instalación finalizada.\nHappy Asterisk hacking!!\n\nhttp://www.saghul.net"
exit 0

