2 # Copyright (C) 2019 Ian Kelling
3 # SPDX-License-Identifier: AGPL-3.0-or-later
5 # usage: set DEBUG env var to anything to output to stdout
7 # Note: running this inside a cronjob, it wont mail any output if we end
8 # up rebooting from this script.
10 if [ -z "$BASH_VERSION" ]; then echo "error: shell is not bash" >&2; exit 1; fi
12 source /usr
/local
/lib
/bash-bear
15 m
() { printf "$pre %s\n" "$*"; "$@"; }
16 e
() { printf "$pre %s\n" "$*"; }
17 err
() { echo "[$(date +'%Y-%m-%d %H:%M:%S%z')]: $pre: $*" >&2; }
19 [[ $EUID == 0 ]] ||
exec sudo
-E "${BASH_SOURCE[0]}" "$@"
22 source /a
/bin
/bash_unpublished
/source-state
28 # 2>/dev/null hopefully gets rid of errors like: wall: /dev/pts/0: No such file or directory
29 sed 's/^/myupgrade /' | pee logger
"wall -n" 2>/dev
/null
34 echo "pid $$. unattended upgrade, rebooting in $((x*10)) seconds" | wall
-n 2>/dev
/null
38 if ! fuser
/var
/lib
/dpkg
/lock
&> /dev
/null
; then
39 echo "pid $$. unattended upgrade, rebooting now" | d
40 /a
/bin
/ds
/keyscript-on
44 echo "pid $$. unattended upgrade reboot waiting 10 seconds for dpkg lock" | wall
-n 2>/dev
/null
47 echo "pid $$. dpkg locked for 5 minutes, automatic reboot failed" | d
53 /c
/roles
/prom
/files
/simple
/usr
/local
/bin
/fsf-install-prometheus
54 /c
/roles
/prom_export
/files
/simple
/usr
/local
/bin
/fsf-install-node-exporter
-l 127.0.0.1
57 /c
/roles
/prom_export
/files
/simple
/usr
/local
/bin
/fsf-install-node-exporter
-l 127.0.0.1
60 /c
/roles
/prom_export
/files
/simple
/usr
/local
/bin
/fsf-install-node-exporter
65 # TODO: executed from cron, this doesnt sent an email when we reboot,
66 # because rebooting from the script stops the ability to send email.
67 # We should figure some workaround.
69 # I originally had the idea that for MAIL_HOST, I'd just send an email
70 # if something needs restarting. But atm, I have a bad habit of ignoring
73 if ! needrestart
-p -k &>/dev
/null
; then
77 needrestart
-b -l -r a |
& logger
-t myupgrade
80 # Restart based on library doesnt always work. If we still
81 # detect outdated libraries after trying to automatically restart,
82 # then do a reboot unless we are on systems we care a bit more about
83 # uptime, then send us an email.
85 # Note: I've noticed restart based on library has tended to screw up
86 # desktop related daemons because they have bugs when restarted in
87 # isolation instead of as part of bring up and down the whole desktop.
88 # But, I'd rather something gets messed up than things not get
90 if ! /sbin
/needrestart
-p -l &>/dev
/null
; then
91 if [[ $hn == "$MAIL_HOST" ||
$hn == kd
]]; then
92 # send us an email so we can decide what to do