#!/bin/bash

OUT_DIR="."
if [ -n "$1" ]; then
	OUT_DIR="$1"
fi

function usage()
{
	echo -e ""
	echo -e "=== 用法 ==="
	echo -e ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
	echo -e "1.\t$0"
	echo -e "2.\t$0 [outdir]: outdir是一个存在并有写权限的目录"
}

function cleanclean()
{
	while true
	do
		if [ -n "$(mount | grep /tmp/dst-dir)" ]; then
			sudo umount /tmp/dst-dir
			echo "umount /tmp/dst-dir"
			sleep 0.5
		else
			break
		fi
	done
	if [ -d /tmp/dst-dir ]; then
		rmdir /tmp/dst-dir
	fi
	mkdir -p /tmp/dst-dir
}

#echo "开始检查参数..."
#if [ $# -ne 1 ]; then
#	echo "用法：$0 \"UDisk-mount-point\""
#	echo "或者：$0 \"Tf-mount-point\""
#	exit 1
#fi

echo "1.检查脚本运行参数..."
if [ ! -d "$OUT_DIR" ]; then
	echo "  >>>> $OUT_DIR 不是文件夹或名字有误"
	usage
	exit 1
else
	echo "  >>>> 检查参数通过！"
	echo

fi

echo "2.准备rootfs.img[临时]挂载点..."
cleanclean
echo "  >>>> rootfs.img[临时]挂载点准备完成！"
echo

#echo "挂载rootfs到src-dir..."
#mount /dev/block/by-name/rootfs /tmp/src-dir
#if [ $? -eq 0 ]; then
#	echo "挂载rootfs到src-dir成功！"
#	echo
#else
#	exit 1
#fi

# 检查 /mnt 是否被挂载
echo "3.确认rootfs可被导出..."
if mountpoint -q /mnt; then
	echo "  >>>> /mnt 目录已被挂载"
	echo
else
	echo "  >>>> /mnt 目录未被挂载"
	echo "  >>>> 请先用load_rootfs或者mount命令, 把【开发板】挂载到EASY-EAI编译环境"
	exit 1
fi

echo "4.计算新rootfs大小[文件系统较大,等待时间较长]..."
SIZE_IN_MB=$((`sudo du -s -B 4096 /mnt | awk '{print $1}'`/256*11/10))
echo "  >>>> 新rootfs的大小是：$SIZE_IN_MB MB"
echo

echo "5.申请$SIZE_IN_MB MB磁盘空间"
dd if=/dev/zero of=$OUT_DIR/rootfs.img bs=1 count=0 seek=${SIZE_IN_MB}M > /dev/null 2>&1
if [ $? -eq 0 ]; then
	echo "  >>>> 申请$SIZE_IN_MB MB磁盘空间成功！"
	echo
else
	echo "  >>>> 申请$SIZE_IN_MB MB磁盘空间失败！"
	exit 1
fi

echo "6.格式化新rootfs..."
mkfs.ext4 -FFq $OUT_DIR/rootfs.img
if [ $? -eq 0 ]; then
	echo "  >>>> 格式化新rootfs成功！"
	echo
else
	echo "  >>>> 格式化新rootfs失败！"
	exit 1
fi

echo "7.挂载新rootfs到/tmp/dst-dir..."
sudo mount -o loop $OUT_DIR/rootfs.img /tmp/dst-dir
if [ $? -eq 0 ]; then
	echo "  >>>> 挂载新rootfs到dst-dir成功！"
	echo
else
	echo "  >>>> 挂载新rootfs到dst-dir失败！"
        echo "========================================================"
        echo "可能loop节点已被某写服务占满，请先把loop节点的挂载清空:"
        echo "  1.使用\"sudo loopsetup -a\"命令, 查看所有loop节点被何占用"
        echo "  2.用\"exit\"命令, 退出编译环境"
        echo "  3.用\"mount | grep -i xxxx\"命令, 查看被占用的挂载点"
        echo "  4.用\"sudo umount xxxx\"命令, 把占用loop的挂载点全部卸载掉"
        echo "  5.回到编译环境内重新执行导出操作"
	exit 1
fi

echo "8.开始复制文件到/tmp/dst-dir..."
cd /mnt
sudo tar -cf - * | sudo tar -xvf - -C /tmp/dst-dir
if [ $? -eq 0 ]; then
	sync
	echo "==== rootfs.img导出成功！==== "
	echo
else
	echo "==== rootfs.img导出失败！==== "
	exit 1
fi

echo "清理多余文件..."
echo
cd - > /dev/null
cleanclean

echo "以下是刚刚导出的rootfs镜像："
ls -lh $OUT_DIR/rootfs.img
echo

