#!/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
      # file delete
      ${ECHO} " -- Delete file : ${arr[1]}/${arr[3]} --"
      ${RM} -f ${arr[1]}/${arr[3]}
    fi

    # 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

    # 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${ret}" != "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
if [ "x${ret}" != "x0" ]; then
  ${ECHO} " --- Delete package list file : ${pkg_file} ---"
  ${RM} ${pkg_file}
  ${ECHO} ""
fi

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

${SYNC}

exit ${ret}
