Diferente da simples hostname
chamada de comando, a chamada hostname --fqdn
tentará 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 --verbose
opção muito útil .
Em resumo, qualquer coisa que não hostname
seja 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 known
vem 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.conf
e, 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 dns
nessa ordem, c) até se você não tiver o DNS bem configurado em seu ambiente, hostname --fqdn
deverá 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.