web-dev-qa-db-ja.com

「hostname --fqdn」がUbuntuコンピュータで機能しないのはなぜですか?

Ubuntu 10.04 LTSを使用していて、コマンドhostname --fqdn、次のメッセージが表示されます:hostname: Name or service not known

このため、globalを正常にインストールできず、次のエラーが表示されます。

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)

ぼくの /etc/nsswitch.confは下にあります。

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

これが何を意味し、これをどのように修正できるかについて誰かが何か考えを持っていますか?

10
RadiantHex

/etc/nsswitch.confのコンテンツを提供できますか?

/etc/nsswitch.confの「hosts」行に不正な値があるようです。 「ファイル」で始まりますか?

それ以外の場合、FQDNは/ etc/hostsを編集し、ホスト名が表示される行にFQDNを置くことによって設定されます。ホスト名「foo」があり、次の行を見つけたとします。

127.0.0.1 foo

次のように編集します。

127.0.0.1 foo.localdomain foo

foo.localdomainが新しいFQDNになります。

11

/ etc/hostsを編集してFQDNを追加します

ここにある構文に関する情報: http://www.faqs.org/docs/securing/chap9sec95.html

更新:もう一度質問を読んでください。パスが正しく設定されていないか、ホスト名プログラムに問題があるようです。

「どのホスト名」を実行する

パス '/ bin/hostname'を返す必要があります

それが機能する場合は、次のようなコマンドをもう一度試してください。

'/ bin/hostname --fqdn'

6
Mudfly

単純なhostnameコマンドの呼び出しとは異なり、hostname --fqdnの呼び出しはいくつかのことを実行しようとしますが、その結果、DNSルックアップが発生することがよくあります。

たとえば、次の(成功した)呼び出しを見てみましょう(これはRed Hatボックスからですが、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

非常に役立つ--verboseオプションに注意してください。

簡単に言うと、単純なhostname以外のものは、おそらくあなたが期待する以上のことをしているでしょう。次に別の例を示します。

# 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

そしてそれを四捨五入するには:

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

システムのホスト名(gethostnameによって返される)は、「myserver」などの非修飾ホスト名になる可能性があることに注意してください。これが、インストールするプログラムが代わりにhostname --fqdnを使用している理由です。

エラーメッセージhostname: Name or service not knownresolver関数から発生します。これらは、名前とアドレス(通常はDNS名とIPアドレス)の間で変換されるシステムライブラリの一部です。

実際、リゾルバーはDNSだけでなく(ホスト名とIPアドレス間の変換以上のもの)、その振る舞いはファイル/etc/nsswitch.confによって部分的に設定され、通常はこの順序で以下を調べます。

  • 'hosts'(Linuxでは、/ etc/hostsを意味します)
  • (時々)nscd(ネームサービスキャッシングデーモン)
  • 「dns」

(注意:dnsmasqdなどのキャッシュDNSサーバーを使用することもできます---上記の点については、まだ「dns」メカニズムの下にあります)。

DigHostなどのツール、および由緒あるnslookupなどのツールはこの順序に従っていないことに注意してください。これらは明示的にDNSクエリツールです。つまり、スクリプトなどを使用すると、通常のクライアントプログラム(システムリゾルバーを使用するプログラム)とは異なる結果になる可能性があります。このため、特にnscdなどのキャッシュコンポーネントを実行している場合は、スクリプトでgetentプログラムを使用します。

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

したがって、ここでの重要なポイントは、a)自分のマシンのエントリで/ etc/hostsが適切に構成されている場合、およびb)/etc/nsswitch.confが通常の構成であるhosts: files dnsであるということです。 、次にc)環境にDNSが適切に構成されていない場合でも、hostname --fqdnは機能します。

適切に構成されたDNSでは、サーバーの「正規」名を提供する1つの「逆」アドレス(「PTRレコード」)があり、その名前も検索できるはずです(「 IPv4のレコード」)。

ショートバージョン:--verboseを追加します。それはあなたが欠けているものをあなたに指し示すでしょう。

何が起こっているかを理解するのに役立つことを願っています。

0
Cameron Kerr