Home | History | Annotate | Line # | Download | only in etc
daily revision 1.86
      1   1.1       cgd #!/bin/sh -
      2   1.1       cgd #
      3  1.86  christos #	$NetBSD: daily,v 1.86 2012/08/03 10:52:46 christos 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.82  christos 	# Turn "foo bar" into "( -path foo -o -path bar ) -prune -o"
     93  1.82  christos 	# Set ignpaths empty if no find_core_ignore_paths given
     94  1.82  christos 	if [ -n "$find_core_ignore_paths" ]; then
     95  1.82  christos 		ignpaths="$(printf " -o -path %s" $find_core_ignore_paths)"
     96  1.82  christos 		ignpaths="( ${ignpaths# -o } ) -prune -o"
     97  1.82  christos 	else
     98  1.82  christos 		ignpaths=""
     99  1.82  christos 	fi
    100  1.62       erh 	find / \( $ignfstypes \) -prune -o \
    101  1.82  christos 		${ignpaths} \
    102  1.48    atatat 		-name 'lost+found' -prune -o \
    103  1.48    atatat 		\( -name '*.core' -o -name 'core' \) -type f -print > $TMP
    104  1.18       mrg #		\( -name '[#,]*' -o -name '.#*' -o -name a.out \
    105  1.18       mrg #		   -o -name '*.CKP' -o -name '.emacs_[0-9]*' \) \
    106  1.18       mrg #			-a -atime +3 -exec rm -f -- {} \; -a -print > $TMP
    107  1.18       mrg 
    108  1.26   nathanw 	egrep '\.core$|^core$' $TMP > $TMP2
    109  1.18       mrg 	if [ -s $TMP2 ]; then
    110  1.18       mrg 		echo ""
    111  1.18       mrg 		echo "Possible core dumps:"
    112  1.18       mrg 		cat $TMP2
    113  1.18       mrg 	fi
    114  1.18       mrg 
    115  1.18       mrg #	egrep -v '\.core' $TMP > $TMP2
    116  1.18       mrg #	if [ -s $TMP2 ]; then
    117  1.18       mrg #		echo ""
    118  1.18       mrg #		echo "Deleted files:"
    119  1.18       mrg #		cat $TMP2
    120  1.18       mrg #	fi
    121  1.10       cgd 
    122  1.18       mrg 	rm -f $TMP $TMP2
    123  1.18       mrg fi
    124  1.10       cgd 
    125  1.25     lukem if checkyesno run_msgs; then
    126  1.18       mrg 	msgs -c
    127  1.18       mrg fi
    128   1.1       cgd 
    129  1.25     lukem if checkyesno expire_news && [ -f /etc/news.expire ]; then
    130   1.1       cgd 	/etc/news.expire
    131   1.1       cgd fi
    132   1.1       cgd 
    133  1.25     lukem if checkyesno purge_accounting && [ -f /var/account/acct ]; then
    134  1.21     mikel 	echo ""
    135  1.21     mikel 	echo "Purging accounting records:"
    136  1.58       mrg 	if [ -f /var/account/acct.0.gz ]; then
    137  1.58       mrg 		mv /var/account/acct.2.gz /var/account/acct.3.gz 2>/dev/null
    138  1.58       mrg 		mv /var/account/acct.1.gz /var/account/acct.2.gz 2>/dev/null
    139  1.58       mrg 		mv /var/account/acct.0.gz /var/account/acct.1.gz 2>/dev/null
    140  1.58       mrg 	else
    141  1.58       mrg 		mv /var/account/acct.2 /var/account/acct.3 2>/dev/null
    142  1.58       mrg 		mv /var/account/acct.1 /var/account/acct.2 2>/dev/null
    143  1.58       mrg 		mv /var/account/acct.0 /var/account/acct.1 2>/dev/null
    144  1.58       mrg 	fi
    145  1.21     mikel 	cp /var/account/acct /var/account/acct.0
    146  1.21     mikel 	sa -sq
    147  1.58       mrg 	if [ -f /var/account/acct.1.gz ]; then
    148  1.58       mrg 		gzip /var/account/acct.0
    149  1.58       mrg 	fi
    150   1.1       cgd fi
    151   1.1       cgd 
    152  1.25     lukem if checkyesno run_calendar; then
    153  1.50     jhawk 	calendar -a > $TMP 2>&1
    154  1.18       mrg 	if [ -s $TMP ]; then
    155  1.18       mrg 		echo ""
    156  1.18       mrg 		echo "Running calendar:"
    157  1.18       mrg 		cat $TMP
    158  1.18       mrg 	fi
    159  1.18       mrg 	rm -f $TMP
    160  1.18       mrg fi
    161   1.1       cgd 
    162  1.25     lukem if checkyesno check_disks; then
    163  1.55     perry 	if checkyesno show_remote_fs; then
    164  1.72     perry 		df -hi -t nokernfs,procfs,ptyfs,null,fdesc > $TMP
    165  1.55     perry 	else
    166  1.72     perry 		df -hil -t nokernfs,procfs,ptyfs,null,fdesc > $TMP
    167  1.55     perry 	fi
    168  1.52     perry 	if [ -s /etc/dumpdates ] ; then
    169  1.52     perry 		dump -W > $TMP2
    170  1.52     perry 	fi
    171  1.18       mrg 	if [ -s $TMP -o -s $TMP2 ]; then
    172  1.18       mrg 		echo ""
    173  1.18       mrg 		echo "Checking subsystem status:"
    174  1.18       mrg 		echo ""
    175  1.18       mrg 		echo "disks:"
    176  1.18       mrg 		if [ -s $TMP ]; then
    177  1.65     perry 			cat $TMP | sed 's/Mounted on/Mount/'
    178  1.18       mrg 			echo ""
    179  1.18       mrg 		fi
    180  1.18       mrg 		if [ -s $TMP2 ]; then
    181  1.18       mrg 			cat $TMP2
    182  1.18       mrg 			echo ""
    183  1.18       mrg 		fi
    184  1.18       mrg 		echo ""
    185  1.18       mrg 	fi
    186  1.46    bouyer 	rm -f $TMP $TMP2
    187  1.46    bouyer 	touch $TMP2
    188  1.77  christos 	for dev in $(iostat -x | awk '/^raid/ { print $1 }'); do
    189  1.46    bouyer 		raidctl -s $dev | awk '/^.*: failed$/ {print $0}' > $TMP
    190  1.46    bouyer 		if [ -s $TMP ]; then
    191  1.46    bouyer 			echo "$dev:" >> $TMP2
    192  1.46    bouyer 			cat $TMP >> $TMP2
    193  1.46    bouyer 		fi
    194  1.46    bouyer 		rm -f $TMP
    195  1.46    bouyer 	done
    196  1.46    bouyer 	if [ -s $TMP2 ]; then
    197  1.46    bouyer 		echo "failed RAIDframe component(s):"
    198  1.46    bouyer 			cat $TMP2
    199  1.46    bouyer 	fi
    200  1.46    bouyer 	rm -f $TMP2
    201  1.18       mrg fi
    202  1.18       mrg 
    203  1.25     lukem if checkyesno check_mailq; then
    204  1.18       mrg 	mailq > $TMP
    205  1.44     lukem 	if ! grep -q "queue is empty$" $TMP; then
    206  1.18       mrg 		echo ""
    207  1.18       mrg 		echo "mail:"
    208  1.18       mrg 		cat $TMP
    209  1.18       mrg 	fi
    210  1.18       mrg fi
    211  1.18       mrg 
    212  1.18       mrg rm -f $TMP
    213   1.1       cgd 
    214  1.25     lukem if checkyesno check_network; then
    215  1.18       mrg 	echo ""
    216  1.18       mrg 	echo "network:"
    217  1.54     perry 	if checkyesno full_netstat; then
    218  1.54     perry 		netstat -inv
    219  1.54     perry 	else
    220  1.61    martin 		netstat -inv | awk 'BEGIN {
    221  1.54     perry 			ifs[""] = 0;
    222  1.54     perry 		}
    223  1.54     perry 		/^[^\*]* / {
    224  1.54     perry 			if (NR == 1) {
    225  1.66  jdolecek 				printf("%-8s %12s %6s %12s %6s %6s\n",
    226  1.54     perry 				  $1, $(NF-4), $(NF-3), $(NF-2), $(NF-1), $NF);
    227  1.54     perry 				next;
    228  1.54     perry 			}
    229  1.54     perry 			if (!($1 in ifs)) {
    230  1.66  jdolecek 				printf("%-8s %12s %6s %12s %6s %6s\n",
    231  1.54     perry 				  $1, $(NF-4), $(NF-3), $(NF-2), $(NF-1), $NF);
    232  1.54     perry 				ifs[$1] = 1;
    233  1.54     perry 			}
    234  1.54     perry 		}'
    235  1.54     perry 	fi
    236   1.1       cgd 	echo ""
    237  1.18       mrg 	t=/var/rwho/*
    238  1.18       mrg 	if [ "$t" != '/var/rwho/*' ]; then
    239  1.18       mrg 		ruptime
    240  1.18       mrg 	fi
    241   1.1       cgd fi
    242   1.1       cgd 
    243  1.25     lukem if checkyesno run_fsck; then
    244  1.18       mrg 	echo ""
    245  1.18       mrg 	echo "Checking filesystems:"
    246  1.71    bouyer 	fsck -n -f ${run_fsck_flags} | grep -v '^\*\* Phase'
    247  1.18       mrg fi
    248   1.1       cgd 
    249  1.25     lukem if checkyesno run_rdist && [ -f /etc/Distfile ]; then
    250  1.85  christos 	echo ""
    251   1.1       cgd 	echo "Running rdist:"
    252  1.20     mikel 	if [ -d /var/log/rdist ]; then
    253  1.77  christos 		logf="$(date +%Y.%b.%d)"
    254  1.20     mikel 		rdist -f /etc/Distfile 2>&1 | tee /var/log/rdist/$logf
    255  1.20     mikel 	else
    256  1.20     mikel 		rdist -f /etc/Distfile 
    257  1.20     mikel 	fi
    258   1.1       cgd fi
    259   1.1       cgd 
    260  1.76      jmmv if pkg_info ${_compat_K_flag} -q -E '*'; then
    261  1.85  christos 	if [ -z "fetch_pkg_vulnerabilities" ]; then
    262  1.83  christos 		echo "fetch_pkg_vulnerabilities is not set in daily.conf(5)."
    263  1.83  christos 		echo "You should set it to YES to enable vulnerability checks"
    264  1.83  christos 		echo "or set it to NO to get rid of this warning."
    265  1.85  christos 	elif checkyesno fetch_pkg_vulnerabilities; then
    266  1.86  christos 		echo ""
    267  1.86  christos 		echo "Fetching package vulnerabilities database:"
    268  1.85  christos 		( umask 022 && pkg_admin ${_compat_K_flag} \
    269  1.85  christos 		    fetch-pkg-vulnerabilities -u )
    270  1.73      jmmv 	fi
    271  1.73      jmmv fi
    272  1.73      jmmv 
    273  1.25     lukem if checkyesno run_security; then
    274  1.36     lukem 	SECOUT="$DAILYDIR/sec"
    275  1.47     grant 	sh /etc/security > "$SECOUT" 2>&1
    276  1.36     lukem 	if [ ! -s "$SECOUT" ]; then
    277  1.49     jhawk 		if checkyesno send_empty_security; then
    278  1.49     jhawk 			echo "Nothing to report on $date" > "$SECOUT"
    279  1.49     jhawk 		else
    280  1.49     jhawk 			echo ""
    281  1.57    atatat 			echo "Suppressing empty security report."
    282  1.49     jhawk 		fi
    283  1.49     jhawk 	fi
    284  1.49     jhawk 	if [ -s "$SECOUT" ]; then
    285  1.78     darcy 		if checkyesno separate_security_email; then
    286  1.78     darcy 			mail -s "$host daily insecurity output for $date" $MAILTO < $SECOUT
    287  1.78     darcy 		else
    288  1.78     darcy 		    echo ""
    289  1.78     darcy 		    echo "$host daily insecurity output for $date:"
    290  1.78     darcy 		    cat $SECOUT
    291  1.78     darcy 		fi
    292  1.28     lukem 	fi
    293  1.34   hubertf fi
    294  1.34   hubertf 
    295  1.34   hubertf if checkyesno run_skeyaudit; then
    296  1.52     perry 	if [ -s /etc/skeykeys ]; then
    297  1.52     perry 		echo ""
    298  1.52     perry 		echo "Checking remaining s/key OTPs:"
    299  1.52     perry 		skeyaudit
    300  1.52     perry 	fi
    301  1.31        ad fi
    302  1.31        ad 
    303  1.79     joerg if checkyesno run_makemandb; then
    304  1.79     joerg 	if [ -f /etc/man.conf -a -x /usr/sbin/makemandb ]; then
    305  1.79     joerg 		echo ""
    306  1.79     joerg 		echo "Updating man page index:"
    307  1.84       jdf 		(umask 022; nice -n 5 /usr/sbin/makemandb -q)
    308  1.79     joerg 	fi
    309  1.79     joerg fi
    310  1.79     joerg 
    311  1.31        ad if [ -f /etc/daily.local ]; then
    312  1.69   hubertf 	( . /etc/daily.local ) > $TMP 2>&1
    313  1.60       kim 	if [ -s $TMP ] ; then
    314  1.60       kim 		printf "\nRunning /etc/daily.local:\n"
    315  1.60       kim 		cat $TMP
    316  1.60       kim 	fi
    317  1.60       kim 	rm -f $TMP
    318  1.18       mrg fi
    319