#!/bin/bash
# $Id: sm_execute_update,v 1.1 2013/10/16 15:19:08 sesam Exp $
set -x
unitfile="/lib/systemd/system/sepsesam.service"

read_ini()
{
   SM_INI=`grep -i '^sm_ini=' /etc/sesam2000.ini 2>/dev/null|cut -d"=" -f2`
   echo `grep -i "^$1=" "$SM_INI" 2>/dev/null|cut -d"=" -f2-`
}
echo "Starting update: $1"

[ "$2" = "-f" ] && force="--force"
if [ -r  ${unitfile} ]
then
  grep -q ^KillMode= ${unitfile} && sed -i 's/^KillMode=.*/KillMode=process/' ${unitfile} || sed -i '/ExecStop=.*/a KillMode=process' ${unitfile}
  sed -i 's/sm_shutdown/sm_main stop/' ${unitfile}
  systemctl daemon-reload
fi

gv_rw_work=`read_ini gv_rw_work`
if echo "$1" | grep -q 'deb$'
then
  apt update -y
  apt install -y "${gv_rw_work}/$1"
  iSts=$?
elif echo "$1" | grep -q 'rpm$'
then
  [ -r "${gv_rw_work}/sep-gpg.key" ] && rpm --import "${gv_rw_work}/sep-gpg.key"
  [ -r "${gv_rw_work}/sep-gpg-2026.key" ] && rpm --import "${gv_rw_work}/sep-gpg-2026.key"
  echo "Check, if update can be done by RPM directly..."
  rpm -U ${force} --test "${gv_rw_work}/$1" 
  iSts=$?
  if [ "$iSts" = "0" ]
  then
    echo "Start update by RPM command: rpm -U -vvv ${force} ${gv_rw_work}/$1"
    rpm -U -vvv ${force} "${gv_rw_work}/$1" >>/tmp/sesam_update_rpm.log 2>&1
    iSts=$?
  else
    if type zypper >/dev/null 2>&1
    then
      echo "Direct update by RPM does not work. Retry using 'zypper'..."
      zypper install --allow-unsigned-rpm -y "${gv_rw_work}/$1"
      iSts=$?
    else
      if type dnf >/dev/null 2>&1
      then
        echo "Direct update by RPM does not work. Retry using 'dnf'..."
        dnf install -y "${gv_rw_work}/$1"
        iSts=$?
      fi
    fi
  fi
elif echo "$1" | grep -q 'sh$'
then
  chmod +x "${gv_rw_work}/$1"
  "${gv_rw_work}/$1"
  iSts=$?
else
  echo "STATUS=ERROR MSG=Unknown package type"
  exit 2
fi  
if [ "$iSts" = "0" ]
then
  echo "STATUS=SUCCESS MSG=Updated"
else
  echo "STATUS=ERROR MSG=Not updated"
fi
exit $iSts
