#!/usr/bin/env bash
#
# pve8-on-bookworm.sh
# 说明：把一台最小化的 Debian 12 服务器转换为 Proxmox VE 8.0
# 参照官方手册：https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_12_Bookworm
# OWS 2025‑06‑18
set -euo pipefail

##------------------------------ 前置检查 ----------------------------------##
if [[ $EUID -ne 0 ]]; then
  echo "ERROR: 请以 root 身份执行此脚本." >&2
  exit 1
fi

if ! grep -qi "debian.*bookworm" /etc/os-release; then
  echo "ERROR: 此脚本仅适用于 Debian 12 (Bookworm)." >&2
  exit 2
fi

echo "==> 正在将当前系统升级到最新状态……"
apt-get update
apt-get -y full-upgrade


##--------------------------- 添加 PVE 仓库 ---------------------------------##
echo "==> 导入 Proxmox VE GPG 密钥"
install -o root -g root -m 0755 -d /usr/share/keyrings
curl -fsSL https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg \
  | gpg --dearmor -o /usr/share/keyrings/proxmox-archive-keyring.gpg

echo "==> 写入 pve-no-subscription 仓库文件"
cat <<EOF >/etc/apt/sources.list.d/pve-install-repo.list
deb [arch=amd64 signed-by=/usr/share/keyrings/proxmox-archive-keyring.gpg] \
http://download.proxmox.com/debian/pve bookworm pve-no-subscription
EOF
## 如需企业订阅版，将 pve-no-subscription 替换为 pve-enterprise

##--------------------------- 安装 PVE 内核 ---------------------------------##
echo "==> 更新 APT 缓存并安装 PVE 内核"
apt-get update
apt-get -y install proxmox-default-kernel

echo "==> 重启到 PVE 内核前，继续安装核心组件"
##--------------------------- 安装 PVE 组件 ---------------------------------##
DEBIAN_FRONTEND=noninteractive \
apt-get -y install proxmox-ve postfix open-iscsi chrony

##--------------------------- 清理 Debian 内核 ------------------------------##
echo "==> 删除 Debian 默认内核（避免升级冲突）"
apt-get -y remove linux-image-amd64 'linux-image-6.1*' || true
update-grub

##--------------------------- 可选：移除 os-prober --------------------------##
if dpkg -l | grep -q '^ii\s\+os-prober'; then
  echo "==> 移除 os-prober（PVE 官方建议）"
  apt-get -y remove os-prober
fi

##--------------------------- 设置 /etc/hosts 主机解析 --------------------------##
echo "==> 设置 /etc/hosts 使主机名解析为默认 IPv4 地址"

# 获取默认 IPv4（通过默认网关获取绑定接口的地址）
DEFAULT_IF=$(ip route | awk '/default/ {print $5; exit}')
DEFAULT_IP=$(ip -4 -o addr show dev "$DEFAULT_IF" | awk '{print $4}' | cut -d/ -f1 | head -n1)

if [[ -n "$DEFAULT_IP" ]]; then
  HOSTNAME=$(hostname)
  echo "    默认接口: $DEFAULT_IF"
  echo "    默认 IPv4: $DEFAULT_IP"
  echo "    主机名: $HOSTNAME"

  # 删除 /etc/hosts 中现有的主机名解析（防止重复）
  sed -i "/\s$HOSTNAME\s*$/d" /etc/hosts

  # 添加新的主机解析行
  echo "$DEFAULT_IP $HOSTNAME" >>/etc/hosts
  echo "    已将 $HOSTNAME 解析到 $DEFAULT_IP"
else
  echo "WARNING: 无法自动获取默认 IPv4 地址，跳过 /etc/hosts 设置"
fi


##--------------------------- 完成 ------------------------------------------##
echo -e "\n=============================================================="
echo "🎉  PVE 8.0 已安装完成！"
echo "请手动检查网络配置（网桥 vmbr0 等），然后执行 reboot。"
echo "安装成功后，通过 https://<你的服务器 IP>:8006 使用 root@pam 登录。"
echo "=============================================================="
