1
0

addons.sh 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558
  1. #!/bin/bash
  2. # Author: yeho <lj2007331 AT gmail.com>
  3. # BLOG: https://blog.linuxeye.cn
  4. #
  5. # Notes: OneinStack for CentOS/RadHat 6+ Debian 7+ and Ubuntu 12+
  6. #
  7. # Project home page:
  8. # https://oneinstack.com
  9. # https://github.com/lj2007331/oneinstack
  10. export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  11. clear
  12. printf "
  13. #######################################################################
  14. # OneinStack for CentOS/RadHat 6+ Debian 7+ and Ubuntu 12+ #
  15. # Install/Uninstall Extensions #
  16. # For more information please visit https://oneinstack.com #
  17. #######################################################################
  18. "
  19. # Check if user is root
  20. [ $(id -u) != '0' ] && { echo "${CFAILURE}Error: You must be root to run this script${CEND}"; exit 1; }
  21. oneinstack_dir=$(dirname "`readlink -f $0`")
  22. pushd ${oneinstack_dir} > /dev/null
  23. # get the IP information
  24. PUBLIC_IPADDR=`./include/get_public_ipaddr.py`
  25. IPADDR_COUNTRY=`./include/get_ipaddr_state.py $PUBLIC_IPADDR | awk '{print $1}'`
  26. . ./versions.txt
  27. . ./options.conf
  28. . ./include/color.sh
  29. . ./include/memory.sh
  30. . ./include/check_os.sh
  31. . ./include/check_download.sh
  32. . ./include/download.sh
  33. . ./include/get_char.sh
  34. . ./include/zendopcache.sh
  35. . ./include/xcache.sh
  36. . ./include/apcu.sh
  37. . ./include/eaccelerator.sh
  38. . ./include/ZendGuardLoader.sh
  39. . ./include/ioncube.sh
  40. . ./include/ImageMagick.sh
  41. . ./include/GraphicsMagick.sh
  42. . ./include/memcached.sh
  43. . ./include/redis.sh
  44. . ./include/python.sh
  45. # Check PHP
  46. if [ -e "${php_install_dir}/bin/phpize" ]; then
  47. phpExtensionDir=$(${php_install_dir}/bin/php-config --extension-dir)
  48. PHP_detail_ver=$(${php_install_dir}/bin/php -r 'echo PHP_VERSION;')
  49. PHP_main_ver=${PHP_detail_ver%.*}
  50. fi
  51. # Check PHP Extensions
  52. Check_PHP_Extension() {
  53. [ ! -e "${php_install_dir}/bin/phpize" ] && { echo "${CWARNING}PHP was not exist! ${CEND}"; exit 1; }
  54. [ -e "`ls ${php_install_dir}/etc/php.d/0?-${PHP_extension}.ini 2> /dev/null`" ] && { echo "${CWARNING}PHP ${PHP_extension} module already installed! ${CEND}"; exit 1; }
  55. }
  56. # restart PHP
  57. Restart_PHP() {
  58. [ -e "${apache_install_dir}/conf/httpd.conf" ] && /etc/init.d/httpd restart || /etc/init.d/php-fpm restart
  59. }
  60. # Check succ
  61. Check_succ() {
  62. [ -f "${phpExtensionDir}/${PHP_extension}.so" ] && { Restart_PHP; echo;echo "${CSUCCESS}PHP ${PHP_extension} module installed successfully! ${CEND}"; }
  63. }
  64. # Uninstall succ
  65. Uninstall_succ() {
  66. [ -e "`ls ${php_install_dir}/etc/php.d/0?-${PHP_extension}.ini 2> /dev/null`" ] && { rm -rf ${php_install_dir}/etc/php.d/0?-${PHP_extension}.ini; Restart_PHP; echo; echo "${CMSG}PHP ${PHP_extension} module uninstall completed${CEND}"; } || { echo; echo "${CWARNING}${PHP_extension} module does not exist! ${CEND}"; }
  67. }
  68. Install_letsencrypt() {
  69. [ ! -e "${python_install_dir}/bin/python" ] && Install_Python
  70. ${python_install_dir}/bin/pip install requests
  71. ${python_install_dir}/bin/pip install certbot
  72. if [ -e "${python_install_dir}/bin/certbot" ]; then
  73. echo; echo "${CSUCCESS}Let's Encrypt client installed successfully! ${CEND}"
  74. else
  75. echo; echo "${CFAILURE}Let's Encrypt client install failed, Please try again! ${CEND}"
  76. fi
  77. }
  78. Uninstall_letsencrypt() {
  79. ${python_install_dir}/bin/pip uninstall -y certbot > /dev/null 2>&1
  80. rm -rf /etc/letsencrypt /var/log/letsencrypt /var/lib/letsencrypt ${python_install_dir}
  81. [ "${OS}" == "CentOS" ] && Cron_file=/var/spool/cron/root || Cron_file=/var/spool/cron/crontabs/root
  82. [ -e "$Cron_file" ] && sed -i '/certbot/d' ${Cron_file}
  83. echo; echo "${CMSG}Let's Encrypt client uninstall completed${CEND}";
  84. }
  85. Install_fail2ban() {
  86. [ ! -e "${python_install_dir}/bin/python" ] && Install_Python
  87. pushd ${oneinstack_dir}/src > /dev/null
  88. src_url=http://mirrors.linuxeye.com/oneinstack/src/fail2ban-${fail2ban_ver}.tar.gz && Download_src
  89. tar xzf fail2ban-${fail2ban_ver}.tar.gz
  90. pushd fail2ban-${fail2ban_ver}
  91. ${python_install_dir}/bin/python setup.py install
  92. if [ "${OS}" == "CentOS" ]; then
  93. LOGPATH=/var/log/secure
  94. /bin/cp files/redhat-initd /etc/init.d/fail2ban
  95. sed -i "s@^FAIL2BAN=.*@FAIL2BAN=${python_install_dir}/bin/fail2ban-client@" /etc/init.d/fail2ban
  96. sed -i 's@Starting fail2ban.*@&\n [ ! -e "/var/run/fail2ban" ] \&\& mkdir /var/run/fail2ban@' /etc/init.d/fail2ban
  97. chmod +x /etc/init.d/fail2ban
  98. chkconfig --add fail2ban
  99. chkconfig fail2ban on
  100. fi
  101. if [[ "${OS}" =~ ^Ubuntu$|^Debian$ ]]; then
  102. LOGPATH=/var/log/auth.log
  103. /bin/cp files/debian-initd /etc/init.d/fail2ban
  104. sed -i 's@2 3 4 5@3 4 5@' /etc/init.d/fail2ban
  105. sed -i "s@^DAEMON=.*@DAEMON=${python_install_dir}/bin/\$NAME-client@" /etc/init.d/fail2ban
  106. chmod +x /etc/init.d/fail2ban
  107. update-rc.d fail2ban defaults
  108. fi
  109. [ -z "`grep ^Port /etc/ssh/sshd_config`" ] && now_ssh_port=22 || now_ssh_port=`grep ^Port /etc/ssh/sshd_config | awk '{print $2}'`
  110. cat > /etc/fail2ban/jail.local << EOF
  111. [DEFAULT]
  112. ignoreip = 127.0.0.1/8
  113. bantime = 86400
  114. findtime = 600
  115. maxretry = 5
  116. [ssh-iptables]
  117. enabled = true
  118. filter = sshd
  119. action = iptables[name=SSH, port=$now_ssh_port, protocol=tcp]
  120. logpath = $LOGPATH
  121. EOF
  122. cat > /etc/logrotate.d/fail2ban << EOF
  123. /var/log/fail2ban.log {
  124. missingok
  125. notifempty
  126. postrotate
  127. ${python_install_dir}/bin/fail2ban-client flushlogs >/dev/null || true
  128. endscript
  129. }
  130. EOF
  131. sed -i 's@^iptables = iptables.*@iptables = iptables@' /etc/fail2ban/action.d/iptables-common.conf
  132. kill -9 `ps -ef | grep fail2ban | grep -v grep | awk '{print $2}'` > /dev/null 2>&1
  133. /etc/init.d/fail2ban start
  134. popd
  135. if [ -e "${python_install_dir}/bin/fail2ban-python" ]; then
  136. echo; echo "${CSUCCESS}fail2ban installed successfully! ${CEND}"
  137. else
  138. echo; echo "${CFAILURE}fail2ban install failed, Please try again! ${CEND}"
  139. fi
  140. popd
  141. }
  142. Uninstall_fail2ban() {
  143. /etc/init.d/fail2ban stop
  144. ${python_install_dir}/bin/pip uninstall -y fail2ban > /dev/null 2>&1
  145. rm -rf /etc/init.d/fail2ban /etc/fail2ban /etc/logrotate.d/fail2ban /var/log/fail2ban.* /var/run/fail2ban
  146. echo; echo "${CMSG}fail2ban uninstall completed${CEND}";
  147. }
  148. ACTION_FUN() {
  149. while :; do
  150. echo
  151. echo "Please select an action:"
  152. echo -e "\t${CMSG}1${CEND}. install"
  153. echo -e "\t${CMSG}2${CEND}. uninstall"
  154. read -p "Please input a number:(Default 1 press Enter) " ACTION
  155. [ -z "${ACTION}" ] && ACTION=1
  156. if [[ ! "${ACTION}" =~ ^[1,2]$ ]]; then
  157. echo "${CWARNING}input error! Please only input number 1~2${CEND}"
  158. else
  159. break
  160. fi
  161. done
  162. }
  163. while :;do
  164. printf "
  165. What Are You Doing?
  166. \t${CMSG} 1${CEND}. Install/Uninstall PHP opcode cache
  167. \t${CMSG} 2${CEND}. Install/Uninstall ZendGuardLoader/ionCube PHP Extension
  168. \t${CMSG} 3${CEND}. Install/Uninstall ImageMagick/GraphicsMagick PHP Extension
  169. \t${CMSG} 4${CEND}. Install/Uninstall fileinfo PHP Extension
  170. \t${CMSG} 5${CEND}. Install/Uninstall memcached/memcache
  171. \t${CMSG} 6${CEND}. Install/Uninstall Redis
  172. \t${CMSG} 7${CEND}. Install/Uninstall Let's Encrypt client
  173. \t${CMSG} 8${CEND}. Install/Uninstall swoole PHP Extension
  174. \t${CMSG} 9${CEND}. Install/Uninstall xdebug PHP Extension
  175. \t${CMSG}10${CEND}. Install/Uninstall PHP Composer
  176. \t${CMSG}11${CEND}. Install/Uninstall fail2ban
  177. \t${CMSG} q${CEND}. Exit
  178. "
  179. read -p "Please input the correct option: " Number
  180. if [[ ! "${Number}" =~ ^[1-9,q]$|^1[0-1]$ ]]; then
  181. echo "${CFAILURE}input error! Please only input 1~11 and q${CEND}"
  182. else
  183. case "${Number}" in
  184. 1)
  185. ACTION_FUN
  186. while :; do echo
  187. echo "Please select a opcode cache of the PHP:"
  188. echo -e "\t${CMSG}1${CEND}. Zend OPcache"
  189. echo -e "\t${CMSG}2${CEND}. XCache"
  190. echo -e "\t${CMSG}3${CEND}. APCU"
  191. echo -e "\t${CMSG}4${CEND}. eAccelerator"
  192. read -p "Please input a number:(Default 1 press Enter) " phpcache_option
  193. [ -z "${phpcache_option}" ] && phpcache_option=1
  194. if [[ ! "${phpcache_option}" =~ ^[1-4]$ ]]; then
  195. echo "${CWARNING}input error! Please only input number 1~4${CEND}"
  196. else
  197. case "${phpcache_option}" in
  198. 1)
  199. PHP_extension=opcache
  200. ;;
  201. 2)
  202. PHP_extension=xcache
  203. ;;
  204. 3)
  205. PHP_extension=apcu
  206. ;;
  207. 4)
  208. PHP_extension=eaccelerator
  209. ;;
  210. esac
  211. break
  212. fi
  213. done
  214. if [ "${ACTION}" = '1' ]; then
  215. Check_PHP_Extension
  216. case "${phpcache_option}" in
  217. 1)
  218. pushd ${oneinstack_dir}/src > /dev/null
  219. if [[ "${PHP_main_ver}" =~ ^5.[3-4]$ ]]; then
  220. src_url=https://pecl.php.net/get/zendopcache-${zendopcache_ver}.tgz && Download_src
  221. Install_ZendOPcache
  222. else
  223. src_url=http://www.php.net/distributions/php-${PHP_detail_ver}.tar.gz && Download_src
  224. Install_ZendOPcache
  225. fi
  226. popd
  227. Check_succ
  228. ;;
  229. 2)
  230. if [[ "${PHP_main_ver}" =~ ^5.[3-6]$ ]]; then
  231. while :; do
  232. read -p "Please input xcache admin password: " xcache_admin_pass
  233. (( ${#xcache_admin_pass} >= 5 )) && { xcache_admin_md5_pass=$(echo -n "${xcache_admin_pass}" | md5sum | awk '{print $1}') ; break ; } || echo "${CFAILURE}xcache admin password least 5 characters! ${CEND}"
  234. done
  235. checkDownload
  236. Install_XCache
  237. Check_succ
  238. else
  239. echo "${CWARNING}Your php does not support XCache! ${CEND}"; exit 1
  240. fi
  241. ;;
  242. 3)
  243. if [[ "${PHP_main_ver}" =~ ^5.[3-6]$|^7.[0-2]$ ]]; then
  244. checkDownload
  245. Install_APCU
  246. Check_succ
  247. else
  248. echo "${CWARNING}Your php does not support APCU! ${CEND}"; exit 1
  249. fi
  250. ;;
  251. 4)
  252. if [[ "${PHP_main_ver}" =~ ^5.[3-4]$ ]]; then
  253. checkDownload
  254. Install_eAccelerator
  255. Check_succ
  256. else
  257. echo "${CWARNING}Your php does not support eAccelerator! ${CEND}"; exit 1
  258. fi
  259. ;;
  260. esac
  261. else
  262. Uninstall_succ
  263. fi
  264. ;;
  265. 2)
  266. ACTION_FUN
  267. while :; do echo
  268. echo "Please select ZendGuardLoader/ionCube:"
  269. echo -e "\t${CMSG}1${CEND}. ZendGuardLoader"
  270. echo -e "\t${CMSG}2${CEND}. ionCube Loader"
  271. read -p "Please input a number:(Default 1 press Enter) " Loader
  272. [ -z "${Loader}" ] && Loader=1
  273. if [[ ! "${Loader}" =~ ^[1,2]$ ]]; then
  274. echo "${CWARNING}input error! Please only input number 1~2${CEND}"
  275. else
  276. [ "${Loader}" = '1' ] && PHP_extension=ZendGuardLoader
  277. [ "${Loader}" = '2' ] && PHP_extension=ioncube
  278. break
  279. fi
  280. done
  281. if [ "${ACTION}" = '1' ]; then
  282. Check_PHP_Extension
  283. if [ "${Loader}" = '1' ]; then
  284. if [[ "${PHP_main_ver}" =~ ^5.[3-6]$ ]] && [ "${armplatform}" != 'y' ]; then
  285. zendguardloader_yn='y' && checkDownload
  286. Install_ZendGuardLoader
  287. Check_succ
  288. else
  289. echo; echo "${CWARNING}Your php ${PHP_detail_ver} or platform ${TARGET_ARCH} does not support ${PHP_extension}! ${CEND}";
  290. fi
  291. elif [ "${Loader}" = '2' ]; then
  292. if [[ "${PHP_main_ver}" =~ ^5.[3-6]$|^7.[0-2]$ ]] || [ "${TARGET_ARCH}" != "arm64" ]; then
  293. ioncube_yn='y' && checkDownload
  294. Install_ionCube
  295. Restart_PHP; echo "${CSUCCESS}PHP ioncube module installed successfully! ${CEND}";
  296. else
  297. echo; echo "${CWARNING}Your php ${PHP_detail_ver} or platform ${TARGET_ARCH} does not support ${PHP_extension}! ${CEND}";
  298. fi
  299. fi
  300. else
  301. Uninstall_succ
  302. fi
  303. ;;
  304. 3)
  305. ACTION_FUN
  306. while :; do echo
  307. echo "Please select ImageMagick/GraphicsMagick:"
  308. echo -e "\t${CMSG}1${CEND}. ImageMagick"
  309. echo -e "\t${CMSG}2${CEND}. GraphicsMagick"
  310. read -p "Please input a number:(Default 1 press Enter) " magick_option
  311. [ -z "${magick_option}" ] && magick_option=1
  312. if [[ ! "${magick_option}" =~ ^[1,2]$ ]]; then
  313. echo "${CWARNING}input error! Please only input number 1~2${CEND}"
  314. else
  315. [ "${magick_option}" = '1' ] && PHP_extension=imagick
  316. [ "${magick_option}" = '2' ] && PHP_extension=gmagick
  317. break
  318. fi
  319. done
  320. if [ "${ACTION}" = '1' ]; then
  321. Check_PHP_Extension
  322. magick_yn=y && checkDownload
  323. if [ "${magick_option}" = '1' ]; then
  324. [ ! -d "/usr/local/imagemagick" ] && Install_ImageMagick
  325. Install_php-imagick
  326. Check_succ
  327. elif [ "${magick_option}" = '2' ]; then
  328. [ ! -d "/usr/local/graphicsmagick" ] && Install_GraphicsMagick
  329. Install_php-gmagick
  330. Check_succ
  331. fi
  332. else
  333. Uninstall_succ
  334. [ -d "/usr/local/imagemagick" ] && rm -rf /usr/local/imagemagick
  335. [ -d "/usr/local/graphicsmagick" ] && rm -rf /usr/local/graphicsmagick
  336. fi
  337. ;;
  338. 4)
  339. ACTION_FUN
  340. PHP_extension=fileinfo
  341. if [ "${ACTION}" = '1' ]; then
  342. Check_PHP_Extension
  343. pushd ${oneinstack_dir}/src > /dev/null
  344. src_url=http://www.php.net/distributions/php-${PHP_detail_ver}.tar.gz && Download_src
  345. tar xzf php-${PHP_detail_ver}.tar.gz
  346. pushd php-${PHP_detail_ver}/ext/fileinfo
  347. ${php_install_dir}/bin/phpize
  348. ./configure --with-php-config=${php_install_dir}/bin/php-config
  349. make -j ${THREAD} && make install
  350. popd;popd
  351. rm -rf php-${PHP_detail_ver}
  352. echo "extension=fileinfo.so" > ${php_install_dir}/etc/php.d/04-fileinfo.ini
  353. Check_succ
  354. else
  355. Uninstall_succ
  356. fi
  357. ;;
  358. 5)
  359. ACTION_FUN
  360. while :; do echo
  361. echo "Please select memcache/memcached PHP Extension:"
  362. echo -e "\t${CMSG}1${CEND}. memcache PHP Extension"
  363. echo -e "\t${CMSG}2${CEND}. memcached PHP Extension"
  364. echo -e "\t${CMSG}3${CEND}. memcache/memcached PHP Extension"
  365. read -p "Please input a number:(Default 1 press Enter) " Memcache
  366. [ -z "${Memcache}" ] && Memcache=1
  367. if [[ ! "${Memcache}" =~ ^[1-3]$ ]]; then
  368. echo "${CWARNING}input error! Please only input number 1~3${CEND}"
  369. else
  370. [ "${Memcache}" = '1' ] && PHP_extension=memcache
  371. [ "${Memcache}" = '2' ] && PHP_extension=memcached
  372. break
  373. fi
  374. done
  375. if [ "${ACTION}" = '1' ]; then
  376. memcached_yn=y && checkDownload
  377. case "${Memcache}" in
  378. 1)
  379. [ ! -d "${memcached_install_dir}/include/memcached" ] && Install_memcached
  380. Check_PHP_Extension
  381. Install_php-memcache
  382. Check_succ
  383. ;;
  384. 2)
  385. [ ! -d "${memcached_install_dir}/include/memcached" ] && Install_memcached
  386. Check_PHP_Extension
  387. Install_php-memcached
  388. Check_succ
  389. ;;
  390. 3)
  391. [ ! -d "${memcached_install_dir}/include/memcached" ] && Install_memcached
  392. PHP_extension=memcache && Check_PHP_Extension
  393. Install_php-memcache
  394. PHP_extension=memcached && Check_PHP_Extension
  395. Install_php-memcached
  396. [ -f "${phpExtensionDir}/memcache.so" -a "${phpExtensionDir}/memcached.so" ] && { Restart_PHP; echo;echo "${CSUCCESS}PHP memcache/memcached module installed successfully! ${CEND}"; }
  397. ;;
  398. esac
  399. else
  400. PHP_extension=memcache && Uninstall_succ
  401. PHP_extension=memcached && Uninstall_succ
  402. [ -e "${memcached_install_dir}" ] && { service memcached stop > /dev/null 2>&1; rm -rf ${memcached_install_dir} /etc/init.d/memcached /usr/bin/memcached; }
  403. fi
  404. ;;
  405. 6)
  406. ACTION_FUN
  407. PHP_extension=redis
  408. redis_yn=y && checkDownload
  409. if [ "${ACTION}" = '1' ]; then
  410. [ ! -d "${redis_install_dir}" ] && Install_redis-server
  411. Check_PHP_Extension
  412. Install_php-redis
  413. else
  414. Uninstall_succ
  415. [ -e "${redis_install_dir}" ] && { service redis-server stop > /dev/null 2>&1; rm -rf ${redis_install_dir} /etc/init.d/redis-server /usr/local/bin/redis-*; }
  416. fi
  417. ;;
  418. 7)
  419. ACTION_FUN
  420. if [ "${ACTION}" = '1' ]; then
  421. Install_letsencrypt
  422. else
  423. Uninstall_letsencrypt
  424. fi
  425. ;;
  426. 8)
  427. ACTION_FUN
  428. PHP_extension=swoole
  429. if [ "${ACTION}" = '1' ]; then
  430. Check_PHP_Extension
  431. pushd ${oneinstack_dir}/src > /dev/null
  432. if [[ "${PHP_main_ver}" =~ ^7\.[0-2]$ ]]; then
  433. src_url=https://pecl.php.net/get/swoole-${swoole_ver}.tgz && Download_src
  434. tar xzf swoole-${swoole_ver}.tgz
  435. pushd swoole-${swoole_ver}
  436. else
  437. src_url=https://pecl.php.net/get/swoole-1.10.1.tgz && Download_src
  438. tar xzf swoole-1.10.1.tgz
  439. pushd swoole-1.10.1
  440. fi
  441. ${php_install_dir}/bin/phpize
  442. ./configure --with-php-config=${php_install_dir}/bin/php-config
  443. make -j ${THREAD} && make install
  444. popd
  445. rm -rf swoole-${swoole_ver}
  446. popd
  447. echo 'extension=swoole.so' > ${php_install_dir}/etc/php.d/06-swoole.ini
  448. Check_succ
  449. else
  450. Uninstall_succ
  451. fi
  452. ;;
  453. 9)
  454. ACTION_FUN
  455. PHP_extension=xdebug
  456. if [ "${ACTION}" = '1' ]; then
  457. Check_PHP_Extension
  458. pushd ${oneinstack_dir}/src > /dev/null
  459. if [[ "${PHP_main_ver}" =~ ^7\.[0-2]$ ]]; then
  460. src_url=https://pecl.php.net/get/xdebug-${xdebug_ver}.tgz && Download_src
  461. src_url=http://mirrors.linuxeye.com/oneinstack/src/webgrind-master.zip && Download_src
  462. tar xzf xdebug-${xdebug_ver}.tgz
  463. unzip -q webgrind-master.zip
  464. /bin/mv webgrind-master ${wwwroot_dir}/default/webgrind
  465. pushd xdebug-${xdebug_ver}
  466. elif [[ "${PHP_main_ver}" =~ ^5\.[5-6]$ ]]; then
  467. src_url=https://pecl.php.net/get/xdebug-2.5.5.tgz && Download_src
  468. src_url=http://mirrors.linuxeye.com/oneinstack/src/webgrind-master.zip && Download_src
  469. tar xzf xdebug-2.5.5.tgz
  470. unzip -q webgrind-master.zip
  471. /bin/mv webgrind-master ${wwwroot_dir}/default/webgrind
  472. pushd xdebug-2.5.5
  473. else
  474. echo "${CWARNING}Need a PHP version >= 5.5.0 and <= 7.2.0${CEND}"
  475. exit 1
  476. fi
  477. ${php_install_dir}/bin/phpize
  478. ./configure --with-php-config=${php_install_dir}/bin/php-config
  479. make -j ${THREAD} && make install
  480. popd
  481. rm -rf xdebug-${xdebug_ver}
  482. popd
  483. [ ! -e /tmp/xdebug ] && { mkdir /tmp/xdebug; chown ${run_user}.${run_user} /tmp/xdebug; }
  484. [ ! -e /tmp/webgrind ] && { mkdir /tmp/webgrind; chown ${run_user}.${run_user} /tmp/webgrind; }
  485. chown -R ${run_user}.${run_user} ${wwwroot_dir}/default/webgrind
  486. sed -i 's@static $storageDir.*@static $storageDir = "/tmp/webgrind";@' ${wwwroot_dir}/default/webgrind/config.php
  487. sed -i 's@static $profilerDir.*@static $profilerDir = "/tmp/xdebug";@' ${wwwroot_dir}/default/webgrind/config.php
  488. cat > ${php_install_dir}/etc/php.d/08-xdebug.ini << EOF
  489. [xdebug]
  490. zend_extension=xdebug.so
  491. xdebug.trace_output_dir=/tmp/xdebug
  492. xdebug.profiler_output_dir = /tmp/xdebug
  493. xdebug.profiler_enable = On
  494. xdebug.profiler_enable_trigger = 1
  495. EOF
  496. Check_succ
  497. echo; echo "Webgrind URL: ${CMSG}http://{Public IP}/webgrind ${CEND}"
  498. else
  499. rm -rf /tmp/{xdebug,webgrind} ${wwwroot_dir}/default/webgrind
  500. Uninstall_succ
  501. fi
  502. ;;
  503. 10)
  504. ACTION_FUN
  505. if [ "${ACTION}" = '1' ]; then
  506. [ -e "/usr/local/bin/composer" ] && { echo "${CWARNING}PHP Composer already installed! ${CEND}"; exit 1; }
  507. if [ "$IPADDR_COUNTRY"x == "CN"x ]; then
  508. wget -c https://dl.laravel-china.org/composer.phar -O /usr/local/bin/composer > /dev/null 2>&1
  509. ${php_install_dir}/bin/php /usr/local/bin/composer config -g repo.packagist composer https://packagist.phpcomposer.com
  510. else
  511. wget -c https://getcomposer.org/composer.phar -O /usr/local/bin/composer > /dev/null 2>&1
  512. fi
  513. chmod +x /usr/local/bin/composer
  514. if [ -e "/usr/local/bin/composer" ]; then
  515. echo; echo "${CSUCCESS}Composer installed successfully! ${CEND}"
  516. else
  517. echo; echo "${CFAILURE}Composer install failed, Please try again! ${CEND}"
  518. fi
  519. else
  520. rm -rf /usr/local/bin/composer
  521. echo; echo "${CMSG}composer uninstall completed${CEND}";
  522. fi
  523. ;;
  524. 11)
  525. ACTION_FUN
  526. if [ "${ACTION}" = '1' ]; then
  527. Install_fail2ban
  528. else
  529. Uninstall_fail2ban
  530. fi
  531. ;;
  532. q)
  533. exit
  534. ;;
  535. esac
  536. fi
  537. done