概述
第一版本只支持Redhat平台。天天换Asterisk和DAHDI的版本难免让人受不了。。改改就能用,何乐而不为呢?
#!/bin/bash
#
# install.sh - Script of installing Asterisk and DAHDI Sources.
#
# Modified by joe.yeung<yangjiazhi@live.com>
#
# $Id$
# NOTES:
# This program is free software, no any warrant.Author of this script will not
# accept any responsibilies if it brings hazards to you. The main purpose of this script
# is using for telephony communication.Meanwhile,please contact me right away if it
# infringes your copyright(s).
#------------------------------------------------------------------------
# Clear the screen
#------------------------------------------------------------------------
clearscr()
{
if [ $SETUP_INSTALL_QUICK = "YES" ]; then
return
fi
if test $NONINTERACTIVE; then
return
fi
# Check if the terminal environment was set up
[ "$TERM" ] && clear 2> /dev/null
}
# ----------------------------------------------------------------------
# Check Bash
# ----------------------------------------------------------------------
check_bash()
{
BASH_SUPPORT=`echo $BASH_VERSION | cut -d'.' -f1 2> /dev/null`
test -z $BASH_SUPPORT && echo "Bash doesn't exist!" && exit 1
}
# ---------------------------------------------------------------------
# Display Banner
# ---------------------------------------------------------------------
banner()
{
if test -z $NONINTERACTIVE; then
clearscr
fi
echo -e "##########################################################"
echo -e "#
Script of Installing Asterisk and DAHDI
#"
echo -e "#
V$PROD_VERSION
#"
echo -e "#
#"
echo -e "#
AsteriskVoIP Enthusiast
#"
echo -e "#
No any warrant of this script,please note!
#"
echo -e "##########################################################"
echo ""
return 0
}
# ---------------------------------------------------------------------
# Save Logger Information
# ---------------------------------------------------------------------
logger()
{
if [ "$2" == "0" ]; then
:
else
echo -ne "$1"
fi
if [ "$LOG_ENABLE" == "YES" ]; then
if [ "$3" == "0" ]; then
:
else
echo -ne "$(LANG=C date) : $1" >> "$INSTALL_LOG"
fi
fi
}
# --------------------------------------------------------------------
# Display Error Messages
# --------------------------------------------------------------------
error()
{
echo -ne "Error: $*" >&2
if [ "$LOG_ENABLE" == "YES" ]; then
echo -ne "$(LANG = C date) : Error: $*" >> "$INSTALL_LOG"
fi
}
# ----------------------------------------------------------------------------
# Pause.
# ----------------------------------------------------------------------------
pause()
{
[ $# -ne 0 ] && sleep $1 >&2 >> /dev/null && return 0
echo -e "Press [Enter] to continue...c"
read tmp
return 0
}
# --------------------------------------------------------------------
# Prompt Users To Input Information
# --------------------------------------------------------------------
prompt()
{
if test $NONINTERACTIVE; then
return 0
fi
echo -ne "$*" >&2
read CMD rest
return 0
}
# -------------------------------------------------------------------
# Get YES/NO input
# -------------------------------------------------------------------
getyn()
{
if test $NONINTERACTIVE; then
return 0
fi
while prompt "$* (y/n) "
do case $CMD in
[Yy]) return 0
;;
[Nn]) return 1
;;
*) echo -e "n Please input y or n" >&2
;;
esac
done
}
# -------------------------------------------------------------------
# Select an item from the list(s).
# $SEL: the available choices
# Return:
0 -selection is in $SEL
#
1 -quit or empty list
# -------------------------------------------------------------------
get_select()
{
[ $# -eq 0 ] && return 1
while prompt "Please enter your selection (1...$# or q) ->"
do case ${CMD:="0"} in
[0-9]|[0-9][0-9])
[ $CMD -lt 1 -o $CMD -gt $# ] && echo -e "n Error: Invalid Option,input a value between 1 and $# n" && continue
SEL=$CMD
return 0
;;
q|Q)
SEL="q"
return 1
;;
esac
done
}
# -------------------------------------------------------------------
# Select an item from the list(s).
# -------------------------------------------------------------------
select_list()
{
[ $# -eq 0 ] && return 1
col=`expr $# / 10 + 1`
cnt=0
for option in "$@"
do
cnt=`expr $cnt + 1`
echo -en "t$cnt) $option"
[ `expr $cnt % $col` -eq 0 ] && echo ""
done
echo -e "tq) quitn"
get_select "$@"
}
show_status()
{
if [ "$LOG_ENABLE" == "YES" ]; then
echo "" >> "$INSTALL_LOG"
echo -ne "$(LANG=C date) : tttttt[ $1 ]n" >> "$INSTALL_LOG"
fi
logger "rtttttttt[ $1 ]n" 1 0
}
error_compile()
{
echo
tail -n 50 "$INSTALL_LOG"
echo "--------------------------------------------------"
logger "$1"
show_status Failed
echo "--------------------------------------------------"
exit 1
}
backup_file()
{
cp -a "$1" "$1.$(date +%F-%k-%M)"
if [ $? -ne 0 ]; then
return 1
fi
}
check_file()
{
if [ ! -f "$1"]; then
echo "-----------------------------------------------------"
error "$1 not foundn"
echo "-----------------------------------------------------"
return 1
fi
}
check_dahdi_tool_config_files()
{
local flag
flag=0
if [ ! -d "$DAHDI_LINUX_COMPLETE_SOURCE_DIR" ]; then
error "$DAHDI_LINUX_COMPLETE_SOURCE_DIR not foundn"
return 1
fi
cd "$DAHDI_LINUX_COMPLETE_SOURCE_DIR"
for file in $*
do
check_file "$DAHDI_LINUX_COMPLETE_SOURCE_DIR/$file"
if [ $? -ne 0 ]; then
flag=1
fi
done
if [ $flag -eq 1 ]; then
exit 1
fi
echo
echo "--------------------------------------------------------"
logger "Checking dahdi_tool configuration files..."
show_status OK
echo "--------------------------------------------------------"
cd "$PROD_HOME"
pause 1
}
check_asterisk_config_files()
{
local flag
flag=0
if [ ! -d "$AST_SOURCE_DIR" ]; then
error "$AST_SOURCE_DIR not foundn"
return 1
fi
cd "$AST_SOURCE_DIR"
for file in $*
do
check_file "$AST_SOURCE_DIR/$file"
if [ $? -ne 0 ]; then
flag=1
fi
done
if [ $flag -eq 1 ]; then
exit 1
fi
echo
echo "----------------------------------------------------"
logger "Checking asterisk configuration files..."
show_status OK
echo "----------------------------------------------------"
cd "$PROD_HOME"
pause 1
}
backup_dahdi_tool_config_files()
{
local flag
flag=0
cd "$DAHDI_LINUX_COMPLETE_SOURCE_DIR"
for file in $*
do
backup_file "$file"
if [ $? -ne 0 ]; then
flag=1
fi
done
if [ $flag -eq 1 ]; then
exit 1
fi
echo
echo "------------------------------------------------------"
logger "Backuping dahdi_tool configuration files..."
show_status OK
echo "------------------------------------------------------"
cd "$PROD_HOME"
pause 1
}
backup_asterisk_config_files()
{
local flag
flag=0
cd "$AST_SOURCE_DIR"
for file in $*
do
backup_file "$file"
if [ $? -ne 0 ]; then
flag=1
fi
done
if [ $flag -eq 1 ]; then
exit 1
fi
echo
echo "--------------------------------------------------------"
logger "Backuping asterisk configuration files..."
show_status OK
echo "--------------------------------------------------------"
cd "$PROD_HOME"
pause 1
}
redhat_check_dependencies()
{
missing_packages=" "
logger "Checking for C development tools ..."
eval "rpm -q gcc > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
eval "gcc --version > /dev/null 2>&1"
if [
$? -eq 0 ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_packages"gcc "
fi
fi
logger "Checking for C++ development tools..."
eval "rpm -q gcc-c++ > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
eval "g++ --version > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_packages"gcc-c++ "
fi
fi
logger "Checking for Make Utility..."
eval "rpm -q make > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
eval "make --version > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_packages"make "
fi
fi
logger "Checking for Ncurses Library..."
eval "rpm -q ncurses > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
eval "type clear > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_packages"ncurses "
fi
fi
logger "Checking for ncurses-devel library..."
eval "rpm -q ncurses-devel > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
if [ ! -f "/usr/include/ncurses.h"] && [ ! -f "/usr/include/ncurses/ncurses.h" ]; then
show_status FAILED
missing_packages=$missing_packages"ncurses-devel "
else
show_status OK
fi
fi
logger "Checking for Perl development tools ..."
eval "rpm -q perl > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
eval "perl --version > /dev/null > 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_packages"perl "
fi
fi
logger "Checking for Patch ..."
eval "rpm -q patch > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
eval "patch --version > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_packages"patch "
fi
fi
logger "Checking for bison ..."
eval "rpm -q bison > /dev/null"
if [ $? -eq 0 ]; then
show_status OK
else
eval "type bison > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_packages"bison "
fi
fi
logger "Checking for bison-devel ..."
eval "rpm -q bison-devel > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
if [ -f /usr/lib/liby.a ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_packages"bison-devel "
fi
fi
logger "Checking for openssl ..."
eval "rpm -q openssl > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
eval "type openssl > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_packages"openssl "
fi
fi
logger "Checking for openssl-devel..."
eval "rpm -q openssl-devel > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
if [ -f /usr/include/openssl/ssl.h ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_packages"openssl-devel "
fi
fi
logger "Checking for gnutls-devel..."
eval "rpm -q gnutls-devel > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
if [ -f /usr/include/gnutls/gnutls.h ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_packages"gnutls-devel "
fi
fi
logger "Checking for zlib..."
eval "rpm -q zlib > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
if [ -f /usr/lib/libz.so.1 ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_package"zlib "
fi
fi
logger "Checking for zlib-devel..."
eval "rpm -q zlib-devel > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
if [ -f /usr/include/zlib.h ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_package"zlib-devel "
fi
fi
logger "Checking for kernel development packages..."
eval "rpm -q kernel-devel-$(uname -r) > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_packages"kernel-devel-$(uname -r) "
fi
logger "Checking for libxml2-devel..."
eval "rpm -q libxml2-devel > /dev/null 2>&1"
if [ $? -eq 0 ]; then
show_status OK
else
show_status FAILED
missing_packages=$missing_packages"libxml2-devel "
fi
echo
if [ "$missing_packages" != " " ]; then
echo "WARNING: You are missing some prerequisites!!!"
logger "Missing Packages $missing_packagesn"
for package in $missing_packages
do
case $package in
gcc)
echo -e "n C Compiler (gcc)."
echo -e " Required for compiling packages."
echo -e " Install gcc package(e.g yum install gcc)."
;;
g++)
echo -e "n C++ Compiler (g++)."
echo -e " Required for compiling packages."
echo -e " Install gcc-c++ package(e.g yum install gcc-c++)."
;;
make)
echo -e "n Make Utility. "
echo -e " Required for compiling packages."
echo -e " Install make package (e.g yum install make)."
;;
bash)
echo -e "n Bash v2 or higher."
echo -e " Required for installation and confiruration scripts."
;;
ncurses)
echo -e "n Ncurses Library."
echo -e " Required for compiling packages."
echo -e " Install ncurses development package(e.g yum install ncurses)."
;;
ncurses-devel)
echo -e " Ncurses-devel library."
echo -e " Required for compiling packages."
echo -e " Install ncurse development package(e.g yum install ncurses-devel)."
;;
perl)
echo -e "n Perl development tools."
echo -e " Required for compiling packages."
echo -e " Install Perl package (e.g yum install perl)."
;;
patch)
echo -e "n Patch."
echo -e " Required for compiling packages."
echo -e " Install Patch package(e.g yum install patch)."
;;
bison)
echo -e "n Bison."
echo -e " Required for compiling packages."
echo -e " Install bison package (e.g yum install bison)."
;;
bison-devel)
echo -e "n Bison library."
echo -e " Required for compiling packages."
echo -e " Install bison-devel package (e.g yum install bison-devel)."
;;
openssl)
echo -e "n OpenSSL."
echo -e " Required for compiling packages."
echo -e " Install openssl package (e.g yum install openssl)."
;;
openssl-devel)
echo -e "n Gnutls Library."
echo -e " Required for compiling packages."
echo -e " Install gnutls-devel package(e.g yum install gnutls-devel)."
;;
zlib)
echo -e "n Zlib library."
echo -e " Required for compiling packages."
echo -e " Install zlib package (e.g yum install zlib)."
;;
zlib-devel)
echo -e "n Zlib development packages."
echo -e " Required for compiling packages."
echo -e " Install zlib-devel package(e.g yum install zlib-devel)."
;;
kernel-devel-$(uname -r))
echo -e "n Kernel development packages."
echo -e " Required for compiling packages."
echo -e " Install kernel-devel-$(uname -r) package (e.g yum install kernel-devel-$(uname -r))."
;;
libxml2-devel)
echo -e "n libxml2 development packages."
echo -e " Required for compiling packages."
echo -e " Install libxml2-devel packages(e.g yum install libxml2-devel)."
;;
esac
done
echo
getyn "Would you like to install the missing packages now?"
if [ $? -eq 0 ]; then
for package in $missing_packages
do
echo "yum install -y $package"
yum install -y $package
sleep 3
done
fi
fi
pause
return 0
}
# ---------------------------------------------------------------------------------
# Looking for DAHDI Directory
# ---------------------------------------------------------------------------------
find_dahdi_dirs()
{
local dahdi_linux_dirs
local dahdi_linux_array
local dahdi_linux_complete_dirs
local dahdi_linux_complete_array
local dahdi_tools_dirs
local dahdi_tools_array
dahdi_linux_complete_dirs=$1
clearscr
banner
SETUP_INSTALL_QUICK="NO"
# find dahdi-linux-complete in /usr/src
echo
logger "Looking for dahdi-linux-complete directory in /usr/src...n"
echo
if [ "$dahdi_linux_complete_dirs" == "" ]; then
dahdi_linux_complete_dirs=`find /usr/src/ -maxdepth 2 -type d -name 'dahdi-linux-complete*' | xargs`
if [ -d "$DAHDI_LINUX_COMPLETE_DFLT_INSTALL_DIR" ]; then
dahdi_linux_complete_dirs="$DAHDI_LINUX_COMPLETE_DFLT_INSTALL_DIR" "$dahdi_linux_complete_dirs"
fi
fi
# find dahdi-linux and dahdi-tools in /usr/src if dahdi-linux-complete not found.
# if [ "$dahdi_linux_complete_dirs" == "" ]; then
#
# find dahdi_linux in /usr/src
#
echo
#
echo "Looking for dahdi-linux directory in /usr/src..."
#
echo
#
if [ "$dahdi_linux_dirs" == "" ]; then
#
dahdi_linux_dirs=`find /usr/src/ maxdepth 2 -type d -name 'dahdi-linux*' | xargs`
#
if [ -d "$DAHDI_LINUX_DFLT_INSTALL_DIR" ]; then
#
dahdi_linux_dirs="$DAHDI_LINUX_DFLT_INSTALL_DIR" "$dahdi_linux_dirs"
#
fi
#
fi
#
# find DAHDI-tools in /usr/src
#
echo
#
echo "Looking for dahdi-tools directory in /usr/src/..."
#
echo
#
if [ "$dahdi_tools_dirs" == "" ]; then
#
dahdi_tools_dirs=`find /usr/src/ -maxdepth 2 -type d -name 'dahdi-tools*' | xargs`
#
if [ -d "$DAHDI_TOOLS_DFLT_INSTALL_DIR" ]; then
#
dahdi_tools_dirs="$DAHDI_TOOLS_DFLT_INSTALL_DIR" "$dahdi_tools_dirs"
#
fi
#
fi
# fi
# To move back and forth in dahdi-linux-complete dirs
cnt=1
for dir in $dahdi_linux_complete_dirs
do
# check the directory
if [ ! -d "$dir" ]; then
continue
fi
if [ ! -f "$dir/linux/include/dahdi/kernel.h" ]; then
continue
fi
# if [ -h "$dir" ]; then
# continue
# fi
logger "$cnt : $dirn"
dahdi_linux_complete_array[$cnt]=$dir
cnt=$((cnt+1))
done
# if DAHDI-linux-complete was not found in /usr/src/
if [ "$cnt" -eq 1 ]; then
echo
logger "There was not dahdi-linux-complete directory in /usr/src/n"
logger "Please download the dahdi-linux-complete or manually enter the new dahdi-linux-complete pathn"
echo
fi
echo "---------------------------------------------------------------------------"
echo "n : Download and install dahdi-linux-complete-2.5.0+2.5.0.tar.gz [Default installation]"
echo "m : Manually enter your own dahdi-linux-complete diretory path"
echo "d : Download the latest version of dahdi-linux-complete from Asterisk official website"
echo "q : Skip this step"
echo "(ctrl-c to exit)"
echo -n "Please select the working dahdi-linux-complete directory [1-$((cnt-1)), n,m,d,q]:"
read response
logger "Please select the working dahdi-linux-complete directory [1-$((cnt-1)), n,m,d,q: $responsen]" 0
if [ ! "$response" ]; then
echo
error "Invalid Response $responsen"
echo
find_dahdi_dirs "$dahdi_linux_complete_dirs"
return 0
fi
if [ "$response" == "n" ]; then
cd /usr/src
DAHDI_LINUX_COMPLETE_SOURCE_DIR="dahdi-linux-complete-2.5.0+2.5.0"
wget -c "http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/releases/$DAHDI_LINUX_COMPLETE_SOURCE_DIR"".tar.gz"
if [ $? -ne 0 ]; then
error "Downloading $DAHDI_LINUX_COMPLETE_SOURCE_DIR was Failed!!!n"
DAHDI_LINUX_COMPLETE_SOURCE_DIR=""
else
logger "Downloading $DAHDI_LINUX_COMPLETE_SOURCE_DIR was successful!!!n"
tar -xvzf "$DAHDI_LINUX_COMPLETE_SOURCE_DIR"".tar.gz"
DAHDI_LINUX_COMPLETE_SOURCE_DIR="/usr/src/$DAHDI_LINUX_COMPLETE_SOURCE_DIR"
fi
cd $PROD_HOME
elif [ "$response"
== "m" ]; then
echo
echo "-->If you have downloaded package DAHDI_LINUX_COMPLETE, please input its exact directory here:[e.g /usr/src/$DAHDI_LINUX_COMPLETE_DFLT_INSTALL_DIR]"
echo "-->If you would like to install your own version, please input its version here:[e.g dahdi-linux-complete-2.5.0+2.5.0]"
echo "-->If dahdi-linux-complete was not found that you input, the script will download it from http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/"
echo -n "#> "
read response
if [ $response == "" ]; then
DAHDI_LINUX_COMPLETE_SOURCE_DIR=$DAHDI_LINUX_COMPLETE_DFLT_INSTALL_DIR
else
DAHDI_LINUX_COMPLETE_SOURCE_DIR=$response
logger"Please enter dahdi-linux-complete direcoty path: $DAHDI_LINUX_COMPLETE_SOURCE_DIRn"
if [ ! -d "$DAHDI_LINUX_COMPLETE_SOURCE_DIR" ]; then
cd /usr/src
DAHDI_LINUX_COMPLETE_SOURCE_DIR=`basename $DAHDI_LINUX_COMPLETE_SOURCE_DIR`
DAHDI_LINUX_COMPLETE_SOURCE_DIR=${DAHDI_LINUX_COMPLETE_SOURCE_DIR%.tar.gz}
if [ ! -f "$DAHDI_LINUX_COMPLETE_SOURCE_DIR.tar.gz" ]; then
logger "Downloading $DAHDI_LINUX_COMPLETE_SOURCE_DIR from http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/releases/$DAHDI_LINUX_COMPLETE_SOURCE_DIR.tar.gzn"
wget -c "http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/releases/$DAHDI_LINUX_COMPLETE_SOURCE_DIR"".tar.gz"
if [ $? -ne 0 ]; then
error "Downloading $DAHDI_LINUX_COMPLETE_SOURCE_DIR was failed!!!n"
DAHDI_LINUX_COMPLETE_SOURCE_DIR=""
else
logger "Downloading $DAHDI_LINUX_COMPLETE_SOURCE_DIR was successful!!!n"
tar -xvzf "$DAHDI_LINUX_COMPLETE_SOURCE_DIR"".tar.gz"
DAHDI_LINUX_COMPLETE_SOURCE_DIR="/usr/src/$DAHDI_LINUX_COMPLETE_SOURCE_DIR"
fi
else
tar -xvzf "$DAHDI_LINUX_COMPLETE_SOURCE_DIR"".tar.gz"
DAHDI_LINUX_COMPLETE_SOURCE_DIR="/usr/src/$DAHDI_LINUX_COMPLETE_SOURCE_DIR"
fi
cd $PROD_HOME
#
find_dahdi_dirs
return 0
fi
fi
elif [ "$response" == "d" ]; then
cd /usr/src
wget -c http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
if [ $? -ne 0 ]; then
error "Downloading dahdi-linux-complete-current.tar.gz was failed!!!n"
DAHDI_LINUX_COMPLETE_SOURCE_DIR=""
else
logger "Downloading dahdi-linux-complete-current.tar.gz was successful!!!n"
tar -xvzf dahdi-linux-complete-current.tar.gz
DAHDI_LINUX_COMPLETE_SOURCE_DIR=`tar -tf dahdi-linux-complete-current.tar.gz | xargs | cut -d '' -f1`
DAHDI_LINUX_COMPLETE_SOURCE_DIR="/usr/src/""${DAHDI_LINUX_COMPLETE_SOURCE_DIR}"
fi
cd $PROD_HOME
elif [ "$response" = "q" ]; then
DAHDI_LINUX_COMPLETE_SOURCE_DIR=""
DAHDI_AUTO_INSTALL="NO"
logger "Skipped dahdi-linux-complete installationn"
return 0
elif [ "$response" -gt 0 -a "$response" -lt $cnt ]; then
DAHDI_LINUX_COMPLETE_SOURCE_DIR=${dahdi_linux_complete_array[$response]}
else
echo
error "Invalid Response $responsen"
echo
find_dahdi_dirs "$dahdi_linux_complete_dirs"
return 0
fi
DAHDI_KERNEL_H_PATH="${DAHDI_LINUX_COMPLETE_SOURCE_DIR}/linux/include/dahdi/kernel.h"
if [ ! -f "$DAHDI_KERNEL_H_PATH" ]; then
clearscr
error "kernel.h was not found in $DAHDI_LINUX_COMPLETE_SOURCE_DIRn"
SETUP_INSTALL_QUICK="YES"
find_dahdi_dirs"$dahdi_linux_complete_dirs"
return 0
fi
}
# ------------------------------------------------------------------------------------
# Looking for asterisk directory
# ------------------------------------------------------------------------------------
find_ast_dirs()
{
local ast_dirs
local astdir_array
ast_dirs=$1
clearscr
banner
SETUP_INSTALL_QUICK="NO"
# find asterisk pacakge in /usr/src/
echo
logger "Looking for Asterisk directory in /usr/src...n"
echo
if [ "$ast_dirs" == "" ]; then
astdirs=`find /usr/src/ -maxdepth 2 -type d -name 'asterisk*' | xargs`
if [ -d "$AST_DFLT_INSTALL_DIR" ]; then
astdirs="$AST_DFLT_INSTALL_DIR "$astdirs
fi
fi
#To move back and forth in Asterisk directory
cnt=1
for dir in $astdirs
do
# check the directory
if [ ! -d "$dir" ]; then
continue
fi
if [ ! -f "$dir/include/asterisk.h" ]; then
continue
fi
logger "$cnt : $dirn"
astdir_array[$cnt]=$dir
cnt=$((cnt+1))
done
if [ "$cnt" -eq 1 ]; then
echo
logger "There was not Asterisk directory in /usr/src/n"
logger "Please download the asterisk or enter the new asterisk path!"
echo
fi
echo "------------------------------------------------------------------------------------"
echo "n : Download and install asterisk-1.8-current.tar.gz[Default installation]"
echo "m : Manually enter Asterisk direcotry path"
echo "q : Skip this step"
echo "(ctl-c to Exit)"
echo -n "Please select working Asterisk directory [1-$((cnt-1)), n, m, d, q]: "
read response
logger "Please select working Asterisk directory [1-$((cnt-1)), n, m, d, q]: $responsen" 0
if [ ! "$response" ]; then
echo
error "Invalid Response $responsen"
echo
find_ast_dirs "$astdirs"
return 0
fi
if [ "$response" == "n" ]; then
cd /usr/src
AST_SOURCE_DIR="asterisk-1.8-current"
wget -c "http://downloads.asterisk.org/pub/telephony/asterisk/$AST_SOURCE_DIR"".tar.gz"
if [ $? -ne 0 ]; then
error "Downloading $AST_SOURCE_DIR was failed!!!n"
else
logger "Downloading $AST_SOURCE_DIR was successful!!!n"
tar -xvzf "$AST_SOURCE_DIR"".tar.gz"
fi
find_ast_dirs
elif [ "$response" == "m" ]; then
echo
echo "Please enter Asterisk directory path: [Default: $AST_DFLT_INSTALL_DIR]"
echo "If Asterisk was not found, the script download it from http://downloads.asterisk.org/pub/telephony/asterisk"
echo -n "#> "
read response
if [ "$response" == "" ]; then
AST_SOURCE_DIR=$AST_DFLT_INSTALL_DIR
else
AST_SOURCE_DIR=$response
if [ ! -d "$AST_SOURCE_DIR" ]; then
cd /usr/src
AST_SOURCE_DIR=`basename $AST_SOURCE_DIR`
AST_SOURCE_DIR=${AST_SOURCE_DIR%.tar.gz}
if [ ! -f "$AST_SOURCE_DIR.tar.gz" ]; then
logger "Downloading $AST_SOURCE_DIR from http://downloads.asterisk.org/pub/telephony/asterisk/releases/$AST_SOURCE_DIR.tar.gzn"
wget -c "http://downloads.asterisk.org/pub/telephony/asterisk/releases/$AST_SOURCE_DIR"".tar.gz"
if [ $? -ne 0 ]; then
error "Downloading $AST_SOURCE_DIR was failed!!!n"
AST_SOURCE_DIR=""
else
logger "Downloading $AST_SOURCE_DIR was successful!!!n"
tar -xzvf "$AST_SOURCE_DIR"".tar.gz"
AST_SOURCE_DIR="/usr/src/$AST_SOURCE_DIR"
fi
else
tar -xvzf "$AST_SOURCE_DIR"".tar.gz"
AST_SOURCE_DIR="/usr/src/$AST_SOURCE_DIR"
fi
cd $PROD_HOME
return 0
fi
fi
elif [ "$response" == "q" ]; then
AST_SOURCE_DIR=""
exit 0
elif [ "$response" -gt 0 -a "$response" -lt $cnt ]; then
AST_SOURCE_DIR=${astdir_array[$response]}
else
echo
error "Invalid Response $responsen"
echo
find_ast_dirs "$astdirs"
return 0
fi
if [ ! -f "$AST_SOURCE_DIR/include/asterisk.h" ]; then
clearscr
error "asterisk.h was not found in $AST_SOURCE_DIRn"
SETUP_INSTALL_QUICK="YES"
find_ast_dirs "$astdirs"
return 0
fi
}
install_dahdi()
{
echo
DAHDI_KERNEL_H_PATH="${DAHDI_LINUX_COMPLETE_SOURCE_DIR}/linux/include/dahdi/kernel.h"
if [ ! -d $DAHDI_LINUX_COMPLETE_SOURCE_DIR ]; then
error "$DAHDI_LINUX_COMPLETE_SOURCE_DIR is not a directoryn"
exit 1
fi
if [ ! -f $DAHDI_KERNEL_H_PATH ]; then
error "kernel.h was not found in $DAHDI_LINUX_COMPLETE_SOURCE_DIRn"
exit 1
fi
cd $DAHDI_LINUX_COMPLETE_SOURCE_DIR
make 2>> "$INSTALL_LOG"
if [ $? -ne 0 ]; then
echo
error_compile "Installing $DAHDI_LINUX_COMPLETE_SOURCE_DIR: make ..."
fi
make install 2>> "$INSTALL_LOG"
if [ $? -ne 0 ]; then
echo
error_compile "Installing $DAHDI_LINUX_COMPLETE_SOURCE_DIR: make install ..."
fi
make config
if [ $? -ne 0 ]; then
echo
error_compile "Installing $DAHDI_LINUX_COMPLETE_SOURCE_DIR: make config ..."
fi
echo
echo "------------------------------------------------------------------------------------"
logger "Installing $DAHDI_LINUX_COMPLETE_SOURCE_DIR ..."
show_status OK
echo "------------------------------------------------------------------------------------"
cd $PROD_HOME
pause 3
}
get_dahdi_version()
{
DAHDI_VER_STR=`cat $DAHDI_LINUX_COMPLETE_SOURCE_DIR/.version`
for (( i = 0; i < ${#DAHDI_VER_STR}; i++ ))
do
tmp=${DAHDI_VER_STR:$i:1}
if [ $tmp = "+" ]
then
break;
elif [ $tmp = "-" ]
then
break;
fi
if [ "${tmp##[0-9]*} " = " " ]
then
DAHDI_VER_NUM+=$tmp
fi
done
for (( i =${#DAHDI_VER_NUM}; i < 4; i++ ))
do
DAHDI_VER_NUM+="0"
done
}
install_asterisk()
{
echo
cd $AST_SOURCE_DIR
./configure 2>> "$INSTALL_LOG"
if [ $? -ne 0 ]; then
echo
error_compile "Installing Asterisk: ./configure ..."
fi
make 2>> "$INSTALL_LOG"
if [ $? -ne 0 ]; then
echo
error_compile "Installing Asterisk: make ..."
fi
make install 2>> "$INSTALL_LOG"
if [ $? -ne 0 ]; then
echo
error_compile "Installing Asterisk: make install ..."
fi
#################################################################################################
# Apply to Operation System 64bits
#################################################################################################
if [ -d "/usr/lib64/asterisk/modules" ]; then
if [ ` getconf LONG_BIT` = "64" ]; then
cp -rf /usr/lib/asterisk/modules/*.so /usr/lib64/asterisk/modules/
fi
fi
#################################################################################################
getyn "Would you like to install the asterisk configuration files?"
if [ $? -eq 0 ]; then
make samples 2>> "$INSTALL_LOG"
if [ $? -ne 0 ]; then
echo
error_compile "Installing Asterisk: make samples ..."
fi
fi
echo
echo "------------------------------------------------------------------------------------------"
logger "Installing Asterisk ..."
show_status OK
echo "------------------------------------------------------------------------------------------"
cd $PROD_HOME
}
fun_source_install()
{
find_dahdi_dirs
#install dahdi
if [ "$DAHDI_AUTO_INSTALL" == "YES" ]; then
install_dahdi
fi
find_ast_dirs
# Install Asterisk
if [ "$AST_AUTO_INSTALL" == "YES" ]; then
install_asterisk
fi
}
get_server_environment()
{
echo "get_server_environment"
}
OS="redhat"
check_os()
{
cat /proc/version |grep 'Red Hat' > /dev/null
if [ $? -eq 0 ]; then
OS="redhat"
return
fi
}
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin
KERNEL_VERSION=`uname -r`
KERNEL_ARCH=`uname -m`
FULL_PATH="$0"
PROD_HOME=$(cd ${FULL_PATH%/*}; pwd)
PROD_VERSION='1.0.0'
INSTALL_WAY="source"
DRIVER_SRC_DIR=$PROD_HOME/src/
LOG_DIR=$PROD_HOME/log
#log file
INSTALL_LOG="$LOG_DIR/install.log.$(date +%F-%H-%M)"
ROOT_UID=0
SUPERUSER=NO
LOG_ENABLE=YES
#asterisk and dahdi source code path
AST_DFLT_INSTALL_DIR="/usr/src/asterisk/"
DAHDI_LINUX_DFLT_INSTALL_DIR="/usr/src/dahdi-linux/"
DAHDI_TOOLS_DFLT_INSTALL_DIR="/usr/src/dahdi-tools/"
DAHDI_LINUX_COMPLETE_DFLT_INSTALL_DIR="/usr/src/dahdi-linux-complete"
DAHDI_LINUX_SOURCE_DIR=$DAHDI_LINUX_DFLT_INSTALL_DIR
DAHDI_TOOLS_SOURCE_DIR=$DAHDI_TOOLS_DFLT_INSTALL_DIR
DAHDI_LINUX_COMPLETE_SOURCE_DIR=$DAHDI_LINUX_DFLT_COMPLETE_INSTALL_DIR
AST_SOURCE_DIR=$AST_DFLT_INSTALL_DIR
DAHDI_AUTO_INSTALL="YES"
AST_AUTO_INSTALL="YES"
#ENVIRONMENT INFO
ENVIRON_LSB_COMPLIANT="YES"
ENVIRON_SYSTEM_RELEASE=""
ENVIRON_SYSTEM_VERSION=""
ENVIRON_SYSTEM_ARCH=""
ENVIRON_SYSTEM_LOCALE=""
ENVIRON_SYSTEM_=""
SYSTEM_VERSION=""
SETUP_INSTALL_QUICK="NO"
#Create log dir
mkdir -p $LOG_DIR
#clear log file
cat /dev/null > "$INSTALL_LOG"
#check superuser
if [ "$UID" -ne "$ROOT_UID" ]
then
echo "Must be root to run this script!!!"
exit 1
else
superuser=YES
fi
# Check OS
check_os
# show banner
banner
# Check Bash Version
check_bash
# Check dependences
if [ $OS = "redhat" ]; then
redhat_check_dependencies
fi
# Show banner
banner
select_list "Source code install"
case $SEL in
1)
INSTALL_WAY="source"
fun_source_install
;;
q)
exit 1
esac
Cheers!
最后
以上就是魔幻抽屉为你收集整理的Shell小脚本:实现自动安装Asterisk和DAHDI的全部内容,希望文章能够帮你解决Shell小脚本:实现自动安装Asterisk和DAHDI所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复