Expandimos la funcionalidad de WDS: añadir la posibilidad de arranque en UEFI

¡Hola a todos!

En este artículo, se describen los pasos que es necesario seguir para añadir a su WDS la capacidad de arranque en modo UEFI.

Es decir, la instrucción en este artículo supone que ya tiene, aproximadamente, la siguiente configuración:

1. Windows Server 2012R2 (o más reciente)
2. DHCP completamente configurado para trabajar con WDS
3. El propio WDS
4. IIS
5. Una máquina virtual o PC con Ubuntu

También se describen aquí acciones que no me produjeron el resultado esperado.
Las he anotado para facilitar la búsqueda y ahorrar su tiempo.

Prólogo

Una vez configuré un WDS en el trabajo con muchas características, ya que estaba cansado de correr constantemente con un montón de memorias USB y regrabarlas.

Me ayudaron, por cierto, estos artículos:
Agregamos versatilidad a WDS
Menú de arranque PXE con System Center Configuration Manager


Así se ve esto

Expandimos la funcionalidad de WDS: añadir la posibilidad de arranque en UEFI

Y todo iba bien, se añadían nuevas imágenes para el arranque, la imagen de winPE se enriquecía con nuevas funciones y todo funcionaba.

Sin embargo, ya no todos los dispositivos soportan el modo de arranque BIOS/Legacy, o si lo soportan, puede que la opción de activarlo esté en un lugar muy poco obvio.

Y, además, instalar Windows en modo Legacy, cuando hay posibilidad de instalación en UEFI, no está bien.

Así que decidí añadir la capacidad de arranque en UEFI y busqué en Google.

Pero no encontré información estructurada sobre cómo obtener un WDS + UEFI funcional.
Por eso decidí escribir este artículo.

Antes de comenzar, describiré el problema que más tiempo me ocupó.

Al añadir UEFI a WDS, puede surgir la siguiente situación bastante no obvia:

Si agrega un archivo de arranque a WDS y al intentar arrancar en un dispositivo
en UEFI ve el siguiente texto:
The selected boot device failed. Press to Continue.
O Boot Device Not Found
Pero el arranque en Legacy funciona.
Entonces, una de las posibles opciones es la ausencia del archivo wdsmgfw.efi,
en la siguiente ruta: %WDSpath%Bootx64wdsmgfw.efi

Puede obtenerlo aquí: C:WindowsSystem32RemInstbootx64wdsmgfw.efi
O, si por alguna razón le falta este archivo, lo he subido en google.
Por esta solución, gracias a los chicos de reddit.

Con este problema perdí más tiempo, ya que pensé que el problema estaba en la configuración de WDS o DHCP.

Estuve configurando políticas, añadiendo Vendor Classes para diferentes arquitecturas y configurando las opciones DHCP 060, 066, 067. Instrucción sobre la configuración de políticas DHCP.

Arquitecturas en ASCII para la configuración de DHCP

PXEClient:Arch:00000 — BIOS/Legacy
PXEClient:Arch:00006 — UEFI x86
PXEClient:Arch:00007 — UEFI x64

También probé varias opciones de archivos de arranque .efi

  • syslinux
  • grub 2

También intenté encontrar el problema en el Registro de Eventos.
win + r -> eventvwr -> Registros de Aplicaciones y Servicios -> Microsoft -> Windows -> Deployment-Services-Diagnostics

Pero, como ya mencioné anteriormente, el problema estaba en el archivo wdsmgfw.efi.
O bien lo borré accidentalmente, o no se copió durante la instalación
y configuración de WDS.

¡Bueno, empecemos!

Instrucción

Etapa 1 — Verificación del funcionamiento de WDS

Toma cualquier dispositivo o máquina virtual que soporte arranque en modo UEFI por red e intenta arrancar.

Deberías ver lo siguiente:

Expandimos la funcionalidad de WDS: añadir la posibilidad de arranque en UEFI

Si es así, excelente, se puede continuar.
Si no, consulta lo que escribí en la introducción.

Etapa 2 — Creación del archivo de arranque iPXE

Iniciamos Ubuntu previamente preparado, abrimos la terminal y pegamos esta línea:

git clone https://git.ipxe.org/ipxe.git ipxe

Expandimos la funcionalidad de WDS: añadir la posibilidad de arranque en UEFI

Aquí me gustaría hacer una pequeña nota, sobre que es posible que debas agregar paquetes necesarios para compilar C y C++ en Ubuntu.
Simplemente yo ya los tenía instalados.

¿Se descargó? — ¡Excelente!
Ahora necesitas crear el archivo de configuración para la compilación.
En la terminal, escribimos:

cd ipxe/src
gedit chain.ipxe

Y pegamos en este archivo el siguiente código, luego lo guardamos:

#!ipxe

dhcp
chain http://%IP-address-your-IIS-server%/install.ipxe

Vamos de nuevo a la terminal y comenzamos la compilación:

make bin-x86_64-efi/ipxe.efi EMBED=chain.ipxe

Expandimos la funcionalidad de WDS: añadir la posibilidad de arranque en UEFI

Si todo está bien, deberías obtener la siguiente salida en la terminal:

Expandimos la funcionalidad de WDS: añadir la posibilidad de arranque en UEFI

Y el archivo ipxe.efi, en la ruta: ipxe/src/bin-x86_64-efi/ipxe.efi
Si por alguna razón no pudiste compilarlo tú mismo,
he adjuntado el mío archivo.
Está compilado para arrancar desde http://192.168.0.100/install.ipxe

Con esto, todo con Ubuntu.

Etapa 3 — Adición de ipxe.efi a WDS

Tomamos el archivo que obtuvimos en la segunda etapa y lo copiamos en la ruta:
%WDSpath%Bootx64%your-boot-folderIBOOT
Después lo renombramos a BOOTX64.EFI.
Esto no es obligatorio, es solo más conveniente.

Luego ejecutamos cmd como administrador, y escribimos los siguientes comandos:

wdsutil /set-server /bootprogram:Bootx64%your-boot-folderIBOOTBOOTX
64.EFI /architecture:x64uefi
y
wdsutil /set-server /N12bootprogram:Bootx64%your-boot-folderIBOOTBOOTX
64.EFI /architecture:x64uefi

Con esto estableceremos el archivo obtenido para arrancar a través de WDS.

Verifiquemos la configuración:

wdsutil /get-server /Show:Config

Expandimos la funcionalidad de WDS: añadir la posibilidad de arranque en UEFI

También copié el archivo ipxe.efi, lo renombré a BOOTIA32.EFI y configuré el arranque para él, por si acaso. architecture:x86uefi
Pero en realidad esto no tiene sentido, ya que el archivo Bootmgfw.efi no soporta x86.

Verifiquemos lo que se obtuvo.
Expandimos la funcionalidad de WDS: añadir la posibilidad de arranque en UEFI
Excelente, WDS transmite nuestro archivo para cargarlo y, a su vez, busca la configuración en la ruta: http://192.168.0.100/install.ipxe

Etapa 4 — Configuración del menú

Vamos a la carpeta raíz de su sitio web.
Por defecto, esto es: C:inetpubwwwroot

Creamos un archivo de texto install.ipxe.

y lo configuramos de acuerdo con documentación y tus necesidades.
También hay comandos en español. descripción comando.
Usé esta las instrucciones para configurar mi WDS.

Ejemplo de configuración de install.ipxe

#!ipxe

:start
menu Please choose an operating system to start/install
item --gap Start Win PE
item WinPE-x64 WinPE x64
item --gap ipxe shell
item shell       Drop to iPXE shell

choose target && goto ${target}

:failed
echo Booting failed, dropping to shell
goto shell

:shell
echo Type 'exit' to get the back to the menu
shell
set menu-timeout 0
set submenu-timeout 0
goto start

:WinPE-x64
kernel http://192.168.0.100/wimboot
initrd http://192.168.0.100/peSE/Boot/bcd
initrd http://192.168.0.100/peSE/Boot/boot.sdi
initrd http://192.168.0.100/peSE/Boot/peSE64.wim
boot || goto failed

Puedes leer sobre la configuración para cargar winPE aquí.

Etapa 5 — tipos MIME

Después de crear el menú y agregar todos los archivos necesarios en la carpeta raíz de IIS,
es necesario darles acceso.

Ya que, incluso si intentas descargar un archivo desde el navegador, por su dirección obtendrás un error: HTTP 404.3 - No encontrado.
Expandimos la funcionalidad de WDS: añadir la posibilidad de arranque en UEFI

Para esto, es necesario agregar tipos MIME en el panel de control de IIS, de acuerdo
a las extensiones de los archivos que se cargarán a través de http.

No busqué qué tipo MIME es el más adecuado para estos fines, y configuré application/octet-stream, después de lo cual todo funcionó.

Para archivos sin extensión, usa un punto.

Así:

Expandimos la funcionalidad de WDS: añadir la posibilidad de arranque en UEFI

Conclusión

Al final, tenemos la posibilidad de cargar a través de la red local usando UEFI.

Si hicimos todo correctamente, el menú de selección de carga será aproximadamente así:

Expandimos la funcionalidad de WDS: añadir la posibilidad de arranque en UEFI

Si tienes las herramientas básicas preparadas y no vas a complicarte con la configuración, lleva aproximadamente 10-20 minutos implementar esta funcionalidad.
A mí me tomó 2 días hábiles, ya que tuve que buscar mucho en Google.

¡Buena implementación!

Gracias por su atención y un enorme agradecimiento a las personas cuyas artículos me ayudaron.
En Habr esto es: Ingtar y Deeptown.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster