#!/bin/bash
#
# metadata_begin
# recipe Install BitNinja
# tags: debian11,debian12,ubuntu2004,ubuntu2204,ubuntu2404,alma8,alma9,centos9,rocky8,rocky9
# revision 1
# description_ru Установка BitNinja
# description_en Install BitNinja
# Based on Trashwind's scripts
# metadata_end
#

RNAME="BitNinja"

set -x
LOG_PIPE=/tmp/log.pipe.$$
mkfifo ${LOG_PIPE}
LOG_FILE=/root/${RNAME}.log
touch ${LOG_FILE}
chmod 600 ${LOG_FILE}
tee < ${LOG_PIPE} ${LOG_FILE} &
exec > ${LOG_PIPE}
exec 2> ${LOG_PIPE}

killjobs() {
    test -n "$(jobs -p)" && kill $(jobs -p) || :
}
trap killjobs INT TERM EXIT

LogClean() {
    rm -f ${LOG_PIPE}
    rm -f ${LOG_FILE}
}

echo
echo "== Recipe ${RNAME} started at $(date) =="
echo

# Проверка наличия ключа лицензии(не пустой)
[ -z "($bitninja_license_key)" ] && { echo "Error: 'bitninja_license_key' is not set or empty. Exiting." >&2 ; exit 1 ; }

. /etc/os-release
osLike="${ID_LIKE}"
[ "${ID}" = "debian" ] && osLike="debian"
echo ${ID_LIKE} | grep -q "rhel\|fedora" && osLike="rhel"
[ "${ID}" = "fedora" ] && osLike="rhel"
unaID=$(echo ${VERSION_ID} | sed -r 's/\..+//')

# Определяем пакетный менеджер
DNF="/usr/bin/yum"
[ -f /usr/bin/dnf ] && DNF="/usr/bin/dnf"
[ -f /usr/bin/apt ] && { export DEBIAN_FRONTEND=noninteractive ; DNF="apt_Installer" ; }
[ -n "${DNF}" ] || exit 1


# Определяем инсталятор apt и его опции. Обходим фоновые задачи установки и обновления ОС
apt_Installer() {
while ps uxaww | grep -v grep | grep -Eq 'apt|dpkg' ; do echo "waiting..." ; sleep 5 ; done && \
/usr/bin/apt -o Dpkg::Options::="--force-confold" -o Dpkg::Options::="--force-confdef" -q --allow-downgrades --allow-remove-essential --allow-change-held-packages $@
}

# Установка набора пакетов
install_req_packages() {
case "${osLike}" in
	"debian" )
		[ "$(systemctl is-active unattended-upgrades.service 2>/dev/null)" = "active" ] && { systemctl stop unattended-upgrades.service && unattServ="1" ; }
		${DNF} update -y
		${DNF} install -y "$@"
	;;
	"rhel" )
		${DNF} install -y "$@"
	;;
esac
}

# Проверяем и устанавливаем необходимые утилиты
install_req_packages curl wget sudo
#включение unattended, если был выключен
unattendservice() {
[ -n "${unattServ}" ] && systemctl start unattended-upgrades.service
}

# Установка BitNinja(официальный скрипт)
install_BitNinja() {
TMP_BN_LOG="/tmp/bitninja_install.log"
curl https://get.bitninja.io/install.sh | bash -s -- --license_key=($bitninja_license_key) | tee ${TMP_BN_LOG}

#доппроверка логов установки bitninja в обход главного лога рецепта
if grep -q -E "Congratulations|Update\ finished\ successfully" ${TMP_BN_LOG}; then
	echo "BitNinja установлен успешно"
	systemctl restart bitninja.service
	unattendservice
	rm -f ${TMP_BN_LOG}
	return 0
else
	echo "Could not install BitNinja" >&2
	cat ${TMP_BN_LOG} >&2
	rm -f ${TMP_BN_LOG}
	unattendservice
	return 1
fi
}

install_BitNinja || { echo "Could not install BitNinja" >&2 ; exit 1 ; }
#Если ключ будет использован повторно при установке, то ошибок в VMmanager не будет, но  в логе будет видно, либо при вызове bitninjacli\systemd unita
#Рецепт смотрит только на установку софта.
#Если софт  bitninja по каким-либо причинам не установится, будет ошибка в VMmanager
