:<<!
 * 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: make filesystem for qcow2 by mkfs.xfs parted which will be build in qcow2
!

#!/bin/bash

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

#prepare mkfs.xfs mkfs.ext4 parted bc mknod losetup  tune2fs xfs_admin
yum install -y xfsprogs e2fsprogs parted bc dosfstools

NAME=qcow2.img


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

    /usr/sbin/parted ${NAME} -- mklabel msdos
    /usr/sbin/parted ${NAME} -- mkpart primary ${FS} 0% 100%

elif [ $ARCH == "aarch64" ] || [ $ARCH == "loongarch64" ]; then

    /usr/sbin/parted ${NAME} -- mklabel gpt
    # allocate 644MB for align
    /usr/sbin/parted ${NAME} -- mkpart primary fat16 0% 3%
    /usr/sbin/parted ${NAME} -- mkpart primary ${FS} 3% 100%

elif [ $ARCH == "riscv64" ]; then

    /usr/sbin/parted ${NAME} -- mkpart primary ext4 0% 512MB
    /usr/sbin/parted ${NAME} -- mkpart primary ext4 512MB 100%

fi

export DEVICE=`losetup -f`
num=$(echo $DEVICE | awk -F 'loop' '{print $2}')
rm -rf "/dev/loop${num}"
mknod $DEVICE b 7 $num
/usr/sbin/losetup ${DEVICE} ${NAME}

offset=`fdisk -l ${NAME} | grep "${NAME}1" | awk '{print $2}'`
sizelimit=`fdisk -l ${NAME} | grep "${NAME}1" | awk '{print $3}'`
sizelimit=`echo "($sizelimit - $offset)*512" | bc`
offset=`echo "${offset}*512" | bc`

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

    export BOOT=`losetup -f`
    num=$(echo $BOOT | awk -F 'loop' '{print $2}')
    rm -rf "/dev/loop${num}"
    mknod $BOOT b 7 $num
    /usr/sbin/losetup -o ${offset} --sizelimit ${sizelimit} ${BOOT} ${NAME}
    /usr/sbin/mkfs.vfat $BOOT

    offset=`fdisk -l ${NAME} | grep "${NAME}2" | awk '{print $2}'`
    sizelimit=`fdisk -l ${NAME} | grep "${NAME}2" | awk '{print $3}'`
    sizelimit=`echo "($sizelimit - $offset)*512" | bc`
    offset=`echo "${offset}*512" | bc`

fi

if [ $ARCH == "riscv64" ]; then

    export BOOT=`losetup -f`
    num=$(echo $BOOT | awk -F 'loop' '{print $2}')
    rm -rf "/dev/loop${num}"
    mknod $BOOT b 7 $num
    /usr/sbin/losetup -o ${offset} --sizelimit ${sizelimit} ${BOOT} ${NAME}
    /usr/sbin/mkfs.ext4 ${BOOT}

    offset=`fdisk -l ${NAME} | grep "${NAME}2" | awk '{print $2}'`
    sizelimit=`fdisk -l ${NAME} | grep "${NAME}2" | awk '{print $3}'`
    sizelimit=`echo "($sizelimit - $offset)*512" | bc`
    offset=`echo "${offset}*512" | bc`

fi

export ROOT=`losetup -f`
num=$(echo $ROOT | awk -F 'loop' '{print $2}')
rm -rf "/dev/loop${num}"
mknod $ROOT b 7 $num
export ROOT_FS_UUID=$(uuidgen -r)
/usr/sbin/losetup -o ${offset} --sizelimit ${sizelimit} ${ROOT} ${NAME}
/usr/sbin/mkfs.${FS} -L "rootfs" ${ROOT}
if [ $FS == "ext4" ] ; then
    /sbin/tune2fs -U ${ROOT_FS_UUID} ${ROOT}
elif [ $FS == "xfs" ] ; then
    xfs_admin -U ${ROOT_FS_UUID} ${ROOT}
else
    echo "Unsupported file partition formats"
fi

yum remove -y bc dosfstools

/usr/sbin/losetup -D
