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