Procházet zdrojové kódy

Merge pull request #3 from lj2007331/master

Sysn
安静书生 před 7 roky
rodič
revize
c65e63735e
11 změnil soubory, kde provedl 349 přidání a 261 odebrání
  1. 3 3
      README.md
  2. 53 12
      addons.sh
  3. 1 1
      backup_setup.sh
  4. 45 45
      include/check_download.sh
  5. 34 0
      include/upgrade_oneinstack.sh
  6. 8 8
      install.sh
  7. 3 0
      options.conf
  8. 1 1
      pureftpd_vhost.sh
  9. 12 3
      upgrade.sh
  10. 2 1
      versions.txt
  11. 187 187
      vhost.sh

+ 3 - 3
README.md

@@ -6,18 +6,18 @@ Script properties:
 - Continually updated
 - Continually updated
 - Source compiler installation, most stable source is the latest version, and download from the official site
 - Source compiler installation, most stable source is the latest version, and download from the official site
 - Some security optimization
 - Some security optimization
-- Providing a plurality of database versions (MySQL-5.7, MySQL-5.6, MySQL-5.5, MariaDB-10.1, MariaDB-10.0, MariaDB-5.5, Percona-5.7, Percona-5.6, Percona-5.5, AliSQL-5.6)
+- Providing a plurality of database versions (MySQL-5.7, MySQL-5.6, MySQL-5.5, MariaDB-10.1, MariaDB-10.0, MariaDB-5.5, Percona-5.7, Percona-5.6, Percona-5.5, AliSQL-5.6, PostgreSQL)
 - Providing multiple PHP versions (PHP-7.2, PHP-7.1, PHP-7.0, PHP-5.6, PHP-5.5, PHP-5.4, PHP-5.3)
 - Providing multiple PHP versions (PHP-7.2, PHP-7.1, PHP-7.0, PHP-5.6, PHP-5.5, PHP-5.4, PHP-5.3)
 - Provide Nginx, Tengine, OpenResty
 - Provide Nginx, Tengine, OpenResty
 - Providing a plurality of Tomcat version (Tomcat-8, Tomcat-7, Tomcat-6)
 - Providing a plurality of Tomcat version (Tomcat-8, Tomcat-7, Tomcat-6)
 - Providing a plurality of JDK version (JDK-1.8, JDK-1.7, JDK-1.6)
 - Providing a plurality of JDK version (JDK-1.8, JDK-1.7, JDK-1.6)
 - Providing a plurality of Apache version (Apache-2.4, Apache-2.2)
 - Providing a plurality of Apache version (Apache-2.4, Apache-2.2)
-- According to their needs to install PHP Cache Accelerator provides ZendOPcache, xcache, apcu, eAccelerator. And php encryption and decryption tool ionCube, ZendGuardLoader
+- According to their needs to install PHP Cache Accelerator provides ZendOPcache, xcache, apcu, eAccelerator. And php encryption and decryption tool ionCube, ZendGuardLoader, swoole, xdebug
 - Installation Pureftpd, phpMyAdmin according to their needs
 - Installation Pureftpd, phpMyAdmin according to their needs
 - Install memcached, redis according to their needs
 - Install memcached, redis according to their needs
 - Jemalloc optimize MySQL, Nginx
 - Jemalloc optimize MySQL, Nginx
 - Providing add a virtual host script, include Let's Encrypt SSL certificate
 - Providing add a virtual host script, include Let's Encrypt SSL certificate
-- Provide Nginx/Tengine/OpenResty, MySQL/MariaDB/Percona, PHP, Redis, Memcached, phpMyAdmin upgrade script
+- Provide Nginx/Tengine/OpenResty/Apache, MySQL/MariaDB/Percona, PHP, Redis, Memcached, phpMyAdmin upgrade script
 - Provide local backup and remote backup (rsync between servers) script
 - Provide local backup and remote backup (rsync between servers) script
 - Provided under HHVM install CentOS 6,7
 - Provided under HHVM install CentOS 6,7
 
 

+ 53 - 12
addons.sh

@@ -202,23 +202,25 @@ ACTION_FUN() {
 while :;do
 while :;do
   printf "
   printf "
 What Are You Doing?
 What Are You Doing?
-\t${CMSG}1${CEND}. Install/Uninstall PHP opcode cache
+\t${CMSG} 1${CEND}. Install/Uninstall PHP opcode cache
-\t${CMSG}2${CEND}. Install/Uninstall ZendGuardLoader/ionCube PHP Extension
+\t${CMSG} 2${CEND}. Install/Uninstall ZendGuardLoader/ionCube PHP Extension
-\t${CMSG}3${CEND}. Install/Uninstall ImageMagick/GraphicsMagick PHP Extension
+\t${CMSG} 3${CEND}. Install/Uninstall ImageMagick/GraphicsMagick PHP Extension
-\t${CMSG}4${CEND}. Install/Uninstall fileinfo PHP Extension
+\t${CMSG} 4${CEND}. Install/Uninstall fileinfo PHP Extension
-\t${CMSG}5${CEND}. Install/Uninstall memcached/memcache
+\t${CMSG} 5${CEND}. Install/Uninstall memcached/memcache
-\t${CMSG}6${CEND}. Install/Uninstall Redis
+\t${CMSG} 6${CEND}. Install/Uninstall Redis
-\t${CMSG}7${CEND}. Install/Uninstall Let's Encrypt client
+\t${CMSG} 7${CEND}. Install/Uninstall Let's Encrypt client
-\t${CMSG}8${CEND}. Install/Uninstall swoole PHP Extension 
+\t${CMSG} 8${CEND}. Install/Uninstall swoole PHP Extension 
-\t${CMSG}9${CEND}. Install/Uninstall fail2ban
+\t${CMSG} 9${CEND}. Install/Uninstall xdebug PHP Extension 
-\t${CMSG}q${CEND}. Exit
+\t${CMSG}10${CEND}. Install/Uninstall fail2ban
+\t${CMSG} q${CEND}. Exit
 "
 "
   read -p "Please input the correct option: " Number
   read -p "Please input the correct option: " Number
-  if [[ ! "${Number}" =~ ^[1-9,q]$ ]]; then
+  if [[ ! "${Number}" =~ ^[1-9,q]$|^10$ ]]; then
-    echo "${CFAILURE}input error! Please only input 1 ~ 9 and q${CEND}"
+    echo "${CFAILURE}input error! Please only input 1~10 and q${CEND}"
   else
   else
     case "${Number}" in
     case "${Number}" in
       1)
       1)
+        [ "$"]
         ACTION_FUN
         ACTION_FUN
         while :; do echo
         while :; do echo
           echo "Please select a opcode cache of the PHP:"
           echo "Please select a opcode cache of the PHP:"
@@ -490,6 +492,45 @@ What Are You Doing?
         fi
         fi
         ;;
         ;;
       9)
       9)
+        [[ ! "${PHP_main_version}" =~ ^5\.[5-6]$|^7\.[0-1]$ ]] && { echo "${CWARNING}Need a PHP version >= 5.5.0 and < 7.2.0${CEND}"; exit 1; }
+        ACTION_FUN
+        PHP_extension=xdebug
+        if [ "${ACTION}" = '1' ]; then
+          Check_PHP_Extension
+          pushd ${oneinstack_dir}/src
+          src_url=http://mirrors.linuxeye.com/oneinstack/src/xdebug-${xdebug_version}.tgz && Download_src
+          src_url=http://mirrors.linuxeye.com/oneinstack/src/webgrind-master.zip && Download_src
+          tar xzf xdebug-${xdebug_version}.tgz
+          unzip -q webgrind-master.zip 
+          /bin/mv webgrind-master ${wwwroot_dir}/default/webgrind 
+          pushd xdebug-${xdebug_version}
+          ${php_install_dir}/bin/phpize
+          ./configure --with-php-config=${php_install_dir}/bin/php-config
+          make -j ${THREAD} && make install
+          popd
+          rm -rf xdebug-${xdebug_version} 
+          popd
+          [ ! -e /tmp/xdebug ] && { mkdir /tmp/xdebug; chown ${run_user}.${run_user} /tmp/xdebug; }
+          [ ! -e /tmp/webgrind ] && { mkdir /tmp/webgrind; chown ${run_user}.${run_user} /tmp/webgrind; }
+          chown -R ${run_user}.${run_user} ${wwwroot_dir}/default/webgrind
+          sed -i 's@static $storageDir.*@static $storageDir = "/tmp/webgrind";@' ${wwwroot_dir}/default/webgrind/config.php
+          sed -i 's@static $profilerDir.*@static $profilerDir = "/tmp/xdebug";@' ${wwwroot_dir}/default/webgrind/config.php
+          cat > ${php_install_dir}/etc/php.d/ext-xdebug.ini << EOF
+[xdebug]
+zend_extension=xdebug.so
+xdebug.trace_output_dir=/tmp/xdebug
+xdebug.profiler_output_dir = /tmp/xdebug
+xdebug.profiler_enable = On
+xdebug.profiler_enable_trigger = 1
+EOF
+          Check_succ
+          echo; echo "Webgrind URL: ${CMSG}http://{Public IP}/webgrind ${CEND}"
+        else
+          rm -rf /tmp/{xdebug,webgrind} ${wwwroot_dir}/default/webgrind
+          Uninstall_succ
+        fi
+        ;;
+      10)
         ACTION_FUN
         ACTION_FUN
         if [ "${ACTION}" = '1' ]; then
         if [ "${ACTION}" = '1' ]; then
           Install_fail2ban
           Install_fail2ban

+ 1 - 1
backup_setup.sh

@@ -155,7 +155,7 @@ if [[ "$DESC_BK" =~ ^[2,4,6]$ ]]; then
       [ -z "`grep $remote_ip tools/iplist.txt`" ] && echo "$remote_ip $remote_port $remote_user $remote_password" >> tools/iplist.txt || echo "${CWARNING}$remote_ip has been added! ${CEND}"
       [ -z "`grep $remote_ip tools/iplist.txt`" ] && echo "$remote_ip $remote_port $remote_user $remote_password" >> tools/iplist.txt || echo "${CWARNING}$remote_ip has been added! ${CEND}"
       while :; do
       while :; do
         read -p "Do you want to add more host ? [y/n]: " more_host_yn
         read -p "Do you want to add more host ? [y/n]: " more_host_yn
-        if [ "$more_host_yn" != 'y' -a "$more_host_yn" != 'n' ]; then
+        if [[ ! $more_host_yn =~ ^[y,n]$ ]]; then
           echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
           echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
         else
         else
           break
           break

+ 45 - 45
include/check_download.sh

@@ -135,8 +135,8 @@ checkDownload() {
         # start download
         # start download
         wget --tries=6 -c --no-check-certificate ${DOWN_ADDR_MYSQL}/${FILE_NAME}
         wget --tries=6 -c --no-check-certificate ${DOWN_ADDR_MYSQL}/${FILE_NAME}
         # verifying download
         # verifying download
-        MYSQL_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MYSQL}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}')
+        MYSQL_TAR_MD5=$(curl -s ${DOWN_ADDR_MYSQL}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}')
-        [ -z "${MYSQL_TAR_MD5}" ] && MYSQL_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MYSQL_BK}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}') 
+        [ -z "${MYSQL_TAR_MD5}" ] && MYSQL_TAR_MD5=$(curl -s ${DOWN_ADDR_MYSQL_BK}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}') 
         tryDlCount=0
         tryDlCount=0
         while [ "$(md5sum ${FILE_NAME} | awk '{print $1}')" != "${MYSQL_TAR_MD5}" ]; do
         while [ "$(md5sum ${FILE_NAME} | awk '{print $1}')" != "${MYSQL_TAR_MD5}" ]; do
           wget -c --no-check-certificate ${DOWN_ADDR_MYSQL_BK}/${FILE_NAME};sleep 1
           wget -c --no-check-certificate ${DOWN_ADDR_MYSQL_BK}/${FILE_NAME};sleep 1
@@ -183,8 +183,8 @@ checkDownload() {
         fi
         fi
         wget --tries=6 -c --no-check-certificate ${DOWN_ADDR_MYSQL}/${FILE_NAME}
         wget --tries=6 -c --no-check-certificate ${DOWN_ADDR_MYSQL}/${FILE_NAME}
         # verifying download
         # verifying download
-        MYSQL_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MYSQL}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}')
+        MYSQL_TAR_MD5=$(curl -s ${DOWN_ADDR_MYSQL}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}')
-        [ -z "${MYSQL_TAR_MD5}" ] && MYSQL_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MYSQL_BK}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}') 
+        [ -z "${MYSQL_TAR_MD5}" ] && MYSQL_TAR_MD5=$(curl -s ${DOWN_ADDR_MYSQL_BK}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}') 
         tryDlCount=0
         tryDlCount=0
         while [ "$(md5sum ${FILE_NAME} | awk '{print $1}')" != "${MYSQL_TAR_MD5}" ]; do
         while [ "$(md5sum ${FILE_NAME} | awk '{print $1}')" != "${MYSQL_TAR_MD5}" ]; do
           wget -c --no-check-certificate ${DOWN_ADDR_MYSQL_BK}/${FILE_NAME};sleep 1
           wget -c --no-check-certificate ${DOWN_ADDR_MYSQL_BK}/${FILE_NAME};sleep 1
@@ -232,8 +232,8 @@ checkDownload() {
         fi
         fi
         wget --tries=6 -c --no-check-certificate ${DOWN_ADDR_MYSQL}/${FILE_NAME}
         wget --tries=6 -c --no-check-certificate ${DOWN_ADDR_MYSQL}/${FILE_NAME}
         # verifying download
         # verifying download
-        MYSQL_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MYSQL}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}')
+        MYSQL_TAR_MD5=$(curl -s ${DOWN_ADDR_MYSQL}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}')
-        [ -z "${MYSQL_TAR_MD5}" ] && MYSQL_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MYSQL_BK}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}') 
+        [ -z "${MYSQL_TAR_MD5}" ] && MYSQL_TAR_MD5=$(curl -s ${DOWN_ADDR_MYSQL_BK}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}') 
         tryDlCount=0
         tryDlCount=0
         while [ "$(md5sum ${FILE_NAME} | awk '{print $1}')" != "${MYSQL_TAR_MD5}" ]; do
         while [ "$(md5sum ${FILE_NAME} | awk '{print $1}')" != "${MYSQL_TAR_MD5}" ]; do
           wget -c --no-check-certificate ${DOWN_ADDR_MYSQL_BK}/${FILE_NAME};sleep 1
           wget -c --no-check-certificate ${DOWN_ADDR_MYSQL_BK}/${FILE_NAME};sleep 1
@@ -255,22 +255,22 @@ checkDownload() {
           FILE_NAME=mariadb-${mariadb102_version}-${GLIBC_FLAG}-${SYS_BIT_b}.tar.gz
           FILE_NAME=mariadb-${mariadb102_version}-${GLIBC_FLAG}-${SYS_BIT_b}.tar.gz
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb102_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb102_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
-            MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
-            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb102_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}; MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
+            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb102_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}; MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
           else
           else
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb102_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb102_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
-            MARAIDB_TAR_MD5=$(curl -Lk http://archive.mariadb.org/mariadb-${mariadb102_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s http://archive.mariadb.org/mariadb-${mariadb102_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
           fi
           fi
         elif [ "${dbInstallMethods}" == '2' ]; then
         elif [ "${dbInstallMethods}" == '2' ]; then
           echo "Download MariaDB 10.2 source package..."
           echo "Download MariaDB 10.2 source package..."
           FILE_NAME=mariadb-${mariadb102_version}.tar.gz
           FILE_NAME=mariadb-${mariadb102_version}.tar.gz
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb102_version}/source
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb102_version}/source
-            MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
-            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb102_version}/source; MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
+            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb102_version}/source; MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
           else
           else
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb102_version}/source
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb102_version}/source
-            MARAIDB_TAR_MD5=$(curl -Lk http://archive.mariadb.org/mariadb-${mariadb102_version}/source/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s http://archive.mariadb.org/mariadb-${mariadb102_version}/source/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
           fi
           fi
         fi
         fi
         tryDlCount=0
         tryDlCount=0
@@ -294,22 +294,22 @@ checkDownload() {
           FILE_NAME=mariadb-${mariadb101_version}-${GLIBC_FLAG}-${SYS_BIT_b}.tar.gz
           FILE_NAME=mariadb-${mariadb101_version}-${GLIBC_FLAG}-${SYS_BIT_b}.tar.gz
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb101_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb101_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
-            MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
-            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb101_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}; MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
+            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb101_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}; MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
           else
           else
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb101_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb101_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
-            MARAIDB_TAR_MD5=$(curl -Lk http://archive.mariadb.org/mariadb-${mariadb101_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s http://archive.mariadb.org/mariadb-${mariadb101_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
           fi
           fi
         elif [ "${dbInstallMethods}" == '2' ]; then
         elif [ "${dbInstallMethods}" == '2' ]; then
           echo "Download MariaDB 10.1 source package..."
           echo "Download MariaDB 10.1 source package..."
           FILE_NAME=mariadb-${mariadb101_version}.tar.gz
           FILE_NAME=mariadb-${mariadb101_version}.tar.gz
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb101_version}/source
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb101_version}/source
-            MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
-            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb101_version}/source; MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
+            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb101_version}/source; MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
           else
           else
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb101_version}/source
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb101_version}/source
-            MARAIDB_TAR_MD5=$(curl -Lk http://archive.mariadb.org/mariadb-${mariadb101_version}/source/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s http://archive.mariadb.org/mariadb-${mariadb101_version}/source/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
           fi
           fi
         fi
         fi
         tryDlCount=0
         tryDlCount=0
@@ -333,22 +333,22 @@ checkDownload() {
           FILE_NAME=mariadb-${mariadb100_version}-${GLIBC_FLAG}-${SYS_BIT_b}.tar.gz
           FILE_NAME=mariadb-${mariadb100_version}-${GLIBC_FLAG}-${SYS_BIT_b}.tar.gz
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb100_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb100_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
-            MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
-            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb100_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}; MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
+            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb100_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}; MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
           else
           else
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb100_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb100_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
-            MARAIDB_TAR_MD5=$(curl -Lk http://archive.mariadb.org/mariadb-${mariadb100_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s http://archive.mariadb.org/mariadb-${mariadb100_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
           fi
           fi
         elif [ "${dbInstallMethods}" == '2' ]; then
         elif [ "${dbInstallMethods}" == '2' ]; then
           echo "Download MariaDB 10.0 source package..."
           echo "Download MariaDB 10.0 source package..."
           FILE_NAME=mariadb-${mariadb100_version}.tar.gz
           FILE_NAME=mariadb-${mariadb100_version}.tar.gz
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb100_version}/source
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb100_version}/source
-            MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
-            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb100_version}/source; MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
+            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb100_version}/source; MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
           else
           else
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb100_version}/source
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb100_version}/source
-            MARAIDB_TAR_MD5=$(curl -Lk http://archive.mariadb.org/mariadb-${mariadb100_version}/source/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s http://archive.mariadb.org/mariadb-${mariadb100_version}/source/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
           fi
           fi
         fi
         fi
         tryDlCount=0
         tryDlCount=0
@@ -372,22 +372,22 @@ checkDownload() {
           FILE_NAME=mariadb-${mariadb55_version}-${GLIBC_FLAG}-${SYS_BIT_b}.tar.gz
           FILE_NAME=mariadb-${mariadb55_version}-${GLIBC_FLAG}-${SYS_BIT_b}.tar.gz
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb55_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb55_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
-            MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
-            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb55_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}; MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
+            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb55_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}; MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
           else
           else
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb55_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb55_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}
-            MARAIDB_TAR_MD5=$(curl -Lk http://archive.mariadb.org/mariadb-${mariadb55_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s http://archive.mariadb.org/mariadb-${mariadb55_version}/bintar-${GLIBC_FLAG}-${SYS_BIT_a}/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
           fi
           fi
         elif [ "${dbInstallMethods}" == '2' ]; then
         elif [ "${dbInstallMethods}" == '2' ]; then
           echo "Download MariaDB 5.5 source package..."
           echo "Download MariaDB 5.5 source package..."
           FILE_NAME=mariadb-${mariadb55_version}.tar.gz
           FILE_NAME=mariadb-${mariadb55_version}.tar.gz
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb55_version}/source
             DOWN_ADDR_MARIADB=https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-${mariadb55_version}/source
-            MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}')
-            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb55_version}/source; MARAIDB_TAR_MD5=$(curl -Lk ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
+            [ -z "${MARAIDB_TAR_MD5}" ] && { DOWN_ADDR_MARIADB=https://mirrors.ustc.edu.cn/mariadb/mariadb-${mariadb55_version}/source; MARAIDB_TAR_MD5=$(curl -s ${DOWN_ADDR_MARIADB}/md5sums.txt | grep ${FILE_NAME} | awk '{print $1}'); }
           else
           else
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb55_version}/source
             DOWN_ADDR_MARIADB=https://downloads.mariadb.org/interstitial/mariadb-${mariadb55_version}/source
-            MARAIDB_TAR_MD5=$(curl -Lk http://archive.mariadb.org/mariadb-${mariadb55_version}/source/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
+            MARAIDB_TAR_MD5=$(curl -s http://archive.mariadb.org/mariadb-${mariadb55_version}/source/md5sums.txt |  grep ${FILE_NAME} | awk '{print $1}')
           fi
           fi
         fi
         fi
         tryDlCount=0
         tryDlCount=0
@@ -410,18 +410,18 @@ checkDownload() {
           echo "Download Percona 5.7 binary package..."
           echo "Download Percona 5.7 binary package..."
           FILE_NAME=Percona-Server-${percona57_version}-Linux.${SYS_BIT_b}.${sslLibVer}.tar.gz
           FILE_NAME=Percona-Server-${percona57_version}-Linux.${SYS_BIT_b}.${sslLibVer}.tar.gz
           DOWN_ADDR_PERCONA=https://www.percona.com/downloads/Percona-Server-5.7/Percona-Server-${percona57_version}/binary/tarball
           DOWN_ADDR_PERCONA=https://www.percona.com/downloads/Percona-Server-5.7/Percona-Server-${percona57_version}/binary/tarball
-          PERCONA_TAR_MD5=$(curl -Lk https://www.percona.com/downloads/Percona-Server-5.7/Percona-Server-${percona57_version}/binary/tarball/${FILE_NAME}.md5sum |  grep ${FILE_NAME} | awk '{print $1}')
+          PERCONA_TAR_MD5=$(curl -s https://www.percona.com/downloads/Percona-Server-5.7/Percona-Server-${percona57_version}/binary/tarball/${FILE_NAME}.md5sum |  grep ${FILE_NAME} | awk '{print $1}')
         elif [ "${dbInstallMethods}" == '2' ]; then
         elif [ "${dbInstallMethods}" == '2' ]; then
           echo "Download Percona 5.7 source package..."
           echo "Download Percona 5.7 source package..."
           FILE_NAME=percona-server-${percona57_version}.tar.gz
           FILE_NAME=percona-server-${percona57_version}.tar.gz
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
             DOWN_ADDR_PERCONA=${mirrorLink}
             DOWN_ADDR_PERCONA=${mirrorLink}
             DOWN_ADDR_PERCONA_BK=https://www.percona.com/downloads/Percona-Server-5.7/Percona-Server-${percona57_version}/source/tarball
             DOWN_ADDR_PERCONA_BK=https://www.percona.com/downloads/Percona-Server-5.7/Percona-Server-${percona57_version}/source/tarball
-            PERCONA_TAR_MD5=$(curl -Lk ${DOWN_ADDR_PERCONA}/${FILE_NAME}.md5sum | grep ${FILE_NAME} | awk '{print $1}')
+            PERCONA_TAR_MD5=$(curl -s ${DOWN_ADDR_PERCONA}/${FILE_NAME}.md5sum | grep ${FILE_NAME} | awk '{print $1}')
-            [ -z "${PERCONA_TAR_MD5}" ] && { DOWN_ADDR_PERCONA=${DOWN_ADDR_PERCONA_BK}; PERCONA_TAR_MD5=$(curl -Lk ${DOWN_ADDR_PERCONA_BK}/${FILE_NAME}.md5sum | grep ${FILE_NAME} | awk '{print $1}'); }
+            [ -z "${PERCONA_TAR_MD5}" ] && { DOWN_ADDR_PERCONA=${DOWN_ADDR_PERCONA_BK}; PERCONA_TAR_MD5=$(curl -s ${DOWN_ADDR_PERCONA_BK}/${FILE_NAME}.md5sum | grep ${FILE_NAME} | awk '{print $1}'); }
           else
           else
             DOWN_ADDR_PERCONA=https://www.percona.com/downloads/Percona-Server-5.7/Percona-Server-${percona57_version}/source/tarball
             DOWN_ADDR_PERCONA=https://www.percona.com/downloads/Percona-Server-5.7/Percona-Server-${percona57_version}/source/tarball
-            PERCONA_TAR_MD5=$(curl -Lk ${DOWN_ADDR_PERCONA}/${FILE_NAME}.md5sum |  grep ${FILE_NAME} | awk '{print $1}')
+            PERCONA_TAR_MD5=$(curl -s ${DOWN_ADDR_PERCONA}/${FILE_NAME}.md5sum |  grep ${FILE_NAME} | awk '{print $1}')
           fi
           fi
         fi
         fi
         tryDlCount=0
         tryDlCount=0
@@ -445,18 +445,18 @@ checkDownload() {
           perconaVerStr1=$(echo ${percona56_version} | sed "s@-@-rel@")
           perconaVerStr1=$(echo ${percona56_version} | sed "s@-@-rel@")
           FILE_NAME=Percona-Server-${perconaVerStr1}-Linux.${SYS_BIT_b}.${sslLibVer}.tar.gz
           FILE_NAME=Percona-Server-${perconaVerStr1}-Linux.${SYS_BIT_b}.${sslLibVer}.tar.gz
           DOWN_ADDR_PERCONA=https://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-${percona56_version}/binary/tarball
           DOWN_ADDR_PERCONA=https://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-${percona56_version}/binary/tarball
-          PERCONA_TAR_MD5=$(curl -Lk https://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-${percona56_version}/binary/tarball/${FILE_NAME}.md5sum |  grep ${FILE_NAME} | awk '{print $1}')
+          PERCONA_TAR_MD5=$(curl -s https://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-${percona56_version}/binary/tarball/${FILE_NAME}.md5sum |  grep ${FILE_NAME} | awk '{print $1}')
         elif [ "${dbInstallMethods}" == '2' ]; then
         elif [ "${dbInstallMethods}" == '2' ]; then
           echo "Download Percona 5.6 source package..."
           echo "Download Percona 5.6 source package..."
           FILE_NAME=percona-server-${percona56_version}.tar.gz
           FILE_NAME=percona-server-${percona56_version}.tar.gz
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
             DOWN_ADDR_PERCONA=${mirrorLink}
             DOWN_ADDR_PERCONA=${mirrorLink}
             DOWN_ADDR_PERCONA_BK=https://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-${percona56_version}/source/tarball
             DOWN_ADDR_PERCONA_BK=https://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-${percona56_version}/source/tarball
-            PERCONA_TAR_MD5=$(curl -Lk ${DOWN_ADDR_PERCONA}/${FILE_NAME}.md5sum | grep ${FILE_NAME} | awk '{print $1}')
+            PERCONA_TAR_MD5=$(curl -s ${DOWN_ADDR_PERCONA}/${FILE_NAME}.md5sum | grep ${FILE_NAME} | awk '{print $1}')
-            [ -z "${PERCONA_TAR_MD5}" ] && { DOWN_ADDR_PERCONA=${DOWN_ADDR_PERCONA_BK}; PERCONA_TAR_MD5=$(curl -Lk ${DOWN_ADDR_PERCONA_BK}/${FILE_NAME}.md5sum | grep ${FILE_NAME} | awk '{print $1}'); }
+            [ -z "${PERCONA_TAR_MD5}" ] && { DOWN_ADDR_PERCONA=${DOWN_ADDR_PERCONA_BK}; PERCONA_TAR_MD5=$(curl -s ${DOWN_ADDR_PERCONA_BK}/${FILE_NAME}.md5sum | grep ${FILE_NAME} | awk '{print $1}'); }
           else
           else
             DOWN_ADDR_PERCONA=https://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-${percona56_version}/source/tarball
             DOWN_ADDR_PERCONA=https://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-${percona56_version}/source/tarball
-            PERCONA_TAR_MD5=$(curl -Lk ${DOWN_ADDR_PERCONA}/${FILE_NAME}.md5sum |  grep ${FILE_NAME} | awk '{print $1}')
+            PERCONA_TAR_MD5=$(curl -s ${DOWN_ADDR_PERCONA}/${FILE_NAME}.md5sum |  grep ${FILE_NAME} | awk '{print $1}')
           fi
           fi
         fi
         fi
         tryDlCount=0
         tryDlCount=0
@@ -480,18 +480,18 @@ checkDownload() {
           perconaVerStr1=$(echo ${percona55_version} | sed "s@-@-rel@")
           perconaVerStr1=$(echo ${percona55_version} | sed "s@-@-rel@")
           FILE_NAME=Percona-Server-${perconaVerStr1}-Linux.${SYS_BIT_b}.${sslLibVer}.tar.gz
           FILE_NAME=Percona-Server-${perconaVerStr1}-Linux.${SYS_BIT_b}.${sslLibVer}.tar.gz
           DOWN_ADDR_PERCONA=https://www.percona.com/downloads/Percona-Server-5.5/Percona-Server-${percona55_version}/binary/tarball
           DOWN_ADDR_PERCONA=https://www.percona.com/downloads/Percona-Server-5.5/Percona-Server-${percona55_version}/binary/tarball
-          PERCONA_TAR_MD5=$(curl -Lk https://www.percona.com/downloads/Percona-Server-5.5/Percona-Server-${percona55_version}/binary/tarball/${FILE_NAME}.md5sum |  grep ${FILE_NAME} | awk '{print $1}')
+          PERCONA_TAR_MD5=$(curl -s https://www.percona.com/downloads/Percona-Server-5.5/Percona-Server-${percona55_version}/binary/tarball/${FILE_NAME}.md5sum |  grep ${FILE_NAME} | awk '{print $1}')
         elif [ "${dbInstallMethods}" == '2' ]; then
         elif [ "${dbInstallMethods}" == '2' ]; then
           echo "Download Percona 5.5 source package..."
           echo "Download Percona 5.5 source package..."
           FILE_NAME=percona-server-${percona55_version}.tar.gz
           FILE_NAME=percona-server-${percona55_version}.tar.gz
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
           if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
             DOWN_ADDR_PERCONA=${mirrorLink}
             DOWN_ADDR_PERCONA=${mirrorLink}
             DOWN_ADDR_PERCONA_BK=https://www.percona.com/downloads/Percona-Server-5.5/Percona-Server-${percona55_version}/source/tarball
             DOWN_ADDR_PERCONA_BK=https://www.percona.com/downloads/Percona-Server-5.5/Percona-Server-${percona55_version}/source/tarball
-            PERCONA_TAR_MD5=$(curl -Lk ${DOWN_ADDR_PERCONA}/${FILE_NAME}.md5sum | grep ${FILE_NAME} | awk '{print $1}')
+            PERCONA_TAR_MD5=$(curl -s ${DOWN_ADDR_PERCONA}/${FILE_NAME}.md5sum | grep ${FILE_NAME} | awk '{print $1}')
-            [ -z "${PERCONA_TAR_MD5}" ] && { DOWN_ADDR_PERCONA=${DOWN_ADDR_PERCONA_BK}; PERCONA_TAR_MD5=$(curl -Lk ${DOWN_ADDR_PERCONA_BK}/${FILE_NAME}.md5sum | grep ${FILE_NAME} | awk '{print $1}'); }
+            [ -z "${PERCONA_TAR_MD5}" ] && { DOWN_ADDR_PERCONA=${DOWN_ADDR_PERCONA_BK}; PERCONA_TAR_MD5=$(curl -s ${DOWN_ADDR_PERCONA_BK}/${FILE_NAME}.md5sum | grep ${FILE_NAME} | awk '{print $1}'); }
           else
           else
             DOWN_ADDR_PERCONA=https://www.percona.com/downloads/Percona-Server-5.5/Percona-Server-${percona55_version}/source/tarball
             DOWN_ADDR_PERCONA=https://www.percona.com/downloads/Percona-Server-5.5/Percona-Server-${percona55_version}/source/tarball
-            PERCONA_TAR_MD5=$(curl -Lk ${DOWN_ADDR_PERCONA}/${FILE_NAME}.md5sum | grep ${FILE_NAME} | awk '{print $1}')
+            PERCONA_TAR_MD5=$(curl -s ${DOWN_ADDR_PERCONA}/${FILE_NAME}.md5sum | grep ${FILE_NAME} | awk '{print $1}')
           fi
           fi
         fi
         fi
         tryDlCount=0
         tryDlCount=0
@@ -528,11 +528,11 @@ checkDownload() {
         FILE_NAME=postgresql-${pgsql_version}.tar.gz
         FILE_NAME=postgresql-${pgsql_version}.tar.gz
         if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
         if [ "${IPADDR_COUNTRY}"x == "CN"x ]; then
           DOWN_ADDR_PGSQL=https://mirrors.tuna.tsinghua.edu.cn/postgresql/source/v${pgsql_version}
           DOWN_ADDR_PGSQL=https://mirrors.tuna.tsinghua.edu.cn/postgresql/source/v${pgsql_version}
-          PGSQL_TAR_MD5=$(curl -Lk ${DOWN_ADDR_PGSQL}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}')
+          PGSQL_TAR_MD5=$(curl -s ${DOWN_ADDR_PGSQL}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}')
-          [ -z "${PGSQL_TAR_MD5}" ] && { DOWN_ADDR_PGSQL=https://mirrors.ustc.edu.cn/postgresql/source/vv${pgsql_version}; PGSQL_TAR_MD5=$(curl -Lk ${DOWN_ADDR_PGSQL}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}'); }
+          [ -z "${PGSQL_TAR_MD5}" ] && { DOWN_ADDR_PGSQL=https://mirrors.ustc.edu.cn/postgresql/source/vv${pgsql_version}; PGSQL_TAR_MD5=$(curl -s ${DOWN_ADDR_PGSQL}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}'); }
         else
         else
           DOWN_ADDR_PGSQL=https://ftp.postgresql.org/pub/source/v${pgsql_version}
           DOWN_ADDR_PGSQL=https://ftp.postgresql.org/pub/source/v${pgsql_version}
-          PGSQL_TAR_MD5=$(curl -Lk ${DOWN_ADDR_PGSQL}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}')
+          PGSQL_TAR_MD5=$(curl -s ${DOWN_ADDR_PGSQL}/${FILE_NAME}.md5 | grep ${FILE_NAME} | awk '{print $1}')
         fi
         fi
 
 
         tryDlCount=0
         tryDlCount=0

+ 34 - 0
include/upgrade_oneinstack.sh

@@ -0,0 +1,34 @@
+#!/bin/bash
+# Author:  yeho <lj2007331 AT gmail.com>
+# BLOG:  https://blog.linuxeye.com
+#
+# Notes: OneinStack for CentOS/RadHat 5+ Debian 6+ and Ubuntu 12+
+#
+# Project home page:
+#       https://oneinstack.com
+#       https://github.com/lj2007331/oneinstack
+
+Upgrade_OneinStack() {
+  pushd ${oneinstack_dir} > /dev/null
+  Latest_OneinStack_MD5=$(curl -s http://mirrors.linuxeye.com/md5sum.txt | grep oneinstack.tar.gz | awk '{print $1}')
+  if [ "$oneinstack_md5" != "$Latest_OneinStack_MD5" ]; then
+    /bin/mv options.conf /tmp
+    [ -e /tmp/oneinstack.tar.gz ] && rm -rf /tmp/oneinstack.tar.gz
+    wget -c http://mirrors.linuxeye.com/oneinstack.tar.gz -O /tmp/oneinstack.tar.gz > /dev/null 2>&1 
+    tar xzf /tmp/oneinstack.tar.gz -C ../
+    for L in `grep -vE '^#|^$' /tmp/options.conf`
+    do
+      Key=`echo $L | awk -F= '{print $1}'`
+      Value=`echo $L | awk -F= '{print $2}'`
+      sed -i "s@^${Key}=.*@${Key}=${Value}@" ./options.conf
+    done
+    rm -rf /tmp/{oneinstack.tar.gz,options.conf}
+    sed -i "s@^oneinstack_md5=.*@oneinstack_md5=${Latest_OneinStack_MD5}@" ./options.conf
+    echo
+    echo "${CSUCCESS}Congratulations! OneinStack successful! ${CEND}"
+    echo
+  else
+    echo "${CWARNING}Your OneinStack already has the latest version or does not need to be upgraded! ${CEND}"
+  fi
+  popd > /dev/null
+}

+ 8 - 8
install.sh

@@ -190,7 +190,7 @@ while :; do echo
         echo -e "\t${CMSG}12${CEND}. Install PostgreSQL"
         echo -e "\t${CMSG}12${CEND}. Install PostgreSQL"
         read -p "Please input a number:(Default 2 press Enter) " DB_version
         read -p "Please input a number:(Default 2 press Enter) " DB_version
         [ -z "$DB_version" ] && DB_version=2
         [ -z "$DB_version" ] && DB_version=2
-        if [ ${DB_version} -ge 1 >/dev/null 2>&1 -a ${DB_version} -le 12 >/dev/null 2>&1 ]; then
+        if [[ "${DB_version}" =~ ^[1-9]$|^1[0-2]$ ]]; then 
           while :; do
           while :; do
             if [ "$DB_version" == '12' ]; then
             if [ "$DB_version" == '12' ]; then
               read -p "Please input the postgres password of database: " dbrootpwd
               read -p "Please input the postgres password of database: " dbrootpwd
@@ -207,7 +207,7 @@ while :; do echo
 
 
           done
           done
           # choose install methods
           # choose install methods
-          if [ ${DB_version} -ge 1 >/dev/null 2>&1 -a ${DB_version} -le 10 >/dev/null 2>&1 ]; then
+          if [[ "${DB_version}" =~ ^[1-9]$|^10$ ]]; then 
             while :; do echo
             while :; do echo
               echo "Please choose installation of the database:"
               echo "Please choose installation of the database:"
               echo -e "\t${CMSG}1${CEND}. Install database from binary package."
               echo -e "\t${CMSG}1${CEND}. Install database from binary package."
@@ -798,21 +798,21 @@ echo "Total OneinStack Install Time: ${CQUESTION}${installTime}${CEND} minutes"
 [ "${DB_version}" == '12' ] && echo "$(printf "%-32s" "PostgreSQL user:")${CMSG}postgres${CEND}"
 [ "${DB_version}" == '12' ] && echo "$(printf "%-32s" "PostgreSQL user:")${CMSG}postgres${CEND}"
 [ "${DB_version}" == '12' ] && echo "$(printf "%-32s" "postgres password:")${CMSG}${dbpostgrespwd}${CEND}"
 [ "${DB_version}" == '12' ] && echo "$(printf "%-32s" "postgres password:")${CMSG}${dbpostgrespwd}${CEND}"
 [ "${PHP_yn}" == 'y' ] && echo -e "\n$(printf "%-32s" "PHP install dir:")${CMSG}${php_install_dir}${CEND}"
 [ "${PHP_yn}" == 'y' ] && echo -e "\n$(printf "%-32s" "PHP install dir:")${CMSG}${php_install_dir}${CEND}"
-[ "${PHP_cache}" == '1' ] && echo "$(printf "%-32s" "Opcache Control Panel url:")${CMSG}http://${IPADDR}/ocp.php${CEND}"
+[ "${PHP_cache}" == '1' ] && echo "$(printf "%-32s" "Opcache Control Panel URL:")${CMSG}http://${IPADDR}/ocp.php${CEND}"
-[ "${PHP_cache}" == '2' ] && echo "$(printf "%-32s" "xcache Control Panel url:")${CMSG}http://${IPADDR}/xcache${CEND}"
+[ "${PHP_cache}" == '2' ] && echo "$(printf "%-32s" "xcache Control Panel URL:")${CMSG}http://${IPADDR}/xcache${CEND}"
 [ "${PHP_cache}" == '2' ] && echo "$(printf "%-32s" "xcache user:")${CMSG}admin${CEND}"
 [ "${PHP_cache}" == '2' ] && echo "$(printf "%-32s" "xcache user:")${CMSG}admin${CEND}"
 [ "${PHP_cache}" == '2' ] && echo "$(printf "%-32s" "xcache password:")${CMSG}${xcache_admin_pass}${CEND}"
 [ "${PHP_cache}" == '2' ] && echo "$(printf "%-32s" "xcache password:")${CMSG}${xcache_admin_pass}${CEND}"
-[ "${PHP_cache}" == '3' ] && echo "$(printf "%-32s" "APC Control Panel url:")${CMSG}http://${IPADDR}/apc.php${CEND}"
+[ "${PHP_cache}" == '3' ] && echo "$(printf "%-32s" "APC Control Panel URL:")${CMSG}http://${IPADDR}/apc.php${CEND}"
-[ "${PHP_cache}" == '4' ] && echo "$(printf "%-32s" "eAccelerator Control Panel url:")${CMSG}http://${IPADDR}/control.php${CEND}"
+[ "${PHP_cache}" == '4' ] && echo "$(printf "%-32s" "eAccelerator Control Panel URL:")${CMSG}http://${IPADDR}/control.php${CEND}"
 [ "${PHP_cache}" == '4' ] && echo "$(printf "%-32s" "eAccelerator user:")${CMSG}admin${CEND}"
 [ "${PHP_cache}" == '4' ] && echo "$(printf "%-32s" "eAccelerator user:")${CMSG}admin${CEND}"
 [ "${PHP_cache}" == '4' ] && echo "$(printf "%-32s" "eAccelerator password:")${CMSG}eAccelerator${CEND}"
 [ "${PHP_cache}" == '4' ] && echo "$(printf "%-32s" "eAccelerator password:")${CMSG}eAccelerator${CEND}"
 [ "${FTP_yn}" == 'y' ] && echo -e "\n$(printf "%-32s" "Pure-FTPd install dir:")${CMSG}${pureftpd_install_dir}${CEND}"
 [ "${FTP_yn}" == 'y' ] && echo -e "\n$(printf "%-32s" "Pure-FTPd install dir:")${CMSG}${pureftpd_install_dir}${CEND}"
 [ "${FTP_yn}" == 'y' ] && echo "$(printf "%-32s" "Create FTP virtual script:")${CMSG}./pureftpd_vhost.sh${CEND}"
 [ "${FTP_yn}" == 'y' ] && echo "$(printf "%-32s" "Create FTP virtual script:")${CMSG}./pureftpd_vhost.sh${CEND}"
 [ "${phpMyAdmin_yn}" == 'y' ] && echo -e "\n$(printf "%-32s" "phpMyAdmin dir:")${CMSG}${wwwroot_dir}/default/phpMyAdmin${CEND}"
 [ "${phpMyAdmin_yn}" == 'y' ] && echo -e "\n$(printf "%-32s" "phpMyAdmin dir:")${CMSG}${wwwroot_dir}/default/phpMyAdmin${CEND}"
-[ "${phpMyAdmin_yn}" == 'y' ] && echo "$(printf "%-32s" "phpMyAdmin Control Panel url:")${CMSG}http://${IPADDR}/phpMyAdmin${CEND}"
+[ "${phpMyAdmin_yn}" == 'y' ] && echo "$(printf "%-32s" "phpMyAdmin Control Panel URL:")${CMSG}http://${IPADDR}/phpMyAdmin${CEND}"
 [ "${redis_yn}" == 'y' ] && echo -e "\n$(printf "%-32s" "redis install dir:")${CMSG}${redis_install_dir}${CEND}"
 [ "${redis_yn}" == 'y' ] && echo -e "\n$(printf "%-32s" "redis install dir:")${CMSG}${redis_install_dir}${CEND}"
 [ "${memcached_yn}" == 'y' ] && echo -e "\n$(printf "%-32s" "memcached install dir:")${CMSG}${memcached_install_dir}${CEND}"
 [ "${memcached_yn}" == 'y' ] && echo -e "\n$(printf "%-32s" "memcached install dir:")${CMSG}${memcached_install_dir}${CEND}"
-[ "${Web_yn}" == 'y' ] && echo -e "\n$(printf "%-32s" "index url:")${CMSG}http://${IPADDR}/${CEND}"
+[ "${Web_yn}" == 'y' ] && echo -e "\n$(printf "%-32s" "Index URL:")${CMSG}http://${IPADDR}/${CEND}"
 while :; do echo
 while :; do echo
   echo "${CMSG}Please restart the server and see if the services start up fine.${CEND}"
   echo "${CMSG}Please restart the server and see if the services start up fine.${CEND}"
   read -p "Do you want to restart OS ? [y/n]: " restart_yn
   read -p "Do you want to restart OS ? [y/n]: " restart_yn

+ 3 - 0
options.conf

@@ -75,3 +75,6 @@ db_name=
 
 
 # The backup of the website, You can't change
 # The backup of the website, You can't change
 website_name=
 website_name=
+
+# oneinstack.tar.gz md5, You can't change
+oneinstack_md5=

+ 1 - 1
pureftpd_vhost.sh

@@ -84,7 +84,7 @@ What Are You Doing?
 "
 "
   read -p "Please input the correct option: " Number
   read -p "Please input the correct option: " Number
   if [[ ! $Number =~ ^[1-6,q]$ ]]; then
   if [[ ! $Number =~ ^[1-6,q]$ ]]; then
-    echo "${CFAILURE}input error! Please only input 1 ~ 6 and q${CEND}"
+    echo "${CFAILURE}input error! Please only input 1~6 and q${CEND}"
   else
   else
     case "$Number" in
     case "$Number" in
     1)
     1)

+ 12 - 3
upgrade.sh

@@ -33,6 +33,7 @@ sed -i "s@^oneinstack_dir.*@oneinstack_dir=`pwd`@" ./options.conf
 . ./include/upgrade_redis.sh
 . ./include/upgrade_redis.sh
 . ./include/upgrade_memcached.sh
 . ./include/upgrade_memcached.sh
 . ./include/upgrade_phpmyadmin.sh
 . ./include/upgrade_phpmyadmin.sh
+. ./include/upgrade_oneinstack.sh
 
 
 # Check if user is root
 # Check if user is root
 [ $(id -u) != "0" ] && { echo "${CFAILURE}Error: You must be root to run this script${CEND}"; exit 1; }
 [ $(id -u) != "0" ] && { echo "${CFAILURE}Error: You must be root to run this script${CEND}"; exit 1; }
@@ -43,13 +44,14 @@ IPADDR_COUNTRY=`./include/get_ipaddr_state.py $PUBLIC_IPADDR | awk '{print $1}'`
 
 
 Usage(){
 Usage(){
   printf "
   printf "
-Usage: $0 [ ${CMSG}web${CEND} | ${CMSG}db${CEND} | ${CMSG}php${CEND} | ${CMSG}redis${CEND} | ${CMSG}memcached${CEND} | ${CMSG}phpmyadmin${CEND} ]
+Usage: $0 [ ${CMSG}web${CEND} | ${CMSG}db${CEND} | ${CMSG}php${CEND} | ${CMSG}redis${CEND} | ${CMSG}memcached${CEND} | ${CMSG}phpmyadmin${CEND} | ${CMSG}oneinstack${CEND} ]
 ${CMSG}web${CEND}            --->Upgrade Nginx/Tengine/OpenResty/Apache
 ${CMSG}web${CEND}            --->Upgrade Nginx/Tengine/OpenResty/Apache
 ${CMSG}db${CEND}             --->Upgrade MySQL/MariaDB/Percona
 ${CMSG}db${CEND}             --->Upgrade MySQL/MariaDB/Percona
 ${CMSG}php${CEND}            --->Upgrade PHP
 ${CMSG}php${CEND}            --->Upgrade PHP
 ${CMSG}redis${CEND}          --->Upgrade Redis
 ${CMSG}redis${CEND}          --->Upgrade Redis
 ${CMSG}memcached${CEND}      --->Upgrade Memcached 
 ${CMSG}memcached${CEND}      --->Upgrade Memcached 
 ${CMSG}phpmyadmin${CEND}     --->Upgrade phpMyAdmin
 ${CMSG}phpmyadmin${CEND}     --->Upgrade phpMyAdmin
+${CMSG}oneinstack${CEND}     --->Upgrade OneinStack 
 
 
 "
 "
 }
 }
@@ -64,12 +66,13 @@ What Are You Doing?
 \t${CMSG}4${CEND}. Upgrade Redis
 \t${CMSG}4${CEND}. Upgrade Redis
 \t${CMSG}5${CEND}. Upgrade Memcached 
 \t${CMSG}5${CEND}. Upgrade Memcached 
 \t${CMSG}6${CEND}. Upgrade phpMyAdmin
 \t${CMSG}6${CEND}. Upgrade phpMyAdmin
+\t${CMSG}7${CEND}. Upgrade OneinStack
 \t${CMSG}q${CEND}. Exit
 \t${CMSG}q${CEND}. Exit
 "
 "
     echo
     echo
     read -p "Please input the correct option: " Number
     read -p "Please input the correct option: " Number
-    if [[ ! $Number =~ ^[1-6,q]$ ]]; then
+    if [[ ! $Number =~ ^[1-7,q]$ ]]; then
-      echo "${CWARNING}input error! Please only input 1~6 and q${CEND}"
+      echo "${CWARNING}input error! Please only input 1~7 and q${CEND}"
     else
     else
       case "$Number" in
       case "$Number" in
       1)
       1)
@@ -98,6 +101,9 @@ What Are You Doing?
       6)
       6)
         Upgrade_phpMyAdmin
         Upgrade_phpMyAdmin
         ;;
         ;;
+      7)
+        Upgrade_OneinStack 
+        ;;
       q)
       q)
         exit
         exit
         ;;
         ;;
@@ -136,6 +142,9 @@ elif [ $# == 1 ]; then
   phpmyadmin)
   phpmyadmin)
     Upgrade_phpMyAdmin
     Upgrade_phpMyAdmin
     ;;
     ;;
+  oneinstack)
+    Upgrade_OneinStack 
+    ;;
   *)
   *)
     Usage
     Usage
     ;;
     ;;

+ 2 - 1
versions.txt

@@ -27,7 +27,7 @@ mariadb100_version=10.0.33
 mariadb55_version=5.5.58
 mariadb55_version=5.5.58
 
 
 percona57_version=5.7.19-17
 percona57_version=5.7.19-17
-percona56_version=5.6.37-82.2
+percona56_version=5.6.38-83.0
 percona55_version=5.5.58-38.10
 percona55_version=5.5.58-38.10
 
 
 alisql56_version=5.6.32-7
 alisql56_version=5.6.32-7
@@ -64,6 +64,7 @@ apcu_version=4.0.11
 apcu_for_php7_version=5.1.8
 apcu_for_php7_version=5.1.8
 eaccelerator_version=0.9.6.1
 eaccelerator_version=0.9.6.1
 swoole_version=1.9.23
 swoole_version=1.9.23
+xdebug_version=2.5.5
 
 
 # Ftp
 # Ftp
 pureftpd_version=1.0.47
 pureftpd_version=1.0.47

+ 187 - 187
vhost.sh

@@ -28,9 +28,10 @@ printf "
 
 
 Usage() {
 Usage() {
   printf "
   printf "
-Usage: $0 [ ${CMSG}add${CEND} | ${CMSG}del${CEND} ]
+Usage: $0 [ ${CMSG}add${CEND} | ${CMSG}del${CEND} | ${CMSG}list${CEND} ]
 ${CMSG}add${CEND}    --->Add Virtualhost
 ${CMSG}add${CEND}    --->Add Virtualhost
 ${CMSG}del${CEND}    --->Delete Virtualhost
 ${CMSG}del${CEND}    --->Delete Virtualhost
+${CMSG}list${CEND}   --->List Virtualhost
 
 
 "
 "
 }
 }
@@ -43,15 +44,15 @@ Choose_env() {
       echo -e "\t${CMSG}1${CEND}. Use php"
       echo -e "\t${CMSG}1${CEND}. Use php"
       echo -e "\t${CMSG}2${CEND}. Use java"
       echo -e "\t${CMSG}2${CEND}. Use java"
       echo -e "\t${CMSG}3${CEND}. Use hhvm"
       echo -e "\t${CMSG}3${CEND}. Use hhvm"
-      read -p "Please input a number:(Default 1 press Enter) " Choose_number
+      read -p "Please input a number:(Default 1 press Enter) " ENV_FLAG
-      [ -z "${Choose_number}" ] && Choose_number=1
+      [ -z "${ENV_FLAG}" ] && ENV_FLAG=1
-      if [[ ! ${Choose_number} =~ ^[1-3]$ ]]; then
+      if [[ ! ${ENV_FLAG} =~ ^[1-3]$ ]]; then
         echo "${CWARNING}input error! Please only input number 1~3${CEND}"
         echo "${CWARNING}input error! Please only input number 1~3${CEND}"
       else
       else
         break
         break
       fi
       fi
     done
     done
-    case "${Choose_number}" in
+    case "${ENV_FLAG}" in
       1)
       1)
         NGX_FLAG=php
         NGX_FLAG=php
         ;;
         ;;
@@ -68,16 +69,16 @@ Choose_env() {
       echo "Please choose to use environment:"
       echo "Please choose to use environment:"
       echo -e "\t${CMSG}1${CEND}. Use php"
       echo -e "\t${CMSG}1${CEND}. Use php"
       echo -e "\t${CMSG}2${CEND}. Use java"
       echo -e "\t${CMSG}2${CEND}. Use java"
-      read -p "Please input a number:(Default 1 press Enter) " Choose_number
+      read -p "Please input a number:(Default 1 press Enter) " ENV_FLAG
-      [ -z "${Choose_number}" ] && Choose_number=1
+      [ -z "${ENV_FLAG}" ] && ENV_FLAG=1
-      if [[ ! ${Choose_number} =~ ^[1-2]$ ]]; then
+      if [[ ! ${ENV_FLAG} =~ ^[1-2]$ ]]; then
         echo "${CWARNING}input error! Please only input number 1~2${CEND}"
         echo "${CWARNING}input error! Please only input number 1~2${CEND}"
       else
       else
         break
         break
       fi
       fi
     done
     done
-    [ "${Choose_number}" == '1' ] && NGX_FLAG=php
+    [ "${ENV_FLAG}" == '1' ] && NGX_FLAG=php
-    [ "${Choose_number}" == '2' ] && NGX_FLAG=java
+    [ "${ENV_FLAG}" == '2' ] && NGX_FLAG=java
   elif [ -e "${php_install_dir}/bin/phpize" -a ! -e "${tomcat_install_dir}/conf/server.xml" -a ! -e "/usr/bin/hhvm" ]; then
   elif [ -e "${php_install_dir}/bin/phpize" -a ! -e "${tomcat_install_dir}/conf/server.xml" -a ! -e "/usr/bin/hhvm" ]; then
     Number=100
     Number=100
     NGX_FLAG=php
     NGX_FLAG=php
@@ -87,32 +88,32 @@ Choose_env() {
       echo "Please choose to use environment:"
       echo "Please choose to use environment:"
       echo -e "\t${CMSG}1${CEND}. Use php"
       echo -e "\t${CMSG}1${CEND}. Use php"
       echo -e "\t${CMSG}2${CEND}. Use hhvm"
       echo -e "\t${CMSG}2${CEND}. Use hhvm"
-      read -p "Please input a number:(Default 1 press Enter) " Choose_number
+      read -p "Please input a number:(Default 1 press Enter) " ENV_FLAG
-      [ -z "${Choose_number}" ] && Choose_number=1
+      [ -z "${ENV_FLAG}" ] && ENV_FLAG=1
-      if [[ ! ${Choose_number} =~ ^[1-2]$ ]]; then
+      if [[ ! ${ENV_FLAG} =~ ^[1-2]$ ]]; then
         echo "${CWARNING}input error! Please only input number 1~2${CEND}"
         echo "${CWARNING}input error! Please only input number 1~2${CEND}"
       else
       else
         break
         break
       fi
       fi
     done
     done
-    [ "${Choose_number}" == '1' ] && NGX_FLAG=php
+    [ "${ENV_FLAG}" == '1' ] && NGX_FLAG=php
-    [ "${Choose_number}" == '2' ] && NGX_FLAG=hhvm
+    [ "${ENV_FLAG}" == '2' ] && NGX_FLAG=hhvm
   elif [ ! -e "${php_install_dir}/bin/phpize" -a -e "${tomcat_install_dir}/conf/server.xml" -a -e "/usr/bin/hhvm" ]; then
   elif [ ! -e "${php_install_dir}/bin/phpize" -a -e "${tomcat_install_dir}/conf/server.xml" -a -e "/usr/bin/hhvm" ]; then
     Number=011
     Number=011
     while :; do echo
     while :; do echo
       echo "Please choose to use environment:"
       echo "Please choose to use environment:"
       echo -e "\t${CMSG}1${CEND}. Use java"
       echo -e "\t${CMSG}1${CEND}. Use java"
       echo -e "\t${CMSG}2${CEND}. Use hhvm"
       echo -e "\t${CMSG}2${CEND}. Use hhvm"
-      read -p "Please input a number:(Default 1 press Enter) " Choose_number
+      read -p "Please input a number:(Default 1 press Enter) " ENV_FLAG
-      [ -z "${Choose_number}" ] && Choose_number=1
+      [ -z "${ENV_FLAG}" ] && ENV_FLAG=1
-      if [[ ! ${Choose_number} =~ ^[1-2]$ ]]; then
+      if [[ ! ${ENV_FLAG} =~ ^[1-2]$ ]]; then
         echo "${CWARNING}input error! Please only input number 1~2${CEND}"
         echo "${CWARNING}input error! Please only input number 1~2${CEND}"
       else
       else
         break
         break
       fi
       fi
     done
     done
-    [ "${Choose_number}" == '1' ] && NGX_FLAG=java
+    [ "${ENV_FLAG}" == '1' ] && NGX_FLAG=java
-    [ "${Choose_number}" == '2' ] && NGX_FLAG=hhvm
+    [ "${ENV_FLAG}" == '2' ] && NGX_FLAG=hhvm
   elif [ ! -e "${php_install_dir}/bin/phpize" -a -e "${tomcat_install_dir}/conf/server.xml" -a ! -e "/usr/bin/hhvm" ]; then
   elif [ ! -e "${php_install_dir}/bin/phpize" -a -e "${tomcat_install_dir}/conf/server.xml" -a ! -e "/usr/bin/hhvm" ]; then
     Number=010
     Number=010
     NGX_FLAG=java
     NGX_FLAG=java
@@ -137,8 +138,9 @@ Choose_env() {
   esac
   esac
 }
 }
 
 
-Create_self_SSL() {
+Create_SSL() {
-  printf "
+  if [ "${Domian_Mode}" == '2' ]; then 
+    printf "
 You are about to be asked to enter information that will be incorporated
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 What you are about to enter is what is called a Distinguished Name or a DN.
@@ -146,71 +148,43 @@ There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 If you enter '.', the field will be left blank.
 "
 "
+    echo
+    read -p "Country Name (2 letter code) [CN]: " SELFSIGNEDSSL_C
+    [ -z "${SELFSIGNEDSSL_C}" ] && SELFSIGNEDSSL_C="CN"
+    echo
+    read -p "State or Province Name (full name) [Shanghai]: " SELFSIGNEDSSL_ST
+    [ -z "${SELFSIGNEDSSL_ST}" ] && SELFSIGNEDSSL_ST="Shanghai"
+    echo
+    read -p "Locality Name (eg, city) [Shanghai]: " SELFSIGNEDSSL_L
+    [ -z "${SELFSIGNEDSSL_L}" ] && SELFSIGNEDSSL_L="Shanghai"
+    echo
+    read -p "Organization Name (eg, company) [Example Inc.]: " SELFSIGNEDSSL_O
+    [ -z "${SELFSIGNEDSSL_O}" ] && SELFSIGNEDSSL_O="Example Inc."
+    echo
+    read -p "Organizational Unit Name (eg, section) [IT Dept.]: " SELFSIGNEDSSL_OU
+    [ -z "${SELFSIGNEDSSL_O}U" ] && SELFSIGNEDSSL_OU="IT Dept."
 
 
-  echo
+    openssl req -new -newkey rsa:2048 -sha256 -nodes -out ${PATH_SSL}/${domain}.csr -keyout ${PATH_SSL}/${domain}.key -subj "/C=${SELFSIGNEDSSL_C}/ST=${SELFSIGNEDSSL_ST}/L=${SELFSIGNEDSSL_L}/O=${SELFSIGNEDSSL_O}/OU=${SELFSIGNEDSSL_OU}/CN=${domain}" > /dev/null 2>&1
-  read -p "Country Name (2 letter code) [CN]: " SELFSIGNEDSSL_C
+    openssl x509 -req -days 36500 -sha256 -in ${PATH_SSL}/${domain}.csr -signkey ${PATH_SSL}/${domain}.key -out ${PATH_SSL}/${domain}.crt > /dev/null 2>&1   
-  [ -z "${SELFSIGNEDSSL_C}" ] && SELFSIGNEDSSL_C="CN"
+  elif [ "${Domian_Mode}" == '3' ]; then
-
-  echo
-  read -p "State or Province Name (full name) [Shanghai]: " SELFSIGNEDSSL_ST
-  [ -z "${SELFSIGNEDSSL_ST}" ] && SELFSIGNEDSSL_ST="Shanghai"
-
-  echo
-  read -p "Locality Name (eg, city) [Shanghai]: " SELFSIGNEDSSL_L
-  [ -z "${SELFSIGNEDSSL_L}" ] && SELFSIGNEDSSL_L="Shanghai"
-
-  echo
-  read -p "Organization Name (eg, company) [Example Inc.]: " SELFSIGNEDSSL_O
-  [ -z "${SELFSIGNEDSSL_O}" ] && SELFSIGNEDSSL_O="Example Inc."
-
-  echo
-  read -p "Organizational Unit Name (eg, section) [IT Dept.]: " SELFSIGNEDSSL_OU
-  [ -z "${SELFSIGNEDSSL_O}U" ] && SELFSIGNEDSSL_OU="IT Dept."
-
-  openssl req -new -newkey rsa:2048 -sha256 -nodes -out ${PATH_SSL}/${domain}.csr -keyout ${PATH_SSL}/${domain}.key -subj "/C=${SELFSIGNEDSSL_C}/ST=${SELFSIGNEDSSL_ST}/L=${SELFSIGNEDSSL_L}/O=${SELFSIGNEDSSL_O}/OU=${SELFSIGNEDSSL_OU}/CN=${domain}" > /dev/null 2>&1
-  openssl x509 -req -days 36500 -sha256 -in ${PATH_SSL}/${domain}.csr -signkey ${PATH_SSL}/${domain}.key -out ${PATH_SSL}/${domain}.crt > /dev/null 2>&1
-}
-
-Create_SSL() {
-  if [ -e "${python_install_dir}/bin/certbot" ]; then
     while :; do echo
     while :; do echo
-      read -p "Do you want to use a Let's Encrypt certificate? [y/n]: " letsencrypt_yn
+      read -p "Please enter Administrator Email(example: admin@example.com): " Admin_Email
-      if [[ ! ${letsencrypt_yn} =~ ^[y,n]$ ]]; then
+      if [ -z "$(echo ${Admin_Email} | grep '.*@.*\..*')" ]; then
-        echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
+        echo "${CWARNING}Your email address is invalid! ${CEND}"
       else
       else
         break
         break
       fi
       fi
     done
     done
-    if [ "${letsencrypt_yn}" == 'y' ]; then
-      PUBLIC_IPADDR=$(./include/get_public_ipaddr.py)
-      for D in ${domain} ${moredomainame}
-      do
-        Domain_IPADDR=$(ping ${D} -c1 | sed '1{s/[^(]*(//;s/).*//;q}')
-        [ "${PUBLIC_IPADDR%.*}" != "${Domain_IPADDR%.*}" ] && { echo; echo "${CFAILURE}DNS problem: NXDOMAIN looking up A for ${D}${CEND}"; echo; exit 1; }
-      done
 
 
-      #add Email
+    [ "${moredomainame_flag}" == 'y' ] && moredomainame_D="$(for D in ${moredomainame}; do echo -d ${D}; done)"
-      while :
+    if [ "${nginx_ssl_flag}" == 'y' ]; then 
-      do
+      [ ! -d ${web_install_dir}/conf/vhost ] && mkdir ${web_install_dir}/conf/vhost
-        echo
+      echo "server {  server_name ${domain}${moredomainame};  root ${vhostdir};  access_log off; }" > ${web_install_dir}/conf/vhost/${domain}.conf
-        read -p "Please enter Administrator Email(example: admin@example.com): " Admin_Email
+      ${web_install_dir}/sbin/nginx -s reload
-        if [ -z "$(echo ${Admin_Email} | grep '.*@.*\..*')" ]; then
+    fi
-          echo "${CWARNING}input error! ${CEND}"
+    if [ "${apache_ssl_flag}" == 'y' ]; then
-        else
+      [ ! -d ${apache_install_dir}/conf/vhost ] && mkdir ${apache_install_dir}/conf/vhost
-          break
+      cat > ${apache_install_dir}/conf/vhost/${domain}.conf << EOF
-        fi
-      done
-
-      [ "${moredomainame_yn}" == 'y' ] && moredomainame_D="$(for D in ${moredomainame}; do echo -d ${D}; done)"
-      if [ "${nginx_ssl_yn}" == 'y' ]; then 
-        [ ! -d ${web_install_dir}/conf/vhost ] && mkdir ${web_install_dir}/conf/vhost
-        echo "server {  server_name ${domain}${moredomainame};  root ${vhostdir};  access_log off; }" > ${web_install_dir}/conf/vhost/${domain}.conf
-        ${web_install_dir}/sbin/nginx -s reload
-      fi
-
-      if [ "${apache_ssl_yn}" == 'y' ]; then
-        [ ! -d ${apache_install_dir}/conf/vhost ] && mkdir ${apache_install_dir}/conf/vhost
-        cat > ${apache_install_dir}/conf/vhost/${domain}.conf << EOF
 <VirtualHost *:80>
 <VirtualHost *:80>
   ServerAdmin admin@example.com
   ServerAdmin admin@example.com
   DocumentRoot "${vhostdir}"
   DocumentRoot "${vhostdir}"
@@ -227,80 +201,90 @@ Create_SSL() {
 </Directory>
 </Directory>
 </VirtualHost>
 </VirtualHost>
 EOF
 EOF
-        /etc/init.d/httpd restart > /dev/null
+      /etc/init.d/httpd restart > /dev/null
-      fi
+    fi
 
 
-      ${python_install_dir}/bin/certbot certonly --webroot --agree-tos --quiet --email ${Admin_Email} -w ${vhostdir} -d ${domain} ${moredomainame_D}
+    ${python_install_dir}/bin/certbot certonly --webroot --agree-tos --quiet --email ${Admin_Email} -w ${vhostdir} -d ${domain} ${moredomainame_D}
-      if [ -s "/etc/letsencrypt/live/${domain}/cert.pem" ]; then
+    if [ -s "/etc/letsencrypt/live/${domain}/cert.pem" ]; then
-        [ -e "${PATH_SSL}/${domain}.crt" ] && rm -rf ${PATH_SSL}/${domain}.{crt,key}
+      [ -e "${PATH_SSL}/${domain}.crt" ] && rm -rf ${PATH_SSL}/${domain}.{crt,key}
-        ln -s /etc/letsencrypt/live/${domain}/fullchain.pem ${PATH_SSL}/${domain}.crt
+      ln -s /etc/letsencrypt/live/${domain}/fullchain.pem ${PATH_SSL}/${domain}.crt
-        ln -s /etc/letsencrypt/live/${domain}/privkey.pem ${PATH_SSL}/${domain}.key
+      ln -s /etc/letsencrypt/live/${domain}/privkey.pem ${PATH_SSL}/${domain}.key
-        if [ -e "${web_install_dir}/sbin/nginx" -a -e "${apache_install_dir}/conf/httpd.conf" ]; then
+      if [ -e "${web_install_dir}/sbin/nginx" -a -e "${apache_install_dir}/conf/httpd.conf" ]; then
-          Cron_Command="/etc/init.d/nginx reload;/etc/init.d/httpd graceful"
+        Cron_Command="/etc/init.d/nginx reload;/etc/init.d/httpd graceful"
-        elif [ -e "${web_install_dir}/sbin/nginx" -a ! -e "${apache_install_dir}/conf/httpd.conf" ]; then
+      elif [ -e "${web_install_dir}/sbin/nginx" -a ! -e "${apache_install_dir}/conf/httpd.conf" ]; then
-          Cron_Command="/etc/init.d/nginx reload"
+        Cron_Command="/etc/init.d/nginx reload"
-        elif [ ! -e "${web_install_dir}/sbin/nginx" -a -e "${apache_install_dir}/conf/httpd.conf" ]; then
+      elif [ ! -e "${web_install_dir}/sbin/nginx" -a -e "${apache_install_dir}/conf/httpd.conf" ]; then
-          Cron_Command="/etc/init.d/httpd graceful"
+        Cron_Command="/etc/init.d/httpd graceful"
-        fi
-        [ "${OS}" == "CentOS" ] && Cron_file=/var/spool/cron/root || Cron_file=/var/spool/cron/crontabs/root
-        [ -z "$(grep 'certbot renew' ${Cron_file})" ] && echo "30 2 * * 1 ${python_install_dir}/bin/certbot renew --force-renew --renew-hook \"${Cron_Command}\"" >> $Cron_file
-      else
-        echo "${CFAILURE}Error: Let's Encrypt SSL certificate installation failed! ${CEND}"
-        exit 1
       fi
       fi
+      [ "${OS}" == "CentOS" ] && Cron_file=/var/spool/cron/root || Cron_file=/var/spool/cron/crontabs/root
+      [ -z "$(grep 'certbot renew' ${Cron_file})" ] && echo "30 2 * * 1 ${python_install_dir}/bin/certbot renew --disable-hook-validation --force-renew --renew-hook \"${Cron_Command}\"" >> $Cron_file
     else
     else
-      Create_self_SSL
+      echo "${CFAILURE}Error: Create Let's Encrypt SSL Certificate failed! ${CEND}"
+      exit 1
     fi
     fi
-  else
-    Create_self_SSL
   fi
   fi
 }
 }
 
 
 Print_ssl() {
 Print_ssl() {
-  if [ "${letsencrypt_yn}" == 'y' ]; then
+  if [ "${Domian_Mode}" == '2' ]; then
-    echo "$(printf "%-30s" "Let's Encrypt SSL Certificate:")${CMSG}/etc/letsencrypt/live/${domain}/fullchain.pem${CEND}"
-    echo "$(printf "%-30s" "SSL Private Key:")${CMSG}/etc/letsencrypt/live/${domain}/privkey.pem${CEND}"
-  else
     echo "$(printf "%-30s" "Self-signed SSL Certificate:")${CMSG}${PATH_SSL}/${domain}.crt${CEND}"
     echo "$(printf "%-30s" "Self-signed SSL Certificate:")${CMSG}${PATH_SSL}/${domain}.crt${CEND}"
     echo "$(printf "%-30s" "SSL Private Key:")${CMSG}${PATH_SSL}/${domain}.key${CEND}"
     echo "$(printf "%-30s" "SSL Private Key:")${CMSG}${PATH_SSL}/${domain}.key${CEND}"
     echo "$(printf "%-30s" "SSL CSR File:")${CMSG}${PATH_SSL}/${domain}.csr${CEND}"
     echo "$(printf "%-30s" "SSL CSR File:")${CMSG}${PATH_SSL}/${domain}.csr${CEND}"
+  elif [ "${Domian_Mode}" == '3' ]; then
+    echo "$(printf "%-30s" "Let's Encrypt SSL Certificate:")${CMSG}/etc/letsencrypt/live/${domain}/fullchain.pem${CEND}"
+    echo "$(printf "%-30s" "SSL Private Key:")${CMSG}/etc/letsencrypt/live/${domain}/privkey.pem${CEND}"
   fi
   fi
 }
 }
 
 
-
 Input_Add_domain() {
 Input_Add_domain() {
-  if [ -e "${web_install_dir}/sbin/nginx" ]; then
+  while :;do
-    while :; do echo
+    printf "
-      read -p "Do you want to setup SSL under Nginx? [y/n]: " nginx_ssl_yn
+What Are You Doing?
-      if [[ ! ${nginx_ssl_yn} =~ ^[y,n]$ ]]; then
+\t${CMSG}1${CEND}. Use HTTP Only
-        echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
+\t${CMSG}2${CEND}. Use your own SSL Certificate and Key
-      else
+\t${CMSG}3${CEND}. Use Let's Encrypt to Create SSL Certificate and Key
-        break
+\t${CMSG}q${CEND}. Exit
-      fi
+"
-    done
+    read -p "Please input the correct option: " Domian_Mode
-  elif [ ! -e "${web_install_dir}/sbin/nginx" -a -e "${apache_install_dir}/bin/apachectl" ]; then
+    if [[ ! "${Domian_Mode}" =~ ^[1-3,q]$ ]]; then
-    while :; do echo
+      echo "${CFAILURE}input error! Please only input 1~3 and q${CEND}"
-      read -p "Do you want to setup SSL under Apache? [y/n]: " apache_ssl_yn
+    else
-      if [[ ! ${apache_ssl_yn} =~ ^[y,n]$ ]]; then
+      [ "${Domian_Mode}" == '3' ] && [ ! -e "${python_install_dir}/bin/certbot" ] && { echo "${CWARNING}You must to install Let's Encrypt client! Try running: ./addons.sh${CEND}"; exit 1; }
-        echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
+      if [[ "${Domian_Mode}" =~ ^[2-3]$ ]]; then
-      else
+        if [ -e "${web_install_dir}/sbin/nginx" ]; then
-        break
+          nginx_ssl_flag=y
+          PATH_SSL=${web_install_dir}/conf/ssl
+          [ ! -d "${PATH_SSL}" ] && mkdir ${PATH_SSL};
+        elif [ ! -e "${web_install_dir}/sbin/nginx" -a -e "${apache_install_dir}/bin/apachectl" ]; then
+          apache_ssl_flag=y
+          PATH_SSL=${apache_install_dir}/conf/ssl
+          [ ! -d "${PATH_SSL}" ] && mkdir ${PATH_SSL};
+        fi
+      elif [ "${Domian_Mode}" == 'q' ]; then
+        exit 1
       fi
       fi
-    done
+      break
-  fi
+    fi
-
+  done
-  [ "${apache_ssl_yn}" == 'y' ] && { PATH_SSL=${apache_install_dir}/conf/ssl; [ ! -d "${PATH_SSL}" ] && mkdir ${PATH_SSL}; }
-  [ "${nginx_ssl_yn}" == 'y' ] && { PATH_SSL=${web_install_dir}/conf/ssl; [ ! -d "${PATH_SSL}" ] && mkdir ${PATH_SSL}; }
 
 
   while :; do echo
   while :; do echo
     read -p "Please input domain(example: www.example.com): " domain
     read -p "Please input domain(example: www.example.com): " domain
     if [ -z "$(echo ${domain} | grep '.*\..*')" ]; then
     if [ -z "$(echo ${domain} | grep '.*\..*')" ]; then
-      echo "${CWARNING}input error! ${CEND}"
+      echo "${CWARNING}Your ${domain} is invalid! ${CEND}"
     else
     else
       break
       break
     fi
     fi
   done
   done
 
 
+  if [ -e "${web_install_dir}/conf/vhost/${domain}.conf" -o -e "${apache_install_dir}/conf/vhost/${domain}.conf" -o -e "${tomcat_install_dir}/conf/vhost/${domain}.xml" ]; then
+    [ -e "${web_install_dir}/conf/vhost/${domain}.conf" ] && echo -e "${domain} in the Nginx/Tengine/OpenResty already exist! \nYou can delete ${CMSG}${web_install_dir}/conf/vhost/${domain}.conf${CEND} and re-create"
+    [ -e "${apache_install_dir}/conf/vhost/${domain}.conf" ] && echo -e "${domain} in the Apache already exist! \nYou can delete ${CMSG}${apache_install_dir}/conf/vhost/${domain}.conf${CEND} and re-create"
+    [ -e "${tomcat_install_dir}/conf/vhost/${domain}.xml" ] && echo -e "${domain} in the Tomcat already exist! \nYou can delete ${CMSG}${tomcat_install_dir}/conf/vhost/${domain}.xml${CEND} and re-create"
+    exit
+  else
+    echo "domain=${domain}"
+  fi
+
   while :; do echo
   while :; do echo
     echo "Please input the directory for the domain:${domain} :"
     echo "Please input the directory for the domain:${domain} :"
     read -p "(Default directory: ${wwwroot_dir}/${domain}): " vhostdir
     read -p "(Default directory: ${wwwroot_dir}/${domain}): " vhostdir
@@ -320,29 +304,20 @@ Input_Add_domain() {
     fi
     fi
   done
   done
 
 
-  if [ -e "${web_install_dir}/conf/vhost/${domain}.conf" -o -e "${apache_install_dir}/conf/vhost/${domain}.conf" -o -e "${tomcat_install_dir}/conf/vhost/${domain}.xml" ]; then
-    [ -e "${web_install_dir}/conf/vhost/${domain}.conf" ] && echo -e "${domain} in the Nginx/Tengine/OpenResty already exist! \nYou can delete ${CMSG}${web_install_dir}/conf/vhost/${domain}.conf${CEND} and re-create"
-    [ -e "${apache_install_dir}/conf/vhost/${domain}.conf" ] && echo -e "${domain} in the Apache already exist! \nYou can delete ${CMSG}${apache_install_dir}/conf/vhost/${domain}.conf${CEND} and re-create"
-    [ -e "${tomcat_install_dir}/conf/vhost/${domain}.xml" ] && echo -e "${domain} in the Tomcat already exist! \nYou can delete ${CMSG}${tomcat_install_dir}/conf/vhost/${domain}.xml${CEND} and re-create"
-    exit
-  else
-    echo "domain=${domain}"
-  fi
-
   while :; do echo
   while :; do echo
-    read -p "Do you want to add more domain name? [y/n]: " moredomainame_yn
+    read -p "Do you want to add more domain name? [y/n]: " moredomainame_flag
-    if [[ ! ${moredomainame_yn} =~ ^[y,n]$ ]]; then
+    if [[ ! ${moredomainame_flag} =~ ^[y,n]$ ]]; then
       echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
       echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
     else
     else
       break
       break
     fi
     fi
   done
   done
 
 
-  if [ "${moredomainame_yn}" == 'y' ]; then
+  if [ "${moredomainame_flag}" == 'y' ]; then
     while :; do echo
     while :; do echo
       read -p "Type domainname or IP(example: example.com other.example.com): " moredomain
       read -p "Type domainname or IP(example: example.com other.example.com): " moredomain
       if [ -z "$(echo ${moredomain} | grep '.*\..*')" ]; then
       if [ -z "$(echo ${moredomain} | grep '.*\..*')" ]; then
-        echo "${CWARNING}input error! ${CEND}"
+        echo "${CWARNING}Your ${domain} is invalid! ${CEND}"
       else
       else
         [ "${moredomain}" == "${domain}" ] && echo "${CWARNING}Domain name already exists! ${CND}" && continue
         [ "${moredomain}" == "${domain}" ] && echo "${CWARNING}Domain name already exists! ${CND}" && continue
         echo domain list="$moredomain"
         echo domain list="$moredomain"
@@ -353,23 +328,32 @@ Input_Add_domain() {
     Apache_Domain_alias=ServerAlias${moredomainame}
     Apache_Domain_alias=ServerAlias${moredomainame}
     Tomcat_Domain_alias=$(for D in $(echo ${moredomainame}); do echo "<Alias>${D}</Alias>"; done)
     Tomcat_Domain_alias=$(for D in $(echo ${moredomainame}); do echo "<Alias>${D}</Alias>"; done)
 
 
+    if [ "${Domian_Mode}" == '3' ]; then
+      PUBLIC_IPADDR=$(./include/get_public_ipaddr.py)
+      for D in ${domain} ${moredomainame}
+      do
+        Domain_IPADDR=$(ping ${D} -c1 2> /dev/null | sed '1{s/[^(]*(//;s/).*//;q}')
+        [ "${PUBLIC_IPADDR%.*}" != "${Domain_IPADDR%.*}" ] && { echo; echo "${CFAILURE}DNS problem: NXDOMAIN looking up A for ${D}${CEND}"; echo; exit 1; }
+      done
+    fi
+
     if [ -e "${web_install_dir}/sbin/nginx" ]; then
     if [ -e "${web_install_dir}/sbin/nginx" ]; then
       while :; do echo
       while :; do echo
-        read -p "Do you want to redirect from ${moredomain} to ${domain}? [y/n]: " redirect_yn
+        read -p "Do you want to redirect from ${moredomain} to ${domain}? [y/n]: " redirect_flag
-        if [[ ! ${redirect_yn} =~ ^[y,n]$ ]]; then
+        if [[ ! ${redirect_flag} =~ ^[y,n]$ ]]; then
           echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
           echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
         else
         else
           break
           break
         fi
         fi
       done
       done
-      [ "${redirect_yn}" == 'y' ] && Nginx_redirect="if (\$host != $domain) {  return 301 \$scheme://${domain}\$request_uri;  }"
+      [ "${redirect_flag}" == 'y' ] && Nginx_redirect="if (\$host != $domain) {  return 301 \$scheme://${domain}\$request_uri;  }"
     fi
     fi
   fi
   fi
 
 
-  if [ "${nginx_ssl_yn}" == 'y' ]; then
+  if [ "${nginx_ssl_flag}" == 'y' ]; then
     while :; do echo
     while :; do echo
-      read -p "Do you want to redirect all HTTP requests to HTTPS? [y/n]: " https_yn
+      read -p "Do you want to redirect all HTTP requests to HTTPS? [y/n]: " https_flag
-      if [[ ! ${https_yn} =~ ^[y,n]$ ]]; then
+      if [[ ! ${https_flag} =~ ^[y,n]$ ]]; then
         echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
         echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
       else
       else
         break
         break
@@ -384,7 +368,7 @@ Input_Add_domain() {
     Create_SSL
     Create_SSL
     Nginx_conf=$(echo -e "listen 80;\n  listen ${LISTENOPT};\n  ssl_certificate ${PATH_SSL}/${domain}.crt;\n  ssl_certificate_key ${PATH_SSL}/${domain}.key;\n  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;\n  ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;\n  ssl_prefer_server_ciphers on;\n  ssl_session_timeout 10m;\n  ssl_session_cache builtin:1000 shared:SSL:10m;\n  ssl_buffer_size 1400;\n  add_header Strict-Transport-Security max-age=15768000;\n  ssl_stapling on;\n  ssl_stapling_verify on;\n")
     Nginx_conf=$(echo -e "listen 80;\n  listen ${LISTENOPT};\n  ssl_certificate ${PATH_SSL}/${domain}.crt;\n  ssl_certificate_key ${PATH_SSL}/${domain}.key;\n  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;\n  ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;\n  ssl_prefer_server_ciphers on;\n  ssl_session_timeout 10m;\n  ssl_session_cache builtin:1000 shared:SSL:10m;\n  ssl_buffer_size 1400;\n  add_header Strict-Transport-Security max-age=15768000;\n  ssl_stapling on;\n  ssl_stapling_verify on;\n")
     Apache_SSL=$(echo -e "SSLEngine on\n  SSLCertificateFile \"${PATH_SSL}/${domain}.crt\"\n  SSLCertificateKeyFile \"${PATH_SSL}/${domain}.key\"")
     Apache_SSL=$(echo -e "SSLEngine on\n  SSLCertificateFile \"${PATH_SSL}/${domain}.crt\"\n  SSLCertificateKeyFile \"${PATH_SSL}/${domain}.key\"")
-  elif [ "$apache_ssl_yn" == 'y' ]; then
+  elif [ "$apache_ssl_flag" == 'y' ]; then
     Create_SSL
     Create_SSL
     Apache_SSL=$(echo -e "SSLEngine on\n  SSLCertificateFile \"${PATH_SSL}/${domain}.crt\"\n  SSLCertificateKeyFile \"${PATH_SSL}/${domain}.key\"")
     Apache_SSL=$(echo -e "SSLEngine on\n  SSLCertificateFile \"${PATH_SSL}/${domain}.crt\"\n  SSLCertificateKeyFile \"${PATH_SSL}/${domain}.key\"")
     [ -z "$(grep 'Listen 443' ${apache_install_dir}/conf/httpd.conf)" ] && sed -i "s@Listen 80@&\nListen 443@" ${apache_install_dir}/conf/httpd.conf
     [ -z "$(grep 'Listen 443' ${apache_install_dir}/conf/httpd.conf)" ] && sed -i "s@Listen 80@&\nListen 443@" ${apache_install_dir}/conf/httpd.conf
@@ -396,8 +380,8 @@ Input_Add_domain() {
 
 
 Nginx_anti_hotlinking() {
 Nginx_anti_hotlinking() {
   while :; do echo
   while :; do echo
-    read -p "Do you want to add hotlink protection? [y/n]: " anti_hotlinking_yn
+    read -p "Do you want to add hotlink protection? [y/n]: " anti_hotlinking_flag
-    if [[ ! $anti_hotlinking_yn =~ ^[y,n]$ ]]; then
+    if [[ ! $anti_hotlinking_flag =~ ^[y,n]$ ]]; then
       echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
       echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
     else
     else
       break
       break
@@ -410,8 +394,8 @@ Nginx_anti_hotlinking() {
     domain_allow="*.${domain} ${domain}"
     domain_allow="*.${domain} ${domain}"
   fi
   fi
 
 
-  if [ "${anti_hotlinking_yn}" == 'y' ]; then
+  if [ "${anti_hotlinking_flag}" == 'y' ]; then
-    if [ "${moredomainame_yn}" == 'y' ]; then
+    if [ "${moredomainame_flag}" == 'y' ]; then
       domain_allow_all=${domain_allow}${moredomainame}
       domain_allow_all=${domain_allow}${moredomainame}
     else
     else
       domain_allow_all=${domain_allow}
       domain_allow_all=${domain_allow}
@@ -425,14 +409,14 @@ Nginx_anti_hotlinking() {
 Nginx_rewrite() {
 Nginx_rewrite() {
   [ ! -d "${web_install_dir}/conf/rewrite" ] && mkdir ${web_install_dir}/conf/rewrite
   [ ! -d "${web_install_dir}/conf/rewrite" ] && mkdir ${web_install_dir}/conf/rewrite
   while :; do echo
   while :; do echo
-    read -p "Allow Rewrite rule? [y/n]: " rewrite_yn
+    read -p "Allow Rewrite rule? [y/n]: " rewrite_flag
-    if [[ ! "${rewrite_yn}" =~ ^[y,n]$ ]]; then
+    if [[ ! "${rewrite_flag}" =~ ^[y,n]$ ]]; then
       echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
       echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
     else
     else
       break
       break
     fi
     fi
   done
   done
-  if [ "${rewrite_yn}" == 'n' ]; then
+  if [ "${rewrite_flag}" == 'n' ]; then
     rewrite="none"
     rewrite="none"
     touch "${web_install_dir}/conf/rewrite/${rewrite}.conf"
     touch "${web_install_dir}/conf/rewrite/${rewrite}.conf"
   else
   else
@@ -458,14 +442,14 @@ Nginx_rewrite() {
 
 
 Nginx_log() {
 Nginx_log() {
 while :; do echo
 while :; do echo
-    read -p "Allow Nginx/Tengine/OpenResty access_log? [y/n]: " access_yn
+    read -p "Allow Nginx/Tengine/OpenResty access_log? [y/n]: " access_flag
-    if [[ ! "${access_yn}" =~ ^[y,n]$ ]]; then
+    if [[ ! "${access_flag}" =~ ^[y,n]$ ]]; then
         echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
         echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
     else
     else
         break
         break
     fi
     fi
 done
 done
-if [ "${access_yn}" == 'n' ]; then
+if [ "${access_flag}" == 'n' ]; then
     N_log="access_log off;"
     N_log="access_log off;"
 else
 else
     N_log="access_log ${wwwlogs_dir}/${domain}_nginx.log combined;"
     N_log="access_log ${wwwlogs_dir}/${domain}_nginx.log combined;"
@@ -501,7 +485,7 @@ server {
 }
 }
 EOF
 EOF
 
 
-  [ "${https_yn}" == 'y' ] && sed -i "s@^root.*;@&\nif (\$ssl_protocol = \"\") { return 301 https://\$host\$request_uri; }@" ${web_install_dir}/conf/vhost/${domain}.conf
+  [ "${https_flag}" == 'y' ] && sed -i "s@^root.*;@&\nif (\$ssl_protocol = \"\") { return 301 https://\$host\$request_uri; }@" ${web_install_dir}/conf/vhost/${domain}.conf
 
 
   cat > ${tomcat_install_dir}/conf/vhost/${domain}.xml << EOF
   cat > ${tomcat_install_dir}/conf/vhost/${domain}.xml << EOF
 <Host name="${domain}" appBase="${vhostdir}" unpackWARs="true" autoDeploy="true"> ${Tomcat_Domain_alias}
 <Host name="${domain}" appBase="${vhostdir}" unpackWARs="true" autoDeploy="true"> ${Tomcat_Domain_alias}
@@ -537,7 +521,7 @@ EOF
   echo "$(printf "%-30s" "Nginx Virtualhost conf:")${CMSG}${web_install_dir}/conf/vhost/${domain}.conf${CEND}"
   echo "$(printf "%-30s" "Nginx Virtualhost conf:")${CMSG}${web_install_dir}/conf/vhost/${domain}.conf${CEND}"
   echo "$(printf "%-30s" "Tomcat Virtualhost conf:")${CMSG}${tomcat_install_dir}/conf/vhost/${domain}.xml${CEND}"
   echo "$(printf "%-30s" "Tomcat Virtualhost conf:")${CMSG}${tomcat_install_dir}/conf/vhost/${domain}.xml${CEND}"
   echo "$(printf "%-30s" "Directory of:")${CMSG}${vhostdir}${CEND}"
   echo "$(printf "%-30s" "Directory of:")${CMSG}${vhostdir}${CEND}"
-  [ "${nginx_ssl_yn}" == 'y' ] && Print_ssl
+  Print_ssl
 }
 }
 
 
 Create_tomcat_conf() {
 Create_tomcat_conf() {
@@ -603,19 +587,19 @@ EOF
     sed -i "s@^  server_name.*;@  server_name ${domain}${moredomainame};@" ${web_install_dir}/conf/vhost/${domain}.conf
     sed -i "s@^  server_name.*;@  server_name ${domain}${moredomainame};@" ${web_install_dir}/conf/vhost/${domain}.conf
     sed -i "s@^  server_name.*;@&\n  ${N_log}@" ${web_install_dir}/conf/vhost/${domain}.conf
     sed -i "s@^  server_name.*;@&\n  ${N_log}@" ${web_install_dir}/conf/vhost/${domain}.conf
     [ "${NGX_FLAG}" == 'hhvm' ] && sed -i 's@fastcgi_pass unix:.*;@fastcgi_pass unix:/var/log/hhvm/sock;@g' ${web_install_dir}/conf/vhost/${domain}.conf
     [ "${NGX_FLAG}" == 'hhvm' ] && sed -i 's@fastcgi_pass unix:.*;@fastcgi_pass unix:/var/log/hhvm/sock;@g' ${web_install_dir}/conf/vhost/${domain}.conf
-    if [ "${anti_hotlinking_yn}" == 'y' ]; then
+    if [ "${anti_hotlinking_flag}" == 'y' ]; then
       sed -i "s@^  root.*;@&\n  }@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  root.*;@&\n  }@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  root.*;@&\n    }@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  root.*;@&\n    }@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  root.*;@&\n      return 403;@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  root.*;@&\n      return 403;@" ${web_install_dir}/conf/vhost/${domain}.conf
-      sed -i "s@^  root.*;@&\n      rewrite ^/ http://www.example.com/403.html;@" ${web_install_dir}/conf/vhost/${domain}.conf
+      sed -i "s@^  root.*;@&\n      rewrite ^/ http://www.linuxeye.com/403.html;@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  root.*;@&\n    if (\$invalid_referer) {@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  root.*;@&\n    if (\$invalid_referer) {@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  root.*;@&\n    valid_referers none blocked ${domain_allow_all};@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  root.*;@&\n    valid_referers none blocked ${domain_allow_all};@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  root.*;@&\n  location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv|mp4)\$ {@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  root.*;@&\n  location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv|mp4)\$ {@" ${web_install_dir}/conf/vhost/${domain}.conf
     fi
     fi
 
 
-    [ "${redirect_yn}" == 'y' ] && sed -i "s@^  root.*;@&\n  if (\$host != $domain) {  return 301 \$scheme://${domain}\$request_uri;  }@" ${web_install_dir}/conf/vhost/${domain}.conf
+    [ "${redirect_flag}" == 'y' ] && sed -i "s@^  root.*;@&\n  if (\$host != $domain) {  return 301 \$scheme://${domain}\$request_uri;  }@" ${web_install_dir}/conf/vhost/${domain}.conf
     
     
-    if [ "${nginx_ssl_yn}" == 'y' ]; then
+    if [ "${nginx_ssl_flag}" == 'y' ]; then
       sed -i "s@^  listen 80;@&\n  listen ${LISTENOPT};@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  listen 80;@&\n  listen ${LISTENOPT};@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  server_name.*;@&\n  ssl_stapling_verify on;@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  server_name.*;@&\n  ssl_stapling_verify on;@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  server_name.*;@&\n  ssl_stapling on;@" ${web_install_dir}/conf/vhost/${domain}.conf
       sed -i "s@^  server_name.*;@&\n  ssl_stapling on;@" ${web_install_dir}/conf/vhost/${domain}.conf
@@ -631,7 +615,7 @@ EOF
     fi
     fi
   fi
   fi
 
 
-  [ "${https_yn}" == 'y' ] && sed -i "s@^  root.*;@&\n  if (\$ssl_protocol = \"\") { return 301 https://\$host\$request_uri; }@" ${web_install_dir}/conf/vhost/${domain}.conf
+  [ "${https_flag}" == 'y' ] && sed -i "s@^  root.*;@&\n  if (\$ssl_protocol = \"\") { return 301 https://\$host\$request_uri; }@" ${web_install_dir}/conf/vhost/${domain}.conf
 
 
   echo
   echo
   ${web_install_dir}/sbin/nginx -t
   ${web_install_dir}/sbin/nginx -t
@@ -653,21 +637,21 @@ EOF
   echo "$(printf "%-30s" "Your domain:")${CMSG}${domain}${CEND}"
   echo "$(printf "%-30s" "Your domain:")${CMSG}${domain}${CEND}"
   echo "$(printf "%-30s" "Virtualhost conf:")${CMSG}${web_install_dir}/conf/vhost/${domain}.conf${CEND}"
   echo "$(printf "%-30s" "Virtualhost conf:")${CMSG}${web_install_dir}/conf/vhost/${domain}.conf${CEND}"
   echo "$(printf "%-30s" "Directory of:")${CMSG}${vhostdir}${CEND}"
   echo "$(printf "%-30s" "Directory of:")${CMSG}${vhostdir}${CEND}"
-  [ "${rewrite_yn}" == 'y' -a "${rewrite}" != 'magento2' -a "${rewrite}" != 'pathinfo' ] && echo "$(printf "%-30s" "Rewrite rule:")${CMSG}${web_install_dir}/conf/rewrite/${rewrite}.conf${CEND}"
+  [ "${rewrite_flag}" == 'y' -a "${rewrite}" != 'magento2' -a "${rewrite}" != 'pathinfo' ] && echo "$(printf "%-30s" "Rewrite rule:")${CMSG}${web_install_dir}/conf/rewrite/${rewrite}.conf${CEND}"
-  [ "${nginx_ssl_yn}" == 'y' ] && Print_ssl
+  Print_ssl
 }
 }
 
 
 Apache_log() {
 Apache_log() {
   while :; do echo
   while :; do echo
-    read -p "Allow Apache access_log? [y/n]: " access_yn
+    read -p "Allow Apache access_log? [y/n]: " access_flag
-    if [[ ! "${access_yn}" =~ ^[y,n]$ ]]; then
+    if [[ ! "${access_flag}" =~ ^[y,n]$ ]]; then
       echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
       echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
     else
     else
       break
       break
     fi
     fi
   done
   done
 
 
-  if [ "${access_yn}" == 'n' ]; then
+  if [ "${access_flag}" == 'n' ]; then
     A_log='CustomLog "/dev/null" common'
     A_log='CustomLog "/dev/null" common'
   else
   else
     A_log="CustomLog \"${wwwlogs_dir}/${domain}_apache.log\" common"
     A_log="CustomLog \"${wwwlogs_dir}/${domain}_apache.log\" common"
@@ -697,7 +681,7 @@ Create_apache_conf() {
 </Directory>
 </Directory>
 </VirtualHost>
 </VirtualHost>
 EOF
 EOF
-  [ "$apache_ssl_yn" == 'y' ] && cat >> ${apache_install_dir}/conf/vhost/${domain}.conf << EOF
+  [ "$apache_ssl_flag" == 'y' ] && cat >> ${apache_install_dir}/conf/vhost/${domain}.conf << EOF
 <VirtualHost *:443>
 <VirtualHost *:443>
   ServerAdmin admin@example.com
   ServerAdmin admin@example.com
   DocumentRoot "${vhostdir}"
   DocumentRoot "${vhostdir}"
@@ -738,7 +722,7 @@ EOF
   echo "$(printf "%-30s" "Your domain:")${CMSG}${domain}${CEND}"
   echo "$(printf "%-30s" "Your domain:")${CMSG}${domain}${CEND}"
   echo "$(printf "%-30s" "Virtualhost conf:")${CMSG}${apache_install_dir}/conf/vhost/${domain}.conf${CEND}"
   echo "$(printf "%-30s" "Virtualhost conf:")${CMSG}${apache_install_dir}/conf/vhost/${domain}.conf${CEND}"
   echo "$(printf "%-30s" "Directory of:")${CMSG}${vhostdir}${CEND}"
   echo "$(printf "%-30s" "Directory of:")${CMSG}${vhostdir}${CEND}"
-  [ "${apache_ssl_yn}" == 'y' ] && Print_ssl
+  Print_ssl
 }
 }
 
 
 Create_nginx_apache_mod-php_conf() {
 Create_nginx_apache_mod-php_conf() {
@@ -778,7 +762,7 @@ server {
 }
 }
 EOF
 EOF
 
 
-  [ "${https_yn}" == 'y' ] && sed -i "s@^  root.*;@&\n  if (\$ssl_protocol = \"\") { return 301 https://\$host\$request_uri; }@" ${web_install_dir}/conf/vhost/${domain}.conf
+  [ "${https_flag}" == 'y' ] && sed -i "s@^  root.*;@&\n  if (\$ssl_protocol = \"\") { return 301 https://\$host\$request_uri; }@" ${web_install_dir}/conf/vhost/${domain}.conf
 
 
   echo
   echo
   ${web_install_dir}/sbin/nginx -t
   ${web_install_dir}/sbin/nginx -t
@@ -834,7 +818,7 @@ EOF
   echo "$(printf "%-30s" "Nginx Virtualhost conf:")${CMSG}${web_install_dir}/conf/vhost/${domain}.conf${CEND}"
   echo "$(printf "%-30s" "Nginx Virtualhost conf:")${CMSG}${web_install_dir}/conf/vhost/${domain}.conf${CEND}"
   echo "$(printf "%-30s" "Apache Virtualhost conf:")${CMSG}${apache_install_dir}/conf/vhost/${domain}.conf${CEND}"
   echo "$(printf "%-30s" "Apache Virtualhost conf:")${CMSG}${apache_install_dir}/conf/vhost/${domain}.conf${CEND}"
   echo "$(printf "%-30s" "Directory of:")${CMSG}${vhostdir}${CEND}"
   echo "$(printf "%-30s" "Directory of:")${CMSG}${vhostdir}${CEND}"
-  [ "${nginx_ssl_yn}" == 'y' ] && Print_ssl
+  Print_ssl
 }
 }
 
 
 Add_Vhost() {
 Add_Vhost() {
@@ -891,21 +875,21 @@ Del_NGX_Vhost() {
         while :; do echo
         while :; do echo
           read -p "Please input a domain you want to delete: " domain
           read -p "Please input a domain you want to delete: " domain
           if [ -z "$(echo ${domain} | grep '.*\..*')" ]; then
           if [ -z "$(echo ${domain} | grep '.*\..*')" ]; then
-            echo "${CWARNING}input error! ${CEND}"
+            echo "${CWARNING}Your ${domain} is invalid! ${CEND}"
           else
           else
             if [ -e "${web_install_dir}/conf/vhost/${domain}.conf" ]; then
             if [ -e "${web_install_dir}/conf/vhost/${domain}.conf" ]; then
               Directory=$(grep '^  root' ${web_install_dir}/conf/vhost/${domain}.conf | head -1 | awk -F'[ ;]' '{print $(NF-1)}')
               Directory=$(grep '^  root' ${web_install_dir}/conf/vhost/${domain}.conf | head -1 | awk -F'[ ;]' '{print $(NF-1)}')
               rm -rf ${web_install_dir}/conf/vhost/${domain}.conf
               rm -rf ${web_install_dir}/conf/vhost/${domain}.conf
               ${web_install_dir}/sbin/nginx -s reload
               ${web_install_dir}/sbin/nginx -s reload
               while :; do echo
               while :; do echo
-                read -p "Do you want to delete Virtul Host directory? [y/n]: " Del_Vhost_wwwroot_yn
+                read -p "Do you want to delete Virtul Host directory? [y/n]: " Del_Vhost_wwwroot_flag
-                if [[ ! ${Del_Vhost_wwwroot_yn} =~ ^[y,n]$ ]]; then
+                if [[ ! ${Del_Vhost_wwwroot_flag} =~ ^[y,n]$ ]]; then
                   echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
                   echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
                 else
                 else
                   break
                   break
                 fi
                 fi
               done
               done
-              if [ "${Del_Vhost_wwwroot_yn}" == 'y' ]; then
+              if [ "${Del_Vhost_wwwroot_flag}" == 'y' ]; then
                 echo "Press Ctrl+c to cancel or Press any key to continue..."
                 echo "Press Ctrl+c to cancel or Press any key to continue..."
                 char=$(get_char)
                 char=$(get_char)
                 rm -rf ${Directory}
                 rm -rf ${Directory}
@@ -940,22 +924,22 @@ Del_Apache_Vhost() {
         while :; do echo
         while :; do echo
           read -p "Please input a domain you want to delete: " domain
           read -p "Please input a domain you want to delete: " domain
           if [ -z "$(echo ${domain} | grep '.*\..*')" ]; then
           if [ -z "$(echo ${domain} | grep '.*\..*')" ]; then
-            echo "${CWARNING}input error! ${CEND}"
+            echo "${CWARNING}Your ${domain} is invalid! ${CEND}"
           else
           else
             if [ -e "${apache_install_dir}/conf/vhost/${domain}.conf" ]; then
             if [ -e "${apache_install_dir}/conf/vhost/${domain}.conf" ]; then
               Directory=$(grep '^<Directory ' ${apache_install_dir}/conf/vhost/${domain}.conf | head -1 | awk -F'"' '{print $2}')
               Directory=$(grep '^<Directory ' ${apache_install_dir}/conf/vhost/${domain}.conf | head -1 | awk -F'"' '{print $2}')
               rm -rf ${apache_install_dir}/conf/vhost/${domain}.conf
               rm -rf ${apache_install_dir}/conf/vhost/${domain}.conf
               /etc/init.d/httpd restart
               /etc/init.d/httpd restart
               while :; do echo
               while :; do echo
-                read -p "Do you want to delete Virtul Host directory? [y/n]: " Del_Vhost_wwwroot_yn
+                read -p "Do you want to delete Virtul Host directory? [y/n]: " Del_Vhost_wwwroot_flag
-                if [[ ! ${Del_Vhost_wwwroot_yn} =~ ^[y,n]$ ]]; then
+                if [[ ! ${Del_Vhost_wwwroot_flag} =~ ^[y,n]$ ]]; then
                   echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
                   echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
                 else
                 else
                   break
                   break
                 fi
                 fi
               done
               done
 
 
-              if [ "${Del_Vhost_wwwroot_yn}" == 'y' ]; then
+              if [ "${Del_Vhost_wwwroot_flag}" == 'y' ]; then
                 echo "Press Ctrl+c to cancel or Press any key to continue..."
                 echo "Press Ctrl+c to cancel or Press any key to continue..."
                 char=$(get_char)
                 char=$(get_char)
                 rm -rf ${Directory}
                 rm -rf ${Directory}
@@ -992,22 +976,22 @@ Del_Tomcat_Vhost() {
         while :; do echo
         while :; do echo
           read -p "Please input a domain you want to delete: " domain
           read -p "Please input a domain you want to delete: " domain
           if [ -z "$(echo ${domain} | grep '.*\..*')" ]; then
           if [ -z "$(echo ${domain} | grep '.*\..*')" ]; then
-            echo "${CWARNING}input error! ${CEND}"
+            echo "${CWARNING}Your ${domain} is invalid! ${CEND}"
           else
           else
             if [ -n "$(grep vhost-${domain} ${tomcat_install_dir}/conf/server.xml)" ]; then
             if [ -n "$(grep vhost-${domain} ${tomcat_install_dir}/conf/server.xml)" ]; then
               sed -i /vhost-${domain}/d ${tomcat_install_dir}/conf/server.xml
               sed -i /vhost-${domain}/d ${tomcat_install_dir}/conf/server.xml
               rm -rf ${tomcat_install_dir}/conf/vhost/${domain}.xml
               rm -rf ${tomcat_install_dir}/conf/vhost/${domain}.xml
               /etc/init.d/tomcat restart
               /etc/init.d/tomcat restart
               while :; do echo
               while :; do echo
-                read -p "Do you want to delete Virtul Host directory? [y/n]: " Del_Vhost_wwwroot_yn
+                read -p "Do you want to delete Virtul Host directory? [y/n]: " Del_Vhost_wwwroot_flag
-                if [[ ! ${Del_Vhost_wwwroot_yn} =~ ^[y,n]$ ]]; then
+                if [[ ! ${Del_Vhost_wwwroot_flag} =~ ^[y,n]$ ]]; then
                   echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
                   echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
                 else
                 else
                   break
                   break
                 fi
                 fi
               done
               done
 
 
-              if [ "${Del_Vhost_wwwroot_yn}" == 'y' ]; then
+              if [ "${Del_Vhost_wwwroot_flag}" == 'y' ]; then
                 echo "Press Ctrl+c to cancel or Press any key to continue..."
                 echo "Press Ctrl+c to cancel or Press any key to continue..."
                 char=$(get_char)
                 char=$(get_char)
                 rm -rf ${Directory}
                 rm -rf ${Directory}
@@ -1027,6 +1011,19 @@ Del_Tomcat_Vhost() {
   fi
   fi
 }
 }
 
 
+List_Vhost() {
+  [ -d "${web_install_dir}/conf/vhost" ] && Domain_List=$(ls ${web_install_dir}/conf/vhost | sed "s@.conf@@g")
+  [ -e "${apache_install_dir}/conf/httpd.conf" -a ! -d "${web_install_dir}/conf/vhost" ] && Domain_List=$(ls ${apache_install_dir}/conf/vhost | grep -v '0.conf' | sed "s@.conf@@g")
+  [ -e "${tomcat_install_dir}/conf/server.xml" -a ! -d "${web_install_dir}/sbin/nginx" ] && Domain_List=$(ls ${tomcat_install_dir}/conf/vhost | grep -v 'localhost.xml' | sed "s@.xml@@g")
+  if [ -n "${Domain_List}" ]; then
+    echo
+    echo "Virtualhost list:"
+    for D in $Domain_List; do echo ${CMSG}$D${CEND}; done
+  else
+    echo "${CWARNING}Virtualhost was not exist! ${CEND}"
+  fi
+}
+
 if [ $# == 0 ]; then
 if [ $# == 0 ]; then
   Add_Vhost
   Add_Vhost
 elif [ $# == 1 ]; then
 elif [ $# == 1 ]; then
@@ -1039,6 +1036,9 @@ elif [ $# == 1 ]; then
     Del_Apache_Vhost
     Del_Apache_Vhost
     Del_Tomcat_Vhost
     Del_Tomcat_Vhost
     ;;
     ;;
+  list)
+    List_Vhost
+    ;;
   *)
   *)
     Usage
     Usage
     ;;
     ;;