スキップしてメイン コンテンツに移動

投稿

ConnectX-4 VPIを使い ipoib + 間接的 iPXE にて Debian 12 を iSCSI root で セキュアブート

ファームウェアを 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経由でセキュアブートする方法 とあまり違いはありませんので、異なる所だけですが具体的には以下のようになります。 # /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;...
最近の投稿

最小限のgrub.cfgでシリアルコンソールを設定

とある iSCSI root の環境では、サーバが kvm リダイレクションに対応していないものの、シリアルコンソールリダイレクションには対応しているので、シリアル経由で操作できる最小限の grub.cfg を記述しました。といっても大したことではないのですが、update-grubを使わずに、手動で grub.cfg を設定する方法はあまり見かけないので備忘録として挙げてみることにしました。 # /boot/grub/grub.cfg serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 terminal_input --append console serial terminal_output --append console serial set default="0" set timeout=20 menuentry 'Debian 12 iSCSI root'{ linux /boot/vmlinuz-6.1.0-29-amd64 root=UUID=efde20a1-b46c-4a51-86d0-cf7b3cc9f39c rw ip=::::::dhcp iscsi_auto net.ifnames=0 rootfstype=xfs rootwait console=tty0 console=ttyS0,115200n8 initrd /boot/initrd.img-6.1.0-29-amd64.ib } 最初の3行が grub をシリアルコンソールで操作する設定で、linux 行の最後の console=tty0 console=ttyS0,115200n8 が linux をシリアルコンソルールで操作する設定です。console が2つありますが、tty0 と ttyS0 の2つをそれぞれ console として登録する設定になります。 簡単ですが、今回は以上です。それでは。

ConnectX-3 VPIを使い ipoib 経由にて Debian 12 を iSCSI root で boot

ConnectX-3 VPIなんですが、uefi の rom はあるだろうと思っていたのですが、調べた所、どうやら Legacy rom しかないらしく、セキュアーブートはできないのですが、ipoib 経由で iSCSI root はできたので、備忘録として挙げてみることにしました。 まず、大まかな流れですが、iSCSI target 上で disk イメージを作成し targetcli をつかってアクセスできるようにしておきます。 なお disk imageは uefiクライントも共有できるように gptでパーティションを作成し grub(uefi) を設定していますが、今回は pxelinux が kernel と initrd を直接読み込むので問題はありません。 次に、ConnectX-3の場合 ブートデバイスとして起動すると、flexboot ( iPXE ) が立ち上がるのですが、Legacy ブート なのでサーバ側は 前述のように grub ではなく、 pxelinux を tftp サーバ上で設定します。なお今回は menu.ipxe 経由で disk イメージを iSCSIデバイスとしてフックして iBFT を登録させておいてから、 pxelinux にhttpでチェーンするようにしました。( http server ( apache2 ) の設定は前回を参照してください。 ) 次に、dhcp サーバを設定し、menu.ipxe を取得できるようにしておきます。なお、 dhcpサーバーについては、残念ながら Debian 12 の isc-dhcp-server 場合 ipoib での bootp/dhcp には対応しておらず、今回は Ubuntu 24.04 LTS で構成 しました。また今回はiSCSIターゲットは 別セグメントにありますが、dhcpd.conf が正しく default gw を指定しルーティングが機能していれば問題はありません。 以下設定詳細です。iSCSI イニシエータ(クライアント) が 10.1.40.112/sv112, iSCSI ターゲット(サーバ)が10.1.56.106/sv106, tftp/httpサーバが10.1.40.50/i50としています。 まず、iSCSI ターゲット上で disk ...

targetcli コマンドをシェルから直接実行する

targetcliは非常にわかりやすいインターフェースを持っているのですが、iSCSI ターゲットの数が増えてくると、例えば ls コマンドでは対象となる表示項目も増えてしまい少し操作がわかりにくくなってしまいますし、そもそもコマンドを一々打つのは面倒なのが正直なところです。なので、直接シェルからtargetcliのコマンドを打てないかとおもい、helpを見たところ" CMD Run targetcli shell command and exit"とありました。そこで試しに以下のようなコマンドをシェルから打った所、成功しましたので備忘録として挙げてみることにしました。 $ sudo targetcli /backstores/fileio/ create deb1290-amd64-dvd1 /srv/tftp/debian-12.9.0-amd64-DVD-1.iso Created fileio deb1290-amd64-dvd1 with size 3981279232 $ sudo targetcli ls /backstores/fileio | grep iso o- deb1290-amd64-dvd1 .................................. [/srv/tftp/debian-12.9.0-amd64-DVD-1.iso (3.7GiB) write-back deactivated] o- deb1290ni-80 ................................... [/srv/tftp/debian-12.9.0-amd64-netinst.80.iso (632.0MiB) write-back activated] o- deb1290ni-81 ................................... [/srv/tftp/debian-12.9.0-amd64-netinst.81.iso (632.0MiB) write-back activated] o- ubuntu-24.04.2-desktop-amd64 ....................... [/srv/tftp/ubuntu-24.04.2-deskt...

iPXE経由で iSCSI root にて Debian を セキュアブート

セキュアブートに対応した iPXE バイナリは公式サイトにはないのですが、調べていると サイン済みのバイナリが broadcom 社の KB に あると ipxe.org の bbs に記載がありました。該当の kb は こちら です。早速、この kb にリンクのある "64bit_ipxe_efi.zip" をブラウザでダウロードし、tftp/http サーバー上で解凍、dhcp サーバを設定して、tftp で取得・起動させた所、起動はするものの次のステージへは、特定のhttp ポート ( 4433 ) の固定パス ( Altiris/iPXE/GetPxeScript.aspx ) を参照するため、何もしていないと connection がリセットされてしまいます。 なので、apache2を 4433でもリッスンするようにして Altiris/iPXE/GetPxeScript.aspx を配置し、中身を shell が起動するだけの menu.ipxe にしたところ、シェルに入れました。 これでOKだと思ったのですが、実はここからが難題でした。 というのも、サイン済みの bootnetx64.efi や linux カーネルをブートしようとしても、exec format error になり起動できません。機種によっては wimboot すら起動しません。それでも CDぐらいはブートできるだろうと思い直し、インストーラの iso ファイルの起動を sanboot コマンドにて試してみたところ、起動はするものの今度はインストーラまで到達できません。ただ、grubとカーネルまでは起動はしているので、iso ファイルを自前で作成し、前回のように nfsroot で立ち上げた所、システムも起動できましたが、isoファイルの作成だと grubのメニュー項目が read only なので、編集したい場合は iso ファイルを再作成しなければならず、実用的ではないなとこれはボツネタにしました。 そこで気を改めて r/w 可能な iSCSI で試してみることにしました。まず、始めは netinst cd イメージを targetcli で エクスポートした所、isoファイルの sanboot とほぼ同じで、grubとカーネルまでは起動できますが、cdr...

Ubuntu 24.04 Desktop Live をSecure boot が有効な状態で nfsroot にて Netboot

最近の Ubuntu は Netboot で Secure boot をサポートしているとのことだったので、Ubuntu 24.04 Desktop Live を Netboot + NFS root で試してみました。なお、dhcp server は kea dhcp4 をつかい、ipxe ではなく サイン済みの bootx64.efi 経由でブートさせていますので 直接 grub のメニューに入ります。なお今回の環境はサーバはUbuntu 24.04 で構成しています。 早速ですが設定です。まず tftpd-hpa をインストールします。 apt-get install tftpd-hpa 続いて net boot する iso イメージファイルをダウンロードしマウントしておきます。 cd /srv/tftp wget https://releases.ubuntu.com/24.04.2/ubuntu-24.04.2-desktop-amd64.iso mkdir -p /srv/tftp/ubuntu-24.04.2-desktop-amd64 mount -o loop /srv/tftp/ubuntu-24.04.2-desktop-amd64.iso /srv/tftp/ubuntu-24.04.2-desktop-amd64 さらに Netbootで使用するファイル類を取得し展開・配置等しておきます。 cd /srv/tftp wget https://releases.ubuntu.com/24.04/ubuntu-24.04.2-netboot-amd64.tar.gz tar xzvpf ubuntu-24.04.2-netboot-amd64.tar.gz cp -a amd64/bootx64.efi /srv/tftp/ cp -a amd64/grubx64.efi /srv/tftp/ grub-mknetdir --net-directory=/srv/tftp cp -a /srv/tftp/boot/grub /srv/tftp/ cat > /srv/tftp/grub/grub.cfg << EOF menuentry 'Ubuntu 24.04.2 amd64 nfsroot...

時間のかかるリンクアップを検出して処理をおこなう

リンクアップに時間のかかるネットワークインターフェースがある場合、たとえば kea-dhcp4-server などはリンクアップの前に起動されるため、正常に機能しません。また Debian 12 の場合ですが、post-up に処理を入れるとシステム全体のアップそのものが遅れてしまいます。そこで/etc/rc.local (chmod +x) に以下のような処理を入れることで、リンクアップ後に kea-dhcp4-serverを再起動させることができたので、備忘録として挙げてみました。 #!/bin/bash if [ -e /sys/class/net/enp2s0/carrier ]; then enp2s0_up=$(</sys/class/net/enp2s0/carrier) else enp2s0_up="" fi while [ "$enp2s0_up" == "0" -o ! -n "$enp2s0_up" ] do echo enp2s0_up: $enp2s0_up if [ -e /sys/class/net/enp2s0/carrier ]; then enp2s0_up=$(</sys/class/net/enp2s0/carrier) else enp2s0_up="" fi if [ "$enp2s0_up" == "1" ];then systemctl restart kea-dhcp4-server echo restarted kea-dhcp4-server fi sleep 1 done リンクアップ以前に /sys/class/net/enp2s0そのものが作成されていなかったので少し手間取りましたが、これでリンクアップの検出ができ所用の目的は達成できました。今回は以上です。それでは。