#!/bin/bash
#
#Version : 1.6
#
#DATE:2018-12-28 BY Daniel.
#脚本更新
#1.判断是否安装scp优化
#2.根据服务器CPU核数自动修改PHP-FPM子进程数
#3.NGINX加入tar配置
#4.更新运营版,企业版版本号
#5.NGINX加入recordFile配置(2021.04.07)
#6.新增API代理平台安装和python版本变更(2022.06.13)
#7.安装失败打印(20220907)
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
exec > >(tee /home/update.log) 2>&1
cat << EOF
1.Install OK-CC-Cloud.
2.Install OK-CC-Project.
3.Install OK-CC-BLA.
4.Install OK-CC-ApiProxy.
EOF
read -p "Input your choice: " CHOICE
if [ ! -d /home/package ];then
mkdir -p /home/package
fi
# 检查安装scp工具
if command -v scp &>/dev/null; then
echo "scp is already installed"
else
echo "Installing scp and dependencies..."
yum install -y epel-release &>/dev/null
yum install -y openssh openssh-clients &>/dev/null
echo "scp installed successfully"
fi
# 检查ntpd
if command -v ntpd &>/dev/null; then
echo "ntpd is already installed"
else
echo "Installing ntpd..."
yum install -y ntp &>/dev/null
echo "ntpd installed successfully"
fi
# 确保 ntpd 开机启动
chkconfig ntpd on
echo "ntpd is set to start on boot"
#3.备份fs sounds目录
BACKUP_FS_SOUND () {
if [ -d /usr/local/freeswitch/sounds ];then
if [ ! -f /usr/local/freeswitch/sounds/okcc.tar.gz ];then
cd /usr/local/freeswitch/sounds/
tar -zcf okcc.tar.gz okcc
cd /home
else
cd /usr/local/freeswitch/sounds/
rm -rf okcc.tar.gz
tar -zcf okcc.tar.gz okcc
cd /home
fi
fi
}
#配置检查及修改
CHECK_CONF () {
#fs配置路径
FS_CONF=/usr/local/freeswitch/conf
#Nginx配置文件
NGINX_CONF=/usr/local/nginx/conf/nginx.conf
#php-fpm配置路径
PHPFPM_CONF=/usr/local/php/etc/php-fpm.conf
#1.检查时区,将时区改为东8区
ZONEINFO=`date -R |awk -F' ' '{print $6}'`
if [ "$ZONEINFO" != "+0800" ];then
\cp -a /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
if `which ntpdate`;then
/etc/init.d/ntpd stop &>/dev/null
/usr/sbin/ntpdate time2.aliyun.com &>/dev/null
/sbin/hwclock -w &>/dev/null
/etc/init.d/ntpd start &>/dev/null
fi
fi
#2.修改PHP配置文件,行尾加入":/etc/lics/"
grep '/etc/lics' /usr/local/php/lib/php.ini &>/dev/null || sed -i 's@open_basedir = /var/www/html/:/var/www/web-v2/:/usr/local/freeswitch/conf/directory/default/:/usr/local/freeswitch/conf/sip_profiles/external/:/home/ipcc/data/:/usr/local/freeswitch/conf/autoload_configs/:/tmp/:/dev/shm/:/ipcc/etc/pub/@open_basedir = /var/www/html/:/var/www/web-v2/:/usr/local/freeswitch/conf/directory/default/:/usr/local/freeswitch/conf/sip_profiles/external/:/home/ipcc/data/:/usr/local/freeswitch/conf/autoload_configs/:/tmp/:/dev/shm/:/ipcc/etc/pub/:/etc/lics/@g' /usr/local/php/lib/php.ini
#3.修改FS最大sessions和CPS
CORE_NUMS=`cat /proc/cpuinfo |grep processor |wc -l`
if [ $CORE_NUMS -ge 1 ];then
grep '' $FS_CONF/autoload_configs/switch.conf.xml &>/dev/null || sed -i 's@@@g' $FS_CONF/autoload_configs/switch.conf.xml
grep '' $FS_CONF/autoload_configs/switch.conf.xml &>/dev/null || sed -i 's@@@g' $FS_CONF/autoload_configs/switch.conf.xml
fi
#4.根据服务器CPU核数自动修改PHP-FPM子进程数
if [ $CORE_NUMS -le 4 ];then
sed -i s@'pm.max_children = .*'@'pm.max_children = 4'@g $PHPFPM_CONF
sed -i s@'pm.start_servers = .*'@'pm.start_servers = 2'@g $PHPFPM_CONF
sed -i s@'pm.min_spare_servers = .*'@'pm.min_spare_servers = 2'@g $PHPFPM_CONF
sed -i s@'pm.max_spare_servers = .*'@'pm.max_spare_servers = 4'@g $PHPFPM_CONF
fi
if [ $CORE_NUMS -gt 4 ];then
sed -i s@'pm.max_children = .*'@'pm.max_children = '$CORE_NUMS''@g $PHPFPM_CONF
sed -i s@'pm.start_servers = .*'@'pm.start_servers = '$[$CORE_NUMS/2]''@g $PHPFPM_CONF
sed -i s@'pm.min_spare_servers = .*'@'pm.min_spare_servers = '$[$CORE_NUMS/2]''@g $PHPFPM_CONF
sed -i s@'pm.max_spare_servers = .*'@'pm.max_spare_servers = '$CORE_NUMS''@g $PHPFPM_CONF
fi
#检查专用网络还是经典网络
#PUBLIC_IP=`curl members.3322.org/dyndns/getip`
#if `ifconfig |grep $PUBLIC_IP`;then
# sleep 1
#else
# sed -i s@"auto-nat@"$PUBLIC_IP@g $FS_CONF/sip_profiles/{internal,external}.xml
#fi
#5./etc/rc.sysinit追加配置
grep '/ipcc/sbin/system-startup-hook.sh' /etc/rc.sysinit &>/dev/null || \
cat >> /etc/rc.sysinit << EOF
if [ -f /ipcc/sbin/system-startup-hook.sh ]; then
if [ ! -x /ipcc/sbin/system-startup-hook.sh ]; then
chmod +x /ipcc/sbin/system-startup-hook.sh
fi
/ipcc/sbin/system-startup-hook.sh
fi
EOF
if [ -f /ipcc/sbin/system-startup-hook/lock-file.sh ];then
if ! grep "/usr/local/freeswitch/run/freeswitch.pid" /ipcc/sbin/system-startup-hook/lock-file.sh;then
echo "rm -rf /usr/local/freeswitch/run/freeswitch.pid" >>/ipcc/sbin/system-startup-hook/lock-file.sh
fi
fi
#修改net.ipv4.tcp_max_tw_buckets的值
if grep 'net.ipv4.tcp_max_tw_buckets' /etc/sysctl.conf;then
sed -i '/net.ipv4.tcp_max_tw_buckets/d' /etc/sysctl.conf
echo "net.ipv4.tcp_max_tw_buckets = 60000" >> /etc/sysctl.conf
else
echo "net.ipv4.tcp_max_tw_buckets = 60000" >> /etc/sysctl.conf
fi
/sbin/sysctl -p &>/dev/null
#6修改Nginx配置
#6.1修改nginx超时时长
if ! grep fastcgi_read_timeout $NGINX_CONF;then
sed -i '/gzip_disable/a\ fastcgi_read_timeout 150;' $NGINX_CONF
fi
#6.2添加tar路径
if ! grep 'location ~ \\.tar' $NGINX_CONF;then
sed -i '/ # MP3 file is not in the wb root dir/i\ location ~ \\.tar {' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\ root /home/ipcc;' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\ }' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\\' $NGINX_CONF
fi
#6.3添加recordFile路径
if ! grep 'recordFile' $NGINX_CONF;then
sed -i '/ # MP3 file is not in the wb root dir/i\ # for recordFile' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\ location /recordFile {' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\ root /var/www/web-v2/;' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\ fastcgi_index index.php;' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\\ rewrite /recordFile/(.*) /service/index.php?m=common&c=recordFile&f=$1 last;' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\ }' $NGINX_CONF
fi
#7.恢复sounds
if [ -f /usr/local/freeswitch/sounds/okcc.tar.gz ];then
cd /usr/local/freeswitch/sounds/
tar -zxf okcc.tar.gz
cd /home
fi
#8.修改CPU空闲配置
cat /etc/global.xml | grep "min_idel_cpu" | while read line
do
value=`echo $line | awk -F " " '{print $3}'`
if [ '$value' != 'value="10"' ];then
sed -i s@''@''@g /etc/global.xml
fi
done
#9.ridis添加配置
#9.1 php添加redis库
if ! grep extension=redis.so /usr/local/php/lib/php.ini &>/dev/null;then
sed -i '/extension=php_shmop.dll/a\extension=redis.so' /usr/local/php/lib/php.ini
fi
#9.2 监控项目加入redis
if ! grep redis /etc/hb-srv.xml &>/dev/null;then
sed -i '/<\/process>/i\ <10>' /etc/hb-srv.xml
sed -i '/<\/process>/i\ ' /etc/hb-srv.xml
sed -i '/<\/process>/i\ ' /etc/hb-srv.xml
sed -i '/<\/process>/i\ ' /etc/hb-srv.xml
sed -i '/<\/process>/i\ ' /etc/hb-srv.xml
sed -i '/<\/process>/i\ ' /etc/hb-srv.xml
sed -i '/<\/process>/i\ <\/10>' /etc/hb-srv.xml
fi
}
#10 修改python版本号
#/usr/libexec/urlgrabber-ext-down 删除第一行插入 #! /usr/bin/python2.7
sed -i '1d' /usr/libexec/urlgrabber-ext-down && sed -i '1i\#! /usr/bin/python2.7' /usr/libexec/urlgrabber-ext-down &>/dev/null
#/usr/bin/yum 删除第一行插入 #! /usr/bin/python2.7
sed -i '1d' /usr/bin/yum && sed -i '1i\#! /usr/bin/python2.7' /usr/bin/yum &>/dev/null
#/usr/bin/firewall-cmd 删除第一行插入 #!/usr/bin/python2.7 -Es
sed -i '1d' /usr/bin/firewall-cmd && sed -i '1i\#!/usr/bin/python2.7 -Es' /usr/bin/firewall-cmd &>/dev/null
#/usr/sbin/firewalld 删除第一行插入 #!/usr/bin/python2.7 -Es
sed -i '1d' /usr/sbin/firewalld && sed -i '1i\#!/usr/bin/python2.7 -Es' /usr/sbin/firewalld &>/dev/null
#黑名单服务器配置
BLA_CONF () {
#fs配置路径
FS_CONF=/usr/local/freeswitch/conf
#Nginx配置文件
NGINX_CONF=/usr/local/nginx/conf/nginx.conf
#php-fpm配置路径
PHPFPM_CONF=/usr/local/php/etc/php-fpm.conf
#1.检查时区,将时区改为东8区
ZONEINFO=`date -R |awk -F' ' '{print $6}'`
if [ "$ZONEINFO" != "+0800" ];then
\cp -a /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
if `which ntpdate`;then
/etc/init.d/ntpd stop &>/dev/null
/usr/sbin/ntpdate ntp.api.bz &>/dev/null
/sbin/hwclock -w &>/dev/null
/etc/init.d/ntpd start &>/dev/null
fi
fi
#2.修改FS最大sessions和CPS
CORE_NUMS=`cat /proc/cpuinfo |grep processor |wc -l`
if [ $CORE_NUMS -ge 1 ];then
grep '' $FS_CONF/autoload_configs/switch.conf.xml &>/dev/null || sed -i 's@@@g' $FS_CONF/autoload_configs/switch.conf.xml
grep '' $FS_CONF/autoload_configs/switch.conf.xml &>/dev/null || sed -i 's@@@g'
grep '' $FS_CONF/autoload_configs/switch.conf.xml &>/dev/null || sed -i 's@@@g'
$FS_CONF/autoload_configs/switch.conf.xml
fi
#3.根据服务器CPU核数自动修改PHP-FPM子进程数
if [ $CORE_NUMS -le 4 ];then
sed -i s@'pm.max_children = .*'@'pm.max_children = 4'@g $PHPFPM_CONF
sed -i s@'pm.start_servers = .*'@'pm.start_servers = 2'@g $PHPFPM_CONF
sed -i s@'pm.min_spare_servers = .*'@'pm.min_spare_servers = 2'@g $PHPFPM_CONF
sed -i s@'pm.max_spare_servers = .*'@'pm.max_spare_servers = 4'@g $PHPFPM_CONF
fi
if [ $CORE_NUMS -gt 4 ];then
sed -i s@'pm.max_children = .*'@'pm.max_children = '$CORE_NUMS''@g $PHPFPM_CONF
sed -i s@'pm.start_servers = .*'@'pm.start_servers = '$[$CORE_NUMS/2]''@g $PHPFPM_CONF
sed -i s@'pm.min_spare_servers = .*'@'pm.min_spare_servers = '$[$CORE_NUMS/2]''@g $PHPFPM_CONF
sed -i s@'pm.max_spare_servers = .*'@'pm.max_spare_servers = '$CORE_NUMS''@g $PHPFPM_CONF
fi
#检查专用网络还是经典网络
#PUBLIC_IP=`curl members.3322.org/dyndns/getip`
#if `ifconfig |grep $PUBLIC_IP`;then
# sleep 1
#else
# sed -i s@"auto-nat@"$PUBLIC_IP@g $FS_CONF/sip_profiles/{internal,external}.xml
#fi
#4./etc/rc.sysinit追加配置
grep '/ipcc/sbin/system-startup-hook.sh' /etc/rc.sysinit &>/dev/null || \
cat >> /etc/rc.sysinit << EOF
if [ -f /ipcc/sbin/system-startup-hook.sh ]; then
if [ ! -x /ipcc/sbin/system-startup-hook.sh ]; then
chmod +x /ipcc/sbin/system-startup-hook.sh
fi
/ipcc/sbin/system-startup-hook.sh
fi
EOF
if [ -f /ipcc/sbin/system-startup-hook/lock-file.sh ];then
if ! grep "/usr/local/freeswitch/run/freeswitch.pid" /ipcc/sbin/system-startup-hook/lock-file.sh;then
echo "rm -rf /usr/local/freeswitch/run/freeswitch.pid" >>/ipcc/sbin/system-startup-hook/lock-file.sh
fi
fi
#5.修改net.ipv4.tcp_max_tw_buckets的值
if grep 'net.ipv4.tcp_max_tw_buckets' /etc/sysctl.conf;then
sed -i '/net.ipv4.tcp_max_tw_buckets/d' /etc/sysctl.conf
echo "net.ipv4.tcp_max_tw_buckets = 25000" >> /etc/sysctl.conf
else
echo "net.ipv4.tcp_max_tw_buckets = 25000" >> /etc/sysctl.conf
fi
/sbin/sysctl -p &>/dev/null
#6修改Nginx配置
#6.1修改nginx超时时长
if ! grep fastcgi_read_timeout $NGINX_CONF;then
sed -i '/gzip_disable/a\ fastcgi_read_timeout 150;' $NGINX_CONF
fi
#6.2添加tar路径
if ! grep 'location ~ \\.tar' $NGINX_CONF;then
sed -i '/ # MP3 file is not in the wb root dir/i\ location ~ \\.tar {' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\ root /home/ipcc;' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\ }' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\\' $NGINX_CONF
fi
#6.3添加recordFile路径
if ! grep 'recordFile' $NGINX_CONF;then
sed -i '/ # MP3 file is not in the wb root dir/i\ # for recordFile' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\ location /recordFile {' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\ root /var/www/web-v2/;' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\ fastcgi_index index.php;' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\\ rewrite /recordFile/(.*) /service/index.php?m=common&c=recordFile&f=$1 last;' $NGINX_CONF
sed -i '/ # MP3 file is not in the wb root dir/i\ }' $NGINX_CONF
fi
}
#CloudCC版本
PKG=(V5.0.9 V5.0.9.1 V5.0.11 V5.0.12)
#Project版本
PKG2=(V1.0.40 V1.0.41 V1.0.41.1 V1.0.42 V1.0.42.1 V1.0.42.2 V1.0.42.3 V1.0.42.4 V1.1.1 V1.1.2 V1.1.2.1 V1.1.2.2 V1.1.3 V1.1.3.1 V1.1.3.2 V1.1.3.3 V1.1.4 V1.1.5 V1.1.5.1 V1.1.6 V1.1.6.1 V1.1.7 V1.1.8 V1.1.8.1 V1.1.9 V1.1.11 V1.1.12 V1.1.13 V1.1.14 V1.1.15 V1.1.21 V1.1.22 V1.1.23 V1.1.24 V1.1.25 V1.1.26 V1.1.27 V1.1.28 V1.1.29 V1.1.31 V1.1.32 V1.1.41 V1.1.42 V1.1.43 V1.1.44 V1.1.45)
#PKG2=(V1.0.10 V1.0.9 V1.0.11 V1.0.12 V1.0.13 V1.0.14 V1.0.15 V1.0.16 V1.0.18 V1.0.19 V1.0.21.1 V1.0.21.2 V1.0.22 V1.0.31 V1.0.32 V1.0.33 V1.0.33.1 V1.0.34 V1.0.34.1 V1.0.35 V1.0.36 V1.0.37 V1.0.38 V1.0.39 V1.0.39.1 V1.0.41 V1.0.41.1 V1.0.42 V1.0.42.1 V1.0.42.2 V1.0.42.3 V1.0.42.4 V1.1.1 V1.1.2 V1.1.2.1 V1.1.2.2 V1.1.2.3 V1.1.2.4 V1.1.2.5 V1.1.3 V1.1.3.1 V1.1.3.2 V1.1.3.3 V1.1.4 V1.1.5 V1.1.5.1 V1.1.6 V1.1.6.1 V1.1.7 V1.1.8 V1.1.8.1 V1.1.9 V1.1.11 V1.1.12 V1.1.13 V1.1.14 V1.1.15 V1.1.21 V1.1.22 V1.1.23 V1.1.24 V1.1.25 V1.1.26)
#BLA版本
PKG3=(V1.0.0 V1.0.1 V1.0.2)
#ApiProxy-new版本
PKG4=(V1.0.0 V1.0.1)
INSTALL_CLOUD () {
BACKUP_FS_SOUND
for I in ${PKG[*]};do
echo "`date +'%F %H:%M:%S'` $I ">>/var/log/install_package.log
cd /home/package
if [ $I == V2.5.0 ] ;then
tar -xf $I-BIN.tar.gz
cd $I/BIN
./check.sh
tar -xf l_ipp_7.1.1.117_intel64.tar.gz
cd l_ipp_7.1.1.117_intel64
./install.sh
cd ../
./install.sh
echo "*********************Install $I finished...**************************"
sleep 2
else
tar -xf $I-BIN.tar.gz
cd $I/BIN
./install.sh
if [ $? == 0 ];then
echo "`date +'%F %H:%M:%S'` $I " >>/var/log/install_package.log
else
echo "`date +'%F %H:%M:%S'` $I Install fail..." >>/var/log/install_package.log
fi
echo "*********************Install $I finished...**************************"
sleep 2
fi
done
}
INSTALL_PROJECT () {
BACKUP_FS_SOUND
for I in ${PKG2[*]};do
echo "`date +'%F %H:%M:%S'` $I ">>/var/log/install_package.log
cd /home/package
if [ $I == V1.0.10 ] ;then
tar -xf $I-BIN.tar.gz
cd $I/BIN
./check.sh
tar -xf l_ipp_7.1.1.117_intel64.tar.gz
cd l_ipp_7.1.1.117_intel64
./install.sh
cd ../
./install.sh
echo "*********************Install $I finished...**************************"
sleep 2
else
tar -xf $I-BIN.tar.gz
cd $I/BIN
./install.sh
if [ $? == 0 ];then
echo "`date +'%F %H:%M:%S'` $I " >>/var/log/install_package.log
else
echo "`date +'%F %H:%M:%S'` $I Install fail..." >>/var/log/install_package.log
fi
echo "*********************Install $I finished...**************************"
sleep 2
fi
done
}
INSTALL_BLA () {
scp root@ai.dipcc.com:/home/package/2.3/V2.5.* /home/package
for I in ${PKG3[*]};do
echo "`date +'%F %H:%M:%S'` $I ">>/var/log/install_package.log
cd /home/package
if [ $I == V1.0.0 ] ;then
tar -xf $I-BIN.tar.gz
cd $I/BIN
./check.sh
./install.sh
echo "*********************Install $I finished...**************************"
sleep 2
else
tar -xf $I-BIN.tar.gz
cd $I/BIN
./install.sh
if [ $? == 0 ];then
echo "`date +'%F %H:%M:%S'` $I " >>/var/log/install_package.log
else
echo "`date +'%F %H:%M:%S'` $I Install fail..." >>/var/log/install_package.log
fi
echo "*********************Install $I finished...**************************"
sleep 2
fi
done
}
INSTALL_API-PROXY() {
for I in ${PKG4[*]};do
echo "`date +'%F %H:%M:%S'` $I ">>/var/log/install_package.log
cd /home/package
if [ $I == V1.0.0 ] ;then
tar -xf $I-BIN.tar.gz
cd $I/BIN
./install.sh
echo "*********************Install $I finished...**************************"
sleep 2
else
tar -xf $I-BIN.tar.gz
cd $I/BIN
./install.sh
if [ $? == 0 ];then
echo "`date +'%F %H:%M:%S'` $I " >>/var/log/install_package.log
else
echo "`date +'%F %H:%M:%S'` $I Install fail..." >>/var/log/install_package.log
fi
echo "*********************Install $I finished...**************************"
sleep 2
fi
done
}
RESTART_SERVICE () {
/etc/init.d/ipccd restart
/etc/init.d/php-fpm restart
/etc/init.d/freeswitch restart
/etc/init.d/mysql restart
}
RM_PACKAGE () {
if [ -d /home/package ];then
rm -rf /home/package/*
fi
}
BACKUP_CORE_MODULE () {
if [ ! -d /home/backup ];then
mkdir /home/backup
fi
date=`date +'%F_%H:%M:%S'`
if [ -f /ipcc/bin/scd ];then
tar zcf /home/backup/scd-${date}.tar.gz /ipcc/bin/scd
fi
}
UPDATE_CLOUD () {
echo "NONE"
exit 0
}
case $CHOICE in
1)
BACKUP_CORE_MODULE
INSTALL_CLOUD
CHECK_CONF
RESTART_SERVICE
RM_PACKAGE
;;
2)
BACKUP_CORE_MODULE
INSTALL_PROJECT
CHECK_CONF
RESTART_SERVICE
RM_PACKAGE
;;
3)
INSTALL_BLA
BLA_CONF
RESTART_SERVICE
#RM_PACKAGE
;;
4)
INSTALL_API-PROXY
CHECK_CONF
RESTART_SERVICE
RM_PACKAGE
;;
*)
echo "Please Input 1 2 or 3"
;;
esac