Instalação do PABX 1.8
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

377 lines
13 KiB

#!/bin/bash
trap "" 2 20
# O Debian não coloca o /sbin no PATH por default
# O diretório deve ser apenas disponível para administrador e para evitar conflitos
PATH="${PATH}:/sbin"
# O usuário precisa ser ROOT
if [ $(id -u) -ne 0 ];then
echo "Deve ser executado como root"
exit 1
fi
function add_sbin_path(){
[[ ! $(echo $PATH|grep "/sbin") ]] && PATH="$PATH:/sbin"
}
# Sair do script com código de retorno
function exit_installation(){
/bin/rm -rf /tmp/install_simplesip.pid 2>&1 > /dev/null
/bin/rm -rf /usr/src/tools_simplesip
exit $1
}
verifica_erro()
{
RESULTADO=$1
MODULO=$2
TIPO=$3
if [ "$RESULTADO" != "0" ] ; then
clear
if [ "$TIPO" = "DESINSTALAR" ] ; then
echo "Erro durante a desinstalacao do Modulo $MODULO"
else
echo "Erro durante a instalacao do Modulo $MODULO, favor verificar as dependencias"
fi
! [ -d /etc/asterisk ] && mkdir -p /etc/asterisk
! [ -d /var/lib/asterisk ] && mkdir -p /var/lib/asterisk
[ -d /tmp/etc_asterisk-$data ] && for i in $(ls /tmp/etc_asterisk-$data/) ; do /bin/mv -f /etc/asterisk/$i /etc/asterisk/ ;done
[ -d /tmp/var_lib_asterisk-$data ] && for i in $(ls -1 /tmp/var_lib_asterisk-$data/) ; do /bin/rm -rf /var/lib/asterisk/$i && /bin/mv -f /tmp/var_lib_asterisk-$data/$i /var/lib/asterisk/ ; done
exit_installation $RESULTADO
fi
}
#Descobrindo o caminho do script
dir=$(dirname $0)
path_arquivo=$(cd $dir;pwd)
arquitetura=$(uname -m)
log=/var/log/tools_simplesip.log
versao_linux=$(cat /etc/debian_version | sed 's/[a-zA-Z() ]//g' | cut -d "." -f 1)
declare -x data=$(date +%F-%H-%M-%S)
#Verifica se o script esta rodando
if [ -e /tmp/install_simplesip.pid ] ; then
clear
echo "Script em Excecucao..."
exit_installation 1
fi
#Gera PID do scritp
echo $$ > /tmp/install_simplesip.pid
apt-get install -y dialog
while true ; do
DIALOGDATA="$(for i in $(/usr/bin/timedatectl list-timezones) ; do echo -n "$i '' off " | sed -e "s/America\/Cuiaba '' off/America\/Cuiaba '' on/g" ; done)"
TIMEZONE=$(dialog --stdout --default-item America/Cuiaba --radiolist " CONFIGURE O TIMEZONE " 0 0 0 $DIALOGDATA)
# Apertou CANCELAR ou ESC, sair...
[ $? -ne 0 ] && /bin/rm -rf /tmp/sip_atualiza.pid && exit
OPCAO=$(echo $TIMEZONE | sed "s/,/\\n/g")
if ! [ -z "$OPCAO" ] ; then
/usr/bin/timedatectl set-timezone $OPCAO
break
fi
done
clear
#busca enconding
encode=$(locale | tr [[:upper:]] [[:lower:]] | sed -e "s/\"//g" | grep "^lang=")
# O SO será em UTF-8, porém o banco em ISO
if ! [ "$encode" = "lang=en_us.iso-8859-1" ] ; then
clear
echo -n "Encoding: $encode incorreto, deseja corrigir e reiniciar o servidor? (S/N):"
read -n 1 resposta
echo ""
if [[ $resposta != +(s|S|y|Y|sim|SIM) ]] ; then
exit_installation
fi
lines_locale=$(grep -E "^[^#]" /etc/locale.gen)
for line in $lines_locale; do echo $line; sed -i "s|^$line|# $line|g" /etc/locale.gen; done
echo "en_US ISO-8859-1" >> /etc/locale.gen
/sbin/locale-gen
/bin/localectl set-locale LANG="en_US.ISO-8859-1"
/bin/localectl set-locale LANGUAGE="en_US.ISO-8859-1"
clear
echo "Reiniciando..."
for i in {5..1};do sleep 1 && echo -n "$i ";done
echo ""
echo "Recomece a atualizacao"
/bin/rm -rf /tmp/sip_install.pid
[ -e /sbin/reboot ] && /sbin/reboot
reboot
fi
# adicionar a pasta sbin para variável de ambiente
add_sbin_path
#Remover o source.list e colocar o padrão
[ -f /etc/apt/sources.list ] && /bin/rm -f /etc/apt/sources.list
[ -d /etc/apt/sources.list.d ] && /bin/rm -rf /etc/apt/souces.list.d/*
echo "#Principal repositório de Debian" > /etc/apt/sources.list
echo "deb http://deb.debian.org/debian/ bullseye main contrib non-free" >> /etc/apt/sources.list
echo "deb http://deb.debian.org/debian bookworm contrib main non-free-firmware" >> /etc/apt/sources.list
echo "deb http://deb.debian.org/debian bookworm-updates contrib main non-free-firmware" >> /etc/apt/sources.list
echo "deb http://deb.debian.org/debian bookworm-backports contrib main non-free-firmware" >> /etc/apt/sources.list
echo "deb http://deb.debian.org/debian-security bookworm-security contrib main non-free-firmware" >> /etc/apt/sources.list
apt-get update -y
apt-get upgrade -y
apt-get install -y aptitude aptitude-common libboost-iostreams1.74.0 libcwidget4 libdpkg-perl libfile-fcntllock-perl \
libsigc++-2.0-0v5 libxapian30 lsb-release apt-transport-https ca-certificates pkg-config
clear
echo "#######################################################"
echo "# VERIFICANDO DEPENDENCIAS & INSTALANDO #"
echo "#######################################################"
echo "Instaladno pacotes necessários . . . "
apt-get install -y $(cat $path_arquivo/dependencias_simplesip.txt) linux-headers-$(uname -r)
if [[ $? -ne 0 ]];then
echo "não foi possível instalar todos os pacote."
exit_installation
fi
echo "Dependencias instaladas ... "
sleep 5
clear
clear
#Realizando backup da pasta de gravacoes
if [ -d /var/spool/asterisk/monitor ] ; then
cd /var/spool/asterisk/monitor/
raiz_monitor=$(pwd -P | cut -d "/" -f2)
if [ "$raiz_monitor" = "var" ] ; then
mkdir -p /hdaux/gravacoes-$data
/bin/mv -f /var/spool/asterisk/monitor /hdaux/gravacoes-$data/
else
mkdir -p /$raiz_monitor/gravacoes-$data
/bin/mv -f /var/spool/asterisk/monitor /$raiz_monitor/gravacoes-$data/
fi
fi
[ -d /etc/asterisk ] && /bin/cp -Rapf /etc/asterisk /tmp/etc_asterisk-$data
[ -d /var/lib/asterisk ] && /bin/cp -Rapf /var/lib/asterisk /tmp/var_lib_asterisk-$data
[ -L /usr/src/libpri ] && unlink /usr/src/libpri
[ -L /usr/src/asterisk ] && unlink /usr/src/asterisk
#Desistalando Pacotes anteriores
if [ 0 -ne $(find /usr/src/ -name "channel*.sh" | wc -l) ] ; then
echo "Desinstalando KHOMP"
bash $(find /usr/src/ -name "channel*.sh" | sort | tail -n1 | xargs ls -1tr | tail -n1) -j
RESULT=$?
verifica_erro $RESULT KHOMP DESINSTALAR
fi
if [ 0 -ne $(find /usr/src -name "spandsp-*" -type d -print | wc -l) ] ; then
echo "Desinstalando SPANDSP"
cd $(find /usr/src -name "spandsp-*" -type d -print | xargs ls -d1tr | tail -n1)
make uninstall >> $log 2>&1
RESULT=$?
verifica_erro $RESULT SPANDSP DESINSTALAR
fi
if [ 0 -ne $(find /usr/src -name "libpri-*" -type d -print | wc -l) ] ; then
echo "Desinstalando LIBPRI"
cd $(find /usr/src -name "libpri-*" -type d -print | xargs ls -d1tr | tail -n1)
make uninstall >> $log 2>&1
RESULT=$?
verifica_erro $RESULT LIBPRI DESINSTALAR
fi
if [ 0 -ne $(find /usr/src -name "dahdi-linux-*" -type d -print | wc -l) ] ; then
echo "Desinstalando DAHDI"
cd $(find /usr/src -name "dahdi-linux-*" -type d -print | xargs ls -d1tr | tail -n1)/linux/
make uninstall >> $log 2>&1
RESULT=$?
verifica_erro $RESULT DAHDI DESINSTALAR
fi
if [ 0 -ne $(find /usr/src -name "asterisk-*" -type d -print | wc -l) ] ; then
echo "Desinstalando ASTERISK"
cd $(find /usr/src -name "asterisk-*" -type d -print | xargs ls -d1tr | tail -n1)
make uninstall-all >> $log 2>&1
RESULT=$?
verifica_erro $RESULT ASTERISK DESINSTALAR
fi
[ -e /etc/init.d/dahdi ] && chkconfig --level 35 dahdi off && rm -rf /etc/init.d/dahdi
#[ -e /etc/init.d/khomp-services ] && chkconfig --level 35 khomp-services off && rm -rf /etc/init.d/khomp-services
[ -L /usr/src/libpri ] && unlink /usr/src/libpri
[ -L /usr/src/asterisk ] && unlink /usr/src/asterisk
/bin/rm -rf /usr/src/instaladores
/bin/rm -rf /usr/src/asterisk*
/bin/rm -rf /usr/src/libpri*
/bin/rm -rf /usr/src/dahdi*
/bin/rm -rf /usr/src/spandsp*
/bin/rm -rf /usr/src/channel_*
/bin/rm -rf /usr/src/usr/src/openr2-*
/bin/rm -rf /etc/asterisk
/bin/rm -rf /var/lib/asterisk
/bin/rm -rf /usr/lib/asterisk
mkdir -p /usr/src/instaladores
#Iniciando Instalacao
cd $path_arquivo/
/bin/cp -Rapf *.gz /usr/src/instaladores/
/bin/cp -Rapf pjproject-* /usr/src/instaladores/
if [ "$arquitetura" = "i686" ] ; then
/bin/cp -Rapf khomp/*i686*.gz /usr/src/instaladores/
else
/bin/cp -Rapf khomp/*64*.gz /usr/src/instaladores/
fi
echo "/usr/local" > /etc/ld.so.conf.d/spandsp.conf
echo "/usr/local/lib" >> /etc/ld.so.conf.d/spandsp.conf
echo "Instalando ferramentas para o PABX:"
# Quantidade de thread para fazer o restore
num_cpu=$(lscpu|grep -E "^CPU\(s\):" | sed 's/: \+/-/g' |awk -F- '{print $2}')
num_thread=$(lscpu|grep -E "^Thread\(s\).*:" | sed 's/: \+/-/g' |awk -F- '{print $2}')
thread_make=$( expr "$num_cpu" \* "$num_thread" )
dahdi=$(ls -1 /usr/src/instaladores/dahdi-*.tar.gz 2> /dev/null)
if [ -f "$dahdi" ] ; then
echo "Instalando DAHDI"
sleep 1
tar -zxf /usr/src/instaladores/dahdi-*.tar.gz -C /usr/src
RESULT=$?
verifica_erro $RESULT DESCOMPACTANDO_DAHDI
cd /usr/src/dahdi-*
make clean >> $log 2>&1
make all >> $log 2>&1
make install >> $log 2>&1
RESULT=$?
verifica_erro $RESULT DAHDI_INSTALL
make install-config >> $log 2>&1
RESULT=$?
verifica_erro $RESULT DAHDI_CONFIG
[[ -f /etc/dahdi/modules ]] && /bin/cp -Rapf /etc/dahdi/modules /etc/dahdi/modules.ori
echo "" > /etc/dahdi/modules
fi
libpri=$(ls -1 /usr/src/instaladores/libpri-*.tar.gz 2> /dev/null)
if [ -f "$libpri" ] ; then
echo "Instalando LIBPRI"
sleep 1
tar -zxf /usr/src/instaladores/libpri-*.tar.gz -C /usr/src
RESULT=$?
verifica_erro $RESULT DESCOMPACTANDO_LIBPRI
ln -s $(find /usr/src -name "libpri-1*" -type d -print) /usr/src/libpri
cd /usr/src/libpri-*
make clean >> $log 2>&1
make >> $log 2>&1
make -j${thread_make} install >> $log 2>&1
RESULT=$?
verifica_erro $RESULT LIBPRI
fi
asterisk=$(ls -1 /usr/src/instaladores/asterisk-*.tar.gz 2> /dev/null)
if [ -f "$asterisk" ] ; then
echo "Instalando ASTERISK"
sleep 1
/bin/rm -rf /tmp/pjproject-*
/bin/cp -Rapf /usr/src/instaladores/pjproject-* /tmp/
tar -zxf /usr/src/instaladores/asterisk-*.tar.gz -C /usr/src
RESULT=$?
verifica_erro $RESULT DESCOMPACTANDO_ASTERISK
ln -s $(find /usr/src -name "asterisk-*" -type d -print) /usr/src/asterisk
cd /usr/src/asterisk-*
make clean >> $log 2>&1
# Foi modificado no código fonte já. Porém é colocado aqui para mostrar
# as modificações feitas
# sed -i 's/.*HAVE_SYSTEMD.*/#define HAVE_SYSTEMD 1/' include/asterisk/autoconfig.h.in
./configure --prefix=/usr --libdir=/usr/lib64 --with-pjproject-bundled >> $log 2>&1
make menuselect/menuselect menuselect-tree menuselect.makeopts >> $log 2>&1
menuselect/menuselect --enable cdr_custom menuselect.makeopts >> $log 2>&1
menuselect/menuselect --enable cdr_manager menuselect.makeopts >> $log 2>&1
menuselect/menuselect --enable cdr_csv menuselect.makeopts >> $log 2>&1
menuselect/menuselect --enable cdr_odbc menuselect.makeopts >> $log 2>&1
menuselect/menuselect --enable cdr_pgsql menuselect.makeopts >> $log 2>&1
menuselect/menuselect --enable chan_sip menuselect.makeopts >> $log 2>&1
menuselect/menuselect --enable res_snmp menuselect.makeopts >> $log 2>&1
menuselect/menuselect --enable func_cdr menuselect.makeopts >> $log 2>&1
menuselect/menuselect --disable CORE-SOUNDS-EN-GSM menuselect.makeopts >> $log 2>&1
menuselect/menuselect --disable MOH-OPSOUND-WAV menuselect.makeopts >> $log 2>&1
make -j${thread_make} >> $log 2>&1
make install >> $log 2>&1
RESULT=$?
verifica_erro $RESULT ASTERISK_INSTALL
make samples >> $log 2>&1
make config >> $log 2>&1
RESULT=$?
verifica_erro $RESULT ASTERISK_CONFIG
# Inserir arquivo do systemd do asterisk
# esse arquivo não
/bin/cp -f asterisk.service /lib/systemd/system/
systemctl daemon-reload
#Colocando o asterisk na inicializacao do servidor
/bin/systemctl enable asterisk
/bin/systemctl enable dahdi.service
#Codec
cd $path_arquivo/
[ -d codec ] && /bin/cp -Rapf codec/$arquitetura/codec*.so /usr/lib$(getconf LONG_BIT | grep "64")/asterisk/modules/
fi
khomp=$(ls -1 /usr/src/instaladores/channel_*.gz 2> /dev/null)
if [ -f "$khomp" ] ; then
echo "Instalando KHOMP"
sleep 1
cp -Rap /usr/src/instaladores/channel_*.gz /usr/src/
cd /usr/src
gzip -d channel_*.sh.gz
RESULT=$?
verifica_erro $RESULT KHOMP_GZIP
printf 'y\n' | bash channel_*.sh >> $log 2>&1
RESULT=$?
verifica_erro $RESULT KHOMP_BASH_CHANNEL
echo "noload => chan_khomp.so" >> /etc/asterisk/modules.conf
fi
sleep 2
rm -rf /usr/src/tools_simplesip
[ -d /tmp/etc_asterisk-$data ] && [ "$(ls -l /tmp/etc_asterisk-$data | wc -l )" -ne 0 ] && /bin/mv -f /tmp/etc_asterisk-$data/* /etc/asterisk/
[ -d /tmp/var_lib_asterisk-$data ] && [ "$(ls -l /tmp/etc_asterisk-$data | wc -l )" -ne 0 ] && for i in $(ls -1 /tmp/var_lib_asterisk-$data/) ; do /bin/rm -rf /var/lib/asterisk/$i && /bin/mv -f /tmp/var_lib_asterisk-$data/$i /var/lib/asterisk/ ; done
rm -rf /tmp/install_simplesip.pid
echo "Terminou a instalação de ferramentas para o PABX";