Por que "hostname --fqdn" não funciona no meu computador Ubuntu?


10

Eu estou usando o Ubuntu 10.04 LTS, e quando eu digitar o comando hostname --fqdn, eu recebo a mensagem: hostname: Name or service not known.

Por esse motivo, não consigo instalar com globalêxito e recebo o seguinte erro ao tentar:

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)

Meu /etc/nsswitch.confestá abaixo.

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

Alguém tem alguma idéia sobre o que isso significa e como posso corrigir isso?


1
Por que você quer um FQDN? Se você precisar perguntar, provavelmente não quer um ou não pode usar um ou ambos.
msw

Respostas:


11

Você pode fornecer o conteúdo de /etc/nsswitch.conf?

Parece que /etc/nsswitch.conf tem um valor ruim para a linha "hosts". Começa com "arquivos"?

Caso contrário, o FQDN é definido editando / etc / hosts e colocando o FQDN na linha em que o nome do host aparece. Suponha que você tenha um nome de host "foo" e encontre uma linha:

127.0.0.1 foo

Você o editaria assim:

127.0.0.1 foo.localdomain foo

foo.localdomain seria seu novo FQDN.


Eu incluí o conteúdo desse arquivo como você pediu! Obrigado pela resposta!! :)
RadiantHex

@Rapael Alterei o arquivo / etc / hosts, mas ele começou a causar falha temporária na resolução de nomes. Alguma idéia de por que está acontecendo?
Muhammad Adeel Zahid

6

edite / etc / hosts para adicionar seu FQDN

Informações sobre sintaxe localizadas aqui: http://www.faqs.org/docs/securing/chap9sec95.html

update: lendo a sua pergunta novamente, quase parece que você não está com o caminho definido ou há algo errado com o programa hostname.

faça 'qual hostname'

ele deve retornar com o caminho '/ bin / hostname'

se isso funcionar, tente o comando novamente como,

'/ bin / hostname --fqdn'


Obrigado!!! Desculpe se pergunto isso, mas como descubro meu FQDN?
RadiantHex

1
bem, isso significa 'Nome de domínio totalmente qualificado' superuser.com é um FQDN. Se você possui um domínio, pode usá-lo; caso contrário, pode inventar algo se estiver em uma rede interna.
Mudfly

1
Obrigado @Mudfly! Eu tentei suas instruções, os últimos comandos retornam "hostname: Nome ou serviço não conhecido" novamente!
RadiantHex

Sem mais informações, é difícil conhecer as condições do seu problema. EG: esta é uma instalação local, você efetuou login no ssh, está usando uma conta de usuário ou root? Você pode visitar o ubuntuforums.org e procurar outras pessoas que resolveram problemas semelhantes.
Mudfly 07/07

1
Isso está dando um salto selvagem aqui, mas o Ubuntu prefere o uso do sudo ao invés do root. É bem possível que o shell não esteja configurado corretamente. Testar isso é muito simples. Primeiro você pode fazer 'ls -al / root /' e ver se você pode ver um .bashrc Segundo, se você não tiver um .bashrc, copie-o do skel 'cp /etc/skel/.bashrc ./' você pode fazer isso mesmo se você já tiver o arquivo. Terceiro, faça '/ bin / bash' para garantir que você esteja executando o bash. Por fim, tente seu comando original novamente, você deve estar executando em um shell bash totalmente configurado.
Mudfly

0

Diferente da simples hostnamechamada de comando, a chamada hostname --fqdntentará fazer mais algumas coisas, o que geralmente resultará em algumas pesquisas de DNS.

Tomemos, por exemplo, a seguinte invocação (bem-sucedida) (isto é de uma caixa Red Hat, mas eu imaginaria que deveria ser a mesma para o 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

Observe a --verboseopção muito útil .

Em resumo, qualquer coisa que não hostnameseja simples provavelmente está fazendo mais do que você espera. Aqui está outro exemplo:

# 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 para finalizar:

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

Observe que o nome do host de um sistema (retornado por gethostname) pode me fornecer um nome de host não qualificado, como apenas 'myserver'. É por isso que o programa que você deseja instalar está usando o hostname --fqdn.

A mensagem de erro hostname: Name or service not knownvem das funções do resolvedor : estas são as partes da biblioteca do sistema que são convertidas entre nomes e endereços (geralmente nomes DNS e endereços IP).

Na verdade, o resolvedor faz mais do que apenas DNS (e mais do que apenas traduzir entre nomes de host e endereços IP); seu comportamento é configurado em parte pelo arquivo /etc/nsswitch.confe, normalmente, ele consulta o seguinte, geralmente nesta ordem:

  • 'hosts' (no Linux, os meios / etc / hosts)
  • (às vezes) nscd (daemon de armazenamento em cache do serviço de nomes)
  • 'dns'

(observe, você também pode ter um servidor DNS em cache, como o dnsmasqd --- pelo que foi dito acima, que ainda está no mecanismo 'dns').

Vale ressaltar que ferramentas como dig , host e o venerável nslookup não seguem essa ordem; eles são explicitamente ferramentas de consulta de DNS. Isso significa que, se você confiar neles (em um script, por exemplo), poderá obter um resultado diferente do que os programas clientes regulares (que usam o resolvedor do sistema). Por esse motivo, use o programa getent em scripts, principalmente se você tiver um componente de armazenamento em cache, como o nscd em execução.

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

Portanto, o principal argumento aqui é que: a) se você tiver / etc / hosts bem configurados com uma entrada para sua própria máquina eb) seu /etc/nsswitch.conf possui a configuração usual - hosts: files dnsnessa ordem, c) até se você não tiver o DNS bem configurado em seu ambiente, hostname --fqdndeverá funcionar.

Em um DNS bem configurado, espera-se que você tenha um endereço 'reverso' (um "registro PTR") que forneça o nome 'canônico' do seu servidor, e esse nome também poderá ser procurado (um " Um registro "para IPv4).

Versão curta: add --verbose; irá apontar para o que está faltando.

Espero que ajude você a entender o que está acontecendo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.