#!/bin/sh
#
# VMTux.net
#
# /usr/bin/vmt-install
#
#
. /etc/vmt/vmt-colors
. /etc/vmt/vmt-conf

PATH=/bin:/sbin

umask 022

if [ "$(id -u)" -eq 0 ]; then
  echo "${BRed}Please run as user.${Reset}" 
  exit 1; 
fi

if [ ! -d $VMT_PKG_DIR ]; then
  echo "${BRed}No packages directory found.${Reset}" 
  exit 1; 
fi

if [ -z "$1" ]; then echo "Usage: $(basename $0) [--version=2.0] package-name(s)|-boot"; exit 1; fi

DEPLIST=dep.lst

cd $VMT_PKG_DIR

function GetDependencies()
{
  if [ -z "$1" ]; then return ; fi

  package="${1%.squ}"
  squ="${package}.squ"  
  md5="${squ}.md5"

  sed "/^${package}$/d" -i ${DEPLIST} ; echo ${package} >> ${DEPLIST}
  
  mirror="${VMT_MIRROR_URL}/${activerelease}/packages"
  
  if [ ! -f ${md5} ]; then
    wget -q "${mirror}/${md5}" 2>/dev/null
  fi
    
  if [ ! -f ${md5} ]; then
    echo "${BRed}Package ${BYellow}${package}${BRed} does not exist${Reset}"
    return
  fi
  
  if [ ! -f ${squ} ]; then
    echo -n "${Cyan}"
    wget "${mirror}/${squ}"
    echo -n "${Reset}"
  fi

  if [ ! -f ${squ} ]; then
    echo "${BRed}Error downloading ${BYellow}${package}${Reset}"
    return
  fi
  
  md5sum -s -c ${md5}

  if [ "$?" != 0 ]; then
    echo "${BRed} Checksum ${BYellow}${package}${BRed} incorrect${Reset}"
    return
  fi

  dep=${squ}.dep
  
  if [ ! -f ${dep} ]; then
    wget -q "${mirror}/${dep}" 2>/dev/null
  fi
  
  if [ -s ${dep} ]; then
    dependencies=$(cat ${dep})
    echo "${Cyan}Dependencies ${BYellow}${package}${Cyan} loading"
    for dependency in ${dependencies}; do GetDependencies ${dependency} ; done
    echo "${Cyan}Dependencies ${BYellow}${package}${Cyan} ready${Reset}"
  fi
}

function Install()
{
  package="${1%.squ}"
  squ=${package}.squ
  
  mountpoint=${VMT_LOOP}/${package}
  
  if [ -d $mountpoint ]; then 
    echo "${BBlue}Package ${BYellow}${package}${BGreen} existing${Reset}"
    return
  fi

  echo -n "${BBlue}Install ${BYellow}${package}${Reset} "
  
  if [ ! -f $squ ]; then
    echo
    echo "${BRed}Package ${BYellow}${package}${BRed} not found.${Reset}"
    return
  fi

  sudo mkdir -p "${mountpoint}"
  sudo mount ${squ} "${mountpoint}" -t squashfs -o loop,ro
  sudo cp -asf "${mountpoint}"/* / >>${VMT_LOG_INSTALL} 2>&1

  if [[ -d "${mountpoint}/usr/local/lib" || -d "${mountpoint}/usr/lib" ]]; then sudo ldconfig ; fi

  if [[ -d "${mountpoint}/usr/local/lib/modules" || -d "${mountpoint}/usr/lib/modules" ]]; then sudo depmod ; fi

  afterburner="${mountpoint}/usr/local/vmt-afterburner/${package}"
  if [ -x "$afterburner" ]; then
    PATH=/usr/local/bin:/usr/local/sbin:/bin:/sbin
    result=$(sudo /bin/sh "$afterburner" --install 2>&1)
    PATH=/bin:/sbin
    if [ -n "$result" ]; then
      echo
      echo "${BRed}${result}${Reset}"
      echo -n "${BBlue}Install ${BYellow}${package}${Reset} "
    fi
  fi
 
  echo "${BGreen}done.${Reset}"
}

function GetDepsAndInstall()
{
  package="${1%.squ}"
  echo -n > ${DEPLIST}
  GetDependencies ${package}
  for deppackage in $(tac ${DEPLIST}); do Install ${deppackage} ; done
  rm ${DEPLIST}
}

# -------
activerelease="${VMT_RELEASE}"

if [ "$1" == "--version" ]; then
  activerelease="$2"
  shift 2
fi

if [ "$1" == "-boot" ]; then
  echo -n >$VMT_LOG_INSTALL

  echo -n "${BBlue}Loading packages... ${Yellow}"

  (if [ -f $VMT_BOOTLIST ]; then
    while read -r package
    do
      GetDepsAndInstall ${package} >> $VMT_LOG_INSTALL 2>&1
    done < $VMT_BOOTLIST
  fi) & rotdash $!

  echo "${BGreen}done.${Reset}"

else

  for packagename in "$@"; do
    packages=$(wget -qO- ${VMT_SEARCH_URL}/${packagename}/${activerelease})
    if [ -z "$packages" ]; then
      echo "${BRed}Package ${BYellow}${packagename}${BRed} not found.${Reset}"
    else
      if [ "$(echo $packages | wc -w)" -gt "1" ]; then echo "${BGreen}available (${activerelease}): ${BYellow}${packages}${Reset}" ; exit 1 ; fi
      package="${packages}"
      GetDepsAndInstall ${package}
      sed "/^${package}$/d" -i ${VMT_BOOTLIST} ; echo ${package} >> ${VMT_BOOTLIST}
    fi
  done

fi

exit 0
