46

I have an Ubuntu 16.04 system with two interfaces - eth0 configured with DHCP and eth1 configured with static ip addresses.

The /etc/network/interfaces file has the following config

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

# The Secondary network interface
auto eth1
iface eth1 inet static
address 10.10.1.10
netmask 255.255.255.0
dns-nameservers 74.82.42.42 4.2.2.2

## Virtual Interfaces for virtual hosts
auto eth1:11
iface eth1:11 inet static
address 10.10.1.11
netmask 255.255.255.0

auto eth1:12
iface eth1:12 inet static
address 10.10.1.12
netmask 255.255.255.0

auto eth1:13
iface eth1:13 inet static
address 10.10.1.13
netmask 255.255.255.0

The issue is, when DHCP server is not available on eth0 link or if the eth0 link is down, the system hangs for 5 mins, significantly slowing down the boot process.

violet@ubuntu-xenial:~$ systemd-analyze blame
      5min 241ms networking.service
          1.529s nmbd.service
          1.524s winbind.service

I tried reducing the time in /etc/systemd/system/network-online.target.wants/networking.service file which makes the system boot faster without waiting for the network service, however, that fails to load the virtual interfaces on eth1.

Is there a cleaner way to let the system boot without full network configuration on eth0 interface and still load all the static network configuration on eth1?

j202
  • 561
  • 1
  • 4
  • 4

3 Answers3

57

It seems someone was paranoid about a client not getting it's DHCP in time.

Edit this file /etc/dhcp/dhclient.conf and set timeout to a reasonable value, like

timeout 15

The default value of 300 seconds is way too high. The suggested replacement value of 15 was tested and works fine.

delfiler
  • 237
boutch55555
  • 1,226
29

So in your /etc/network/interfaces, change this:

# The primary network interface
auto eth0
iface eth0 inet dhcp

to this:

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

This will start interface eth0 when the kernel detects a hotplug event from the interface (i.e. when you plug a cable in), instead of starting it at boot.

guntbert
  • 13,134
  • 1
    This approach works well on physical hardware but it fails in virtualized environments (tried vmware and virtualbox). It looks like the virtualized kernel does not generate proper events. – dtoubelis Apr 08 '17 at 14:55
  • This approach also fixed my issues after installing a new 10G network adapter in a box that previously only had built-in 1G. Ubuntu was able to see the card and load drivers, but the boot kept stalling waiting for Raise Network Interfaces. Adjusting the device name from eth0 accordingly fixed it. – Joseph Jaramillo Sep 08 '17 at 17:15
3

As referenced in you can change the timeout value for raising the network interface (if running systemd):

Open a terminal window, and enter the command:

sudo nano /etc/systemd/system/network-online.target.wants/networking.service

Then change the line TimeoutStartSec=5min to a value that you choose. Save the file by pressing Ctrl+o and then Ctrl+x.

Finally, restart the daemon:

sudo systemctl daemon-reload
Ken Sharp
  • 991
  • 8
  • 31
Mike
  • 31
  • 5
    It is generally a poor idea to start a GUI program using sudo... I have modified your answer to utilize tools which behave a bit better. – Charles Green Nov 29 '17 at 16:31
  • This is the correct answer for me. My computer is not always connected to network at boot-up. I don't want to wait 5 minutes for Ubuntu to figure that out. – Yitz Nov 25 '18 at 23:43
  • 4
    I'd love to know who the idiot is that thought a timeout of 5 minutes was a "good idea". – Clayton Dukes Dec 13 '18 at 03:56