web-dev-qa-db-ja.com

ARMでPXEブートする方法は?

ARM上のCentOS7用にディスクレスUEFI + PXE + NFSブートをセットアップしようとしています。一般的に、プロセスは次のようになります。

  1. クライアントCPUがUEFIファームウェアを起動します
  2. クライアントUEFIのPXEファームウェアがネットワークからDHCPを要求します
  3. サーバーはIP、TFTPサーバーIP、PXE NBP(ネットワークbootstrapプログラム)ファイル名を提供します
  4. クライアントUEFIはTFTPサーバーからNBPをロードします
  5. クライアントUEFIはNBPを実行し、NBPはTFTPサーバーからカーネルイメージをロードします
  6. クライアントNBPは、NFS経由でファイルシステムをマウントするカーネルイメージを実行します

すべての PXEブートガイド 私が見つけることができるのは、NBPとして Syslinux からpxelinux.0が最終的に必要になることです(ステップ3、4、5)。 SyslinuxはARM(afaik?)をサポートしていません。それを念頭に置いて:

誰かがaarch64をPXEブートする方法を説明できますか?

3
Dan

コメントから多くの助けを得て、これが私の最終的な発見と解決策です!

  • SyslinuxはARMをサポートしていません
  • たとえそうだったとしても、pxelinux.0はBIOSにのみ適用され、UEFIには適用されませんでした
  • Syslinuxの代わりにGRUB2を使用

PXE(DHCP + TFTP)サーバーが多くのガイドに従ってすでにセットアップされていると仮定すると、

  1. カーネルとinitramfsをTFTPルートディレクトリ(通常は/var/lib/tftpboot)にコピーします
  2. grubaa64.efi/boot/efi/EFI/centos/からTFTPルートディレクトリ(または./boot/サブディレクトリ)にコピーします
  3. 同じディレクトリに設定ファイルgrub.cfgを作成します

    (GRUBは/をTFTPルートディレクトリとして扱います。必要に応じてlinuxinitrdを変更してください)

    menuentry 'Shared CentOS (4.5.0-23.el7.aarch64)' {
        linux       /vmlinuz-4.5.0-23.el7.aarch64 rw root=/dev/nfs ip=dhcp nfsroot=/netboot/CentOS_7.3 enforcing=0
        initrd      /initramfs-nfs-only.img
    }
    menuentry 'Refresh GRUB menu' {
        configfile  /boot/grub.cfg
    }
    
  4. DHCPサーバーをgrubaa64.efiではなくpxelinux.0にポイントします

  5. それでおしまい! TFTPサーバーでgrub.cfgを編集してから、[更新GRUBメニュー]]を選択して、新しい構成が取り込まれることを確認してください
0
Dan