123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366 |
- #! /bin/bash
- # Swoole-compiler loader install wizard
- # Color
- RED='\033[0;31m'
- YELLOW='\033[0;33m'
- NC='\033[0m' # No Color
- # Output Logo
- echo ""
- echo "+-------------------------------------------------------------------+"
- echo -e "| ${RED}Swoole Compiler Loader Installer${NC} |"
- echo "+-------------------------------------------------------------------+"
- echo "| version 1.0.3 (2018-03-15) |"
- echo "+-------------------------------------------------------------------+"
- echo ""
- # The function which outputs help information
- help(){
- echo " "
- echo -e " ${YELLOW}Usage :${NC} bash $0 [options] [arguments]"
- echo " "
- echo -e " ${YELLOW}Options :${NC} "
- echo " -h --help Show the help of swoole compiler loader"
- echo " -s --libsodium Install libsodium library"
- echo " "
- echo -e " ${YELLOW}Optional Arguments :${NC} "
- echo " php_path : the absolute path of php-cli or php-fpm executable path"
- echo " "
- echo -e " ${YELLOW}Examples : ${NC}"
- echo " bash $0"
- echo " bash $0 /usr/local/sbin/php-fpm"
- echo " base $0 -s"
- echo " "
- }
- # The function which outputs choice
- yes_or_no(){
- if [ $# -eq 0 ]; then
- echo -e " ${RED}Error:${NC}"
- echo " Wrong function parameter"
- echo ""
- exit 1;
- fi
- while true; do
- read -p "$* [y/n]: " yn
- case $yn in
- [Yy]*) return 0 ;;
- [Nn]*) return 1 ;;
- * ) echo "Please answer yes or no." ;;
- esac
- done
- }
- # The function which judges the execute ability of the php_path
- check_php(){
- if [ $# -eq 0 ]; then
- echo -e " ${RED}Error:${NC}"
- echo " Wrong function parameter"
- echo ""
- exit 1;
- fi
- check_php_path="$1";
- which "$check_php_path" &> /dev/null;
- check_php_path_exist=$?;
- if [ "$check_php_path_exist" == "0" ]; then
- check_php_path=$(which "$check_php_path")
- if [ -x "$check_php_path" ]; then
- return 0;
- else
- return 1;
- fi
- else
- return 1;
- fi
- }
- # The function which installs the libsodium libray
- install_libsodium(){
- back_libsodium_path="./libsodium.so"
- if [ ! -e "$back_libsodium_path" ]; then
- echo ""
- echo -e " ${RED}Error:${NC}"
- echo " Not found backed libsodium.so, please check the loader folder"
- echo ""
- exit 1;
- fi
- ldconfig
- libsodium_exists=$(ldconfig -p | awk '/libsodium/')
- if [ -n "$libsodium_exists" ]; then
- echo " libsodium.so : found"
- else
- echo " libsodium.so : not found"
- echo -e " ${YELLOW}install libsodium.so...${NC}"
- fi
- enabled_so_path="/usr/lib"
- cp "$back_libsodium_path" "$enabled_so_path"
- ldconfig
- libSodiumPath="$enabled_so_path/libsodium.so"
- if [ ! -e $libSodiumPath ]; then
- echo ""
- echo -e " ${RED}Error:${NC}"
- echo " No found shared library libsodium.so"
- echo ""
- exit 1;
- fi
- libsodium_exists=$(ldconfig -p | awk '/libsodium/')
- if [ ! -n "$libsodium_exists" ]; then
- echo ""
- echo -e " ${RED}Error:${NC}"
- echo " Fail to install libsodium.so"
- echo ""
- exit 1;
- fi
- }
- # The function which checks the root
- check_root(){
- if [[ $EUID -ne 0 ]]; then
- echo ""
- echo -e " ${RED}This program needs root privilege${NC}"
- exit 1
- fi
- }
- # Check the parameter of shell sctipt
- if [ "$#" == "1" ] ; then
- if [[ ( "$1" == "-h" ) || ( "$1" == "--help" ) ]] ; then
- help
- exit 1
- fi
- if [[ ( "$1" == "-s" ) || ( "$1" == "--libsodium" ) ]]; then
- # Output checking environment information
- echo " "
- echo -e " ${YELLOW}Install Libsodium...${NC}"
- echo " "
- check_root
- install_libsodium
- echo " "
- exit
- fi
- fi
- # Output checking environment information
- echo " "
- echo -e " ${YELLOW}Checking Environment...${NC}"
- echo " "
- # Check the bin path of php
- php_path=""
- if [ $# -eq 0 ]; then
- # Check the bin path of php-cli or php-fpm
- default_optional_php_paths="php php-fpm php5-fpm php-fpm7.0"
- enabled_php_paths=""
- for optional_php_path in $default_optional_php_paths
- do
- check_php "$optional_php_path"
- php_exists=$?
- if [ "$php_exists" == "0" ]; then
- optional_php_path=$(which "$optional_php_path")
- enabled_php_paths=$enabled_php_paths" $optional_php_path"
- fi
- done
- if [ "$enabled_php_paths" == "" ]; then
- echo ""
- echo -e " ${RED}Error:${NC}"
- echo " No found php or php-fpm command, please run this script with the path of php"
- echo ""
- exit 1;
- else
- pathCount=$(echo "$enabled_php_paths" | awk '{print NF}')
- echo " Please select the php path to install loader extension:"
- echo ""
- indexCount=1
- for enabled_php_path in $enabled_php_paths
- do
- echo " $indexCount : $enabled_php_path"
- indexCount=$(($indexCount + 1))
- done
- echo ""
- echo " 0 : Quit this script"
- # Choose the bin path to install loader extension
- while true; do
- preg_str="^[0-$pathCount]$"
- echo ""
- read -p " Enter a number > ";
- if [[ $REPLY =~ $preg_str ]]; then
- if [[ $REPLY == 0 ]]; then
- echo ""
- echo " Exit";
- exit 1;
- fi
- indexCount=1
- for enabled_php_path in $enabled_php_paths
- do
- if [[ $indexCount == $REPLY ]]; then
- php_path=$enabled_php_path
- fi
- indexCount=$(($indexCount + 1))
- done
- break
- else
- echo ""
- echo " Invalid input";
- fi
- done
- fi
- elif [ $# -eq 1 ]; then
- php_path="$1"
- check_php "$1"
- php_exists=$?
- if [ "$php_exists" == "0" ]; then
- php_path=$(which "$php_path")
- else
- echo -e " ${RED}Error:${NC}"
- echo " Please check if $php_path is existing and executable"
- echo ""
- exit 1;
- fi
- else
- echo -e " ${RED}Error:${NC}"
- echo " Please check your parameters, this shell script supports only one optional parameter."
- echo ""
- exit 1;
- fi
- # Check if installed swoole loader
- loader_installed=$($php_path -m 2> /dev/null | awk '/swoole_loader/')
- if [ -n "$loader_installed" ]; then
- # check the version of installed swoole loader
- loader_version_installed=$($php_path -i 2> /dev/null | awk '/^swoole_loader version =>/ {print $4}')
- echo -e " ${YELLOW}Swoole Compiler Loader $loader_version_installed is installed now${NC}"
- echo ""
- yes_or_no " Reinstall swoole compiler loader?"
- yes_or_no_res=$?
- if [ "$yes_or_no_res" == "1" ]; then
- echo "";
- echo " Exit script";
- echo "";
- exit 1;
- else
- echo "";
- fi
- fi
- # Output php path information
- echo " php_path : $php_path"
- # Check php version
- raw_php_version=$($php_path -i 2> /dev/null | awk 'NR != 2 && /^PHP Version =>/ {print $4}')
- php_one_version=$(echo "$raw_php_version" | cut -d . -f 1)
- php_two_version=$(echo "$raw_php_version" | cut -d . -f 2)
- php_version=$php_one_version.$php_two_version
- echo " php_version : $php_version"
- # Check php sapi
- php_sapi=$($php_path -i 2> /dev/null | awk '/^Server API =>/ {print $4,$5,$6}')
- echo " php_sapi : $php_sapi"
- # Check php thread saftey
- php_thread_safety=$($php_path -i 2> /dev/null | awk '/^Thread Safety =>/ {print $4}')
- echo " php_thread_safety : $php_thread_safety"
- # Check php extension dir
- php_extension_dir=$($php_path -i 2> /dev/null | awk '/^extension_dir =>/ {print $3}')
- if [ -d "$php_extension_dir" ]; then
- echo " php_extension_dir : $php_extension_dir"
- else
- echo ""
- echo -e " ${RED}Error:${NC}"
- echo " No found php extension directory : $php_extension_dir"
- echo ""
- exit 1;
- fi
- # Check php extension dir
- php_ini_path=$($php_path -i 2> /dev/null | awk '/^Loaded Configuration File =>/ {print $5}')
- if [ -f "$php_ini_path" ]; then
- echo " php_ini_path : $php_ini_path"
- else
- echo ""
- echo -e " ${RED}Error:${NC}"
- echo " No found php.ini file: $php_ini_path"
- echo ""
- exit 1;
- fi
- # Check xdebug, ioncube loader and zend loader extensions
- forbidden_extensions_exists=$($php_path -m 2> /dev/null | awk '/xdebug|ionCube|zend_loader/')
- if [ -n "$forbidden_extensions_exists" ]; then
- echo ""
- echo -e " ${RED}Error:${NC}"
- echo " It exists xdebug or ionCuber loader or zend_loader extension, please remove these extensions"
- echo ""
- exit 1;
- fi
- # Ensure root privileges.
- check_root
- # Check libsodium.so which is required for swoole-compiler loader
- install_libsodium
- # Install swoole_loader.so to php extension directory
- swoole_loader_file="swoole_loader"
- swoole_loader_file="$swoole_loader_file""$php_one_version""$php_two_version"
- if [ "$php_thread_safety" == "disabled" ]; then
- swoole_loader_file="$swoole_loader_file"".so"
- else
- swoole_loader_file="$swoole_loader_file""_zts.so"
- fi
- real_swoole_loader_path=$php_extension_dir"/"$swoole_loader_file
- if [ ! -f "$real_swoole_loader_path" ]; then
- echo " swoole_loader.so : not found"
- else
- echo " swoole_loader.so : found"
- fi
- swoole_loader_path="./"$swoole_loader_file
- if [ -f "$swoole_loader_path" ]; then
- echo ""
- echo -e " ${YELLOW}installing $swoole_loader_file to php_extension_dir...${NC}"
- cp "$swoole_loader_path" "$php_extension_dir"
- echo ""
- else
- echo ""
- echo -e " ${RED}Error:${NC}"
- echo " No found right swoole loader file : $swoole_loader_file"
- echo ""
- exit 1;
- fi
- real_swoole_loader_path=$php_extension_dir"/"$swoole_loader_file
- if [ ! -f "$real_swoole_loader_path" ]; then
- echo ""
- echo -e " ${RED}Error:${NC}"
- echo " No found swoole loader file in php extension dir: $real_swoole_loader_path"
- echo ""
- exit 1;
- fi
- # Check if exists swoole_loader.so config
- raw_ini_loader="extension="$real_swoole_loader_path
- ini_loader="$raw_ini_loader"
- load_config_exists=$(awk '/swoole_loader/ {print $0}' "$php_ini_path")
- if [ -n "$load_config_exists" ]; then
- echo " loader_config : found"
- sed -i '/swoole_loader/d' "$php_ini_path"
- else
- echo " loader_config : not found"
- fi
- echo ""
- echo -e " ${YELLOW}adding swoole_loader extension config to php.ini...${NC}"
- echo "$ini_loader" >> "$php_ini_path"
- # Check if installed swoole loader
- loader_installed=$($php_path -m 2> /dev/null | awk '/swoole_loader/')
- if [ -n "$loader_installed" ]; then
- loader_version_installed=$($php_path -i 2> /dev/null | awk '/^swoole_loader version =>/ {print $4}')
- echo ""
- echo -e " ${YELLOW}Swoole Compiler Loader $loader_version_installed is installed successfully${NC}"
- exit 1;
- else
- echo ""
- echo -e " ${RED}Error:${NC}"
- echo " Swoole Compiler Loader failed to install"
- echo ""
- exit 1;
- fi
|