PXE:ファイルが見つかりません。しかし、なぜそうですか?

PXE:ファイルが見つかりません。しかし、なぜそうですか?

次のようにUbuntu 22.04サーバー用のPXEブートを設定しようとしています。このガイドライン。これは私のものです/srv/tftp

root@vogon:~# ll /srv/tftp
total 1444
drwxr-xr-x 3 root root    4096 Jul 15  2022 boot/
drwxr-xr-x 3 root root    4096 Jul  1  2022 debian/
drwxrwxrwx 3 root root    4096 Jul  8  2022 debian-installer/
lrwxrwxrwx 1 root root      36 Jul  8  2022 grub.cfg -> debian-installer/amd64/grub/grub.cfg
-rw-r--r-- 1 root root    9278 Jul  1  2022 grub.cfg.bk
-rw-r--r-- 1 root root 1426816 Jan 25 13:44 grubx64.efi
drwx------ 2 root root   16384 Jul  8  2022 lost+found/
drwxr-xr-x 2 root root    4096 Jan 25 13:22 save/
drwxr-xr-x 4 root root    4096 Jan 25 12:52 ubuntu/

アイデアは、いくつかのディストリビューションの中から選択できるということです。これはDebian 11とUbuntu 20.04で動作します。私はUbuntu 22.04を追加したいと思います。ここに私のものがありますgrub.cfg

root@vogon:~# cat /srv/tftp/grub.cfg
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
set gfxpayload=text
set timeout=-1

menuentry 'Debian 11'{
        set background_color=black
        linux    /debian/11/amd64/linux priority=low vga=788 ---
        initrd   /debian/11/amd64/initrd.gz
}

menuentry "Ubuntu 20.04" {
  linux /ubuntu/20.04/amd64/linux only-ubiquity ip=dhcp ---
  initrd /ubuntu/20.04/amd64/initrd.gz
}

menuentry "Ubuntu 22.04 Server" {
  linux /srv/tftp/ubuntu/22.04-srv/vmlinuz url=https://www.releases.ubuntu.com/22.04/ubuntu-22.04.1-live-server-amd64.iso only-ubiquity ip=dhcp ---
  initrd=/srv/tftp/ubuntu/22.04-srv/initrd
}

メニューはうまく表示されますが、を選択するとUbuntu 22.04 Serverしばらくメッセージが表示されますが、File not foundどのファイルに関する情報も表示されません。このエントリの行がlinux ...複数回変更され、すべて同じエラーが表示されます。で言及された最後のファイルはsyslog次のとおりです/srv/tftp/ubuntu/22.04-srv/vmlinuz

...
Jan 25 13:18:52 vogon in.tftpd[376344]: RRQ from 192.168.50.96 filename grubx64.efi
Jan 25 13:18:52 vogon in.tftpd[376345]: RRQ from 192.168.50.96 filename /debian-installer/amd64/grub/x86_64-efi/command.lst
Jan 25 13:18:52 vogon in.tftpd[376346]: RRQ from 192.168.50.96 filename /debian-installer/amd64/grub/x86_64-efi/fs.lst
Jan 25 13:18:52 vogon in.tftpd[376347]: RRQ from 192.168.50.96 filename /debian-installer/amd64/grub/x86_64-efi/crypto.lst
Jan 25 13:18:52 vogon in.tftpd[376348]: RRQ from 192.168.50.96 filename /debian-installer/amd64/grub/x86_64-efi/terminal.lst
Jan 25 13:18:52 vogon in.tftpd[376349]: RRQ from 192.168.50.96 filename /debian-installer/amd64/grub/grub.cfg
Jan 25 13:19:00 vogon in.tftpd[376358]: RRQ from 192.168.50.96 filename /srv/tftp/ubuntu/22.04-srv/vmlinuz
...

vmlinuxロードされているようですが、url=...わかりません。しかし、何をすべきですか?

答え1

grubx64.efiTFTPサーバーが要求するとファイルを提供します/srv/tftp/grubx64.efi

要求すると/debian-installer/amd64/grub/x86_64-efi/command.lstファイルを提供します/srv/tftp/debian-installer/amd64/grub/x86_64-efi/command.lst。パターンが見えますか?

TFTPサーバーは、/srv/tftp/受信したすべての要求のパス名にプレフィックスを追加し、/srv/tftp/その下のディレクトリにのみTFTPアクセスを効果的に制限するようです。これは/srv/tftpあなたのサーバーだと言うことができますTFTPルートディレクトリ

Ubuntu 22.04用のメニュー項目を作成するときに、他のメニュー項目とは異なり、このプレフィックスを作成しました。 TFTP サーバーが要求を受信すると、/srv/tftp/ubuntu/22.04-srv/vmlinuzプレフィックスを再度追加し、最終的には/srv/tftp/srv/tftp/ubuntu/22.04-srv/vmlinuz存在しない読み取りを試みます。

/srv/tftp/grub.cfgUbuntu 22.04の項目を次に変更することをお勧めします。

menuentry "Ubuntu 22.04 Server" {
  linux /ubuntu/22.04-srv/vmlinuz url=https://www.releases.ubuntu.com/22.04/ubuntu-22.04.1-live-server-amd64.iso only-ubiquity ip=dhcp ---
  initrd /ubuntu/22.04-srv/initrd
}

キーワードの後のファイル名は、PXEブートGRUBにTFTPを介してこれらのファイルをダウンロードするように指示するlinuxため、initrdこれらのパス名はサーバーのTFTPルートと相対的でなければなりません。

この時点では、url=GRUBが起動しようとしているカーネルに解釈されずにそのまま渡されるデータ文字列です。カーネルが起動し、ファイルのスクリプトとツールがinitrd起動し始めると(つまり、initramfsの起動段階で)、/proc/cmdlineUbuntuネットワークインストールファイルがないため、initrd確認のために抽出できません。しかし、オプションが存在するようです。url=同様のツールを使用するか、curlこのwgetURLの内容をRAMディスクにダウンロードするためにいくつかのスクリプトが実行されます。

URLが指定されているため、https://TFTPとは何の関係もありません。インターネット接続が最も速くない場合は、ISOを一度ダウンロードし、かなりローカルのHTTPまたはHTTPSサーバーでホストし、url=それに応じてパラメータを調整する必要があります。これにより、少なくともインストールプロセスの初期部分の速度が速くなります。

関連情報