daily revision 1.87
11.1Scgd#!/bin/sh - 21.1Scgd# 31.87Swiz# $NetBSD: daily,v 1.87 2012/08/29 20:34:18 wiz Exp $ 41.21Smikel# @(#)daily 8.2 (Berkeley) 1/25/94 51.1Scgd# 61.18Smrg 71.27Smycroftexport PATH=/bin:/usr/bin:/sbin:/usr/sbin 81.28Slukemumask 077 91.28Slukem 101.28Slukemif [ -s /etc/daily.conf ]; then 111.28Slukem . /etc/daily.conf 121.28Slukemfi 131.28Slukem 141.77Schristoshost="$(hostname)" 151.77Schristosdate="$(date)" 161.59Sjmmvrcvar_manpage='daily.conf(5)' 171.1Scgd 181.28Slukemecho "To: ${MAILTO:-root}" 191.28Slukemecho "Subject: $host daily output for $date" 201.28Slukemecho "" 211.18Smrg 221.25Slukemif [ -f /etc/rc.subr ]; then 231.25Slukem . /etc/rc.subr 241.25Slukemelse 251.25Slukem echo "Can't read /etc/rc.subr; aborting." 261.25Slukem exit 1; 271.25Slukemfi 281.25Slukem 291.23Sphilif [ -z "$MAILTO" -o "$USER" != "root" ]; then 301.27Smycroft MAILTO=root 311.23Sphilfi 321.23Sphil 331.76Sjmmvif [ -n "${pkgdb_dir}" ]; then 341.76Sjmmv echo "WARNING: Setting pkgdb_dir in daily.conf(5) is deprecated" 351.76Sjmmv echo "WARNING: Please define PKG_DBDIR in pkg_install.conf(5) instead" 361.76Sjmmv _compat_K_flag="-K ${pkgdb_dir}" 371.76Sjmmvfi 381.76Sjmmv 391.22Slukemecho "" 401.77Schristosecho "Uptime: $(uptime)" 411.18Smrg 421.29Sabs# Uncommenting any of the finds below would open up a race condition attack 431.29Sabs# based on symlinks, potentially allowing removal of any file on the system. 441.29Sabs# 451.17Sjtc#echo "" 461.17Sjtc#echo "Removing scratch and junk files:" 471.17Sjtc#if [ -d /tmp -a ! -h /tmp ]; then 481.17Sjtc# cd /tmp && { 491.17Sjtc# find . -type f -atime +3 -exec rm -f -- {} \; 501.17Sjtc# find . ! -name . -type d -mtime +1 -exec rmdir -- {} \; \ 511.17Sjtc# >/dev/null 2>&1; } 521.17Sjtc#fi 531.1Scgd 541.17Sjtc#if [ -d /var/tmp -a ! -h /var/tmp ]; then 551.17Sjtc# cd /var/tmp && { 561.17Sjtc# find . ! -name . -atime +7 -exec rm -f -- {} \; 571.35Saymeric# find . ! \( -name . -o -name vi.recover \) -type d \ 581.35Saymeric# -mtime +1 -exec rmdir -- {} \; \ 591.17Sjtc# >/dev/null 2>&1; } 601.17Sjtc#fi 611.10Scgd 621.15Spk# Additional junk directory cleanup would go like this: 631.15Spk#if [ -d /scratch -a ! -h /scratch ]; then 641.15Spk# cd /scratch && { 651.15Spk# find . ! -name . -atime +1 -exec rm -f -- {} \; 661.15Spk# find . ! -name . -type d -mtime +1 -exec rmdir -- {} \; \ 671.15Spk# >/dev/null 2>&1; } 681.15Spk#fi 691.10Scgd 701.17Sjtc#if [ -d /var/rwho -a ! -h /var/rwho ] ; then 711.17Sjtc# cd /var/rwho && { 721.17Sjtc# find . ! -name . -mtime +7 -exec rm -f -- {} \; ; } 731.17Sjtc#fi 741.10Scgd 751.70SmarttiDAILYDIR=$(mktemp -d -t _daily) || exit 1 761.18Smrg 771.36Slukemtrap "/bin/rm -rf $DAILYDIR ; exit 0" EXIT INT QUIT 781.18Smrg 791.36Slukemif ! cd "$DAILYDIR"; then 801.36Slukem echo "Can not cd to $DAILYDIR". 811.18Smrg exit 1 821.18Smrgfi 831.18Smrg 841.10ScgdTMP=daily.$$ 851.18SmrgTMP2=daily2.$$ 861.18Smrg 871.25Slukemif checkyesno find_core; then 881.62Serh # Turn "foo !bar bax" into "-fstype foo -o ! -fstype bar -o -fstype bax" 891.77Schristos ignfstypes="$(echo $find_core_ignore_fstypes | \ 901.62Serh sed -e's/\(!*\)\([^[:space:]]\{1,\}\)/-o \1 -fstype \2/g' \ 911.77Schristos -e's/^-o //')" 921.82Schristos # Turn "foo bar" into "( -path foo -o -path bar ) -prune -o" 931.82Schristos # Set ignpaths empty if no find_core_ignore_paths given 941.82Schristos if [ -n "$find_core_ignore_paths" ]; then 951.82Schristos ignpaths="$(printf " -o -path %s" $find_core_ignore_paths)" 961.82Schristos ignpaths="( ${ignpaths# -o } ) -prune -o" 971.82Schristos else 981.82Schristos ignpaths="" 991.82Schristos fi 1001.62Serh find / \( $ignfstypes \) -prune -o \ 1011.82Schristos ${ignpaths} \ 1021.48Satatat -name 'lost+found' -prune -o \ 1031.48Satatat \( -name '*.core' -o -name 'core' \) -type f -print > $TMP 1041.18Smrg# \( -name '[#,]*' -o -name '.#*' -o -name a.out \ 1051.18Smrg# -o -name '*.CKP' -o -name '.emacs_[0-9]*' \) \ 1061.18Smrg# -a -atime +3 -exec rm -f -- {} \; -a -print > $TMP 1071.18Smrg 1081.26Snathanw egrep '\.core$|^core$' $TMP > $TMP2 1091.18Smrg if [ -s $TMP2 ]; then 1101.18Smrg echo "" 1111.18Smrg echo "Possible core dumps:" 1121.18Smrg cat $TMP2 1131.18Smrg fi 1141.18Smrg 1151.18Smrg# egrep -v '\.core' $TMP > $TMP2 1161.18Smrg# if [ -s $TMP2 ]; then 1171.18Smrg# echo "" 1181.18Smrg# echo "Deleted files:" 1191.18Smrg# cat $TMP2 1201.18Smrg# fi 1211.10Scgd 1221.18Smrg rm -f $TMP $TMP2 1231.18Smrgfi 1241.10Scgd 1251.25Slukemif checkyesno run_msgs; then 1261.18Smrg msgs -c 1271.18Smrgfi 1281.1Scgd 1291.25Slukemif checkyesno expire_news && [ -f /etc/news.expire ]; then 1301.1Scgd /etc/news.expire 1311.1Scgdfi 1321.1Scgd 1331.25Slukemif checkyesno purge_accounting && [ -f /var/account/acct ]; then 1341.21Smikel echo "" 1351.21Smikel echo "Purging accounting records:" 1361.58Smrg if [ -f /var/account/acct.0.gz ]; then 1371.58Smrg mv /var/account/acct.2.gz /var/account/acct.3.gz 2>/dev/null 1381.58Smrg mv /var/account/acct.1.gz /var/account/acct.2.gz 2>/dev/null 1391.58Smrg mv /var/account/acct.0.gz /var/account/acct.1.gz 2>/dev/null 1401.58Smrg else 1411.58Smrg mv /var/account/acct.2 /var/account/acct.3 2>/dev/null 1421.58Smrg mv /var/account/acct.1 /var/account/acct.2 2>/dev/null 1431.58Smrg mv /var/account/acct.0 /var/account/acct.1 2>/dev/null 1441.58Smrg fi 1451.21Smikel cp /var/account/acct /var/account/acct.0 1461.21Smikel sa -sq 1471.58Smrg if [ -f /var/account/acct.1.gz ]; then 1481.58Smrg gzip /var/account/acct.0 1491.58Smrg fi 1501.1Scgdfi 1511.1Scgd 1521.25Slukemif checkyesno run_calendar; then 1531.50Sjhawk calendar -a > $TMP 2>&1 1541.18Smrg if [ -s $TMP ]; then 1551.18Smrg echo "" 1561.18Smrg echo "Running calendar:" 1571.18Smrg cat $TMP 1581.18Smrg fi 1591.18Smrg rm -f $TMP 1601.18Smrgfi 1611.1Scgd 1621.25Slukemif checkyesno check_disks; then 1631.55Sperry if checkyesno show_remote_fs; then 1641.72Sperry df -hi -t nokernfs,procfs,ptyfs,null,fdesc > $TMP 1651.55Sperry else 1661.72Sperry df -hil -t nokernfs,procfs,ptyfs,null,fdesc > $TMP 1671.55Sperry fi 1681.52Sperry if [ -s /etc/dumpdates ] ; then 1691.52Sperry dump -W > $TMP2 1701.52Sperry fi 1711.18Smrg if [ -s $TMP -o -s $TMP2 ]; then 1721.18Smrg echo "" 1731.18Smrg echo "Checking subsystem status:" 1741.18Smrg echo "" 1751.18Smrg echo "disks:" 1761.18Smrg if [ -s $TMP ]; then 1771.65Sperry cat $TMP | sed 's/Mounted on/Mount/' 1781.18Smrg echo "" 1791.18Smrg fi 1801.18Smrg if [ -s $TMP2 ]; then 1811.18Smrg cat $TMP2 1821.18Smrg echo "" 1831.18Smrg fi 1841.18Smrg echo "" 1851.18Smrg fi 1861.46Sbouyer rm -f $TMP $TMP2 1871.46Sbouyer touch $TMP2 1881.77Schristos for dev in $(iostat -x | awk '/^raid/ { print $1 }'); do 1891.46Sbouyer raidctl -s $dev | awk '/^.*: failed$/ {print $0}' > $TMP 1901.46Sbouyer if [ -s $TMP ]; then 1911.46Sbouyer echo "$dev:" >> $TMP2 1921.46Sbouyer cat $TMP >> $TMP2 1931.46Sbouyer fi 1941.46Sbouyer rm -f $TMP 1951.46Sbouyer done 1961.46Sbouyer if [ -s $TMP2 ]; then 1971.46Sbouyer echo "failed RAIDframe component(s):" 1981.46Sbouyer cat $TMP2 1991.46Sbouyer fi 2001.46Sbouyer rm -f $TMP2 2011.18Smrgfi 2021.18Smrg 2031.25Slukemif checkyesno check_mailq; then 2041.18Smrg mailq > $TMP 2051.44Slukem if ! grep -q "queue is empty$" $TMP; then 2061.18Smrg echo "" 2071.18Smrg echo "mail:" 2081.18Smrg cat $TMP 2091.18Smrg fi 2101.18Smrgfi 2111.18Smrg 2121.18Smrgrm -f $TMP 2131.1Scgd 2141.25Slukemif checkyesno check_network; then 2151.18Smrg echo "" 2161.18Smrg echo "network:" 2171.54Sperry if checkyesno full_netstat; then 2181.54Sperry netstat -inv 2191.54Sperry else 2201.61Smartin netstat -inv | awk 'BEGIN { 2211.54Sperry ifs[""] = 0; 2221.54Sperry } 2231.54Sperry /^[^\*]* / { 2241.54Sperry if (NR == 1) { 2251.66Sjdolecek printf("%-8s %12s %6s %12s %6s %6s\n", 2261.54Sperry $1, $(NF-4), $(NF-3), $(NF-2), $(NF-1), $NF); 2271.54Sperry next; 2281.54Sperry } 2291.54Sperry if (!($1 in ifs)) { 2301.66Sjdolecek printf("%-8s %12s %6s %12s %6s %6s\n", 2311.54Sperry $1, $(NF-4), $(NF-3), $(NF-2), $(NF-1), $NF); 2321.54Sperry ifs[$1] = 1; 2331.54Sperry } 2341.54Sperry }' 2351.54Sperry fi 2361.1Scgd echo "" 2371.18Smrg t=/var/rwho/* 2381.18Smrg if [ "$t" != '/var/rwho/*' ]; then 2391.18Smrg ruptime 2401.18Smrg fi 2411.1Scgdfi 2421.1Scgd 2431.25Slukemif checkyesno run_fsck; then 2441.18Smrg echo "" 2451.18Smrg echo "Checking filesystems:" 2461.71Sbouyer fsck -n -f ${run_fsck_flags} | grep -v '^\*\* Phase' 2471.18Smrgfi 2481.1Scgd 2491.25Slukemif checkyesno run_rdist && [ -f /etc/Distfile ]; then 2501.85Schristos echo "" 2511.1Scgd echo "Running rdist:" 2521.20Smikel if [ -d /var/log/rdist ]; then 2531.77Schristos logf="$(date +%Y.%b.%d)" 2541.20Smikel rdist -f /etc/Distfile 2>&1 | tee /var/log/rdist/$logf 2551.20Smikel else 2561.20Smikel rdist -f /etc/Distfile 2571.20Smikel fi 2581.1Scgdfi 2591.1Scgd 2601.76Sjmmvif pkg_info ${_compat_K_flag} -q -E '*'; then 2611.85Schristos if [ -z "fetch_pkg_vulnerabilities" ]; then 2621.83Schristos echo "fetch_pkg_vulnerabilities is not set in daily.conf(5)." 2631.83Schristos echo "You should set it to YES to enable vulnerability checks" 2641.83Schristos echo "or set it to NO to get rid of this warning." 2651.85Schristos elif checkyesno fetch_pkg_vulnerabilities; then 2661.86Schristos echo "" 2671.86Schristos echo "Fetching package vulnerabilities database:" 2681.85Schristos ( umask 022 && pkg_admin ${_compat_K_flag} \ 2691.85Schristos fetch-pkg-vulnerabilities -u ) 2701.73Sjmmv fi 2711.73Sjmmvfi 2721.73Sjmmv 2731.25Slukemif checkyesno run_security; then 2741.36Slukem SECOUT="$DAILYDIR/sec" 2751.47Sgrant sh /etc/security > "$SECOUT" 2>&1 2761.36Slukem if [ ! -s "$SECOUT" ]; then 2771.49Sjhawk if checkyesno send_empty_security; then 2781.49Sjhawk echo "Nothing to report on $date" > "$SECOUT" 2791.49Sjhawk else 2801.49Sjhawk echo "" 2811.57Satatat echo "Suppressing empty security report." 2821.49Sjhawk fi 2831.49Sjhawk fi 2841.49Sjhawk if [ -s "$SECOUT" ]; then 2851.78Sdarcy if checkyesno separate_security_email; then 2861.78Sdarcy mail -s "$host daily insecurity output for $date" $MAILTO < $SECOUT 2871.78Sdarcy else 2881.78Sdarcy echo "" 2891.78Sdarcy echo "$host daily insecurity output for $date:" 2901.78Sdarcy cat $SECOUT 2911.78Sdarcy fi 2921.28Slukem fi 2931.34Shubertffi 2941.34Shubertf 2951.34Shubertfif checkyesno run_skeyaudit; then 2961.52Sperry if [ -s /etc/skeykeys ]; then 2971.52Sperry echo "" 2981.52Sperry echo "Checking remaining s/key OTPs:" 2991.52Sperry skeyaudit 3001.52Sperry fi 3011.31Sadfi 3021.31Sad 3031.79Sjoergif checkyesno run_makemandb; then 3041.79Sjoerg if [ -f /etc/man.conf -a -x /usr/sbin/makemandb ]; then 3051.79Sjoerg echo "" 3061.79Sjoerg echo "Updating man page index:" 3071.87Swiz (umask 022; nice -n 5 /usr/sbin/makemandb -Q) 3081.79Sjoerg fi 3091.79Sjoergfi 3101.79Sjoerg 3111.31Sadif [ -f /etc/daily.local ]; then 3121.69Shubertf ( . /etc/daily.local ) > $TMP 2>&1 3131.60Skim if [ -s $TMP ] ; then 3141.60Skim printf "\nRunning /etc/daily.local:\n" 3151.60Skim cat $TMP 3161.60Skim fi 3171.60Skim rm -f $TMP 3181.18Smrgfi 319