ShinobiLayer: SoftLayerのSupermicroのBIOS設定をテキスト形式で取得する方法

#1. はじめに
SoftLayerはBare Metal Serverが利用できるというのが非常に特徴的であり、サポートにリクエストしてBIOS設定も変更することができます（例えばブートシーケンスを変更する、Hyper-Threadingを無効にする、等）。ただし、BIOSパスワードがないとBIOS設定は見れないし、そもそもBIOSパスワードが分かっていても、BIOS設定をGUI画面から全比較していくのは非常に大変な作業です。そこで、BIOS設定情報を何とかテキスト形式で採取しようというのが、この記事の趣旨です。

#2. Supermicro アップデートマネージャ (SUM)とは
SoftLayerのBare Metal ServerはSupermicroのマザーボードを利用しています。よってSupermicro提供の便利なツールが使えると良さそう・・・と思って見つけたのがSupermicro アップデートマネージャ (SUM)です。以下の記事でも紹介されていますが、要はSupermicro製のマザーボードであればBIOSの設定や情報取得ができるようです。
http://tech.blog.ccmp.jp/2015/12/supermicro-update-manager.html

本来は有償版のようですが、下記サイトから評価版をリクエストできるようです。
評価版といえども、特に有償版と違って機能差はないようです。
https://www.supermicro.com/solutions/SMS_SUM.cfm

#3. SUMのインストール方法
今回は、同一アカウント内に、対象の物理サーバーとは別に仮想サーバー（CentOS6.8）をプロビジョニングし、そこにSUMを導入してみます。っていうか、ファイルを展開するだけです。

```text:SUMのインストール
# tar -zxvf sum_1.6.0_Linux_x86_64_20151106.tar.gz
# cd sum_1.6.0_Linux_x86_64
```

#4. Sumを使ってBIOS情報を取得してみる
SoftLayerのCustomer Portalでは、物理サーバーのIPMI情報はDevice Details -> Remote Mgmtから確認することができます。以下の例だと、IPMIのManagement IPが10.132.2.248であり、ユーザーはrootであることが分かります。（パスワードも確認できますが、ここでは隠しています）

![IPMI情報.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/27d9159b-bf46-5651-7f22-61e58bda3bd5.jpeg)


以下の-pのところは、パスワードを指定してください。残念ながら権限が少ないというエラーが出てしまっていますね。

```text:コマンド書式
sum -i {IPMIのアドレス} -u root -p {IPMIのパスワード}  -c GetCurrentBiosCfgTextFile --file {出力ファイル名}
```

```text:BIOS情報の取得（権限不足）
# ./sum -i 10.132.2.248 -u root -p ******** -c GetCurrentBiosCfgTextFile --file current.txt
Supermicro Update Manager (for UEFI BIOS) 1.6.0 (2015/11/06) (x86_64)
Copyright©2015 Super Micro Computer, Inc. All rights reserved


********************************<<<<<ERROR>>>>>*********************************

ExitCode             = 87
Description          = IPMI standard error.
Program Error Code   = 260.2
Error message:
        root privileges are limited. Only users with the Administrator level
    privileges can perform OOB tasks.

********************************************************************************
```

#5. チケットを起票し、rootユーザーの権限を強くしてもらう。
仕方がないので、例えば以下のようなチケットを発行し、rootユーザーに対して権限を強くしてもらいます。ちなみに、rootユーザーよりADMINユーザーの方が権限が強いのですが、ADMINユーザーはSoftLayerの中の人用なので、rootユーザーをADMINユーザー相当に強くしてもらうというリクエストを発行します。

Title:  Add the admin privileges to the IPMI root user
Contents: Could you please change our IPMI root users privileges on these servers to administrator, because we are sometimes requested to use stronger privileges when we access IPMI ?

#6. Sumを使ってBIOS情報を取得してみる（再挑戦）

```text:BIOS情報の取得（成功）
# ./sum -i 10.132.2.248 -u root -p ******** -c GetCurrentBiosCfgTextFile --file 10.132.2.248.txt
Supermicro Update Manager (for UEFI BIOS) 1.6.0 (2015/11/06) (x86_64)
Copyright©2015 Super Micro Computer, Inc. All rights reserved
..........
File "10.132.2.248.txt" is created.
```

今度はうまくいったようです。例えば、以下の結果からHyper-ThreadingやAES-NIが有効になっていることが分かりますね！

```
# less 10.132.2.238.txt
#Please refer to SUM User's guide '4.1 Format of BIOS Settings Text File' for usage.

[Advanced|Boot Feature]
Quiet Boot=01                           // Please enter the value in 2 hexadecimal digits. Default value is <<<01>>>
AddOn ROM Display Mode=01               // *01 (Force BIOS), 00 (Keep Current)
Bootup NumLock State=01                 // *01 (On), 00 (Off)
Wait For "F1" If Error=01               // 00 (Disabled), *01 (Enabled)
INT19 Trap Response=01                  // *01 (Immediate), 00 (Postponed)
Re-try Boot=00                          // *00 (Disabled), 01 (Legacy Boot), 02 (EFI Boot)
Watch Dog Function=00                   // *00 (Disabled), 01 (Enabled)
Power Button Function=01                // *01 (Instant Off), 00 (4 Seconds Override)
Restore on AC Power Loss=02             // 00 (Stay Off), 01 (Power On), *02 (Last State)

[Advanced|CPU Configuration]
Clock Spread Spectrum=00                // Please enter the value in 2 hexadecimal digits. Default value is <<<00>>>
Hyper-Threading (ALL)=00                // 01 (Disable), *00 (Enable)
Cores Enabled=00                        // Please enter the value in 2 hexadecimal digits. Default value is <<<00>>>
Execute Disable Bit=01                  // 00 (Disable), *01 (Enable)
PPIN Control=01                         // 00 (Unlock/Disable), *01 (Unlock/Enable)
Hardware Prefetcher=01                  // *01 (Enable), 00 (Disable)
Adjacent Cache Prefetch=01              // *01 (Enable), 00 (Disable)
DCU Streamer Prefetcher=01              // *01 (Enable), 00 (Disable)
DCU IP Prefetcher=01                    // *01 (Enable), 00 (Disable)
Direct Cache Access (DCA)=02            // 00 (Disable), 01 (Enable), *02 (Auto)
X2APIC=00                               // *00 (Disable), 01 (Enable)
X2APIC_OPT_OUT Flag=00                  // *00 (Disable), 01 (Enable)
AES-NI=01                               // 00 (Disable), *01 (Enable)
Intel Virtualization Technology=01      // 00 (Disable), *01 (Enable)
（以下略）
```

#7. その他情報取得方法

```text:BIOSのBuildDate
# ./sum -i 10.132.2.238 -u root -p xxxxxxxx -c GetBiosInfo
Supermicro Update Manager (for UEFI BIOS) 1.6.0 (2015/11/06) (x86_64)
Copyright©2015 Super Micro Computer, Inc. All rights reserved
....
Managed system...........10.132.2.238
    Board ID.............0844
    BIOS build date......2015/12/17
```

```text:BMCのバージョン
# ./sum -i 10.132.2.248 -u root -p xxxxxxxx -c GetBMcInfo
Supermicro Update Manager (for UEFI BIOS) 1.6.0 (2015/11/06) (x86_64)
Copyright©2015 Super Micro Computer, Inc. All rights reserved
....
Managed system...........10.132.2.248
    BMC type.............X10_ATEN
    BMC version..........03.26
```

```text:BMCの構成情報
# ./sum -i 10.132.2.248 -u root -p xxxxxxxx -c GetBMcCfg --file 10.132.2.248_bmccfg.txt
Supermicro Update Manager (for UEFI BIOS) 1.6.0 (2015/11/06) (x86_64)
Copyright©2015 Super Micro Computer, Inc. All rights reserved
.........
.............................

File "10.132.2.248_bmccfg.txt" is created

# grep X10 10.132.2.248_bmccfg.txt
        <BoardPartNum>X10DRU-i+</BoardPartNum>

```