migrate_options.sh 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #!/usr/bin/env bash
  2. # _modules/scripts/migrate_options.sh
  3. # THIS SCRIPT IS DESIGNED TO BE RUNNING BY MAILCOW SCRIPTS ONLY!
  4. # DO NOT, AGAIN, NOT TRY TO RUN THIS SCRIPT STANDALONE!!!!!!
  5. migrate_config_options() {
  6. sed -i --follow-symlinks '$a\' mailcow.conf
  7. KEYS=(
  8. SOLR_HEAP
  9. SKIP_SOLR
  10. SOLR_PORT
  11. FLATCURVE_EXPERIMENTAL
  12. DISABLE_IPv6
  13. ACME_CONTACT
  14. )
  15. for key in "${KEYS[@]}"; do
  16. if grep -q "${key}" mailcow.conf; then
  17. case "${key}" in
  18. SOLR_HEAP)
  19. echo "Removing ${key} in mailcow.conf"
  20. sed -i '/# Solr heap size in MB\b/d' mailcow.conf
  21. sed -i '/# Solr is a prone to run\b/d' mailcow.conf
  22. sed -i '/SOLR_HEAP\b/d' mailcow.conf
  23. ;;
  24. SKIP_SOLR)
  25. echo "Removing ${key} in mailcow.conf"
  26. sed -i '/\bSkip Solr on low-memory\b/d' mailcow.conf
  27. sed -i '/\bSolr is disabled by default\b/d' mailcow.conf
  28. sed -i '/\bDisable Solr or\b/d' mailcow.conf
  29. sed -i '/\bSKIP_SOLR\b/d' mailcow.conf
  30. ;;
  31. SOLR_PORT)
  32. echo "Removing ${key} in mailcow.conf"
  33. sed -i '/\bSOLR_PORT\b/d' mailcow.conf
  34. ;;
  35. FLATCURVE_EXPERIMENTAL)
  36. echo "Removing ${key} in mailcow.conf"
  37. sed -i '/\bFLATCURVE_EXPERIMENTAL\b/d' mailcow.conf
  38. ;;
  39. DISABLE_IPv6)
  40. echo "Migrating ${key} to ENABLE_IPv6 in mailcow.conf"
  41. local old=$(grep '^DISABLE_IPv6=' "mailcow.conf" | cut -d'=' -f2)
  42. local new
  43. if [[ "$old" == "y" ]]; then
  44. new="false"
  45. else
  46. new="true"
  47. fi
  48. sed -i '/^DISABLE_IPv6=/d' "mailcow.conf"
  49. echo "ENABLE_IPV6=$new" >> "mailcow.conf"
  50. ;;
  51. ACME_CONTACT)
  52. echo "Deleting obsoleted ${key} in mailcow.conf"
  53. sed -i '/^# Lets Encrypt registration contact information/d' mailcow.conf
  54. sed -i '/^# Optional: Leave empty for none/d' mailcow.conf
  55. sed -i '/^# This value is only used on first order!/d' mailcow.conf
  56. sed -i '/^# Setting it at a later point will require the following steps:/d' mailcow.conf
  57. sed -i '/^# https:\/\/docs.mailcow.email\/troubleshooting\/debug-reset_tls\//d' mailcow.conf
  58. sed -i '/^ACME_CONTACT=.*/d' mailcow.conf
  59. sed -i '/^#ACME_CONTACT=.*/d' mailcow.conf
  60. ;;
  61. esac
  62. fi
  63. done
  64. solr_volume=$(docker volume ls -qf name=^${COMPOSE_PROJECT_NAME}_solr-vol-1)
  65. if [[ -n $solr_volume ]]; then
  66. echo -e "\e[34mSolr has been replaced within mailcow since 2025-01.\nThe volume $solr_volume is unused.\e[0m"
  67. sleep 1
  68. if [ ! "$FORCE" ]; then
  69. read -r -p "Remove $solr_volume? [y/N] " response
  70. if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
  71. echo -e "\e[33mRemoving $solr_volume...\e[0m"
  72. docker volume rm $solr_volume || echo -e "\e[31mFailed to remove. Remove it manually!\e[0m"
  73. echo -e "\e[32mSuccessfully removed $solr_volume!\e[0m"
  74. else
  75. echo -e "Not removing $solr_volume. Run \`docker volume rm $solr_volume\` manually if needed."
  76. fi
  77. else
  78. echo -e "\e[33mForce removing $solr_volume...\e[0m"
  79. docker volume rm $solr_volume || echo -e "\e[31mFailed to remove. Remove it manually!\e[0m"
  80. echo -e "\e[32mSuccessfully removed $solr_volume!\e[0m"
  81. fi
  82. fi
  83. # Delete old fts.conf before forced switch to flatcurve to ensure update is working properly
  84. FTS_CONF_PATH="${SCRIPT_DIR}/data/conf/dovecot/conf.d/fts.conf"
  85. if [[ -f "$FTS_CONF_PATH" ]]; then
  86. if grep -q "Autogenerated by mailcow" "$FTS_CONF_PATH"; then
  87. rm -rf $FTS_CONF_PATH
  88. fi
  89. fi
  90. }