161f28255Scgd#!/bin/sh - 261f28255Scgd# 3*ebc67df8Skre# $NetBSD: daily,v 1.93 2018/09/23 23:16:34 kre Exp $ 4d351214aSmikel# @(#)daily 8.2 (Berkeley) 1/25/94 561f28255Scgd# 6016b324aSmrg 7bd8157b7Smycroftexport PATH=/bin:/usr/bin:/sbin:/usr/sbin 8016b324aSmrgumask 077 9016b324aSmrg 10d1f7e40eSlukemif [ -s /etc/daily.conf ]; then 11d1f7e40eSlukem . /etc/daily.conf 12d1f7e40eSlukemfi 131410cf30Sagcif [ -s /etc/pkgpath.conf ]; then 141410cf30Sagc . /etc/pkgpath.conf 151410cf30Sagcfi 16d1f7e40eSlukem 174f848eeeSchristoshost="$(hostname)" 184f848eeeSchristosdate="$(date)" 193c8a1444Sjmmvrcvar_manpage='daily.conf(5)' 20d1f7e40eSlukem 21dc76b0b0Sprlw1pkg_admin=${pkg_admin:-/usr/sbin/pkg_admin} 22dc76b0b0Sprlw1pkg_info=${pkg_info:-/usr/sbin/pkg_info} 23dc76b0b0Sprlw1 24d1f7e40eSlukemecho "To: ${MAILTO:-root}" 25d1f7e40eSlukemecho "Subject: $host daily output for $date" 26d1f7e40eSlukemecho "" 27d1f7e40eSlukem 288f59ce8eSlukemif [ -f /etc/rc.subr ]; then 298f59ce8eSlukem . /etc/rc.subr 308f59ce8eSlukemelse 318f59ce8eSlukem echo "Can't read /etc/rc.subr; aborting." 328f59ce8eSlukem exit 1; 338f59ce8eSlukemfi 348f59ce8eSlukem 35*ebc67df8Skreif [ -z "$MAILTO" ] || [ "$USER" != "root" ]; then 36ce3196e8Sphil MAILTO=root 37ce3196e8Sphilfi 38ce3196e8Sphil 3953cb2117Sjmmvif [ -n "${pkgdb_dir}" ]; then 4053cb2117Sjmmv echo "WARNING: Setting pkgdb_dir in daily.conf(5) is deprecated" 4153cb2117Sjmmv echo "WARNING: Please define PKG_DBDIR in pkg_install.conf(5) instead" 4253cb2117Sjmmv _compat_K_flag="-K ${pkgdb_dir}" 4353cb2117Sjmmvfi 4453cb2117Sjmmv 45f067035dSlukemecho "" 464f848eeeSchristosecho "Uptime: $(uptime)" 47f067035dSlukem 480780a6b0Sabs# Uncommenting any of the finds below would open up a race condition attack 490780a6b0Sabs# based on symlinks, potentially allowing removal of any file on the system. 500780a6b0Sabs# 514371fb29Sjtc#echo "" 524371fb29Sjtc#echo "Removing scratch and junk files:" 53*ebc67df8Skre#if [ -d /tmp ] && ! [ -h /tmp ]; then 544371fb29Sjtc# cd /tmp && { 554371fb29Sjtc# find . -type f -atime +3 -exec rm -f -- {} \; 564371fb29Sjtc# find . ! -name . -type d -mtime +1 -exec rmdir -- {} \; \ 574371fb29Sjtc# >/dev/null 2>&1; } 584371fb29Sjtc#fi 5961f28255Scgd 60*ebc67df8Skre#if [ -d /var/tmp ] && ! [ -h /var/tmp ]; then 614371fb29Sjtc# cd /var/tmp && { 624371fb29Sjtc# find . ! -name . -atime +7 -exec rm -f -- {} \; 63eea58e84Saymeric# find . ! \( -name . -o -name vi.recover \) -type d \ 64eea58e84Saymeric# -mtime +1 -exec rmdir -- {} \; \ 654371fb29Sjtc# >/dev/null 2>&1; } 664371fb29Sjtc#fi 678671b6cbScgd 68e471d816Spk# Additional junk directory cleanup would go like this: 69*ebc67df8Skre#if [ -d /scratch ] && ! [ -h /scratch ]; then 70e471d816Spk# cd /scratch && { 71e471d816Spk# find . ! -name . -atime +1 -exec rm -f -- {} \; 72e471d816Spk# find . ! -name . -type d -mtime +1 -exec rmdir -- {} \; \ 73e471d816Spk# >/dev/null 2>&1; } 74e471d816Spk#fi 758671b6cbScgd 76*ebc67df8Skre#if [ -d /var/rwho ] && ! [ -h /var/rwho ] ; then 774371fb29Sjtc# cd /var/rwho && { 784371fb29Sjtc# find . ! -name . -mtime +7 -exec rm -f -- {} \; ; } 794371fb29Sjtc#fi 808671b6cbScgd 81d405da7fSmarttiDAILYDIR=$(mktemp -d -t _daily) || exit 1 82016b324aSmrg 83684e89f3Slukemtrap "/bin/rm -rf $DAILYDIR ; exit 0" EXIT INT QUIT 84016b324aSmrg 85684e89f3Slukemif ! cd "$DAILYDIR"; then 86684e89f3Slukem echo "Can not cd to $DAILYDIR". 87016b324aSmrg exit 1 88016b324aSmrgfi 89016b324aSmrg 908671b6cbScgdTMP=daily.$$ 91016b324aSmrgTMP2=daily2.$$ 92016b324aSmrg 938f59ce8eSlukemif checkyesno find_core; then 947da8bb10Serh # Turn "foo !bar bax" into "-fstype foo -o ! -fstype bar -o -fstype bax" 954f848eeeSchristos ignfstypes="$(echo $find_core_ignore_fstypes | \ 967da8bb10Serh sed -e's/\(!*\)\([^[:space:]]\{1,\}\)/-o \1 -fstype \2/g' \ 974f848eeeSchristos -e's/^-o //')" 98e763a079Schristos # Turn "foo bar" into "( -path foo -o -path bar ) -prune -o" 99e763a079Schristos # Set ignpaths empty if no find_core_ignore_paths given 100e763a079Schristos if [ -n "$find_core_ignore_paths" ]; then 101e763a079Schristos ignpaths="$(printf " -o -path %s" $find_core_ignore_paths)" 102e763a079Schristos ignpaths="( ${ignpaths# -o } ) -prune -o" 103e763a079Schristos else 104e763a079Schristos ignpaths="" 105e763a079Schristos fi 1067da8bb10Serh find / \( $ignfstypes \) -prune -o \ 107e763a079Schristos ${ignpaths} \ 1083ce3a9a2Satatat -name 'lost+found' -prune -o \ 1093ce3a9a2Satatat \( -name '*.core' -o -name 'core' \) -type f -print > $TMP 1104371fb29Sjtc# \( -name '[#,]*' -o -name '.#*' -o -name a.out \ 1114371fb29Sjtc# -o -name '*.CKP' -o -name '.emacs_[0-9]*' \) \ 1124371fb29Sjtc# -a -atime +3 -exec rm -f -- {} \; -a -print > $TMP 1138671b6cbScgd 114a93021e9Snathanw egrep '\.core$|^core$' $TMP > $TMP2 115016b324aSmrg if [ -s $TMP2 ]; then 1168671b6cbScgd echo "" 1178671b6cbScgd echo "Possible core dumps:" 118016b324aSmrg cat $TMP2 119016b324aSmrg fi 1208671b6cbScgd 121016b324aSmrg# egrep -v '\.core' $TMP > $TMP2 122016b324aSmrg# if [ -s $TMP2 ]; then 123016b324aSmrg# echo "" 124016b324aSmrg# echo "Deleted files:" 125016b324aSmrg# cat $TMP2 126016b324aSmrg# fi 1278671b6cbScgd 128016b324aSmrg rm -f $TMP $TMP2 129016b324aSmrgfi 1309bc01e96Scgd 1318f59ce8eSlukemif checkyesno run_msgs; then 1328671b6cbScgd msgs -c 133016b324aSmrgfi 1347bdc3a61Scgd 1358f59ce8eSlukemif checkyesno expire_news && [ -f /etc/news.expire ]; then 13661f28255Scgd /etc/news.expire 13761f28255Scgdfi 13861f28255Scgd 1398f59ce8eSlukemif checkyesno purge_accounting && [ -f /var/account/acct ]; then 140d351214aSmikel echo "" 141d351214aSmikel echo "Purging accounting records:" 1429be30af8Smrg if [ -f /var/account/acct.0.gz ]; then 1439be30af8Smrg mv /var/account/acct.2.gz /var/account/acct.3.gz 2>/dev/null 1449be30af8Smrg mv /var/account/acct.1.gz /var/account/acct.2.gz 2>/dev/null 1459be30af8Smrg mv /var/account/acct.0.gz /var/account/acct.1.gz 2>/dev/null 1469be30af8Smrg else 1476297d767Slukem mv /var/account/acct.2 /var/account/acct.3 2>/dev/null 1486297d767Slukem mv /var/account/acct.1 /var/account/acct.2 2>/dev/null 1496297d767Slukem mv /var/account/acct.0 /var/account/acct.1 2>/dev/null 1509be30af8Smrg fi 151d351214aSmikel cp /var/account/acct /var/account/acct.0 152d351214aSmikel sa -sq 1539be30af8Smrg if [ -f /var/account/acct.1.gz ]; then 1549be30af8Smrg gzip /var/account/acct.0 1559be30af8Smrg fi 156b09f56e8Scgdfi 15761f28255Scgd 1588f59ce8eSlukemif checkyesno run_calendar; then 15974f5f0daSjhawk calendar -a > $TMP 2>&1 160016b324aSmrg if [ -s $TMP ]; then 16161f28255Scgd echo "" 16261f28255Scgd echo "Running calendar:" 163016b324aSmrg cat $TMP 164016b324aSmrg fi 165016b324aSmrg rm -f $TMP 166016b324aSmrgfi 16761f28255Scgd 1688f59ce8eSlukemif checkyesno check_disks; then 16916a3b1f9Sperry if checkyesno show_remote_fs; then 170b2595274Sperry df -hi -t nokernfs,procfs,ptyfs,null,fdesc > $TMP 17116a3b1f9Sperry else 172b2595274Sperry df -hil -t nokernfs,procfs,ptyfs,null,fdesc > $TMP 17316a3b1f9Sperry fi 174eda014eaSperry if [ -s /etc/dumpdates ] ; then 1750d724a7bSperry dump -W > $TMP2 176eda014eaSperry fi 177*ebc67df8Skre if [ -s $TMP ] || [ -s $TMP2 ]; then 17861f28255Scgd echo "" 17961f28255Scgd echo "Checking subsystem status:" 18061f28255Scgd echo "" 18161f28255Scgd echo "disks:" 182016b324aSmrg if [ -s $TMP ]; then 18315e3f0ccSperry cat $TMP | sed 's/Mounted on/Mount/' 18461f28255Scgd echo "" 185016b324aSmrg fi 186016b324aSmrg if [ -s $TMP2 ]; then 187016b324aSmrg cat $TMP2 18861f28255Scgd echo "" 189016b324aSmrg fi 19061f28255Scgd echo "" 191016b324aSmrg fi 192016b324aSmrg rm -f $TMP $TMP2 19342b4a643Sbouyer touch $TMP2 1944f848eeeSchristos for dev in $(iostat -x | awk '/^raid/ { print $1 }'); do 19542b4a643Sbouyer raidctl -s $dev | awk '/^.*: failed$/ {print $0}' > $TMP 19642b4a643Sbouyer if [ -s $TMP ]; then 19742b4a643Sbouyer echo "$dev:" >> $TMP2 19842b4a643Sbouyer cat $TMP >> $TMP2 19942b4a643Sbouyer fi 20042b4a643Sbouyer rm -f $TMP 20142b4a643Sbouyer done 20242b4a643Sbouyer if [ -s $TMP2 ]; then 20342b4a643Sbouyer echo "failed RAIDframe component(s):" 20442b4a643Sbouyer cat $TMP2 20542b4a643Sbouyer fi 20642b4a643Sbouyer rm -f $TMP2 20742b4a643Sbouyerfi 208016b324aSmrg 2098f59ce8eSlukemif checkyesno check_mailq; then 210016b324aSmrg mailq > $TMP 2110770a23fSlukem if ! grep -q "queue is empty$" $TMP; then 212016b324aSmrg echo "" 213016b324aSmrg echo "mail:" 214016b324aSmrg cat $TMP 215016b324aSmrg fi 216016b324aSmrgfi 217016b324aSmrg 218016b324aSmrgrm -f $TMP 219016b324aSmrg 2208f59ce8eSlukemif checkyesno check_network; then 22161f28255Scgd echo "" 22261f28255Scgd echo "network:" 22343a0fc6fSperry if checkyesno full_netstat; then 2242ece7fc4Sitojun netstat -inv 22543a0fc6fSperry else 2265a942efbSmartin netstat -inv | awk 'BEGIN { 22743a0fc6fSperry ifs[""] = 0; 22843a0fc6fSperry } 22943a0fc6fSperry /^[^\*]* / { 23043a0fc6fSperry if (NR == 1) { 23194172cbcSjdolecek printf("%-8s %12s %6s %12s %6s %6s\n", 23243a0fc6fSperry $1, $(NF-4), $(NF-3), $(NF-2), $(NF-1), $NF); 23343a0fc6fSperry next; 23443a0fc6fSperry } 23543a0fc6fSperry if (!($1 in ifs)) { 23694172cbcSjdolecek printf("%-8s %12s %6s %12s %6s %6s\n", 23743a0fc6fSperry $1, $(NF-4), $(NF-3), $(NF-2), $(NF-1), $NF); 23843a0fc6fSperry ifs[$1] = 1; 23943a0fc6fSperry } 24043a0fc6fSperry }' 24143a0fc6fSperry fi 24261f28255Scgd echo "" 243016b324aSmrg t=/var/rwho/* 244016b324aSmrg if [ "$t" != '/var/rwho/*' ]; then 24561f28255Scgd ruptime 246016b324aSmrg fi 247016b324aSmrgfi 24861f28255Scgd 2498f59ce8eSlukemif checkyesno run_fsck; then 25061f28255Scgd echo "" 25161f28255Scgd echo "Checking file systems:" 252db3a1845Sbouyer fsck -n -f ${run_fsck_flags} | grep -v '^\*\* Phase' 253016b324aSmrgfi 25461f28255Scgd 2558f59ce8eSlukemif checkyesno run_rdist && [ -f /etc/Distfile ]; then 256778f4384Schristos echo "" 25761f28255Scgd echo "Running rdist:" 258ef538c31Smikel if [ -d /var/log/rdist ]; then 2594f848eeeSchristos logf="$(date +%Y.%b.%d)" 260ef538c31Smikel rdist -f /etc/Distfile 2>&1 | tee /var/log/rdist/$logf 261ef538c31Smikel else 26261f28255Scgd rdist -f /etc/Distfile 26361f28255Scgd fi 264ef538c31Smikelfi 26561f28255Scgd 2661410cf30Sagcif ${pkg_info} ${_compat_K_flag} -q -E '*'; then 267774aa666Schristos if [ -z "$fetch_pkg_vulnerabilities" ]; then 268da43ca12Schristos echo "fetch_pkg_vulnerabilities is not set in daily.conf(5)." 269da43ca12Schristos echo "You should set it to YES to enable vulnerability checks" 270da43ca12Schristos echo "or set it to NO to get rid of this warning." 271778f4384Schristos elif checkyesno fetch_pkg_vulnerabilities; then 2723351729aSchristos echo "" 2733351729aSchristos echo "Fetching package vulnerabilities database:" 2741410cf30Sagc ( umask 022 && ${pkg_admin} ${_compat_K_flag} \ 275778f4384Schristos fetch-pkg-vulnerabilities -u ) 276497b5f80Sjmmv fi 277497b5f80Sjmmvfi 278497b5f80Sjmmv 2798f59ce8eSlukemif checkyesno run_security; then 280684e89f3Slukem SECOUT="$DAILYDIR/sec" 28147224db0Sgrant sh /etc/security > "$SECOUT" 2>&1 282684e89f3Slukem if [ ! -s "$SECOUT" ]; then 2833b390ffbSjhawk if checkyesno send_empty_security; then 284684e89f3Slukem echo "Nothing to report on $date" > "$SECOUT" 2853b390ffbSjhawk else 2863b390ffbSjhawk echo "" 287da4f7330Satatat echo "Suppressing empty security report." 288d1f7e40eSlukem fi 2893b390ffbSjhawk fi 2903b390ffbSjhawk if [ -s "$SECOUT" ]; then 2915bc4a2e2Sdarcy if checkyesno separate_security_email; then 2925bc4a2e2Sdarcy mail -s "$host daily insecurity output for $date" $MAILTO < $SECOUT 2935bc4a2e2Sdarcy else 2945bc4a2e2Sdarcy echo "" 2955bc4a2e2Sdarcy echo "$host daily insecurity output for $date:" 2965bc4a2e2Sdarcy cat $SECOUT 2975bc4a2e2Sdarcy fi 2983b390ffbSjhawk fi 299016b324aSmrgfi 300016b324aSmrg 301389581c1Shubertfif checkyesno run_skeyaudit; then 302eda014eaSperry if [ -s /etc/skeykeys ]; then 303389581c1Shubertf echo "" 304389581c1Shubertf echo "Checking remaining s/key OTPs:" 305389581c1Shubertf skeyaudit 306389581c1Shubertf fi 307eda014eaSperryfi 308389581c1Shubertf 309410d0f43Sjoergif checkyesno run_makemandb; then 310*ebc67df8Skre if [ -f /etc/man.conf ] && [ -x /usr/sbin/makemandb ]; then 311410d0f43Sjoerg echo "" 312410d0f43Sjoerg echo "Updating man page index:" 313c9ea1856Swiz (umask 022; nice -n 5 /usr/sbin/makemandb -Q) 314410d0f43Sjoerg fi 315410d0f43Sjoergfi 316410d0f43Sjoerg 317645ee407Sadif [ -f /etc/daily.local ]; then 318bfc08843Shubertf ( . /etc/daily.local ) > $TMP 2>&1 319ed816845Skim if [ -s $TMP ] ; then 320ed816845Skim printf "\nRunning /etc/daily.local:\n" 321ed816845Skim cat $TMP 322ed816845Skim fi 323ed816845Skim rm -f $TMP 324645ee407Sadfi 325