ゆきさき

インフラエンジニアっぽい何か。

UEFIネイティブな NutanixComunityEdition

このブログはNutanix Advent Calender 2019 (4枚目) 23日目 として作成しました。

はじまり

 新しいサーバー(富士通PrimergyTX1320M4)を購入したので

 NutanixCEでクラスタ組んで遊んでみようと ウキウキで準備進めるが、どうにも上手くいかない。

 過去NVMeのSSD(※非サポート) を組み込んで、インストール時の構成チェックでエラーが出て失敗したため

 Nutanix CEのGETTING STARTEDは確認したが、問題点は思いつかない。


 そもそも、インストールで失敗する以前の問題で

 Nutanixのインストーラーが全く見えない。嫌な予感がしてきた。

問題点


 調べてみると、いけてない状況が分かった。

  • NutanixCEのイメージファイルは、どうやらMBR形式のみ提供されているらしい。(GPT形式はない)
BIOS UEFI
古い 新しい
MBR形式が使用可能 GPT形式が使用可能


  • 富士通のサーバーは購入したモデルから、BIOS互換のレガシーブート機能がなくなったらしい。 *1

PRIMERGY RX1330 M4 / TX1320 M4 / TX1330 M4 ご使用上の留意・注意事項

BIOS モードについて 本装置では、BIOS の設定は UEFI モードのみです。


 あれ、、、これ詰みでは?

解決策


何とかする方法が きっとあるはず…


 …ありました!

GitHub - abbbi/nutanix_uefi: how to make nutanix community installation image bootable from uefi

 CentOSのメディアからEFIのファイルをまるっと移植する、外科手術的な解決方法。

 昔LPICの勉強をしたときにちらっと見かけた程度のコマンドが並んでいる。

 よくわからないけど 何とかなりそう。

この記事でやること


  • 実際にやってみて、日本語の情報を作る。

  • ついでに最新のNutanixCEへ対応する。*2

実際にやってみた結果


<準備物>

  • ce-2019.11.22-stable.img *3

  • CentOS-7-x86_64-DVD-1908.iso *4

 作業環境は適当なCentOS7、上記isoから作成したサーバーで実施した。(minimalインストール)

 NutanixのAHVがCentOSの7系のようなので、使用するISOもCentOS 7系のものが良いと思われる。

1. NutanixCEのイメージファイルを40MBほど拡張する。

# fallocate -o 7444889600 -l 40m ce-2019.11.22-stable.img

 -o でオフセットを指定して、NutanixCEのイメージのおしりに40MBの領域を拡張する。

 念のためcfdiskでディスクサイズを確認したが、以前のバージョンとサイズは同様の7444889600だった。

                     cfdisk (util-linux 2.23.2)
               Disk Drive: ./ce-2019.11.22-stable.img
                  ★Size: 7444889600 bytes, 7444 MB

2. 拡張した領域に新規パーティションを作成する。

# cfdisk ./ce-2019.11.22-stable.img

 fallocateで拡張した40MBの領域を選択して、

 [ New ] ⇒ [ Write ] ⇒ [ Quit ] で新規パーティション作成。

3. ディスクとしてマウントできるようにループバックデバイスを作成する。

# kpartx -av ./ce-2019.11.22-stable.img

  add map loop0p1 (253:2): 0 14538752 linear /dev/loop0 2048
  add map loop0p2 (253:3): 0 81920 linear /dev/loop0 14540800

 kpartxはディスクイメージのパーティション情報を読み取って、

 パーティション毎にデバイスマップを作成してくれる。

 何がうれしいかというと、/dev/mapper/loop0p1、loop0p2といったデバイスとして扱えるようになるので

 この後の手順でマウントする作業が簡単になる。

4. 拡張したパーティションをvfatでフォーマットする。

# mkfs.vfat /dev/mapper/loop0p2 *5

 フォーマットを行うのは今回拡張したloop0p2。

5. ここまで準備したNutanixCEのイメージと、CentOSのISOをマウントする。

# mkdir /tmp/nutanix_vfat

# mkdir /tmp/nutanix_root

# mkdir /tmp/centos

# mount /dev/mapper/loop0p1 /tmp/nutanix_root

# mount /dev/mapper/loop0p2 /tmp/nutanix_vfat

# mount -o loop CentOS-7-x86_64-DVD-1908.iso /tmp/centos

 適当にマウント用のディレクトリを作成して、マウントします。

6. CentOSのメディアから、NutanixCEのイメージに EFIを移植

# cp -r /tmp/centos/EFI /tmp/nutanix_vfat/

 ⇒移植先はNutanixCEに拡張した40MBのパーティションです。

7. grub.cfgをNutanix用に書き換える。

# vi /nutanix_vfat/EFI/BOOT/grub.cfg

 単に移植しただけでは、CentOSを起動する設定のため

 NutanixCEの構成に合わせてConfigファイルを書き換える。

 

  • 元あったファイルの中の中段のmenuentry 以下はCentOS用なのですべて削除する。

  • 参考情報をもとに以下のように書き換える。

set default="0"

function load_video {

insmod efi_gop

insmod efi_uga

insmod video_bochs

insmod video_cirrus

insmod all_video

}

set timeout=60

menuentry 'Nutanix Community Edition AHV (4.4.77-1.el7.nutanix.20191030.415.x86_64) 7 (Core)' --class nutanix --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.4.77-1.el7.nutanix.20191030.415.x86_64-advanced-6e28729c-5954-44c8-87a9-70efa532e7d2' {

load_video

set gfxpayload=keep

insmod gzio

insmod part_msdos

insmod ext2

if [ x$feature_platform_search_hint = xy ]; then

search --no-floppy --fs-uuid --set=root 6e28729c-5954-44c8-87a9-70efa532e7d2

else

search --no-floppy --fs-uuid --set=root 6e28729c-5954-44c8-87a9-70efa532e7d2

fi

linuxefi /boot/vmlinuz-4.4.77-1.el7.nutanix.20191030.415.x86_64 root=UUID=6e28729c-5954-44c8-87a9-70efa532e7d2 ro crashkernel=128M rhgb quiet hugepages=0 intel_iommu=on,igfx_off iommu=pt elevator=noop vga=791 vfio_iommu_type1.allow_unsafe_interrupts=1

initrdefi /boot/initramfs-4.4.77-1.el7.nutanix.20191030.415.x86_64.img

}

 NutanixCEが参考情報より新しいバージョンなので、一部情報は実機を見て書き換えた。

  • ディスクのUUIDを更新

# blkid

/dev/mapper/loop0p1: UUID="6e28729c-5954-44c8-87a9-70efa532e7d2" TYPE="ext4" ★UUIDの値を更新
/dev/mapper/loop0p2: SEC_TYPE="msdos" UUID="5947-925F" TYPE="vfat"
  • 初期RAMイメージのファイル名を更新

# /tmp/nutanix_root/boot

# ls

initramfs-4.4.77-1.el7.nutanix.20191030.415.x86_64.img ★初期RAMイメージのファイル名を更新
vmlinuz-4.4.77-1.el7.nutanix.20191030.415.x86_64
  • set defaultの値を更新

 NutanixCEのバージョンによる変更点ではないが、

 menuentryは0から数えるのでset default=1で指定されているものがない。

 このままでは、サーバーの電源ON時に自動的に起動せずにメニュー選択画面で止まってしまう。

 今回書き換えて追加している0番目のmenuentryの項目を指定しておくのが良さそう。

まとめ


  • NutanixがOSSベース(AHVがCentOSベース)のため、OSSの知識で力業な対応もできるらしい。 *6

  • 最近出たNutanixCE 5.11 でも同様の方法で何とかなる。

  • Nutanix CEのクラスタ構成自体は非常に簡単で、今回のトラブル解決後 1時間程度で出来上がった。*7

*1:BIOSとの互換のため、MBR形式を使用可能にする機能。UEFI-CSM

*2:作成時点の最新版は、2019年11月22日リリースのNutanixCE 5.11

*3:登録してMyNutanixからダウンロードできます

*4:EFIのドナーとなるCentOS7のインストールメディア

*5:mkfs.vfatコマンドがない場合は、yum install dosftools で

*6:あくまで個人的な環境でしかやらないとは思いますが。

*7:このトラブル解決までには約6時間かかりました。。