diff --git a/helper-scripts/_cold-standby.sh b/helper-scripts/_cold-standby.sh index e2e5f1556..9e7362ec6 100755 --- a/helper-scripts/_cold-standby.sh +++ b/helper-scripts/_cold-standby.sh @@ -10,46 +10,6 @@ echo "If this script is run automatically by cron or a timer AND you are using b echo "The snapshots of your backup destination should run AFTER the cold standby script finished to ensure consistent snapshots." echo -function docker_garbage() { - IMGS_TO_DELETE=() - - for container in $(grep -oP "image: \Kmailcow.+" docker-compose.yml); do - - REPOSITORY=${container/:*} - TAG=${container/*:} - V_MAIN=${container/*.} - V_SUB=${container/*.} - EXISTING_TAGS=$(docker images | grep ${REPOSITORY} | awk '{ print $2 }') - - for existing_tag in ${EXISTING_TAGS[@]}; do - - V_MAIN_EXISTING=${existing_tag/*.} - V_SUB_EXISTING=${existing_tag/*.} - - # Not an integer - [[ ! ${V_MAIN_EXISTING} =~ ^[0-9]+$ ]] && continue - [[ ! ${V_SUB_EXISTING} =~ ^[0-9]+$ ]] && continue - - if [[ ${V_MAIN_EXISTING} == "latest" ]]; then - echo "Found deprecated label \"latest\" for repository ${REPOSITORY}, it should be deleted." - IMGS_TO_DELETE+=(${REPOSITORY}:${existing_tag}) - elif [[ ${V_MAIN_EXISTING} -lt ${V_MAIN} ]]; then - echo "Found tag ${existing_tag} for ${REPOSITORY}, which is older than the current tag ${TAG} and should be deleted." - IMGS_TO_DELETE+=(${REPOSITORY}:${existing_tag}) - elif [[ ${V_SUB_EXISTING} -lt ${V_SUB} ]]; then - echo "Found tag ${existing_tag} for ${REPOSITORY}, which is older than the current tag ${TAG} and should be deleted." - IMGS_TO_DELETE+=(${REPOSITORY}:${existing_tag}) - fi - - done - - done - - if [[ ! -z ${IMGS_TO_DELETE[*]} ]]; then - docker rmi ${IMGS_TO_DELETE[*]} - fi -} - function preflight_local_checks() { if [[ -z "${REMOTE_SSH_KEY}" ]]; then >&2 echo -e "\e[31mREMOTE_SSH_KEY is not set\e[0m" diff --git a/update.sh b/update.sh index 9cfb02fd1..27972e82a 100755 --- a/update.sh +++ b/update.sh @@ -36,13 +36,23 @@ docker_garbage() { IMGS_TO_DELETE=() declare -A IMAGES_INFO - COMPOSE_IMAGES=($(grep -oP "image: \Kmailcow.+" "${SCRIPT_DIR}/docker-compose.yml")) + # Erfasse alle in docker-compose verwendeten Images (sowohl mailcow/... als auch ghcr.io/mailcow/...) + COMPOSE_IMAGES=($(grep -oP "image: \K(ghcr\.io/)?mailcow.+" "${SCRIPT_DIR}/docker-compose.yml")) - for existing_image in $(docker images --format "{{.ID}}:{{.Repository}}:{{.Tag}}" | grep 'mailcow/'); do + # Durchlaufe alle vorhandenen Images, die mailcow/ oder ghcr.io/mailcow/ beinhalten + for existing_image in $(docker images --format "{{.ID}}:{{.Repository}}:{{.Tag}}" | grep -E '(mailcow/|ghcr\.io/mailcow/)'); do ID=$(echo "$existing_image" | cut -d ':' -f 1) REPOSITORY=$(echo "$existing_image" | cut -d ':' -f 2) TAG=$(echo "$existing_image" | cut -d ':' -f 3) + # Für das Image mailcow/backup: nur löschen, wenn es untagged ist (TAG gleich "") + if [[ "$REPOSITORY" == "mailcow/backup" || "$REPOSITORY" == "ghcr.io/mailcow/backup" ]]; then + if [[ "$TAG" != "" ]]; then + continue + fi + fi + + # Überspringe Images, die in der docker-compose.yml verwendet werden if [[ " ${COMPOSE_IMAGES[@]} " =~ " ${REPOSITORY}:${TAG} " ]]; then continue else @@ -57,7 +67,7 @@ docker_garbage() { echo " ${IMAGES_INFO[$id]} ($id)" done - if [ ! $FORCE ]; then + if [ -z "$FORCE" ]; then read -r -p "Do you want to delete them to free up some space? [y/N] " response if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then docker rmi ${IMGS_TO_DELETE[*]}