#!/bin/sh

if [ $# -lt 3 ]; then
    dialog --msgbox "Ошибка!\n\nНедостаточно аргументов!" 8 40
    exit
fi

TITLE="Установка образа системы"
dev=$1
core=$2
kver=$3
shift 3
soft=$*
src=/opt
dstroot=/mnt
dstboot=$dstroot/boot
dstefi=$dstboot/EFI/BOOT/
arch=${core#*-}

blk=/dev/$dev
partboot="$blk"1
partroot="$blk"2

exec 3>&1
errstr=
(
    echo "Создание таблицы разделов..."
    errstr=$errstr`parted -a optimal -s $blk mklabel gpt 2>&1`
    echo "Создание разделов..."
    sleep 2
    errstr=$errstr`parted -a optimal -s $blk mkpart BOOT fat32 0% 64MiB mkpart REECOM ext4 64MiB 100% set 1 boot on 2>&1`
    echo "Форматирование разделов..."
    sleep 2
    mkfs.vfat -F 32 -n "BOOT" $partboot  2>/dev/null > /dev/null
    mkfs.f2fs -l "REECOM" $partroot 2>/dev/null > /dev/null
    echo "Монтирование разделов..."
    errstr=$errstr`mount $partroot $dstroot`
    mkdir $dstboot
    errstr=$errstr`mount $partboot $dstboot`
) | dialog --backtitle "$TITLE" --title "Создание загрузочного раздела" --progressbox " " 10 60
if [ "$errstr" ]; then
    dialog --backtitle "$TITLE" --title "Возникли ошибки, продолжить?" --yesno "$errstr" 20 50 2>&1 1>&3
    if [ $? -ne 0 ]; then
	exit
    fi
fi

(pv -n $src/$core.tar.xz | tar xJf - -C $dstroot ) 2>&1 | dialog --backtitle "$TITLE" --title "Распаковка файлов ОС" --gauge " " 10 70 0
sleep 1
(pv -n $src/kernel-$kver-$arch.tar.xz | tar xJhf - -C $dstroot ) 2>&1 | dialog --backtitle "$TITLE" --title "Распаковка файлов ядра" --gauge " " 10 70 0
sleep 1
for s in $soft; do
    sf="$s"_$arch
    (pv -n $src/$sf.tar.xz | tar xJf - -C $dstroot ) 2>&1 | dialog --backtitle "$TITLE" --title "Распаковка файлов $s" --gauge " " 10 70 0
    sleep 1
done

setup-network $dstroot

(
    echo "Создание файлов..."
    cp $src/initrd-$arch.gz $dstboot/initrd.gz
    sleep 1
    echo "Удаление старых записей..."
    for br in `efibootmgr | grep REECOM | grep -oE "[0-9]{4}"`; do
	efibootmgr -B -b $br > /dev/null
    done
    sleep 1
    echo "Создание загрузочной записи..."
    PARTUUID=`blkid $partroot -s PARTUUID -o value`
    efibootmgr -c -d $blk -p 1 -L "REECOM" -l "\bzImage" -u "ro quiet root=PARTUUID=$PARTUUID initrd=\initrd.gz" > /dev/null
    sleep 1
    echo "Размонтирование разделов..."
    umount $partboot $partroot
    sleep 1
) | dialog --backtitle "$TITLE" --title "Настройка загрузки" --progressbox " " 10 60

exec 3>&-
