#!/bin/bash

#Licence GPLv3 and later
#Author: AlexL

TARGET0="$1"
DISTR_ARCH="$2"
MRC="$3"
DISTR=mageia
DEV_DISTR=cauldron
USER0="mass_rebuild"
HOME0="/home"
TARGET="$DISTR$TARGET0"
DISTRIB="http://mirror.yandex.ru/$DISTR/distrib/$TARGET0/$DISTR_ARCH"
DISTR_MRC="http://packages.mageialinux.ru/$DISTR$TARGET0/$DISTR_ARCH/"
MEDIA1="$DISTRIB/media/core/release"
MEDIA2="$DISTRIB/media/core/updates"
MEDIA3="$DISTRIB/media/core/backports"
MEDIA4="$DISTRIB/media/nonfree/release"
MEDIA5="$DISTRIB/media/nonfree/updates"
MEDIA6="$DISTRIB/media/nonfree/backports"
MEDIA7="$DISTRIB/media/tainted/release"
MEDIA8="$DISTRIB/media/tainted/updates"
MEDIA9="$DISTRIB/media/tainted/backports"
LANG0=`echo $LANG|grep ru`
if [ ! "$LANG0" = "" ]
then
  SCRIPT_LANG=Russian
else
  SCRIPT_LANG=English
fi
if [ $# -eq 0 ]
then
  if [ "$SCRIPT_LANG" = "Russian" ]
  then
    echo "Использование:"
    echo "первый параметр - номер дистрибутива, например, 4 или $DEV_DISTR"
    echo "второй параметр - архитектура собранных пакетов, например, i586 или x86_64"
    echo "третий параметр - mrc (опционально) - подключить внешний репозиторий Mageia Russian Community"
  else
    echo "Usage:"
    echo "the first parameter is distro number, for example, 4 or $DEV_DISTR"
    echo "the second parameter is architecture of built packages, for example, i586 or x86_64"
    echo "the third parameter - mrc (optional) - add Mageia Russian Community repo"
  fi
  exit 1
fi
if [ "$(id -u)" != "0" ]
then
  if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Требуется запуск под root"; else echo "You must be root"; fi
  if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Выход"; else echo "Exit"; fi
  exit 1
fi
MASS_REBUILD="$HOME0/$USER0"
LOG="$MASS_REBUILD/test_install.log"
if [ ! "$1" = "$DEV_DISTR" ]
then
  N=$(expr $1 + 0 2>/dev/null) || if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Первый параметр - не номер дистрибутива и не $DEV_DISTR"|tee -a $LOG; exit 1; else echo "The first parameter is not number of distro and not $DEV_DISTR"|tee -a $LOG; exit 1; fi
else
  TARGET="$DEV_DISTR"
fi
if [ "$2" = "" ]
then
  if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Не указана архитектура вторым параметром"|tee -a $LOG; else echo "No architecture by the second parameter"|tee -a $LOG; fi
  exit 1
fi
if [ ! "$2" = "i586" ]
then
  if [ ! "$2" = "x86_64" ]
  then
    if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Неизвестная архитектура $2"|tee -a $LOG; else echo "Unknown architecture $2"|tee -a $LOG; fi
    exit 1
  fi
fi
A=`which urpmi`
if [ "$A" = "" ]
then
  if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Не найдено urpmi"|tee -a $LOG; else echo "No found urpmi"|tee -a $LOG; fi
  exit 1
fi
if [ ! -d "$MASS_REBUILD/repo/$TARGET/RPMS/noarch" ]
then
  if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Не найдена директория $MASS_REBUILD/repo/$TARGET/RPMS/noarch"; else echo "There is no directory $MASS_REBUILD/repo/$TARGET/RPMS/noarch"; fi
  exit 1
fi
if [ ! -d "$MASS_REBUILD/repo/$TARGET/RPMS/$DISTR_ARCH" ]
then
  if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Не найдена директория $MASS_REBUILD/repo/$TARGET/RPMS/$DISTR_ARCH"; else echo "There is no directory $MASS_REBUILD/repo/$TARGET/RPMS/$DISTR_ARCH"; fi
  exit 1
fi

pkgs=`ls -1 $MASS_REBUILD/repo/$TARGET/RPMS/noarch|grep -v media_info`
if [ "$pkgs" = "" ]
then
  pkgs=`ls -1 $MASS_REBUILD/repo/$TARGET/RPMS/$DISTR_ARCH|grep -v media_info`
  if [ "$pkgs" = "" ]
  then
    if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Нечего тестировать, нет пакетов"; else echo "Nothing to test, there are no packages"; fi
    exit 1
  fi
fi

if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Подключаются репозитории $MEDIA1, $MEDIA2, $MEDIA3, $MEDIA4, $MEDIA5, $MEDIA6, $MEDIA7, $MEDIA8, $MEDIA9 и $MASS_REBUILD/repo/$TARGET/$DISTR_ARCH в $MASS_REBUILD/test"|tee -a $LOG; else echo "Configuring repos $MEDIA1, $MEDIA2, $MEDIA3, $MEDIA4, $MEDIA5, $MEDIA6, $MEDIA7, $MEDIA8, $MEDIA9 and $MASS_REBUILD/repo/$TARGET/$DISTR_ARCH into $MASS_REBUILD/test"|tee -a $LOG; fi
rm -rf $MASS_REBUILD/test
mkdir -p $MASS_REBUILD/test
urpmi.addmedia $TARGET-test1 "$MEDIA1" --urpmi-root $MASS_REBUILD/test 2>&1 |tee -a $LOG
urpmi.addmedia $TARGET-test2 "$MEDIA2" --urpmi-root $MASS_REBUILD/test 2>&1 |tee -a $LOG
urpmi.addmedia $TARGET-test3 "$MEDIA3" --urpmi-root $MASS_REBUILD/test 2>&1 |tee -a $LOG
urpmi.addmedia $TARGET-test4 "$MEDIA4" --urpmi-root $MASS_REBUILD/test 2>&1 |tee -a $LOG
urpmi.addmedia $TARGET-test5 "$MEDIA5" --urpmi-root $MASS_REBUILD/test 2>&1 |tee -a $LOG
urpmi.addmedia $TARGET-test6 "$MEDIA6" --urpmi-root $MASS_REBUILD/test 2>&1 |tee -a $LOG
urpmi.addmedia $TARGET-test7 "$MEDIA7" --urpmi-root $MASS_REBUILD/test 2>&1 |tee -a $LOG
urpmi.addmedia $TARGET-test8 "$MEDIA8" --urpmi-root $MASS_REBUILD/test 2>&1 |tee -a $LOG
urpmi.addmedia $TARGET-test9 "$MEDIA9" --urpmi-root $MASS_REBUILD/test 2>&1 |tee -a $LOG
if [ "$MRC" = "mrc" ]
then
  if [ ! "$TARGET" = "$DEV_DISTR" ]
  then
    if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Подключается репозиторий $MRC"|tee -a $LOG; else echo "Configuring repo $MRC"|tee -a $LOG; fi
    urpmi.addmedia --distrib $MRC-$DISTR_ARCH- $DISTR_MRC --urpmi-root $MASS_REBUILD/test 2>&1 |tee -a $LOG
    if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Подключение репозитория $MRC завершено"|tee -a $LOG; else echo "Configuring repo $MRC was finished"|tee -a $LOG; fi
  else
    if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Игнорируется опция $MRC для $DEV_DISTR"; else echo "Option $MRC was ignored for $DEV_DISTR"; fi
  fi
fi
urpmi.addmedia --distrib --urpmi-root $MASS_REBUILD/test "file://$MASS_REBUILD/repo/$TARGET/$DISTR_ARCH" 2>&1 |tee -a $LOG
if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Подключение всех репозиториев завершено"|tee -a $LOG; else echo "Configuring all repos was finished"|tee -a $LOG; fi

if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Создание минимальной системы в $MASS_REBUILD/test"|tee -a $LOG; else echo "Creating minimal system in $MASS_REBUILD/test"|tee -a $LOG; fi
urpmi --no-verify-rpm --nolock --auto --ignoresize --no-recommends --urpmi-root=$MASS_REBUILD/test --root=$MASS_REBUILD/test basesystem-minimal rpm-build sudo urpmi curl 2>&1 |tee -a $LOG
if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Создание минимальной системы завершено"|tee -a $LOG; else echo "Creating minimal system was finished"|tee -a $LOG; fi

#noarch
for pkg in `ls -1 $MASS_REBUILD/repo/$TARGET/RPMS/noarch|grep -v media_info`;do
     if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Проверяется пакет $pkg"|tee -a $LOG; else echo "Checking $pkg package"|tee -a $LOG; fi
     urpmi --no-verify-rpm --nolock --auto --ignoresize --test --urpmi-root=$MASS_REBUILD/test --root=$MASS_REBUILD/test $MASS_REBUILD/repo/$TARGET/RPMS/noarch/$pkg 2>&1 |tee -a $LOG
     if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Проверка пакета $pkg завершена"|tee -a $LOG; else echo "Checking for $pkg package was finished"|tee -a $LOG; fi
done

#$DISTR_ARCH
for pkg in `ls -1 $MASS_REBUILD/repo/$TARGET/RPMS/$DISTR_ARCH|grep -v media_info`;do
     if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Проверяется пакет $pkg"|tee -a $LOG; else echo "Checking $pkg package"|tee -a $LOG; fi
     urpmi --no-verify-rpm --nolock --auto --ignoresize --test --urpmi-root=$MASS_REBUILD/test --root=$MASS_REBUILD/test $MASS_REBUILD/repo/$TARGET/RPMS/$DISTR_ARCH/$pkg 2>&1 |tee -a $LOG
     if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Проверка пакета $pkg завершена"|tee -a $LOG; else echo "Checking for $pkg package was finished"|tee -a $LOG; fi
done

if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Очистка $MASS_REBUILD/test"|tee -a $LOG; else echo "Cleaning $MASS_REBUILD/test"|tee -a $LOG; fi
rm -rf $MASS_REBUILD/test
if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Очистка $MASS_REBUILD/test завершена"|tee -a $LOG; else echo "Cleaning $MASS_REBUILD/test was finished"|tee -a $LOG; fi

if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Тест завершён"|tee -a $LOG; else echo "Test was finished"|tee -a $LOG; fi
if [ "$SCRIPT_LANG" = "Russian" ]; then echo "Логи смотрите в $LOG"|tee -a $LOG; else echo "Please see logs in $LOG"|tee -a $LOG; fi
