万物皆可EVE-NG!一招解决Ubuntu镜像MAC冲突

千淘万漉虽辛苦,吹尽狂沙始到金。

在上次实验中(丢包之谜:为什么你的ESI实验总是不通?EVE-NG虚拟化环境避坑指南),我们虽然通过手工修改MAC地址的方式,临时规避了Ubuntu系统镜像MAC地址相同的问题。但说实话,这就像给破船贴创可贴——能挡一时,挡不了一世。

但咱们得打破砂锅问到底——问题根源在哪?

经过一番抽丝剥茧,终于找到了罪魁祸首:在Ubuntu使用Netplan配置IP地址时,默认使用networkd作为渲染器,对于Bond或Bridge这种虚拟接口,systemd-networkd会根据系统的Machine-ID经过哈希运算生成一个私有MAC地址。也就是说,如果Machine-ID相同,经过哈希运算生成的MAC地址基本上也会相同。有时候,即使我们在配置文件中显式指定了MAC地址,也会被自动生成的MAC地址覆盖,不要怀疑,我已经替大家踩过这个坑了。

知道了问题原因,那解决方案就简单了,在打包镜像前,彻底清理Machine-ID,让系统下次启动时重新随机生成即可。

当然,实际配置时会遇到的问题不止这一个,接下来我们就一点点展开,一步步的从零开始制作一个Ubuntu系统镜像。

首先,配置流程整体上跟我们之前制作EVE-NG镜像的步骤大差不差(没想到啊,竟然万物皆可EVE-NG!),本次制作的镜像主要侧重轻量化和网络问题优化。

老办法,我们先通过VirtualBox创建一台虚拟机(如何在VirtualBox上装一台CentOS虚拟机),因为我已经做好了Ubuntu 24.04的镜像,本次就用Ubuntu 22.04进行演示。

创建虚拟硬盘的两个注意事项:一是虚拟硬盘文件类型选择【QCOW(QEMU写入时复制)】,二是存储方式选择【动态分配】。

虚拟机创建完成之后,开机进入系统安装流程。

在选择安装类型时,如果想追求极致的存储占用,建议选择最小化安装【Ubuntu Server(minimized)】,相比标准安装能节省大约一半的存储空间。

然后就是分区,将所有磁盘空间全部划分给/路径。

剩下的,正常配置即可,等到系统安装完成(Ubuntu 22.04 LTS服务器版本安装演示)。

哎哟喂,翻车了!这22.04装完怎么比24.04还胖?人家24.04才3950 MB,这货直接超标21 %!不过咱先别慌,好戏还在后头,看看最后压缩完能瘦身多少。

进入系统,先配置好root账户和SSH服务器(Ubuntu开启SSH远程登录)。这个时候我们会发现,很多基础命令都是没有的,需要先安装一下。

apt update
apt install -y nano iputils-ping iproute2 net-tools traceroute

此外,在KVM环境下,Ubuntu系统默认开启了预测式网络命名。因为EVE-NG中的网口通常挂在虚拟PCI总线的特定插槽上,所以第一个网口通常被命名为ens3,我们可以通过修改GRUB引导参数,禁用这种命名机制,让它从eth0开始排列。

同时,为了让新的Ubuntu系统能够支持telnet连接终端,我们启用ttyS0,让系统在启动时将输出同时发送到VGA和串口。

nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT=”net.ifnames=0 biosdevname=0 console=tty0 console=ttyS0,115200n8″
GRUB_TERMINAL=”console serial”
GRUB_SERIAL_COMMAND=”serial –speed=115200 –unit=0 –word=8 –parity=no –stop=1″

修改之后,更新引导配置,并开启串口登录守护进程。

update-grub
systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service

接下来,我们解决MAC地址冲突问题,重置Machine-ID和DUID。这样,镜像克隆到EVE-NG后,每个节点在启动时都会重新随机生成一个唯一的ID。

truncate -s 0 /etc/machine-id
rm /var/lib/dbus/machine-id
ln -s /etc/machine-id /var/lib/dbus/machine-id

如果担心软件源有冲突,可以捎带清理一下安装包缓存。

apt autoremove –purge -y
apt clean
rm -rf /var/lib/apt/lists/*

接下来,我们执行qcow2磁盘压缩的核心步骤:全盘置零。这一步会把磁盘没用的地方全填成0,方便压缩算法认得出来。

dd if=/dev/zero of=/zero bs=1M || true
sync
rm /zero

这次操作,我们已经敲了几十次命令,如果不想后面每台虚拟机都看到这些命令,可以清空历史记录。

history -c && history -w

接下来,我们直接将虚拟机关机就行了。

那现在的磁盘文件有多大呢?4783 MB,相比刚安装完系统时也只增加了4 MB。

接下来,我们将这个qcow磁盘文件上传到EVE-NG后台,用qemu-img命令的-c参数(Compress/压缩)压缩磁盘到最小(qemu-img命令手册)。

qemu-img convert -c -O qcow2 ub2204.qcow virtioa.qcow2

最终大小还能接受,相比Ubuntu 24.04的1333MB,又小了18 %,真魔幻啊。

最后,我们创建两台Linux虚拟机验证一下。

两台虚拟机使用相同的配置,看看MAC地址是否一样。

可以看到,第一台主机bond0接口的MAC地址为da:0a:90:25:19:39。

没有问题,第二台主机bond0接口的MAC地址为32:cc:3a:ed:d7:ac,完全不一样,问题完美解决。

本次定制的镜像我已经打包好了,在公众号【金失三石】后台回复【ub22eve】即可自取。

声明:来自铁军哥,仅代表创作者观点。链接:https://eyangzhen.com/6840.html

铁军哥的头像铁军哥

相关推荐

添加微信
添加微信
Ai学习群
返回顶部