Contrairement à l' hostname
invocation de commande simple , l'invocation hostname --fqdn
tentera de faire quelques autres choses, ce qui entraînera souvent des recherches DNS.
Prenons par exemple l'invocation (réussie) suivante (cela provient d'une boîte Red Hat, mais j'imagine que ce devrait être la même chose pour Ubuntu):
# hostname --fqdn --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
myserver.example.com
Notez l' --verbose
option très utile .
En bref, tout autre chose qu'un simple hostname
fait probablement plus que ce que vous attendez. Voici un autre exemple:
# hostname --ip --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
10.1.2.3
Et pour terminer:
# hostname --verbose
gethostname()=`myserver.example.com'
myserver.example.com
Notez que le nom d'hôte d'un système (tel que renvoyé par gethostname) peut me correspondre à un nom d'hôte non qualifié, tel que simplement 'myserver'. C'est pourquoi le programme que vous souhaitez installer utilise à la hostname --fqdn
place.
Le message d'erreur hostname: Name or service not known
provient des fonctions du résolveur : ce sont les parties de la bibliothèque système qui se traduisent entre les noms et les adresses (généralement les noms DNS et les adresses IP).
En fait, le résolveur fait plus que simplement DNS (et plus que simplement traduire entre les noms d'hôte et les adresses IP); son comportement est configuré en partie par le fichier /etc/nsswitch.conf
, et généralement il consultera les éléments suivants, généralement dans cet ordre:
- 'hosts' (sous Linux, le moyen / etc / hosts)
- (parfois) nscd (démon de mise en cache du service de noms)
- «dns»
(note, vous pouvez également avoir un serveur DNS de mise en cache tel que dnsmasqd --- pour le point de ce qui précède, qui est toujours sous le mécanisme «dns»).
Il convient de souligner que des outils tels que dig , host et le vénérable nslookup ne suivent pas cet ordre; ce sont explicitement des outils d'interrogation DNS. Cela signifie que si vous vous en remettez à eux (dans un script par exemple), vous obtiendrez peut-être un résultat différent de celui des programmes clients habituels (qui utilisent le résolveur système). Pour cette raison, utilisez le programme getent dans les scripts, en particulier si vous avez un composant de mise en cache tel que nscd en cours d'exécution.
# getent hosts myserver.example.com
10.1.2.3 myserver.example.com
Donc, la clé à retenir ici est que a) si vous avez / etc / hosts bien configuré avec une entrée pour votre propre machine, et b) votre /etc/nsswitch.conf a la configuration habituelle - hosts: files dns
dans cet ordre, alors c) même si vous n'avez pas de DNS bien configuré dans votre environnement, cela hostname --fqdn
devrait fonctionner.
Dans un DNS bien configuré, on s'attendrait à ce que vous ayez une adresse "inverse" (un "enregistrement PTR") qui donne le nom "canonique" de votre serveur, et ce nom devrait également pouvoir être recherché (un " Un record "pour IPv4).
Version courte: ajouter --verbose
; il vous indiquera ce qui vous manque.
J'espère que cela vous aide à comprendre ce qui se passe.