安装 PVE 驱动的个人虚拟化实验环境
✨ PVE 是一款个人虚拟化环境软件,可以在小型主机或老旧笔记本上安装,提供虚拟化环境来构建自己的 HomeLab。安装 PVE 的步骤包括准备引导工具、下载安装 PVE 镜像、配置软件源、创建模板等。通过 PVE,可以方便地管理和部署虚拟机,进行基础设施即代码的实践。
准备
引导工具
https://www.ventoy.net/en/doc_start.html使用 Ventoy 来将U盘制作为启动设备
2023-12
当前正式版 Ventoy 无法启动 PVE 8.1,需使用 CI 版本:https://github.com/ventoy/Ventoy/actions/runs/7088423200
PVE 镜像
当前最新版本 8.1https://pve.proxmox.com/wiki/Downloads
安装
可参考官方 wiki 说明:
https://pve.proxmox.com/wiki/Installation安装完成后,即可根据过程中配置的IP地址,在同一局域网其他机器浏览器访问 https://IP:8006
用户名 root ,密码为安装过程中所配置的,登录成功即可看到如下界面

配置
订阅弹窗去除
sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/orig_cmd\(\); void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy.service软件源
- 删除企业订阅源
rm /etc/apt/sources.list.d/pve-enterprise.list- Proxmox 软件源镜像
# 中科大源
echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
# 更新(可选)
apt update && apt dist-upgrade- Debian 系统源镜像
# 中科大源
sed -i 's|^deb http://ftp.debian.org|deb https://mirrors.ustc.edu.cn|g' /etc/apt/sources.list
sed -i 's|^deb http://security.debian.org|deb https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list
# 加入 non-free 仓库(可选)
sed -i 's|contrib$|contrib non-free|g' /etc/apt/sources.list
# 更新
apt update && apt-get install -y apt-transport-https ca-certificates --fix-missing- LXC 源镜像(CT Templates)
sed -i.bak "s#http://download.proxmox.com/images#https://mirrors.ustc.edu.cn/proxmox/images#g" /usr/share/perl5/PVE/APLInfo.pm
wget -O /var/lib/pve-manager/apl-info/mirrors.ustc.edu.cn https://mirrors.ustc.edu.cn/proxmox/images/aplinfo-pve-7.dat
systemctl restart pvedaemon- Ceph 源
echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription" > /etc/apt/sources.list.d/ceph.list
sed -i.bak "s#http://download.proxmox.com/debian#https://mirrors.ustc.edu.cn/proxmox/debian#g" /usr/share/perl5/PVE/CLI/pveceph.pm如果是使用的老旧的笔记本电脑安装,可考虑如下配置
# 3 分钟后关闭屏幕,下次重启前有效
setterm -blank 3
# 持久化设置,需修改配置文件
vi /etc/default/grub
# 修改内容如下
GRUB_CMDLINE_LINUX="consoleblank=120"
# 保存后应用配置
update-grub
# 合盖不休眠
sed -i 's/#HandleLidSwitch=suspend/HandleLidSwitch=ignore/g' /etc/systemd/logind.conf
systemctl restart systemd-logind.service创建模板
创建 Debian Cloud-Init Template
- 选择镜像
这里我们选用 genericcloud-amd64.qcow2
- 下载镜像
打开 PVE Shell
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2- 创建虚拟机
# 创建 id 为 100,名为 debian-12-cloudinit-template,2C/2G 的虚拟机,其网卡 net0 桥接到 vmbr0,且跟随宿主机重启
qm create 100 --name "debian-12-cloudinit-template" --onboot 1 --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0
# 将下载好的 debian 12 cloud init 镜像导入到上一步创建的虚拟机,存储在 local-lvm
qm importdisk 100 debian-12-genericcloud-amd64.qcow2 local-lvm
# 将导入的磁盘镜像以 scsi 驱动器的方式装载到虚拟机的 scsi 控制器
qm set 100 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-100-disk-0
# 将上面导入了 debian-12 镜像的磁盘设置为可启动并限制 BIOS 仅从该磁盘启动
qm set 100 --boot c --bootdisk scsi0
# 添加 cloud-init CD ROM 驱动器,用来提供 cloud-init 参数给虚拟机
qm set 100 --ide2 local-lvm:cloudinit
# 如果没有通过 xterm.js 访问虚拟机的需求,可不执行
qm set 100 --serial0 socket --vga serial0
# 启用 QEMU Guest Agent 功能
qm set 100 --agent enabled=1
# 核对确认虚拟机配置
qm config 100
此时如无特殊需要或问题,就可以把此虚拟机转换成模板了,执行命令: qm template 100 。但为了使用更顺手,我还希望对此虚拟机做一些配置后再转换为模板。
Cloud-Init 页面配置说明
用户
- 系统内第一个非 root 用户的名称,可自定义(建议配置)
若未配置
- 系统启动后不会新增用户,默认使用 root 用户
- 默认允许 root 用户通过 SSH 登录
密码
- 系统内第一个非 root 用户的密码,可自定义(建议配置)
- 若【用户】未配置,则此处的密码则为 root 密码
DNS 域 / DNS 服务器
- 留空则使用 DHCP,配置了则使用静态 DNS
SSH 公钥
- 若未配置,则 SSH 允许通过密码登录
- 若已配置,则 SSH 禁止通过密码登录,仅允许通过公钥对应的私钥登录
IP 配置
- 可分别配置对应网卡的 IPv4 和 IPv6 地址策略
- 支持静态 IP 或 DHCP
- 配置虚拟机
启动刚刚配置的虚拟机,进入 Shell
软件源修改,文件位于 /etc/apt/mirrors/ 下
echo "https://mirrors.ustc.edu.cn/debian" | sudo tee /etc/apt/mirrors/debian.list
echo "https://mirrors.ustc.edu.cn/debian-security" | sudo tee /etc/apt/mirrors/debian-security.list# sudo 免密码 (可选,cloud-init 似乎默认配置了)
sudo tee /etc/sudoers.d/hk <<< 'hk ALL=(ALL) NOPASSWD: ALL'
# 设置时区
sudo timedatectl set-timezone Asia/Shanghai
# 更新
sudo apt update
# 安装 qemu 代理
sudo apt install -y qemu-guest-agent
# 启动 qemu 代理
sudo systemctl enable --now qemu-guest-agent
# 安装软件包
sudo apt install -y htop git neofetch tree acpid
# 清理
sudo apt clean
sudo apt autoclean
sudo apt autoremove
# 清空 machine-id
sudo truncate -s 0 /etc/machine-id /var/lib/dbus/machine-id以上配置完成后,将虚拟机关机,执行命令 qm template 100 转换为模板。
在 Web 页面上可以查看该模板,后续即可在页面上基于此模板快速创建虚拟机了。当然也可以执行命令qm clone 100 101 --name vm101 --full 来进行该操作。

克隆配置说明
模式
两种模式的区别
链接克隆:类似快照,磁盘上仅存储「克隆后的副本相对于模板发生变化的部分」,克隆后的虚拟机无法使用迁移功能,但优势是占用的磁盘空间较小完整克隆:直接将模板对应的虚拟机磁盘文件全量复制一份,虚拟机中的任何改动,只会存储在自己的虚拟磁盘文件中,可以在 PVE 集群中自由地迁移- 如果 PVE 宿主机只有一台,即 PVE 是单节点模式部署的,那么此处可以随意选择
- 如果 PVE 宿主机不止一台,且组成了集群,有节点迁移和高可用的需求,那么此处最好选择
完整克隆VM ID
- 可以自定义,也可以使用 PVE 默认的自增 ID
名称
- 需要自己定义一个,开机后,cloud-init 会使用虚拟机名称作为虚拟机的 hostname
克隆完成后进入虚拟机的「硬件」页面,按实际需要调整虚拟机的硬件配置:硬盘、内存
处理器、网络等。
下一步准备使用 Terraform 来管理部署 PVE 中的虚拟机,体验一下基础设施即代码 (IaaS)。