以前から、サーバのシリアルナンバー(UUID)を元にIPアドレスを設定する方法について記述してきたが、今回はそのUUIDをどうやって取得するのかについて。
以下が、今まで作成してきたホスト名、IPアドレスの筐体別自動設定スクリプト。

サーバ大量構築時のキモ ~シリアルコードからIPアドレスを自動設定するスクリプト~
サーバ大量構築時のキモ ~シリアルコードからIPアドレスを自動設定するスクリプト(Ubuntu編)~
サーバ大量構築時のキモ ~シリアルナンバーを用いたWindowsへの静的IPアドレス設定バッチ~

サーバ筐体のUUIDは、ipmitoolから取得が可能。
以下のようなコマンドを実行することで、UUID(ipmiでの表記上はGUID)を取得できる。

ipmitool -H ipmiのIPアドレス -U ユーザ名 -P パスワード mc guid | grep GUID

以下は、実際にテスト用に購入したFujitsu Primergy RX 100での実行結果。

[root@Test-CentOS001 ~]# ipmitool -H 192.168.0.206 -U admin -P admin mc guid | grep GUID
System GUID : 4d377953-0022-d63c-b9f1-4cf84da8dc67

確かに表示された。
ただ、ここで注意。このままでは今まで作成したスクリプトは使用出来ない。
何故かと言うと、このGUIDとdmidecode等で取得するUUIDの並び方が違うからだ。

そこで、今まで作成したスクリプトとこのipmiで取得するGUIDを一致させるためのスクリプト(バッチ)ファイルを作成する。
なお、Linux、Windowsどちらもipmitoolがインストールされている事が前提となる。また、非常に簡単な作りとなるので、構築時以外で使用するのであればソースは書き換えてもらいたい。
※Windowsにおいては、さらにipmitoolコマンドのあるフォルダにパスが通っている必要がある。Windowsでipmitoolを使う方法としてはこちらを参照。

1.Linux等の場合

Linux等のUNIX系OSで取得する場合は、以下のスクリプトファイルとなる。
引数1にipmiのIPアドレス、引数2にユーザ名、引数3にはパスワードを入力する。

●get_uuid.sh

#!/bin/bash
HOST=$1
USER=$2
PASS=$3

GUID=`ipmitool -H $HOST -U $USER -P $PASS mc guid | grep GUID | awk 'BEGIN {FS=": "} { print $2 }'`
GUID=`echo $GUID | sed -e 's/-//g' -e 's/"//g' | tr a-z A-Z`

GUID_6=`echo $GUID | cut -c1-8`
GUID_5=`echo $GUID | cut -c9-12`
GUID_4=`echo $GUID | cut -c13-16`
GUID_3=`echo $GUID | cut -c17-20`
GUID_2=`echo $GUID | cut -c21-24`
GUID_1=`echo $GUID | cut -c25-`
echo $GUID_1$GUID_2$GUID_3$GUID_4$GUID_5$GUID_6

2.Windowsの場合

Windowsの場合は、以下のバッチファイルとなる。
引数等についてはLinux版と同様のため、記述はしないものとする。

@Echo off
Set HOST=%1
Set USER=%2
Set PASS=%3

For /F "tokens=2 usebackq delims=^:^" %%i in (`ipmitool -H %HOST% -U %USER% -P %PASS% mc guid ^| find "GUID"`) ^
DO @set GUID_ORG_1=%%i

Set GUID_ORG_2=%GUID_ORG_1: =%
Set GUID_ORG_3=%GUID_ORG_2:-=%

For %%I IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) ^
DO Call Set GUID_ORG_3=%%GUID_ORG_3:%%I=%%I%%

Set UUID_6=%GUID_ORG_3:~0,8%
Set UUID_5=%GUID_ORG_3:~8,4%
Set UUID_4=%GUID_ORG_3:~12,4%
Set UUID_3=%GUID_ORG_3:~16,4%
Set UUID_2=%GUID_ORG_3:~20,4%
Set UUID_1=%GUID_ORG_3:~24,8%

Echo %UUID_1%%UUID_2%%UUID_3%%UUID_4%%UUID_5%%UUID_6%

これで、今まで作成した各筐体ごとのホスト名、IPアドレス自動設定スクリプト、バッチと組み合わせて、UUID一括取得、OSインストール時に静的IPアドレス及びホスト名の自動設定が行えるようになった。

※ なお、このUUIDの順序はあくまでもLinuxインストール時にESXi上の仮想マシンと順番をあわせるためのものである。そのため、仮想マシンにKickstart等を適用させない場合は、機種によってはKickstartやWindowsでのIPアドレス自動設定スクリプト側のUUIDの順序変更のアルゴリズムを変更する必要が出るものもある。必ず一度検証機で自動インストールする全てのOSでのUUID順序変更パターンを確認してもらいたい。