経緯
ある製品がインストールされた環境のhostnameを変更しなければならなくなった。
対応
/etc/hosts, /etc/sysconfig/network
まずはこの二つのファイルでhost名を各々設定。元のhostnameをpiyo、新規hostnameをhogeとする。
- /etc/hosts
127.0.0.1 localhost.localdomain localhost 192.168.1.100 hoge.example.com hoge
- /etc/sysconfig/network
NETWORKING=yes HOSTNAME=hoge.example.com
で、これで再起動してみたけれど相変わらず
$ hostname piyo
となる。
/etc/sysctl.conf
おかしいなと思っていろいろ思案してたときに、「カーネルパラメータの設定方法教えて」といわれたんで教えてたらそこでピカーンと思い出した。そういえばカーネルパラメータにもhostnameあったなと。
$ sysctl kernel.hostname piyo $ sysctl kernel.hostname=hoge $ sysctl kernel.hostname hoge
これで再起動すれば大丈夫かな、と思って確認。
$ hostname hoge
はい、大丈夫。…と思っていろいろ作業してたらどうもおかしいなと思って見てみたらなんと
$ echo $HOSTNAME piyo
これはどういうことだ!どう考えてもおかしい。しかもrootユーザになってみると
# hostname hoge # echo $HOSTNAME hoge
ということは完全にユーザの設定ファイルレベルでの話。しかし.bashrcとかに何もないので考えられるのは/etc/rc.d内のスクリプトがおかしいということぐらい。
/etc/rc.d
各run levelに対応したrc*.dのディレクトリがあるわけだけど、その中で明らかにパッケージインストールではないスクリプトを発見。そのスクリプトの中で呼び出しているスクリプトを掘って、掘って…してみると、なんと下記のコードを発見。
... export HOSTNAME=piyo ...
なんとハードコードされてるじゃないですか!というわけでこの部分を修正して無事問題を解決しました。めでたし。
まとめ
hostまわりの設定は下記を確認すること。
- /etc/sysconfig/network
- /etc/sysconfig/network-scripts/ifcfg-eth*
- /etc/hosts
- /etc/sysctl.conf
- /etc/rc.dで呼ばれてるスクリプト