ファームウェアを 2025/03 現在で最新のものにアップデートした ConnectX-4 VPI は、Flexboot が UEFI に対応しているとのこですが、ConnectX-3 VPI が BIOS モードで立ち上がるような CUI は 立ち上がりませんでした。調べた所、筆者の環境だけのようでした。その代わり、サーバ上で Networking stack を Enabled にして iPXEではなくPXEブートする方法では確かにPXEパケットはやり取りできています。(参考までにCX3ではブートメニューに現れませんでした。)
しかし、iPXEではなくPXE ブートでは iSCSI 接続を iBFT として登録する方法はありません。そこで、PXEから bootfileを signed ipxe.efi にしたのですが、起動はするものの上手く menu.ipxe (/srv/tftp/Altiris/iPXE/GetPxeScript.aspx)を取得することができませんでした。どうやらこの signed ipxe.efi が ipoib には完全には対応していなさそうです。そこで、補助的にオンボードの ethernet を enabled にして、一旦 signed ipxe.efiを起動させてから ipoib インターフェースを ipxe のコマンドで dhcp にて up 、オンボードのethernet を ifclose 、つづいて sanhook で iscsi root イメージを ibft に登録してからブートしたところ、今度は上手く行きました。表題に間接的といれたのはこのためです。
基本的には iPXE経由でセキュアブートする方法とあまり違いはありませんので、異なる所だけですが具体的には以下のようになります。
参考までに mstflint を使った ファームウェア(cx4-firmware.binが対象の場合)の更新は以下の通りです。
今回は以上です。それでは。
しかし、iPXEではなくPXE ブートでは iSCSI 接続を iBFT として登録する方法はありません。そこで、PXEから bootfileを signed ipxe.efi にしたのですが、起動はするものの上手く menu.ipxe (/srv/tftp/Altiris/iPXE/GetPxeScript.aspx)を取得することができませんでした。どうやらこの signed ipxe.efi が ipoib には完全には対応していなさそうです。そこで、補助的にオンボードの ethernet を enabled にして、一旦 signed ipxe.efiを起動させてから ipoib インターフェースを ipxe のコマンドで dhcp にて up 、オンボードのethernet を ifclose 、つづいて sanhook で iscsi root イメージを ibft に登録してからブートしたところ、今度は上手く行きました。表題に間接的といれたのはこのためです。
基本的には iPXE経由でセキュアブートする方法とあまり違いはありませんので、異なる所だけですが具体的には以下のようになります。
# /etc/dhcp/dhcpd.conf --snip group ind40 { option domain-name "ind40.example.com"; host sv112ind { hardware ethernet AA:BB:CC:DD:01:12; } host sv113ind { hardware ethernet AA:BB:CC:DD:01:13; } } subnet 10.1.40.0 netmask 255.255.255.0 { option domain-name-servers 10.1.1.64; option domain-name "example.com"; option routers 10.1.40.50; option broadcast-address 10.1.40.255; next-server 10.1.40.50; if substring(vendorclass, 0, 9)="PXEClient" { if pxetype=00:06 or pxetype=00:07 { filename "ipxe-signed/ipxe.efi"; # filename "ipxe-signed/snponly.efi"; } else { filename "menu.ipxe"; } } pool { range 10.1.40.200 10.1.40.250; } } grou ib40 { option domain-name "ib40.example.com"; host sv112 { option host-name "sv112"; hardware ethernet 11:22:33:44:01:12; option dhcp-client-identifier=ff:00:00:00:00:00:02:00:00:02:c9:00:50:6b:11:22:33:44:01:12; fixed-address 10.1.40.112; } host sv113 { option host-name "sv113"; hardware ethernet 11:22:33:44:01:13; option dhcp-client-identifier=ff:00:00:00:00:00:02:00:00:02:c9:00:50:6b:11:22:33:44:01:13; fixed-address 10.1.40.113; } } # /srv/tftp/Altiris/iPXE/GetPxeScript.aspx --snip item ib40ind-test indirect ib40 test --snip :ib40ind-test iseq ${domain} ind40.example.com && goto ib40 || goto shell :ib40 ifclose net0 dhcp net2 set initiator-iqn iqn.1868-01.com.example:${hostname} set root-path iscsi:10.1.40.50::::iqn.1868-01.com.example:i50.deb12-amd64-02 sanboot --drive 0x80 ${root-path} goto start --snip :shell echo Type 'exit' to get back to the menu shell set menu-timeout 0 goto start #/etc/今回の前提としてはオンボードのnicが2ポートありそちらが ipoib インターフェースより先に起動するという点です。もしオンボードのnicが一枚なら、上述の dhcp net2 は dhcp net1 になります。( iPXE 上のデバイス名は iPXE のシェルで ifstat とすれば確認できます。)
参考までに mstflint を使った ファームウェア(cx4-firmware.binが対象の場合)の更新は以下の通りです。
mstflint -d 18:00.0 -i cx4-firmware.bin -allow_psid_change burn # 再起動後、mstconfig にて UEFI を有効にする mstconfig -d 18:00.0 set EXP_ROM_UEFI_x86_ENABLE=True UEFI_HII_EN=True # 今一度再起動して、boot device に ConnectX-4 が含まれていることを BIOS で確認また、flexboot を更新する場合は、以下のようになります。
# 確認 mstflint -d 18:00.0 q --snip Rom Info: type=UEFI version=14.21.17 cpu=AMD64,AARCH64 type=PXE version=3.6.102 cpu=AMD64 --snip # バックアップ mstflint -d 18:00.0 rrom CX4-14.21.17.efirom # ファイルの取得、解凍 wget https://www.mellanox.com/downloads/Drivers/FlexBoot-3.6.204_4115_14_22_14_RELEASE_X64_AARCH64_0x1013.zip unzip FlexBoot-3.6.204_4115_14_22_14_RELEASE_X64_AARCH64_0x1013.zip # 更新 mstflint -d 18:00.0 --allow_rom_change brom FlexBoot-3.6.204_4115_14_22_14_RELEASE_X64_AARCH64_0x1013.efirom以前にも書いたのですが、iPXEから公式の signed ipxe.efi がでれば良いですね。
今回は以上です。それでは。
コメント
コメントを投稿