玄箱のIPを変更するとホスト名が変わってしまいアクセスできなくなる

icon 項目のみ表示/展開表示の切り替え

症状

職場のパソコンがPentium3(1GHz)からCore2Duo E6400に変わった。たくさんのソフトを入れるために玄箱を使おうとしたが、うまくいかなかった。違うパソコンに玄箱をつなごうとして、現状のパソコンでIPアドレスを変更し、他のパソコンに接続したところ、Windowsのネットワークに玄箱が出なくなった。
IPは玄箱のweb設定画面で設定。設定後1回目は、ホスト名がKURO-BOXから-dに変更されていた。IPは変更後の値が繁栄されている。
telnetはIPアドレスを指定してログインできた。(他のパソコンではできなかった。)hostnameコマンドで確認するとホスト名が-dになっていた。SAMBAの設定ファイル(/etc/samba/smb.conf)の、netbios名はKURO-BOXで正常であった。玄箱をシャットダウンして再起動すると、netbios名は(none)となった。Windows上でも(none)でアクセスできる。hostnameコマンドで確認すると(none)であった。/etc/hostsファイルをみるとホスト名の設定は-dとなっていた。もう1回再起動すると/etc/samba/smb.confと/etc/hostsファイルは変更されていなかった。(hosts=-d netbios=(none) )
この状態で\\(none)で玄箱のファイルを見ることができる。ここで、hostnameコマンドでホスト名をKURO-BOXとした場合、\\KURO-BOXでも閲覧できる。(\\(none) と \\KURO-BOX どちらでもアクセスできる。)シャットダウンすればホスト名は(none)となる。

教訓

玄箱のIPをDHCPに設定してあったために、DHCPサーバーがない環境に接続(クロスケーブル)アドレスがわからなくなり操作不能に陥った。(アドレスが取得できない場合は、192.168.11.150に設定されたはず)パソコン側を192.168.11.10とかにすればログインできるはず。
webサーバーを立ち上げていたため、標準のweb設定ができなくなった。

次回IPアドレスを変えると、その時おかしくなるがとりあえず使える解決方法

web画面設定で名前を元に戻す方法。

名前を玄箱のweb設定画面でKURO-BOXに変更すると/etc/hosts は正常にKURO-BOXとなった。/etc/samba/smb.confも正常となった。

telnetでログインしコマンドで解決する方法。

IPアドレスを変えた場合、/www/cgi-bin/setup_ip_in.cgiにより、 玄箱はhostsファイルを変更する。このときIPとホスト名をhostsファイルに書き込むが、正常な名前で書き込まれていないようである。しかも再起動のたびに変更されるようである。
/etc/init.d ディレクトリの中で >/etc/hosts という文字列を検索すると set_hostname.sh というファイルが見つかる。

このファイルが起動時等に実行される。ただし、IPアドレス変更時には起動されていないようである。
echo -n "Hostname: "
tmpHOST=`cat /etc/hosts | grep -v "localhost" | awk '{print $2}'`
HOSTNAME=`echo $tmpHOST | awk '{print $1}'`
### fileHOSTS Write ###
tmpIP=`ifconfig eth0 | grep "inet addr:" | awk '{print $2}' | awk -F ":" '{print $2}'`

echo $HOSTNAME, $tmpIP

echo "127.0.0.1 localhost.localdomain localhost" > /etc/hosts
echo "$tmpIP $HOSTNAME" >> /etc/hosts

exit 1

/etc/hosts ファイルよりlocalhostが含まれる次の行の2個目の単語すなわちホスト名を取得し$HOSTNAME、ifconfigコマンドの出力よりネットワークのIPアドレスを取得し、/etc/hostsファイルに書き込んでいる。

何らかの理由によりホスト名の取得がうまくいかないか書き込みがうまくいっていないかのいずれかである。

/etc/samba/smb.conf の netbios name= がおかしい場合

sedを使って(標準で入っていなかったかもしれない)
cat /etc/samba/smb.conf | sed -e "/netbios/c netbios name = KURO-BOX" > smb_new.conf
cp smb_new.conf /etc/samba/smb.conf
rm smb_new.conf
再起動すると正常になる。

/etc/hostsがおかしい場合

cat /etc/hosts | grep "localhost" > hosts_new
echo "123.123.123.123 KURO-BOX" >> hosts_new
cp hosts_new hosts
rm hosts_new

再起動すると正常になる。

sambaの設定ファイルのホスト名をhostsファイルにコピーするスクリプトにより解決する方法。

次のコマンドでsambaの設定ファイルよりホスト名を取得できる。
cat /etc/samba/smb.conf | grep "netbios name = " | awk '{print $4}'
この方法では、IPアドレスを変更した直後は、ホスト名が異常になるが、再起動すれば正常なホスト名となる。
/etc/init.d/set_hostname.sh を下記の様に変更する。

編集前の行 tmpHOST=`cat /etc/hosts | grep -v "localhost" | awk '{print $2}'`
編集後の行 tmpHost='cat /etc/samba/smb.conf | grep "netbios name = " | awk '{print $4}' '