#!/bin/bash


###----------------------------------------###
###
###  Octopus Aegir Installer
###
###  Copyright (C) 2010-2014 Omega8.cc
###  noc@omega8.cc www.omega8.cc
###
###  This program is free software. You can
###  redistribute it and/or modify it under
###  the terms of the GNU GPL as published by
###  the Free Software Foundation, version 2
###  or later.
###
###  This program is distributed in the hope
###  that it will be useful, but WITHOUT ANY
###  WARRANTY; without even the implied
###  warranty of MERCHANTABILITY or FITNESS
###  FOR A PARTICULAR PURPOSE. See the GNU GPL
###  for more details.
###
###  You should have received a copy of the
###  GNU GPL along with this program.
###  If not, see http://www.gnu.org/licenses/
###
###  Code: https://code.aegir.cc/aegir
###
###----------------------------------------###


###----------------------------------------###
### DON'T EDIT ANYTHING BELOW THIS LINE    ###
###----------------------------------------###

_INSTALLER_VERSION=EDIT_INSTALLER_VERSION


###---### Distro config.
#
_AGOV=EDIT_AGOV
_CIVICRM_M6=EDIT_CIVICRM_M6
_CIVICRM_M7=EDIT_CIVICRM_M7
_CIVICRM_PN=EDIT_CIVICRM_PN
_COD=EDIT_COD
_COMMERCE1=EDIT_COMMERCE1
_COMMERCE2=EDIT_COMMERCE2
_COMMONS2=EDIT_COMMONS2
_COMMONS3=EDIT_COMMONS3
_DRUPAL_EDGE_8=EDIT_DRUPAL_EDGE_8
_DRUPAL7=EDIT_DRUPAL7
_DRUPAL8=EDIT_DRUPAL8
_ERPAL=EDIT_ERPAL
_GUARDR=EDIT_GUARDR
_MANAGINGNEWS=EDIT_MANAGINGNEWS
_NODESTREAM7=EDIT_NODESTREAM7
_OPEN_DEALS=EDIT_OPEN_DEALS
_OPENACADEMY=EDIT_OPENACADEMY
_OPENATRIUM6=EDIT_OPENATRIUM6
_OPENATRIUM7=EDIT_OPENATRIUM7
_OPENBLOG=EDIT_OPENBLOG
_OPENCHURCH=EDIT_OPENCHURCH
_OPENDEALS=EDIT_OPENDEALS
_OPENOUTREACH=EDIT_OPENOUTREACH
_OPENPUBLISH=EDIT_OPENPUBLISH
_OPENSCHOLAR=EDIT_OPENSCHOLAR
_PANOPOLY=EDIT_PANOPOLY
_PROSEPOINT=EDIT_PROSEPOINT
_RECRUITER=EDIT_RECRUITER
_RESTAURANT=EDIT_RESTAURANT
_SMALLCORE6=EDIT_SMALLCORE6
_SMALLCORE7=EDIT_SMALLCORE7
_SMALLCORE8=EDIT_SMALLCORE8
_SPARK=EDIT_SPARK
_TOTEM=EDIT_TOTEM
_UBERCART6=EDIT_UBERCART6
_UBERCART7=EDIT_UBERCART7


###---### Main config.
#
_ADM_EMAIL="EDIT_MY_EMAIL"
_AEGIR_VERSION=EDIT_AEGIR_VERSION
_AUTOPILOT=EDIT_AUTOPILOT
_BOA_REPO_GIT_URL=EDIT_BOA_REPO_GIT_URL
_BOA_REPO_NAME=EDIT_BOA_REPO_NAME
_CLIENT_CORES=EDIT_CLIENT_CORES
_CLIENT_EMAIL="EDIT_CLIENT_EMAIL"
_CLIENT_OPTION=EDIT_CLIENT_OPTION
_DEBUG_MODE=EDIT_DEBUG_MODE
_DISTRO=EDIT_DISTRO
_DOMAIN=EDIT_DOMAIN
_DRUSH_CC_REQ=NO
_DRUSH_VERSION=EDIT_DRUSH_VERSION
_HM_DISTRO=EDIT_HM_DISTRO
_HM_ONLY=EDIT_HM_ONLY
_HTTP_WILDCARD=EDIT_HTTP_WILDCARD
_LAST_HMR=EDIT_LAST_HMR
_LASTNUM=EDIT_LASTNUM
_NOW=EDIT_NOW
_PHP_CLI_VERSION=EDIT_PHP_CLI_VERSION
_PHP_FPM_VERSION=EDIT_PHP_FPM_VERSION
_PLATFORMS_LIST="EDIT_PLATFORMS_LIST"
_PURGE_FOR_SEVEN=EDIT_PURGE_FOR_SEVEN
_PURGE_MODE=EDIT_PURGE_MODE
_SPINNER=EDIT_SPINNER
_STATUS=INIT
_THIS_DB_HOST=EDIT_THIS_DB_HOST
_USE_STOCK=EDIT_USE_STOCK
_WEBG=EDIT_WEBG
#
_USER=EDIT_USER
_ROOT="/data/disk/$_USER"
_HOSTMASTER_ROOT="$_ROOT/aegir/distro/$_HM_DISTRO"
_PREV_HOSTMASTER_ROOT="$_ROOT/aegir/distro/$_LAST_HMR"
#
if [ "$_PHP_CLI_VERSION" = "5.5" ] && [ -x "/opt/php55/bin/php" ] ; then
  _L_PHP_CLI=/opt/php55/bin
elif [ "$_PHP_CLI_VERSION" = "5.4" ] && [ -x "/opt/php54/bin/php" ] ; then
  _L_PHP_CLI=/opt/php54/bin
elif [ "$_PHP_CLI_VERSION" = "5.3" ] && [ -x "/opt/php53/bin/php" ] ; then
  _L_PHP_CLI=/opt/php53/bin
elif [ "$_PHP_CLI_VERSION" = "5.2" ] && [ -x "/opt/php52/bin/php" ] ; then
  _L_PHP_CLI=/opt/php52/bin
fi
_DRUSHCMD="$_L_PHP_CLI/php $_ROOT/tools/drush/drush.php"
#
SHELL=/bin/bash
PATH=$_L_PHP_CLI:/usr/local/bin:/usr/local/sbin:/opt/local/bin:/usr/bin:/usr/sbin:/bin:/sbin


###---### Functions.
#
# Noticeable messages.
msg () {
  echo "Octopus [`date`] ==> $*"
}
#
# Small spinner.
mrun () {
  CMD="$1"
  touch busy
  if [ "$_SPINNER" = "YES" ] ; then
    bash $_SRCDIR/spinner busy &
  fi
  if $CMD >> $_LOG; then
    rm busy
    sleep 1
    return 0
  fi
}
#
# Extract archive.
extract_archive () {
  if [ ! -z $1 ] ; then
    case $1 in
      *.tar.bz2)   tar xjf $1    ;;
      *.tar.gz)    tar xzf $1    ;;
      *.bz2)       bunzip2 $1    ;;
      *.rar)       unrar x $1    ;;
      *.gz)        gunzip -q $1  ;;
      *.tar)       tar xf $1     ;;
      *.tbz2)      tar xjf $1    ;;
      *.tgz)       tar xzf $1    ;;
      *.zip)       unzip -qq $1  ;;
      *.Z)         uncompress $1 ;;
      *.7z)        7z x $1       ;;
      *)           echo "'$1' cannot be extracted via >extract<" ;;
    esac
    rm -f $1
  fi
}
#
# Download and extract from dev.
get_dev_ext () {
  if [ ! -z $1 ] ; then
    curl -L --max-redirs 10 -k -s -O --retry 10 --retry-delay 15 -A iCab "http://files.aegir.cc/dev/$_AEGIR_VERSION/$1"
    extract_archive "$1"
  fi
}
#
# Download and extract from dev/contrib mirror.
get_dev_contrib () {
  if [ ! -z $1 ] ; then
    curl -L --max-redirs 10 -k -s -O --retry 10 --retry-delay 15 -A iCab "http://files.aegir.cc/dev/contrib/$1"
    extract_archive "$1"
  fi
}
#
# Update local INI for PHP CLI on the Aegir Satellite Instance.
update_php_cli_local_ini () {
  _U_HD="$_ROOT/.drush"
  _U_TP="$_ROOT/.tmp"
  _PHP_CLI_UPDATE=NO
  _CHECK_USE_PHP_CLI=`grep "/opt/php" $_DRUSH_FILE`
  _PHP_V="55 54 53 52"
  for e in $_PHP_V; do
    if [[ "$_CHECK_USE_PHP_CLI" =~ "php${e}" ]] && [ ! -e "$_U_HD/.ctrl.php${e}.txt" ] ; then
      _PHP_CLI_UPDATE=YES
    fi
  done
  if [ "$_PHP_CLI_UPDATE" = "YES" ] || [ ! -e "$_U_HD/php.ini" ] || [ ! -d "$_U_TP" ] || [ ! -e "$_U_HD/.ctrl.eq.txt" ] ; then
    rm -f -r $_U_TP
    mkdir -p $_U_TP
    chmod 700 $_U_TP
    mkdir -p $_U_HD/{sys,xts,usr}
    rm -f $_U_HD/.ctrl.php*
    rm -f $_U_HD/php.ini
    if [[ "$_CHECK_USE_PHP_CLI" =~ "php55" ]] ; then
      cp -af /opt/php55/lib/php.ini $_U_HD/php.ini
      _U_INI=55
    elif [[ "$_CHECK_USE_PHP_CLI" =~ "php54" ]] ; then
      cp -af /opt/php54/lib/php.ini $_U_HD/php.ini
      _U_INI=54
    elif [[ "$_CHECK_USE_PHP_CLI" =~ "php53" ]] ; then
      cp -af /opt/php53/lib/php.ini $_U_HD/php.ini
      _U_INI=53
    elif [[ "$_CHECK_USE_PHP_CLI" =~ "php52" ]] ; then
      cp -af /opt/php52/lib/php.ini $_U_HD/php.ini
      _U_INI=52
    fi
    if [ -e "$_U_HD/php.ini" ] ; then
      _INI="open_basedir = \".:${_ROOT}:/data/all:/data/disk/all:/data/conf:/usr/bin:/opt/tools/drush:/tmp:/opt/tika:/opt/tika7:/opt/tika8:/opt/tika9:/opt/php52:/opt/php53:/opt/php54:/opt/php55\""
      _INI=${_INI//\//\\\/}
      _QTP=${_U_TP//\//\\\/}
      sed -i "s/.*open_basedir =.*/$_INI/g"                              $_U_HD/php.ini &> /dev/null
      sed -i "s/.*error_reporting =.*/error_reporting = 1/g"             $_U_HD/php.ini &> /dev/null
      sed -i "s/.*session.save_path =.*/session.save_path = $_QTP/g"     $_U_HD/php.ini &> /dev/null
      sed -i "s/.*soap.wsdl_cache_dir =.*/soap.wsdl_cache_dir = $_QTP/g" $_U_HD/php.ini &> /dev/null
      sed -i "s/.*sys_temp_dir =.*/sys_temp_dir = $_QTP/g"               $_U_HD/php.ini &> /dev/null
      sed -i "s/.*upload_tmp_dir =.*/upload_tmp_dir = $_QTP/g"           $_U_HD/php.ini &> /dev/null
      echo > $_U_HD/.ctrl.php${_U_INI}.txt
      echo > $_U_HD/.ctrl.eq.txt
    fi
  fi
}
#
# Update php-cli for Drush.
update_php_cli_drush () {
  _DRUSH_FILE="$_ROOT/tools/drush/drush.php"
  if [ "$_PHP_CLI_VERSION" = "5.5" ] && [ -x "/opt/php55/bin/php" ] ; then
    sed -i "s/^#\!\/.*/#\!\/opt\/php55\/bin\/php/g"  $_DRUSH_FILE &> /dev/null
  elif [ "$_PHP_CLI_VERSION" = "5.4" ] && [ -x "/opt/php54/bin/php" ] ; then
    sed -i "s/^#\!\/.*/#\!\/opt\/php54\/bin\/php/g"  $_DRUSH_FILE &> /dev/null
  elif [ "$_PHP_CLI_VERSION" = "5.3" ] && [ -x "/opt/php53/bin/php" ] ; then
    sed -i "s/^#\!\/.*/#\!\/opt\/php53\/bin\/php/g"  $_DRUSH_FILE &> /dev/null
  elif [ "$_PHP_CLI_VERSION" = "5.2" ] && [ -x "/opt/php52/bin/php" ] ; then
    sed -i "s/^#\!\/.*/#\!\/opt\/php52\/bin\/php/g"  $_DRUSH_FILE &> /dev/null
  else
    msg "$_STATUS B: FATAL ERROR: _PHP_CLI_VERSION must be set to one of supported values"
    msg "$_STATUS B: FATAL ERROR: Aborting AegirSetupB installer NOW!"
    touch /opt/tmp/status-AegirSetupB-FAIL
    exit 1
  fi
}
#
_SRCDIR=/opt/tmp/files
_LOG=/var/backups/octopus-$_USER-$_NOW.log
#

###---### Checking status.
#
if [ -e "$_ROOT/aegir.sh" ] ; then
  _STATUS=UPGRADE
  cd $_ROOT
fi


###---### User check.
#
msg "$_STATUS B: Aegir automated install script part B"
if [ `whoami` = "root" ] ; then
  msg "$_STATUS B: FATAL ERROR: This script should be ran as a non-root user"
  msg "$_STATUS B: FATAL ERROR: Aborting AegirSetupB installer NOW!"
  touch /opt/tmp/status-AegirSetupB-FAIL
  exit 1
fi


###---### Add required users and create directories.
#
msg "$_STATUS B: Creating directories with correct permissions"
if [ -e "$_ROOT/aegir.sh" ] ; then
  rm -f $_ROOT/aegir.sh
fi
touch $_ROOT/aegir.sh
chmod 0700 $_ROOT/aegir.sh &> /dev/null
echo -e "#!/bin/bash\n\nPATH=.:$_L_PHP_CLI:/usr/sbin:/usr/bin:/sbin:/bin\n$_DRUSHCMD '@hostmaster' hosting-dispatch\ntouch $_ROOT/$_USER-task.done" | tee -a $_ROOT/aegir.sh >/dev/null 2>&1

mkdir -p $_ROOT/aegir/distro
mkdir -p $_ROOT/distro/$_DISTRO
mkdir -p $_ROOT/src/$_DISTRO
mkdir -p $_ROOT/src/{modules,themes}
mkdir -p $_ROOT/{tools,log,u,backups,platforms,clients}
chmod 0700 $_ROOT/{log,src,u} &> /dev/null
chmod 0700 $_ROOT/src/$_DISTRO &> /dev/null
chmod 0700 $_ROOT/src/{modules,themes} &> /dev/null
chmod 0711 $_ROOT/{aegir,aegir/distro,distro,platforms,tools} &> /dev/null
chmod 0711 $_ROOT/distro/$_DISTRO &> /dev/null
chmod 0750 $_ROOT/{backups,clients} &> /dev/null

if [ "$_STATUS" = "UPGRADE" ] ; then
 #msg "$_STATUS B: UPGRADE in progress..."
 if [ -d "$_ROOT/distro" ] ; then
  #msg "$_STATUS B: UPGRADE v.2 in progress..."
  if [ -e "$_ROOT/log/domain.txt" ] ; then
   _DOMAIN=`cat $_ROOT/log/domain.txt`
   _DOMAIN=`echo -n $_DOMAIN | tr -d "\n"`
  fi
  #msg "$_STATUS B: _DOMAIN is $_DOMAIN"
 elif [ ! -d "$_ROOT/distro" ] ; then
  #msg "$_STATUS B: UPGRADE v.1 in progress..."
  #msg "$_STATUS B: _DISTRO is $_DISTRO"
  if [ -e "$_ROOT/log/domain.txt" ] ; then
   _DOMAIN=`cat $_ROOT/log/domain.txt`
   _DOMAIN=`echo -n $_DOMAIN | tr -d "\n"`
  fi
  #msg "$_STATUS B: _DOMAIN is $_DOMAIN"
 fi
else
 true
 #msg "$_STATUS B: NEW AEGIR setup in progress..."
 #msg "$_STATUS B: _DISTRO is $_DISTRO"
 #msg "$_STATUS B: _DOMAIN is $_DOMAIN"
fi
echo $_DOMAIN > $_ROOT/log/domain.txt


###---### Running standard installer.
#
msg "$_STATUS B: Running standard installer"
if [ "$_STATUS" = "UPGRADE" ] ; then
  mkdir -p $_ROOT/backups/system
  chmod 700 $_ROOT/backups/system
  if [ -d "$_ROOT/aegir/config" ] ; then
    if [ ! -d "$_ROOT/config" ] ; then
      cd $_ROOT/aegir
      mv -f config $_ROOT/config &> /dev/null
      ln -sf $_ROOT/config $_ROOT/aegir/config
    fi
  fi
  if [ -d "$_ROOT/tools/drush" ] ; then
    cd $_ROOT/tools
    mv -f drush $_ROOT/backups/system/drush-pre-$_DISTRO-$_NOW &> /dev/null
  fi
fi
cd $_ROOT/tools
msg "$_STATUS B: Downloading drush..."
get_dev_ext "drush-$_DRUSH_VERSION.tar.gz"
find $_ROOT/tools -type d -exec chmod 0755 {} \; &> /dev/null
find $_ROOT/tools -type f -exec chmod 0644 {} \; &> /dev/null
chmod 755 $_ROOT/tools/drush/drush
chmod 755 $_ROOT/tools/drush/drush.php
if [ "$_DRUSH_VERSION" = "mini-4-14-03-2014" ] ; then
  _DRUSH_CC_REQ=NO
  sed -i "s/which one she wants./which one she wants.\n  chdir(\$request['base_project_path'])\;/g" $_ROOT/tools/drush/commands/pm/package_handler/wget.inc &> /dev/null
else
  _DRUSH_CC_REQ=YES
fi

update_php_cli_drush
update_php_cli_local_ini

if [ "$_STATUS" = "UPGRADE" ] ; then
  mkdir -p $_ROOT/backups/system
  chmod 700 $_ROOT/backups/system
  mv -f $_ROOT/backups/drush-pre* $_ROOT/backups/system/ &> /dev/null
  _B_EXT="provision drush_make clean_missing_modules drush_ecl provision_boost provision_cdn provision_civicrm provision_platform_git provision_site_backup provision_tasks_extra registry_rebuild security_check security_review"
  for e in $_B_EXT; do
    if [ -e "$_ROOT/.drush/$e" ] ; then
      mv -f $_ROOT/.drush/$e $_ROOT/backups/system/$e-pre-$_DISTRO-$_NOW &> /dev/null
      mv -f $_ROOT/backups/$e-pre* $_ROOT/backups/system/ &> /dev/null
    fi
    if [ -e "$_ROOT/.drush/xts/$e" ] ; then
      mv -f $_ROOT/.drush/xts/$e $_ROOT/backups/system/$e-pre-$_DISTRO-$_NOW &> /dev/null
      mv -f $_ROOT/backups/$e-pre* $_ROOT/backups/system/ &> /dev/null
    fi
    if [ -e "$_ROOT/.drush/usr/$e" ] ; then
      mv -f $_ROOT/.drush/usr/$e $_ROOT/backups/system/$e-pre-$_DISTRO-$_NOW &> /dev/null
      mv -f $_ROOT/backups/$e-pre* $_ROOT/backups/system/ &> /dev/null
    fi
    if [ -e "$_ROOT/.drush/sys/$e" ] ; then
      mv -f $_ROOT/.drush/sys/$e $_ROOT/backups/system/$e-pre-$_DISTRO-$_NOW &> /dev/null
      mv -f $_ROOT/backups/$e-pre* $_ROOT/backups/system/ &> /dev/null
    fi
  done
fi

if $_DRUSHCMD help > /dev/null ; then
  msg "$_STATUS B: Drush seems to be functioning properly"
else
  msg "$_STATUS B: FATAL ERROR: Drush is broken ($DRUSH help failed)"
  msg "$_STATUS B: FATAL ERROR: Aborting AegirSetupB installer NOW!"
  touch /opt/tmp/status-AegirSetupB-FAIL
  exit 1
fi
msg "$_STATUS B: Installing provision backend in $_ROOT/.drush"
mkdir -p $_ROOT/.drush/{sys,xts,usr}
cd $_ROOT/.drush
if [ "$_AEGIR_VERSION" = "HEAD" ] ; then
  if [ "$_USE_STOCK" = "YES" ] ; then
    git clone --branch 6.x-2.x-stock-revert git://github.com/omega8cc/provision.git $_ROOT/.drush/sys/provision &> /dev/null
  else
    if [ "$_BOA_REPO_NAME" = "barracuda" ] || [ "$_BOA_REPO_NAME" = "octopus" ] ; then
      _BOA_REPO_GIT_URL_LOCAL="http://git.drupal.org/sandbox/omega8cc"
      git clone $_BOA_REPO_GIT_URL_LOCAL/1074910.git $_ROOT/.drush/sys/provision &> /dev/null
      _BOA_REPO_GIT_URL_Q=${_BOA_REPO_GIT_URL_LOCAL//\//\\\/}
      sed -i "s/MAKEFILE_REPO_GIT_URL/$_BOA_REPO_GIT_URL_Q/g" $_ROOT/.drush/sys/provision/aegir.make &> /dev/null
      sed -i "s/hostmaster.git/1074912.git/g" $_ROOT/.drush/sys/provision/aegir.make &> /dev/null
      rm -f -r $_ROOT/.drush/sys/provision/.git
    else
      git clone $_BOA_REPO_GIT_URL/provision.git $_ROOT/.drush/sys/provision &> /dev/null
      _BOA_REPO_GIT_URL_Q=${_BOA_REPO_GIT_URL//\//\\\/}
      sed -i "s/MAKEFILE_REPO_GIT_URL/$_BOA_REPO_GIT_URL_Q/g" $_ROOT/.drush/sys/provision/aegir.make &> /dev/null
      rm -f -r $_ROOT/.drush/sys/provision/.git
    fi
  fi
  if [ "$_STATUS" = "UPGRADE" ] ; then
    cd $_ROOT/.drush/sys
    get_dev_ext "drush_make.tar.gz"
  fi
  msg "$_STATUS B: Downloading Drush and Provision extensions..."
  git clone --branch $_CIVICRM_PN git://github.com/omega8cc/provision_civicrm.git $_ROOT/.drush/xts/provision_civicrm      &> /dev/null
  git clone --branch 6.x-2.x git://github.com/omega8cc/provision_cdn.git $_ROOT/.drush/xts/provision_cdn                   &> /dev/null
  git clone --branch 6.x-2.x git://github.com/omega8cc/provision_platform_git.git $_ROOT/.drush/xts/provision_platform_git &> /dev/null
  git clone --branch 6.x-2.x git://github.com/omega8cc/provision_site_backup.git $_ROOT/.drush/xts/provision_site_backup   &> /dev/null
  git clone --branch 6.x-2.x git://github.com/omega8cc/remote_import.git $_ROOT/.drush/sys/provision/remote_import         &> /dev/null
  git clone --branch 6.x-3.x git://github.com/omega8cc/provision_tasks_extra.git $_ROOT/.drush/xts/provision_tasks_extra   &> /dev/null
  git clone --branch 7.x-1.x git://github.com/omega8cc/drush_ecl.git $_ROOT/.drush/usr/drush_ecl                           &> /dev/null
  git clone --branch 7.x-2.x git://github.com/omega8cc/registry_rebuild.git $_ROOT/.drush/usr/registry_rebuild             &> /dev/null
  git clone --branch 7.x-1.x git://github.com/omega8cc/security_review.git $_ROOT/.drush/xts/security_review               &> /dev/null
  git clone --branch 7.x-2.x git://github.com/omega8cc/provision_boost.git $_ROOT/.drush/xts/provision_boost               &> /dev/null
  rm -f -r $_ROOT/.drush/*/.git
  rm -f -r $_ROOT/.drush/*/*/.git
  cd $_ROOT/.drush/usr
  get_dev_ext "clean_missing_modules.tar.gz"
else
  curl -L --max-redirs 10 -k -s --retry 10 --retry-delay 15 -A iCab "http://files.aegir.cc/versions/stable/tar/provision-$_AEGIR_VERSION.tar.gz" | tar -xzf -
  if [ "$_STATUS" = "UPGRADE" ] ; then
    cd $_ROOT/.drush/sys
    get_dev_ext "drush_make.tar.gz"
  fi
  msg "$_STATUS B: Downloading Drush and Provision extensions..."
  cd $_ROOT/.drush/xts
  _G_EXT="provision_boost provision_cdn provision_civicrm provision_platform_git provision_site_backup provision_tasks_extra security_review"
  for e in $_G_EXT; do
    get_dev_ext "$e.tar.gz"
  done
  cd $_ROOT/.drush/usr
  _G_EXT="clean_missing_modules drush_ecl registry_rebuild "
  for e in $_G_EXT; do
    get_dev_ext "$e.tar.gz"
  done
  cd $_ROOT/.drush/sys/provision
  get_dev_ext "remote_import.tar.gz"
  cd $_ROOT/.drush
fi
if [ "$_HTTP_WILDCARD" = "YES" ] ; then
  sed -i "s/\!empty.*';/'*';/g" $_ROOT/.drush/sys/provision/http/Provision/Config/Nginx/server.tpl.php         &> /dev/null
  sed -i "s/\!empty.*';/'*';/g" $_ROOT/.drush/sys/provision/http/Provision/Config/Nginx/vhost.tpl.php          &> /dev/null
  sed -i "s/\!empty.*';/'*';/g" $_ROOT/.drush/sys/provision/http/Provision/Config/Nginx/vhost_disabled.tpl.php &> /dev/null
  sed -i "s/\!empty.*';/'*';/g" $_ROOT/.drush/xts/provision_cdn/Provision/Config/cdn.tpl.php                   &> /dev/null
fi
sed -i "s/drush_log(t('Contrib latestDir/drush_log(dt('Contrib latestDir/g" $_ROOT/.drush/sys/provision/platform/verify.provision.inc &> /dev/null

###---### Build Aegir base.
#
_LOCAL_STATUS="$_STATUS"
if [ -e "/var/run/aegir_upgrade.pid" ] ; then
  _LOCAL_STATUS=INIT
fi
if [ "$_LOCAL_STATUS" = "INIT" ] ; then
  cd $_ROOT
  _AGRPXSWD=`cat $_ROOT/.$_USER.pass.txt`
  _AGRPASWD=`echo -n $_AGRPXSWD | tr -d "\n"`
  _AEGIR_HOST=`uname -n`
  msg "$_STATUS B: Running hostmaster-install, please wait..."
  if [ "$_USE_STOCK" = "YES" ] || [ "$_DRUSH_CC_REQ" = "YES" ] ; then
    $_DRUSHCMD cache-clear drush >$_ROOT/log/install.log 2>&1
  fi
  if [ "$_USE_STOCK" = "YES" ] ; then
    if [ "$_DEBUG_MODE" = "YES" ] ; then
      $_DRUSHCMD hostmaster-install $_DOMAIN --aegir_host=$_AEGIR_HOST --aegir_db_user=$_USER --aegir_db_pass=$_AGRPASWD --aegir_root=$_ROOT --root=$_HOSTMASTER_ROOT --http_service_type=nginx --aegir_db_host=$_THIS_DB_HOST --client_email=$_ADM_EMAIL --script_user=$_USER --web_group=$_WEBG --version=$_AEGIR_VERSION -y -d
    else
      $_DRUSHCMD hostmaster-install $_DOMAIN --aegir_host=$_AEGIR_HOST --aegir_db_user=$_USER --aegir_db_pass=$_AGRPASWD --aegir_root=$_ROOT --root=$_HOSTMASTER_ROOT --http_service_type=nginx --aegir_db_host=$_THIS_DB_HOST --client_email=$_ADM_EMAIL --script_user=$_USER --web_group=$_WEBG --version=$_AEGIR_VERSION -y >$_ROOT/log/install.log 2>&1
    fi
  else
    if [ "$_DEBUG_MODE" = "YES" ] ; then
      $_DRUSHCMD hostmaster-install $_DOMAIN --aegir_host=$_AEGIR_HOST --aegir_db_user=$_USER --aegir_db_pass=$_AGRPASWD --aegir_root=$_ROOT --root=$_HOSTMASTER_ROOT --http_service_type=nginx --db_service_type=mysql --db_port=3306 --aegir_db_host=$_THIS_DB_HOST --client_email=$_ADM_EMAIL --script_user=$_USER --web_group=$_WEBG --version=$_AEGIR_VERSION --profile=hostmaster -y -d
    else
      $_DRUSHCMD hostmaster-install $_DOMAIN --aegir_host=$_AEGIR_HOST --aegir_db_user=$_USER --aegir_db_pass=$_AGRPASWD --aegir_root=$_ROOT --root=$_HOSTMASTER_ROOT --http_service_type=nginx --db_service_type=mysql --db_port=3306 --aegir_db_host=$_THIS_DB_HOST --client_email=$_ADM_EMAIL --script_user=$_USER --web_group=$_WEBG --version=$_AEGIR_VERSION --profile=hostmaster -y >$_ROOT/log/install.log 2>&1
    fi
  fi
  cd $_HOSTMASTER_ROOT
  mkdir -p sites/$_DOMAIN/files/{tmp,js,css}
  chmod 02775 -R sites/$_DOMAIN/files &> /dev/null
  chgrp -R $_WEBG sites/$_DOMAIN/files &> /dev/null
  rm -f $_ROOT/u/$_DOMAIN
  ln -sf $_HOSTMASTER_ROOT $_ROOT/u/$_DOMAIN
  rm -f /data/u/$_DOMAIN
  ln -sf $_HOSTMASTER_ROOT /data/u/$_DOMAIN
  if [ "$_USE_STOCK" = "YES" ] || [ "$_DRUSH_CC_REQ" = "YES" ] ; then
    $_DRUSHCMD cache-clear drush &> /dev/null
  fi
  msg "$_STATUS B: Running hosting-dispatch (1/3)..."
  $_DRUSHCMD '@hostmaster' hosting-dispatch &> /dev/null
  mrun "sleep 5"
  msg "$_STATUS B: Running hosting-dispatch (2/3)..."
  $_DRUSHCMD '@hostmaster' hosting-dispatch &> /dev/null
  mrun "sleep 5"
  msg "$_STATUS B: Running hosting-dispatch (3/3)..."
  $_DRUSHCMD '@hostmaster' hosting-dispatch &> /dev/null
else
  msg "$_STATUS B: Testing previous install..."
  if [ ! -e "$_PREV_HOSTMASTER_ROOT/sites/$_DOMAIN/settings.php" ] ; then
    _DEBUG_MODE=YES
    msg "$_STATUS B: Testing previous install... OPS, zombie found, moving it to backups..."
    mv -f $_PREV_HOSTMASTER_ROOT $_ROOT/backups/system/empty-host-master-$_LAST_HMR-$_NOW &> /dev/null
    cd $_ROOT/aegir/distro
    list=([0-9]*)
    last=${list[@]: -1}
    _L_LAST_HMR=$last
    nextnum=00$((10#${last%%[^0-9]*} + 1))
    nextnum=${nextnum: -3}
    _L_HM_DISTRO=${nextnum}
    _HOSTMASTER_ROOT="$_ROOT/aegir/distro/$_L_HM_DISTRO"
    _PREV_HOSTMASTER_ROOT="$_ROOT/aegir/distro/$_L_LAST_HMR"
    msg "$_STATUS B: Testing previous install again after removing zombie..."
    if [ ! -e "$_PREV_HOSTMASTER_ROOT/sites/$_DOMAIN/settings.php" ] ; then
      _DEBUG_MODE=YES
      msg "$_STATUS B: Testing previous install... OPS, another zombie found, moving it to backups..."
      mv -f $_PREV_HOSTMASTER_ROOT $_ROOT/backups/system/empty-host-master-$_L_HM_DISTRO-$_NOW-sec &> /dev/null
      cd $_ROOT/aegir/distro
      list=([0-9]*)
      last=${list[@]: -1}
      _L_LAST_HMR=$last
      nextnum=00$((10#${last%%[^0-9]*} + 1))
      nextnum=${nextnum: -3}
      _L_HM_DISTRO=${nextnum}
      _HOSTMASTER_ROOT="$_ROOT/aegir/distro/$_L_HM_DISTRO"
      _PREV_HOSTMASTER_ROOT="$_ROOT/aegir/distro/$_L_LAST_HMR"
      msg "$_STATUS B: Let's hope there are no more zombies left..."
    fi
  fi
  if [ -d "$_HOSTMASTER_ROOT" ] ; then
    msg "$_STATUS B: FATAL ERROR: $_HOSTMASTER_ROOT already exists - too many zombies to delete!"
    msg "$_STATUS B: FATAL ERROR: Aborting AegirSetupB installer NOW!"
    touch /opt/tmp/status-AegirSetupB-FAIL
    exit 1
  fi
  msg "$_STATUS B: Hostmaster STATUS: upgrade start"
  msg "$_STATUS B: Running hostmaster-migrate, please wait..."
  mv -f $_ROOT/.drush/xts/security_review/security_review.drush.inc $_ROOT/.drush/xts/security_review/foo.txt  &> /dev/null
  export DEBIAN_FRONTEND=noninteractive
  if [ -z "${TERM+x}" ]; then
    export TERM=vt100
  fi
  cd $_PREV_HOSTMASTER_ROOT
  if [ "$_DEBUG_MODE" = "YES" ] ; then
    $_DRUSHCMD hostmaster-migrate $_DOMAIN $_HOSTMASTER_ROOT -y -d
  else
    $_DRUSHCMD hostmaster-migrate $_DOMAIN $_HOSTMASTER_ROOT -y &> /dev/null
  fi
  export DEBIAN_FRONTEND=text
  mv -f $_ROOT/.drush/xts/security_review/foo.txt $_ROOT/.drush/xts/security_review/security_review.drush.inc  &> /dev/null
  rm -f $_ROOT/u/$_DOMAIN
  ln -sf $_HOSTMASTER_ROOT $_ROOT/u/$_DOMAIN
  rm -f /data/u/$_DOMAIN
  ln -sf $_HOSTMASTER_ROOT /data/u/$_DOMAIN
  msg "$_STATUS B: Hostmaster STATUS: upgrade completed"
fi


###--------------------###
if [ "$_LOCAL_STATUS" = "INIT" ] ; then
  _MSG_STATUS="install"
else
  _MSG_STATUS="upgrade"
fi
msg "$_STATUS B: Simple check if Aegir $_MSG_STATUS is successful"
if [ -e "$_HOSTMASTER_ROOT/sites/$_DOMAIN/settings.php" ] ; then
  msg "$_STATUS B: Aegir $_MSG_STATUS test result: OK"
else
  msg "$_STATUS B: FATAL ERROR: Required file $_HOSTMASTER_ROOT/sites/$_DOMAIN/settings.php does not exist"
  msg "$_STATUS B: FATAL ERROR: Aborting AegirSetupB installer NOW!"
  touch /opt/tmp/status-AegirSetupB-FAIL
  exit 1
fi


###---### Enhancing Aegir UI.
#
msg "$_STATUS B: Enhancing Aegir UI, please wait..."
mkdir -p $_HOSTMASTER_ROOT/sites/all/{modules,themes,libraries}
cd $_HOSTMASTER_ROOT/profiles/hostmaster/modules
get_dev_ext "aegir_custom_settings.tar.gz"
if [ "$_AEGIR_VERSION" = "HEAD" ] ; then
  git clone --branch 6.x-1.x git://github.com/omega8cc/hosting_civicrm_cron.git  &> /dev/null
  git clone --branch 6.x-1.x git://github.com/omega8cc/hosting_remote_import.git &> /dev/null
  git clone --branch 6.x-2.x git://github.com/omega8cc/hosting_cdn.git           &> /dev/null
  git clone --branch 6.x-2.x git://github.com/omega8cc/hosting_platform_git.git  &> /dev/null
  git clone --branch 6.x-2.x git://github.com/omega8cc/hosting_site_backup.git   &> /dev/null
  git clone --branch master  git://github.com/omega8cc/hosting_advanced_cron.git &> /dev/null
  git clone --branch 6.x-3.x git://github.com/omega8cc/hosting_tasks_extra.git   &> /dev/null
  rm -f -r */.git
else
  get_dev_ext "hosting_advanced_cron.tar.gz"
  get_dev_ext "hosting_cdn.tar.gz"
  get_dev_ext "hosting_civicrm_cron.tar.gz"
  get_dev_ext "hosting_platform_git.tar.gz"
  get_dev_ext "hosting_remote_import.tar.gz"
  get_dev_ext "hosting_site_backup.tar.gz"
  get_dev_ext "hosting_tasks_extra.tar.gz"
fi
if [ ! -e "$_HOSTMASTER_ROOT/modules/o_contrib" ] ; then
  ln -sf /data/all/001/o_contrib $_HOSTMASTER_ROOT/modules/o_contrib &> /dev/null
fi
cd $_HOSTMASTER_ROOT/sites/$_DOMAIN
if [ -e "$_HOSTMASTER_ROOT/sites/$_DOMAIN/settings.php" ] ; then
  mkdir -p $_ROOT/backups/system/off
  mv -f $_HOSTMASTER_ROOT/sites/$_DOMAIN/modules/* $_ROOT/backups/system/off/ &> /dev/null
  if [ "$_USE_STOCK" = "YES" ] || [ "$_DRUSH_CC_REQ" = "YES" ] ; then
    cd $_HOSTMASTER_ROOT/profiles/hostmaster/modules/
    get_dev_contrib "ctools-6.x-1.11.tar.gz"
    get_dev_contrib "features_extra-6.x-1.x-dev.tar.gz"
    get_dev_contrib "features-6.x-1.2.tar.gz"
    get_dev_contrib "hosting_backup_queue-6.x-1.x-dev.tar.gz"
    get_dev_contrib "hosting_task_gc-6.x-1.0-alpha1.tar.gz"
    get_dev_contrib "protect_critical_users-6.x-1.1.tar.gz"
    get_dev_contrib "revision_deletion-6.x-1.x-dev.tar.gz"
    get_dev_contrib "strongarm-6.x-2.2.tar.gz"
    get_dev_contrib "userprotect-6.x-1.5.tar.gz"
  fi
  sed -i "s/backup_delete/backup-delete/g" $_HOSTMASTER_ROOT/profiles/hostmaster/modules/hosting_backup_gc/hosting_backup_gc.module &> /dev/null
  sed -i "s/Platform pathauto settings/Platform pathauto/g" $_HOSTMASTER_ROOT/profiles/hostmaster/modules/hosting_platform_pathauto/hosting_platform_pathauto.module &> /dev/null
  sed -i "s/Backup schedule settings/Backup schedule/g" $_HOSTMASTER_ROOT/profiles/hostmaster/modules/hosting_backup_queue/hosting_backup_queue.module &> /dev/null
  sed -i "s/Base path/Platforms path/g" $_HOSTMASTER_ROOT/profiles/hostmaster/modules/hosting_platform_pathauto/hosting_platform_pathauto.module &> /dev/null
  _VM_TEST=`uname -a 2>&1`
  if [[ "$_VM_TEST" =~ beng ]] ; then
    _VMFAMILY="VS"
  else
    _VMFAMILY="XEN"
  fi
  if [ "$_VMFAMILY" = "VS" ] ; then
    if [[ "$_CHECK_HOST" =~ ".o8.io" ]] ; then
      _DO_NOTHING=YES
    else
      $_DRUSHCMD @hostmaster dis hosting_backup_queue -y &> /dev/null
      $_DRUSHCMD @hostmaster pm-uninstall hosting_backup_queue -y &> /dev/null
      rm -f -r $_HOSTMASTER_ROOT/profiles/hostmaster/modules/hosting_backup_queue
    fi
  fi
  cd $_HOSTMASTER_ROOT/sites/$_DOMAIN
  if [ "$_CLIENT_CORES" -ge "1" ] ; then
    _ALLOW_CIVICRM=YES
  else
    _ALLOW_CIVICRM=NO
  fi
  if [ "$_ALLOW_CIVICRM" = "YES" ] ; then
    $_DRUSHCMD @hostmaster en hosting_civicrm_cron -y &> /dev/null
  fi
  $_DRUSHCMD @hostmaster dis hosting_backup_gc path_alias_cache syslog dblog -y &> /dev/null
  rm -f -r $_HOSTMASTER_ROOT/profiles/hostmaster/modules/hosting_backup_gc
  if [ "$_USE_STOCK" = "YES" ] || [ "$_DRUSH_CC_REQ" = "YES" ] ; then
    $_DRUSHCMD cache-clear drush &> /dev/null
  fi
  $_DRUSHCMD @hostmaster en hosting_client css_emimage protect_critical_users userprotect -y &> /dev/null
  $_DRUSHCMD @hostmaster en hosting_advanced_cron revision_deletion hosting_task_gc hosting_tasks_extra -y &> /dev/null
  $_DRUSHCMD @hostmaster en hosting_site_backup_manager -y &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_client_register_user 1 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_admin_client 1 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_client_send_welcome 1 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set client 1 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_feature_client 1 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set clone 1 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_client_send_welcome 1 &> /dev/null
  if [ ! -e "$_ROOT/log/custom_cron" ] ; then
    _DO_NOTHING=YES
  fi
  $_DRUSHCMD @hostmaster vset --always-set hosting_advanced_cron_default_interval 10800 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_queue_advanced_cron_frequency 1 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_queue_cron_frequency 53222400 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_cron_use_backend 0 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_ignore_default_profiles 0 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_queue_tasks_frequency 5 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_queue_tasks_items 1 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_alias_automatic_no_www 1 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_alias_automatic_www 1 &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_upload_platform_path "/data/disk/$_USER/static" &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_upload_upload_path "sites/$_DOMAIN/files/deployment" &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_platform_pathauto_base_path "/data/disk/$_USER/static/" &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set hosting_site_backup_manager_base_path "/data/disk/$_USER" &> /dev/null
  $_DRUSHCMD @hostmaster en aegir_custom_settings -y &> /dev/null
  $_DRUSHCMD @hostmaster fr aegir_custom_settings -y &> /dev/null
  $_DRUSHCMD @hostmaster vset --always-set site_footer "" &> /dev/null
  if [ "$_LOCAL_STATUS" = "INIT" ] ; then
    $_DRUSHCMD @hostmaster vset --always-set site_name "Aegir Hosting System by Octopus" &> /dev/null
    $_DRUSHCMD @hostmaster vset --always-set site_mail "$_ADM_EMAIL" &> /dev/null
    cp -af /opt/tmp/$_BOA_REPO_NAME/aegir/helpers/make_home.php.txt ./
    mv -f make_home.php.txt make_home.php &> /dev/null
    $_DRUSHCMD php-script make_home &> /dev/null
    rm -f make_home.php
    cp -af /opt/tmp/$_BOA_REPO_NAME/aegir/helpers/make_client.php.txt ./
    mv -f make_client.php.txt make_client.php &> /dev/null
    if [ "$_THIS_DB_HOST" = "localhost" ] ; then
      $_DRUSHCMD @hostmaster sqlq "UPDATE hosting_platform SET status=-1 WHERE nid=7" &> /dev/null
    else
      $_DRUSHCMD @hostmaster sqlq "UPDATE hosting_platform SET status=-1 WHERE nid=5" &> /dev/null
    fi
    $_DRUSHCMD php-script make_client $_CLIENT_EMAIL &> /dev/null
    rm -f make_client.php
    $_DRUSHCMD @hostmaster urol "admin" --mail=$_CLIENT_EMAIL &> /dev/null
    $_DRUSHCMD @hostmaster urol "aegir account manager" --mail=$_CLIENT_EMAIL &> /dev/null
  fi
  $_DRUSHCMD @hostmaster sqlq "REPLACE INTO userprotect VALUES (0,0,0,0,0,1,1,1,'user',1),(1,0,0,0,0,0,0,0,'admin',0),(1,1,1,1,1,1,1,1,'user',1),(3,0,0,0,0,1,1,0,'user',1)" &> /dev/null
  $_DRUSHCMD @hostmaster cc all &> /dev/null
fi


###---### Aegir global.inc file.
#
cd $_ROOT
if [ -e "/data/conf/global.inc" ] ; then
  ln -sf /data/conf/global.inc $_ROOT/config/includes/global.inc
fi

touch /opt/tmp/status-AegirSetupB-OK

###----------------------------------------###
###
###  Octopus Aegir Installer
###  Copyright (C) 2010-2014 Omega8.cc
###  noc@omega8.cc www.omega8.cc
###
###----------------------------------------###

