addons.sh 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483
  1. #!/bin/bash
  2. # Author: yeho <lj2007331 AT gmail.com>
  3. # BLOG: https://blog.linuxeye.com
  4. #
  5. # Notes: OneinStack for CentOS/RadHat 5+ Debian 6+ 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 5+ Debian 6+ 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. # get pwd
  22. sed -i "s@^oneinstack_dir.*@oneinstack_dir=$(pwd)@" ./options.conf
  23. . ./versions.txt
  24. . ./options.conf
  25. . ./include/color.sh
  26. . ./include/memory.sh
  27. . ./include/check_os.sh
  28. . ./include/check_download.sh
  29. . ./include/download.sh
  30. . ./include/get_char.sh
  31. . ./include/zendopcache.sh
  32. . ./include/xcache.sh
  33. . ./include/apcu.sh
  34. . ./include/eaccelerator.sh
  35. . ./include/ZendGuardLoader.sh
  36. . ./include/ioncube.sh
  37. . ./include/ImageMagick.sh
  38. . ./include/GraphicsMagick.sh
  39. . ./include/memcached.sh
  40. . ./include/redis.sh
  41. . ./include/python.sh
  42. # Check PHP
  43. if [ -e "${php_install_dir}/bin/phpize" ]; then
  44. phpExtensionDir=$(${php_install_dir}/bin/php-config --extension-dir)
  45. PHP_detail_version=$(${php_install_dir}/bin/php -r 'echo PHP_VERSION;')
  46. PHP_main_version=${PHP_detail_version%.*}
  47. case "${PHP_main_version}" in
  48. "5.3")
  49. PHP_version=1
  50. ;;
  51. "5.4")
  52. PHP_version=2
  53. ;;
  54. "5.5")
  55. PHP_version=3
  56. ;;
  57. "5.6")
  58. PHP_version=4
  59. ;;
  60. "7.0" | "7.1")
  61. PHP_version=5
  62. ;;
  63. *)
  64. echo "${CFAILURE}Your PHP version ${PHP_main_version} is not supported! ${CEND}"
  65. kill -9 $$
  66. ;;
  67. esac
  68. fi
  69. # Check PHP Extensions
  70. Check_PHP_Extension() {
  71. [ -e "${php_install_dir}/etc/php.d/ext-${PHP_extension}.ini" ] && { echo "${CWARNING}PHP ${PHP_extension} module already installed! ${CEND}"; exit 1; }
  72. }
  73. # restart PHP
  74. Restart_PHP() {
  75. [ -e "${apache_install_dir}/conf/httpd.conf" ] && /etc/init.d/httpd restart || /etc/init.d/php-fpm restart
  76. }
  77. # Check succ
  78. Check_succ() {
  79. [ -f "${phpExtensionDir}/${PHP_extension}.so" ] && { Restart_PHP; echo;echo "${CSUCCESS}PHP ${PHP_extension} module installed successfully! ${CEND}"; }
  80. }
  81. # Uninstall succ
  82. Uninstall_succ() {
  83. [ -e "${php_install_dir}/etc/php.d/ext-${PHP_extension}.ini" ] && { rm -rf ${php_install_dir}/etc/php.d/ext-${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}"; }
  84. }
  85. Install_letsencrypt() {
  86. [ ! -e "${python_install_dir}/bin/python" ] && Install_Python
  87. ${python_install_dir}/bin/pip install requests
  88. ${python_install_dir}/bin/pip install certbot
  89. if [ -e "${python_install_dir}/bin/certbot" ]; then
  90. echo; echo "${CSUCCESS}Let's Encrypt client installed successfully! ${CEND}"
  91. else
  92. echo; echo "${CFAILURE}Let's Encrypt client install failed, Please try again! ${CEND}"
  93. fi
  94. }
  95. Uninstall_letsencrypt() {
  96. ${python_install_dir}/bin/pip uninstall -y certbot > /dev/null 2>&1
  97. rm -rf /etc/letsencrypt /var/log/letsencrypt /var/lib/letsencrypt ${python_install_dir}
  98. [ "${OS}" == "CentOS" ] && Cron_file=/var/spool/cron/root || Cron_file=/var/spool/cron/crontabs/root
  99. [ -e "$Cron_file" ] && sed -i '/certbot/d' ${Cron_file}
  100. echo; echo "${CMSG}Let's Encrypt client uninstall completed${CEND}";
  101. }
  102. Install_fail2ban() {
  103. [ ! -e "${python_install_dir}/bin/python" ] && Install_Python
  104. pushd ${oneinstack_dir}/src
  105. src_url=http://mirrors.linuxeye.com/oneinstack/src/fail2ban-${fail2ban_version}.tar.gz && Download_src
  106. tar xzf fail2ban-${fail2ban_version}.tar.gz
  107. pushd fail2ban-${fail2ban_version}
  108. ${python_install_dir}/bin/python setup.py install
  109. if [ "${OS}" == "CentOS" ]; then
  110. LOGPATH=/var/log/secure
  111. /bin/cp files/redhat-initd /etc/init.d/fail2ban
  112. sed -i "s@^FAIL2BAN=.*@FAIL2BAN=${python_install_dir}/bin/fail2ban-client@" /etc/init.d/fail2ban
  113. sed -i 's@Starting fail2ban.*@&\n [ ! -e "/var/run/fail2ban" ] \&\& mkdir /var/run/fail2ban@' /etc/init.d/fail2ban
  114. chmod +x /etc/init.d/fail2ban
  115. chkconfig --add fail2ban
  116. chkconfig fail2ban on
  117. fi
  118. if [[ "${OS}" =~ ^Ubuntu$|^Debian$ ]]; then
  119. LOGPATH=/var/log/auth.log
  120. /bin/cp files/debian-initd /etc/init.d/fail2ban
  121. sed -i 's@2 3 4 5@3 4 5@' /etc/init.d/fail2ban
  122. sed -i "s@^DAEMON=.*@DAEMON=${python_install_dir}/bin/\$NAME-client@" /etc/init.d/fail2ban
  123. chmod +x /etc/init.d/fail2ban
  124. update-rc.d fail2ban defaults
  125. fi
  126. [ -z "`grep ^Port /etc/ssh/sshd_config`" ] && ssh_port=22 || ssh_port=`grep ^Port /etc/ssh/sshd_config | awk '{print $2}'`
  127. cat > /etc/fail2ban/jail.local << EOF
  128. [DEFAULT]
  129. ignoreip = 127.0.0.1/8
  130. bantime = 86400
  131. findtime = 600
  132. maxretry = 5
  133. [ssh-iptables]
  134. enabled = true
  135. filter = sshd
  136. action = iptables[name=SSH, port=$ssh_port, protocol=tcp]
  137. logpath = $LOGPATH
  138. EOF
  139. cat > /etc/logrotate.d/fail2ban << EOF
  140. /var/log/fail2ban.log {
  141. missingok
  142. notifempty
  143. postrotate
  144. ${python_install_dir}/bin/fail2ban-client flushlogs >/dev/null || true
  145. endscript
  146. }
  147. EOF
  148. sed -i 's@^iptables = iptables.*@iptables = iptables@' /etc/fail2ban/action.d/iptables-common.conf
  149. kill -9 `ps -ef | grep fail2ban | grep -v grep | awk '{print $2}'` > /dev/null 2>&1
  150. /etc/init.d/fail2ban start
  151. popd
  152. if [ -e "${python_install_dir}/bin/fail2ban-python" ]; then
  153. echo; echo "${CSUCCESS}fail2ban installed successfully! ${CEND}"
  154. else
  155. echo; echo "${CFAILURE}fail2ban install failed, Please try again! ${CEND}"
  156. fi
  157. popd
  158. }
  159. Uninstall_fail2ban() {
  160. /etc/init.d/fail2ban stop
  161. ${python_install_dir}/bin/pip uninstall -y fail2ban > /dev/null 2>&1
  162. rm -rf /etc/init.d/fail2ban /etc/fail2ban /etc/logrotate.d/fail2ban /var/log/fail2ban.* /var/run/fail2ban
  163. echo; echo "${CMSG}fail2ban uninstall completed${CEND}";
  164. }
  165. ACTION_FUN() {
  166. while :; do
  167. echo
  168. echo "Please select an action:"
  169. echo -e "\t${CMSG}1${CEND}. install"
  170. echo -e "\t${CMSG}2${CEND}. uninstall"
  171. read -p "Please input a number:(Default 1 press Enter) " ACTION
  172. [ -z "${ACTION}" ] && ACTION=1
  173. if [[ ! "${ACTION}" =~ ^[1,2]$ ]]; then
  174. echo "${CWARNING}input error! Please only input number 1,2${CEND}"
  175. else
  176. break
  177. fi
  178. done
  179. }
  180. while :;do
  181. printf "
  182. What Are You Doing?
  183. \t${CMSG}1${CEND}. Install/Uninstall PHP opcode cache
  184. \t${CMSG}2${CEND}. Install/Uninstall ZendGuardLoader/ionCube PHP Extension
  185. \t${CMSG}3${CEND}. Install/Uninstall ImageMagick/GraphicsMagick PHP Extension
  186. \t${CMSG}4${CEND}. Install/Uninstall fileinfo PHP Extension
  187. \t${CMSG}5${CEND}. Install/Uninstall memcached/memcache
  188. \t${CMSG}6${CEND}. Install/Uninstall Redis
  189. \t${CMSG}7${CEND}. Install/Uninstall Let's Encrypt client
  190. \t${CMSG}8${CEND}. Install/Uninstall fail2ban
  191. \t${CMSG}q${CEND}. Exit
  192. "
  193. read -p "Please input the correct option: " Number
  194. if [[ ! "${Number}" =~ ^[1-8,q]$ ]]; then
  195. echo "${CFAILURE}input error! Please only input 1 ~ 8 and q${CEND}"
  196. else
  197. case "${Number}" in
  198. 1)
  199. ACTION_FUN
  200. while :; do echo
  201. echo "Please select a opcode cache of the PHP:"
  202. echo -e "\t${CMSG}1${CEND}. Zend OPcache"
  203. echo -e "\t${CMSG}2${CEND}. XCache"
  204. echo -e "\t${CMSG}3${CEND}. APCU"
  205. echo -e "\t${CMSG}4${CEND}. eAccelerator"
  206. read -p "Please input a number:(Default 1 press Enter) " PHP_cache
  207. [ -z "${PHP_cache}" ] && PHP_cache=1
  208. if [[ ! "${PHP_cache}" =~ ^[1-4]$ ]]; then
  209. echo "${CWARNING}input error! Please only input number 1,2,3,4${CEND}"
  210. else
  211. case "${PHP_cache}" in
  212. 1)
  213. PHP_extension=opcache
  214. ;;
  215. 2)
  216. PHP_extension=xcache
  217. ;;
  218. 3)
  219. PHP_extension=apcu
  220. ;;
  221. 4)
  222. PHP_extension=eaccelerator
  223. ;;
  224. esac
  225. break
  226. fi
  227. done
  228. if [ "${ACTION}" = '1' ]; then
  229. Check_PHP_Extension
  230. if [ -e ${php_install_dir}/etc/php.d/ext-ZendGuardLoader.ini ]; then
  231. echo; echo "${CWARNING}You have to install ZendGuardLoader, You need to uninstall it before install ${PHP_extension}! ${CEND}"; echo; exit 1
  232. else
  233. case "${PHP_cache}" in
  234. 1)
  235. pushd ${oneinstack_dir}/src
  236. if [[ "${PHP_main_version}" =~ ^5.[3-4]$ ]]; then
  237. src_url=https://pecl.php.net/get/zendopcache-${zendopcache_version}.tgz && Download_src
  238. Install_ZendOPcache
  239. else
  240. src_url=http://www.php.net/distributions/php-${PHP_detail_version}.tar.gz && Download_src
  241. Install_ZendOPcache
  242. fi
  243. popd
  244. Check_succ
  245. ;;
  246. 2)
  247. if [[ ${PHP_main_version} =~ ^5.[3-6]$ ]]; then
  248. while :; do
  249. read -p "Please input xcache admin password: " xcache_admin_pass
  250. (( ${#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}"
  251. done
  252. checkDownload
  253. Install_XCache
  254. Check_succ
  255. else
  256. echo "${CWARNING}Your php does not support XCache! ${CEND}"; exit 1
  257. fi
  258. ;;
  259. 3)
  260. if [[ "${PHP_main_version}" =~ ^5.[3-6]$|^7.[0-1]$ ]]; then
  261. checkDownload
  262. Install_APCU
  263. Check_succ
  264. else
  265. echo "${CWARNING}Your php does not support APCU! ${CEND}"; exit 1
  266. fi
  267. ;;
  268. 4)
  269. if [[ "${PHP_main_version}" =~ ^5.[3-4]$ ]]; then
  270. checkDownload
  271. Install_eAccelerator
  272. Check_succ
  273. else
  274. echo "${CWARNING}Your php does not support eAccelerator! ${CEND}"; exit 1
  275. fi
  276. ;;
  277. esac
  278. fi
  279. else
  280. Uninstall_succ
  281. fi
  282. ;;
  283. 2)
  284. ACTION_FUN
  285. while :; do echo
  286. echo "Please select ZendGuardLoader/ionCube:"
  287. echo -e "\t${CMSG}1${CEND}. ZendGuardLoader"
  288. echo -e "\t${CMSG}2${CEND}. ionCube Loader"
  289. read -p "Please input a number:(Default 1 press Enter) " Loader
  290. [ -z "${Loader}" ] && Loader=1
  291. if [[ ! "${Loader}" =~ ^[1,2]$ ]]; then
  292. echo "${CWARNING}input error! Please only input number 1,2${CEND}"
  293. else
  294. [ "${Loader}" = '1' ] && PHP_extension=ZendGuardLoader
  295. [ "${Loader}" = '2' ] && PHP_extension=0ioncube
  296. break
  297. fi
  298. done
  299. if [ "${ACTION}" = '1' ]; then
  300. Check_PHP_Extension
  301. if [ "${Loader}" = '1' ]; then
  302. if [[ "${PHP_main_version}" =~ ^5.[3-6]$ ]] || [ "${armPlatform}" != 'y' ]; then
  303. if [ -e ${php_install_dir}/etc/php.d/ext-opcache.ini ]; then
  304. echo; echo "${CWARNING}You have to install OpCache, You need to uninstall it before install ZendGuardLoader! ${CEND}"; echo; exit 1
  305. else
  306. ZendGuardLoader_yn='y' && checkDownload
  307. Install_ZendGuardLoader
  308. Check_succ
  309. fi
  310. else
  311. echo; echo "${CWARNING}Your php ${PHP_detail_version} or platform ${TARGET_ARCH} does not support ${PHP_extension}! ${CEND}";
  312. fi
  313. elif [ "${Loader}" = '2' ]; then
  314. if [[ "${PHP_main_version}" =~ ^5.[3-6]$|^7.0$ ]] || [ "${TARGET_ARCH}" != "arm64" ]; then
  315. ionCube_yn='y' && checkDownload
  316. Install_ionCube
  317. Restart_PHP; echo "${CSUCCESS}PHP ioncube module installed successfully! ${CEND}";
  318. else
  319. echo; echo "${CWARNING}Your php ${PHP_detail_version} or platform ${TARGET_ARCH} does not support ${PHP_extension}! ${CEND}";
  320. fi
  321. fi
  322. else
  323. Uninstall_succ
  324. fi
  325. ;;
  326. 3)
  327. ACTION_FUN
  328. while :; do echo
  329. echo "Please select ImageMagick/GraphicsMagick:"
  330. echo -e "\t${CMSG}1${CEND}. ImageMagick"
  331. echo -e "\t${CMSG}2${CEND}. GraphicsMagick"
  332. read -p "Please input a number:(Default 1 press Enter) " Magick
  333. [ -z "${Magick}" ] && Magick=1
  334. if [[ ! "${Magick}" =~ ^[1,2]$ ]]; then
  335. echo "${CWARNING}input error! Please only input number 1,2${CEND}"
  336. else
  337. [ "${Magick}" = '1' ] && PHP_extension=imagick
  338. [ "${Magick}" = '2' ] && PHP_extension=gmagick
  339. break
  340. fi
  341. done
  342. if [ "${ACTION}" = '1' ]; then
  343. Check_PHP_Extension
  344. Magick_yn=y && checkDownload
  345. if [ "${Magick}" = '1' ]; then
  346. [ ! -d "/usr/local/imagemagick" ] && Install_ImageMagick
  347. Install_php-imagick
  348. Check_succ
  349. elif [ "${Magick}" = '2' ]; then
  350. [ ! -d "/usr/local/graphicsmagick" ] && Install_GraphicsMagick
  351. Install_php-gmagick
  352. Check_succ
  353. fi
  354. else
  355. Uninstall_succ
  356. [ -d "/usr/local/imagemagick" ] && rm -rf /usr/local/imagemagick
  357. [ -d "/usr/local/graphicsmagick" ] && rm -rf /usr/local/graphicsmagick
  358. fi
  359. ;;
  360. 4)
  361. ACTION_FUN
  362. PHP_extension=fileinfo
  363. if [ "${ACTION}" = '1' ]; then
  364. Check_PHP_Extension
  365. pushd ${oneinstack_dir}/src
  366. src_url=http://www.php.net/distributions/php-${PHP_detail_version}.tar.gz && Download_src
  367. tar xzf php-${PHP_detail_version}.tar.gz
  368. pushd php-${PHP_detail_version}/ext/fileinfo
  369. ${php_install_dir}/bin/phpize
  370. ./configure --with-php-config=${php_install_dir}/bin/php-config
  371. make -j ${THREAD} && make install
  372. popd;popd
  373. rm -rf php-${PHP_detail_version}
  374. echo "extension=fileinfo.so" > ${php_install_dir}/etc/php.d/ext-fileinfo.ini
  375. Check_succ
  376. else
  377. Uninstall_succ
  378. fi
  379. ;;
  380. 5)
  381. ACTION_FUN
  382. while :; do echo
  383. echo "Please select memcache/memcached PHP Extension:"
  384. echo -e "\t${CMSG}1${CEND}. memcache PHP Extension"
  385. echo -e "\t${CMSG}2${CEND}. memcached PHP Extension"
  386. echo -e "\t${CMSG}3${CEND}. memcache/memcached PHP Extension"
  387. read -p "Please input a number:(Default 1 press Enter) " Memcache
  388. [ -z "${Memcache}" ] && Memcache=1
  389. if [[ ! "${Memcache}" =~ ^[1-3]$ ]]; then
  390. echo "${CWARNING}input error! Please only input number 1,2,3${CEND}"
  391. else
  392. [ "${Memcache}" = '1' ] && PHP_extension=memcache
  393. [ "${Memcache}" = '2' ] && PHP_extension=memcached
  394. break
  395. fi
  396. done
  397. if [ "${ACTION}" = '1' ]; then
  398. memcached_yn=y && checkDownload
  399. case "${Memcache}" in
  400. 1)
  401. [ ! -d "${memcached_install_dir}/include/memcached" ] && Install_memcached
  402. Check_PHP_Extension
  403. Install_php-memcache
  404. Check_succ
  405. ;;
  406. 2)
  407. [ ! -d "${memcached_install_dir}/include/memcached" ] && Install_memcached
  408. Check_PHP_Extension
  409. Install_php-memcached
  410. Check_succ
  411. ;;
  412. 3)
  413. [ ! -d "${memcached_install_dir}/include/memcached" ] && Install_memcached
  414. PHP_extension=memcache && Check_PHP_Extension
  415. Install_php-memcache
  416. PHP_extension=memcached && Check_PHP_Extension
  417. Install_php-memcached
  418. [ -f "${phpExtensionDir}/memcache.so" -a "${phpExtensionDir}/memcached.so" ] && { Restart_PHP; echo;echo "${CSUCCESS}PHP memcache/memcached module installed successfully! ${CEND}"; }
  419. ;;
  420. esac
  421. else
  422. PHP_extension=memcache && Uninstall_succ
  423. PHP_extension=memcached && Uninstall_succ
  424. [ -e "${memcached_install_dir}" ] && { service memcached stop > /dev/null 2>&1; rm -rf ${memcached_install_dir} /etc/init.d/memcached /usr/bin/memcached; }
  425. fi
  426. ;;
  427. 6)
  428. ACTION_FUN
  429. PHP_extension=redis
  430. redis_yn=y && checkDownload
  431. if [ "${ACTION}" = '1' ]; then
  432. [ ! -d "${redis_install_dir}" ] && Install_redis-server
  433. Check_PHP_Extension
  434. Install_php-redis
  435. else
  436. Uninstall_succ
  437. [ -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-*; }
  438. fi
  439. ;;
  440. 7)
  441. ACTION_FUN
  442. if [ "${ACTION}" = '1' ]; then
  443. Install_letsencrypt
  444. else
  445. Uninstall_letsencrypt
  446. fi
  447. ;;
  448. 8)
  449. ACTION_FUN
  450. if [ "${ACTION}" = '1' ]; then
  451. Install_fail2ban
  452. else
  453. Uninstall_fail2ban
  454. fi
  455. ;;
  456. q)
  457. exit
  458. ;;
  459. esac
  460. fi
  461. done