stack 24 KB

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