#!/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

##########
${ECHO} "### ${pkg_file} ###"
${LS} -al ${pkg_file}
##########

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. -----"
${ECHO} "----- START : Check Package List 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. -----"
${ECHO} "-----  END  : Check Package List 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 : Install Package File. -----"
  ${DPKG_INSTALL} ${pkg_list}
  ret=`${ECHO} $?`
  if [ "x${ret}" != "x0" ]; then
    ${ECHO} "package file install error : error code ${ret}"
  fi
  ${ECHO} "-----  END  : Install 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 Install *****"
  ${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}
