GNU/Linux >> Znalost Linux >  >> Linux

Nastavení spouštění UEFI HTTP pomocí libvirt

V podstatě celou svou kariéru jsem velkým zastáncem síťového poskytování. Moje druhá práce mimo vysokou školu zahrnovala zobrazování ~ 800 počítačů několikrát týdně. Když jsem byl najat, moji předchůdci používali diskety k načítání malého operačního systému (OS), odpovídající ovladače síťové karty (NIC) a zobrazovacího klienta (pamatujete na Ghost?). Sečteno a podtrženo, byl to velmi časově/pracně náročný a hrozný proces. Zobrazení skupiny systémů trvalo asi 30-60 minut. Stručně řečeno, po využití kombinace PXE, Wake-on-LAN, Universal Network Device Interface (UNDI) ovladačů, virtuálních LAN (VLAN) a IGMP snooping jsme tuto dobu zkrátili na přibližně pět minut. Moje druhá iterace řešení zabrala celkový čas obsluhy na méně než 30 sekund. Je to úžasná technologie pro zajišťování a dokonce jsem se nechal zaměstnat v Red Hat s prezentací o prostředí před spuštěním (PXE). Netřeba říkat, že jsem velkým fanouškem.

[ Mohlo by vás také bavit: Vytvoření desktopového systému Linux s možností spouštění více systémů ]

Každopádně problém je v tom, že PXE se datuje do 90. let a je značně omezeno tím, že se spoléhá na technologie, jako je triviální protokol pro přenos souborů (TFTP). Intel už roky vyhrožuje, že PXE přestane podporovat, a konečně to dělá. I když je PXE dnes všudypřítomné, je pravděpodobné, že během příštích 2–10 let se spouštění UEFI HTTP stane výchozím nastavením pro většinu prostředí. Další výhody a technické podrobnosti jsou uvedeny zde. TL;DR je PXE, který se spoléhá na DHCP a TFTP, a spouštění HTTP pomocí Unified Extensible Firmware Interface (UEFI) vyžaduje DHCP a HTTP. Zní to jednoduše? To proto, že je. Dalo by se dokonce říci, že je to tak triviální, jak se protokoly pro přenos souborů dostávají. Promiňte – humor při spouštění ze sítě je docela těžké najít.

Přepnutí z PXE na HTTP boot

Nejlepší dokumentace, kterou v současné době na toto téma mohu najít, je uvedena níže v části Reference. V podstatě odpadá potřeba TFTP. Dále upravte možnosti DHCP tak, aby načítala NBP z koncového bodu HTTP/HTTPS. V tomto článku používám GRUB jako NBP. Prostředí používající dhcpd můžete jednoduše spustit konfiguraci, kterou poskytují, a vše by mělo fungovat pouze za předpokladu, že změníte filename aby ukázal na správný NBP pro vaše prostředí:

  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";
   }

Tento příklad je pěkný, protože umožňuje spouštění systémů UEFI se starší PXE ROM.

Použijte to na libvirt

Původně jsem to plánoval nastavit ve své domácí síti, ale pfSense to zatím nepodporuje a ani neumožňuje dhcpd konfiguraci, která má být upravena přímo. Otevřel jsem problém a doufám, že toto bude v budoucnu přidáno. Další nejjednodušší možností, kterou mám pro testování, je použití libvirt a virtuálních strojů (VM) s firmwarem Open Virtual Machine Firmware (OVMF) (Tianocore) UEFI. Také libvirt funguje skvěle pro vytváření samostatného prostředí pro experimentování s technologií, jako je tato, a je velmi snadné jej replikovat. Vše, co skutečně musíte udělat, je poskytnout správné možnosti DHCP.

Výchozí síť libvirt bude vypadat podobně jako toto:

<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>

Povolení starší verze PXE je dobře zdokumentováno, ale změny zde uvádím pro případ, že by to bylo užitečné pro každého, kdo čte. Musíte definovat možnosti DHCP dalšího serveru a názvu souboru.

<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>

Bohužel schéma libvirt nepodporuje mnoho dostupných konfiguračních možností pro dnsmasq. Naštěstí poslední verze libvirt podporují jmenný prostor XML, který připojí volby přímo na konec vygenerovaného konfiguračního souboru. Tento e-mail ukazuje jedinou funkční konfiguraci dnsmasq, kterou jsem dokázal najít, protože spouštění HTTP není pro projekt dobře zdokumentováno. Prozatím nechávám informace TFTP na místě, aby virtuální počítače používající BIOS mohly nadále provádět síťové instalace.

Poznámka :Neignorujte první řádek tohoto příkladu.

<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>

Po nastavení sítě je k dispozici jednoduché sudo virsh net-destroy default && sudo virsh net-start default načte novou konfiguraci. Dále potřebujete webový server. Používám httpd na mém systému. Jak vidíte, ve výše uvedeném příkladu je definován jako 192.168.122.1. Jednou z hlavních výhod tohoto nastavení je, že webový koncový bod může být kdekoli, takže použijte, co má smysl pro vaše prostředí. Z důvodů, kterým nerozumím, Silverblue obsahuje httpd; vše, co jsem na svém systému potřeboval, bylo spustit systemctl start httpd .

Nastavení spouštěcí nabídky

Protože pracuji s Red Hat Enterprise Linux (RHEL) 8.4 Beta, vše, co je nutné, je stáhnout si minimální boot.iso , připojte jej a zkopírujte obsah do /var/www/html/rhel8/ . Nepřipojujte ISO přímo do tohoto umístění, protože potřebujete upravit konfiguraci GRUB a zapsat soubor. Dále musíte vyladit jádro a initrd cesty ve výchozí konfiguraci GRUB naleznete pod /var/www/html/rhel8/EFI/BOOT/grub.cfg protože relativní cesty nebudou fungovat. Pro mé nastavení je nutné přidat /rhel8 na každém řádku. Předložte jakoukoli jinou potřebnou možnost a můžete jít.

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
}

Čas na spuštění

Nyní jste připraveni vytvořit a spustit virtuální počítač, což vede k nepříjemné části. Ve výchozím nastavení se spouštění sítě pomocí OVMF pokusí o IPv4 PXE -> IPv6 PXE -> IPv4 HTTP -> IPv6 HTTP v tomto pořadí. Jejich selhání trvá dlouho, takže budete chtít narušit standardní proces spouštění rychlým stisknutím klávesy Escape , jakmile se konzola virtuálního počítače objeví, abyste ručně vybrali IPv4 HTTP. Na níže odkazovaném screencastu stisknu Escape stiskněte rychle pro výběr správné možnosti. To je méně než ideální a jsem si jistý, že existuje lepší způsob, jak nakonfigurovat firmware tak, aby deaktivoval starší možnosti. Pokud víte, jak na to, dejte mi prosím vědět.

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

[ Volný kurz:Red Hat Satellite Technical Overview. ] 

Sbalit

Pokud půjdete na můj web, můžete se podívat na screencast procesu. Je to rychlé a jednoduché. A to je vše. Doufám, že se ke mně připojíte ve světě, který je prostý omezení TFTP.

Odkazy:

  • Povolení pluginu HTTPBoot pro Foreman 1.20
  • UEFI_HTTPBoot_Server_Setup
  • UEFI HTTP Boot s Libvirt
  • EFI HTTP boot s dnsmasq
  • manuální stránka dnsmasq

Linux
  1. Síťové bootování (pxe) z Bios/efi?

  2. Hardware Uefi a duální bootování s Windows?

  3. Nastavení Xhost při spouštění?

  1. Změna velikosti spouštěcího oddílu

  2. Nastavení DRBD pouze s jedním uzlem

  3. Jak převedu svůj linuxový disk z MBR na GPT s UEFI?

  1. Nastavení FTP serveru s vsFTPd na Raspberry Pi

  2. Negrafické spouštění pomocí Systemd?

  3. Instalace Ubuntu na USB a spouštění z Destop pomocí Uefi?