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