#!/bin/sh set -eo pipefail mkdir -p /home/lbkp/zimbra/mount source /opt/zimbra/bin/zmshutil zmsetvars {% if 'ldap' in zcs_enabled_components %} # Dump ldap data /opt/zimbra/common/sbin/slapcat \ -F /opt/zimbra/data/ldap/config \ -n 0 | zstd -c > /home/lbkp/zimbra/ldap-config.ldif.zst /opt/zimbra/common/sbin/slapcat \ -F /opt/zimbra/data/ldap/config \ -b "" | zstd -c > /home/lbkp/zimbra/ldap.ldif.zst {% endif %} {% if 'mailbox' in zcs_enabled_components %} # Dump MySQL data /opt/zimbra/common/bin/mysqldump \ --user=root \ --password=$mysql_root_password \ --socket=$mysql_socket \ --all-databases \ --single-transaction \ --flush-logs | zstd -c > /home/lbkp/zimbra/mysql.sql.zst # Export calendars, tasks and address books to ics and vcf files OLDIFS=$IFS IFS=$'\n' for MAILBOX in $(/usr/local/bin/zmprov getQuotaUsage $(hostname --fqdn) | awk '{ print $1}'); do for LINE in $(/usr/local/bin/zmmailbox -z -m $MAILBOX -t 0 getAllFolders); do DIR=$(echo $LINE | perl -ne 'm/\s*\d+\s+(\w{4})\s+\d+\s+\d+\s+(\/.*)/ && print "$2\n"') if echo $DIR | grep -qiP '\([a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}:\d+\)$'; then continue fi TYPE=$(echo $LINE | perl -ne 'm/\s*\d+\s+(\w{4})\s+\d+\s+\d+\s+(\/.*)/ && print "$1\n"') if [ "$TYPE" == "appo" -o "$TYPE" == "task" -o "$TYPE" == "cont" ]; then mkdir -p /home/lbkp/zimbra/exports/$MAILBOX/$(dirname $DIR) fi if [ "$TYPE" == "appo" -o "$TYPE" == "task" ]; then /usr/local/bin/zmmailbox -z -m $MAILBOX -t 0 getRestUrl "$(printf '%q' $DIR)?fmt=ics" > "/home/lbkp/zimbra/exports/$MAILBOX/$DIR"".ics" elif [ "$TYPE" == "cont" ]; then /usr/local/bin/zmmailbox -z -m $MAILBOX -t 0 getRestUrl "$(printf '%q' $DIR)?fmt=vcf" > "/home/lbkp/zimbra/exports/$MAILBOX/$DIR"".vcf" fi done done IFS=$OLDIFS {% endif %} # Try to snapshot Zimbra tree systemd-cat /opt/zimbra/bin/zmbh --pre --snap-size=10G --verbose --mount=/home/lbkp/zimbra/mount --shutdown=ldap