Resolve Hostname to FQHN

Latest response

In /etc/host the fully qualified name is there and but in /etc/sysconfig/network the short name is there instead of the fully qualified domain name. How would I get hostname -f to get it to display FQHN?


Hello Edward,

In my /etc/hosts is the localhost present only. My /etc/sysconfig/network is empty. On my RHEL 7 the hostname (test1) ist stored in /etc/hostname and the domain is configured in /etc/sysconfig/network-scripts/ifcfg-ens192 like: DOMAIN=""

With this configuration "hostname -f" displays the fqdn

Kind regards, Joerg

The hostname entries in /etc/hosts are for local name resolution and system read hostname from here when /etc/nsswitch.conf is set to read from here. Also, when there is no dns involved the name set in /etc/sysconfig/network doesn't have any significance.

hostname man page says this...

The function gethostname(2) is used to  get  the  hostname.   When  the
       hostname  -a,  -d,  -f or -i is called will gethostbyname(3) be called.
       The difference in gethostname(2) and gethostbyname(3) is that  gethost-
       byname(3)  is  network  aware,  so  it  consults /etc/nsswitch.conf and
       /etc/host.conf to decide whether to read  information  in  /etc/syscon-
       fig/network or /etc/hosts

Hello, there is also the Configure Host Names chapter in the Red Hat Enterprise Linux 7 Networking Guide.

For testing purpose, I changed the hostname entry (rhel 6 vm) in /etc/sysconfig/network with static IP configuration set, and there is no DNS involved and 'NetworkManager' turned off . I had put both fqdn and alias entries in /etc/hosts file and my /etc/nsswitch.conf file is set as :

<br />[root@server222 ~]# cat /etc/hosts   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 server1 server2

[root@server222 ~]# grep -i host /etc/nsswitch.conf 
#hosts:     db files nisplus nis dns
hosts:      files dns

[root@server222 ~]# cat /etc/sysconfig/network

[root@server222 ~]# sysctl -a|grep hostname
kernel.hostname = server222

[root@server222 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 

Strangely, hostname got changed to "server222" which says that it has red it from /etc/sysconfig/network file and when I run "hostname -f" it failed even after I changed hostname entry and restarted network service :

[root@server222 ~]# grep -i hostname /etc/sysconfig/network

[root@server222 ~]# hostname -f -v
Resolving `server222' ...
hostname: Host name lookup failure

So, this confirms that the function gethostname() is actually reading from kernel.hostname entry, hence, I changed kernel entry after which (hostname -f)it worked successful:

[root@server222 ~]# sysctl -n kernel.hostname

[root@server222 ~]# sysctl -w kernel.hostname=server1
kernel.hostname = server1

[root@server222 ~]# sysctl -n kernel.hostname

[root@server222 ~]# hostname -f -v
Resolving `server1' ...
Result: h_name=`'
Result: h_aliases=`server1'
Result: h_addr_list=`'

The hostname entry in /etc/sysconfig/network should be the FQDN as per this Red Hat KB :

What all options are available in /etc/sysconfig/network file in Red Hat Enterprise Linux 6?

There is another KB which is marked as "unverified": Hostname is incorrect with hostname and hostname -f which has to be corrected by Red Hat, otherwise, remove this mis-leading KB.

Hello, I will get those KBase solutions reviewed. The Red Hat Enterprise Linux 6 Deployment Guide had this section added recently Setting the Host Name.