daily revision 1.92
11.1Scgd#!/bin/sh - 21.1Scgd# 31.92Suebayasi# $NetBSD: daily,v 1.92 2014/12/13 02:53:08 uebayasi 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.89Sagcif [ -s /etc/pkgpath.conf ]; then 141.89Sagc . /etc/pkgpath.conf 151.89Sagcfi 161.28Slukem 171.77Schristoshost="$(hostname)" 181.77Schristosdate="$(date)" 191.59Sjmmvrcvar_manpage='daily.conf(5)' 201.1Scgd 211.90Sprlw1pkg_admin=${pkg_admin:-/usr/sbin/pkg_admin} 221.90Sprlw1pkg_info=${pkg_info:-/usr/sbin/pkg_info} 231.90Sprlw1 241.28Slukemecho "To: ${MAILTO:-root}" 251.28Slukemecho "Subject: $host daily output for $date" 261.28Slukemecho "" 271.18Smrg 281.25Slukemif [ -f /etc/rc.subr ]; then 291.25Slukem . /etc/rc.subr 301.25Slukemelse 311.25Slukem echo "Can't read /etc/rc.subr; aborting." 321.25Slukem exit 1; 331.25Slukemfi 341.25Slukem 351.23Sphilif [ -z "$MAILTO" -o "$USER" != "root" ]; then 361.27Smycroft MAILTO=root 371.23Sphilfi 381.23Sphil 391.76Sjmmvif [ -n "${pkgdb_dir}" ]; then 401.92Suebayasi echo "WARNING: Setting pkgdb_dir in daily.conf(5) is deprecated" 411.92Suebayasi echo "WARNING: Please define PKG_DBDIR in pkg_install.conf(5) instead" 421.92Suebayasi _compat_K_flag="-K ${pkgdb_dir}" 431.76Sjmmvfi 441.76Sjmmv 451.22Slukemecho "" 461.77Schristosecho "Uptime: $(uptime)" 471.18Smrg 481.29Sabs# Uncommenting any of the finds below would open up a race condition attack 491.29Sabs# based on symlinks, potentially allowing removal of any file on the system. 501.29Sabs# 511.17Sjtc#echo "" 521.17Sjtc#echo "Removing scratch and junk files:" 531.17Sjtc#if [ -d /tmp -a ! -h /tmp ]; then 541.17Sjtc# cd /tmp && { 551.17Sjtc# find . -type f -atime +3 -exec rm -f -- {} \; 561.17Sjtc# find . ! -name . -type d -mtime +1 -exec rmdir -- {} \; \ 571.17Sjtc# >/dev/null 2>&1; } 581.17Sjtc#fi 591.1Scgd 601.17Sjtc#if [ -d /var/tmp -a ! -h /var/tmp ]; then 611.17Sjtc# cd /var/tmp && { 621.17Sjtc# find . ! -name . -atime +7 -exec rm -f -- {} \; 631.35Saymeric# find . ! \( -name . -o -name vi.recover \) -type d \ 641.35Saymeric# -mtime +1 -exec rmdir -- {} \; \ 651.17Sjtc# >/dev/null 2>&1; } 661.17Sjtc#fi 671.10Scgd 681.15Spk# Additional junk directory cleanup would go like this: 691.15Spk#if [ -d /scratch -a ! -h /scratch ]; then 701.15Spk# cd /scratch && { 711.15Spk# find . ! -name . -atime +1 -exec rm -f -- {} \; 721.15Spk# find . ! -name . -type d -mtime +1 -exec rmdir -- {} \; \ 731.15Spk# >/dev/null 2>&1; } 741.15Spk#fi 751.10Scgd 761.17Sjtc#if [ -d /var/rwho -a ! -h /var/rwho ] ; then 771.17Sjtc# cd /var/rwho && { 781.17Sjtc# find . ! -name . -mtime +7 -exec rm -f -- {} \; ; } 791.17Sjtc#fi 801.10Scgd 811.70SmarttiDAILYDIR=$(mktemp -d -t _daily) || exit 1 821.18Smrg 831.36Slukemtrap "/bin/rm -rf $DAILYDIR ; exit 0" EXIT INT QUIT 841.18Smrg 851.36Slukemif ! cd "$DAILYDIR"; then 861.36Slukem echo "Can not cd to $DAILYDIR". 871.18Smrg exit 1 881.18Smrgfi 891.18Smrg 901.10ScgdTMP=daily.$$ 911.18SmrgTMP2=daily2.$$ 921.18Smrg 931.25Slukemif checkyesno find_core; then 941.62Serh # Turn "foo !bar bax" into "-fstype foo -o ! -fstype bar -o -fstype bax" 951.77Schristos ignfstypes="$(echo $find_core_ignore_fstypes | \ 961.62Serh sed -e's/\(!*\)\([^[:space:]]\{1,\}\)/-o \1 -fstype \2/g' \ 971.77Schristos -e's/^-o //')" 981.82Schristos # Turn "foo bar" into "( -path foo -o -path bar ) -prune -o" 991.82Schristos # Set ignpaths empty if no find_core_ignore_paths given 1001.82Schristos if [ -n "$find_core_ignore_paths" ]; then 1011.82Schristos ignpaths="$(printf " -o -path %s" $find_core_ignore_paths)" 1021.82Schristos ignpaths="( ${ignpaths# -o } ) -prune -o" 1031.82Schristos else 1041.82Schristos ignpaths="" 1051.82Schristos fi 1061.62Serh find / \( $ignfstypes \) -prune -o \ 1071.82Schristos ${ignpaths} \ 1081.48Satatat -name 'lost+found' -prune -o \ 1091.48Satatat \( -name '*.core' -o -name 'core' \) -type f -print > $TMP 1101.18Smrg# \( -name '[#,]*' -o -name '.#*' -o -name a.out \ 1111.18Smrg# -o -name '*.CKP' -o -name '.emacs_[0-9]*' \) \ 1121.18Smrg# -a -atime +3 -exec rm -f -- {} \; -a -print > $TMP 1131.18Smrg 1141.26Snathanw egrep '\.core$|^core$' $TMP > $TMP2 1151.18Smrg if [ -s $TMP2 ]; then 1161.18Smrg echo "" 1171.18Smrg echo "Possible core dumps:" 1181.18Smrg cat $TMP2 1191.18Smrg fi 1201.18Smrg 1211.18Smrg# egrep -v '\.core' $TMP > $TMP2 1221.18Smrg# if [ -s $TMP2 ]; then 1231.18Smrg# echo "" 1241.18Smrg# echo "Deleted files:" 1251.18Smrg# cat $TMP2 1261.18Smrg# fi 1271.10Scgd 1281.18Smrg rm -f $TMP $TMP2 1291.18Smrgfi 1301.10Scgd 1311.25Slukemif checkyesno run_msgs; then 1321.18Smrg msgs -c 1331.18Smrgfi 1341.1Scgd 1351.25Slukemif checkyesno expire_news && [ -f /etc/news.expire ]; then 1361.1Scgd /etc/news.expire 1371.1Scgdfi 1381.1Scgd 1391.25Slukemif checkyesno purge_accounting && [ -f /var/account/acct ]; then 1401.21Smikel echo "" 1411.21Smikel echo "Purging accounting records:" 1421.58Smrg if [ -f /var/account/acct.0.gz ]; then 1431.58Smrg mv /var/account/acct.2.gz /var/account/acct.3.gz 2>/dev/null 1441.58Smrg mv /var/account/acct.1.gz /var/account/acct.2.gz 2>/dev/null 1451.58Smrg mv /var/account/acct.0.gz /var/account/acct.1.gz 2>/dev/null 1461.58Smrg else 1471.58Smrg mv /var/account/acct.2 /var/account/acct.3 2>/dev/null 1481.58Smrg mv /var/account/acct.1 /var/account/acct.2 2>/dev/null 1491.58Smrg mv /var/account/acct.0 /var/account/acct.1 2>/dev/null 1501.58Smrg fi 1511.21Smikel cp /var/account/acct /var/account/acct.0 1521.21Smikel sa -sq 1531.58Smrg if [ -f /var/account/acct.1.gz ]; then 1541.58Smrg gzip /var/account/acct.0 1551.58Smrg fi 1561.1Scgdfi 1571.1Scgd 1581.25Slukemif checkyesno run_calendar; then 1591.50Sjhawk calendar -a > $TMP 2>&1 1601.18Smrg if [ -s $TMP ]; then 1611.18Smrg echo "" 1621.18Smrg echo "Running calendar:" 1631.18Smrg cat $TMP 1641.18Smrg fi 1651.18Smrg rm -f $TMP 1661.18Smrgfi 1671.1Scgd 1681.25Slukemif checkyesno check_disks; then 1691.55Sperry if checkyesno show_remote_fs; then 1701.72Sperry df -hi -t nokernfs,procfs,ptyfs,null,fdesc > $TMP 1711.55Sperry else 1721.72Sperry df -hil -t nokernfs,procfs,ptyfs,null,fdesc > $TMP 1731.55Sperry fi 1741.52Sperry if [ -s /etc/dumpdates ] ; then 1751.52Sperry dump -W > $TMP2 1761.52Sperry fi 1771.18Smrg if [ -s $TMP -o -s $TMP2 ]; then 1781.18Smrg echo "" 1791.18Smrg echo "Checking subsystem status:" 1801.18Smrg echo "" 1811.18Smrg echo "disks:" 1821.18Smrg if [ -s $TMP ]; then 1831.65Sperry cat $TMP | sed 's/Mounted on/Mount/' 1841.18Smrg echo "" 1851.18Smrg fi 1861.18Smrg if [ -s $TMP2 ]; then 1871.18Smrg cat $TMP2 1881.18Smrg echo "" 1891.18Smrg fi 1901.18Smrg echo "" 1911.18Smrg fi 1921.46Sbouyer rm -f $TMP $TMP2 1931.46Sbouyer touch $TMP2 1941.77Schristos for dev in $(iostat -x | awk '/^raid/ { print $1 }'); do 1951.46Sbouyer raidctl -s $dev | awk '/^.*: failed$/ {print $0}' > $TMP 1961.46Sbouyer if [ -s $TMP ]; then 1971.46Sbouyer echo "$dev:" >> $TMP2 1981.46Sbouyer cat $TMP >> $TMP2 1991.46Sbouyer fi 2001.46Sbouyer rm -f $TMP 2011.46Sbouyer done 2021.46Sbouyer if [ -s $TMP2 ]; then 2031.46Sbouyer echo "failed RAIDframe component(s):" 2041.46Sbouyer cat $TMP2 2051.46Sbouyer fi 2061.46Sbouyer rm -f $TMP2 2071.18Smrgfi 2081.18Smrg 2091.25Slukemif checkyesno check_mailq; then 2101.18Smrg mailq > $TMP 2111.44Slukem if ! grep -q "queue is empty$" $TMP; then 2121.18Smrg echo "" 2131.18Smrg echo "mail:" 2141.18Smrg cat $TMP 2151.18Smrg fi 2161.18Smrgfi 2171.18Smrg 2181.18Smrgrm -f $TMP 2191.1Scgd 2201.25Slukemif checkyesno check_network; then 2211.18Smrg echo "" 2221.18Smrg echo "network:" 2231.54Sperry if checkyesno full_netstat; then 2241.54Sperry netstat -inv 2251.54Sperry else 2261.61Smartin netstat -inv | awk 'BEGIN { 2271.54Sperry ifs[""] = 0; 2281.54Sperry } 2291.54Sperry /^[^\*]* / { 2301.54Sperry if (NR == 1) { 2311.66Sjdolecek printf("%-8s %12s %6s %12s %6s %6s\n", 2321.54Sperry $1, $(NF-4), $(NF-3), $(NF-2), $(NF-1), $NF); 2331.54Sperry next; 2341.54Sperry } 2351.54Sperry if (!($1 in ifs)) { 2361.66Sjdolecek printf("%-8s %12s %6s %12s %6s %6s\n", 2371.54Sperry $1, $(NF-4), $(NF-3), $(NF-2), $(NF-1), $NF); 2381.54Sperry ifs[$1] = 1; 2391.54Sperry } 2401.54Sperry }' 2411.54Sperry fi 2421.1Scgd echo "" 2431.18Smrg t=/var/rwho/* 2441.18Smrg if [ "$t" != '/var/rwho/*' ]; then 2451.18Smrg ruptime 2461.18Smrg fi 2471.1Scgdfi 2481.1Scgd 2491.25Slukemif checkyesno run_fsck; then 2501.18Smrg echo "" 2511.91Swiz echo "Checking file systems:" 2521.71Sbouyer fsck -n -f ${run_fsck_flags} | grep -v '^\*\* Phase' 2531.18Smrgfi 2541.1Scgd 2551.25Slukemif checkyesno run_rdist && [ -f /etc/Distfile ]; then 2561.85Schristos echo "" 2571.1Scgd echo "Running rdist:" 2581.20Smikel if [ -d /var/log/rdist ]; then 2591.77Schristos logf="$(date +%Y.%b.%d)" 2601.20Smikel rdist -f /etc/Distfile 2>&1 | tee /var/log/rdist/$logf 2611.20Smikel else 2621.20Smikel rdist -f /etc/Distfile 2631.20Smikel fi 2641.1Scgdfi 2651.1Scgd 2661.89Sagcif ${pkg_info} ${_compat_K_flag} -q -E '*'; then 2671.88Schristos if [ -z "$fetch_pkg_vulnerabilities" ]; then 2681.83Schristos echo "fetch_pkg_vulnerabilities is not set in daily.conf(5)." 2691.83Schristos echo "You should set it to YES to enable vulnerability checks" 2701.83Schristos echo "or set it to NO to get rid of this warning." 2711.85Schristos elif checkyesno fetch_pkg_vulnerabilities; then 2721.86Schristos echo "" 2731.86Schristos echo "Fetching package vulnerabilities database:" 2741.89Sagc ( umask 022 && ${pkg_admin} ${_compat_K_flag} \ 2751.85Schristos fetch-pkg-vulnerabilities -u ) 2761.73Sjmmv fi 2771.73Sjmmvfi 2781.73Sjmmv 2791.25Slukemif checkyesno run_security; then 2801.36Slukem SECOUT="$DAILYDIR/sec" 2811.47Sgrant sh /etc/security > "$SECOUT" 2>&1 2821.36Slukem if [ ! -s "$SECOUT" ]; then 2831.49Sjhawk if checkyesno send_empty_security; then 2841.49Sjhawk echo "Nothing to report on $date" > "$SECOUT" 2851.49Sjhawk else 2861.49Sjhawk echo "" 2871.57Satatat echo "Suppressing empty security report." 2881.49Sjhawk fi 2891.49Sjhawk fi 2901.49Sjhawk if [ -s "$SECOUT" ]; then 2911.78Sdarcy if checkyesno separate_security_email; then 2921.78Sdarcy mail -s "$host daily insecurity output for $date" $MAILTO < $SECOUT 2931.78Sdarcy else 2941.78Sdarcy echo "" 2951.78Sdarcy echo "$host daily insecurity output for $date:" 2961.78Sdarcy cat $SECOUT 2971.78Sdarcy fi 2981.28Slukem fi 2991.34Shubertffi 3001.34Shubertf 3011.34Shubertfif checkyesno run_skeyaudit; then 3021.52Sperry if [ -s /etc/skeykeys ]; then 3031.52Sperry echo "" 3041.52Sperry echo "Checking remaining s/key OTPs:" 3051.52Sperry skeyaudit 3061.52Sperry fi 3071.31Sadfi 3081.31Sad 3091.79Sjoergif checkyesno run_makemandb; then 3101.79Sjoerg if [ -f /etc/man.conf -a -x /usr/sbin/makemandb ]; then 3111.79Sjoerg echo "" 3121.79Sjoerg echo "Updating man page index:" 3131.87Swiz (umask 022; nice -n 5 /usr/sbin/makemandb -Q) 3141.79Sjoerg fi 3151.79Sjoergfi 3161.79Sjoerg 3171.31Sadif [ -f /etc/daily.local ]; then 3181.69Shubertf ( . /etc/daily.local ) > $TMP 2>&1 3191.60Skim if [ -s $TMP ] ; then 3201.60Skim printf "\nRunning /etc/daily.local:\n" 3211.60Skim cat $TMP 3221.60Skim fi 3231.60Skim rm -f $TMP 3241.18Smrgfi 325