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