Pourquoi «hostname --fqdn» ne fonctionne-t-il pas sur mon ordinateur Ubuntu?

10

J'utilise Ubuntu 10.04 LTS, et quand je tape la commande hostname --fqdn, je reçois le message: hostname: Name or service not known.

Pour cette raison, je ne peux pas installer globalcorrectement et obtenir l'erreur suivante lorsque j'essaie:

Setting up global (5.7.1-1) ...
hostname: Name or service not known
dpkg: error processing global (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 global
E: Sub-process /usr/bin/dpkg returned an error code (1)

Mon /etc/nsswitch.confest ci-dessous.

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Quelqu'un at-il des idées sur ce que cela signifie et comment je peux y remédier?

RadiantHex
la source
1
Pourquoi voulez-vous un nom de domaine complet? Si vous devez demander, vous n'en voulez probablement pas ou ne pouvez pas utiliser l'un ou les deux.
msw

Réponses:

11

Pouvez-vous fournir le contenu de /etc/nsswitch.conf?

Il semble que /etc/nsswitch.conf ait une mauvaise valeur pour la ligne "hosts". Commence-t-il par des "fichiers"?

Sinon, le FQDN est défini en éditant / etc / hosts et en plaçant le FQDN sur la ligne où le nom d'hôte apparaît. Supposons que vous ayez un nom d'hôte "foo" et que vous trouviez une ligne:

127.0.0.1 foo

Vous le modifieriez comme ceci:

127.0.0.1 foo.localdomain foo

foo.localdomain serait votre nouveau nom de domaine complet.

Raphaël Hertzog
la source
J'ai inclus le contenu de ce fichier comme vous l'avez demandé! Merci pour la réponse!! :)
RadiantHex
@Rapael J'ai changé le fichier / etc / hosts mais il a commencé à me donner un échec temporaire dans la résolution de nom. Des idées pourquoi cela se produit?
Muhammad Adeel Zahid
6

éditez / etc / hosts pour ajouter votre nom de domaine complet

Informations sur la syntaxe disponibles ici: http://www.faqs.org/docs/securing/chap9sec95.html

mise à jour: en relisant votre question, il semble presque que vous n'ayez pas défini votre chemin correctement ou qu'il y ait un problème avec le programme hostname.

faire 'quel nom d'hôte'

il doit retourner avec le chemin '/ bin / hostname'

si cela fonctionne, essayez à nouveau la commande comme,

'/ bin / hostname --fqdn'

Mudfly
la source
Merci!!! Désolé si je pose cette question, mais comment puis-je trouver mon nom de domaine complet?
RadiantHex
1
bien cela signifie «Nom de domaine pleinement qualifié» superuser.com est un nom de domaine complet. Si vous possédez un domaine, vous pouvez l'utiliser, sinon vous pouvez simplement inventer quelque chose si vous êtes sur un réseau interne.
Mudfly
1
Merci @Mudfly! J'ai essayé vos instructions, la dernière commande renvoie à nouveau "hostname: Nom ou service inconnu"!
RadiantHex
Sans plus d'informations, il est difficile de connaître les conditions de votre problème. EG: s'agit-il d'une installation locale, êtes-vous connecté via ssh, utilisez-vous un compte utilisateur ou connecté en root? Vous voudrez peut-être visiter ubuntuforums.org et rechercher d'autres personnes qui ont résolu des problèmes similaires.
Mudfly
1
Cela prend un saut sauvage ici, mais Ubuntu préfère utiliser sudo à l'utilisation de root. Il est fort possible que le shell ne soit pas configuré correctement. Pour tester cela est très simple. D'abord, vous pouvez faire 'ls -al / root /' et voir si vous pouvez voir un .bashrc Deuxièmement, si vous n'avez pas de .bashrc le copier depuis skel 'cp /etc/skel/.bashrc ./' vous pouvez le faire ceci même si vous avez déjà le fichier. Troisièmement, faites '/ bin / bash' pour vous assurer que vous exécutez bash. Enfin, essayez à nouveau votre commande d'origine, vous devez exécuter dans un shell bash entièrement configuré.
Mudfly
0

Contrairement à l' hostnameinvocation de commande simple , l'invocation hostname --fqdntentera 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' --verboseoption très utile .

En bref, tout autre chose qu'un simple hostnamefait 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 --fqdnplace.

Le message d'erreur hostname: Name or service not knownprovient 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 dnsdans cet ordre, alors c) même si vous n'avez pas de DNS bien configuré dans votre environnement, cela hostname --fqdndevrait 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.

Cameron Kerr
la source