BIG-IPブータブルUSBを作って起動してみた。

## 記事作成背景
数年前、中古で購入したBIG-IP 2000 を起動したところコンソール画面上に
「Reboot and Select proper Boot device big-ip」
と出力されていました。
"OSが入っているデバイスを選択して"とのことでしたのでHDDにOSが入っていないと判断し
もともと持っていたOSを使用しようと考えてましたが
どうやってHDDへインストールするのかが不明だったので
調べていたところ公式から手順が公開されていました。

https://my.f5.com/manage/s/article/K13164

## 必要なもの
 - BIG-IPのOSファイル (BIGIP-x.x.x.iso)
   ※当たり前ですが、HWに適合するOS versionのもの
   
https://my.f5.com/manage/s/article/K9476

   
 - 4GB以上のUSBフラッシュメモリ(.isoファイルより容量の大きい物)
    
 - RHEL系Linux(カーネルver 2.6以上)
   ※仮想環境でも実施可能、本記事では virtualbox とCentOS7を使用しての記載です。
   RHEL系である必要は BIG-IP OSがRHEL系Linuxを基に構築されているため

## 検証環境
ホストマシン: Windows10​
ゲストマシン: CentOS 7​
ソフトウェア: VirtualBox 6.1.16 (Extension Pack インスト済み ※後述)​
ハードウェア: BIG-IP 2000(OS無し)​
   USBメモリ: Transcend 8GB(USB3.0)


## 実際の手順\/事前準備
私の環境ではVirtualBox(以下VB)を使っていたのでそちらで説明します。​
   ブータブルUSBとして使用したいUSBメモリが2.0, 3.0の場合は後述で手順が増えます。​
   
   仮想マシンはあらかじめ作ってあるものとします。​
   作り方はこちらの記事などが参考になるかと思います。

https://qiita.com/HITOSUKE/items/fd6975420ddc6d336405

   https://qiita.com/HITOSUKE/items/5cc5c6a75e88317796f3

   https://qiita.com/HITOSUKE/items/80108e222324b31644c1

   
   ※実機のLinuxで行っている場合は **「3.USBデバイスの確認」** から実施。

:::note warn
ブータブルUSB作成、BIG-IPへのインストールは​
早くて1.5時間​、遅くて3,4時間程度かかります。
:::
   
  ## 1. USBメモリの準備
 VBを立ち上げ、ブータブルUSBを作成するための仮想マシンを選択します。
 
 ①の設定をクリックし"設定"ポップアップが出力されたら
 
 ②のUSBを選択します。
 **「USBコントローラーを有効化」** にチェックされ、使用したいUSBのバージョンが
 表示されていたら、適切なものを選択します。(筆者はUSB3.0を選択しています)
 ※ここで表示されなければ、**2.Extension Pack** のインストール を参照してください。
 
​![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/1c9eb0f2-b088-1f5e-7bb4-e9c8f4360e8a.png)
<br>

## 2.Extension Packのインストール
**「1.USBメモリの準備」** で使用したいUSBメモリのラジオボタンが存在しなかった場合
プラグイン(Extension Pack)を追加する必要があります。

※ **「1.USBメモリの準備」** でUSBバージョンが表示されている場合は
   **「3.USBデバイスの確認」** を参照してください。

Extension Packを追加すると仮想マシン上で使用できる
USBのバージョンを増やすことができます。
DLするExtension Packは動作中のVBと同じバージョンである必要があります。
下記サイトからダウンロードして、インストールしてください。

https://www.virtualbox.org/wiki/Downloads

:::note info
VBのバージョン確認は
[ヘルプ]→[VirtualBoxについて] をクリックすれば参照できます。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/7a84d5bc-3cee-28d8-93fa-64bec006e44b.png)
<br>

Extension Pack をインストールしたら
[設定]→[USB]→[②]を選択してください
そこでブータブルUSBとしたいデバイスを選択してください。
選択後、仮想マシンを起動しましょう。
特にログなどが出ていなければ
問題なく仮想マシン上でUSBメモリが認識されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/2b09743a-9931-2e23-f5b3-52829f9bd54c.png)

## 3.USBデバイスの確認
仮想マシン\/実機でUSBメモリを扱う準備ができたら、USBメモリを挿入してください。
挿入後に下記コマンドを実行します。 
```
#lsblk
```
“SIZE”列でUSBメモリに近い容量且つ、仮想マシンに拡張HDDなどを使用していなければ
“NAME”列のsdbという名前で認識されている可能性があります。
これで確認できれば仮想マシン上でUSBメモリを扱えています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/cef57401-d6c5-960c-efe0-477614a4a2a8.png)

## 4.Linux側の環境構築_1
ブータブルUSBを作成するのに必要なコマンドを確認しておきます。
```
# whereis rpm2cpio
# whereis cpio
```
空行ではなく、/usr/bin/などの文字列が出力されればOK
大概の場合デフォルトでインストールはされているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/a81869e0-223f-8480-1e1b-20540badbc34.png)

※コマンドが存在しない場合は下記コマンドでインストールをおこなう。
```
# sudo yum install rpm2cpio
# sudo yum install cpio
```

※インストールしたいBIG-IPのHWによって他に必要なコマンドがあるそうなので
その場合は下記リンクを参照してください。

https://support.f5.com/csp/article/K13164 


## 5. Linux側の環境構築_2
Perlのインストールを行います。Perlをインストールするには
```
# sudo yum install perl
```
です、実行後インストールが終了したら次のコマンドを入力してください。
```
# perl –v
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/92783614-02ba-34b6-aaa7-757614891a18.png)

これでインストールしたperl言語のバージョン確認ができます。
今回インストしたものは、v5.16.3なので作成の要件である5.8をクリアしています。

また、他にPerlで必要なライブラリをインストしないと上手く動かないので
下記も必ずインストールしてください。
```
# yum install perl-libwww-perl
# yum install perl-XML-Simple
```

## 6.BIG-IP OS(.iso)ファイルをLinuxへ移す
仮想マシンを 事前準備 の手順で作成してあるとすれば
windows\/MacなどホストOSとは通信疎通性があるので
ipアドレスを調べれば、FTPなどで、コピーができるはずです。
(たいていの場合 192.168.56.1/24がホストOSに割り当てられている)
サンプルの手順は下記コマンド。
```
$ cd ~
$ ftp ホストオンリーアダプターのホストOS側IP
> ls
  BIG-IPのOS.iso があることを確認する。
> get BIG-IPのOS.iso
> bye
$ ls
  BIG-IPのOS.iso があることを確認する。
```
これでOSをLinuxのログイン中ユーザーのホームディレクトリにコピーできました。


## 7.ループバックマウント実行
```
# sudo mount -t loop BIGIPx.x.x.isoまでのPATH /mnt/cd
```
※このオプション(-t loop)はrootユーザでのみ実行可能。
　また、必ず /mnt/cdを指定して実行してください。
   /mnt/cd ディレクトリがない場合は下記コマンドで作成してください。
```
# mkdir /mnt/cd 
```
これは ”ループバックマウントオプション” といって
.isoファイル(物理媒体である光学ディスクそのものをファイル化したもの)を
マウントすることでその中身に何があるのかを閲覧することができます。


ループバックマウント実行後、下記コマンドを発行してください。
```
# cd /mnt/cd
# ls 
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/6f1919b8-c499-6fc7-016d-ce936f22a8c2.png)

上記のような、ファイルが展開されていればOKです。

次の手順へ移る前に念のためプロンプトと現在のディレクトリを
下記コマンドで必ず確認してください。
```
[xxxx@yyyyy cd]# pwd
```

## 8.USBメモリにOSを書き込む
ブータブルUSBを作るためのスクリプトを実行します。
```
[xxxx@yyyyy cd]# ./mkdisk
```
を実行してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/754416f2-7dfb-8b45-e1b1-6985ea7b9ccb.png)

上の行でブータブルUSBとするUSBメモリを指定しています。
今回は1を選択。(※画像では64GBとなっていますが無視してください。)

※モジュール(パッケージ)が足りないなどエラーが出た場合
インストールをする必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/10544db2-500d-9a86-4d82-611e9c750c9e.png)
このエラーが表示された場合は **5. Linux側の環境構築_2**  の perl-libwww-perl, perl-XML-Simple 参照しなおしてください。
<br>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/57b54321-e0d2-bfe1-4638-682faffadf08.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/96f23415-79e2-976a-526c-d65b5c608c08.png)
どのHW用USBを作成するかを尋ねられています。
今回は2000シリーズなので 3を選択します。

:::note warn
選択後、15分~30分以上待ち時間があります。
処理が止まっているように見えても電源を切るなどせずに待機してください。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/c1eb6ce5-d721-18a8-4248-6d2b37468d15.png)

処理が終わったら下記コマンドを実行して、USBメモリを抜きましょう。
```
# umount /mnt/cd
```

## 9.ブータブルUSBメモリ作成後
USBメモリをBIG-IP本体に挿し、電源を入れてください。

OSが無い状態だとコンソール接続を行うと下記のように表示されていると思います。
```
--- Press <ESC>( for AOM Command Menu.
```
2000シリーズなどであれば液晶パネル上に「Power Standby Mode」となっている状態で
☑ボタンを押して起動/インストールをします。

:::note warn
何度か再起動がかかったりでかなり時間がかかりますが
待機していて下さい。
:::

以下のようにログインを求められればインストールは完了です。
お疲れ様でした。
```
localhost.localdomain login:
Password:
```

## 参考サイト

https://support.f5.com/csp/article/K04931303

https://support.f5.com/csp/article/K13164

https://support.f5.com/csp/article/K13117

https://eng-entrance.com/linux-perl

http://blog.penlabo.net/archives/367

https://tech.kurojica.com/archives/11847/

https://www.virtualbox.org/wiki/Downloads


## 裏話
筆者はこのUSB作成の際、BIG-IPのHDDが3.5インチのもので重たく感じたので
HDDマウントキットと2.5インチのHDDで換装ができるのかを実験していました。

※HDDにメーカー,型番縛りなどがあるのかどうかを検証したかったため。

BIG-IPのフタをはずすと以下のような構成になっているようでした。
![PXL_20210604_163612603.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/464757e7-d257-a70f-cb1f-0fb374231e0c.jpeg)

左を機器前面、右を機器背面 とみて
右側シルバー色のが電源
真ん中上側にあるのがHDD
真ん中下側のシルバー色のドットっぽいヤツがCPUのヒートシンク(中はCeleronが入ってるらしい)
その下にある見えづらいのがRAM

<br>

HDDはWDの320GBブラックが採用されているようでした。
個人的に、こういったネットワーク機器はWD Red が採用されていると考えていましたが
ここにはちょっと驚きでした
![20240421_011013.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/9e0e6797-7fbd-936a-a0d7-7e392cda4e91.jpeg)

RAMは DDR3 8GB ECC対応のSAMSUNG製の物が挿し込まれてるようでした。
ECC付きなのは想像通り。
![PXL_20210604_163616720.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/150dcae5-4775-9db8-d9ff-fb8a8c72c11e.jpeg)


### 換装準備
とはいっても、そんな難しくありませんでした
既存SATAケーブルを抜いて、マウントキットをつけた新HDDをねじ止めするだけ。

実はこれ以外に
3.5インチのWD Red HDD(下記写真)と
2.5インチのSSDでも換装できるのかを検証していました。

※2.5インチのHDD写真は当時、撮り損ねたのでありません。

![20240421_011007.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3774769/bd0587da-ac7d-49f7-75bc-68afd08e3dda.jpeg)


## 結果
どのデバイスでも正常にブート、設定を行うことができました。
ライセンス系は試していない(BIG-IPはHWとライセンスの紐づけがかなり複雑らしい)ので
判明はしていませんが、基本操作を覚えるなどの用途であれば十分そうです。