#!/usr/bin/sh

[ "$(id -u)" -eq '0' ] || \
  { echo 'Скрипт обновления должен быть запущен под учётной записью суперпользователя.' && exit 1; }

export PKGS_TO_UNLOCK='
  python3-jinja2-0:3.0.3-1.el7
'
export PKGS_TO_REMOVE='
  python3-jwt+crypto
'
export PKGS_TO_LOCK='
  ca-certificates-0:2021.2.50-4.el7.3
  python3-jinja2-0:3.1.2-1.el7
  python3-packaging-0:21.3-1.el7
  python3-setuptools-0:41.2.1-7.el7
  python3-django-0:3.2.25-1.el7
  python3-yarl-0:1.8.2-1.el7
  python3-aiodns-0:3.0.0-3.el7
  python3-djangorestframework-0:3.14.0-1.el7
  candlepin-0:4.3.1-2.el7
  python3-pyparsing-0:2.4.7-5.el7
  tomcat-servlet-4.0-api-1:9.0.74-1.el7
  tomcat-lib-1:9.0.74-1.el7
  tomcat-jsp-2.3-api-1:9.0.74-1.el7
  tomcat-el-3.0-api-1:9.0.74-1.el7
  tomcat-1:9.0.74-1.el7
'

echo 'Устанавливаем DNF команду versionlock...'
dnf --assumeyes install 'dnf-command(versionlock)' || \
  { echo 'Не удалось установить DNF команду versionlock.' && exit 2; }

echo 'Убираем ранее зафиксированные версии пакетов из списка...'
for pkg in ${PKGS_TO_UNLOCK}; do
  dnf --assumeyes versionlock delete "${pkg}" || \
    { echo "Не удалось убрать ранее зафиксированную версию пакета ${pkg} из списка." && exit 3; }
done

echo 'Удаляем пакеты, которые мешают обновлению...'
for pkg in ${PKGS_TO_REMOVE}; do
  dnf --assumeyes remove "${pkg}" || \
    { echo "Не удалось удалить пакет ${pkg}." && exit 4; }
done

echo 'Проверяем, установлены ли пакеты, версии которых нужно зафиксировать...'
for pkg in ${PKGS_TO_LOCK}; do
  dnf list --installed "${pkg}" || \
    { echo "В системе не установлен пакет ${pkg}. Устанавливаем."; \
      dnf --assumeyes install "${pkg}" || \
        { echo "Не удалось установить необходимый пакет ${pkg}." && exit 5; } ; }
done

echo 'Фиксируем версии пакетов...'
for pkg in ${PKGS_TO_LOCK}; do
  dnf --assumeyes versionlock add "${pkg}" || \
    { echo "Не удалось зафиксировать версию пакета ${pkg}." && exit 6; }
done

echo 'Проверяем версию Java...'
dnf list --installed 'java-1.8.0-openjdk-1:1.8.0.422*' || \
  { echo 'Не удалось найти Java версии 1.8.0.422. Устанавливаем.'; \
    dnf --assumeyes install 'java-1.8.0-openjdk-1:1.8.0.422*' || \
      { echo 'Не удалось установить пакет с Java версии 1.8.0.422.' && exit 7; } ; }
java -version 2>&1 | grep -q '1.8.0_422' || \
  update-alternatives --set java 'java-1.8.0-openjdk.x86_64' || \
    { echo 'Не удалось выставить версию 1.8.0.422 версией Java по умолчанию.' && exit 8; }

echo 'Обновляем установленные пакеты...'
dnf --assumeyes upgrade --refresh || \
  { echo 'Не удалось обновить установленные пакеты.' && exit 9; }

echo 'Подготовительная часть выполнена, теперь можно запустить foreman-installer.'

