用于旋转MAC的RHEL / CENTOS6接口命名和IP分配

背景:

我正在创build一个RHEL6操作系统磁盘镜像,这个镜像可能会通过相同的硬件传递给许多不同的计算机(序列号除外,如MAC)。 图像是预configuration的,在系统设置完成后被复制。 (所以没有firstboot等)一旦图像被放置在一个硬盘上,硬盘可能放在多个不同的电脑。

我希望创build的所有networking接口都被命名为eth0而不pipeMAC。 我已经删除/修改了persistent-net udev规则,以确保可用的单个networking接口名为eth0。 (随着udev规则的持久性networkingeth *将继续计数,因为驱动器之间通过计算机之间。)因此,这是行之有效的。

问题陈述:

我也希望所有这些计算机使用静态IP地址。 即使没有连接到计算机的有效networking,我也需要分配IP地址。 我已经修改了ifcfg-eth0来设置IP地址,但这是MAC依赖的,所以当我将磁盘移动到另一台计算机时,它不起作用。 (据我所知,NetworkManager也是MAC相关的。)

如果ifcfg-eth0文件没有HWADDR行,那么它在计算机之间移动时工作正常。 我在我的udev规则的末尾添加了一个RUN命令来运行一个脚本,它将从ifcfg-eth0中删除HWADDR行,但这不起作用,因为我很确定文件系统在udev期间是只读的,所以它实际上不能修改ifcfg-eth0。

我希望计算机上的单个networking接口在启动时使用预先指定的IP地址,而不pipe当前的MAC是什么。 我认为我真的很接近,但我似乎无法拿出最后的位来迫使它将IP地址分配给任何可用的接口。

编辑:

的ifcfg-eth0的:

DEVICE=eth0 IPADDR=10.10.10.10 BROADCAST=10.10.10.255 ONBOOT=yes NAME=eth0 BOOTPROTO=none NETMASK=255.255.255.0 TYPE=Ethernet HWADDR=##:##:##:##:##:## IPV6INIT=no USERCTL=no NM_CONTROLLED=no 

如果HWADDR行在时间匹配在计算机的MAC是好的。 但是,如果HWADDR行不匹配内核抱怨在启动时说:

 Bringing up interface eth0: Device eth0 has different MAC address than expected, ignoring. [FAILED] 

如果HWADDR行在启动时不存在,它可以正常工作,但是它会在某一时刻自动填充该行,所以下一次在它周围移动驱动器将不起作用。 我想在使用sed时,在udev启动时删除HWADDR行,但由于只读文件系统,我不认为这实际上是一个好主意(或将工作)。

在文件上设置不可变位,以便不能修改(不删除位):

chattr + i / etc / sysconfig / network-scripts / ifcfg-eth0