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