Aclaro que yo no uso Windows pero tenia una PC antigua que mi familia usa y le instale Windows 10 LTSC 2019 32 bits porque aunque el procesador soporta 64 bits tiene 2 GB de RAM.
Me lo baje de Archive.org (2.8 GB)
https://archive.org/details/en_windows_10_enterprise_ltsc_2019_x86_dvd
Guía de lo que funcionó para instalar Windows 10 Enterprise LTSC 2019 de 32 bits en una PC vieja con BIOS Legacy, usando un servidor Arch Linux en la misma LAN. El instalador se cargó por iPXE; los archivos completos de Windows se compartieron mediante Samba.
Importante: es una instalación limpia. Hacé copia de seguridad de tus archivos antes de borrar o modificar particiones. No ejecutes
clean,formatni borres particiones si no estás seguro.
Servidor Arch: 192.168.0.143
PC destino: obtuvo por DHCP 192.168.0.203 (la dirección puede
cambiar).
ISO utilizada:
es_windows_10_enterprise_ltsc_2019_x86_dvd_84f6ff1d.iso
Rutas del servidor:
/mnt/winiso ISO montada
/srv/windows-pxe/install Contenido completo de la ISO para Samba
/srv/windows-pxe/www Archivos de arranque HTTP para iPXE
sudo pacman -S --needed nginx samba curl git base-devel
Ajustá el nombre de archivo si tu ISO tiene otro nombre.
sudo mkdir -p /mnt/winiso
sudo mkdir -p /srv/windows-pxe/install
sudo mkdir -p /srv/windows-pxe/www
sudo mount -o loop /mnt/linux2/ISO/es_windows_10_enterprise_ltsc_2019_x86_dvd_84f6ff1d.iso /mnt/winiso
sudo cp -a /mnt/winiso/. /srv/windows-pxe/install/
Comprobá que los archivos importantes estén presentes:
ls -lh /srv/windows-pxe/install/sources/install.*
ls -lh /srv/windows-pxe/install/sources/setup.exe
La carpeta install debe contener el contenido completo de la ISO, no
solamente boot.wim.
Descargá wimboot y copiá los archivos de arranque desde la ISO:
sudo curl -L https://github.com/ipxe/wimboot/releases/latest/download/wimboot -o /srv/windows-pxe/www/wimboot
sudo cp /mnt/winiso/bootmgr /srv/windows-pxe/www/bootmgr
sudo cp /mnt/winiso/boot/bcd /srv/windows-pxe/www/BCD
sudo cp /mnt/winiso/boot/boot.sdi /srv/windows-pxe/www/boot.sdi
sudo cp /mnt/winiso/sources/boot.wim /srv/windows-pxe/www/boot.wim
Creá el script que carga WinPE:
sudo tee /srv/windows-pxe/www/boot.ipxe >/dev/null <<'EOF'
#!ipxe
dhcp
kernel http://192.168.0.143/wimboot
initrd http://192.168.0.143/bootmgr bootmgr
initrd http://192.168.0.143/BCD BCD
initrd http://192.168.0.143/boot.sdi boot.sdi
initrd http://192.168.0.143/boot.wim boot.wim
boot
EOF
Configurá Nginx para servir esos archivos por HTTP:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
sudo tee /etc/nginx/nginx.conf >/dev/null <<'EOF'
events {}
http {
server {
listen 80;
server_name _;
root /srv/windows-pxe/www;
autoindex on;
}
}
EOF
sudo systemctl enable --now nginx
sudo systemctl restart nginx
Probá desde el servidor:
curl -I http://127.0.0.1/boot.ipxe
curl -I http://127.0.0.1/wimboot
curl -I http://127.0.0.1/boot.wim
curl -I http://127.0.0.1/BCD
Deben responder con un estado HTTP exitoso, normalmente 200 OK.
Agregá al final de /etc/samba/smb.conf:
[wininstall]
path = /srv/windows-pxe/install
browseable = yes
read only = yes
guest ok = yes
Validá y reiniciá Samba:
sudo testparm -s
sudo systemctl enable --now smb
sudo systemctl restart smb
Se creó un usuario de Samba dedicado porque Windows PE rechazó el acceso de invitado:
sudo useradd -M -s /usr/bin/nologin wininstall
sudo smbpasswd -a wininstall
sudo setfacl -R -m u:wininstall:rX /srv/windows-pxe/install
sudo systemctl restart smb
sudo smbpasswd -a wininstall pide establecer una contraseña. Guardala
para usarla en Windows PE.
Si setfacl no existe, instalá el paquete acl (sudo pacman -S acl)
y repetí ese comando.
Comprobá el recurso localmente:
smbclient -N -L //127.0.0.1
smbclient -U wininstall //127.0.0.1/wininstall -c 'ls'
Esto evita que iPXE arranque, obtenga DHCP y termine con
Nothing to boot, sin cargar nuestro script HTTP.
cd /tmp
git clone --depth=1 https://github.com/ipxe/ipxe.git
cd /tmp/ipxe/src
cat > boot.ipxe <<'EOF'
#!ipxe
dhcp
chain http://192.168.0.143/boot.ipxe
EOF
make bin/ipxe.usb EMBED=boot.ipxe
Al terminar, el archivo generado es:
/tmp/ipxe/src/bin/ipxe.usb
En esta instalación se copió desde el servidor 192.168.0.143 a otra
máquina Linux con:
scp esotericwarfare@192.168.0.143:/tmp/ipxe/src/bin/ipxe.usb /tmp/ipxe.usb
Este paso borra por completo el pendrive elegido. Identificá el
dispositivo con lsblk; no adivines el nombre.
lsblk -o NAME,SIZE,MODEL,TRAN,MOUNTPOINTS
En la máquina donde se grabó, el pendrive aparecía como sdb, modelo
DataTraveler 2.0, de aproximadamente 1.9 GB. Los discos internos
también cambiaban de nombre entre computadoras, así que verificá el
resultado en tu equipo.
Solo si confirmaste que el pendrive completo es /dev/sdb:
sudo dd if=/tmp/ipxe.usb of=/dev/sdb bs=4M status=progress conv=fsync
sync
sudo eject /dev/sdb
El destino es el dispositivo entero (/dev/sdb), no una partición como
/dev/sdb1.
Conectá la PC destino por Ethernet a la misma LAN que el servidor
192.168.0.143. Arrancá desde el USB de iPXE usando el menú de arranque
de la BIOS. En este caso se utilizó BIOS Legacy.
iPXE debería obtener una dirección DHCP y encadenar:
http://192.168.0.143/boot.ipxe
Luego wimboot carga los archivos de arranque de Windows y abre el
entorno de instalación.
En esta instalación apareció el mensaje de que faltaba un controlador,
aunque el disco interno sí se detectaba. El problema era que WinPE había
arrancado desde boot.wim, pero no tenía automáticamente conectada la
carpeta completa de instalación del servidor.
En la pantalla del instalador, presioná Shift + F10 para abrir la
consola y ejecutá:
wpeutil InitializeNetwork
ipconfig /all
Si no aparece una dirección IP, revisá primero el controlador de red y la conexión. Una vez que la red funcionó, se pudo conectar Samba.
En la consola de Windows PE, ejecutá:
net use Z: \\192.168.0.143\wininstall /user:wininstall *
Ingresá la contraseña que configuraste con smbpasswd. Si la conexión
tiene éxito, net use mostrará la unidad de red conectada.
No bastó con ejecutar Z:\setup.exe desde la raíz del recurso. El
comando que funcionó fue ejecutar el instalador que está dentro de
sources:
Z:\sources\setup.exe
Ese fue el paso final que permitió continuar la instalación. La ruta
importa: Z:\setup.exe y Z:\sources\setup.exe no son el mismo
archivo.
Si querés verificar antes de ejecutarlo:
dir Z:\sources\install.*
dir Z:\sources\setup.exe
No hace falta que net use muestre una unidad previamente conectada:
después de ejecutar el comando de conexión, verificá que Z: exista y
contenga los archivos.
Nothing to boot en iPXE: iPXE obtuvo DHCP, pero no tenía un script
de arranque que le indicara qué cargar. Se corrigió compilando
bin/ipxe.usb con EMBED=boot.ipxe.
No había solicitudes HTTP desde la PC destino: el iPXE original no
estaba cargando el script del servidor. Se corrigió integrando en el USB
un script que encadena http://192.168.0.143/boot.ipxe.
net use no mostraba unidades: eso es normal si todavía no hay
ninguna unidad de red conectada.
Contraseña de red no válida: se creó el usuario Samba wininstall,
se le asignó una contraseña con smbpasswd y se le dieron permisos de
lectura sobre los archivos de instalación.
«Falta un controlador de medios»: en este caso el mensaje no
significaba que el disco interno estuviera ausente. La solución fue
inicializar la red, montar el recurso Samba y ejecutar
Z:\sources\setup.exe.
Una vez que WinPE ya arrancó, si aparece el error:
wpeutil InitializeNetwork
net use Z: \\192.168.0.143\wininstall /user:wininstall *
Z:\sources\setup.exe
Ingresá la contraseña cuando la solicite. Si la red no tiene IP, resolvé
eso antes de ejecutar net use.
Se instaló Windows 10 Enterprise LTSC 2019 de 32 bits desde el servidor Arch Linux en una PC antigua, sin necesidad de copiar la ISO a un DVD ni depender de un pendrive de instalación de Windows tradicional. El USB se usó para arrancar iPXE; los archivos de arranque se sirvieron por HTTP y el contenido completo de la ISO se accedió mediante Samba.