check.d/50.updates: Output the list of updates.
[rcheck] / rcheck
1 #! /bin/sh
2 ###
3 ### Run everyday health checks on remote systems.
4
5 set -e
6 prog=$0
7 while
8 case "$prog" in */*) ;; *) prog=./$prog ;; esac
9 cd "${prog%/*}"
10 [ -L "${prog##*/}" ]
11 do
12 prog=$(readlink "${prog##*/}")
13 done
14
15 args=""
16 usage () {
17 echo "usage: ${0##*/} [-[MIN-][MAX]] [HOST...]"
18 }
19 while :; do
20 case $# in 0) break ;; esac
21 case $1 in
22 -) break ;;
23 --) shift; break ;;
24 -*[!0-9]*-* | -*-*[!0-9]*) usage >&2; exit 1 ;;
25 -*-) a=${1#-}; a=${a%-}; args="$a" ;;
26 -*-*) a=${1#-}; b=${a#*-}; a=${a%-*}; args="$a $b" ;;
27 -*[!0-9]*) usage >&2; exit 1 ;;
28 -*) a=${1#-}; args="0 $a" ;;
29 *) break ;;
30 esac
31 shift
32 done
33 case $# in 0) set -- $(expand-list /etc/slaves :rcheck_hosts) ;; esac
34
35 exec 4>&1
36 rc=0
37 for host in "$@"; do
38 nrc=$(
39 exec 5>&1
40 { { { set +e
41 tar czf - check check.d |
42 ssh "$host" '
43 set -e
44 cd /tmp
45
46 i=0
47 while :; do
48 tmpdir=check.$$.$i
49 if mkdir -m700 $tmpdir >/dev/null 2>&1; then break; fi
50 case $i in
51 500) echo >&2 "failed to create temporary directory"; exit 125 ;;
52 esac
53 i=$((i + 1))
54 done
55 trap "cd /; rm -rf /tmp/$tmpdir" INT TERM QUIT HUP EXIT
56 cd $tmpdir
57
58 tar xzf -
59 ./check'" $args"
60 rc=$?; set -e; echo $rc >&5
61 case $rc in
62 0) ;;
63 *) echo >&2 "remote check process failed (rc = $rc)" ;;
64 esac
65 } 1>&3; } 2>&1 |
66 sed 's/^/!!! /'
67 } 3>&1 |
68 if IFS= read -r line; then
69 cat <<EOF
70 ###--------------------------------------------------------------------------
71 ### $host
72
73 $line
74 EOF
75 cat
76 fi >&4
77 )
78 if [ $nrc -gt $rc ]; then rc=$nrc; fi
79 done
80
81 exit $rc