#!/bin/bash
#
# setup_storage_and_iso.sh — 一键分区、格式化并挂载新磁盘 + 挂载系统 ISO 并配置本地 yum 源
#
# 用法:
#   sudo ./setup_storage_and_iso.sh [DEVICE] [MOUNT_POINT] [FS_TYPE] [ISO_DEVICE] [ISO_MNT]
#
# 参数示例:
#   DEVICE=/dev/vdb        # 待分区格式化的磁盘,默认 /dev/vdb
#   MOUNT_POINT=/data      # 磁盘挂载点,默认 /data
#   FS_TYPE=xfs            # 文件系统类型,支持 xfs|ext4,默认 xfs
#   ISO_DEVICE=/dev/sr0    # ISO 所在设备,默认 /dev/sr0
#   ISO_MNT=/mnt/iso       # ISO 挂载点,默认 /mnt/iso

set -euo pipefail

DEVICE=${1:-/dev/vdb}
MOUNT_POINT=${2:-/data}
FS_TYPE=${3:-xfs}
ISO_DEVICE=${4:-/dev/sr0}
ISO_MNT=${5:-/mnt/iso}

if [[ $EUID -ne 0 ]]; then
  echo "请使用 root 权限运行本脚本" >&2
  exit 1
fi

echo "=========================="
echo "1) 新磁盘分区/格式化/挂载"
echo "--------------------------"

echo ">>> 查看当前磁盘信息"
lsblk
fdisk -l "$DEVICE" || true

echo ">>> 对 $DEVICE 创建 GPT 分区"
parted "$DEVICE" --script \
  mklabel gpt \
  mkpart primary "$FS_TYPE" 0% 100%
PARTITION="${DEVICE}1"

echo ">>> 格式化 $PARTITION 为 $FS_TYPE"
case "$FS_TYPE" in
  xfs)
    mkfs.xfs -f "$PARTITION"
    ;;
  ext4)
    mkfs.ext4 -F "$PARTITION"
    ;;
  *)
    echo "不支持的文件系统类型:$FS_TYPE" >&2
    exit 1
    ;;
esac

echo ">>> 创建挂载点 $MOUNT_POINT"
mkdir -p "$MOUNT_POINT"

echo ">>> 临时挂载并验证"
mount "$PARTITION" "$MOUNT_POINT"
df -hT "$MOUNT_POINT"

echo ">>> 获取分区 UUID"
UUID=$(blkid -s UUID -o value "$PARTITION")
echo "    UUID=$UUID"

echo ">>> 写入 /etc/fstab(去重)"
FSTAB_LINE="UUID=$UUID    $MOUNT_POINT    $FS_TYPE    defaults    0 0"
grep -qF "$FSTAB_LINE" /etc/fstab || echo "$FSTAB_LINE" >> /etc/fstab

echo ">>> 测试 fstab 自动挂载"
umount "$MOUNT_POINT"
mount -a
df -hT "$MOUNT_POINT"

echo
echo "=========================="
echo "2) 系统 ISO 挂载 & 本地 yum 源"
echo "--------------------------"

echo ">>> 创建 ISO 挂载点 $ISO_MNT"
mkdir -p "$ISO_MNT"

echo ">>> 挂载 ISO 设备 $ISO_DEVICE 到 $ISO_MNT"
mount -t iso9660 "$ISO_DEVICE" "$ISO_MNT"

echo ">>> 查看挂载情况和内容"
df -hT "$ISO_MNT"
ls "$ISO_MNT"

echo ">>> 配置本地 yum 源文件 /etc/yum.repos.d/local.repo"
REPO_FILE=/etc/yum.repos.d/local.repo
if [[ ! -f "$REPO_FILE" ]]; then
  cat >"$REPO_FILE" <<EOF
[local-iso]
name=Local ISO Repository
baseurl=file://$ISO_MNT
enabled=1
gpgcheck=0
EOF
  echo "已创建 $REPO_FILE"
else
  echo "$REPO_FILE 已存在,请根据需要手动检查或编辑"
fi

echo ">>> 清理 yum 缓存并列出仓库"
yum clean all
yum repolist

echo
echo "✅ 全部步骤执行完毕!"