In the few years I've been using Linux as my main system, specifically Fedora, I've always seen my hostname set to just "localhost", with the exception of when I connect to some networks and it becomes my IP. Today I experienced the following behavior which I'm having trouble understanding though.

I set up an Ubuntu installation on another partition of my laptop, setting a computer name / hostname during the Ubuntu install. When I rebooted back into Fedora though, Fedora had updated my hostname to the name I set in the Ubuntu install.

I always thought the hostname was configured and stored on the partition of the distro installation, and indeed the contents of /etc/hostname on Fedora still read "localhost.localdomain", but running the hostname command shows the new hostname. Both installs share an efi boot partition, but are otherwise discrete. I'm wondering from where and why the Fedora install is reading the new hostname?


The hostnameprogram performs a uname syscall, as can be seen from running:

strace hostname
uname({sysname="Linux", nodename="my.hostname.com", ...}) = 0

From the uname syscall man page, it says the syscall retrieves the following struct from the kernel:

  struct utsname {
               char sysname[];    /* Operating system name (e.g., "Linux") */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[];    /* Operating system release (e.g., "2.6.28") */
               char version[];    /* Operating system version */
               char machine[];    /* Hardware identifier */
           #ifdef _GNU_SOURCE
               char domainname[]; /* NIS or YP domain name */

So the domain name comes from the NIS / YP system, if we believe the comment. So more than likely, there may be a NIS / YP service on your network that is trotting back the name to you that is set by the ubuntu OS.

| improve this answer | |
  • 5
    This isn't true, see the hostname(1) man page which explains how the hostname is set and returned. Despite the similarity in name the NIS/YP domain name has nothing to do with the FQDN/DNS domain name which is returned by the resolver. If you haven't configured NIS/YP then the NIS/YP domain name will be unset. – bodgit May 18 '17 at 22:04
  • Is "nodename" the field you care about? Would be in line with unix nostalgy to still consider IP networks an optional and implementation defined thing :) – rackandboneman May 19 '17 at 8:07

There are two independent(!) concepts of a hostname on a linux system.

There is whatever the kernel considers the local host name (as handled by the gethostname/uname and sethostname system calls) independent of any network connectivity - these mechanics would still exist if you built a kernel with no capability for TCP/IP networking.

There is one or more host names that are actually connected to TCP/IP (or other network stack - not all networking in the world is IP!) addresses the host has, and these are handled in userspace by the resolver library functions (part of libc), which will determine such a name by interpreting sources (local /etc/hosts file, DNS, NIS....) according to the rules you give them in the appropriate configuration files (/etc/nsswitch.conf, /etc/host.conf etc...).

| improve this answer | |

Probably Ubuntu connected to the internet through your home router during the installation. For doing this, it reported its hostname to the router and obtained a temporary local IP.

When you now reboot into Fedora, it will connect to the same router to obtain its IP address, but the old lease created for Ubuntu is still valid. As it's the same machine with the same network card and the same hardware MAC address, it will reuse the same lease.

My guess is that the router sends the hostname on which the IP lease was registered along and Fedora picks that up.

Unfortunately I have no evidence or citation to support my answer, I can just speak with the personal experience of installing Ubuntu in dual-boot with Windows. Back then, Ubuntu refused to set the same hostname during the installation as the one I used in Windows, because it claimed that the name was alreday present in the network. Likely we have something similar happening here.

To verify if what I guess applies to your situation as well, try revoking your IP lease in your router's configuration interface and then reboot Fedora. If it no longer takes Ubuntu's hostname then, I should be right.

| improve this answer | |
  • It is indeed possible for a DHCP client to send a hostname to the server, or read a hostname from the server. Most everything does the first (though when the hostname is set to "localhost" it's unlikely to have much effect :). Reading a hostname from the DHCP server is possible with Linux DHCP clients, but my understanding was this support was not always enabled (e.g.). Interesting to hear that a more recent Fedora seems to do this. – sourcejedi May 19 '17 at 11:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.