在PVE上创建Gentoo模板

Gentoo官方在最近推出了官方的qcow2镜像,同时还有cloud init的支持,这篇文章就记录一下如何在Proxmox VE上面进行使用。

Cloud init是负责虚拟机早期的初始化。当虚拟机第一次启动的时候内部的cloud init软件会应用给定的一些配置,比如说主机名、IP、DNS、安装哪些包等等。

Proxmox 模板与 Cloud-Init 结合使用,可以快速部署新的虚拟机。模板可用于快速创建新虚拟机,而 Cloud-Init 负责初始化新虚拟机,使你只需设置主机名和初始用户账户。这样,每次创建新虚拟机时,就不再需要从头安装操作系统。

这个地方有多个版本:

../../../images/gentoo_qcow2_cloud_init.png

这里选择的是带有cloud init支持的版本。

下载:

wget -c https://distfiles.gentoo.org/releases/amd64/autobuilds/20250223T170333Z/di-amd64-cloudinit-20250223T170333Z.qcow2

首先创建一个叫gentoo-cloudinit的虚拟机,虚拟机类型为q35:

qm create 114514 --name gentoo-cloudinit --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci --machine q35

导入qcow2镜像以及调整对应的磁盘大小:

这里的ceph-pve是我的存储卷,你可以根据你的实际情况去调整

qm set 114514 --scsi0 ceph-pve:0,discard=on,ssd=1,format=qcow2,import-from=/root/di-amd64-cloudinit-20250223T170333Z.qcow2
qm disk resize 114514 scsi0 20G

设置启动顺序:

qm set 114514 --boot order=scsi0

配置cpu和内存:

qm set 114514 --cpu host --cores 2 --memory 2048

配置uefi:

qm set 114514 --bios ovmf --efidisk0 ceph-pve:1,format=qcow2,efitype=4m

配置cloud init:

qm set 114514 --ide2 ceph-pve:cloudinit
qm set 114514 --agent enabled=1

这里可以根据实际情况去进行配置,一般来说是用户名、dns、ssh key、获取ip的方式:

../../../images/gentoo_cloudinit_settings.png

为了方便我这里将其转换成了模板:

qm template 114514

这里只讲一下如何在UI上用这个模板,实际生产环境的话尽量避免这种用法。

这里选择克隆:

../../../images/clone_gentoo_vm.png

这里需要注意一下克隆的方式是选择full clone不是link clone,填写好虚拟机名称之后即可克隆:

../../images/clone_gentoo_settings.png

克隆完成之后打开虚拟机即可享用新鲜的gentoo了:

../../images/gentoo_bootup.png

我这里没有直接用cloud init设置固定ip,查了一下arp表拿到了当前虚拟机的ip。实际你可以通过cloud init设置固定ip,这样更方便管理一些。

通过ssh进行连接:

../../images/ssh_gentoo_vm.png

在有了gentoo cloud init镜像之后在生产环境中使用gentoo的阻力其实小了很多。

可以通过packer去定期构建虚拟机的镜像。

同时还可以设置内网的构建机器,emerge支持设置代理离线构建也不是什么问题,发布binpkg这样每个节点无需消耗大量的时间和资源在更新上。

Gentoo的灵活性很高能够根据不同的硬件进行优化,可以打portage的快照按照快照去做binpkg进行增量更新。在大规模节点的情况下只需要维护好一份portage的配置即可维护成本也是很低的。

在我看来Gentoo在实际生产环境的应用还是很有搞头的,就看未来有没有更多的公司愿意吃这个螃蟹并且回馈上游了。