A few days ago I installed Oracle Linux in an Oracle VirtualBox VM. Once it was installed I found that eth0 interface wasn't starting upon boot.
That was unusual. I am myself a Linux enthusiast, and I regularly download and install lots of distributions, and, by and large, network works in them out of the box.
Today I finally got around to troubleshooting this problem. It took me a couple of hours digging through the scripts, setting trace points, and reading logs; and here's what I found.
For the reference, this was my configuration:
- Oracle VM VirtualBox 4.1.22 r80657
- Host: Windows 7 64-bit
- Linux: Oracle Linux Server release 6.3
- Kernel 2.6.39-200.24.1.el6uek.x86_64 on x86_64
As I said, upon boot eth0 was down. If I tried to bring it up with
ifconfig eth0 up it came up in IPV6 mode only, no IPV4:
Hm, weird. What was even more weird was that if I brought it up with
ifup eth0 instead of
ifconfig eth0 up, IPV4 network started succesfully:
Obviously, these 2 were are different. The reason
ifup worked was because it called
dhclient to obtain an IP address from a DHCP server
ifconfig didn’t make that call. And because the network interface did not have an IP address, it stayed down.
So, what is the difference between
ifup is actually a script located in
During the system boot the network subsystem is brought up via startup
/etc/rc2.d/S10network. That script goes through all the network interfaces it can find and
brings them up during the boot. What’s interesting, I found that it uses a set of configuration files
/etc/sysconfig/network-scripts/ifcfg-*<interface_name></interface_name>* to determine if a particular interface needs to be brought up during the boot time. There is one config file for each interface. I’m not sure
when they are created, maybe at install time.
In my case I found that one of the parameters in
ifcfg-eth0 file was
Turned out the network startup script uses that parameter to determine if the particular interface should be brought up at the boot time.
So, I changed it to
ONBOOT=yes and everything worked.
Now when the system starts, eth0 is up and running.
So, the mystery is finally solved. There is "Connect automatically" checkbox on the installer's network configuration screen (item 10 here). If this checkbox is unchecked, network interfaces do not come up at system start-up.
Many thanks to the Oracle Linix team for helping me in this investigation.