:<<!
 * Copyright (c) Huawei Technologies Co., Ltd. 2018-2023. All rights reserved.
 * oemaker licensed under the Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *     http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
 * PURPOSE.
 * See the Mulan PSL v2 for more details.
 * Author:
 * Create: 2023-05-05
 * Description: provide qcow2 install_grub2
!

#!/bin/bash

if [ ${DEBUG_TRACE:-1} -gt 0 ]; then
    set -x
fi
set -eu
set -o pipefail

function install_grub2 ()
{
    GRUBNAME=$(which grub2-install)
    echo "Installing GRUB2..."
    GRUB_OPTS=${GRUB_OPTS:-"--force"}
    GRUB_OPTS="$GRUB_OPTS --target=i386-pc"

    $GRUBNAME --modules="biosdisk part_msdos" $GRUB_OPTS $DEVICE

    GRUB_CFG=/boot/grub2/grub.cfg

    echo 'GRUB_TIMEOUT=5' >> /etc/default/grub
    echo 'GRUB_DEFAULT=saved' >> /etc/default/grub
    echo 'GRUB_DISABLE_SUBMENU=true' >> /etc/default/grub
    echo 'GRUB_TERMINAL_OUTPUT="console"' >> /etc/default/grub
    echo "${GRUB_CMDLINE_LINUX_LINE}" >>/etc/default/grub
    # avoid find other host os bootable entry
    echo "GRUB_DISABLE_OS_PROBER=true" >> "/etc/default/grub"
    
    echo "cat <<EOF" >> /etc/grub.d/00_header
    echo "set superusers=\"kylin\"" >> /etc/grub.d/00_header
    echo "password_pbkdf2 root grub.pbkdf2.sha512.10000.5F635C22DDED2C2B461358B9438CED69BD916474219EA9C30024FC2F7D5D0EDE0226C221E0F0693E99A0BCE3CCA338EFF600DAAD7D6D63A5F21E5B4E88DD7A76.89AB83B39D775965D42706B71D4D9A80DE6224DFC3DC214E3B55450F5ABB3E9B94CE8408090725BF2E6D3E078F4C2CB9D73FF75BEECE545A589E4FE586E82BC0" >> /etc/grub.d/00_header
    echo "EOF" >> /etc/grub.d/00_header

    grub2-mkconfig -o $GRUB_CFG
    sed -i "/GRUB_DISABLE_OS_PROBER.*/d" "/etc/default/grub"
    sed_str="root=UUID=${ROOT_FS_UUID}"
    sed -i "s#root=/opt/imageTailor/.*.img#${sed_str}#g" $GRUB_CFG
}

function install_grub2_efi ()
{
    # if efi provide by shim,don't  mkimage
    if [ $ARCH == "aarch64" ]; then
        if [ ! -e "/boot/efi/EFI/kylin/grubaa64.efi" ];then
            cp -r /usr/lib/grub/arm64-efi /boot/efi/EFI/kylin/
            eval "grub2-mkimage -d /usr/lib/grub/arm64-efi -O arm64-efi --output=/boot/efi/EFI/kylin/grubaa64.efi '--prefix=(,gpt1)/efi/EFI/kylin' fat part_gpt part_msdos linux"
        fi
    elif [ $ARCH == "loongarch64" ]; then
        if [ ! -e "/boot/efi/EFI/kylin/BOOTLOONGARCH.EFI" ];then
            cp -r /usr/lib/grub/loongarch64-efi /boot/efi/EFI/kylin/
            eval "grub2-mkimage -d /usr/lib/grub/loongarch64-efi -O loongarch64-efi --output=/boot/efi/EFI/kylin/BOOTLOONGARCH.EFI '--prefix=(,gpt1)/efi/EFI/kylin' fat part_gpt part_msdos linux" 
        fi
    fi

    if [ $ARCH == "aarch64" ]; then
        mkdir -p /boot/EFI/BOOT/
        cp -f /boot/efi/EFI/kylin/grubaa64.efi /boot/EFI/BOOT/BOOTAA64.EFI
    elif [ $ARCH == "loongarch64" ]; then
        # if BOOTLOONGARCH.efi exist,don't copy
        if [ ! -e "/boot/EFI/BOOT/BOOTLOONGARCH.efi" ];then
            mkdir -p /boot/EFI/BOOT/
            cp -f /boot/efi/EFI/kylin/BOOTLOONGARCH.EFI /boot/EFI/BOOT/BOOTLOONGARCH.efi
        fi
    fi

    echo 'GRUB_TIMEOUT=5' >> /etc/default/grub
    echo 'GRUB_DEFAULT=saved' >> /etc/default/grub
    echo 'GRUB_DISABLE_SUBMENU=true' >> /etc/default/grub
    echo 'GRUB_TERMINAL_OUTPUT="console"' >> /etc/default/grub
    echo "${GRUB_CMDLINE_LINUX_LINE}" >>/etc/default/grub
    echo 'GRUB_DISABLE_RECOVERY="true"' >>/etc/default/grub
    # avoid find other host os bootable entry
    echo "GRUB_DISABLE_OS_PROBER=true" >> "/etc/default/grub"

    echo "cat <<EOF" >> /etc/grub.d/00_header
    echo "set superusers=\"kylin\"" >> /etc/grub.d/00_header
    echo "password_pbkdf2 root grub.pbkdf2.sha512.10000.5F635C22DDED2C2B461358B9438CED69BD916474219EA9C30024FC2F7D5D0EDE0226C221E0F0693E99A0BCE3CCA338EFF600DAAD7D6D63A5F21E5B4E88DD7A76.89AB83B39D775965D42706B71D4D9A80DE6224DFC3DC214E3B55450F5ABB3E9B94CE8408090725BF2E6D3E078F4C2CB9D73FF75BEECE545A589E4FE586E82BC0" >> /etc/grub.d/00_header
    echo "EOF" >> /etc/grub.d/00_header
    GRUB_CFG=/boot/efi/EFI/kylin/grub.cfg
    grub2-mkconfig -o $GRUB_CFG
    sed -i "/GRUB_DISABLE_OS_PROBER.*/d" "/etc/default/grub"
    sed_str="root=UUID=${ROOT_FS_UUID}"
    sed -i "s#root=/opt/imageTailor/.*.img#${sed_str}#g" $GRUB_CFG
}

if [ -f /boot/grub2/device.map ]; then
cat << EOF | tee /boot/grub2/device.map > /dev/null
(hd0)   /dev/xvda
EOF
fi

if [ $ARCH == "x86_64" ]; then
    install_grub2
fi


if [ $ARCH == "aarch64" ] || [ $ARCH == "loongarch64" ]; then
    install_grub2_efi
fi