GNU/Linux >> Linux の 問題 >  >> Linux

libvirtを使用したUEFIHTTPブートのセットアップ

私はこれまで、ネットワークベースのプロビジョニングを大いに支持してきました。大学を出た私の2番目の仕事は、週に数回、最大800台のコンピューターをイメージングすることでした。私が雇われたとき、私の前任者はフロッピーディスクを使用して、小さなオペレーティングシステム(OS)、一致するネットワークインターフェイスカード(NIC)ドライバー、およびイメージングクライアント(Ghostを覚えていますか?)をロードしました。肝心なのは、それは非常に時間/労働集約的で恐ろしいプロセスだったということでした。システムのグループのイメージングには、約30〜60分かかりました。簡単に言うと、PXE、Wake-on-LAN、ユニバーサルネットワークデバイスインターフェイス(UNDI)ドライバー、仮想LAN(VLAN)、およびIGMPスヌーピングの組み合わせを活用した後、その時間を約5分に短縮しました。ソリューションの2回目の反復では、合計出席時間が30秒未満になりました。これはプロビジョニングのためのすばらしいテクノロジーであり、Preboot Execution Environment(PXE)についてプレゼンテーションを行うことで、RedHatに採用されることもありました。言うまでもなく、私は大ファンです。

[お楽しみいただけるかもしれません:マルチブートLinuxデスクトップシステムの作成]

とにかく、ここでの問題はPXEが90年代にさかのぼり、トリビアルファイル転送プロトコル(TFTP)などのテクノロジへの依存によってかなり制限されていることです。 Intelは、PXEを非推奨にすることを何年も前から脅かしており、ついにそれを実行しています。 PXEは現在普及していますが、今後2〜10年で、UEFIHTTPブートがほとんどの環境のデフォルトになる可能性があります。その他の利点と技術的な詳細はここに概説されています。 TL; DRはDHCPとTFTPに依存するPXEであり、Unified Extensible Firmware Interface(UEFI)HTTPブートにはDHCPとHTTPが必要です。簡単に聞こえますか?それはそうだからです。あなたはそれがファイル転送プロトコルが得るのと同じくらい些細なことであるとさえ言うかもしれません。申し訳ありませんが、ネットワークブーティングのユーモアを得るのはかなり困難です。

PXEからHTTPブートへの切り替え

このトピックに関して私が現在見つけることができる最高のドキュメントは、以下の「参照」セクションにあります。基本的に、TFTPの必要性はなくなります。次に、DHCPオプションを編集して、HTTP/HTTPSエンドポイントからNBPをフェッチします。この記事では、NBPとしてGRUBを使用しています。 dhcpdを使用する環境 提供されている構成をドロップインするだけで、filenameを変更したと仮定してすべてが機能するはずです。 ご使用の環境に適したNBPを指定するには:

  class "pxeclients" {
     match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
     next-server 192.168.111.1;
     filename "/bootx64.efi";
   }
   class "httpclients" {
     match if substring (option vendor-class-identifier, 0, 10) = "HTTPClient";
     option vendor-class-identifier "HTTPClient";
     filename "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi";
   }

この例は、レガシーPXEROMを備えたUEFIシステムも起動できるので便利です。

これをlibvirtに適用します

私は当初、これをホームネットワークに設定することを計画していましたが、pfSenseはまだこれをサポートしておらず、dhcpdも許可していません。 直接変更する構成。私は問題を開きました、そしてうまくいけば、これは将来追加されるでしょう。私がテストするために持っている次の最も簡単なオプションは、Open Virtual Machine Firmware(OVMF)(Tianocore)UEFIファームウェアでlibvirtと仮想マシン(VM)を使用することです。また、libvirtは、このようなテクノロジーを実験するための自己完結型の環境を作成するのに最適であり、複製は非常に簡単です。本当に必要なのは、正しいDHCPオプションを提供することだけです。

デフォルトのlibvirtネットワークは次のようになります:

<network>
 <name>default</name>
 <uuid>75f4d9cd-9af2-4df5-afcc-f8f9145f7e34</uuid>
 <forward mode='nat'/>
 <bridge name='virbr0' zone='trusted' stp='on' delay='0'/>
 <mac address='52:54:00:95:95:84'/>
 <ip address='192.168.122.1' netmask='255.255.255.0'>
   <dhcp>
     <range start='192.168.100.128' end='192.168.100.254' />
   </dhcp>
 </ip>
</network>

レガシーPXEを有効にすることは十分に文書化されていますが、読んでいる人に役立つ場合に備えて、ここに変更を含めます。 next-serverとfilenameのDHCPオプションを定義する必要があります。

<network>
 <name>default</name>
 <uuid>75f4d9cd-9af2-4df5-afcc-f8f9145f7e34</uuid>
 <forward mode='nat'/>
 <bridge name='virbr0' zone='trusted' stp='on' delay='0'/>
 <mac address='52:54:00:95:95:84'/>
 <ip address='192.168.122.1' netmask='255.255.255.0'>
 <tftp root='/var/lib/tftpboot'/>
   <dhcp>
     <range start='192.168.100.128' end='192.168.100.254' />
     <bootp file='pxelinux.0'/>
   </dhcp>
 </ip>
</network>

残念ながら、libvirtスキーマはdnsmasqで利用可能な多くの構成オプションをサポートしていません。幸い、最近のバージョンのlibvirtは、生成された構成ファイルの下部にオプションを直接追加するXML名前空間をサポートしています。このメールには、プロジェクトのHTTPブートが十分に文書化されていないため、私が見つけた唯一の機能するdnsmasq構成が示されています。今のところ、BIOSを使用しているVMがネットワークインストールを続行できるように、TFTP情報はそのままにしておきます。

:この例の最初の行を無視しないでください。

<network xmlns:dnsmasq='http://libvirt.org/schemas/network/dnsmasq/1.0'>
 <name>default</name>
 <uuid>75f4d9cd-9af2-4df5-afcc-f8f9145f7e34</uuid>
 <forward mode='nat'/>
 <bridge name='virbr0' zone='trusted' stp='on' delay='0'/>
 <mac address='52:54:00:95:95:84'/>
 <ip address='192.168.122.1' netmask='255.255.255.0'>
 <tftp root='/var/lib/tftpboot'/>
   <dhcp>
     <range start='192.168.100.128' end='192.168.100.254' />
     <bootp file='pxelinux.0'/>
   </dhcp>
 </ip>
 <dnsmasq:options>
   <dnsmasq:option value='dhcp-vendorclass=set:efi-http,HTTPClient:Arch:00016'/>
   <dnsmasq:option value='dhcp-option-force=tag:efi-http,60,HTTPClient'/>
   <dnsmasq:option value='dhcp-boot=tag:efi-http,&quot;http://192.168.122.1/rhel8/EFI/BOOT/BOOTX64.EFI&quot;'/>
 </dnsmasq:options>
</network>

ネットワーク設定が整ったら、単純なsudo virsh net-destroy default && sudo virsh net-start default 新しい構成をロードします。次に、ウェブサーバーが必要です。 httpdを実行しています 私のシステムで。ご覧のとおり、上記の例では192.168.122.1として定義されています。この設定の主な利点の1つは、Webエンドポイントをどこにでも配置できることです。そのため、環境に適したものを使用してください。わかりませんが、Silverblueにはhttpdが含まれています;システムで実行する必要があるのは、systemctl start httpdを実行することだけでした。 。

ブートメニューの設定

私はRedHatEnterprise Linux(RHEL)8.4 Betaを使用しているので、必要なのは最小限のboot.isoをダウンロードすることだけです。 、マウントして、内容を/var/www/html/rhel8/にコピーします 。 GRUB構成を変更してファイルを書き込む必要があるため、この場所にISOを直接マウントしないでください。次に、カーネルとinitrdを微調整する必要があります /var/www/html/rhel8/EFI/BOOT/grub.cfgの下にあるデフォルトのGRUB構成のパス 相対パスは機能しないため。私のセットアップでは、/rhel8を追加する必要があります 各行に。必要な他のオプションをすべて渡すと、準備が整います。

menuentry 'Install Red Hat Enterprise Linux 8.4' --class fedora --class gnu-linux --class gnu --class os {
     linuxefi /rhel8/images/pxeboot/vmlinuz inst.stage2=http://192.168.122.1/rhel8 inst.ks=http://192.168.122.1/ks/84.ks quiet
     initrdefi /rhel8/images/pxeboot/initrd.img
}

起動時間

これで、VMを作成して起動する準備が整いました。これは、煩わしい部分につながります。デフォルトでは、OVMFを使用したネットワークブートは、 IPv4 PXE-> IPv6 PXE-> IPv4 HTTP-> IPv6 HTTPを試行します。 その順序で。失敗するまでには長い時間がかかるため、エスケープをすばやく押して、標準の起動プロセスを中断することをお勧めします。 VMコンソールが起動したら、キーを繰り返し押して、IPv4HTTPを手動で選択します。以下にリンクされているスクリーンキャストでは、エスケープを押しています すばやくキーを押して、正しいオプションを選択します。これは理想的とは言えません。レガシーオプションを無効にするようにファームウェアを構成するためのより良い方法があると確信しています。これを行う方法を知っている場合はお知らせください。

sudo virt-install \
  --name=8.4-uefi-httpboot \
  --ram=2048 \
  --vcpus=1 \
  --os-type=linux \
  --os-variant=rhel8.4 \
  --graphics=vnc \
  --pxe \
  --disk=path=/var/home/bbreard/data/distros/uefi.qcow2 \
  --check path_in_use=off \
  --network=network=default,model=virtio \
  --boot=uefi

[無料コース:RedHatSatelliteの技術概要。 ]

まとめ

私のサイトにアクセスすると、プロセスのスクリーンキャストを見ることができます。すばやく簡単です。そして、それがすべてです。 TFTPの制限のない世界に参加していただければ幸いです。

参照:

  • Foreman1.20のHTTPBootプラグインを有効にする
  • UEFI_HTTPBoot_Server_Setup
  • Libvirtを使用したUEFIHTTPブート
  • dnsmasqを使用したEFIHTTPブート
  • dnsmasqのマニュアルページ

Linux
  1. RaspberryPiでvsFTPdを使用してFTPサーバーをセットアップする

  2. Bios / efiからのネットワークブート(pxe)?

  3. USBにUbuntuをインストールし、Uefiを使用してDestopから起動しますか?

  1. Systemdを使用した非グラフィカルブート?

  2. UefiハードウェアとWindowsとのデュアルブート?

  3. 起動時のXhost設定?

  1. Ubuntu 14.04 Windows 8 Uefiとのデュアルブートにはセキュアブートを無効にする必要がありますか?

  2. Linux で Apache を使用してサブドメインを設定する

  3. ブート パーティションのサイズ変更