#!/bin/bash
#
clear
#
# Проверка прав на запуск скрипта
#
UID_ROOT=0
if [ "$UID" -ne "$UID_ROOT" ]
then
    echo -e "\033[31;5m;1m\nДля работы требуются права root. Запустите скрипт командой:\033[0m;25m\n"
    echo -e "\033[37\nsudo sh ./onlineinstall.sh\033[0m\n"
    exit 1
fi
#
# Определение переменных окружения
#
echo -e "\n\033[33;1mПолная он-лайн установка SMPO-SERVER(Сервер-КРОС) \033[0m"
MODULE_NAME=smpo-server
SMPO_PATH=/opt/$MODULE_NAME
SMPO_PATH_OLD=/usr/local/$MODULE_NAME
SMPO_BIN=/usr/local/bin
SMPO_BIND_OLD=/usr/bin
SMPO_PROPERTIES="smpo.properties"
SMPO_CONFIG=$SMPO_PATH/conf/$SMPO_PROPERTIES
PSQL_NAME="postgresql-14"
PSQL_PATH="/etc/postgresql"
PSQL_CLASTER="/mnt/postgresql"
PSQL_CLASTER_OLD="/var/lib/postgresql"
iHOME=`pwd`
echo -e "\n\033[36;1m\nРаботаем в каталоге $iHOME\033[0m"
#
#
# Функция перемещения кластера PostgreSQL
#
move_cluster() {
chown -R postgres:postgres $PSQL_CLASTER
chmod -R 0700 $PSQL_CLASTER
sudo -u postgres cp -r $PSQL_CLASTER_OLD/ /mnt/
rm -r -f /var/lib/postgresql
cp -f $iHOME/PostgreSQL-14/conf/* $PSQL_PATH/14/main/
}
#
# Функция копирования ПО 
#
copy_kros() {
		cd $iHOME/$MODULE_NAME
		if [ ! -d $SMPO_PATH ];
		  then
	        mkdir $SMPO_PATH
	        mkdir $SMPO_PATH/{conf,images,logs,lib,plans,templates}
		fi
		cp -f $MODULE_NAME.jar $SMPO_PATH
		cp -f uninstall.sh $SMPO_PATH
		cp -rf lib/* $SMPO_PATH/lib
		cp -rf conf/* $SMPO_PATH/conf
		cp -rf templates/* $SMPO_PATH/templates
		cp -f scripts/$MODULE_NAME.service /etc/systemd/system/
		cp -f $MODULE_NAME.sh $SMPO_BIN
		mv $SMPO_BIN/$MODULE_NAME.sh $SMPO_BIN/$MODULE_NAME
		chmod +x $SMPO_BIN/$MODULE_NAME
		chown -R root:root $SMPO_PATH
		systemctl daemon-reload
		systemctl enable $MODULE_NAME
}
#
# Функция выгрузки зависших процессов java
#
java_kill() {
if [ `ps aux | grep [j]ava | wc -l` = 0 ];
 then
	pkill -9 java
fi
}
#
# Изменение конфигурации КРОС
#
change_settings() {
echo -e "\033[33;1mКорректировка конфигурации SMPO-SERVER\033[0m\n"
if [ ! -d /mnt/hdd ];
 then
	mkdir /mnt/hdd
fi
if [ -e $SMPO_CONFIG ];
 then
	echo -e "\033[33;1mИзменение файла конфигурации $SMPO_CONFIG\033[0m\n"
	dataring_max=`grep "db.dataring.max=10" $SMPO_CONFIG | wc -c`
	if [ $dataring_max -eq "19" ];
	 then
        	sed -i 's#db.dataring.max=10#db.dataring.max=300#g' $SMPO_CONFIG
	elif [ $dataring_max -eq "20" ];
	 then
		sed -i 's#db.dataring.max=10#db.dataring.max=30#g' $SMPO_CONFIG
	fi
	sed -i 's#server.udp.buffersize=8192#server.udp.buffersize=4096#g' $SMPO_CONFIG
#
#	backup_path=`grep "db.backup.path=/usr/local/" $SMPO_CONFIG | wc -c`
	if [ `grep "db.backup.path=/usr/local/" $SMPO_CONFIG | wc -c` -ne "0" ] || [ `grep "db.backup.system.path=/usr/local/" $SMPO_CONFIG | wc -c` -ne "0" ] || [ `grep "server.debug.log.path=/usr/local/" $SMPO_CONFIG | wc -c` -ne "0" ];
	 then
		sed -i 's#db.backup.path=/usr/local/.*#db.backup.path=/mnt/hdd/smpo-server/krosbackup#g' $SMPO_CONFIG
		sed -i 's#db.backup.system.path=/usr/local/.*/#db.backup.system.path=/mnt/hdd/smpo-server/backup#g' $SMPO_CONFIG
		sed -i 's#server.debug.log.path=/usr/local/.*/#server.debug.log.path=/mnt/hdd/smpo-server/logs#g' $SMPO_CONFIG
	elif [ `grep "db.backup.path=/opt/" $SMPO_CONFIG | wc -c` -ne "0" ] || [ `grep "db.backup.system.path=/opt/" $SMPO_CONFIG | wc -c` -ne "0" ] || [ `grep "server.debug.log.path=/opt/" $SMPO_CONFIG | wc -c` -ne "0" ];
	 then
        	sed -i 's#db.backup.path=/opt/.*#db.backup.path=/mnt/hdd/smpo-server/krosbackup#g' $SMPO_CONFIG
        	sed -i 's#db.backup.system.path=/opt/.*#db.backup.system.path=/mnt/hdd/smpo-server/backup#g' $SMPO_CONFIG
        	sed -i 's#server.debug.log.path=/opt/.*#server.debug.log.path=/mnt/hdd/smpo-server/logs#g' $SMPO_CONFIG
	else
#        	echo -e "\033[33;1mСоздание файла конфигурации $SMPO_CONFIG\033[0m\n"
#		touch $SMPO_CONFIG
		echo "db.dataring.max=300" >> $SMPO_CONFIG
		echo "server.udp.buffersize=4096" >> $SMPO_CONFIG
		echo "db.backup.path=/mnt/hdd/smpo-server/krosbackup" >> $SMPO_CONFIG
		echo "db.backup.system.path=/mnt/hdd/smpo-server/backup" >> $SMPO_CONFIG
		echo "server.debug.log.path=/mnt/hdd/smpo-server/logs" >> $SMPO_CONFIG
	fi
else
	echo -e "\033[33;1mСоздание файла конфигурации $SMPO_CONFIG\033[0m\n"
	touch $SMPO_CONFIG
	echo "db.dataring.max=300" >> $SMPO_CONFIG
	echo "server.udp.buffersize=4096" >> $SMPO_CONFIG
	echo "db.backup.path=/mnt/hdd/smpo-server/krosbackup" >> $SMPO_CONFIG
	echo "db.backup.system.path=/mnt/hdd/smpo-server/backup" >> $SMPO_CONFIG
	echo "server.debug.log.path=/mnt/hdd/smpo-server/logs" >> $SMPO_CONFIG
fi
sed -i 's#WorkingDirectory=/usr/local/#WorkingDirectory=/opt/#g' /etc/systemd/system/$MODULE_NAME.service
sed -i 's#/usr/bin#/usr/local/bin#g' /etc/systemd/system/$MODULE_NAME.service
sed -i 's#PIDFile=/usr/local/#c\PIDFile=/opt/$MODULE_NAME/conf/pid#g' /etc/systemd/system/$MODULE_NAME.service
sed -i 's#SMPO_HOME=/usr/local/#SMPO_HOME=/opt/#g' "$SMPO_BIN/$MODULE_NAME"
#
echo -e "\033[32;1mКорректировка конфигурации SMPO-SERVER успешно завершена!\033[0m\n"
}
#
# Проверка и установка PostgreSQL-14
#
psql_status=`dpkg -l | grep postgresql-14 | awk '{print $1}'`
if [[ ${psql_status} == "ii" ]]; then
	echo -e "\033[33;1m\nPostgreSQL-14 уже установлен\033[0m\n"
else
	wget -c --no-check-certificate https://srv2.jupiter8.ru/soft/AstraSE/1_7/postgresql-14.zip
	unzip postgresql-14.zip
	cd PostgreSQL-14
	dpkg -i -E *.deb
	echo -e "\033[32;1m\nУстановка PostgreSQL-14 завершена\033[0m\n"
fi
#
# Изменение конфигурации PostgreSQL-14
#
echo -e "\033[34;1m\nИзменение конфигурации PostgreSQL-14\033[0m\n"
systemctl stop postgresql
sleep 5
if [ ! -d $PSQL_CLASTER ];
 then
	mkdir $PSQL_CLASTER
	move_cluster
	cd $iHOME
	rm -f -r PostgreSQL-14
else
#	if [ ! -d $PSQL_CLASTER/14/main ];
#	 then
		cd $iHOME
		wget -c --no-check-certificate https://srv2.jupiter8.ru/soft/AstraSE/1_7/pg_conf.zip
		unzip pg_conf.zip -d PostgreSQL-14/
		move_cluster
	        rm -f -r PostgreSQL-14
        	rm -f pg_conf.zip
#	fi
fi
if [ -e $iHOME/postgresql*.zip ];
 then
	rm -f postgresql*.zip
fi
systemctl daemon-reload
systemctl start postgresql
echo -e "\n\033[36;1m\nПроверка запуска PostgreSQL\033[0m"
ps aux|grep postgres
echo -e "\n\033[32;1mИзменение конфигурации PostgreSQL-14 завершено!\033[0m\n"
#
# Установка PgAdmin4
#
psql_status=`dpkg -l | grep pgadmin4-desktop | awk '{print $1}'`
if [[ ${psql_status} == "ii" ]]; then
        echo -e "\n\033[32;1mPgAdmin4 уже установлен\033[0m\n"
else
        echo -e "\033[33;1m\nУстановка PgAdmin4\033[0m\n"
	cd $iHOME
	wget https://srv2.jupiter8.ru/soft/AstraSE/1_7/pgadmin4-8.6.zip
	unzip pgadmin4-8.6.zip
	cd pgadmin4
	dpkg -i *.deb
	cd ../
	rm -r -f pgadmin4
	rm -f pgadmin4-8.6.zip
        echo -e "\n\033[32;1mУстановка PgAdmin4 завершена!\033[0m\n"
fi
#
# Установка Jave JRE8
#
java_version=$(java -version 2>&1 | grep "version" | cut -d '"' -f 2 | cut -c 1-3)
if [[ ${java_version} == "1.8" ]];
 then
	echo -e "\n\033[32;1mJava JRE8 уже установлена\033[0m\n"
else
	echo -e "\n\033[33;1mУстановка Java JRE8\033[0m\n"
	update-alternatives --remove-all java
	rm -f -r /usr/lib/jvm
	cd $iHOME
	wget --no-check-certificate https://srv2.jupiter8.ru/soft/java/bellsoft-jre8.deb
	dpkg -i bellsoft-jre8.deb
	java -version
	echo -e "\n\033[32;1mУстановка Java успешно завершена!\033[0m\n"
	rm -f bellsoft-jre8.deb
fi
#
# Проверка и установка SMPO-SERVER(сервер-КРОС)
#
cd $iHOME
if [ -e $MODULE_NAME.zip ];
 then
	rm -f $MODULE_NAME.zip
fi
if [ -d $SMPO_PATH ] || [ -d $SMPO_PATH_OLD ];
 then
	echo -e "\033[97;1mСервер КРОС уже установлен. Обновлять[Yes(Да)/No(Нет)]? Ваш выбор: \033[0m"
	read inkey
else
	inkey="Y"
fi
case "$inkey" in
	[YyДд])
		echo -e "\n\033[33;1mПолучение архива SMPO-SERVER\033[0m\n"
		wget --no-check-certificate https://srv2.jupiter8.ru/kros/uploads/$MODULE_NAME/$MODULE_NAME"-new".zip --user=elestatemp --password=elestaftp
		unzip -u $MODULE_NAME"-new".zip
		if [ -d $SMPO_PATH_OLD ];
		 then
                        echo -e "\n\033[33;1mОбновление SMPO-SERVER\033[0m\n"
			if [ -e /etc/init.d/$MODULE_NAME ];
			 then
				/etc/init.d/$MODULE_NAME stop
				systemctl disable $MODULE_NAME
				update-rc.d -f $MODULE_NAME remove
				java_kill
			elif [ -e /etc/systemd/system/$MODULE_NAME.service ];
			 then
				service $MODULE_NAME stop
				systemctl disable $MODULE_NAME
				rm -f /etc/systemd/system/$MODULE_NAME
				if [ -e $SMPO_BIN_OLD/$MODULE_NAME ];
				 then
					rm -f $SMPO_BIN_OLD/$MODULE_NAME
				fi
				java_kill
			else
		                echo -e "\033[31;1mСервис smpo-server не установлен.\033[0m\n"
			fi
			systemctl daemon-reload
			mkdir $SMPO_PATH.bak
			mkdir $SMPO_PATH
			cp -rf $SMPO_PATH_OLD /opt/
			cp -rf $SMPO_PATH_OLD/* $SMPO_PATH.bak
			rm -rf $SMPO_PATH_OLD
			copy_kros
                        echo -e "\n\033[32;1mОбновление SMPO-SERVER успешно завершено!\033[0m\n"
		elif [ -d $SMPO_PATH ];
		 then
                        echo -e "\n\033[33;1mОбновление SMPO-SERVER\033[0m\n"
			mkdir $SMPO_PATH.bak
			cp -rf $SMPO_PATH/* $SMPO_PATH.bak
			copy_kros
                        echo -e "\n\033[32;1mОбновление SMPO-SERVER успешно завершено!\033[0m\n"
		else
	                echo -e "\033[31;1mСервер СПИ КРОС не установлен. Будет производедена установка ПО.\033[0m\n"
			copy_kros
			echo -e "\n\033[32;1mУстановка SMPO-SERVER успешно завершена!\033[0m\n"
		fi
		;;
	*)
	        echo -e "\033[31;1mУстановка сервера КРОС производиться НЕ БУДЕТ.\033[0m\n"
		exit 0
		;;
esac
	systemctl stop smpo-server
if [ -e $SMPO_PATH/conf/pid ] || [ -e $SMPO_PATH/conf/smpo.active ];
 then
	rm -f $SMPO_PATH/conf/pid
	rm -f $SMPO_PATH/conf/smpo.active
fi
#
# Создание пользователя и базы данных
#
sudo -u postgres psql -c "ALTER USER postgres WITH ENCRYPTED PASSWORD 'postgres';"
sudo -u postgres psql -c "CREATE DATABASE jupiter;"
#
# Прорерка старых файлов конфигурации и их корректировка
#
if [ -d $SMPO_PATH.bak ];
 then
	cp -f $SMPO_PATH.bak/conf/$SMPO_PROPERTIES $SMPO_PATH/conf/
        cp -f $SMPO_PATH.bak/conf/wrapper.conf $SMPO_PATH/conf/
	change_settings
else
	cp -f $SMPO_PATH/conf/wrapper.conf.temp $SMPO_PATH/conf/wrapper.conf
	change_settings
fi
systemctl daemon-reload
systemctl start smpo-server
sleep 5
if [ `ps aux | grep [s]mpo-server | wc -l` != 0 ];
 then
	echo -e "\n\033[33;1m###############################################################"
	echo -e             "#                                                             #"
	echo -e             "#            Установка SMPO-SERVER завершена                  #"
	echo -e             "#  Команды управления сервером КРОС:                          #"
	echo -e             "#         Запутить службу - service smpo-server start         #"
	echo -e             "#         Остановить службу - service smpo-server stop        #"
	echo -e             "#         Перезапустить службу - service smpo-server restart  #"
	echo -e             "#         Узнать статус службы - service smpo-server status   #"
	echo -e             "#                                                             #"
	echo -e             "###############################################################\033[0m\n"
	ps aux|grep smpo-server
	cd $iHOME
	rm -rf smpo-server
	rm -f smpo-server.zip
else
        echo -e "\033[91;1;5mОшибка установки сервкра КРОС.\033[0m\n"
fi
exit 0
