stack 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714
  1. #!/bin/bash
  2. # Server Stack Manager
  3. # Syntax: stack <option> <arguments>
  4. # Options: -html, -nginx, -php, -lemp, -mysql, -info, -purge-server-all, -php-ver, -mysql-ver, -letsencrypt, -backups, -postfix, -redis, -memcached, -pma
  5. # Arguments: -purge, -build
  6. source /opt/webinoly/lib/install
  7. check_for_parameters $@
  8. api-events_update sts
  9. # Build parameter validation!
  10. [[ $build =~ ^(light|basic)$ ]] || unset build
  11. # FORCE - Unattended Purge
  12. clear_force_flag() {
  13. [[ $(conf_read force-flag) == "true" ]] && conf_delete force-flag
  14. }
  15. if [[ ${purge,,} == "force" || ${purge_server_all,,} == "force" || ${php,,} == "force" ]]; then
  16. conf_write force-flag true
  17. force="1"
  18. fi
  19. purge_mysql_client() {
  20. local mysqlver=$(conf_read mysql-ver)
  21. sudo apt -y purge mariadb-client
  22. echo | sudo add-apt-repository --remove "http://mirrors.syringanetworks.net/mariadb/repo/${mysqlver}/ubuntu"
  23. sudo apt-key del 0xF1656F24C74CD1D8
  24. conf_write mysql-client purged
  25. }
  26. #############################################
  27. ######## Delete/Purge some stack ########
  28. #############################################
  29. if [[ -n $purge && ( -n $html || -n $nginx ) ]]; then
  30. api-events_update pn1
  31. if [[ $(conf_read nginx) != "true" ]]; then
  32. echo "${dim}Nginx is not installed, hence can not be deleted! ${end}"
  33. clear_force_flag
  34. else
  35. if [[ $(conf_read force-flag) != "true" ]]; then
  36. echo ""
  37. echo "${red}¡ C A U T I O N ! You are about to remove NGINX from your server!"
  38. [[ $(conf_read mysql-tool-pma) == "true" ]] && echo "phpMyAdmin will be removed too because depends on Nginx."
  39. echo ""
  40. echo " ${blu}Are you sure [y/N]? ${end}"
  41. while read -r -n 1 -s answer; do
  42. answer=${answer:-n}
  43. [[ $answer = [YyNn] ]] && break
  44. done
  45. fi
  46. if [[ $answer == [Yy] || $(conf_read force-flag) == "true" ]]; then
  47. if [[ $(conf_read force-flag) == "true" && $force == 1 ]]; then
  48. answer="Y"
  49. else
  50. echo ""
  51. echo "${blu}Do you want to delete your sites data directory (/var/www) [Y/n]? ${end}"
  52. while read -r -n 1 -s answer; do
  53. answer=${answer:-y}
  54. [[ $answer = [YyNn] ]] && break
  55. done
  56. fi
  57. if [[ $answer == [Yy] ]]; then
  58. api-events_update pn2
  59. site -delete-all=force
  60. fi
  61. # Remove tools-site
  62. [[ $(conf_read mysql-tool-pma) == "true" ]] && stack -pma -purge=force
  63. sudo rm -rf /var/www/html
  64. sudo rm -rf /var/www/$(conf_read tools-port)
  65. conf_delete tools-site -commented
  66. [[ $(conf_read login-www-data) == "true" ]] && webinoly -login-www-data=off
  67. [[ $(conf_read nginx-tool-ssl) == "true" ]] && stack -letsencrypt -purge=force
  68. [[ $(conf_read nginx-tool-bkp) == "true" ]] && stack -backups -purge=force
  69. purge_autoremove="true"
  70. sudo systemctl stop nginx
  71. sudo apt -y purge nginx nginx-common # Common package is no longer installed, but we purge it in case of old stacks built before 1.14.0.
  72. # APT-KEY deprecated in 22.04
  73. if [[ $(lsb_release -c | cut -d':' -f 2 | xargs) =~ ^(bionic|focal)$ ]]; then
  74. if [[ $(conf_read nginx-ppa) == "mainline" ]]; then
  75. echo | sudo add-apt-repository --remove "deb https://nginx.org/packages/mainline/ubuntu/ $(check_osname) nginx"
  76. else
  77. echo | sudo add-apt-repository --remove "deb https://nginx.org/packages/ubuntu/ $(check_osname) nginx"
  78. fi
  79. sudo apt-key del 7BD9BF62
  80. else
  81. sudo rm -rf /usr/share/keyrings/nginx-archive-keyring.gpg
  82. sudo rm -rf /etc/apt/sources.list.d/nginx.list
  83. fi
  84. # Remove SSL Cron
  85. if [[ -f /var/spool/cron/crontabs/root ]]; then
  86. sudo sed -i '/MAILTO=/d' /var/spool/cron/crontabs/root
  87. sudo sed -i '/certbot renew/d' /var/spool/cron/crontabs/root
  88. fi
  89. [ -L $CURRENT_HOME/www ] && sudo rm $CURRENT_HOME/www
  90. [ -L $CURRENT_HOME/sites-available ] && sudo rm $CURRENT_HOME/sites-available
  91. # Remove sources
  92. sudo rm -rf /opt/webinoly/templates/source/default
  93. sudo rm -rf /opt/webinoly/templates/source/nginx.conf
  94. api-events_update pn6
  95. linux_purge
  96. conf_write nginx purged
  97. conf_write nginx-optim purged
  98. conf_delete server-version
  99. echo ""
  100. echo "${gre}Nginx has been deleted successfully! ${end}"
  101. echo ""
  102. else
  103. echo ""
  104. echo " ${gre}Action aborted!!! ${end}"
  105. echo ""
  106. fi
  107. echo ""
  108. fi
  109. elif [[ -n $purge && -n $php ]]; then
  110. api-events_update pp1
  111. if [[ $(conf_read php) != "true" ]]; then
  112. echo "${dim}PHP is not installed, hence can not be deleted! ${end}"
  113. clear_force_flag
  114. else
  115. if [[ $(conf_read force-flag) != "true" ]]; then
  116. echo ""
  117. echo "${red}¡ C A U T I O N ! You are about to remove PHP from your server!"
  118. echo "This action will also remove phpMyAdmin if its installed because depends on PHP. ${end}"
  119. echo ""
  120. echo " ${blu}Are you sure [y/N]? ${end}"
  121. while read -r -n 1 -s answer; do
  122. answer=${answer:-n}
  123. [[ $answer = [YyNn] ]] && break
  124. done
  125. fi
  126. if [[ $answer == [Yy] || $(conf_read force-flag) == "true" ]]; then
  127. [[ $(conf_read mysql-tool-pma) == "true" ]] && stack -pma -purge=force
  128. [[ $(conf_read smtp) == "true" ]] && webinoly -smtp -purge
  129. [[ $(conf_read php-tool-postfix) == "true" ]] && stack -postfix -purge=force
  130. [[ $(conf_read php-tool-redis) == "true" ]] && stack -redis -purge=force
  131. [[ $(conf_read php-tool-memcached) == "true" ]] && stack -memcached -purge=force
  132. purge_autoremove="true"
  133. ver=$(conf_read php-ver)
  134. sudo systemctl stop php${ver}-fpm
  135. sudo apt -y purge php${ver}-common php${ver}-cli php${ver}-fpm php${ver}-curl php${ver}-gd php${ver}-imap php${ver}-readline php${ver}-mysql php${ver}-mbstring php${ver}-bcmath php${ver}-mysql php${ver}-opcache php${ver}-zip php${ver}-xml php${ver}-soap php${ver}-imagick php${ver}-msgpack php${ver}-igbinary php${ver}-intl php-pear graphviz ghostscript
  136. # For old packages - before ondrej split modules
  137. sudo apt -y purge php-imagick php-msgpack
  138. # APT-KEY deprecated in 22.04
  139. if [[ $(lsb_release -c | cut -d':' -f 2 | xargs) =~ ^(bionic|focal)$ ]]; then
  140. echo | sudo add-apt-repository --remove 'ppa:ondrej/php'
  141. sudo apt-key del E5267A6C #ondrej
  142. else
  143. sudo rm -rf /etc/apt/trusted.gpg.d/ondrej-ubuntu-php.gpg*
  144. sudo rm -rf /etc/apt/sources.list.d/ondrej-ubuntu-php-$(check_osname).list*
  145. fi
  146. # Remove sources
  147. sudo rm -rf /etc/php
  148. sudo rm -rf /opt/webinoly/templates/source/php.ini
  149. sudo rm -rf /opt/webinoly/templates/source/www.conf
  150. sudo rm -rf /opt/webinoly/templates/source/php-fpm.conf
  151. sudo rm -rf /opt/webinoly/templates/source/main.cf
  152. # Remove tools-site
  153. if [[ -d /var/www/$(conf_read tools-port)/htdocs ]]; then
  154. sudo rm -rf /var/www/$(conf_read tools-port)/htdocs/status
  155. sudo rm -rf /var/www/$(conf_read tools-port)/htdocs/ping
  156. sudo rm -rf /var/www/$(conf_read tools-port)/htdocs/php
  157. fi
  158. conf_write php purged
  159. conf_write php-optim purged
  160. echo ""
  161. echo "${gre}PHP has been deleted successfully! ${end}"
  162. echo ""
  163. else
  164. echo ""
  165. echo " ${gre}Action aborted!!! ${end}"
  166. echo ""
  167. fi
  168. echo ""
  169. api-events_update pp8
  170. fi
  171. elif [[ -n $purge && -n $mysql ]]; then
  172. api-events_update pm1
  173. if [[ $(conf_read mysql) != "true" && $(conf_read mysql-client) == "true" ]]; then
  174. purge_mysql_client
  175. echo "${dim}MySQL is not installed, hence can not be deleted! ${end}"
  176. echo "${gre}MySQL-Client has been deleted successfully! ${end}"
  177. elif [[ $(conf_read mysql) != "true" ]]; then
  178. echo "${dim}MySQL is not installed, hence can not be deleted! ${end}"
  179. else
  180. if [[ $(conf_read force-flag) != "true" ]]; then
  181. echo ""
  182. echo "${red}¡ C A U T I O N ! You are about to remove MySQL from your server! ${end}"
  183. [[ $mysql == "keep-data" ]] && echo "${blu}${bol}The keep-data option is enabled, it is recommended to make a backup of all the databases before removing and reinstalling MySQL (MariaDB).${end}"
  184. echo ""
  185. echo " ${blu}Are you sure [y/N]? ${end}"
  186. while read -r -n 1 -s answer; do
  187. answer=${answer:-n}
  188. [[ $answer = [YyNn] ]] && break
  189. done
  190. fi
  191. if [[ $answer == [Yy] || $(conf_read force-flag) == "true" ]]; then
  192. [[ $(conf_read mysql-tool-pma) == "true" ]] && stack -pma -purge=force
  193. mysqlver=$(conf_read mysql-ver)
  194. sudo systemctl stop mysql
  195. if [[ $mysql == "keep-data" ]]; then
  196. echo "mariadb-server-${mysqlver} mariadb-server-${mysqlver}/postrm_remove_databases boolean false" | debconf-set-selections
  197. else
  198. echo "mariadb-server-${mysqlver} mariadb-server-${mysqlver}/postrm_remove_databases boolean true" | debconf-set-selections
  199. fi
  200. # Purge is better, instead of remove even when keep-data is enabled, it prevents warnings during reinstallation.
  201. sudo apt -y purge mariadb-server mariadb-common mysql-common
  202. purge_mysql_client
  203. echo | sudo add-apt-repository --remove "http://mirrors.syringanetworks.net/mariadb/repo/${mysqlver}/ubuntu"
  204. purge_autoremove="true"
  205. if [[ $mysql != "keep-data" ]]; then
  206. sudo rm -rf /etc/mysql
  207. sudo rm -rf /var/lib/mysql
  208. sudo rm -rf /usr/share/mysql
  209. conf_delete mysql-root
  210. conf_delete mysql-admin
  211. else
  212. echo "${blu}MySQL data was not removed.${end}"
  213. fi
  214. conf_write mysql purged
  215. echo ""
  216. echo "${gre}MySQL has been deleted successfully! ${end}"
  217. echo ""
  218. else
  219. echo ""
  220. echo " ${gre}Action aborted!!! ${end}"
  221. echo ""
  222. fi
  223. echo ""
  224. api-events_update pm4
  225. fi
  226. elif [[ -n $purge && -n $letsencrypt ]]; then
  227. api-events_update pn3
  228. if [[ $(conf_read nginx-tool-ssl) != "true" ]]; then
  229. echo "${dim}Let's Encrypt is not installed, hence can not be deleted! ${end}"
  230. clear_force_flag
  231. else
  232. if [[ $(conf_read force-flag) != "true" ]]; then
  233. echo ""
  234. echo "${red}¡ C A U T I O N ! You are about to remove Let's Encrypt from your server! ${end}"
  235. echo ""
  236. echo " ${blu}Are you sure [y/N]? ${end} "
  237. while read -r -n 1 -s answer; do
  238. answer=${answer:-n}
  239. [[ $answer = [YyNn] ]] && break
  240. done
  241. fi
  242. if [[ $answer == [Yy] || $(conf_read force-flag) == "true" ]]; then
  243. sudo snap remove certbot
  244. [[ -L /usr/bin/certbot ]] && sudo rm -rf /usr/bin/certbot
  245. conf_write nginx-tool-ssl purged
  246. echo ""
  247. echo "${gre}Let's Encrypt has been deleted successfully! ${end}"
  248. echo ""
  249. else
  250. echo ""
  251. echo " ${gre}Action aborted!!! ${end}"
  252. echo ""
  253. fi
  254. echo ""
  255. api-events_update pn4
  256. fi
  257. elif [[ -n $purge && -n $backups ]]; then
  258. api-events_update pn5
  259. if [[ $(conf_read nginx-tool-bkp) != "true" ]]; then
  260. echo "${dim}BackUp packages are not installed, hence can not be deleted! ${end}"
  261. clear_force_flag
  262. else
  263. if [[ $(conf_read force-flag) != "true" ]]; then
  264. echo ""
  265. echo "${red}¡ C A U T I O N ! You are about to remove BackUp packages from your server! ${end}"
  266. echo ""
  267. echo " ${blu}Are you sure [y/N]? ${end} "
  268. while read -r -n 1 -s answer; do
  269. answer=${answer:-n}
  270. [[ $answer = [YyNn] ]] && break
  271. done
  272. fi
  273. if [[ $answer == [Yy] || $(conf_read force-flag) == "true" ]]; then
  274. # Remove duply profiles
  275. if [[ -d $HOME/.duply ]]; then
  276. sudo rm -rf $HOME/.duply
  277. echo "${gre}${dim}Backup (duply) profiles deleted!${end}"
  278. fi
  279. [[ -z $(conf_read bkp-source-tmp) ]] && sudo snap remove duplicity || sudo pip3 uninstall -y duplicity 2>&1 | grep -v "pip as the 'root' user"
  280. sudo apt -y purge python3-boto3
  281. sudo rm -rf /usr/bin/duply
  282. purge_autoremove="true"
  283. conf_write nginx-tool-bkp purged
  284. echo ""
  285. echo "${gre}BackUp packages have been deleted successfully! ${end}"
  286. echo ""
  287. else
  288. echo ""
  289. echo " ${gre}Action aborted!!! ${end}"
  290. echo ""
  291. fi
  292. echo ""
  293. api-events_update pn6
  294. fi
  295. elif [[ -n $purge && -n $postfix ]]; then
  296. api-events_update pp2
  297. if [[ $(conf_read php-tool-postfix) != "true" ]]; then
  298. echo "${dim}Postfix is not installed, hence can not be deleted! ${end}"
  299. clear_force_flag
  300. else
  301. if [[ $(conf_read force-flag) != "true" ]]; then
  302. echo ""
  303. echo "${red}¡ C A U T I O N ! You are about to remove Postfix from your server! ${end}"
  304. echo ""
  305. echo " ${blu}Are you sure [y/N]? ${end} "
  306. while read -r -n 1 -s answer; do
  307. answer=${answer:-n}
  308. [[ $answer = [YyNn] ]] && break
  309. done
  310. fi
  311. if [[ $answer == [Yy] || $(conf_read force-flag) == "true" ]]; then
  312. sudo apt -y purge postfix
  313. purge_autoremove="true"
  314. conf_write php-tool-postfix purged
  315. echo ""
  316. echo "${gre}Postfix has been deleted successfully! ${end}"
  317. echo ""
  318. else
  319. echo ""
  320. echo " ${gre}Action aborted!!! ${end}"
  321. echo ""
  322. fi
  323. echo ""
  324. api-events_update pp3
  325. fi
  326. elif [[ -n $purge && -n $redis ]]; then
  327. api-events_update pp4
  328. if [[ $(conf_read php-tool-redis) != "true" ]]; then
  329. echo "${dim}Redis is not installed, hence can not be deleted! ${end}"
  330. clear_force_flag
  331. else
  332. if [[ $(conf_read force-flag) != "true" ]]; then
  333. echo ""
  334. echo "${red}¡ C A U T I O N ! You are about to remove Redis from your server! ${end}"
  335. echo ""
  336. echo " ${blu}Are you sure [y/N]? ${end} "
  337. while read -r -n 1 -s answer; do
  338. answer=${answer:-n}
  339. [[ $answer = [YyNn] ]] && break
  340. done
  341. fi
  342. if [[ $answer == [Yy] || $(conf_read force-flag) == "true" ]]; then
  343. ver=$(conf_read php-ver)
  344. sudo apt -y purge redis-server php${ver}-redis
  345. purge_autoremove="true"
  346. # For old packages - before ondrej split modules
  347. sudo apt -y purge php-redis
  348. # APT-KEY deprecated in 22.04
  349. if [[ $(lsb_release -c | cut -d':' -f 2 | xargs) =~ ^(bionic|focal)$ ]]; then
  350. echo | sudo add-apt-repository --remove 'ppa:redislabs/redis'
  351. sudo apt-key del 3FA6E3CA
  352. else
  353. sudo rm -rf /usr/share/keyrings/redis-archive-keyring.gpg
  354. sudo rm -rf /etc/apt/sources.list.d/redis.list
  355. fi
  356. sudo systemctl restart php${ver}-fpm
  357. conf_write php-tool-redis purged
  358. echo ""
  359. echo "${gre}Redis has been deleted successfully! ${end}"
  360. echo ""
  361. else
  362. echo ""
  363. echo " ${gre}Action aborted!!! ${end}"
  364. echo ""
  365. fi
  366. echo ""
  367. api-events_update pp5
  368. fi
  369. elif [[ -n $purge && -n $memcached ]]; then
  370. api-events_update pp6
  371. if [[ $(conf_read php-tool-memcached) != "true" ]]; then
  372. echo "${dim}Memcached is not installed, hence can not be deleted! ${end}"
  373. clear_force_flag
  374. else
  375. if [[ $(conf_read force-flag) != "true" ]]; then
  376. echo ""
  377. echo "${red}¡ C A U T I O N ! You are about to remove Memcached from your server! ${end}"
  378. echo ""
  379. echo " ${blu}Are you sure [y/N]? ${end} "
  380. while read -r -n 1 -s answer; do
  381. answer=${answer:-n}
  382. [[ $answer = [YyNn] ]] && break
  383. done
  384. fi
  385. if [[ $answer == [Yy] || $(conf_read force-flag) == "true" ]]; then
  386. ver=$(conf_read php-ver)
  387. sudo apt -y purge php${ver}-memcached php${ver}-memcache memcached
  388. purge_autoremove="true"
  389. # For old packages - before ondrej split modules
  390. sudo apt -y purge php-memcached php-memcache
  391. sudo systemctl restart php${ver}-fpm
  392. conf_write php-tool-memcached purged
  393. echo ""
  394. echo "${gre}Memcached has been deleted successfully! ${end}"
  395. echo ""
  396. else
  397. echo ""
  398. echo " ${gre}Action aborted!!! ${end}"
  399. echo ""
  400. fi
  401. echo ""
  402. api-events_update pp7
  403. fi
  404. elif [[ -n $purge && -n $pma ]]; then
  405. api-events_update pm2
  406. if [[ $(conf_read mysql-tool-pma) != "true" ]]; then
  407. echo "${dim}phpMyAdmin is not installed, hence can not be deleted! ${end}"
  408. clear_force_flag
  409. else
  410. if [[ $(conf_read force-flag) != "true" ]]; then
  411. echo ""
  412. echo "${red}¡ C A U T I O N ! You are about to remove phpMyAdmin from your server! ${end}"
  413. echo ""
  414. echo " ${blu}Are you sure [y/N]? ${end} "
  415. while read -r -n 1 -s answer; do
  416. answer=${answer:-n}
  417. [[ $answer = [YyNn] ]] && break
  418. done
  419. fi
  420. if [[ $answer == [Yy] || $(conf_read force-flag) == "true" ]]; then
  421. sudo rm -rf /var/www/$(conf_read tools-port)/htdocs/pma
  422. conf_write mysql-tool-pma purged
  423. echo ""
  424. echo "${gre}phpMyAdmin has been deleted successfully! ${end}"
  425. echo ""
  426. else
  427. echo ""
  428. echo " ${gre}Action aborted!!! ${end}"
  429. echo ""
  430. fi
  431. echo ""
  432. api-events_update pm3
  433. fi
  434. ######################################
  435. ######## Purge-Server-All ########
  436. ######################################
  437. elif [[ -n $purge && -n $lemp ]]; then
  438. echo "${red}If you want to remove Webinoly Stack completely from your server use the '-purge-server-all' option or remove each package individually. ${end}"
  439. exit 1
  440. elif [[ -n $purge_server_all ]]; then
  441. api-events_update st2
  442. echo ""
  443. echo "${red}¡ C A U T I O N ! You are about to remove Webinoly Stack completely from your server!"
  444. echo "This action will remove Nginx, PHP, MySQL and all the additional tools."
  445. echo "${end}"
  446. if [[ $(conf_read force-flag) != "true" && $force != 1 ]]; then
  447. echo " ${blu}Are you sure [y/N]? ${end}"
  448. while read -r -n 1 -s answer; do
  449. answer=${answer:-n}
  450. [[ $answer = [YyNn] ]] && break
  451. done
  452. else
  453. answer="Y"
  454. fi
  455. if [[ $answer == [Yy] ]]; then
  456. if [[ $(conf_read mysql) == true ]]; then
  457. # Usually comes by default with Ubuntu. Not removed: dirmngr
  458. sudo apt -y purge apt-transport-https
  459. fi
  460. stack -nginx -purge=force
  461. stack -mysql -purge=force
  462. stack -php -purge=force
  463. # Backups can be installed alone (without nginx)
  464. [[ $(conf_read nginx-tool-bkp) == "true" ]] && stack -backups -purge=force
  465. # Remove remanent packages and things!
  466. [[ -d /etc/datadog-agent ]] && webinoly -datadog -purge
  467. [[ -f /etc/ssl/certs/webinoly-blackhole.crt.pem ]] && sudo rm -rf /etc/ssl/certs/webinoly-blackhole.crt.pem
  468. [[ -f /etc/ssl/private/webinoly-blackhole.key.pem ]] && sudo rm -rf /etc/ssl/private/webinoly-blackhole.key.pem
  469. [[ -f /etc/ssl/dhparam.pem ]] && sudo rm -rf /etc/ssl/dhparam.pem
  470. [[ -f $HOME/.aws/credentials ]] && sudo rm -rf $HOME/.aws/credentials
  471. [[ -f /etc/needrestart/conf.d/webinoly.conf ]] && sudo rm -rf /etc/needrestart/conf.d/webinoly.conf
  472. if [[ $(conf_read pre-packs) == true ]]; then
  473. # Usually comes by default with Ubuntu. Not removed: software-properties-common, zip
  474. sudo apt -y purge pwgen unzip
  475. conf_write pre-packs purged
  476. fi
  477. purge_autoremove="true"
  478. [[ $(conf_read swap-owner) == "webinoly" ]] && swap_delete
  479. echo "${gre}"
  480. echo "****************************************************************************"
  481. echo "*** ${bol}Webinoly Stack have been completely removed from your server${end}${gre} ***"
  482. echo "**** ${dim}We are sad because you decided to remove Webinoly!!${end}${gre} ****"
  483. echo "****************************************************************************"
  484. echo "${end}"
  485. else
  486. echo ""
  487. echo " ${gre} Action aborted!!! ${end}"
  488. echo ""
  489. fi
  490. ##################################################
  491. ###### Install packages: Stack Builder! ######
  492. ##################################################
  493. elif [[ -n $html || -n $nginx ]]; then
  494. [[ $nginx == "mainline" ]] && conf_write nginx-ppa mainline
  495. stack_builder nginx false false $build
  496. elif [[ -n $php ]]; then
  497. if [[ $(conf_read nginx) != "true" && $(conf_read force-flag) != "true" && $php != "nginx" ]]; then
  498. echo ""
  499. echo "${blu}Nginx is not installed, do you want to install it too [y/N]?${end} "
  500. while read -r -n 1 -s answer; do
  501. answer=${answer:-n}
  502. [[ $answer = [YyNn] ]] && break
  503. done
  504. fi
  505. [[ $answer = [Yy] || $php == "nginx" ]] && stack_builder nginx php false $build || stack_builder false php false $build
  506. elif [[ -n $mysql ]]; then
  507. [[ $(conf_read php) != "true" || $(conf_read nginx) != "true" ]] && build=light
  508. [[ $mysql == "client" ]] && stack_builder false false mysql-client || stack_builder false false mysql $build
  509. elif [[ -n $lemp ]]; then
  510. api-events_update st1
  511. stack_builder nginx php mysql $build
  512. elif [[ -n $letsencrypt ]]; then
  513. [[ $(conf_read nginx-tool-ssl) != "true" ]] && stack_builder false false false letsencrypt || echo "${dim}Let's Encrypt is already installed!${end}"
  514. elif [[ -n $backups ]]; then
  515. [[ $(conf_read nginx-tool-bkp) != "true" ]] && stack_builder false false false backups || echo "${dim}BackUp packages are already installed!${end}"
  516. elif [[ -n $postfix ]]; then
  517. [[ $(conf_read php-tool-postfix) != "true" ]] && stack_builder false false false postfix || echo "${dim}Postfix is already installed!${end}"
  518. elif [[ -n $redis ]]; then
  519. [[ $(conf_read php-tool-redis) != "true" ]] && stack_builder false false false redis || echo "${dim}Redis is already installed!${end}"
  520. elif [[ -n $memcached ]]; then
  521. [[ $(conf_read php-tool-memcached) != "true" ]] && stack_builder false false false memcached || echo "${dim}Memcached is already installed!${end}"
  522. elif [[ -n $pma ]]; then
  523. [[ $(conf_read mysql-tool-pma) != "true" ]] && stack_builder false false false pma || echo "${dim}phpMyAdmin is already installed!${end}"
  524. ##########################################
  525. ###### Change PHP/MySQL Version ######
  526. ##########################################
  527. elif [[ -n $php_ver ]]; then
  528. api-events_update st3
  529. if [[ $php_ver != true && $(check_php_version $php_ver) == "true" ]]; then
  530. echo "${blu}New PHP version: '$php_ver' ${end}"
  531. if [[ $(conf_read php) == "true" && $(conf_read php-ver) == $php_ver ]]; then
  532. echo "${gre}PHP $php_ver is currently installed!${end}"
  533. elif [[ $(conf_read php) == "true" ]]; then
  534. [[ $(conf_read mysql-tool-pma) == "true" ]] && pmaflag="true"
  535. smtp_backup
  536. # We need to know what packages are installed before remove them
  537. [[ $(conf_read php-tool-postfix) == "true" ]] && php_profile_pf="true"
  538. [[ $(conf_read php-tool-redis) == "true" ]] && php_profile_rd="true"
  539. [[ $(conf_read php-tool-memcached) == "true" ]] && php_profile_mc="true"
  540. sudo stack -php -purge=force
  541. conf_write php-ver $php_ver
  542. conf_write force-flag true # force flag prevent to be questioned (Unattended) when nginx is not installed.
  543. if [[ $php_profile_pf == "true" && $php_profile_rd == "true" && $php_profile_mc == "true" ]]; then
  544. sudo stack -php
  545. else
  546. sudo stack -php -build=light
  547. [[ $php_profile_pf == "true" ]] && sudo stack -postfix
  548. [[ $php_profile_rd == "true" ]] && sudo stack -redis
  549. [[ $php_profile_mc == "true" ]] && sudo stack -memcached
  550. fi
  551. smtp_backup_recovery
  552. [[ $pmaflag == "true" ]] && sudo stack -pma
  553. elif [[ $(conf_read php) != "true" ]]; then
  554. conf_write php-ver $php_ver
  555. echo "${gre}PHP is not already installed but this version will be installed next time! ${end}"
  556. fi
  557. clear_force_flag
  558. else
  559. echo "${red}[ERROR] Please, enter a valid PHP version!${end}"
  560. exit 1
  561. fi
  562. elif [[ -n $mysql_ver ]]; then
  563. api-events_update st4
  564. if [[ $mysql_ver != true && $(check_mysql_version $mysql_ver) == "true" ]]; then
  565. echo "${blu}New MySQL (MariaDB) version: '$mysql_ver' ${end}"
  566. if [[ $(conf_read mysql) == "true" && $(conf_read mysql-ver) == $mysql_ver ]]; then
  567. echo "${gre}MySQL (MariaDB) $mysql_ver is currently installed!${end}"
  568. elif [[ $(conf_read mysql) == "true" ]]; then
  569. # Downgrades are not allowed - https://mariadb.com/kb/en/downgrading-between-major-versions-of-mariadb/
  570. current_mysql_ver="$(conf_read mysql-ver)"
  571. if [[ -n $current_mysql_ver && ${current_mysql_ver//.} -gt ${mysql_ver//.} ]]; then
  572. echo "${red}[ERROR] Downgrading MariaDB is not supported!${end}"
  573. exit 1
  574. fi
  575. [[ $(conf_read mysql-tool-pma) == "true" ]] && pmaflag="true"
  576. sudo stack -mysql=keep-data -purge=force
  577. conf_write mysql-ver $mysql_ver
  578. [[ $pmaflag == "true" ]] && sudo stack -mysql -block-password-display || sudo stack -mysql -build=light -block-password-display
  579. elif [[ $(conf_read mysql) != "true" ]]; then
  580. conf_write mysql-ver $mysql_ver
  581. echo "${gre}MySQL (MariaDB) is not already installed but this version will be installed next time! ${end}"
  582. fi
  583. else
  584. echo "${red}[ERROR] Please, enter a valid MySQL (MariaDB) version!${end}"
  585. exit 1
  586. fi
  587. elif [[ -n $help || -n $h || -n $H || $empty_param == "true" ]]; then
  588. help_message
  589. else
  590. echo "${red}[ERROR] Please, enter a valid option! ${end}"
  591. exit 1
  592. fi
  593. # Clear FORCE flag in config file
  594. if [[ $force == 1 ]]; then
  595. clear_force_flag
  596. force="0"
  597. fi
  598. # Remove all unnecessary packages!
  599. [[ $purge_autoremove == "true" ]] && sudo apt -yqq autoremove &> /dev/null
  600. api-events_update ste