#!/bin/bash
#echo "ver=1.2.2"

if [ $UID -ne 0 ]; then
    echo "Скрипт должен запускаться от root"
    exit
fi

echo -e "\nВведите адрес подключаемого репозитория системы управления АЗС"
echo    "(например, введите 'repo.bukts.ru' или просто 'repo'):"
read REPO
if [ -z "$REPO" ]; then exit; fi
if [ -z "$(echo $REPO | grep '\.bukts\.ru')" -a -z "$(echo $REPO | grep '\.')" ]; then
    REPO=${REPO}".bukts.ru"
fi
MSG00="Подключаемый репозиторий: $REPO"
echo "= $MSG00"

EXIT="0"
MSG01=""
while [ "$EXIT" == "0" ]; do
  echo -e "\nВыберите разделы репозитория ${REPO}:"
  echo '1 - current'
  echo '2 - current testing'
  echo '3 - current testing develop'
  echo -n '> '
  read OPTIONS
  if [ "$OPTIONS" == "1" -o "$OPTIONS" == "2" -o "$OPTIONS" == "3" ]; then
    if [ "$OPTIONS"   == "1" ]; then OPTIONS="current";
    elif [ "$OPTIONS" == "2" ]; then OPTIONS="current testing";
    elif [ "$OPTIONS" == "3" ]; then OPTIONS="current testing develop";
    fi
    MSG01="разделы: $OPTIONS"
    echo "= $MSG01"
    EXIT="1"
  fi
done

EXIT="0"
MSG02=""
while [ "$EXIT" == "0" ]; do
  echo -e "\nВыберите тип установки:"
  echo '1 - только рабочее место оператора'
  echo '2 - сервер и рабочее место оператора'
  echo '3 - только сервер'
  echo '4 - экран браузере (отображает нужную страницу в браузере)'
  echo '5 - DOMS сервер'
  echo '6 - ТСО'
  echo '0 - не устанавливать ПО системы управления'
  echo -n '> '
  read WPTYP
  if [ "$WPTYP" == "1" -o "$WPTYP" == "2" -o "$WPTYP" == "3" -o "$WPTYP" == "4" -o "$WPTYP" == "5" -o "$WPTYP" == "6" -o "$WPTYP" == "0" ]; then
    if   [ "$WPTYP" == "1" ]; then MSG02="Установить только рабочее место оператора";
    elif [ "$WPTYP" == "2" ]; then MSG02="Установить сервер и рабочее место оператора";
    elif [ "$WPTYP" == "3" ]; then MSG02="Установить только сервер";
    elif [ "$WPTYP" == "4" ]; then MSG02="Установить экран браузера";
    elif [ "$WPTYP" == "5" ]; then MSG02="Установить DOMS сервер";
    elif [ "$WPTYP" == "6" ]; then MSG02="Установить ТСО";
    elif [ "$WPTYP" == "0" ]; then MSG02="Не устанавливать ПО системы управления";
    fi
    echo "= $MSG02"
    EXIT="1"
  fi
done

IP=""
HOST=""
MSG03=""
if [ "$WPTYP" == "1" -o "$WPTYP" == "6" ]; then
  EXIT="0"
  while [ "$EXIT" == "0" ]; do
    echo -e "\nВведите IP-адрес сервера"
    echo -n "> "
    read IP
    if [ "IP" == "localhost" -o "$IP" == "127.0.0.1" ]; then
      echo "При установке только рабочего места оно не может быть там же, где сервер"
    elif [ -z "$(echo $IP | grep '\.')" -o -z "$(echo $IP | cut -d. -f4)" ]; then
      echo "Надо ввести IP-адрес в виде XXX.XXX.XXX.XXX"
    else
      MSG03="IP-адрес сервера: $IP"
      echo "= $MSG03"
      HOST="bukserver"
      EXIT="1"
    fi
  done
elif [ "$WPTYP" == "2" -o "$WPTYP" == "3" -o "$WPTYP" == "5" ]; then
  IP="127.0.0.1"
  HOST="localhost"
fi

NUM=""
MSG04=""
if [ "$WPTYP" == "1" -o "$WPTYP" == "2" -o "$WPTYP" == "6" ]; then
  EXIT="0"
  while [ "$EXIT" == "0" ]; do
    echo -e "\nВведите номер рабочего места"
    echo -n "> "
    read NUM
    if [ ! -z "$NUM" -a $NUM -ge 1 -a $NUM -le 16 ]; then
      MSG04="Номер рабочего места: $NUM"
      echo "= $MSG04"
      EXIT="1"
    else
      echo "Номер рабочего места должен быть от 1 до 16"
    fi
  done
fi

echo
echo "=== ВАШ ВЫБОР: ==="
echo $MSG00
echo $MSG01
echo $MSG02
echo $MSG03
echo $MSG04
echo -n 'Все верно? У/N > '
read YN
if [ "$YN" != "Y" -a "$YN" != "y" -a "$YN" != "Н" -a "$YN" != "н" ]; then
  echo "Ответ NO, работа прервана"
  exit
fi

#==============================================================================
OFFLINE="0"
RELEASE=$(lsb_release -c -s)
REP0=$(echo $REPO | cut -d. -f1)
if [ -f deb10_offline.tar.gz -a "${RELEASE}" == "buster" ] || [ -f deb11_offline.tar.gz -a "${RELEASE}" == "bullseye" ]; then
  if [ "${RELEASE}" == "buster" ]; then
    echo "В текущем каталоге найден файл deb10_offline.tar.gz"
  fi  
  if [ "${RELEASE}" == "bullseye" ]; then
    echo "В текущем каталоге найден файл deb11_offline.tar.gz"
  fi  
    
  echo "Установить пакеты offline из архива?"
  echo -n 'Y/N > '
  read YN
  if [ "$YN" == "Y" -o "$YN" == "y" -o "$YN" == "Н" -o "$YN" == "н" ]; then
    OFFLINE="1"
    if [ -d /var/opt/pkgs/deb_offline ]; then
      rm -r /var/opt/pkgs/deb_offline/*
    else
      mkdir -p /var/opt/pkgs/deb_offline
    fi
    if [ "${RELEASE}" == "buster" ]; then
      tar xf deb10_offline.tar.gz -C /var/opt/pkgs/deb_offline/
    fi
    if [ "${RELEASE}" == "bullseye" ]; then
      tar xf deb11_offline.tar.gz -C /var/opt/pkgs/deb_offline/
    fi
  fi
fi

if [ ! -f /etc/apt/sources.list.000 ]; then
  cp /etc/apt/sources.list /etc/apt/sources.list.000
fi

if [ -z "$(cat /etc/apt/sources.list | grep ^deb | grep http | grep -v security)" ]; then
  echo "= Подключение репозитория debian"
  echo >> /etc/apt/sources.list
  echo "deb http://deb.debian.org/debian/ ${RELEASE} main" >> /etc/apt/sources.list
  echo "deb http://deb.debian.org/debian/ ${RELEASE}-updates main"  >> /etc/apt/sources.list
fi
if [ -z "$(cat /etc/apt/sources.list | grep 'contrib non-free')" ]; then
  echo "= Добавление к системному репозиторию разделов contrib non-free"
  sed -e "/main/s/main/main contrib non-free/" -i /etc/apt/sources.list
fi

if [ -z "$(cat /etc/apt/sources.list.d/bukts.list | grep 'deb \[trusted=yes\] http://repo.bukts.ru/ current bukts')" ]; then
  echo "= Подключение репозитория системы управления АЗС: repo.bukts.ru current"
  echo "deb [trusted=yes] http://repo.bukts.ru/ current bukts" >> /etc/apt/sources.list.d/bukts.list
fi
if [ ! -z "${OPTIONS}" -a ! -z "$(echo ${OPTIONS} | grep 'testing')" ]; then
  if [ -z "$(cat /etc/apt/sources.list.d/bukts.list | grep 'deb \[trusted=yes\] http://repo.bukts.ru/ testing bukts')" ]; then
    echo "= Подключение репозитория системы управления АЗС: repo.bukts.ru testing"
    echo "deb [trusted=yes] http://repo.bukts.ru/ testing bukts" >> /etc/apt/sources.list.d/bukts.list
  fi
fi
if [ ! -z "${OPTIONS}" -a ! -z "$(echo ${OPTIONS} | grep 'develop')" ]; then
  if [ -z "$(cat /etc/apt/sources.list.d/bukts.list | grep 'deb \[trusted=yes\] http://repo.bukts.ru/ develop bukts')" ]; then
    echo "= Подключение репозитория системы управления АЗС: repo.bukts.ru develop"
    echo "deb [trusted=yes] http://repo.bukts.ru/ develop bukts" >> /etc/apt/sources.list.d/bukts.list
  fi
fi

if [ "${RELEASE}" == "buster" ]; then
  if [ -z "$(cat /etc/apt/sources.list.d/bukts.list | grep 'deb \[trusted=yes\] http://repo.bukts.ru/ system10 bukts')" ]; then
    echo "= Подключение репозитория системы управления АЗС: repo.bukts.ru system10"
    echo "deb [trusted=yes] http://repo.bukts.ru/ system10 bukts" >> /etc/apt/sources.list.d/bukts.list
  fi
fi
if [ "${RELEASE}" == "bullseye" ]; then
  if [ -z "$(cat /etc/apt/sources.list.d/bukts.list | grep 'deb \[trusted=yes\] http://repo.bukts.ru/ system11 bukts')" ]; then
    echo "= Подключение репозитория системы управления АЗС: repo.bukts.ru system11"
    echo "deb [trusted=yes] http://repo.bukts.ru/ system11 bukts" >> /etc/apt/sources.list.d/bukts.list
  fi
fi

if [ "$REPO" != "repo.bukts.ru" ]; then
  if [ -z "$(cat /etc/apt/sources.list.d/bukts.list | grep "deb \[trusted=yes\] http://$REPO/ current bukts")" ]; then
    echo "= Подключение репозитория системы управления АЗС: $REPO current"
    echo "deb [trusted=yes] http://$REPO/ current bukts" >> /etc/apt/sources.list.d/bukts.list
  fi
  if [ ! -z "${OPTIONS}" -a ! -z "$(echo ${OPTIONS} | grep 'testing')" ]; then
    if [ -z "$(cat /etc/apt/sources.list.d/bukts.list | grep "deb \[trusted=yes\] http://$REPO/ testing bukts")" ]; then
      echo "= Подключение репозитория системы управления АЗС: $REPO testing"
      echo "deb [trusted=yes] http://$REPO/ testing bukts" >> /etc/apt/sources.list.d/bukts.list
    fi
  fi
  if [ ! -z "${OPTIONS}" -a ! -z "$(echo ${OPTIONS} | grep 'develop')" ]; then
    if [ -z "$(cat /etc/apt/sources.list.d/bukts.list | grep "deb \[trusted=yes\] http://$REPO/ develop bukts")" ]; then
      echo "= Подключение репозитория системы управления АЗС: $REPO develop"
      echo "deb [trusted=yes] http://$REPO/ develop bukts" >> /etc/apt/sources.list.d/bukts.list
    fi
  fi
  if [ "${RELEASE}" == "buster" ]; then
    if [ -z "$(cat /etc/apt/sources.list.d/bukts.list | grep 'deb \[trusted=yes\] http://$REPO/ system10 bukts')" ]; then
      echo "= Подключение репозитория системы управления АЗС: $REPO system10"
      echo "deb [trusted=yes] http://$REPO/ system10 bukts" >> /etc/apt/sources.list.d/bukts.list
    fi
  fi
  if [ "${RELEASE}" == "bullseye" ]; then
    if [ -z "$(cat /etc/apt/sources.list.d/bukts.list | grep 'deb \[trusted=yes\] http://$REPO/ system11 bukts')" ]; then
      echo "= Подключение репозитория системы управления АЗС: $REPO system11"
      echo "deb [trusted=yes] http://$REPO/ system11 bukts" >> /etc/apt/sources.list.d/bukts.list
    fi
  fi
fi

if [ ! -z "$(cat /etc/apt/sources.list | grep '^deb cdrom')" ]; then
  echo "= Отключение установки с cdrom"
  sed /etc/apt/sources.list -i -e "s/^[ ]*deb cdrom/# deb cdrom/"
fi

  
if [ ${OFFLINE} == "0" ]; then
  dpkg --add-architecture i386
  apt-get -y update
  export DEBIAN_FRONTEND=noninteractive
    
  PKGS_main="aptitude mc bc gnupg sudo at postfix bzip2 ssh gdisk htop \
             net-tools rsync curl inetutils-telnet xautomation uucp cups"
    
  apt-get -y install $PKGS_main
  export DEBIAN_FRONTEND=
    
  echo "= Добавление ключа bukts.asc"
  wget -qO - http://repo.bukts.ru/bukts.asc | apt-key add -

  PKGS="bukuser bukuser-homedir bukdaily bukpkgs"
    
  if [ "$WPTYP" == "1" ]; then  # Оператор экран
    PKGS=$PKGS" libstdc++5:i386 \
                xorg x11vnc xinput lightdm feh openbox lxterminal firefox-esr \
                apache2 libapache2-mod-php \
                php-pgsql php-image-text php-iconv php-curl php-mbstring php-xml postgresql-client libdbd-pgsql \
                default-jre libjgoodies-common-java libjgoodies-forms-java libpostgresql-jdbc-java"
      
    PKGS=$PKGS" bukkey bukuser-wdesktop bukwserver bukwserver-bukts \
                bukts-kassa bukts-arcus bukts-pplus bukts-cdisplay \
                arcusip arcusip-2 arcusip-3 arcusip-4 \
                bukwutils bukwutils-kassa bukwutils-manager bukwutils-operator \
                bukshop-admgoods bukazs-rexec"
  fi
    
  if [ "$WPTYP" == "2" ]; then  # Оператор + сервер
    PKGS=$PKGS" libstdc++5:i386 \
                xorg x11vnc xinput lightdm feh openbox lxterminal firefox-esr \
                apache2 libapache2-mod-php \
                php-pgsql php-image-text php-iconv php-curl php-mbstring php-xml postgresql-client libdbd-pgsql \
                default-jre libjgoodies-common-java libjgoodies-forms-java libpostgresql-jdbc-java \
                wkhtmltopdf"
    
    PKGS=$PKGS" bukkey bukuser-wdesktop bukwserver bukwserver-bukts \
                bukts-kassa bukts-arcus bukts-pplus bukts-cdisplay \
                arcusip arcusip-2 arcusip-3 arcusip-4 \
                bukwutils bukwutils-kassa bukwutils-manager bukwutils-operator \
                bukshop-admgoods bukazs-rexec \
                bukdbase bukdbase-backup bukuser-homedir \
                bukts-pserver bukts-pserver-sh bukazs-rexec \
                bukshop-admgoods bukshop-servupdater \
                buk-config sshbuk bukmmadm"
  fi
    
  if [ "$WPTYP" == "3" ]; then # Только сервер
    PKGS=$PKGS" libstdc++5:i386 \
                apache2 libapache2-mod-php \
                php-pgsql php-image-text php-iconv php-curl php-mbstring php-xml postgresql-client libdbd-pgsql \
                default-jre libjgoodies-common-java libjgoodies-forms-java libpostgresql-jdbc-java \
                wkhtmltopdf"
    
    PKGS=$PKGS" bukkey bukuser-homedir \
                bukdbase bukdbase-backup \
                bukts-pserver bukts-pserver-sh bukazs-rexec \
                bukshop-admgoods bukshop-servupdater \
                buk-config sshbuk bukmmadm \
                bukwserver"
  fi
    
  if [ "$WPTYP" == "4" ]; then   # браузер
    PKGS=$PKGS" xorg x11vnc xinput lightdm feh openbox lxterminal firefox-esr"
      
    PKGS=$PKGS" bukuser-autologin bukuser-wdesktop"
  fi
    
  if [ "$WPTYP" == "5" ]; then  # DOMS
    PKGS=$PKGS" libstdc++5:i386 \
                apache2 libapache2-mod-php \
                php-pgsql php-image-text php-iconv php-curl php-mbstring php-xml postgresql-client libdbd-pgsql \
                wkhtmltopdf"
    
    PKGS=$PKGS" bukkey \
                bukdbase bukdbase-backup bukuser-homedir \
                bukts-pserver bukts-pserver-sh bukazs-rexec \
                bukts-kassa \
                buk-config sshbuk bukmmadm \
                bukts-doms"
  fi
    
  if [ "$WPTYP" == "6" ]; then  # ТСО
    PKGS=$PKGS" libstdc++5:i386 \
                xorg x11vnc xinput lightdm feh openbox lxterminal firefox-esr \
                apache2 libapache2-mod-php \
                php-pgsql php-image-text php-iconv php-curl php-mbstring php-xml postgresql-client libdbd-pgsql"
        
    PKGS=$PKGS" bukkey bukwserver bukshop-payterm bukuser-wdesktop \
                bukts-loader bukts-kassa bukts-arcus bukts-cachcode \
                arcusip arcusip-2 arcusip-3 arcusip-4"
  fi
    
  if [ ! -z "$PKGS" ]; then
    aptitude -y install $PKGS
  fi
fi

if [ "${OFFLINE}" == "1" ]; then
  export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  export DEBIAN_FRONTEND=noninteractive
  
  dpkg --add-architecture i386
  dpkg -i /var/opt/pkgs/deb_offline/main/*.deb
    
  echo "= Добавление ключа bukts.asc"
  if [ -f /var/opt/pkgs/bukts.asc ]; then
    apt-key add /var/opt/pkgs/deb_offline/bukts.asc
  fi
  
  export DEBIAN_FRONTEND=
  dpkg -i /var/opt/pkgs/deb_offline/$WPTYP/*.deb
fi

if [ ! -z "$(cat /etc/ssh/sshd_config | grep '^#Port 22')" ]; then
  echo "= Изменение порта сервера SSH на 122"
  sed /etc/ssh/sshd_config -i -e "s/#Port 22/Port 122/"
fi

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

if [ -f "/etc/default/grub" ]; then
  if [ ! -z "$(cat /etc/default/grub | grep '^GRUB_CMDLINE_LINUX_DEFAULT="quiet"')" ]; then
    echo "= Добавление в grub параметра для COM портов и отключение ipv6"
    sed /etc/default/grub -i -e "s/GRUB_CMDLINE_LINUX_DEFAULT=\"quiet\"/GRUB_CMDLINE_LINUX_DEFAULT=\"quiet 8250.nr_uarts=32 ipv6.disable=1\"/"
    update-grub
  fi
fi

if [ -z "$(cat /root/.bashrc | grep '^export PATH')" ]; then
  echo "= Настройка переменной PATH для root"
  echo "export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" >> /root/.bashrc
fi

if [ ! -f /etc/systemd/system/apache2.service.d/override.conf ]; then
  echo "= Разрешение apache работать с папкой /tmp"
  if [ ! -d /etc/systemd/system/apache2.service.d ]; then
    mkdir -p /etc/systemd/system/apache2.service.d
  fi
  echo "[Service]" >> /etc/systemd/system/apache2.service.d/override.conf
  echo "PrivateTmp=false" >> /etc/systemd/system/apache2.service.d/override.conf
fi

if [ "$WPTYP" == "1" -o "$WPTYP" == "2" -o "$WPTYP" == "3" -o "$WPTYP" == "5" -o "$WPTYP" == "6" ]; then
  if [ ! -z "$IP" ]; then
    echo "= Запись адреса bukserver=${IP} в /etc/hosts"
    sed -i -e "/bukserver/d" /etc/hosts
    echo "${IP} bukserver" >> /etc/hosts
  fi
fi

if [ "$WPTYP" == "1" -o "$WPTYP" == "2" -o "$WPTYP" == "6" ]; then
  if [ -f /home/bukts/.dmrc ]; then
    mv /home/bukts/.dmrc /home/bukts/.dmrc.old
  fi
  echo "= Настройка pserver.cfg"
  CFG="PLACENUM=${NUM}\n
       PLACETYP=6\n
       HOST=${HOST}\n
       HOME_PAGE=bukts\n
       TERM_QUIT_NUM=1\n
       PUMPS=\n
       SIEBEL_TERMINAL_ID=\n"
  echo -e $CFG | sed -e "s/ //g" > /opt/bukwserver/html/config/pserver.cfg

  CFG="HOST=bukserver\n
       PLACENUM=${NUM}\n"
  echo -e $CFG | sed -e "s/ //g" > /etc/opt/bukwutils/config.cfg
    
  if [ ! -f /home/bukts/.config/openbox/menu.xml -a -f /home/bukts/.config/openbox/menu.xml_user ]; then
    cp /home/bukts/.config/openbox/menu.xml_user /home/bukts/.config/openbox/menu.xml
    chown bukts:bukts /home/bukts/.config/openbox/menu.xml
  fi
  if [ ! -f /home/bukts/.config/openbox/rc.xml -a -f /home/bukts/.config/openbox/rc.xml_user ]; then
    cp /home/bukts/.config/openbox/rc.xml_user /home/bukts/.config/openbox/rc.xml
    chown bukts:bukts /home/bukts/.config/openbox/rc.xml
  fi
fi

if [ "${RELEASE}" == "bullseye" ]; then
  if [ -f /etc/systemd/system/sockets.target.wants/uucp.socket ]; then
    rm /etc/systemd/system/sockets.target.wants/uucp.socket
  fi
fi

if [ "$WPTYP" == "2" -o "$WPTYP" == "3" -o "$WPTYP" == "5" -o "$WPTYP" == "6" ]; then
  /etc/init.d/bukts-loader restart
fi
if [ "$WPTYP" == "1" -o "$WPTYP" == "2" -o "$WPTYP" == "6" ]; then
  /etc/init.d/bukwserver restart
fi

echo
echo "**************************************************************"
echo "Установка ПО завершена."
echo "Для входа в графический режим в режиме администратора введите:"
echo "/home/bukts/wdesktop/bin/switchdesk admin"
echo
