I just worked out that Ubuntu won’t set the hostname according to what is returned from dhcp. This makes sense in some ways, but I was deploying a VM template and I wanted the hostname set by dhcp.
I am not using network-manager in the following examples. And honestly network-manager only makes life easier on a laptop, or desktop when operating wirelessly.
Make sure your network interface is set to dhcp, as network-manager is installed by default the relevant line may be commented out (also if your not using it, purge network-manager from your system). The relevant entries from my /etc/network/interfaces:
# The primary network interface
iface eth0 inet dhcp
Add an script in /etc/dhcp3/dhclient-exit-hooks.d. It should check if GDM is running, as after it has started up you should not change the hostname. My script read as follows:
# If you want to enable this script, change SETHOSTNAME to "yes" SETHOSTNAME="yes" if [ "$SETHOSTNAME" = "yes" ]; then if test -r /var/run/gdm.pid && ps -ef | grep $(cat /var/run/gdm.pid) | g rep -q /usr/sbin/gdm ; then echo "$(date): GDM running, not changing host name" else hostname $new_host_name; fi fi
That should be it. Though you may need to remove some incorrect entries from /etc/hosts, and remove /etc/hostname if the file contents are wrong.