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

10

Estou usando o Ubuntu 10.04 LTS e, quando digito o comando hostname --fqdn , recebo a mensagem: hostname: Name or service not known .

Por causa disso, não consigo instalar global com êxito e obtenho 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.conf está 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 ideia sobre o que isso significa e como posso corrigir isso?

    
por RadiantHex 08.07.2010 / 00:56

3 respostas

11

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

Parece que o /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 onde o nome do host aparece. Suponha que você tenha um nome de host "foo" e encontre uma linha:

127.0.0.1 foo

Você poderia editá-lo assim:

127.0.0.1 foo.localdomain foo

foo.localdomain seria o seu novo FQDN.

    
por 08.07.2010 / 09:03
6

edite o / etc / hosts para adicionar seu FQDN

Informações sobre sintaxe localizadas aqui: link

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

do 'qual hostname'

deve retornar com o caminho '/ bin / hostname'

se isso funcionar, tente o comando novamente,

'/ bin / hostname --fqdn'

    
por 08.07.2010 / 01:05
0

Diferentemente da simples invocação do comando hostname , a invocação hostname --fqdn tentará fazer mais algumas coisas, o que geralmente resultará em algumas pesquisas de DNS.

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

Tenha em atenção a opção --verbose muito útil.

Em resumo, qualquer coisa diferente de um simples hostname provavelmente está fazendo mais do que o esperado. 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 terminar:

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

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

A mensagem de erro hostname: Name or service not known vem das funções resolver : estas são as partes da biblioteca do sistema que traduz 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.conf e normalmente ele consultará o seguinte, normalmente nesta ordem:

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

(note que você também pode ter um servidor DNS em cache como dnsmasqd --- para o ponto acima, que ainda está sob o 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. Isto significa que se você confiar nelas (em um script, por exemplo), você pode acabar recebendo um resultado diferente do que os programas clientes regulares (que usam o resolvedor do sistema). Por esse motivo, use o programa getent em scripts, especialmente se você tiver um componente de 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 o / etc / hosts bem configurado com uma entrada para sua própria máquina eb) seu /etc/nsswitch.conf tiver a configuração usual - hosts: files dns nesse order, then c) mesmo que você não tenha DNS bem configurado em seu ambiente, então hostname --fqdn deve funcionar.

Em um DNS bem configurado, seria esperado que você tivesse um endereço 'reverso' (um "registro PTR") que fornecesse o nome 'canônico' do seu servidor, e esse nome também deveria poder ser consultado (um "Um registro" para o IPv4).

Versão resumida: adicione --verbose ; ele vai apontar para o que você está faltando.

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

    
por 06.11.2017 / 11:05