Perché "hostname --fqdn" non funziona sul mio computer Ubuntu?


10

Sto utilizzando Ubuntu 10.04 LTS, e quando digito il comando hostname --fqdn, ottengo il messaggio: hostname: Name or service not known.

Per questo motivo, non riesco a installare globalcorrettamente e ottengo il seguente errore quando provo:

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)

Il mio /etc/nsswitch.confè sotto.

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

Qualcuno ha qualche idea su cosa significhi e come posso risolvere questo problema?


1
Perché vuoi un nome di dominio completo? Se devi chiedere, probabilmente non ne vuoi uno o non puoi utilizzarne uno o entrambi.
msw

Risposte:


11

Potete fornire il contenuto di /etc/nsswitch.conf?

Sembra che /etc/nsswitch.conf abbia un valore negativo per la riga "hosts". Comincia con "file"?

In caso contrario, il nome di dominio completo viene impostato modificando / etc / hosts e posizionando il nome di dominio completo sulla riga in cui appare il nome host. Supponiamo di avere un nome host "pippo" e di trovare una riga:

127.0.0.1 foo

Lo modificheresti in questo modo:

127.0.0.1 foo.localdomain foo

foo.localdomain sarebbe il tuo nuovo nome di dominio completo.


Ho incluso il contenuto di quel file come mi hai chiesto! Grazie per la risposta!! :)
RadiantHex,

@Rapael Ho cambiato il file / etc / hosts ma ha iniziato a darmi un errore temporaneo nella risoluzione dei nomi. Qualche idea sul perché sta accadendo?
Muhammad Adeel Zahid,

6

modifica / etc / hosts per aggiungere il tuo nome di dominio completo

Informazioni sulla sintassi disponibili qui: http://www.faqs.org/docs/securing/chap9sec95.html

aggiornamento: rileggere di nuovo la tua domanda sembra quasi che tu non abbia il percorso impostato correttamente o che ci sia qualcosa di sbagliato nel programma hostname.

fai "quale nome host"

dovrebbe tornare con il percorso '/ bin / hostname'

se funziona, prova di nuovo il comando come,

'/ bin / hostname --fqdn'


Grazie!!! Scusate se lo chiedo, ma come faccio a sapere il mio nome di dominio completo?
RadiantHex,

1
bene questo significa "Nome di dominio completo " superuser.com è un nome di dominio completo. Se possiedi un dominio, potresti usarlo, altrimenti puoi semplicemente inventare qualcosa se ti trovi su una rete interna.
Mudfly,

1
Grazie @Mudfly! Ho provato le tue istruzioni, gli ultimi comandi restituiscono "hostname: Nome o servizio non conosciuti" di nuovo!
RadiantHex,

Senza ulteriori informazioni è difficile conoscere le condizioni del tuo problema. Ad esempio: si tratta di un'installazione locale, hai effettuato l'accesso tramite ssh, stai utilizzando un account utente o hai effettuato l'accesso come root? Potresti visitare ubuntuforums.org e cercare altri che hanno risolto problemi simili.
Mudfly,

1
Questo sta facendo un grande salto qui, ma Ubuntu preferisce usare sudo rispetto all'uso di root. È possibile che la shell non sia configurata correttamente. Per testarlo è molto semplice. Per prima cosa puoi fare 'ls -al / root /' e vedere se riesci a vedere un .bashrc In secondo luogo se non hai un .bashrc copiarlo da skel 'cp /etc/skel/.bashrc ./' puoi fare questo anche se hai già il file. Terzo, fai '/ bin / bash' per assicurarti di eseguire bash. Alla fine prova di nuovo il tuo comando originale, dovresti essere in esecuzione in una shell bash completamente configurata.
Mudfly,

0

A differenza della semplice hostnameinvocazione del comando, l'invocazione hostname --fqdntenterà di eseguire alcune altre operazioni, che spesso comporteranno alcune ricerche DNS.

Prendiamo ad esempio la seguente (riuscita) invocazione (proviene da una scatola di Red Hat, ma immagino che dovrebbe essere la stessa per 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

Si noti la molto utile --verboseopzione.

In breve, qualsiasi cosa diversa da una semplice hostnamesta probabilmente facendo più di quanto ti aspetti. Ecco un altro esempio:

# 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

E per finire:

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

Si noti che il nome host di un sistema (come restituito da gethostname) può essere un nome host non qualificato, ad esempio solo "myserver". Questo è il motivo per cui il programma che si desidera installare utilizza hostname --fqdninvece.

Il messaggio di errore hostname: Name or service not knownproviene dalle funzioni del resolver : queste sono le parti della libreria di sistema che traducono tra nomi e indirizzi (in genere nomi DNS e indirizzi IP).

In realtà, il resolver fa molto di più del semplice DNS (e più della semplice traduzione tra nomi host e indirizzi IP); il suo comportamento è in parte configurato dal file /etc/nsswitch.confe in genere consulterà quanto segue, in genere in questo ordine:

  • 'hosts' (su Linux, il mezzo / etc / hosts)
  • (a volte) nscd (demone di cache name-service)
  • 'DNS'

(nota, puoi anche avere un server DNS di cache come dnsmasqd --- per il punto di cui sopra, che è ancora sotto il meccanismo 'dns').

Vale la pena sottolineare che strumenti come scavare , host e il venerabile nslookup non seguono questo ordine; sono esplicitamente strumenti di query DNS. Ciò significa che se si fa affidamento su di essi (ad esempio in uno script), si potrebbe ottenere un risultato diverso rispetto ai normali programmi client (che utilizzano il risolutore di sistema). Per questo motivo, utilizzare il programma getent negli script, in particolare se si dispone di un componente di memorizzazione nella cache come nscd in esecuzione.

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

Quindi la chiave da asporto qui è che a) se hai / etc / hosts ben configurato con una voce per la tua macchina, e b) il tuo /etc/nsswitch.conf ha la solita configurazione - hosts: files dnsin questo ordine, quindi c) anche se non hai DNS ben configurato nel tuo ambiente, allora hostname --fqdndovrebbe funzionare.

In un DNS ben configurato, ci si aspetterebbe di avere un indirizzo "inverso" (un "record PTR") che fornisca il nome "canonico" del server e che sia possibile cercare anche quel nome (un " Un record "per IPv4).

Versione breve: aggiungi --verbose; ti indicherà ciò che ti manca.

Spero che ti aiuti a capire cosa sta succedendo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.