#!/bin/sh

logfile='/var/log/autoupdates.log'
hostname="$(hostname)"

export DEBIAN_FRONTEND=noninteractive
export NEEDRESTART_MODE=a
echo 'libc6 libraries/restart-without-asking boolean true' | sudo -E debconf-set-selections

log() {
  grep --line-buffered -E '.*' 2>&1 | stdbuf -oL sed -r "s/(.*)/${hostname}: \1/g" 2>&1 | stdbuf sudo -E tee -a "$logfile" 2>&1
}

checkreboot() {
  if [ -f /var/run/reboot-required ]; then
    echo
    echo "REBOOTING..." | sudo tee log
    echo
    sudo -E reboot 2>&1
  fi
}

true | sudo -E tee "$logfile"

echo
echo "UPDATE STARTED - $(date)" | log
echo
checkreboot

sudo -E apt-get update 2>/dev/null | log

updates=$(sudo -E apt list --upgradable 2>/dev/null | wc -l | awk '{$1=$1}1')

if [ $updates -gt 1 ]; then
  echo
  echo "$updates updates will be applied" | log
  echo
else
  echo
  echo "No updates available" | log
  echo
  (echo "UPDATE FINISHED - $(date)" | log) && exit 0
  exit 0
fi

echo
echo "executing autoremove..." | log
echo
sudo -E apt-get -fuy autoremove 2>&1 | log
checkreboot
echo
echo "executing clean..." | log
echo
sudo -E apt-get clean 2>&1 | log
checkreboot
echo
echo "executing upgrade..."
echo
(sudo -E apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" -fuy upgrade 2>&1 | log) || (echo 'dist-upgrade error.' | log)
checkreboot
echo
echo "executing dist-upgrade..."
echo
(sudo -E apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" -fuy dist-upgrade 2>&1 | log) || (echo 'dist-upgrade error.' | log)
checkreboot

(echo "UPDATE FINISHED - $(date)" | log) && exit 0
