#!/bin/ksh

# ======================================================================
# === Mise à jour
# ======================================================================
echo "--- DEBUT -------------------- $(date) --------------------"
apt-get update

# ======================================================================
# === Variables système
# ======================================================================
HOSTNAME=$(hostname)
IP=$(ifconfig | grep "inet ad" | grep -v "127.0.0.1" | head -1 | cut -f2 -d: | awk '{print $1}')
DATE=$(date "+%Y-%m-%d %H:%M:%S")
SYSTEM_NAME=$(lsb_release -a 2>/dev/null | grep -i codename | awk ' { print $2 } ' )
SYSTEM_TYPE=$(lsb_release -a 2>/dev/null | grep -i "distributor id" | awk ' { print $3 } ' )
SYSTEM_TYPE_m=$(echo "${SYSTEM_TYPE}" | tr "[A-Z]" "[a-z]")
MAIL_CONTENT_FILENAME="/tmp/mail_content_$$.txt"
PACKAGES_BASE_URL=""
if [[ "${SYSTEM_TYPE_m}" = "debian" ]] ; then
  PACKAGES_BASE_URL="http://packages.debian.org/${SYSTEM_NAME}/"
else 
  if [[ "${SYSTEM_TYPE_m}" = "ubuntu" ]] ; then
    PACKAGES_BASE_URL="http://packages.ubuntu.com/fr/${SYSTEM_NAME}/"
  fi
fi

# ======================================================================
# === Variables à paramétrer
# ======================================================================
MAIL_FROM="serge.simon@gmail.com"
MAIL_DEST="serge.simon@gmail.com"
MAIL_SUBJECT="Server [${HOSTNAME}] - new updates found"

# ======================================================================
# === Corps du traitement
# === Exemple de sortie apt-get si mise à jour :
# ===    18 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
# ======================================================================
NB_EN=$(apt-get -s upgrade | egrep ".*upgraded.*newly installed.*remove" | grep -v "0 upgraded" | wc -l)
NB_FR=$(apt-get -s upgrade | egrep ".*mis à jour.*nouvellement installés.*à enlever.*non mis à jour" | grep -v "0 mis à jour" | wc -l)
if [[ "$NB_EN" -eq 0 && "$NB_FR" -eq 0 ]] ; then
  echo "No updates found, nothing to notify." 
else 
  echo "Updates found."
  PACKAGES=""
  HTML_PACKAGES=""
  apt-get -s upgrade 2>/dev/null | grep "^Inst" | while read INST PACKAGE DUMMY 
  do
    if [[ ! -z "${HTML_PACKAGES}" ]] ; then
      HTML_PACKAGES="${HTML_PACKAGES}, "
      PACKAGES="${PACKAGES} "
    fi
    if [[ ! -z "${PACKAGES_BASE_URL}" ]] ; then
      URL='<a href="'${PACKAGES_BASE_URL}${PACKAGE}'">'${PACKAGE}'</a>'
    else 
      URL="${PACKAGE}"
    fi
    HTML_PACKAGES="${HTML_PACKAGES}${URL}"
    PACKAGES="${PACKAGES}${PACKAGE}"
  done
  echo "Packages to be updated : ${PACKAGES}"
  cat << EOF > "${MAIL_CONTENT_FILENAME}"
From: ${MAIL_FROM}
To: ${MAIL_DEST}
Subject: ${MAIL_SUBJECT}
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="PAA08673.1018277622/${HOSTNAME}"


This is a MIME-encapsulated message


--PAA08673.1018277622/${HOSTNAME}
Content-Type: text/html

    <html>
    <head>
        <title>${MAIL_SUBJECT}</title>
    </head>
    <body>
        <table border="0">
          <tr>
            <td><b>Server</b></td><td>&nbsp;:&nbsp;</td><td>${HOSTNAME} (${IP}) [${SYSTEM_TYPE_m}-${SYSTEM_NAME}]</td>
          </tr><tr>
            <td><b>Date</b></td><td>&nbsp;:&nbsp;</td><td>${DATE}</td>
          </tr><tr>
            <td><b>New packages</b></td><td>&nbsp;:&nbsp;</td><td>${HTML_PACKAGES}</td>
          </tr>
        </table>
    </body>
    </html>
EOF
  echo "Sending mail to : ${MAIL_DEST}"
  esmtp -t < "${MAIL_CONTENT_FILENAME}"
fi
echo "--- FIN   -------------------- $(date) --------------------\n"

