Linuxホストの一意化

投稿者: | 1月 19, 2025

今週は、昔の共通一次、センター試験、今は、大学入学共通テストというらしい。

高校時代、「トクさん」という友人がいて、成績は優秀だったのだが、優秀になる過程がユニークだった。数学の模試で、答案用紙のおかわりをねだったことがあった。(もちろんくれない。)理由は、式が長すぎて、書ききれなくなったと言っていた。よくよく聞いてみると、何かの公式か定理(知っていれば1発で解けるやつ)を覚えていなく、その場でその公式を導き出して、証明してから解いていたとのこと。えーっ、知ってれば3行で済むはずが、その定理を導き証明するために、答案用紙両面を使ったとのことだった。恐れ入った。結局彼は、数学科へ進んだ。まぁ、自分は、物理の公式を覚えるのが面倒なので、全部微積で解いてしまっていたが。

 

閑話休題

 

Linuxホストが一意であることを証明するには、以下のコマンドを実行してみる。

hostnamectl

ここに記載されている、Machine IDがこのホストのIDとなる。

cat /etc/machine-id

何も考えずに仮想マシンのクローンをしてしまうと、たとえホスト名は違っていても、同じMachine IDのホストができてしまう。多分、世の中、machine-idが被っているマシンがゴロゴロあるんじゃないかなぁと思う。

解決策は、テンプレートマシンをシャットダウンする直前に

echo -n > /etc/machine-id

としておくと、次回起動時に自動的にmachine-idを新規生成してくれる。(/etc/machine-idファイルは消してはだめで、空で存在している必要がある。)

 

ちなみに、この手のコマンドは他にもある。以下サンプル。

結構、色々なものが見れる。

例えば、cat /etc/resolv.confをしてもnameserver 127.0.0.53とかしか帰ってこないけど、resolvectlで調べれば1発でわかる。

これらのコマンドはsystemdパッケージ関連に含まれているはず。

最近、crontabの代わりにsystemctlでスケジュール実行をさせてみたが、実行時間に幅を持たせることができたり、結構便利。

また、だいぶ変わってきたなぁという感じ。

 

最後に余談

HOSTNAMEを環境変数に入れるとき

HOSTNAME=$(hostname)

は、ダメで正しくは、

HOSTNAME=$(cat /etc/hostname)

の方がいい。hostnameコマンドは、hostnameをしれっと変えられてしまうので危ない。ホスト名を変えたい時は、

hostnamectl set-hostname <ホスト名>

の方がいいと思う。また、ホスト名は、大文字は許されていないので注意。

コメントを残す