web-dev-qa-db-ja.com

UEFI iPXEをDebianで起動すると、grubシェルが生成されます

少し文脈上、私はシステム管理者の学生であり、ネットワークの知識を拡大しようとしています。それは私の最強のポイントではないからです。

現在、PXEを実験しています。数日前、いくつかのESXi仮想マシンをセットアップしました。1つはDHCPおよびTFTPサーバーで、他の2つはBIOSおよびUEFIクライアントです。 BIOSとUEFIマシンの両方で、PXEを介してDebianを起動することができました。

IPXEとそれがもたらす可能性(HTTP、iSCSIなどでの起動など)について聞いたので、試してみることにしました。今のところ、私はまだローカルのdebian netbootインストーラーを起動しようとしています。インストールが正しいことを確認した後、リモートファイルをテストすると思いました。


この時点で、これは私のDHCP confがどのように見えるかです(本当に興味のないものを除いて):

option Arch code 93 = unsigned integer 16;
class "pxe-clients" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
    option tftp-server-name "192.168.0.5";
    next-server 192.168.0.5;
    if option Arch = 00:00 {
        if exists user-class and option user-class = "iPXE" {
            filename = "pxelinux.0";
        } else {
            filename = "undionly.kpxe";
        }
    } elsif option Arch = 00:02 or option Arch = 00:06 or option Arch = 00:07 or option Arch = 00:08 or option Arch = 00:09 {
        if exists user-class and option user-class = "iPXE" {
            filename = "bootnetx64.efi";
        } else {
            filename = "ipxe.efi";
        }
    } else {
        filename = "UNKNOWN_VCI";
    }
}

192.168.0.5は、DHCP/TFTPサーバーのLANIPです。

私のTFTPサーバーのルートディレクトリについて:

root@vmpxe:/srv/tftp# ls -l
total 968
lrwxrwxrwx 1 root root   37 Sep 22 14:01 bootnetx64.efi -> debian-installer/AMD64/bootnetx64.efi
drwxrwxr-x 3 root root 4.0K Sep 22 00:21 debian-installer
-rw-r--r-- 1 root root 896K Sep 22 16:00 ipxe.efi
lrwxrwxrwx 1 root root   47 Sep 22 00:21 ldlinux.c32 -> debian-installer/AMD64/boot-screens/ldlinux.c32
lrwxrwxrwx 1 root root   33 Sep 22 00:21 pxelinux.0 -> debian-installer/AMD64/pxelinux.0
lrwxrwxrwx 1 root root   35 Sep 22 00:21 pxelinux.cfg -> debian-installer/AMD64/pxelinux.cfg
-rw-r--r-- 1 root root  64K Sep 22 16:00 undionly.kpxe
-rw-rw-r-- 1 root root   64 Sep 22 00:21 version.info

繰り返しになりますが、iPXEの前は、両方のアーキテクチャですべてが正常に機能していたという事実を主張します。私が行った唯一の変更は、iPXEのWebサイトからundionly.kpxeファイルとipxe.efiファイルをダウンロードし、DHCPconfを編集してファイル名設定をif exists user-class and option user-class = "iPXE" {...} else {...}条件でラップすることでした。

これで、BIOSマシンはPXE-> iPXE-> Debianのnetbootインストーラーを実行します。すべてが正常に動作します。

ただし、UEFIマシンはPXE-> iPXE-> grubShellを実行します。

プロセスをtcpdumpしようとしましたが、何も生成されませんでした。すべてのトラフィックが正常で予期されているように見えます。 iPXEの前に持っていたものと大差ありません。

ここで何が起こっているのか考えていますか?


編集:さらにtcpdumpをテストすると、iPXEがないと、EFIマシンがブートローダー用のRRQパケットと、ブートローダー自体によって参照される他のファイルの束を送信することがわかります。ただし、iPXEでは、ブートローダーのみが表示されます。

したがって、正しい質問は次のとおりです。標準のPXEによって正しくダウンロードされたすべてのファイルを取得しないためにiPXEはどうなりますか?

3
kRYOoX

あなたの問題とは関係ありませんが

eFI64の起動用

} elsif option Arch = 00:02 or option Arch = 00:06 or option Arch = 00:07 or option Arch = 00:08 or option Arch = 00:09 {

に変更する必要があります

} elsif option Arch = 00:07 or option Arch = 00:09 {

起動した場合の質問についてbootnetx64.efi あなたがもらったもの;グラブスクリーン。

ここを参照してください: http://lists.ipxe.org/pipermail/ipxe-devel/2015-December/004532.html

編集:バージョンに応じてpxelinux.0をロードすると、動的コンポーネントとpxelinux.0メニュー定義が取得されます。 iPXEをロードするとき、それらの余分なファイルはロードされていません。

1
Pat