#!/bin/sh
#
# update.sh,v 1.01 2020/07/25 clearness
#
# Verwendet nur 'doas syspatch', nicht 'doas pkg_add -u'.
#
# Skript: $_wd/update.sh
# /etc/doas.conf: permit nopass user cmd syspatch
# $HOME/.xsession (am Beginn): . $HOME/.profile
# $HOME/.profile:
# /bin/sh -c 'cd <$_wd/Pfad/einfuegen>; ./update.sh 2>./debug.log 1>&2'&
# Turn off Strict Bourne shell mode.
set +o sh
###########################
# Debugging aktivieren
set -x
# Working Directory
_wd=$HOME/system/update
# Update-Intervall
_tage=3
# Datum-Logfile
_checkdates=check_dates.log
###########################
check_date() {
local _intervall=$(($_tage*86400))
[[ -s $_checkdates ]] || touch $_checkdates
[[ $(date +%s) -gt $(($(tail -n1 $_checkdates)+$_intervall)) ]] || exit 0
}
# check_net wartet bis eine Internetverbindung besteht. Das Update-Skript
# blockiert nicht den Login-Vorgang, da es als Hintergrund-Prozess gestartet wird.
check_net() {
if [[ -n $(ping -c1 openbsd.org) ]]; then
return
else
xterm -fullscreen -fa 'Monospace' -fs 13 -e ' \
printf "Das Update-Skript hat Probleme den Server 'openbsd.org' zu pingen!"; \
read'
exit 1
fi
}
check_update() {
if [[ -n $(doas syspatch -c) ]]; then
return
else
xmessage -timeout 3 -button '' -center 'Keine Updates vorhanden.'
date +%s >> $_checkdates
exit 0
fi
}
check_user() {
xmessage -buttons Ja,Nein -default Ja -center \
'Updates vorhanden. Jetzt herunterladen und installieren?'
case $? in
101) return
;;
102) exit 0
;;
esac
}
perform_update() {
xterm -fullscreen -fa 'Monospace' -fs 13 -e ' \
printf "Beginne mit Update. Abbruch jederzeit mit Strg+c moeglich.\n\n"; \
doas syspatch; \
printf "\nFertig!"; \
read'
date +%s >> $_checkdates
}
mkdir -p $_wd
cd $_wd
check_date
check_net
check_update
check_user
perform_update
exit 0