#!/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 [ -z "$1" ]; then echo "Usage: $(basename $0) [--version=2.0] package-name(s)|-boot"; exit 1; fi

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

# -------

level=0

InstallPackage() 
{
  if [ -z "$1" ]; then echo "${BRed}InstallPackage <packagename>${Reset}" ; return ; fi

  local package="${1%.squ}"
  local mountpoint=${VMT_LOOP}/${package}
  local squ="${package}.squ"
  local dep=${squ}.dep
  local shortcomplete=true

  local indent=""
  
  for iii in $(seq ${level}); do indent="${indent}\t" ; done
    
  echo -n "${indent}${BBlue}Install ${BYellow}${package}${Reset} ..."

  if [ -d ${mountpoint} ]; then
    echo "${BGreen} existing${Reset}"
    return
  fi

  md5="${squ}.md5"

  if [ ! -f ${md5} ]; then
    wget -q "${mirror}/${md5}" 2>/dev/null
  fi

  if [ ! -f ${md5} ]; then
    echo
    echo "${indent}${BRed}Package ${BYellow}${package}${BRed} does not exist${Reset}"
    return
  fi

  if [ ! -f ${squ} ]; then
    echo
    echo -n "${Cyan}"
    wget "${mirror}/${squ}"
    echo -n "${Reset}"
    shortcomplete=false
  fi

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

  md5sum -s -c ${md5}

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

  if [ ! -f ${dep} ]; then
    wget -q "${mirror}/${dep}" 2>/dev/null
  fi

  if [ -s ${dep} ]; then
    if [ $shortcomplete == "true" ]; then echo ; fi
    let level++
    for dependency in $(cat ${dep}); do InstallPackage ${dependency} ; done
    let level--
    shortcomplete=false
  fi

  # use locals package, mountpoint, squ, dep and SHORT
  sudo mkdir -p "${mountpoint}"
  sudo mount ${squ} "${mountpoint}" -t squashfs -o loop,ro
  sudo cp -asf "${mountpoint}"/* /

  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
    export i="${indent}"
    colorit sudo "${afterburner}" --install
  fi

  if [ $shortcomplete == "true" ]; then
    echo " ${BGreen}done.${Reset}"
  else
    echo "${indent}${BBlue}Install ${BYellow}${package}${Reset} ${BGreen}done.${Reset}"
  fi
}

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

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

mirror="${VMT_MIRROR_URL}/${activerelease}/packages"      

if [ "$1" == "-boot" ]; then
  if [ -f ${VMT_BOOTLIST} ]; then
    while read -r package
    do
      InstallPackage ${package}
    done < ${VMT_BOOTLIST}
  fi
else
  for packagename in "$@"; do
    package=$(wget -qO- ${VMT_SEARCH_URL}/${packagename}/${activerelease})
    if [ -z "${package}" ]; then
      echo "${BRed}Package ${BYellow}${packagename}${BRed} not found.${Reset}"
    else
      if [ "$(echo ${package} | wc -w)" -gt "1" ]; then echo "${BGreen}available (${activerelease}): ${BYellow}${package}${Reset}" ; exit 1 ; fi
      InstallPackage ${package}
      grep -qxF "${package}" ${VMT_BOOTLIST} || echo "${package}" >> ${VMT_BOOTLIST}
    fi
  done
fi

exit 0
