数年間、私はLinuxをメインシステム、具体的にはFedoraとして使用してきました。一部のネットワークに接続してIPになる場合を除いて、ホスト名が常に「localhost」に設定されるのを見てきました。今日、私は以下の行動を経験しましたが、理解できません。
ラップトップの別のパーティションにUbuntuインストールをセットアップし、Ubuntuインストール中にコンピューター名/ホスト名を設定しました。ただし、Fedoraに再起動すると、Fedoraはホスト名をUbuntuインストールで設定した名前に更新していました。
ホスト名はディストリビューションインストールのパーティションに設定されて保存されていると常に思っていました。実際、Fedoraの/ etc/hostnameの内容はまだ「localhost.localdomain」を読み取っていますが、hostname
コマンドを実行すると新しいホスト名が表示されます。どちらのインストールもefiブートパーティションを共有しますが、それ以外は個別です。 Fedoraのインストールが新しいホスト名をどこからどのように読み取っているのかと思いますか?
実行からわかるように、hostname
programはuname syscallを実行します。
strace hostname
...
uname({sysname="Linux", nodename="my.hostname.com", ...}) = 0
...
name syscall man page から、syscallがカーネルから次の構造体を取得することが示されています。
struct utsname {
char sysname[]; /* Operating system name (e.g., "Linux") */
char nodename[]; /* Name within "some implementation-defined
network" */
char release[]; /* Operating system release (e.g., "2.6.28") */
char version[]; /* Operating system version */
char machine[]; /* Hardware identifier */
#ifdef _GNU_SOURCE
char domainname[]; /* NIS or YP domain name */
#endif
};
コメントを信じれば、ドメイン名はNIS/YPシステムから取得されます。したがって、ubuntu OSによって設定された名前をあなたに返しているNIS/YPサービスがネットワーク上にある可能性が高いです。
Linuxシステムのホスト名には2つの独立した(!)概念があります。
カーネルがローカルホスト名(gethostname/unameおよびsethostnameシステムコールで処理されるもの)と見なすものは、ネットワーク接続とは無関係です。TCP/ IPネットワーク機能のないカーネルを構築した場合でも、これらのメカニズムは存在します。
TCP/IP(または他のネットワークスタック-世界のすべてのネットワークがIPではない!)アドレスに実際に接続されている1つ以上のホスト名があり、これらはリゾルバーライブラリ関数(一部のlibc)。適切な構成ファイル(/etc/nsswitch.conf、/etc)で指定したルールに従って、ソース(ローカル/ etc/hostsファイル、DNS、NIS ...)を解釈することにより、このような名前を決定します/Host.confなど...)。
インストール中に、ホームルーターを介してUbuntuがインターネットに接続している可能性があります。これを行うために、ホスト名をルーターに報告し、一時的なローカルIPを取得しました。
Fedoraで再起動すると、同じルーターに接続してIPアドレスを取得しますが、Ubuntu用に作成された古いリースは引き続き有効です。これは、同じネットワークカードと同じハードウェアMACアドレスを持つ同じマシンであるため、同じリースを再利用します。
私の推測では、ルーターはIPリースが登録されたホスト名を送信し、Fedoraはそれを取得します。
残念ながら、私の答えを裏付ける証拠や引用はありません。UbuntuをWindowsとのデュアルブートでインストールした個人的な経験と話すことができます。その当時、Ubuntuはインストール中にWindowsで使用したものと同じホスト名を設定することを拒否しました。これは、名前がすでにネットワークに存在していると主張していたためです。おそらく、ここで同様のことが起こっています。
私の推測があなたの状況にも当てはまるかどうかを確認するには、ルーターの構成インターフェースでIPリースを取り消してから、Fedoraを再起動してください。 Ubuntuのホスト名が不要になれば、私は正しいはずです。