13701068bSRobert Wing#!/bin/sh
23701068bSRobert Wing# Created by: Miroslav Lachman <000.fbsd@quip.cz>
33701068bSRobert Wing
43701068bSRobert Wing# Backup output from `gmirror list`, which provides detailed information
53701068bSRobert Wing# of all gmirrors. The backup will be stored in /var/backups/.
63701068bSRobert Wing
73701068bSRobert Wing# If there is a global system configuration file, suck it in.
83701068bSRobert Wing#
93701068bSRobert Wingif [ -r /etc/defaults/periodic.conf ]
103701068bSRobert Wingthen
113701068bSRobert Wing	. /etc/defaults/periodic.conf
123701068bSRobert Wing	source_periodic_confs
133701068bSRobert Wingfi
143701068bSRobert Wing
153701068bSRobert Wingbak_dir=/var/backups
163701068bSRobert Wing
173701068bSRobert Wingrotate() {
183701068bSRobert Wing	base_name=$1
193701068bSRobert Wing	show_diff=$2
203701068bSRobert Wing	file="$bak_dir/$base_name"
213701068bSRobert Wing
223701068bSRobert Wing	if [ -f "${file}.bak" ]; then
233701068bSRobert Wing		rc=0
243701068bSRobert Wing		if cmp -s "${file}.bak" "${file}.tmp"; then
253701068bSRobert Wing			rm "${file}.tmp"
263701068bSRobert Wing		else
273701068bSRobert Wing			rc=1
2815e35d05SMichael Osipov			[ -n "$show_diff" ] && diff ${daily_diff_flags} "${file}.bak" "${file}.tmp"
293701068bSRobert Wing			mv "${file}.bak" "${file}.bak2" || rc=3
303701068bSRobert Wing			mv "${file}.tmp" "${file}.bak" || rc=3
313701068bSRobert Wing		fi
323701068bSRobert Wing	else
333701068bSRobert Wing		rc=1
343701068bSRobert Wing		mv "${file}.tmp" "${file}.bak" || rc=3
353701068bSRobert Wing		[ -n "$show_diff" ] && cat "${file}.bak"
363701068bSRobert Wing	fi
373701068bSRobert Wing}
383701068bSRobert Wing
393701068bSRobert Wingcase "$daily_backup_gmirror_verbose" in
403701068bSRobert Wing	[Yy][Ee][Ss]) show="YES"
413701068bSRobert Wingesac
423701068bSRobert Wing
433701068bSRobert Wingcase "$daily_backup_gmirror_enable" in
443701068bSRobert Wing	[Yy][Ee][Ss])
453701068bSRobert Wing
463701068bSRobert Wing	gmirrors=$(gmirror status 2> /dev/null | \
473701068bSRobert Wing		awk '$1 ~ /^mirror\// { sub(/mirror\//, ""); print $1 }')
483701068bSRobert Wing
493701068bSRobert Wing	if [ -z "$gmirrors"  ]; then
503701068bSRobert Wing        echo ""
513701068bSRobert Wing		echo "daily_backup_gmirror_enable is set to YES but no gmirrors found."
523701068bSRobert Wing		rc=2
533701068bSRobert Wing	else
543701068bSRobert Wing		echo ""
553701068bSRobert Wing		echo "Backup of gmirror information for:";
563701068bSRobert Wing
573701068bSRobert Wing		for m in ${gmirrors}; do
583701068bSRobert Wing			echo "$m"
593701068bSRobert Wing			safe_name=$(echo "gmirror.${m}" | tr -cs ".[:alnum:]\n" "_")
603701068bSRobert Wing			if ! gmirror status -s "${m}" | grep -F -v "COMPLETE"; then
613701068bSRobert Wing				gmirror list "${m}" > "$bak_dir/$safe_name.tmp"
623701068bSRobert Wing				rotate "$safe_name" $show
633701068bSRobert Wing			fi
643701068bSRobert Wing		done
653701068bSRobert Wing	fi
663701068bSRobert Wing	;;
673701068bSRobert Wing	*)  rc=0;;
683701068bSRobert Wingesac
693701068bSRobert Wing
703701068bSRobert Wingexit $rc
71