addons.sh 17 KB

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