#!/bin/bash # Script Name: check_updates_deb # Author Name: Matt McKinnon # Date: 7th June 2016 # Description: For use on Debian Based Systems # This script will: # Clean up the local apt repository of retrieved packages (apt-get clean) # Resync the package index (apt-get update) # If called with AUTOUPDATE set to yes then updates will be downloaded and applied with no feed back (not recommended) # If called without AUTOUPDATE then packages are downloaded and an email is sent informing which packages are to be updated. # And more ;-) # NOTE: Perl is needed for this script to work. # # Make user configuration changes in this section # MAILTO="support@comprofix.com" MAILFROM="support@comprofix.com" THISSERVER=$(hostname -f) SMTP="mail.comprofix.com" AUTOUPDATE="no" LOGFILE="/var/log/server_maint.log" THISSERVER=$(hostname -f) # # End of user configuration section # DASHES="---------------------------------------------------------------------------------" DASHES2="=================================================================================" # Check if the script is being run as root exit if it is not. if [ $(id -u) -ne 0 ] then echo "You need to be root to run this script." exit 1 fi startlogging() { echo $DASHES2 >> $LOGFILE echo "$0 started running at $(date)" >> $LOGFILE echo $DASHES2 >> $LOGFILE } stoplogging() { echo "$(date) [MESSAGE] $0 finished runnning" >> $LOGFILE echo $DASHES >> $LOGFILE } check_return() { if [ "$?" -ne "0" ] then echo "$(date) [ERROR] $1 failed to run" >> $LOGFILE send_error_email $1 stoplogging exit 1 fi echo "$(date) [SUCCESS] $1 ran without error" >> $LOGFILE } send_error_email() { sendemail -o tls=no -s $SMTP -t $MAILTO -f "$THISSERVER <$MAILFROM>" -u "[$THISSERVER] There was an error whilst running $0" -m " Hello, Whilst running the update script ($0) on $THISSERVER there was a problem. [ERROR] "$1" failed to run Please log in via ssh (e.g. ssh root@$(hostname -f)) and check the log file: vim $LOGFILE Regards." -q } startlogging apt-get clean > /dev/null check_return "apt-get clean" apt-get update > /dev/null check_return "apt-get update" if [[ "$AUTOUPDATE" == "yes" ]] then apt-get -yqq upgrade > /dev/null check_return "apt-get -yq upgrade" else PACKAGES_TO_BE_UPGRADED=$(apt-get -Vs upgrade | perl -ne 'print if /upgraded:/ .. /upgraded,/') apt-get -yqd upgrade > /dev/null check_return "apt-get -yqd upgrade" fi if [[ -z $PACKAGES_TO_BE_UPGRADED ]] then echo "$(date) [MESSAGE] No packages need updating." >> $LOGFILE else echo " Hello, Packages have been downloaded onto $THISSERVER. $PACKAGES_TO_BE_UPGRADED To update the server log in via ssh (e.g. ssh root@$(hostname -f)) and run the following command: apt-get upgrade See the logfile for more info: vim $LOGFILE Regards. " >/tmp/servermail.msg sendemail -o tls=no -s $SMTP -t $MAILTO -f "$THISSERVER <$MAILFROM>" -u "[$THISSERVER] server may need some updates applied" -m "$(cat /tmp/servermail.msg)" -q echo "$(date) [MESSAGE] Packages need updating email sent to $MAILTO" >> $LOGFILE fi stoplogging exit 0