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