Home | History | Annotate | Line # | Download | only in etc
daily revision 1.75
      1   1.1       cgd #!/bin/sh -
      2   1.1       cgd #
      3  1.75      jmmv #	$NetBSD: daily,v 1.75 2010/01/27 16:22:41 jmmv Exp $
      4  1.21     mikel #	@(#)daily	8.2 (Berkeley) 1/25/94
      5   1.1       cgd #
      6  1.18       mrg 
      7  1.27   mycroft export PATH=/bin:/usr/bin:/sbin:/usr/sbin
      8  1.28     lukem umask 077
      9  1.28     lukem 
     10  1.28     lukem if [ -s /etc/daily.conf ]; then
     11  1.28     lukem 	. /etc/daily.conf
     12  1.28     lukem fi
     13  1.28     lukem 
     14  1.20     mikel host=`hostname`
     15  1.28     lukem date=`date`
     16  1.59      jmmv rcvar_manpage='daily.conf(5)'
     17   1.1       cgd 
     18  1.28     lukem echo "To: ${MAILTO:-root}"
     19  1.28     lukem echo "Subject: $host daily output for $date"
     20  1.28     lukem echo ""
     21  1.18       mrg 
     22  1.25     lukem if [ -f /etc/rc.subr ]; then
     23  1.25     lukem 	. /etc/rc.subr
     24  1.25     lukem else
     25  1.25     lukem 	echo "Can't read /etc/rc.subr; aborting."
     26  1.25     lukem 	exit 1;
     27  1.25     lukem fi
     28  1.25     lukem 
     29  1.23      phil if [ -z "$MAILTO" -o "$USER" != "root" ]; then
     30  1.27   mycroft 	MAILTO=root
     31  1.23      phil fi
     32  1.23      phil 
     33  1.22     lukem echo ""
     34  1.22     lukem echo "Uptime: " `uptime`
     35  1.18       mrg 
     36  1.29       abs # Uncommenting any of the finds below would open up a race condition attack
     37  1.29       abs # based on symlinks, potentially allowing removal of any file on the system.
     38  1.29       abs #
     39  1.17       jtc #echo ""
     40  1.17       jtc #echo "Removing scratch and junk files:"
     41  1.17       jtc #if [ -d /tmp -a ! -h /tmp ]; then
     42  1.17       jtc #	cd /tmp && {
     43  1.17       jtc #	find . -type f -atime +3 -exec rm -f -- {} \;
     44  1.17       jtc #	find . ! -name . -type d -mtime +1 -exec rmdir -- {} \; \
     45  1.17       jtc #	    >/dev/null 2>&1; }
     46  1.17       jtc #fi
     47   1.1       cgd 
     48  1.17       jtc #if [ -d /var/tmp -a ! -h /var/tmp ]; then
     49  1.17       jtc #	cd /var/tmp && {
     50  1.17       jtc #	find . ! -name . -atime +7 -exec rm -f -- {} \;
     51  1.35   aymeric #	find . ! \( -name . -o -name vi.recover \) -type d \
     52  1.35   aymeric #		-mtime +1 -exec rmdir -- {} \; \
     53  1.17       jtc #	    >/dev/null 2>&1; }
     54  1.17       jtc #fi
     55  1.10       cgd 
     56  1.15        pk # Additional junk directory cleanup would go like this:
     57  1.15        pk #if [ -d /scratch -a ! -h /scratch ]; then
     58  1.15        pk #	cd /scratch && {
     59  1.15        pk #	find . ! -name . -atime +1 -exec rm -f -- {} \;
     60  1.15        pk #	find . ! -name . -type d -mtime +1 -exec rmdir -- {} \; \
     61  1.15        pk #	    >/dev/null 2>&1; }
     62  1.15        pk #fi
     63  1.10       cgd 
     64  1.17       jtc #if [ -d /var/rwho -a ! -h /var/rwho ] ; then
     65  1.17       jtc #	cd /var/rwho && {
     66  1.17       jtc #	find . ! -name . -mtime +7 -exec rm -f -- {} \; ; }
     67  1.17       jtc #fi
     68  1.10       cgd 
     69  1.70    martti DAILYDIR=$(mktemp -d -t _daily) || exit 1
     70  1.18       mrg 
     71  1.36     lukem trap "/bin/rm -rf $DAILYDIR ; exit 0" EXIT INT QUIT
     72  1.18       mrg 
     73  1.36     lukem if ! cd "$DAILYDIR"; then
     74  1.36     lukem 	echo "Can not cd to $DAILYDIR".
     75  1.18       mrg 	exit 1
     76  1.18       mrg fi
     77  1.18       mrg 
     78  1.10       cgd TMP=daily.$$
     79  1.18       mrg TMP2=daily2.$$
     80  1.18       mrg 
     81  1.25     lukem if checkyesno find_core; then
     82  1.62       erh 	# Turn "foo !bar bax" into "-fstype foo -o ! -fstype bar -o -fstype bax"
     83  1.62       erh 	ignfstypes=`echo $find_core_ignore_fstypes | \
     84  1.62       erh 		sed -e's/\(!*\)\([^[:space:]]\{1,\}\)/-o \1 -fstype \2/g' \
     85  1.62       erh 		    -e's/^-o //'`
     86  1.62       erh 	find / \( $ignfstypes \) -prune -o \
     87  1.48    atatat 		-name 'lost+found' -prune -o \
     88  1.48    atatat 		\( -name '*.core' -o -name 'core' \) -type f -print > $TMP
     89  1.18       mrg #		\( -name '[#,]*' -o -name '.#*' -o -name a.out \
     90  1.18       mrg #		   -o -name '*.CKP' -o -name '.emacs_[0-9]*' \) \
     91  1.18       mrg #			-a -atime +3 -exec rm -f -- {} \; -a -print > $TMP
     92  1.18       mrg 
     93  1.26   nathanw 	egrep '\.core$|^core$' $TMP > $TMP2
     94  1.18       mrg 	if [ -s $TMP2 ]; then
     95  1.18       mrg 		echo ""
     96  1.18       mrg 		echo "Possible core dumps:"
     97  1.18       mrg 		cat $TMP2
     98  1.18       mrg 	fi
     99  1.18       mrg 
    100  1.18       mrg #	egrep -v '\.core' $TMP > $TMP2
    101  1.18       mrg #	if [ -s $TMP2 ]; then
    102  1.18       mrg #		echo ""
    103  1.18       mrg #		echo "Deleted files:"
    104  1.18       mrg #		cat $TMP2
    105  1.18       mrg #	fi
    106  1.10       cgd 
    107  1.18       mrg 	rm -f $TMP $TMP2
    108  1.18       mrg fi
    109  1.10       cgd 
    110  1.25     lukem if checkyesno run_msgs; then
    111  1.18       mrg 	msgs -c
    112  1.18       mrg fi
    113   1.1       cgd 
    114  1.25     lukem if checkyesno expire_news && [ -f /etc/news.expire ]; then
    115   1.1       cgd 	/etc/news.expire
    116   1.1       cgd fi
    117   1.1       cgd 
    118  1.25     lukem if checkyesno purge_accounting && [ -f /var/account/acct ]; then
    119  1.21     mikel 	echo ""
    120  1.21     mikel 	echo "Purging accounting records:"
    121  1.58       mrg 	if [ -f /var/account/acct.0.gz ]; then
    122  1.58       mrg 		mv /var/account/acct.2.gz /var/account/acct.3.gz 2>/dev/null
    123  1.58       mrg 		mv /var/account/acct.1.gz /var/account/acct.2.gz 2>/dev/null
    124  1.58       mrg 		mv /var/account/acct.0.gz /var/account/acct.1.gz 2>/dev/null
    125  1.58       mrg 	else
    126  1.58       mrg 		mv /var/account/acct.2 /var/account/acct.3 2>/dev/null
    127  1.58       mrg 		mv /var/account/acct.1 /var/account/acct.2 2>/dev/null
    128  1.58       mrg 		mv /var/account/acct.0 /var/account/acct.1 2>/dev/null
    129  1.58       mrg 	fi
    130  1.21     mikel 	cp /var/account/acct /var/account/acct.0
    131  1.21     mikel 	sa -sq
    132  1.58       mrg 	if [ -f /var/account/acct.1.gz ]; then
    133  1.58       mrg 		gzip /var/account/acct.0
    134  1.58       mrg 	fi
    135   1.1       cgd fi
    136   1.1       cgd 
    137  1.25     lukem if checkyesno run_calendar; then
    138  1.50     jhawk 	calendar -a > $TMP 2>&1
    139  1.18       mrg 	if [ -s $TMP ]; then
    140  1.18       mrg 		echo ""
    141  1.18       mrg 		echo "Running calendar:"
    142  1.18       mrg 		cat $TMP
    143  1.18       mrg 	fi
    144  1.18       mrg 	rm -f $TMP
    145  1.18       mrg fi
    146   1.1       cgd 
    147  1.25     lukem if checkyesno check_disks; then
    148  1.55     perry 	if checkyesno show_remote_fs; then
    149  1.72     perry 		df -hi -t nokernfs,procfs,ptyfs,null,fdesc > $TMP
    150  1.55     perry 	else
    151  1.72     perry 		df -hil -t nokernfs,procfs,ptyfs,null,fdesc > $TMP
    152  1.55     perry 	fi
    153  1.52     perry 	if [ -s /etc/dumpdates ] ; then
    154  1.52     perry 		dump -W > $TMP2
    155  1.52     perry 	fi
    156  1.18       mrg 	if [ -s $TMP -o -s $TMP2 ]; then
    157  1.18       mrg 		echo ""
    158  1.18       mrg 		echo "Checking subsystem status:"
    159  1.18       mrg 		echo ""
    160  1.18       mrg 		echo "disks:"
    161  1.18       mrg 		if [ -s $TMP ]; then
    162  1.65     perry 			cat $TMP | sed 's/Mounted on/Mount/'
    163  1.18       mrg 			echo ""
    164  1.18       mrg 		fi
    165  1.18       mrg 		if [ -s $TMP2 ]; then
    166  1.18       mrg 			cat $TMP2
    167  1.18       mrg 			echo ""
    168  1.18       mrg 		fi
    169  1.18       mrg 		echo ""
    170  1.18       mrg 	fi
    171  1.46    bouyer 	rm -f $TMP $TMP2
    172  1.46    bouyer 	touch $TMP2
    173  1.46    bouyer 	for dev in `iostat -x | awk '/^raid/ { print $1 }'`; do
    174  1.46    bouyer 		raidctl -s $dev | awk '/^.*: failed$/ {print $0}' > $TMP
    175  1.46    bouyer 		if [ -s $TMP ]; then
    176  1.46    bouyer 			echo "$dev:" >> $TMP2
    177  1.46    bouyer 			cat $TMP >> $TMP2
    178  1.46    bouyer 		fi
    179  1.46    bouyer 		rm -f $TMP
    180  1.46    bouyer 	done
    181  1.46    bouyer 	if [ -s $TMP2 ]; then
    182  1.46    bouyer 		echo "failed RAIDframe component(s):"
    183  1.46    bouyer 			cat $TMP2
    184  1.46    bouyer 	fi
    185  1.46    bouyer 	rm -f $TMP2
    186  1.18       mrg fi
    187  1.18       mrg 
    188  1.25     lukem if checkyesno check_mailq; then
    189  1.18       mrg 	mailq > $TMP
    190  1.44     lukem 	if ! grep -q "queue is empty$" $TMP; then
    191  1.18       mrg 		echo ""
    192  1.18       mrg 		echo "mail:"
    193  1.18       mrg 		cat $TMP
    194  1.18       mrg 	fi
    195  1.18       mrg fi
    196  1.18       mrg 
    197  1.18       mrg rm -f $TMP
    198   1.1       cgd 
    199  1.25     lukem if checkyesno check_network; then
    200  1.18       mrg 	echo ""
    201  1.18       mrg 	echo "network:"
    202  1.54     perry 	if checkyesno full_netstat; then
    203  1.54     perry 		netstat -inv
    204  1.54     perry 	else
    205  1.61    martin 		netstat -inv | awk 'BEGIN {
    206  1.54     perry 			ifs[""] = 0;
    207  1.54     perry 		}
    208  1.54     perry 		/^[^\*]* / {
    209  1.54     perry 			if (NR == 1) {
    210  1.66  jdolecek 				printf("%-8s %12s %6s %12s %6s %6s\n",
    211  1.54     perry 				  $1, $(NF-4), $(NF-3), $(NF-2), $(NF-1), $NF);
    212  1.54     perry 				next;
    213  1.54     perry 			}
    214  1.54     perry 			if (!($1 in ifs)) {
    215  1.66  jdolecek 				printf("%-8s %12s %6s %12s %6s %6s\n",
    216  1.54     perry 				  $1, $(NF-4), $(NF-3), $(NF-2), $(NF-1), $NF);
    217  1.54     perry 				ifs[$1] = 1;
    218  1.54     perry 			}
    219  1.54     perry 		}'
    220  1.54     perry 	fi
    221   1.1       cgd 	echo ""
    222  1.18       mrg 	t=/var/rwho/*
    223  1.18       mrg 	if [ "$t" != '/var/rwho/*' ]; then
    224  1.18       mrg 		ruptime
    225  1.18       mrg 	fi
    226   1.1       cgd fi
    227   1.1       cgd 
    228  1.25     lukem if checkyesno run_fsck; then
    229  1.18       mrg 	echo ""
    230  1.18       mrg 	echo "Checking filesystems:"
    231  1.71    bouyer 	fsck -n -f ${run_fsck_flags} | grep -v '^\*\* Phase'
    232  1.18       mrg fi
    233   1.1       cgd 
    234   1.1       cgd echo ""
    235  1.25     lukem if checkyesno run_rdist && [ -f /etc/Distfile ]; then
    236   1.1       cgd 	echo "Running rdist:"
    237  1.20     mikel 	if [ -d /var/log/rdist ]; then
    238  1.30     enami 		logf=`date +%Y.%b.%d`
    239  1.20     mikel 		rdist -f /etc/Distfile 2>&1 | tee /var/log/rdist/$logf
    240  1.20     mikel 	else
    241  1.20     mikel 		rdist -f /etc/Distfile 
    242  1.20     mikel 	fi
    243   1.1       cgd fi
    244   1.1       cgd 
    245  1.73      jmmv : ${pkgdb_dir:=/var/db/pkg}
    246  1.73      jmmv 
    247  1.73      jmmv if pkg_info -K ${pkgdb_dir} -q -E '*'; then
    248  1.74      jmmv 	echo ""
    249  1.74      jmmv 	echo "Fetching package vulnerabilities database:"
    250  1.73      jmmv 	if checkyesno fetch_pkg_vulnerabilities; then
    251  1.75      jmmv 		( umask 022 && pkg_admin -K ${pkgdb_dir} \
    252  1.75      jmmv 		    fetch-pkg-vulnerabilities -u )
    253  1.74      jmmv 	else
    254  1.74      jmmv 		echo "fetch_pkg_vulnerabilities is set to NO in daily.conf(5)."
    255  1.74      jmmv 		echo "You should set it to YES to enable vulnerability checks."
    256  1.73      jmmv 	fi
    257  1.73      jmmv fi
    258  1.73      jmmv 
    259  1.25     lukem if checkyesno run_security; then
    260  1.36     lukem 	SECOUT="$DAILYDIR/sec"
    261  1.47     grant 	sh /etc/security > "$SECOUT" 2>&1
    262  1.36     lukem 	if [ ! -s "$SECOUT" ]; then
    263  1.49     jhawk 		if checkyesno send_empty_security; then
    264  1.49     jhawk 			echo "Nothing to report on $date" > "$SECOUT"
    265  1.49     jhawk 		else
    266  1.49     jhawk 			echo ""
    267  1.57    atatat 			echo "Suppressing empty security report."
    268  1.49     jhawk 		fi
    269  1.49     jhawk 	fi
    270  1.49     jhawk 	if [ -s "$SECOUT" ]; then
    271  1.49     jhawk 		mail -s "$host daily insecurity output for $date" \
    272  1.64    sketch 		    "$MAILTO" < "$SECOUT"
    273  1.28     lukem 	fi
    274  1.34   hubertf fi
    275  1.34   hubertf 
    276  1.34   hubertf if checkyesno run_skeyaudit; then
    277  1.52     perry 	if [ -s /etc/skeykeys ]; then
    278  1.52     perry 		echo ""
    279  1.52     perry 		echo "Checking remaining s/key OTPs:"
    280  1.52     perry 		skeyaudit
    281  1.52     perry 	fi
    282  1.31        ad fi
    283  1.31        ad 
    284  1.31        ad if [ -f /etc/daily.local ]; then
    285  1.69   hubertf 	( . /etc/daily.local ) > $TMP 2>&1
    286  1.60       kim 	if [ -s $TMP ] ; then
    287  1.60       kim 		printf "\nRunning /etc/daily.local:\n"
    288  1.60       kim 		cat $TMP
    289  1.60       kim 	fi
    290  1.60       kim 	rm -f $TMP
    291  1.18       mrg fi
    292