I am creating an RHEL6 OS disk image that will potentially be passed around to many different computers with identical hardware (except for serial numbers such as MACs). The image is pre-configured and is copied after the system is setup. (So no firstboot etc.) Once the image is placed on a HDD that HDD may be place in multiple different computers.
I want all networking interfaces created to be named eth0 regardless of the MAC. I have removed/modified the persistent-net udev rules to ensure that the single network interface available is named eth0. (With the persistent-net udev rule the eth* would keep counting as the drive got passed between computers.) As such this is working.
I also want all these computers to use a static IP address. I need the IP address to be assigned even if there isn't a valid network connected to the computer. I have modified the ifcfg-eth0 to set the IP address but this is MAC dependent so it doesn't work when I move the disk to another computer. (The NetworkManager is also MAC dependent as far as I can tell.)
If the ifcfg-eth0 file doesn't have the HWADDR line then it works fine when moved between computers. I added a RUN command to the end of my udev rule to run a script which would remove the HWADDR line from ifcfg-eth0 but that doesn't work because I'm pretty sure the file system is mounted read-only during udev so it can't actually modify ifcfg-eth0.
I want the single network interface on the computer to come up at boot with an IP address that is pre-specified no matter what the current MAC is. I think I am really close but I just can't seem to come up with the final bits to force it to assign the IP address to whatever interface is available.
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
If the HWADDR line matches the MAC in the computer at the time it is fine. But if the HWADDR line does not match the kernel complains at boot-up saying:
Bringing up interface eth0: Device eth0 has different MAC address than expected, ignoring. [FAILED]
If the HWADDR line isn't present at boot it works fine but it populates that line automatically at some point so the next time you move the drive around it won't work. I thought of just using sed and removing the HWADDR line at boot up during udev but because of the read-only filesystem I don't think that is actually a good idea (or would work).