#!/usr/bin/env bash
#
# package updater call by crond and command execute environment
#

# ----- Constant definition -----
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# -- command path --
APT_GET="/usr/bin/apt-get" 
DPKG="/usr/bin/dpkg"
WGET="/usr/bin/wget"
ECHO="/bin/echo"
LS="/bin/ls"
RM="/bin/rm"
PWD="/bin/pwd"
HEAD="/usr/bin/head"
TR="/usr/bin/tr"
AWK="/usr/bin/awk"
CAT="/bin/cat"
CHMOD="/bin/chmod"
DATE="/bin/date"
SLEEP="/bin/sleep"
REBOOT="/sbin/reboot"
TOUCH="/usr/bin/touch"
SYNC="/bin/sync"
EXPR="/usr/bin/expr"

APT_GET_UPDATE="${APT_GET} update"
APT_GET_INSTALL="${APT_GET} -y install"
DPKG_INSTALL="${DPKG} -i"

# -- work dir --
WORK_DIR="/tmp"
# -- apt repository server--
#SERVER="https://solajit-admin:Veglia0914@homedev.pvsafety.jp:443/"
SERVER="https://solajit-admin:Veglia0914@necommand-01.pvsafety.jp:443/"

#FINISHED_FILE_DIR="/var/tmp"
#FINISHED_FILE_NAME="logger_reboot"
#FINISHED_FILE_VALUE="update"

#UPDATE_FAILED_FILE="/var/tmp/update_failed"
#RECOVER_FILE_NAME="/etc/rc.local.d/update_recovery"
#RECOVER_LOG_NAME="/var/local/update_log/pkg_update_recover_"
#RECOVER_BOOT_WAIT="60"

WDT_SUSPEND_CHECK_ALIVE="/tmp/watchdog_stop"

# ----- Function -----
# no fnction

# ----- Main -----

${ECHO} "===== EXECUTE DATE : `date` ====="
${ECHO} ""

if [ $# -lt 1 -a $# -gt 2 ]; then
  ${ECHO} "wrong argument : $@"
  ${ECHO} "===== Error exit. ====="
  exit 1
fi

pkg_file=$1
#call_file=$2
#command_id=$3

if [ -x ${pkg_file} ]; then
  ${ECHO} "file not found : ${pkg_file}"
  ${ECHO} "===== Error exit. ====="
  exit 2
fi


#${ECHO} " -- Delete file : ${call_file} --"
#${RM} ${call_file}

${ECHO} "----- START : Update Package list. -----"

${APT_GET_UPDATE}

${ECHO} "-----  END  : Update Package list. -----"
${ECHO} ""

# -- Create file for Watchdog : Stop watchdog process monitoring --
${ECHO} "----- START : Create file for Watchdog : Stop watchdog process monitoring. -----"
${TOUCH} ${WDT_SUSPEND_CHECK_ALIVE} > /dev/null
${ECHO} "-----  END  : Create file for Watchdog : Stop watchdog process monitoring. -----"
${ECHO} ""

${ECHO} "----- START : Download Package File. -----"
err_cnt=0
dl_cnt=0
pkg_list=""
now_dir=`${PWD}`
while read line
do
  #${ECHO} "line=$line"
  if [ "x${line}" = "x" -o "${line:0:1}" = "#" ]; then
    continue
  fi
  arr=( `${ECHO} ${line}` )
  #arr=$line

  if [ ${#arr[@]} -eq 4 ]; then
    # check if downloaded
    ls "${arr[1]}/${arr[3]}" > /dev/null 2>&1
    ret=`${ECHO} $?`
    if [ "x${ret}" != "x0" ]; then
#    if [ -a "${arr[1]}/${arr[3]}" ]; then
      # download package
      ${ECHO} "   ----- download package file: ${SERVER}${arr[2]}/${arr[3]} -> ${arr[1]} -------"
      cd ${arr[1]}
      ${WGET} --no-check-certificate "${SERVER}${arr[2]}/${arr[3]}"
      ret=`${ECHO} $?`
      if [ "x$ret" != "x0" ]; then
        ${RM} -f ${arr[3]}
        ret=1
      else
        ${LS} -l ${arr[3]}
        ret=`${ECHO} $?`
      fi
      # download check
      if [ "x${ret}" != "x0" ]; then
        ${ECHO} "      Download Package File Error: ${arr[2]} ${arr[3]} : (${ret})"
        err_cnt=`${EXPR} ${err_cnt} + 1`
        continue
      fi
    else
      ${ECHO} "   ----- download package file: already downloaded : ${arr[1]}/${arr[3]} -------"
    fi

    # add install list
    dl_cnt=`${EXPR} ${dl_cnt} + 1`
    pkg_list="${pkg_list} ${arr[1]}/${arr[3]}"
    cd ${now_dir}
  fi
done < ${pkg_file}
cd ${now_dir}
${ECHO} "-----  END  : Download Package File. -----"


if [ "x${err_cnt}" != "x0" ]; then
  ${ECHO} "package file download error : error file num ${err_cnt}"
  ret=-1

# 0 packages
elif [ "x${dl_cnt}" = "x0" ]; then
  ${ECHO} "----- START : Update Package File. -----"
  ${ECHO} "0 packages"
  ${ECHO} "-----  END  : Update Package File. -----"
  ret=0

# install package
else
  ${ECHO} "----- START : Update Package File. -----"
  ${DPKG_INSTALL} ${pkg_list}
  ret=`${ECHO} $?`
  if [ "x${err_cnt}" != "x0" ]; then
    ${ECHO} "package file update error : error code ${ret}"
  fi
  ${ECHO} "-----  END  : Update Package File. -----"

fi


# -- Delete file for Watchdog : Stop watchdog process monitoring --
${ECHO} "----- START : Delete file for Watchdog : Stop watchdog process monitoring. -----"
${RM} ${WDT_SUSPEND_CHECK_ALIVE} > /dev/null
${ECHO} "-----  END  : Delete file for Watchdog : Stop watchdog process monitoring. -----"
${ECHO} ""

if [ "x${ret}" != "x0" ]; then
  ${ECHO} "   *****************************"
  ${ECHO} "   ***** Failed to Update. *****"
  ${ECHO} "   *****************************"
  ${ECHO} ""
fi


${ECHO} " --- Display package list file : ${pkg_file} ---"
${CAT} ${pkg_file}

#if [ "x${cnt_failed}" = "x0" ]; then
  ${ECHO} " --- Delete package list file : ${pkg_file} ---"
  ${RM} ${pkg_file}
  ${ECHO} ""
#fi

${ECHO} "===== FINISH DATE : `date` ====="

${SYNC}

exit ${ret}
