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.