#!/bin/bash
# witchdoc (aet) netzwech (punkt) de
# 2009-07-24 install Sangoma B700 und Asterisk 1.6.0.10
# tested with Ubuntu 8.04 (hardy) LTS
#
# Rev 14 

#### variables
INST_LOG=/usr/src/voip_installation.log

wanpipe_url=ftp://ftp.sangoma.com/linux/current_wanpipe/
wanpipe_ver=wanpipe-3.5.5
wanpipe_suf=tgz
wanpipe_dep="udev lksctp-tools libsctp-dev bison flex automake1.9 libtool"

asterisk_url=http://downloads.asterisk.org/pub/telephony/asterisk/releases/
asterisk_ver=asterisk-1.6.0.13
asterisk_suf=tar.gz
asterisk_dep="build-essential udev bison openssl libssl-dev libgsm1 libgsm1-dev libsqlite3 libsqlite3-dev \
libncurses5 libncurses5-dev zlib1g zlib1g-dev libspeex1 libspeex-dev \
libreadline5 libreadline5-dev libcurl4-openssl-dev linux-headers-`uname -r`"

asterisk_addons_url=http://downloads.asterisk.org/pub/telephony/asterisk/releases/
asterisk_addons_ver=asterisk-addons-1.6.0.13
asterisk_addons_suf=tar.gz
asterisk_addons_dep="mysql-server mysql-client phpmyadmin apache2 php5 php5-cli php5-cgi libmysqlclient15-dev"

asterisk_sounds_de_url=http://www.amooma.de/asterisk/sprachbausteine/
asterisk_sounds_de_ver=asterisk-core-sounds-de-gsm-current
asterisk_sounds_de_suf=tar.gz

dahdi_url=http://downloads.asterisk.org/pub/telephony/dahdi-linux/releases/
dahdi_ver=dahdi-linux-2.2.0.2
dahdi_suf=tar.gz
dahdi_dep="libusb-dev libnewt-dev"

dahdi_tools_url=http://downloads.asterisk.org/pub/telephony/dahdi-tools/releases/
dahdi_tools_ver=dahdi-tools-2.2.0
dahdi_tools_suf=tar.gz

libpri_url=http://downloads.asterisk.org/pub/telephony/libpri/releases/
libpri_ver=libpri-1.4.10.1
libpri_suf=tar.gz

#### functions 

if [ "x$1" == "xforce" ]
then
	export FORCE=YES
fi

function checkdash() {
	if ls -lah /bin/sh | grep -q dash 
	then
		if [ x"$FORCE" == "xYES" ]
		then
			echo "dash! NOW rm /bin/sh and ln -s /bin/bash /bin/sh!"
			rm -f /bin/sh 
			ln -sf /bin/bash /bin/sh
			return 0
		else
			echo "dash! Please rm /bin/sh and ln -s /bin/bash /bin/sh."
			exit 1	# interactiver modus, break 
		fi
	fi
}

function checkdownload() {
	# $1 name
	# $2 suffix
	# $3 baseurl
	if [ ! -f "$1.$2" ]
	then 
		echo "download $1.$2"
		wget "$3/$1.$2"
	fi

	if [ -d "$1" ]
	then
		echo "cleanup previous $1"
		rm -rf "$1"
	fi	

	tar xzf "$1.$2"
}

function pause() {
	if [ x"$FORCE" == "xYES" ] ; then 
		return 0
	fi

	if [ -z "$@" ]; then
		read -p "continue? " answer
        else
		read -p "$@ ...y or n? [n] " answer
	fi

	case $answer in
		n|N) return 1 ;;
		y|Y) return 0 ;;
		*) return 1 ;;
	esac	
}

function check_packages() {
	for idx in $@
	do
		echo -n "* check installed package $idx... "
		if dpkg --get-selections | grep -v deinstall | grep -q "$idx"  
		then 
			echo "ok."
		else
			echo "paket $idx missing!"
			aptitude install $idx -y -f
		fi 
	done	
}

function check_system() {
	pause "============ prepare system?" ||  return 1
	echo  "************ prepare system ..."
	echo -n "PACKAGE INSTALLATION in INTERACTIV MODE!"
	checkdash
	aptitude update >>$INST_LOG 2>&1
	aptitude upgrade -y >>$INST_LOG 2>&1
	aptitude install $asterisk_addons_dep $dahdi_dep $wanpipe_dep -y -f 

	pause "check_packages $asterisk_dep"
		check_packages $asterisk_dep
	pause "check_packages $dahdi_dep"
		check_packages $dahdi_dep
	pause "check_packages $wanpipe_dep"
		check_packages $wanpipe_dep
	echo "============ prepare system. Done" >>$INST_LOG 
}

function make_dahdi() {
	pause   "============ install $dahdi_ver ?" || return 1
	echo -n "************ install $dahdi_ver ..."
	cd /usr/src
	checkdownload $dahdi_ver tar.gz $dahdi_url >>$INST_LOG 2>&1
	cd $dahdi_ver/ 
	make >>$INST_LOG 2>&1
	make install >>$INST_LOG 2>&1
	echo "============ install $dahdi_ver. Done" >>$INST_LOG
	echo " Done."
}

function make_dahdi_tools() {
	pause   "============ install $dahdi_tools_ver ?" || return 1
	echo -n "************ install $dahdi_tools_ver ..."
	cd /usr/src
	checkdownload $dahdi_tools_ver $dahdi_suf $dahdi_tools_url >>$INST_LOG 2>&1
	cd $dahdi_tools_ver/
	./configure >>$INST_LOG 2>&1
	make >>$INST_LOG 2>&1
	make install >>$INST_LOG 2>&1
	make config  >>$INST_LOG 2>&1
	echo "============ install $dahdi_tools_ver. Done" >>$INST_LOG
	echo " Done."
}

function make_libpri() {
	pause   "============ install $libpri_ver ?" || return 1
	echo -n "************ install $libpri_ver ..."
	cd /usr/src
	checkdownload $libpri_ver $libpri_suf $libpri_url >>$INST_LOG 2>&1 
	cd $libpri_ver/ 
	make >>$INST_LOG 2>&1
	make install >>$INST_LOG 2>&1
	echo "============ install $libpri_ver. Done" >>$INST_LOG
	echo " Done."
}

function make_asterisk() {
	pause   "============ install $asterisk_ver?" || return 1
	echo -n "************ install $asterisk_ver ..."
	cd /usr/src
	checkdownload $asterisk_ver $asterisk_suf $asterisk_url >>$INST_LOG 2>&1
	echo  "*** remove asterisk symlink"
	rm -f /usr/src/asterisk >/dev/null 2>&1 
	ln -vsf $asterisk_ver asterisk >>$INST_LOG 2>&1
	cd $asterisk_ver/
	./configure >>$INST_LOG 2>&1
	make >>$INST_LOG 2>&1
	make install >>$INST_LOG 2>&1
	make samples >>$INST_LOG 2>&1
	make config >>$INST_LOG 2>&1
	update-rc.d -f asterisk remove >>$INST_LOG 2>&1
	update-rc.d asterisk defaults 50 15 >>$INST_LOG 2>&1
	adduser --system --group asterisk --no-create-home
	echo "============ install $asterisk_ver. Done" >>$INST_LOG
	echo " Done."
}

function make_asterisk_addons() {
	pause   "============= install asterisk addons?" || return 1
	echo -n "************* install asterisk addons ..."
	cd /usr/src
	checkdownload $asterisk_addons_ver $asterisk_addons_suf $asterisk_addons_url >>$INST_LOG 2>&1
	cd $asterisk_addons_ver/ 
	./configure >>$INST_LOG 2>&1
	make >>$INST_LOG 2>&1
	make install >>$INST_LOG 2>&1
	make samples >>$INST_LOG 2>&1
	echo "============ install $asterisk_addons_ver. Done" >>$INST_LOG
	echo " Done."
}

function make_asterisk_sounds() {
	pause   "============= install german asterisk soundfiles?" || return 1
	echo -n "************* install german asterisk soundfiles ..."
	cd /usr/src/
	checkdownload $asterisk_sounds_de_ver $asterisk_sounds_de_suf $asterisk_sounds_de_url >>$INST_LOG 2>&1
	mkdir -p /var/lib/asterisk/sounds/de
	cd /var/lib/asterisk/sounds/
	tar xfz /usr/src/$asterisk_sounds_de_ver.$asterisk_sounds_de_suf >>$INST_LOG 2>&1
	echo "============ install german asterisk soundfiles. Done" >>$INST_LOG
	echo " Done."
}

function make_wanpipe() {
	pause   "============= install $wanpipe_ver?" || return 1
	echo -n "************* install $wanpipe_ver ..."
	cd /usr/src
	checkdownload $wanpipe_ver $wanpipe_suf $wanpipe_url >>$INST_LOG 2>&1
	cd $wanpipe_ver
	echo "Choose option 7 for BRI and Dahadi/Zaptel"
	# bash -p Setup install 
	bash -p Setup install --silent --protocol=TDM-BRI --with-zaptel=/usr/src/$dahdi_ver 
	# --with-asterisk=/usr/src/$asterisk_ver
	# make dahdi DAHDI_DIR=/usr/src/$dahdi_linux_ver/
	# make install
	echo "============ install $wanpipe_ver. Done" >>$INST_LOG
}

#### main

echo  "Force installation with option with '$basename $0 force'"
pause "It's recommended to say y to all questions. Please be carefull and have a backup"
echo " " >$INST_LOG 2>&1
echo "$(date)" >>$INST_LOG 2>&1
echo "###################" >>$INST_LOG 2>&1

check_system

make_dahdi 
make_dahdi_tools 
make_asterisk 
make_asterisk_addons 
make_asterisk_sounds 
make_wanpipe 

echo "$(date)" >>$INST_LOG 2>&1
echo "FINISH!"


