298 lines
13 KiB
Bash
298 lines
13 KiB
Bash
#!/bin/bash
|
|
# core/menu.sh - interactive menu
|
|
# Migrated verbatim from install.sh (lines 236-691). Logic unchanged.
|
|
show_menu() {
|
|
if [ ${ARG_NUM} == 0 ]; then
|
|
if [ ! -e ~/.oneinstack ]; then
|
|
# check iptables
|
|
# Default to 'y': ServerStack only supports Debian/Ubuntu (firewalld/ufw
|
|
# were removed), so iptables is the firewall for every supported system.
|
|
# The user can still answer 'n' to opt out.
|
|
while :; do echo
|
|
read -e -p "Do you want to enable iptables? [y/n] (default y):" iptables_flag
|
|
[ -z "${iptables_flag}" ] && iptables_flag=y
|
|
if [[ ! ${iptables_flag} =~ ^[y,n]$ ]]; then
|
|
echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# check Web server
|
|
while :; do echo
|
|
read -e -p "Do you want to install Web server? [y/n]: " web_flag
|
|
if [[ ! ${web_flag} =~ ^[y,n]$ ]]; then
|
|
echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
|
|
else
|
|
if [ "${web_flag}" == 'y' ]; then
|
|
# Nginx
|
|
while :; do echo
|
|
echo 'Please select Nginx server:'
|
|
echo -e "\t${CMSG}1${CEND}. Install Nginx"
|
|
echo -e "\t${CMSG}2${CEND}. Do not install"
|
|
read -e -p "Please input a number:(Default 1 press Enter)" nginx_option
|
|
nginx_option=${nginx_option:-1}
|
|
if [[ ! ${nginx_option} =~ ^[1-2]$ ]]; then
|
|
echo "${CWARNING}input error! Please only input number 1~2${CEND}"
|
|
else
|
|
[ "${nginx_option}" != '2' -a -e "${nginx_install_dir}/sbin/nginx" ] && { echo "${CWARNING}Nginx already installed! ${CEND}"; unset nginx_option; }
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
break
|
|
fi
|
|
done
|
|
|
|
# choice database
|
|
while :; do echo
|
|
read -e -p "Do you want to install Database? [y/n]: " db_flag
|
|
if [[ ! ${db_flag} =~ ^[y,n]$ ]]; then
|
|
echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
|
|
else
|
|
if [ "${db_flag}" == 'y' ]; then
|
|
while :; do echo
|
|
echo 'Please select a version of the Database:'
|
|
echo -e "\t${CMSG} 1${CEND}. Install MySQL-8.0"
|
|
echo -e "\t${CMSG} 2${CEND}. Install MySQL-5.7"
|
|
echo -e "\t${CMSG} 3${CEND}. Install MariaDB-10.11"
|
|
echo -e "\t${CMSG} 4${CEND}. Install MariaDB-11.8"
|
|
echo -e "\t${CMSG} 5${CEND}. Install MariaDB-12.3"
|
|
echo -e "\t${CMSG} 6${CEND}. Install PostgreSQL-15.14"
|
|
echo -e "\t${CMSG} 7${CEND}. Install PostgreSQL-16.10"
|
|
echo -e "\t${CMSG} 8${CEND}. Install PostgreSQL-17.6"
|
|
echo -e "\t${CMSG} 9${CEND}. Install MongoDB"
|
|
read -e -p "Please input a number:(Default 3 press Enter) " db_option
|
|
db_option=${db_option:-3}
|
|
if [[ "${db_option}" =~ ^[1-9]$ ]]; then
|
|
if [[ "${db_option}" =~ ^[6-8]$ ]]; then
|
|
[ -e "${pgsql_install_dir}/bin/psql" ] && { echo "${CWARNING}PostgreSQL already installed! ${CEND}"; unset db_option; break; }
|
|
elif [ "${db_option}" == '9' ]; then
|
|
[ -e "${mongo_install_dir}/bin/mongo" ] && { echo "${CWARNING}MongoDB already installed! ${CEND}"; unset db_option; break; }
|
|
else
|
|
[ -d "${db_install_dir}/support-files" ] && { echo "${CWARNING}MySQL/MariaDB already installed! ${CEND}"; unset db_option; break; }
|
|
fi
|
|
while :; do
|
|
if [[ "${db_option}" =~ ^[6-8]$ ]]; then
|
|
read -e -p "Please input the postgres password of PostgreSQL(default: ${dbpostgrespwd}): " dbpwd
|
|
dbpwd=${dbpwd:-${dbpostgrespwd}}
|
|
elif [ "${db_option}" == '9' ]; then
|
|
read -e -p "Please input the root password of MongoDB(default: ${dbmongopwd}): " dbpwd
|
|
dbpwd=${dbpwd:-${dbmongopwd}}
|
|
else
|
|
read -e -p "Please input the root password of MySQL/MariaDB(default: ${dbrootpwd}): " dbpwd
|
|
dbpwd=${dbpwd:-${dbrootpwd}}
|
|
fi
|
|
[ -n "`echo ${dbpwd} | grep '[+|&]'`" ] && { echo "${CWARNING}input error,not contain a plus sign (+) and & ${CEND}"; continue; }
|
|
if (( ${#dbpwd} >= 5 )); then
|
|
if [[ "${db_option}" =~ ^[6-8]$ ]]; then
|
|
dbpostgrespwd=${dbpwd}
|
|
elif [ "${db_option}" == '9' ]; then
|
|
dbmongopwd=${dbpwd}
|
|
else
|
|
dbrootpwd=${dbpwd}
|
|
fi
|
|
break
|
|
else
|
|
echo "${CWARNING}password least 5 characters! ${CEND}"
|
|
fi
|
|
done
|
|
# choose install methods
|
|
if [[ "${db_option}" =~ ^[1-5]$ ]]; then
|
|
while :; do echo
|
|
echo "Please choose installation of the database:"
|
|
echo -e "\t${CMSG}1${CEND}. Install database from binary package."
|
|
echo -e "\t${CMSG}2${CEND}. Install database from source package."
|
|
read -e -p "Please input a number:(Default 1 press Enter) " dbinstallmethod
|
|
dbinstallmethod=${dbinstallmethod:-1}
|
|
if [[ ! ${dbinstallmethod} =~ ^[1-2]$ ]]; then
|
|
echo "${CWARNING}input error! Please only input number 1~2${CEND}"
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
break
|
|
else
|
|
echo "${CWARNING}input error! Please only input number 1~9${CEND}"
|
|
fi
|
|
done
|
|
fi
|
|
break
|
|
fi
|
|
done
|
|
|
|
# choice php
|
|
while :; do echo
|
|
read -e -p "Do you want to install PHP? [y/n]: " php_flag
|
|
if [[ ! ${php_flag} =~ ^[y,n]$ ]]; then
|
|
echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
|
|
else
|
|
if [ "${php_flag}" == 'y' ]; then
|
|
[ -e "${php_install_dir}/bin/phpize" ] && { echo "${CWARNING}PHP already installed! ${CEND}"; unset php_option; break; }
|
|
while :; do echo
|
|
echo 'Please select a version of the PHP:'
|
|
if [[ "${Family}" == "ubuntu" ]] && [ "${Ubuntu_ver:-0}" -ge 24 ]; then
|
|
echo -e "\t${CMSG} 1${CEND}. Install php-7.4 ${CWARNING}(unavailable on Ubuntu ${Ubuntu_ver}+, only PHP 8.x is supported)${CEND}"
|
|
echo -e "\t${CMSG} 2${CEND}. Install php-8.0"
|
|
echo -e "\t${CMSG} 3${CEND}. Install php-8.1"
|
|
else
|
|
echo -e "\t${CMSG} 1${CEND}. Install php-7.4"
|
|
echo -e "\t${CMSG} 2${CEND}. Install php-8.0"
|
|
echo -e "\t${CMSG} 3${CEND}. Install php-8.1"
|
|
fi
|
|
read -e -p "Please input a number:(Default 1 press Enter) " php_option
|
|
php_option=${php_option:-1}
|
|
if [[ ! ${php_option} =~ ^[1-3]$ ]]; then
|
|
echo "${CWARNING}input error! Please only input number 1~3${CEND}"
|
|
elif [[ "${Family}" == "ubuntu" ]] && [ "${Ubuntu_ver:-0}" -ge 24 ] && [ "${php_option}" == '1' ]; then
|
|
echo "${CWARNING}PHP 7.4 is not supported on Ubuntu ${Ubuntu_ver}+, please select PHP 8.x (option 2 or 3)${CEND}"
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
break
|
|
fi
|
|
done
|
|
|
|
# check php ver
|
|
if [ -e "${php_install_dir}/bin/phpize" ]; then
|
|
PHP_detail_ver=$(${php_install_dir}/bin/php-config --version)
|
|
PHP_main_ver=${PHP_detail_ver%.*}
|
|
fi
|
|
|
|
# PHP opcode cache and extensions
|
|
if [[ ${php_option} =~ ^[1-3]$ ]] || [ -e "${php_install_dir}/bin/phpize" ]; then
|
|
while :; do echo
|
|
read -e -p "Do you want to install opcode cache of the PHP? [y/n]: " phpcache_flag
|
|
if [[ ! ${phpcache_flag} =~ ^[y,n]$ ]]; then
|
|
echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
|
|
else
|
|
if [ "${phpcache_flag}" == 'y' ]; then
|
|
if [[ ${php_option} =~ ^[1-3]$ ]] || [[ "${PHP_main_ver}" =~ ^7.[0-4]$|^8.[0-1]$ ]]; then
|
|
while :; do
|
|
echo 'Please select a opcode cache of the PHP:'
|
|
echo -e "\t${CMSG}1${CEND}. Install Zend OPcache"
|
|
echo -e "\t${CMSG}2${CEND}. Install APCU"
|
|
read -e -p "Please input a number:(Default 1 press Enter) " phpcache_option
|
|
phpcache_option=${phpcache_option:-1}
|
|
if [[ ! ${phpcache_option} =~ ^[1-2]$ ]]; then
|
|
echo "${CWARNING}input error! Please only input number 1~2${CEND}"
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
break
|
|
fi
|
|
done
|
|
# set xcache passwd
|
|
if [ "${phpcache_option}" == '3' ]; then
|
|
while :; do
|
|
read -e -p "Please input xcache admin password: " xcachepwd
|
|
(( ${#xcachepwd} >= 5 )) && { xcachepwd_md5=$(echo -n "${xcachepwd}" | md5sum | awk '{print $1}') ; break ; } || echo "${CFAILURE}xcache admin password least 5 characters! ${CEND}"
|
|
done
|
|
fi
|
|
# PHP extension
|
|
while :; do
|
|
echo
|
|
echo 'Please select PHP extensions:'
|
|
echo -e "\t${CMSG} 0${CEND}. Do not install"
|
|
echo -e "\t${CMSG} 1${CEND}. Install zendguardloader(PHP<=5.6)"
|
|
echo -e "\t${CMSG} 2${CEND}. Install ioncube"
|
|
echo -e "\t${CMSG} 3${CEND}. Install sourceguardian(PHP<=7.2)"
|
|
echo -e "\t${CMSG} 4${CEND}. Install imagick"
|
|
echo -e "\t${CMSG} 5${CEND}. Install gmagick"
|
|
echo -e "\t${CMSG} 6${CEND}. Install fileinfo"
|
|
echo -e "\t${CMSG} 7${CEND}. Install imap"
|
|
echo -e "\t${CMSG} 8${CEND}. Install ldap"
|
|
echo -e "\t${CMSG} 9${CEND}. Install phalcon(PHP>=5.5)"
|
|
echo -e "\t${CMSG}10${CEND}. Install yaf(PHP>=7.0)"
|
|
echo -e "\t${CMSG}11${CEND}. Install redis"
|
|
echo -e "\t${CMSG}12${CEND}. Install mongodb"
|
|
echo -e "\t${CMSG}13${CEND}. Install swoole"
|
|
echo -e "\t${CMSG}14${CEND}. Install xdebug(PHP>=5.5)"
|
|
read -e -p "Please input numbers:(Default '4 6 11 12' press Enter) " phpext_option
|
|
phpext_option=${phpext_option:-'4 6 11 12'}
|
|
[ "${phpext_option}" == '0' ] && break
|
|
array_phpext=(${phpext_option})
|
|
array_all=(1 2 3 4 5 6 7 8 9 10 11 12 13 14)
|
|
for v in ${array_phpext[@]}
|
|
do
|
|
[ -z "`echo ${array_all[@]} | grep -w ${v}`" ] && phpext_flag=1
|
|
done
|
|
if [ "${phpext_flag}" == '1' ]; then
|
|
unset phpext_flag
|
|
echo; echo "${CWARNING}input error! Please only input number 4 11 12 and so on${CEND}"; echo
|
|
continue
|
|
else
|
|
[ -n "`echo ${array_phpext[@]} | grep -w 1`" ] && pecl_zendguardloader=1
|
|
[ -n "`echo ${array_phpext[@]} | grep -w 2`" ] && pecl_ioncube=1
|
|
[ -n "`echo ${array_phpext[@]} | grep -w 3`" ] && pecl_sourceguardian=1
|
|
[ -n "`echo ${array_phpext[@]} | grep -w 4`" ] && pecl_imagick=1
|
|
[ -n "`echo ${array_phpext[@]} | grep -w 5`" ] && pecl_gmagick=1
|
|
[ -n "`echo ${array_phpext[@]} | grep -w 6`" ] && pecl_fileinfo=1
|
|
[ -n "`echo ${array_phpext[@]} | grep -w 7`" ] && pecl_imap=1
|
|
[ -n "`echo ${array_phpext[@]} | grep -w 8`" ] && pecl_ldap=1
|
|
[ -n "`echo ${array_phpext[@]} | grep -w 9`" ] && pecl_phalcon=1
|
|
[ -n "`echo ${array_phpext[@]} | grep -w 10`" ] && pecl_yaf=1
|
|
[ -n "`echo ${array_phpext[@]} | grep -w 11`" ] && pecl_redis=1
|
|
[ -n "`echo ${array_phpext[@]} | grep -w 12`" ] && pecl_mongodb=1
|
|
[ -n "`echo ${array_phpext[@]} | grep -w 13`" ] && pecl_swoole=1
|
|
[ -n "`echo ${array_phpext[@]} | grep -w 14`" ] && pecl_xdebug=1
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# check Nodejs
|
|
while :; do echo
|
|
read -e -p "Do you want to install Nodejs? [y/n]: " nodejs_flag
|
|
if [[ ! ${nodejs_flag} =~ ^[y,n]$ ]]; then
|
|
echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
|
|
else
|
|
[ "${nodejs_flag}" == 'y' -a -e "${nodejs_install_dir}/bin/node" ] && { echo "${CWARNING}Nodejs already installed! ${CEND}"; unset nodejs_flag; }
|
|
break
|
|
fi
|
|
done
|
|
|
|
# check Pureftpd
|
|
while :; do echo
|
|
read -e -p "Do you want to install Pure-FTPd? [y/n]: " pureftpd_flag
|
|
if [[ ! ${pureftpd_flag} =~ ^[y,n]$ ]]; then
|
|
echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
|
|
else
|
|
[ "${pureftpd_flag}" == 'y' -a -e "${pureftpd_install_dir}/sbin/pure-ftpwho" ] && { echo "${CWARNING}Pure-FTPd already installed! ${CEND}"; unset pureftpd_flag; }
|
|
break
|
|
fi
|
|
done
|
|
|
|
# check phpMyAdmin
|
|
if [[ ${php_option} =~ ^[1-3]$ ]] || [ -e "${php_install_dir}/bin/phpize" ]; then
|
|
while :; do echo
|
|
read -e -p "Do you want to install phpMyAdmin? [y/n]: " phpmyadmin_flag
|
|
if [[ ! ${phpmyadmin_flag} =~ ^[y,n]$ ]]; then
|
|
echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
|
|
else
|
|
[ "${phpmyadmin_flag}" == 'y' -a -d "${wwwroot_dir}/default/phpMyAdmin" ] && { echo "${CWARNING}phpMyAdmin already installed! ${CEND}"; unset phpmyadmin_flag; }
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# check redis
|
|
while :; do echo
|
|
read -e -p "Do you want to install redis-server? [y/n]: " redis_flag
|
|
if [[ ! ${redis_flag} =~ ^[y,n]$ ]]; then
|
|
echo "${CWARNING}input error! Please only input 'y' or 'n'${CEND}"
|
|
else
|
|
[ "${redis_flag}" == 'y' -a -e "${redis_install_dir}/bin/redis-server" ] && { echo "${CWARNING}redis-server already installed! ${CEND}"; unset redis_flag; }
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
}
|