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
これが何を意味し、これをどのように修正できるかについて誰かが何か考えを持っていますか?
/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になります。
/ etc/hostsを編集してFQDNを追加します
ここにある構文に関する情報: http://www.faqs.org/docs/securing/chap9sec95.html
更新:もう一度質問を読んでください。パスが正しく設定されていないか、ホスト名プログラムに問題があるようです。
「どのホスト名」を実行する
パス '/ bin/hostname'を返す必要があります
それが機能する場合は、次のようなコマンドをもう一度試してください。
'/ bin/hostname --fqdn'
単純な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 known
はresolver関数から発生します。これらは、名前とアドレス(通常はDNS名とIPアドレス)の間で変換されるシステムライブラリの一部です。
実際、リゾルバーはDNSだけでなく(ホスト名とIPアドレス間の変換以上のもの)、その振る舞いはファイル/etc/nsswitch.conf
によって部分的に設定され、通常はこの順序で以下を調べます。
(注意:dnsmasqdなどのキャッシュDNSサーバーを使用することもできます---上記の点については、まだ「dns」メカニズムの下にあります)。
Dig、Hostなどのツール、および由緒ある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
を追加します。それはあなたが欠けているものをあなたに指し示すでしょう。
何が起こっているかを理解するのに役立つことを願っています。