UCAS_INPUT_KERNEL_PATH=/ucas/input/kernel/
UCAS_INPUT_FS_PATH=/ucas/input/fs/
UCAS_INPUT_BOOTFS_PATH=/ucas/input/efi/
UCAS_INPUT_BOOTFS1_PATH=/ucas/input/grub/
UCAS_TMP=/tmp/rootfs/
UCAS_GRUB=boot/grub/grub.cfg
UCAS_IMAGE_PATH=$2
UCAS_IMAGE_VERSION=$3
UCAS_ENABLE_SUDO=$4
if [ -z "$UCAS_IMAGE_VERSION" ]; then
echo "please input image version at arg[3]: normal, docker, ...."
exit 1
elif [ $UCAS_IMAGE_VERSION == "normal" ]; then
echo "make normal image....."
UCAS_OUTPUT_KERNEL_PATH=$UCAS_IMAGE_PATH/normal/kernel
UCAS_OUTPUT_FS_PATH=$UCAS_IMAGE_PATH/normal/fs
elif [ $UCAS_IMAGE_VERSION == "docker" ]; then
echo "make docker image....."
UCAS_OUTPUT_KERNEL_PATH=$UCAS_IMAGE_PATH/docker/kernel
UCAS_OUTPUT_FS_PATH=$UCAS_IMAGE_PATH/docker/fs
else
echo "version error!"
exit 1
fi
UCAS_OUTPUT_BOOTFS_PATH=$UCAS_IMAGE_PATH/efi
UCAS_OUTPUT_BOOTFS1_PATH=$UCAS_IMAGE_PATH/grub
if [ $UCAS_ENABLE_SUDO == "--enable_sudo" ]; then
echo "enable sudo "
SUDO=sudo
else
echo "disable sudo"
SUDO=
fi
DEV_NAME=$1
NVMEFLAG=
index=1
if [ -z "$DEV_NAME" ]; then
echo "please input devname: eg. ./mkimage.sh /dev/sdb"
exit 1
fi
if [ -z "$UCAS_IMAGE_PATH" ]; then
echo "please input image path: eg. ./mkimage.sh /dev/sdb /imagepath "
exit 1
fi
if [ -z "$UCAS_OUTPUT_KERNEL_PATH" ]; then
echo "please input kernel path: eg. ./mkimage.sh /dev/sdb"
exit 1
fi
if [ -z "$UCAS_OUTPUT_FS_PATH" ]; then
echo "please input fs path: eg. ./mkimage.sh /dev/sdb"
exit 1
fi
if [ -z "$UCAS_OUTPUT_BOOTFS_PATH" ]; then
echo "please input efi path: eg. ./mkimage.sh /dev/sdb"
exit 1
fi
if [ -z "$UCAS_OUTPUT_BOOTFS1_PATH" ]; then
echo "please input grub path: eg. ./mkimage.sh /dev/sdb"
exit 1
fi
echo "[**--------------- begin mkimage ---------------**]"
echo "y" | $SUDO mkfs.ext4 $DEV_NAME &> /dev/null
if [ $? -ne 0 ]; then
echo "mkfs disk failed"
exit 1
fi
echo " Make disk partition............"
$SUDO parted $DEV_NAME -s mktable gpt
$SUDO parted $DEV_NAME -s mkpart primary fat16 1M 100M
$SUDO parted $DEV_NAME -s set 1 msftdata on
$SUDO parted $DEV_NAME -s mkpart primary ext4 100M 200M
$SUDO parted $DEV_NAME -s mkpart primary ext4 200M 10G
$SUDO parted $DEV_NAME -s mkpart primary fat16 10G 11G
$SUDO parted $DEV_NAME -s set 4 boot on
$SUDO parted $DEV_NAME -s set 4 esp on
if [ $? -ne 0 ]; then
echo "fdisk disk failed"
exit 1
fi
$SUDO mkdir -p $UCAS_INPUT_KERNEL_PATH
if [ $? -ne 0 ]; then
echo "mkdir kernel folder failed"
exit 1
fi
$SUDO mkdir -p $UCAS_INPUT_FS_PATH
if [ $? -ne 0 ]; then
echo "mkdir fs folder failed"
exit 1
fi
$SUDO mkdir -p $UCAS_INPUT_BOOTFS_PATH
if [ $? -ne 0 ]; then
echo "mkdir bootfs folder failed"
exit 1
fi
$SUDO mkdir -p $UCAS_INPUT_BOOTFS1_PATH
if [ $? -ne 0 ]; then
echo "mkdir bootfs1 folder failed"
exit 1
fi
echo "format disk partition..................."
partprobe
sync
if [[ $DEV_NAME == *"nvme"* ]]; then
NVMEFLAG=p
DEV_NAME=$DEV_NAME$NVMEFLAG
echo "have nvme"
fi
echo "y" | $SUDO mkfs.vfat -F 16 $DEV_NAME$index #&> /dev/null
if [ $? -ne 0 ]; then
echo "mkfs.vfat failed1"
exit 1
fi
$SUDO mount $DEV_NAME$index $UCAS_INPUT_BOOTFS_PATH
if [ $? -ne 0 ]; then
echo "mount bootfs failed"
exit 1
fi
let index+=1
echo "y" | $SUDO mkfs.ext4 $DEV_NAME$index &> /dev/null
if [ $? -ne 0 ]; then
echo "mkfs kernel folder failed"
exit 1
fi
$SUDO mount $DEV_NAME$index $UCAS_INPUT_KERNEL_PATH
if [ $? -ne 0 ]; then
echo "mount kernel failed"
exit 1
fi
let index+=1
echo "y" | $SUDO mkfs.ext4 $DEV_NAME$index &> /dev/null
if [ $? -ne 0 ]; then
echo "mkfs fs folder failed"
exit 1
fi
$SUDO mount $DEV_NAME$index $UCAS_INPUT_FS_PATH
if [ $? -ne 0 ]; then
echo "mount fs failed"
exit 1
fi
let index+=1
echo "y" | $SUDO mkfs.vfat -F 16 $DEV_NAME$index &> /dev/null
if [ $? -ne 0 ]; then
echo "mkfs.vfat failed2"
exit 1
fi
$SUDO mount $DEV_NAME$index $UCAS_INPUT_BOOTFS1_PATH
if [ $? -ne 0 ]; then
echo "mount bootfs1 failed"
exit 1
fi
echo "copy fs kernel to disk....................."
$SUDO cp -rf $UCAS_OUTPUT_KERNEL_PATH/* $UCAS_INPUT_KERNEL_PATH
if [ $? -ne 0 ]; then
echo "cp kernel failed"
exit 1
fi
$SUDO tar -xvf $UCAS_OUTPUT_FS_PATH/* -C $UCAS_INPUT_FS_PATH &> /dev/null
if [ $? -ne 0 ]; then
echo "tar tmp failed"
exit 1
fi
$SUDO cp -rf $UCAS_OUTPUT_BOOTFS_PATH/* $UCAS_INPUT_BOOTFS_PATH
if [ $? -ne 0 ]; then
echo "mount bootfs failed"
exit 1
fi
$SUDO cp -rf $UCAS_OUTPUT_BOOTFS1_PATH/* $UCAS_INPUT_BOOTFS1_PATH
if [ $? -ne 0 ]; then
echo "mount bootfs1 failed"
exit 1
fi
let index=2
KERNELUUID=$( $SUDO blkid $DEV_NAME$index | sed "s/\" TYPE=.*$//g" | sed "s/^.*UUID=\"//g" )
let index=3
ROOTFSUUID=$( $SUDO blkid $DEV_NAME$index | sed "s/^.*PARTUUID=\"//g" | sed "s/\".*$//g" )
$SUDO sed -i "s/ucas-kernel-part/$KERNELUUID/g" $UCAS_INPUT_BOOTFS1_PATH$UCAS_GRUB
$SUDO sed -i "s/ucas-rootfs-part/$ROOTFSUUID/g" $UCAS_INPUT_BOOTFS1_PATH$UCAS_GRUB
sync
echo "[**--------------- finish mkimage ---------------**]"
linux shell编写镜像制作工具
最新推荐文章于 2023-11-10 09:52:11 发布