BIG-IP LTM VEをVirtualBox上で稼動させる
モチベーション
- BIG-IP LTM VEはVirtualBox上での稼動をサポートしていない
- 
サポート仮想化基盤
- VMware ESXi 5.1 and 5.5
 - vCloud Director 5.1
 
 
 - 
サポート仮想化基盤
 - でも、とりあえず手元の環境で動かしたい
 
動作確認環境
| Host | CentOS 6.5 x86_64 | 
| 仮想化基盤 | VirtualBox 4.3.20 | 
| BIG-IP LTM VE | v11.3.0 HF1 | 
BIG-IP LTM VE Trialのダウンロード
- ダウンロードにあたってユーザ登録が必要
 - 
https://www.f5.com/trial/big-ip-ltm-virtual-edition.phpからダウンロードする
- 90-Days BIG-IP Trial かつ VMware ESXi用
 
 
- ダウンロードしたら、ハッシュ値(md5)を比較して破損してないか確認する
 
VirtualBoxにインポート
- VirtualBoxメニューバー[ファイル]->[仮想アプライアンスのインポート]
 
- 名前(仮想マシン名)、CPU、RAM(メモリ)はHost環境にあわせて適宜変更する
 
| 変更前 | 変更後 | |
|---|---|---|
| 名前 | vm | BIG-IP_11.3.0 | 
| CPU | 1 | 1 | 
| RAM | 2048MB | 1024MB | 
- ネットワークアダプターは以下のようにする
- どのネットワークアダプターがHAやExternalなどかはマウスカーソルを合わせることで確認できる
 
 
| ネットワークアダプター(HA) | ■ | PCnet-FAST 3 | 
| ネットワークアダプター(External) | ■ | Intel PRO/1000 MT Desktop | 
| ネットワークアダプター(Internal) | ■ | Intel PRO/1000 MT Desktop | 
| ネットワークアダプター(Management) | ■ | Intel PRO/1000 MT Desktop | 
インポート後の設定
- ネットワークアダプターが以下となっていることを確認する
 
| ネットワークアダプター1 | ■ | 1.1 | ブリッジアダプター | Intel PRO/1000 MT Desktop | 
| ネットワークアダプター2 | ■ | 1.2 | 内部ネットワーク | Intel PRO/1000 MT Desktop | 
| ネットワークアダプター3 | ■ | 1.3 | ブリッジアダプター | Intel PRO/1000 MT Desktop | 
| ネットワークアダプター4 | ■ | 1.4 | ブリッジアダプター | PCnet-FAST 3 | 
- シリアルポートの有効化
 
- I/O APICの無効化
 
BIG-IP LTM VE起動後の設定
- ログイン情報
 
| username | password | |
|---|---|---|
| CLI | root | default | 
| GUI | admin | admin | 
- 注意点は以下2点
- キーボード設定がUS
 - SSHアクセスの際はチャレンジレスポンス認証
 
 
localhost emerg logger: Re-starting chmandへの対処
- BIG-IP LTM VE起動後、1~3分ほど待つとログインプロンプトが表示される
 - ただし、10秒ごとに
emerg logger: Re-starting chmandが出力され続ける 
- 
/var/log/ltmを確認するとchmandによって以下errおよびcritメッセージが出力されていることを確認できる- 
chmandがプラットフォームを正しく識別できなかったことが原因のようだ。 
 - 
 
/var/log/ltm
Apr 29 12:37:32 localhost notice chmand[4325]: 012a0005:5: Starting ChassisManager (chmand)
Apr 29 12:37:32 localhost info chmand[4325]: 012a0006:6: Found platform 'Unknown' in /PLATFORM
Apr 29 12:37:32 localhost err chmand[4325]: 012a0003:3: unexpected init failure : HalSvcs: platform name not found in HAL system types
Apr 29 12:37:32 localhost crit chmand[4325]: 012a0002:2: critical platform initialize failure. exiting...
Apr 29 12:37:32 localhost err chmand[4325]: 012a0003:3: Shutdown of LCD message pass handling failed: Unknown Type
Apr 29 12:37:42 localhost notice chmand[4325]: 012a0005:5: Stopping chmand
Apr 29 12:37:42 localhost notice chmand[5802]: 012a0005:5: Starting ChassisManager (chmand)
Apr 29 12:37:42 localhost info chmand[5802]: 012a0006:6: Found platform 'Unknown' in /PLATFORM
Apr 29 12:37:42 localhost err chmand[5802]: 012a0003:3: unexpected init failure : HalSvcs: platform name not found in HAL system types
Apr 29 12:37:42 localhost crit chmand[5802]: 012a0002:2: critical platform initialize failure. exiting...
Apr 29 12:37:42 localhost err chmand[5802]: 012a0003:3: Shutdown of LCD message pass handling failed: Unknown Type
- このままでは操作がしにくいので、メッセージを出力している
chmandを停止する 
# bigstart stop chmand
- 
/bin/qpを以下となるように編集する- 
if [ -f /bin/halid ]; thenより上部を編集すればよい 
 - 
 
/bin/qp
# !/bin/sh
#
# Script to query and return platform type (D44, D50, etc.)
#
# It uses the info saved in /PLATFORM if available; otherwise it
# simply calls halid & returns the appropriate field (writing /PLATFORM as well)!
if [ -f /PLATFORM ]; then
    grep platform= /PLATFORM | sed -e 's/platform=//'
    exit 0
fi
if [ -f /bin/halid ]; then
    /bin/halid > /tmp/platform_info &
    pid=$!
    cnt=$(expr 10)
    while [ $cnt -gt 0 ]; do
    if [ -n "$pid" ]; then
        kill -0 $pid > /dev/null 2>&1
        if [ $? -eq 1 -a -f /tmp/platform_info ]; then
        break
        fi
    else
        break
    fi
    cnt=$(expr $cnt - 1)
    # amazingly, /bin/sleep is off-by-one when run by 'throttle' which is what 
    # live install does, so give plenty of time here waiting for 
    # halid to finish. ( 'time throttle sleep 5' = 4.2s reliably)
    sleep 5
    done
    if [ $cnt -gt 0 -a -f /tmp/platform_info ]; then
    cnt=`grep -c system_id  /tmp/platform_info`
    if [ -n "$cnt" -a $cnt -eq 1 ]; then
        family=`grep system_family /tmp/platform_info | awk '{print $3}'`
        platform=`grep system_id /tmp/platform_info | awk '{print $3}'`
        host=`grep host_id /tmp/platform_info | awk '{print $3}'`
        systype=`grep system_type /tmp/platform_info | awk '{print $3}'`
        echo "platform=${platform}" > /PLATFORM
        echo "family=${family}" >> /PLATFORM
        if [ -n "$host" ]; then
            echo "host=${host}" >> /PLATFORM
        fi
        if [ -n "$systype" ]; then
            echo "systype=${systype}" >> /PLATFORM
        fi
        echo "${platform}"
        rm -f /tmp/platform_info
        exit 0
    fi
    else
    if [ -n "$pid" ]; then
        kill -9 $pid > /dev/null 2>&1
    fi
    rm -f /tmp/platform_info
    fi
fi
echo "platform=Unknown"  > /PLATFORM
echo "family=Unknown" >> /PLATFORM
echo "host=Unknown" >> /PLATFORM
echo "Unknown"
exit 1
--- /bin/qp.org 2014-03-24 14:41:46.000000000 -0700
+++ /bin/qp     2015-04-29 12:50:28.000000000 -0700
@@ -4,25 +4,11 @@
 #
 # It uses the info saved in /PLATFORM if available; otherwise it
 # simply calls halid & returns the appropriate field (writing /PLATFORM as well)!
-
-# Check whether the platform information is fully populated and valid.
-# Note the boot scripts populate platform but not family, systype, or host.
-populated=0
 if [ -f /PLATFORM ]; then
-    . /PLATFORM
-    if [ "${platform:-Unknown}" != "Unknown" -a \
-            "${family:-Unknown}" != "Unknown" -a \
-            "${systype:-Unknown}" != "Unknown" -a \
-            "${host:-Unknown}" != "Unknown" ]; then
-         populated=1
-    fi
-fi
-if [ $populated -ne 0 ]; then
-    echo "$platform"
+    grep platform= /PLATFORM | sed -e 's/platform=//'
     exit 0
 fi
-
 if [ -f /bin/halid ]; then
     /bin/halid > /tmp/platform_info &
- 
/tmp/platform_infoを以下となるように編集する 
/tmp/platform_info
Info:system_id         = Z99
Info:system_family     = 0x80000000
Info:system_type       = 0xb
Info:system_id         = Z99
Info:host_id           = Z99
Info:base_mac          = @leave this unchanged@
Info:mac_offset        = 0
--- /tmp/platform_info.org      2015-04-29 12:37:40.000000000 -0700
+++ /tmp/platform_info  2015-04-29 12:52:30.000000000 -0700
@@ -1,7 +1,7 @@
-Info:system_id         = unknown
+Info:system_id         = Z99
 Info:system_family     = 0x80000000
 Info:system_type       = 0xb
-Info:system_id         = unknown
-Info:host_id           = unknown
-Info:base_mac          = 08:00:F5:59:B9:00
+Info:system_id         = Z99
+Info:host_id           = Z99
+Info:base_mac          = @leave this unchanged@
 Info:mac_offset        = 0
- 
/PLATFORMを以下となるように編集する 
/PLATFORM
platform=Z99
family=0x80000000
host=Z99
- 以上、設定変更後に再起動する
 
初期設定
- DHCPでManagement-IPが割り当てられるので、コンソール上で
ifconfigコマンドで確認する - Webブラウザのアドレスバーに
https://《Management-IP》/を入力する - あとはSetup UtilityにしたがってアクティベーションならびにManagement-IPに固定IPを割り当てる
 
トラブルシュート
GRUB Loading Stage2..が出力されて以降進まない
- ネットワークアダプターの設定が誤っている
 - シリアルポートを有効化していない
 
MP-BIOS bug: 8254 timer not connected to IO-APICが出力される
- I/O APICを無効化すれば解消される
 
補足説明
- chmand
- Provides chassis monitoring and configuration, as well as other related functions.
 - Cannot perform platform identification, send platform information to MCPD service, or start SCCP services.
 
 - MCPD
- Known as the Master Control Program, controls messaging and configuration.
 - Cannot manage traffic; cannot retrieve or update system status; users cannot reconfigure system; disables some of the other services.
 
 - SCCP(switch card control processor)
- The SCCP is a separate subsystem that controls the F5 switch hardware.
 
 










