OrangePi 割り振られたIPアドレスから、ホスト名を変更するスクリプト

 2016-11-10
計算ノードは数が多いため一つ一つメンテしてられない。基本的には一台のシステムイメージを全台数にばら撒く。
そうなると個体の識別が必要になるので、ホスト名を変えておくといろいろ融通が利きやすい(というかホスト名が同じだと面倒が増える)ので配られたIPアドレスの末尾をみてホスト名を変更するスクリプトを用意する。
 

IPアドレスはdhcpdにて、MACアドレスを拠り所にして静的割り当てする。これによって、IPアドレスとホスト名が何らかの法則性で必ず一致するので後々メンテしやすい(はず)

#!/bin/bash -f


LANG=C
LANGUAGE=C
WAIT_COUNT=36
WAIT_SEC=5
PREFIX="opipc-clst"


#check ip_addr
for cnt in `seq ${WAIT_COUNT}`
do
if [ ${cnt} -eq ${WAIT_COUNT} ];
then
# ip_addr check FAILED!
exit
fi

/sbin/ifconfig eth0 | grep -q '192.168.111.1'
if [ $? -ne 0 ];
then
sleep ${WAIT_SEC}
else
break
fi
done


NUM=`/sbin/ifconfig eth0 | grep inet | sed -e 's/^.*192\.168\.111\.1\([0-9][0-9]\).*$/\1/g'`
HOSTNAME_TARGET="${PREFIX}${NUM}"
HOSTNAME_CUR=`hostname`

if [ "${HOSTNAME_TARGET}" == "${HOSTNAME_CUR}" ];
then
# no problem, nothing to do.
exit
fi


sudo sed -i "s/${HOSTNAME_CUR}/${HOSTNAME_TARGET}/g" /etc/hosts
sudo sed -i "s/${HOSTNAME_CUR}/${HOSTNAME_TARGET}/g" /etc/hostname
sudo sync; sudo sync; sudo sync
sudo reboot


forループではIPアドレスが取得されるのを待っています。
もし規定回数待っても取得できなければ何もせずスクリプトを終了します。
IPアドレスが取得されていれば、末尾2桁を取り出し、ホスト名を生成します。
生成したホスト名が既に設定されていれば、何もせずスクリプトを終了します。
生成したホスト名が既に設定されたホスト名と一致しなかった場合、sedコマンドで/etc/hostsと/etc/hostnameを書き換え、rebootします。

このスクリプトをOrangePi起動時に実行するように登録してやると、MASTERノードのdhcpdの設定によって計算ノードのホスト名をイイカンジに制御できる様になりました。やったね。

 
コメント












管理者にだけ表示を許可する
トラックバック
トラックバックURL:
http://wbbwbb.blog83.fc2.com/tb.php/257-3f1ab2a3
≪ トップページへこのページの先頭へ  ≫