[ Proxmox 折腾手记 ] PVE制作虚拟机模板

1.配置Debian系统
在上一篇文章《 [ Proxmox 折腾手记 ] PVE创建模板虚拟机 》中,我们已经创建好了用于制作虚拟机模板的 Debian 虚拟机。
并调整了模板虚拟机的硬件参数、配置参数,但还需对 Debian 系统进行调整。
此时可以将 Debian 虚拟机开机,并使用 Cloud-Init
中设置的账号密码进行登录。
1.1.启用SSH密码登录
因为 Debian 的云镜像默认使用秘钥登录,因此切换到左侧菜单的 控制台
进行操作:

在 Debian 虚拟机的命令行界面,使用 nano
编辑器编辑 sshd
服务的配置文件,执行以下命令:
在编辑器对话框中输入以下内容,注意命令中间的空格:
nano
编辑器常用操作如下:
在编辑文件时,可以用键盘
方向键
移动光标位置在保存文件时,按下键盘
ctrl 和 x
组合键,再按下键盘y
键,即可保存
然后,重启 SSH 服务:
就可以像往常一样,通过 SSH 工具远程访问 Debian 虚拟机了。
1.2.配置系统软件源
使用 SSH 工具登录 Debian 虚拟机,常用 SSH 工具可以看之前文章中的 SSH 工具推荐 。
首先需要对 Debian 系统的软件源进行修改,这里使用 USTC 镜像站作为演示。
以后当系统版本发生变化时,请参考使用 snullp 大叔开发的 配置生成器 。
逐条执行以下命令:
在 nano
编辑器对话框中输入以下内容(注释了 deb-src
以便加快软件源同步速度),并保存:
更新软件源的同步内容,并更新系统,逐条执行以下命令:
接下来安装系统必要软件,Adguard Home 将采用 snap
形式安装,逐条执行以下命令:
Adguard Home 安装完成后,先停止其服务:
1.3.配置网卡IPv4
使用 Cloud-Init
并给虚拟机分配了静态 IPv4 地址后,虚拟机的网卡还会从路由器的 DHCP 再获取一个 IPv4 地址。
这个功能在给虚拟机添加网卡设备时很有用,但本 Debian 虚拟机模板的使用场景只需要一个静态 IPv4 地址,因此需要禁用网卡自动获取 IPv4 地址的功能。
执行以下命令对网卡的配置文件进行修改:
在 nano
编辑器对话框中,将 source-directory /run/network/interfaces.d
这行内容 “注释” 掉,参考如下内容:
将配置保存后,可以将模板虚拟机重启。
在系统重启完成后,执行以下命令检查系统的 IPv4 地址状态:
如果系统网卡有且仅有一个 IPv4 地址,且该 IPv4 地址与 Cloud-Init
中设置的 IPv4 地址相同,则表示系统网卡已正确设置。
1.4.配置网卡IPv6
使用 Cloud-Init
并给虚拟机分配了静态 IPv6 地址后,该地址为私有 ULA 地址,此时虚拟机的网卡不会以 SLAAC
的方式配置 IPv6 地址。
如果上级路由器没有设置 NAT66
,且将公网 GUA 地址的 Prefix
通告到内网时,虚拟机将无法自动生成 GUA 地址,从而导致无法访问 IPv6 网络。
因此引入 dhcpcd
工具,在正确配置虚拟机 IPv6 地址的同时,保持与 Cloud-Init
网卡配置的兼容性。
执行以下命令对网卡的配置文件进行修改:
在编辑器对话框中输入以下内容,注意命令中间的空格:
保存该配置文件后,重启系统或者执行以下命令重启 dhcpcd
服务:
1.5.调整系统内核参数
由于该 Debian 虚拟机模板将用于克隆内网 DNS 服务器,因此需要调整一部分系统内核参数来简单优化性能。
执行以下命令对 sysctl
的配置文件进行修改:
在配置文件末尾输入以下内容,注意命令中间的空格:
保存该配置文件后,重启系统或者执行以下命令让配置生效:
1.6.调整系统时间
默认情况下的 Debian 云镜像的系统时间可能不正确,执行以下命令将系统时区设置为中国时区:
设置完成后,执行以下命令检查系统时间:
Debian 普通镜像常用 systemd-timesyncd.service
来同步时间,而 Debian 云镜像使用 chrony.service
来同步时间。
为了使用国内的 NTP 服务器,需要对 chrony.service
进行配置。
执行以下命令对 chrony
的配置文件进行修改:
在编辑器对话框中,将 pool 2.debian.pool.ntp.org iburst
这行内容 “注释” 掉,并添加国内的 NTP 服务器,参考如下内容:
保存该配置文件后,重启 chrony
服务:
再检查系统 NTP 服务器是否被正确修改:
如果输出以下类似内容,则表示系统 NTP 服务设置正确:
1.7.配置系统自动更新
配置 Debian 模板虚拟机的系统自动更新,与配置 PVE 系统自动更新方法基本一致,参阅 PVE系统自动更新 。
配置系统更新之前,先检查当前系统定时器状态:
配置系统自动更新策略,执行以下命令,使用键盘 左右方向键
进行选择,回车键
进行确认:
接下来调整 apt 的 20auto-upgrades
配置文件:
其中,用来控制系统更新周期的为 APT::Periodic::Unattended-Upgrade
这行内容,其中参数 "5"
表示更新周期为 5
天。
再调整 apt 的 50unattended-upgrades
配置文件,所有修改项目汇聚如下:
两个配置文件均修改完成后,需要重设系统自动更新触发器,执行以下命令:
重启触发器,并检查其状态,执行以下命令:
1.8.配置Snap自动更新
先查看 Snap 当前的更新策略,执行以下命令:
将 Snap 自动更新时间设置为每天 2:30-3:30
和 14:30-15:30
两个时间段:
1.9.配置系统定时任务
本步骤为可选操作,主要设置定时重启 Snap 服务以及操作系统。
1.10.配置ZSH
Zsh
是比 Bash
好用的 Shell
程序,使用 oh-my-zsh
进行配置:
1.11.清理系统
Debian 模板虚拟机已经配置完成,在将其转换为模板前需要对系统进行清理。
逐条执行以下命令,注意命令中的空格:
2.虚拟机转为模板
将 Debian 模板虚拟机关机,并进入 PVE 的 WEB 管理界面。
在虚拟机列表中,鼠标 右键单击 Debian 模板虚拟机,在弹出的菜单中选择 转换成模板
:

需要说明的是,虚拟机 转换成模板
的操作是不可逆的。
如果某些 Debian 系统的配置项有问题,只能在用该模板克隆出来的新虚拟机中进行修改,或者删除并重新制作模板。
3.额外说明
本文中 Debian 云镜像的系统配置方法大多也适用于 Debian 普通镜像。
但有关 IP 地址、DNS、系统时区等内容的配置方法在 Debian 普通镜像上有区别。
而且,如果使用 Debian 普通镜像制作虚拟机模板,建议不要使用 Cloud-Init
,以避免某些配置发生变化。
使用 Debian ISO 镜像安装完操作系统后,修改网卡 IP 地址配置,需要执行以下命令:
在网卡的配置文件中需要修改 address
、 dns-nameservers
等参数,完整配置文件参考如下:
检查系统的 hosts
,执行以下命令:
Debian 普通镜像需要手动修改系统 DNS 配置,执行以下命令:
在编辑器对话框中输入以下内容,注意命令中间的空格:
Debian 普通镜像使用 systemd-timesyncd.service
来同步系统时间,检查服务状态:
调整 NTP 服务,逐条执行以下命令:
在 nano 编辑器对话框中输入以下内容,并保存:
重启 NTP 服务: