home  bbs  files  messages ]

      ZZLI4422             linux.debian.devel             1179 messages      

[ previous | next | reply ]

[ list messages | list forums ]

  Msg # 942 of 1179 on ZZLI4422, Saturday 10-24-25, 5:00  
  From: MARC HABER  
  To: SIMON MCVITTIE  
  Subj: Re: Revisiting the hostname/FQDN issue,   
 From: mh+debian-devel@zugschlus.de 
  
 Hi Simon, 
  
 On Mon, Oct 13, 2025 at 11:51:58PM +0100, Simon McVittie wrote: 
 >On Mon, 13 Oct 2025 at 22:22:45 +0200, Marc Haber wrote: 
 >>The biggest question that I still have is why we are writing an 
 >>/etc/hosts with "127.0.1.1 apollo.example.com apollo". Without that, 
 >>the FQDN of the system is incorrect. 
 > 
 >For some value of "incorrect", 
  
 The value is that hostname --fqdn returns "hostname: Name or€€€€€ 
 service not known" after waiting for a timeout. ltrace reveals that 
 getaddrinfo("toe-sid-buildd-amd64-a1gg", nil, 0x7ffef1933eb0, 
 0x7ffef1933ea8) 
 = 0 
 times out when the 127.0.1.1 entry is not there. 
  
 > anyway: a large part of the problem 
 >here is that there's no formal specification I'm aware of for what is 
 >considered "correct" or "incorrect", only Unix folklore and some 
 >strong opinions (some of which might be contradictory). Some software, 
 >especially if it has decades of history, assumes that the hostname (as 
 >in gethostname(2)) is resolvable in DNS, but that isn't something that 
 >can generally be guaranteed, especially for a portable machine on a 
 >network not under your control. Typically[citation needed] laptop 
 >owners expect the laptop "apollo" to remain named "apollo" when they 
 >connect it to someone else's LAN, even if the network owner has 
 >decided that the IP address allocated to "apollo" by their DHCP will 
 >be associated with something like "guest01.internal" in their local 
 >DNS. 
  
 I would expect that for a stationary machine with a static IP both 
 hostname and hostname --fqdn return the correct values. 
  
 >The hostname(1) man page defines the FQDN as the name that the 
 >resolver returns when asked for information about the hostname (as in 
 >gethostname(2)), and notes that by this definition there might be 
 >zero, one or many FQDNs. If the FQDN isn't forced via /etc/hosts, then 
 >it might also vary according to the LAN(s) that the machine happens to 
 >be connected to right this moment (especially for mobile computers). 
  
 So it is a good idea to have the 127.0.1.1 entry (or one using the 
 static IP address) in place if you want ONE FQDN returned. 
  
 >One way to describe the purpose of libnss-myhostname is: we know that 
 >some software assumes that the result of gethostname(2) is resolvable; 
 >and we know that this can't be guaranteed to be true in the global DNS 
 >system because mobile computers are a thing that exists; so let's 
 >force that assumption to be true at least locally, by having a 
 >last-resort mechanism to ensure that the local hostname always 
 >resolves to a locally-available IP address at any given time, to try 
 >to maximize the amount of software that has its assumptions met and 
 >continues to work as designed. 
  
 With libnss-myhostname installed, getent hosts hostname returns the 
 short host name while without libnss-myhostname it returns the 127.0.1.1 
 entry that contains an FQDN. 
  
 I find the variant that libnss-myhostname returns significantly less 
 informative. The short host name is also available in the kernel. 
  
 >>But why 127.0.1.1? Arch Linux does it the same way, but they don't 
 >>explain why, either. 
 > 
 >127.0.1.1 is one of the 256**3 loopback addresses (the whole 127.x 
 >block). I believe the reasoning for using that, and not 127.0.0.1, is 
 >that it means a reverse-DNS lookup for 127.0.0.1 (for example in the 
 >output of netstat, to label a service listening on only the loopback 
 >interface) will yield the expected "localhost", and not 
 >"apollo.example.com" which would be surprising. 
 > 
 >libnss-myhostname does this dynamically rather than by writing static 
 >configuration, so it will try to use one of the machine's reachable IP 
 >addresses (192.0.2.123 or something), falling back to 127.0.0.2 if 
 >there's nothing better available. 127.0.0.2 is conceptually similar to 
 >127.0.1.1, just a slightly different implementation choice. 
  
 Should libnss-myhostname and the Installer not use the same loop back 
 address? Considering that there are efforts on the way to reduce the 
 loopback range to 127.0.0.0/24, should the installer change to 
 127.0.0.2? 
  
 >>On some of my trixie systems (but not on all of them), 
 >>libnss-myhostname got installed. This changed the nsswitch.conf 
 >>"hosts: files dns" to "hosts: files myhostname dns". 
 > 
 >libnss-myhostname is meant to be conceptually equivalent to putting 
 >something similar to the conventional "$ipaddress apollo" into 
 >/etc/hosts, hence its position close to "files" (which is the plugin 
 >that actually implements /etc/hosts lookup). 
  
 the conventional thing in Debian would be "$ipaddress fqdn shortname". 
  
 >Because it's sequenced after "files" in nsswitch.conf, whatever is 
 >manually configured in /etc/hosts should usually take precedence, but 
 >small details can matter here. 
  
 That does not seem to work. See below. 
  
 >>On those systems, getent hosts hostname returns the short hostname, 
 >>while on the systems that don't have myhostname installed the same 
 >>call returns the FQDN. 
 > 
 >On a typical affected system, what is in /etc/hostname and what is the 
 >result of uname(2)? An easy way to query this interactively is: 
 > 
 >    cat /etc/hostname 
 >    python3 -c 'import os; print(repr(os.uname()))' 
  
 7/1402]mh@rasp:~ $ hostname --fqdn 
 rasp.zugschlus.de 
 [8/1403]mh@rasp:~ $ hostname 
 rasp 
 [9/1404]mh@rasp:~ $ cat /etc/hostname 
 rasp 
 [10/1404]mh@rasp:~ $ cat /etc/hosts 
 127.0.0.1    localhost 
 127.0.1.1    rasp.zugschlus.de  rasp 
 ::1          localhost  ip6-localhost  ip6-loopback 
 ff02::1      ip6-allnodes 
 ff02::2      ip6-allrouters 
 [12/1405]mh@rasp:~ $ getent hosts rasp 
 2001:16b8:a99e:89fe:e65f:1ff:fe29:6448 rasp 
 2a01:238:43fa:bc82::12:100 rasp 
 fe80::e65f:1ff:fe29:6448 rasp 
 [13/1405]mh@rasp:~ $ python3 -c 'import os; print(repr(os.uname()))' 
 posix.uname_result(sysname='Linux', nodename='rasp', release='6.17.3- 
 zgrpi4', 
 version='#5 SMP PREEMPT_DYNAMIC Wed Oct 15 16:05:36 UTC 2025', m 
 chine='aarch64') 
 [14/1406]mh@rasp:~ $ 
  
 On a comparable system without libnss-myhostname installed, the output 
 is the same, just that getent hosts rasp would return 
  
 [continued in next message] 
  
 --- SoupGate-Win32 v1.05 
  * Origin: you cannot sedate... all the things you hate (1:229/2) 

[ list messages | list forums | previous | next | reply ]

search for:

328,107 visits
(c) 1994,  bbs@darkrealms.ca