¿Por qué no funciona "hostname --fqdn" en mi computadora Ubuntu?

10

Estoy usando Ubuntu 10.04 LTS, y al escribir el comando hostname --fqdn, me sale el mensaje: hostname: Name or service not known.

Debido a esto, no puedo instalar con globaléxito y obtengo el siguiente error cuando lo intento:

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)

Mi /etc/nsswitch.confestá abajo.

# /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

¿Alguien tiene alguna idea de lo que esto significa y cómo puedo solucionarlo?

RadiantHex
fuente
1
¿Por qué quieres un FQDN? Si tiene que preguntar, probablemente no quiera uno o no pueda usar uno o ambos.
msw

Respuestas:

11

¿Puedes proporcionar el contenido de /etc/nsswitch.conf?

Parece que /etc/nsswitch.conf tiene un valor incorrecto para la línea "hosts". ¿Comienza con "archivos"?

De lo contrario, el FQDN se configura editando / etc / hosts y colocando el FQDN en la línea donde aparece el nombre de host. Supongamos que tiene un nombre de host "foo" y encuentra una línea:

127.0.0.1 foo

Lo editarías así:

127.0.0.1 foo.localdomain foo

foo.localdomain sería su nuevo FQDN.

Raphaël Hertzog
fuente
¡He incluido el contenido de ese archivo como lo pediste! ¡¡Gracias por la respuesta!! :)
RadiantHex
@ Rapael Cambié el archivo / etc / hosts pero comenzó a darme una falla temporal en la resolución de nombres. ¿Alguna idea de por qué está sucediendo?
Muhammad Adeel Zahid
6

edite / etc / hosts para agregar su FQDN

Información sobre la sintaxis ubicada aquí: http://www.faqs.org/docs/securing/chap9sec95.html

actualización: al leer su pregunta nuevamente, casi parece que no tiene su ruta establecida correctamente o que hay algo mal con el programa de nombre de host.

hacer 'qué nombre de host'

debería regresar con la ruta '/ bin / hostname'

si eso funciona intente nuevamente el comando como,

'/ bin / hostname --fqdn'

Mosca del fango
fuente
¡¡¡Gracias!!! Lo siento si pregunto esto, pero ¿cómo puedo encontrar mi FQDN?
RadiantHex
1
bueno, esto significa 'Nombre de dominio completo' superuser.com es un FQDN. Si posee un dominio, puede usarlo, de lo contrario, puede inventar algo si está en una red interna.
Mudfly
1
Gracias @Mudfly! Intenté sus instrucciones, ¡el último comando devuelve "nombre de host: nombre o servicio desconocido" nuevamente!
RadiantHex
Sin más información es difícil saber las condiciones de su problema. EG: ¿es esta una instalación local, está conectado a través de ssh, está utilizando una cuenta de usuario o ha iniciado sesión como root? Es posible que desee visitar ubuntuforums.org y buscar otros que hayan resuelto problemas similares.
Mudfly
1
Esto está dando un salto salvaje aquí, pero Ubuntu favorece el uso de sudo sobre el uso de root. Es muy posible que el shell no esté configurado correctamente. Probar esto es muy simple. Primero puede hacer 'ls -al / root /' y ver si puede ver un .bashrc. Segundo, si no tiene un .bashrc, cópielo desde skel 'cp /etc/skel/.bashrc ./' puede hacerlo esto incluso si ya tienes el archivo. Tercero, haga '/ bin / bash' para asegurarse de que está ejecutando bash. Finalmente intente su comando original nuevamente, debería estar ejecutándose en un shell bash completamente configurado.
Mudfly
0

A diferencia de la hostnameinvocación de comandos simples , la invocación hostname --fqdnintentará hacer algunas cosas más, lo que a menudo resultará en algunas búsquedas de DNS.

Tome por ejemplo la siguiente invocación (exitosa) (esto es de un cuadro de Red Hat, pero me imagino que debería ser lo mismo para 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

Tenga en cuenta la --verboseopción muy útil .

En resumen, cualquier cosa que no sea simple hostnameprobablemente esté haciendo más de lo que espera. Aquí hay otro ejemplo:

# 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

Y para redondearlo:

# hostname --verbose
gethostname()=`myserver.example.com'
myserver.example.com

Tenga en cuenta que el nombre de host de un sistema (tal como lo devuelve gethostname) puede proporcionarme un nombre de host no calificado, como 'myserver'. Esta es la razón por la cual el programa que desea instalar utiliza en su hostname --fqdnlugar.

El mensaje de error hostname: Name or service not knownproviene de las funciones de resolución : estas son las partes de la biblioteca del sistema que se traducen entre nombres y direcciones (generalmente, nombres DNS y direcciones IP).

En realidad, el solucionador hace más que solo DNS (y más que solo traducir entre nombres de host y direcciones IP); su comportamiento está configurado en parte por el archivo /etc/nsswitch.conf, y típicamente consultará lo siguiente, típicamente en este orden:

  • 'hosts' (en Linux, los medios / etc / hosts)
  • (a veces) nscd (demonio de almacenamiento en caché del servicio de nombres)
  • 'dns'

(tenga en cuenta que también puede tener un servidor DNS de almacenamiento en caché como dnsmasqd --- para el punto de lo anterior, que todavía está bajo el mecanismo 'dns').

Vale la pena señalar que herramientas como dig , host y el venerable nslookup no siguen este orden; son explícitamente herramientas de consulta DNS. Esto significa que si confía en ellos (en un script, por ejemplo), puede terminar obteniendo un resultado diferente al que obtendrían los programas regulares de los clientes (que usan el sistema de resolución). Por esta razón, use el programa getent en los scripts, especialmente si tiene un componente de almacenamiento en caché como nscd en ejecución.

# getent hosts myserver.example.com
10.1.2.3    myserver.example.com

Entonces, la clave aquí es que a) si tiene / etc / hosts bien configurados con una entrada para su propia máquina, yb) su /etc/nsswitch.conf tiene la configuración habitual, hosts: files dnsen ese orden, entonces c) incluso Si no tiene DNS bien configurado en su entorno, entonces hostname --fqdndebería funcionar.

En un DNS bien configurado, se espera que tenga una dirección 'inversa' (un "registro PTR") que proporciona el nombre 'canónico' de su servidor, y ese nombre también debería poder buscarse (un " Un registro "para IPv4).

Versión corta: agregar --verbose; te indicará lo que te falta.

Espero que eso te ayude a entender lo que está sucediendo.

Cameron Kerr
fuente