В этой статье мы рассмотрим, как установить Windows 10 или 11 по сети без использования загрузочной USB флешки (установочного DVD диска). Для загрузки компьютера по сети через PXE мы будем использовать небольшой Tiny PXE Server. Инструкция применима для установки Windows на устройствах как с UEFI, так и с BIOS прошивкой.
В корпоративных сетях для разливки образов Windows по сети используются более функциональные Windows Deployment Services (WDS) и Microsoft Deployment Toolkit (MDT). В этой статье мы покажем, как быстро запустить PXE сервер на любом имеющемся компьютере (будь то устройство с Windows или Linux) и использовать его для сетевой установки Windows на компьютеры в этой же LAN с помощью простых средств.
Нам понадобятся:
- Установочный ISO образ с Windows 10 или 11 (проще всего создать его с помощью Windows Media Creation Tool согласно инструкции https://winitpro.ru/index.php/2013/12/31/sozdaem-zagruzochnuyu-fleshku-s-windows-7-dlya-uefi-sistemy/ )
- Образ Windows PE — можно использовать свой образ WinPE, извлечь его из образа восстановления MS DART, получить оригинальный WinPE с помощью Windows Assessment and Deployment Kit (Windows ADK), или использовать готовый образ типа Hiren’s BootCD PE.
- Сервер Tiny PXE (http://reboot.pro/files/file/303-tiny-pxe-server/ )
Содержание:
- Создаем загрузочный образ Windows PE с помощью ADK
- Подготовка сервера сетевой установки TinyPXE
- Сетевая установка Windows 10 и 11 с PXE сервера
Создаем загрузочный образ Windows PE с помощью ADK
Скачайте Windows ADK для Windows 11 и Windows PE add-on for the Windows ADK по ссылкам на странице https://docs.microsoft.com/en-us/windows-hardware/get-started/adk-install .
При установке Windows ADK выберите минимальную установку Deployment Tools.
Затем аналогично установите Windows PE add-on for Windows ADK.
После окончания установки запустите Deployment and Imaging Tool из стартового меню Windows. Или запустите вручную команду:
"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\DandISetEnv.bat"
Теперь скопируйте файлы для среды WinPE в указанный каталог (создавать не нужно):
copype amd64 C:\tools\winpe
В данном случае я создаю файлы для среды WinPE x64. Можно использовать другие опции в зависимости от архитектуры: x86, arm или arm64.
Теперь можно создать загрузочный ISO образ с WinPE:
MakeWinPEMedia /ISO C:\tools\winpe c:\tools\WinPE.iso
Подготовка сервера сетевой установки TinyPXE
Теперь нужно настроить ваш PXE сервер:
- Распакуйте архив pxesrv.zip в каталог C:\tools\pxesrv;
- Перейдите в каталог C:\tools\pxesrv и создайте текстовый файл pxe_menu.txt со следующим содержимым:
#!ipxe set boot-url http://${dhcp-server} #================ Main Menu ================= menu iPXE boot menu item WinPEISO WindowsPE ISO choose target && goto ${target} #============ Main Menu Options ============= :WinPEISO sanboot ${boot-url}/iso/WinPE.iso boot
- Скопируйте полученный ранее файл WinPE.iso в каталог C:\tools\pxesrv\files\iso;
- Смонтируйте установочный ISO образ в виртуальный привод Windows и откройте общий сетевой доступ к нему (если хотите, можете открыть к нему анонимный доступ, но это не обязательно);
- Запустите файл pxesrv.exe с правами администратора;
- Включите опцию HTTPd;
- Если ваш компьютер сам будет раздавать IP адреса по DHCP (Tiny PXE это умеет), отключите опцию ProxyDHCP. Убедитесь, что в полях Option 54 DHCP Server и Next-Server указан IP адрес вашего компьютера. В поле IP Pool start указано начало диапазона DHCP, убедитесь что этот диапазон не занят в вашей сети;
- В разделе Boot File укажите ipxe.pxe (для загрузки на BIOS устройствах) или ipxe-x86_64.efi (для UEFI устройств);
- В поле Filename if user-class=gPXE or IPXE укажите имя файла меню, который вы создали ранее pxe_menu.txt;
- Запустите PXE сервер, нажав кнопку Online;
Итак, ваш PXE сервер запущен и готов к работе. Если в Windows включен брандмауэр (проще), отключите его или разрешите входящий трафик для процесса pxesrv.exe по протоколам DHCP, PXE, HTTP, TFTPS и SMB.
Сетевая установка Windows 10 и 11 с PXE сервера
Теперь вам нужно загрузить ваш компьютер, на который вы хотите установить Windows, с PXE сервера. Компьютер должен находится в той же локальной сети (VLAN), что и компьютер с PXE сервером.
В настройках BIOS/UEFI компьютера выберите в качестве первичного устройства загрузки PXE.
При запуске среды PXE компьютер обнаружит в сети DHCP сервер, получит IP адрес и получит доступных опции в меню iPXE.
Компьютер загрузится по сети в среде WinPE.
В моем случае при тестировании загрузки с PXE сервера виртуальной машины VMWare с UEFI прошивкой появилась ошибка:
Could not describe SAN devices: Operation not supported
Could not boot image: Operation not supported https://ipxe.org/err/3c2220
Как оказалось, в UEFI прошивки виртуальной машины на моем хосте VMware ESXi есть баг:
This error indicates that your UEFI firmware has a bug that prevents the installation of the iSCSI boot firmware table (iBFT). Switch to booting in “legacy” BIOS mode rather than UEFI mode.
Пришлось переключить ВМ в режим BIOS и запускать PXE сервер с опцией ipxe.pxe. После этого пошла нормальная установка Windows по сети.
Вам осталось подключить по SMB сетевой каталог, в котором хранится ваш установочный ISO образ Windows 11.
После инициализации среды командой
wpeinit
подключите ваш сетевой каталог, в который смонтирован установочный образ Windows. Выполните команду:
Net use E: \\192.168.13.202\e
Где
192.168.13.202
– имя компьютера на котором хранится установочный образ, а
E
– название общей папки.
Введите имя пользователя, с правами доступа к вашей Windows с PXE сервером.
Запустите знакомый мастер установки Windows.
Время на прочтение
12 мин
Количество просмотров 35K
Предисловие
Полагаю буду следующим в серии статей-альтернатив:
-
Раз!
-
Два!
Раньше у нас использовалась заливка ОС по PXE с использованием syslinux, но как бывает с самодостаточными системами и без достаточного контроля и внимания — быстро превратилась в кашу из конфигураций, библиотек, загрузчиков.
Так же была необходимость в поддержке заливки разных ОС в режиме EFI — на тот момент заливка была только в Legacy.
В желании разобраться в этом наследстве, упростить и облегчить добавление новых образов в список, я познакомился с iPXE.
Оглавление
-
Подготовка стендового сервера
-
Сборка загрузчиков
-
Написание меню загрузки
-
Добавление образов debian, windows, утилит
-
Итог
1. Подготовка стенда
Раздел частично отсылает к Загрузочный сервер — как загрузочная флешка…, первичная подготовка схожа — для базы используется чистый Debian Bullseye, но думаю, использование другого дистрибутива не будет сильно отличаться.
Дано
-
VM VirtualBox
-
Ram: 1 Гб
-
VDI: 8Gb
-
CPU: 1 Core
-
Network: — NAT, подсеть 10.0.2.0, без DHCP, шлюз 10.0.2.1
-
-
Debian 11.4
Необходимо установить:
-
TFTP
-
Samba
-
Apache2
-
DHCP
1.1. TFTP
Используется для загрузчиков и ipxe скриптов:
apt install tftpd-hpa
Вношу изменения в /etc/default/tftpd-hpa:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp" # путь к папке tftp
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure -l -vvv -r blksize -m /etc/tftpd.remap"
Замена слешей Windows на Linux /etc/tftpd.remap:
rg \\ /
Оглавление Начало раздела
1.2. Samba
Используется для установки Windows-образов, в процессе монтируя папку образа, как диск:
apt install samba
В конце /etc/samba/smb.conf добавил:
[images]
comment = images
path = /srv/tftp/images
create mask = 0660
directory mask = 0771
writable = yes
guest ok = yes
browseable = yes
locking = no
public = yes
Создал папку, выдал права, перезапустил samba:
mkdir /srv/tftp/images
chmod 777 /srv/tftp/images
service smbd restart
Оглавление Начало раздела
1.3. Apache2
Используется для загрузки образа WinPE, Linux и прочих данных по протоколу HTTP (быстрее TFTP):
apt install apache2
Настройки на стенде по умолчанию, в папке /var/www/html/ создаю директории:
-
/images/ — для папок ОС
-
/photo/ — для фонов меню, но не обязательно
mkdir -p /var/www/html/images/photo
Оглавление Начало раздела
1.4. DHCP-сервер
Выдает IP адреса в сети. Для настройки iPXE на Windows Server лучше обратиться к документации.
apt install isc-dhcp-server
Задаю статический IP адрес для стенда.
/etc/network/interfaces:
allow-hotplug ens0s3
iface ens33 inet static
address 10.0.2.5
netmask 255.255.255.0
broadcast 10.0.2.255
network 10.0.2.0
gateway 10.0.2.1
Назначаю интерфейс для прослушивания запросов.
/etc/default/isc-dhcp-server:
INTERFACESv4="enp0s3"
Формирую DHCP подсеть и добавляю ключи для загрузки с iPXE.
/etc/dhcp/dhcpd.conf:
option domain-name "local.loc";
option domain-name-servers 10.0.2.1;
# Переменная для определения архитектуры клиента:
option arch code 93 = unsigned integer 16;
# Объявляю пространство имен для ipxe
option space ipxe;
option ipxe.no-pxedhcp code 176 = unsigned integer 8;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
# Возможность получать клиентам IP-адреса
authoritative;
# Выделение подсети
subnet 10.0.2.0 netmask 255.255.255.0 {
range 10.0.2.100 10.0.2.200;
option domain-name-servers 10.0.2.1;
option domain-name "local.loc";
option routers 10.0.2.1;
option broadcast-address 10.0.2.255;
default-lease-time 600;
max-lease-time 7200;
}
# Отключение задержки в iPXE ожидания прокси DHCP.
# Экономит пару секунд.
option ipxe.no-pxedhcp = 1;
# Используя ранее установленную переменную,
# в зависимости от режима загрузки клиента,
# идет выбор, какой загрузчик отправить клиенту:
if option arch != 00:00 {
filename "ipxe.efi";
} else {
filename "undionly.kpxe";
}
# Установка корневой директории с загрузчиками и конфигурациями
next-server 10.0.2.5;
option tftp-server-name "10.0.2.5";
option root-path "tftp://10.0.2.5:/srv/tftp/";
На всякий случай проверяю синтаксис конфигурации на ошибки:
dhcpd -t -cf /etc/dhcp/dhcpd.conf
Если всё хорошо, указания ошибок в выводе не будет:
Internet Systems Consortium DHCP Server 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Config file: /etc/dhcp/dhcpd.conf
Database file: /var/lib/dhcp/dhcpd.leases
PID file: /var/run/dhcpd.pid
Документация:
-
Настройка DHCP для PXE
-
Отдача нужного загрузчика, в зависимости от режима загрузки — Legacy/UEFI
-
Список кодов DHCP сервера
Оглавление Начало раздела
2. Сборка загрузчиков iPXE
В данном разделе будет:
-
Загрузка пакетов
-
Скрипт стартовой настройки
-
Сборка загрузчиков
Оглавление
2.1. Загрузка пакетов
После настройки и проверки стенда, необходимо собрать из исходного кода загрузчики iPXE для режимов Legacy и UEFI.
Обязательно потребуется установить зависимости:
-
gcc
-
binutils
-
make
-
perl
-
liblzma или xz header files
-
mtools
apt install gcc binutils make perl liblzma-dev mtools git
Скачиваю архив кода iPXE, либо клонирую репозиторий. Захожу во внутрь:
git clone git://git.ipxe.org/ipxe.git
cd ipxe/src/
Большинство возможностей iPXE по умолчанию закомментировано и при сборке бинарников, будет недоступно. Полный перечень функций указан тут, перебирая разделы можно выбрать, что нужно и где включить.
В текущем случае нужно:
-
в файле config/gereral.h раскомментировать строки с CONSOLE_CMD, IMAGE_PNG для команд консоли и png картинок.
-
в файле config/console.h раскомментировать строку с CONSOLE_FRAMEBUFFER, тоже для картинок.
Оглавление Начало раздела
2.2. Скрипт стартовой настройки
После загрузки iPXE от DHCP появится приглашение командной строки iPXE. Дальше нужно будет получить ip и начать загрузку скрипта меню. Чтобы этого не делать вручную, можно встроить базовый скрипт в сам бинарник.
Создаю скрипт start.ipxe (имя значения не имеет). Перечень, возможных команд.
#!ipxe
:start
# Механизм получения ip. В случае ошибки - предлагает нажать "s" для запуска командной строки.
# Иначе - начать снова.
dhcp && goto next || prompt --key s --timeout 1500 Press "s" for the iPXE command line... && shell || goto start
:next
# Случае успеха - загрузить "меню" с tftp-сервера (о нём - позже).
chain tftp://10.0.2.5/boot.ipxe
Оглавление Начало раздела
2.3. Сборка загрузчиков
Внимание! Строка имени файла является и его целевой конфигурацией, т.е. какое имя будет выбрано, для той платформы и будет сборка. В ключе EMBED= указывается имя ранее созданного скрипта.
Так же в случае ошибок при сборке, необходимо добавить ключ -fno-pie в Makefile.housekeeping на 451 строке. Предполагается, что это из-за ошибок в gcc.
make bin-i386-efi/ipxe.efi EMBED=start.ipxe
make bin-i386-pcbios/undionly.kpxe EMBED=start.ipxe
Копирую полученные загрузчики в папку tftp PXE сервера
cp bin-i386-efi/ipxe.efi /srv/tftp/
cp bin-i386-pcbios/undionly.kpxe /srv/tftp/
Оглавление Начало раздела
3. Написание меню загрузки
Оглавление
Ранее, в загрузчики был встроен скрипт, который в случае успешного получения ip, загружал и запускал скрипт boot.ipxe.
Создаю его по пути /srv/tftp/boot.ipxe:
#!ipxe
# Глобальные параметры
set pass pAsWoRd # Установка пароля на вход в iPXE
set httpServer http://10.0.2.5:80 # Задание адреса HTTP сервера
set menu-timeout 10000 # таймаут выхода из меню
#############################
########## Графика ##########
# Меняю цвет фона на серый
colour --rgb 0x999999 6
# Цвет по-умолчанию (индекс 0)
# Буквы - черный, фон букв - прозрачный
cpair -f 0 -b 4 0
# Фоновое изображение и рамка
# ${platform} - переменная iPXE, определяет в каком режиме загружен клиент- pcbios или efi
# Задаю параметры окна, картинку фона (загрузив её по http)
console -l 32 -r 32 -t 32 -b 32 -k --x 1024 --y 768 -d 24 -p ${httpServer}/images/photo/${platform}.png
# После установки фона, удаляю картинку из памяти -
# иначе она ломает wimboot загрузку WinPE
imgfree ${platform}.png
#########################
:login
# Запрашивается пароль. Если будет нажат Ctrl+C или Esc будет выход и загрузка с диска
# В идеале, можно использовать для авторизации в сервисах, но в данном случае играет роль заглушки
login || goto cancel
#Если пароль верен, перейти "дальше"-к меню загрузок, иначе - таймаут 5 секунд и повторный запрос пароля
iseq ${password} ${pass} && goto next || goto error_pass
:error_pass
echo Error password. Repeat after 5 seconds
sleep 5
goto login
:cancel
echo You change "Exit". Boot from disk...
sleep 1
exit
# Переход к файлу с меню
:next
chain --replace --autofree menu.ipxe
По пути /var/www/html/images/photo/ кладу подготовленные pcbios.png и efi.png размера 1024х768. В зависимости от того, в каком режиме запустится ПК, у меня всегда будет подсказка на самом фоне меню:
картинки меню
Cоздаю меню загружаемых ОС и утилит.
/srv/tftp/menu.ipxe
#!ipxe
# После предыдущего скрипта, настройки остаются прежними,
# потому переопределяю их, чтобы было видно текст
######## Графика ########
# Цвет по-умолчанию (индекс 0)
# Буквы - черный, фон-прозрачный
cpair -f 0 -b 4 0
# Нормальный текст (индекс 1)
# Буквы - черный, фон - прозрачный
cpair -f 0 -b 4 1
# Разделители (индекс 3)
# Буквы - красный, фон - прозрачный
cpair -f 1 -b 4 3
#########################
######## Главное меню ########
# На данный момент "всё в одном", но можно разделить как по разным меню, так и по разным файлам
:start
# Составляю меню
# https://ipxe.org/cmd/menu
menu iPXE boot menu
item -k e exit (E)xit and boot from disk
item
item --gap -- -------- Windows Images --------
item -k a win10manager2021 Windows 10 M(a)nager 2021
item
item --gap -- -------- Debian Images --------
item debian11 Debian 11 Bullseye
item
item --gap -- -------- Acronis Images --------
item acronis2021x64 Acronis 2021 64-bit
item
# Для режима Legacy, добавляю утилиты использующие Memdisk
iseq ${platform} pcbios && item --gap -- -------- BIOS Utilites -------- ||
iseq ${platform} pcbios && item memtest Memtest86+ (v5.31) ||
iseq ${platform} pcbios && item mhdd Mhdd (v4.6) ||
iseq ${platform} pcbios && item hddtolls HDDtools ||
iseq ${platform} pcbios && item victory Victory ||
iseq ${platform} pcbios && item diskGenius DiskGenius (disk diagnostics) ||
iseq ${platform} pcbios && item ||
item --gap -- -------- iPXE Utilites --------
item -k c config Start interactive (c)onfiguration tool
item -k s shell Start (S)hell iPXE
choose -d exit -t ${menu-timeout} selected
goto ${selected}
########
# Пункты меню
# В среднем состоят из трёх пунктов:
# kernel - передаю ядро linux и аргументы для запуска
# initrd - пакет данных для ядра
# boot - команда передачи управления ядру linux
########
:debian11
# В данном случае, в kernel передаётся ссылка linux ядра на http-сервере и аргументы запуска
kernel {httpServer}/images/bullseye/install.amd/pxe_${platform}_preseed.cfg netcfg/dhcp_failed=note netcfg/dhcp_options="Retry network autoconfiguration" netcfg/get_domain= --- quiet initrd=initrd.gz
# так же, ссылкой на http, передается пакет данных для ядра
initrd ${httpServer}/images/bullseye/install.amd/initrd.gz
# команда передачи управления ядру linux и в случае ошибки - переход к обоку обработки ошибок
boot || goto error
goto start
# Разбор файлов для linux - будет ниже
:win10manager2021
# wimboot - загрузчик .wim файлов установщика Windows, который сам патчит BCD, запускает установку и подтягивает скрипты запуска
# https://ipxe.org/wimboot
kernel wimboot
###########################################
# Неизменный блок для любого образа Windows
###########################################
initrd ${httpServer}/images/winpe/Boot/BCD BCD # Стандартный BCD WinPE
initrd ${httpServer}/images/winpe/Boot/boot.sdi boot.sdi # Стандартный boot.sdi WinPE
initrd ${httpServer}/images/winpe/boot.wim boot.wim # Стандартный boot.wim
initrd configWPE/winpeshl.ini winpeshl.ini # Конфиг запускающий скрипт установки.
###########################################
# Изменяемые данные в зависимости от образа
initrd configWPE/win10manager2021/install.bat install.bat # Скрипт установки образа
boot || goto error
goto start
#############################
# Утилиты загружаемые с iPXE
#############################
# Acronis images
:acronis2021x64
kernel ${httpServer}/images/utils/acr2021/dat10.dat initrd=dat11.dat initrd=dat12.dat vga=vesa MBRCRCS force_modules=usbhid quiet
initrd ${httpServer}/images/utils/acr2021/dat11.dat
initrd ${httpServer}/images/utils/acr2021/dat12.dat
boot || goto error
goto start
# Утилиты загружаются через Memdisk и доступны только для BIOS режима
:memtest
kernel memdisk || goto error
initrd ${httpServer}/images/utils/memtest86+-5.31b.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start
:victory
kernel memdisk || goto error
initrd ${httpServer}/images/utils/vcr35r.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start
:mhdd
kernel memdisk || goto error
initrd ${httpServer}/images/utils/mhdd32ver4.6.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start
:hddtools
kernel memdisk || goto error
initrd ${httpServer}/images/utils/hddtools.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start
:diskGenius
kernel memdisk || goto error
initrd ${httpServer}/images/utils/DiskGenius.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start
# Интерактивное меню редактирования конфигурация iPXE и сетевой карты
:config
config
goto start
# Командная строка iPXE
:shell
shell
goto start
:exit
echo Boot from disk...
sleep 2
exit
# При ошибках выход на командную строку
:error
echo Failed - have error
sleep 1
goto shell
##############################
Оглавление Начало раздела
4. Добавление образов Linux, Windows, утилит
После написания меню, необходимо подготовить загрузчики и пакеты загружаемых систем.
Разберу примеры:
-
Linux
-
Windows
-
Утилиты
Оглавление
4.1. Добавление Linux
На стенде создаю папки:
mkdir -p /var/www/html/images/bullseye/install.amd # Для загрузчика, файлов ответа
mkdir -p /var/www/html/images/bullseye/postinstall # Для скриптов и пакетов пост-установки. Скачиваться будут благодаря команде в файле ответов
cd /var/www/html/images/install.amd/
Скачиваю ядро и пакет данных linux:
wget http://ftp.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux
wget http://ftp.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz
Скачиваю драйвера и встраиваю их в пакет ядра:
[ -f initrd.gz.orig ] || cp -p initrd.gz initrd.gz.orig
[ -f firmware.cpio.gz ] || wget http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/stable/current/firmware.cpio.gz
cat initrd.gz.orig firmware.cpio.gz > initrd.gz
Создаю 2 файла ответов для debian-installer:
-
pxe_efi_preseed.cfg с разметкой диска под UEFI
-
pxe_pcbios_preseed.cfg с разметкой диска под Legacy
Кладу их по пути /var/www/html/bullseye/install.amd/:
[drwxr-xr-x 4.0K] bullseye
├── [drwxr-xr-x 4.0K] install.amd
│ ├── [-rw-r--r-- 138M] initrd.gz
│ ├── [-rw-r--r-- 6.5M] linux
│ ├── [-rw-r--r-- 15K] pxe_efi_preseed.cfg
│ └── [-rw-r--r-- 15K] pxe_pcbios_preseed.cfg
└──[drwxr-xr-x 4.0K] postinstall
Если сейчас попытаться загрузить linux, то все получится
Оглавление Начало раздела
4.2 Добавление Windows
Установки Windows через PXE как тачка на прокачку:
-
Запускаем PXE ->
-
Передаём управление iPXE ->
-
Передаём управление wimboot ->
-
Передаем управление WinPE ->
-
Устанавливаем Windows
Оглавление
Но по порядку.
-
Для установки Windows понадобится wimboot — загрузчик для wim образов. Умеет патчить BCD, работать с HTTP, переиспользовать память и т.д.
Скачиваю последнюю стабильную версию и кладу рядом с другими загрузчиками /srv/tftp/wimboot
-
Следом понадобится чистый WinPE, а именно его
-
winpe/media/Boot/BCD
-
winpe/media/Boot/boot.sdi
-
winpe/media/sources/boot.wim
-
Для использования его как «оболочки» для запуска установки Windows.
Их необходимо будет распаковать в /var/www/html/images/winpe/
-
В каталог /srv/tftp/images/win10setup/ распаковываю образ установочного диска Windows и создаю там каталог wims — в неё будут складываться пакеты .wim образов и файлы ответов.
-
В неё кладу заранее подготовленные:
-
win10manager2021.wim — пакет корпоративного образа
-
autounattend_bios_manager.xml и autounattend_efi_manager.xml — файлы ответов к нему для UEFI и Legacy режимов.
-
-
Создаю каталоги:
-
/srv/tftp/configWPE/ — для складывания в него настроек для разных образов (по аналогии с Bullseye)
-
/srv/tftp/configWPE/win10manager2021/ — для непосредственно скрипта установки
-
-
Создаю файл /srv/tftp/configWPE/winpeshl.ini — конфигурация, которая передаваемая ядру и которая указывает, какой скрипт выполнить при запуске:
[LaunchApps]
"install.bat"
-
Создаю сам файл:
/srv/tftp/configWPE/win10manager2021/install.bat
@echo off
echo wpeinit start
:: Инициализация среды WinPE
wpeinit
:: Задержка для гарантированного запуска сетевой карты и получение IP
echo We are waiting for 15 seconds for the network card to start
ping -4 -n 15 -w 1000 "">nul
ipconfig /renew
echo
echo wait 5 second pre-mount share folder with distr
ping -4 -n 5 1000 "">nul
::Монтирование каталога с установщиком Windows
net use Y: \10.0.2.5\images\win10setup /user:anonymous anonymous
:: Получение информации, в каком режиме запущен пк - UEFI или Legacy
echo check boot-mode
wpeutil UpdateBootInfo
for /f "tokens=2* delims= " %%A in ('reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType') DO SET Firmware=%%B
:: В зависимости от режима выше - выбор нужного образа установки и файла ответов
echo start Setup win10
if %Firmware%==0x1 Y:\sources\setup.exe /unattend:Y:\wims\autounattend_bios_manager.xml /installfrom:Y:\wims\win10manager2021.wim
if %Firmware%==0x2 Y:\sources\setup.exe /unattend:Y:\wims\autounattend_efi_manager.xml /installfrom:Y:\wims\win10manager2021.wim
cmd.exe
При проверке установка успешно запускается (с ошибкой в конце, что на VM мало места, но не суть):
Картинка
По итогу получается:
Дерево каталогов
# Web-сервер
images
├── bullseye # Файлы образа Linux
│ ├── install.amd/ # Ядро и файлы ответов
│ └── postinstall/ # Скрипты и пакеты для пост-установки
├── photo # Необязательный каталог для фонов меню
│ ├── efi.png
│ └── pcbios.png
└── winpe # Файлы для запуска WinPE
├── BCD
├── boot.sdi
└── boot.wim
# Tftp/Samba-серва
tftp
├── boot.ipxe # Установка переменных среды iPXE
├── configWPE # Хранилище конфигураций образов Windows
│ ├── win10manager2021
│ │ └── install.bat # Скрипт запуска установки, где меняются samba пути
│ └── winpeshl.ini # Общая для всех конфигурация, запускающая скрипт установки
├── images
│ └── win10setup # Каталог стандартного установочного диска Windows
│ ├── autorun.inf
│ ├── boot/
│ ├── bootmgr/
│ ├── bootmgr.efi
│ ├── efi/
│ ├── setup.exe
│ ├── sources/
│ ├── support/
│ └── wims/ # Пакеты *.wim и файлы ответов
│ ├── autounattend_bios_manager.xml
│ ├── autounattend_efi_manager.xml
│ └── win10manager2021.wim
├── ipxe.efi # Загрузчик для UEFI
├── menu.ipxe # Меню iPXE
├── undionly.kpxe # Загрузчик для Legacy
└── wimboot # Загрузчик для Windows
Оглавление Начало раздела
4.3 Утилиты
Для них на Web-сервере создал подкаталог /var/www/html/images/utils/ и складываю либо *.iso образы для запуска через Memdisk, либо передавая в качестве ядра соответствующие файлы (например Acronis)
Оглавление Начало раздела
5. Итог
По итогу получилась система с минимальным количеством файлов для заливки и добавления:
-
3 загрузчика (Legacy,UEFI,Windows)
-
3 файл WinPE для Windows
-
По 2-3 файла непосредственно образа
-
По 2 файла ответов на образ
-
По 1 скрипту пост-/установки на образ
-
Простое меню. Если убрать графику, парольную заглушку и оставить TUI — станет еще меньше.
-
Возможность работать с HTTP (…, iSCSI SAN, AoE SAN и т.д.), что ускоряет загрузку.
Оглавление
Ожидаю вашего мнения в комментариях
P.S. Первая статья и тонна мучений с редактором.
-
Использую Firefox, при нажатии на «/» в большинстве случаев ничего не появляется, либо стало появляться только после отключения всех AdBlock-еров.
-
Предпросмотра для ссылок нет — перепроверить ссылки внутри статьи не могу
-
В плане оформления помог плагин Unotes который конвертировал мой markdown в WYSIWYG, но потом вносил коррективы. Если что-то не будет работать — буду исправлять по мере обнаружения.
Бывает же, что необходимо переустановить операционную систему на нетбук или компьютер без привода, когда под рукой нет флешки для записи на нее установочного дистрибутива, потому разработчики Windows предлагают несколько методов инсталлировать операционную систему:
- со съёмного носителя, в роли которого может выступать компакт-диск или флешка;
- с раздела локального жесткого диска, подключенного к целевому компьютеру;
- через сеть, используя удаленный компьютер, если BIOS поддерживает загрузку компьютера через сетевую карту.
Сегодня рассмотрим, как выполняется удаленная установка операционной системы через интернет (3-й метод) во всех подробностях.
Инсталляция операционной системы посредством пакета автоустановки
Установка Windows 7 по сети потребует:
- образа с устанавливаемой Windows;
- пакета автоматической инсталляции AIK, загруженного с сайта Microsoft;
- TFTP и DHCP сервера;
- утилиту для виртуализации образов UltraISO, Daemon Tools.
Windows AIK – разработанный Microsoft пакет инструментов для автоматической установки операционки, ее конфигурации, загрузки и развертывания по локальной сети. Также с его помощью можно выполнять прожиг образов посредством ImageX и конфигурировать их. Этот набор средств значительно упрощает работу системным администраторам и IT-специалистам процесс установки Windows и ее лицензий на многочисленных компьютерах.
Перейдем к подготовительному этапу.
- Монтируем образ Windows AIK, загруженный с сайта Microsoft, в виртуальный дисковод или распаковываем его при помощи архиватора в удобную директорию в корне диска.
- Запускаем файл «StartCD.exe», если автозапуск дисков отключен или не сработал.
- Проводим инсталляцию AIK, кликнув «Установка Windows AIK».
- Затем выполняем предлагаемые инструкции. Сложностей или нюансов в процессе установки нет.
- Запускаем командную строку средств развертывания с администраторскими привилегиями.
- Прописываем «copype.cmd x86 d:\winpe» для 32-хбитной ОС или «copype.cmd amd64 d:\winpe» для х
- После этого появится каталог «WinPE».
- Выполняем команду:
- Изменяем файл «mount\windows\system32\startnet.cmd», внеся в него следующую информацию.
Для редактирования открываем документ через текстовый редактор.
- Вводим:
в поисковую строку «Пуска».
- Создаем папку boot в любом корневом каталоге и расшариваем ее через «Свойства» папки (в примере это d:\winpe).
- Вводим следующие команды в консоли для копирования файлов.
- Размонтируем образ.
- Открываем текстовый редактор и вводим в него расположенный ниже код.
- Сохраняем файл под именем createbcd.cmd в каталоге winpe.
- Выполняем его через консоль, введя:
Выполняем настройку серверов
DHCP поставляет данные удаленному ПК о свободном IP, маске подсети и имени скачиваемого файла с адресом TFTP. Задачей последнего является реализация передачи данных между сервером и компьютером, на который устанавливаем Windows.
- Загружаем миниатюрную утилиту TFTPD32 с сайта разработчика.
- Запускаем программу с администраторскими привилегиями через контекстное меню исполняемого файла.
- В настройках оставляем флажки только возле TFTP и DNS-серверов.
- На вкладке TFTP-сервер задаем путь к каталогу, где находится папка «boot».
- В DHCP вводим IP-адрес удаленного ПК, расположенного в вашей локальной сети.
- Вводим наш IP в строку DNS Server.
- Остальные параметры вводим как на скриншоте.
Задаем путь к файлу pxe загрузчика. Это будет pxe boot.n12 или pxe boot.com. Подробнее о PXE читайте в окончании статьи.
- Заходим в «Центр управления сетями» и выполняем настройку локальной сети.
- Вызываем «Свойства» активного соединения, если на ПК используется не одна сетевая карта.
- Заходим в «Свойства» протокола TCP\IP 4-й версии.
- Переносим переключатель в положение «Использовать следующий IP» и вводим адрес сервера.
- Вводим адрес сервера DNS и закрываем все окна с сохранением результатов.
Сервер для инсталляции Windows через интернет настроен.
Переключаемся к ПК, на котором будем осуществлять инсталляцию операционной системы посредством использования локальной сети в качестве интерфейса для передачи установочных файлов на целевой компьютер.
- Вызываем меню BIOS на компьютере посредством клавиши F2, Del или иной, полученной из руководства или сообщения на экране загрузки BIOS.
- Посещаем пункт базовой системы ввода/вывода, отвечающий за встроенное в материнскую плату оборудование.
- Активизируем опцию, отвечающую за загрузку компьютера посредством сетевой карты – переводим в положение «Enable».
- Возвращаемся на уровень выше и переходим в меню, отвечающее за настройку приоритета загрузочных устройств.
- В качестве первоприоритетного устройства выбираем сетевую карту – LAN или Legasy LAN.
- Выходим с БИОСА при помощи клавиши F10 и подтверждаем внесение изменений.
- Перезагружаем компьютер, после чего он начнет загрузку с локальной сети.
- После перезапуска компьютера сетевая карта получает IP-адрес, используя DHCP.
Далее начинается загрузка начальных файлов для инсталляции Windows.
Внизу, под центральной надписью, отображается адрес ПК, откуда производится загрузка установочный файлов.
Затем появится окно командной строки.
При правильной настройке будет выполнено автоматическое монтирование диска с установочными файлами и запустится процесс установки Windows. Если все верно, появляется окно с выбором языка, региональных стандартов и раскладки.
Далее следует обычная инсталляция Windows, потому подробно останавливаться на процессе ее установки не будем – уже были статьи с подробными инструкциями и руководствами.
Что собой представляет Preboot eXecution Environment
PXE – специальная среда, разработанная с целью реализации механизма загрузки ПК, используя сетевой адаптер, не требуя локального хранилища информации (оптического диска, флешки). В ней используется загрузчик PXE Linux. Именно для PXE мы настраивали TFTP-сервер.
Исполняемый код среды зашит в ПЗУ сетевого адаптера, он получает исполняемый файл по TFTP-протоколу из сети и передает ему управление системой.
Загрузчик pxe boot.n12 отличается от pxe boot.com требованием нажать функциональную клавишу F12 для запуска, в нашем случае, инсталляции. Учитывая, что выполнение этого действия в нашем случае не принципиально, будем использовать pxe boot.n12.
Большинству пользователей, сталкивающихся с задачей установка Windows с флешки или необходимостью загрузки компьютера с других ISO-образов, известна программа Ventoy для создания загрузочных и мультизагрузочных флешек. iVentoy — новый инструмент от того же разработчика, для быстрой и удобной загрузки компьютеров с образов по локальной сети.
В этом обзоре о том, как использовать iVentoy для установки Windows или Linux по сети сразу на несколько компьютеров или загрузки с различных ISO образов с инструментами диагностики и решения проблем с компьютером.
Использование iVentoy
iVentoy позволяет выполнять загрузку из образов в среде PXE (Preboot Execution Environment) с помощью сетевой карты без использования локального диска или флешки. Это может пригодиться как для установки Windows или другой ОС на нескольких компьютерах в локальной сети, так и для задач диагностики.
Скачать iVentoy можно с официального сайта разработчика — на момент написания этого обзора файлы расположены в Google Drive и доступны в трех версиях:
- Win64 — для x64-систем Windows
- Win32 — для x86 (32-бит) Windows
- Linux — для запуска в ОС Linux
После загрузки файла нужной версии достаточно выполнить следующие первоначальные шаги:
- Распакуйте архив с iVentoy в удобное расположение.
- Поместите нужные образы в папку ISO в папке с распакованным архивом.
- Запустите исполняемый файл iVentoy.
- Будет открыто окно программы и, автоматически — окно браузера с веб-интерфейсом для управления iVentoy (если этого не произошло, откройте адрес 127.0.0.1:26000 в браузере.
- В веб-интерфейсе на вкладке Boot Information вы можете изменить сетевые настройки (например, при наличии нескольких IP).
- В разделе Configuration можно изменить настройки сети (обычно необходимости в этом нет) и изменить файл, используемый для EFI-загрузки.
- Раздел MAC Filter позволяет разрешить или запретить загрузку с iVentoy по MAC-адресам (по умолчанию, сетевая загрузка будет доступна всем устройствам в сети).
- Раздел Image Management позволяет просмотреть список доступных образов, выбрать образ, используемый по умолчанию. Здесь же есть возможность добавить файлы (в виде архива .7z, например, драйверы) к загружаемому образу (пункт «Injection File») — при загрузке из образов Windows такие архивы будут автоматически распакованы на диск X: (временный диск, создаваемый в программе установки) и доступны в процессе.
- Для того, чтобы сервер PXE iVentoy начал работать, на вкладке «Boot Information» нажмите зеленую кнопку «Play».
После выполнения последнего шага компьютеры в локальной сети смогут загружаться с образов, добавленных в iVentoy.
Загрузка по сети из образа iVentoy
После того, как сервер iVentoy запущен, вам потребуется выполнить следующие шаги:
- В БИОС/UEFI вашего компьютера установите сетевую загрузку в качестве первого устройства загрузки: также, как вы выбираете флешку, локальный диск или Windows Boot Manager. Пункт может иметь название Network Boot, PXE, Ethernet, LAN или другие похожие. Отдельно может потребоваться включить поддержку LAN/PXE загрузки в настройках загрузки или расширенных (Advanced) настройках БИОС.
- Отключите Secure Boot в БИОС (во всяком случае, в моих тестах загрузка с включенной безопасной загрузкой не удалась).
- Сохраните настройки БИОС и запустите компьютер.
- Если ваш компьютер подключен к локальной сети (с помощью кабельного подключения) и всё прошло успешно, вы увидите экран с возможностью выбора образа, с которого требуется загрузиться.
- Загрузку можно производить на нескольких компьютерах в локальной сети. Список подключенных компьютеров и тип загрузки будет отображаться в веб-интерфейсе iVentoy, на компьютере, на котором запущен сервер.
Я тестировал iVentoy в нескольких виртуальных машинах Hyper-V, а не на физических компьютерах. Результаты:
- Проблем при UEFI-загрузке при отключенном Secure Boot нет: как WinPE, так и установочные образы Windows загружаются и работают (полностью процесс установки не проводил).
- Загрузка в Legacy или при включенном Secure Boot не удалась. Первая проблема, вероятнее всего, не будет актуальной на физическом компьютере и связана с особенностью виртуальных сетевых адаптеров в виртуальных машинах Hyper-V первого поколения, информации о том, решаема вторая проблема у меня нет.
Надеюсь, кому-то из читателей новый инструмент будет полезен. Если же у вас есть дополнительная информация по его использованию, буду рад вашему комментарию к статье.
1. Устанавливаем TFTP и DHCP сервера для организации сетевой загрузки.
2. Устанавливаем загрузчик Windows Boot Manager на TFTP сервер.
3. Создаем общий сетевой ресурс на котором будут размещаться установочные файлы. Общий доступ может быть организован по протоколу CIFS или SMB.
4. Размещение установочных файлов необходимых версий Windows на общем сетевом ресурсе.
5. Размещаем среду предустановки на TFTP сервере, и выполняем ее настройку.
6. Настраиваем меню загрузчика.
7. Проверяем итоговый результат.
Первые два пункта представлены с ссылками, так как данные темы уже рассматривались ранее. Рекомендую ознакомиться с ними.
Общий сетевой ресурс
Нам необходимо создать папку, и организовать к ней общий доступ по сети. Сделать это можно в свойствах выбранного вами каталога, на вкладке Доступ.
Для организации общего доступа по отдельной учетной записи, потребуется создать отдельного пользователя. Сделать это можно в оснастке Локальные пользователи и группы (Win+R > lusrmgr.msc > OK).
На вкладке Безопасность, в свойствах папки с общим доступом, нужно добавить созданного пользователя с выставлением ему прав на чтение и выполнение.
Общая папка настроена.
Копирование дистрибутивов в общую папку
В качестве установочной версии ОС Windows мною была выбрана Windows 10 в 32 и 64 битном исполнении. То есть это два дистрибутива. Создадим для каждого, отдельную папку в директории с общим доступом.
В моем случае это папки Setup_Win10x64 и Setup_Win10x86.
Теперь скопируем папку sources каждого из дистрибутивов в созданные для них директории.
Установочные файлы готовы к использованию.
Среда предустановки
В качестве среды предустановки, будет использована та, что идет в комплекте с установочным дистрибутивом. Располагается она в папке sources и представлена образом boot.wim.
Текущий файл boot.wim (обоих дистрибутивов), настроен на запуск установки Windows с диска на котором он расположен. Наша задача, настроить данный образ так, чтобы процесс установки запускался из сети.
Изменения которые необходимо будет сделать, это — интегрировать в образ boot.wim сетевые драйвера, и внедрить скрипт установки.
Сетевые драйвера необходимы для того, чтобы загруженная WinPE могла корректно определить сетевой адаптер(ы) компьютера на котором она будет запущена.
Скрипт установки, будет выполнять подключение к ранее созданному сетевому ресурсу, с установочными файлами, и запускать процесс установки ОС Windows.
Так как у нас два дистрибутива, x86 и x64, среду предустановки каждого, нужно настраивать по отдельности. Данный процесс одинаков, поэтому я приведу пример настройки только для boot.wim x86 версии, с необходимыми поправками там, где это необходимо для boot.wim x64 версии.
Подготовка сетевых драйверов
Каких то особенных наборов драйверов, или специальных сборок не потребуется. Для создания своего пака драйверов можно поступить так.
Первым делом скачиваем установщик драйверов SDI (Snappy
Driver Installer). Нужна именно Lite версия. Страница скачивания https://sdi-tool.org/download/.
Распаковываем скачанный архив с SDI Lite.
Запускаем исполняемый файл SDI_Rxxxx.exe (32-битная версия) или SDI_x64_Rxxxx.exe (64-битная), в зависимости от разрядности вашей ОС. Или скрипт SDI_auto.bat, он сам определит разрядность запустит подходящий исполняемый файл. После запуска, скачиваем только сетевые драйверпаки.
По завершении загрузки, закрываем SDI и переходим в папку drivers. В ней будут располагаться скачанные архивы с драйверами.
Распакуем в отдельные директории следующие драйверпаки — DP_LAN_Intel_18054.7z, DP_LAN_Others_18053.7z, DP_LAN_Realtek-NT_18055.7z.
В каждой распакованной директории с драйверами, присутствуют поддиректории вида *x86* и *x64*.
Это разделение драйверов по разрядности. Тут возникает одна проблема. К примеру, для WinPE x86 интеграция x64 драйверов будет избыточным и нецелесообразным действием. Поэтому удалим все поддиректории с именем *x64* (для WinPE x64 будет ровно противоположенное действие). Для этой цели удобнее всего воспользоваться каким-нибудь файловым менеджером (Far Manager, Total Commander, Double Commander).
Драйвера сетевых адаптеров для WinPE x86 готовы. Теперь имеющиеся директории можно перенести в отдельную папку, например LAN_x86. Думаю вам не составит труда самостоятельно организовать папку с драйверами LAN_x64.
Размещаем среду предустановки на TFTP
Корень TFTP сервера на данный момент выглядит так (конкретно, это состояние на момент завершения предыдущей статьи).
Расположим в папке Image образы boot_x86.wim и boot_x64.wim (то есть это обычные boot.wim, взятые из папки sources, скопированные и переименнованные). Данные образы, это не измененные, образы сред предустановок соответствующих дистрибутивов ОС Windows.
Общая файловая структура TFTP на следующем скриншоте.
Интеграция сетевых драйверов в среду предустановки
Перед интеграцией драйверов в образ boot_x86.wim, его предварительно необходимо смонтировать. Делается это с помощью команд dism.exe /get-imageinfo /imagefile:D:\TFTP\Image\boot_x86.wim (получение информации о указном *.wim образе, чтобы определить индекс монтируемого содержимого)
и dism.exe /mount-wim /wimfile:D:\TFTP\Image\boot_x86.wim /index:2 /mountdir:E:\mnt (монтирование указанного *.wim образа к указанному каталогу).
После того как образ смонтиорован, можно приступить к интеграции в него ранее подготовленных драйверов. Выполним для этого команду dism.exe /image:E:\mnt /Add-Driver /Driver:C:\Users\x7z3\Desktop\SDI\drivers\LAN_x86 /Recurse.
Этим действием мы интегрировали сетевые драйвера из директории LAN_x86 в образ boot_x86.wim. Для образа boot_x64.wim все будет идентично, разница будет лишь в имени подключаемого файла и директории с драйверами.
Интеграция скрипта запуска установки ОС
Скрипт установки — это обычный командный файл с расширением *.cmd. Его задача, подключить сетевой диск с установочными файлами и запустить установщик ОС.
Для того чтобы организовать запуск скрипта, во время загрузки среды предустановки, нам потребуется создать файл winpeshl.ini (текстовый файл) в директории E:\mnt\Windows\System32 с следующим содержимым:
[LaunchApps]
init.cmd
Файл winpeshl.ini, является конфигурационным файлом для среды предустановки. Он позволяет задать программу(ы) выполняемые вместо стандартной оболочки. Подробнее о нем можно почитать тут.
Теперь создадим сам скрипт установки init.cmd (текстовый файл) в той же директории. Исходный текст init.cmd:
:::::::::::::::::::::::::::::::::::::::
:: INIT SCRIPT ::
:::::::::::::::::::::::::::::::::::::::
@echo off
title INIT NETWORK SETUP
color 37
cls
:: INIT Variables
:: Тут мы указываем сетевой путь до папки содержащей установочные файлы
set netpath=\\192.168.0.254\share\Setup_Win10x86
:: Имя пользователя для подключения к вышеуказанной сетевой папке
set user=guest
:: Пароль от указанной выше учетной записи
set password=guest
:: WPEINIT start
echo Start wpeinit.exe...
wpeinit
echo.
:: Mount Net Drive
echo Mount net drive N:\ ...
net use N: %netpath% /user:%user% %password%
IF %ERRORLEVEL% GEQ 1 goto NET_ERROR
echo Drive mounted!
echo.
:: Run Windows Setup
color 27
echo Starting Windwos Setup...
pushd N:\sources
setup.exe
goto SUCCESS
:NET_ERROR
color 47
cls
echo ERROR: Cant mount net drive. Check network status!
echo Check network connections, or access to network share folder...
echo.
cmd
:SUCCESS
:: Тут, можно добавить команды которые выполнятся после первого этапа установки,
:: то есть в момент, когда установщик скажет что, будет выполнена перезагрузка.
::
:: К примеру, вы можете организовать копирование необходимых установочных программ с
:: сетевого ресурса в свежераспакованную систему...
Учитывайте что установочный скрипт для x64 системы, будет содержать немного другой путь до установочных файлов.
Все необходимое сделано. Осталось только отключить подключенный образ boot_x86.wim с сохранением выполненных изменений. Делается это командой dism.exe /unmount-wim /mountdir:E:\mnt /commit. Предварительно, ОБЯЗАТЕЛЬНО закройте открытые папки или файлы в смонтированном каталоге.
Все вышеописанное нужно будет проделать и для файла образа boot_x64.wim.
Настройка меню загрузчика
Подробно описывать создание меню я не буду. Данный процесс уже подробно рассматривался в этой статье. Приведу лишь скриншоты программы BOOTICE с настройками меню.
Параметры для загрузки boot_x86.wim.
Параметры для загрузки boot_x64.wim.
Проверка итогового результата
Теперь все готово. Осталось только проверить результат проделанной работы. Проверять будем как всегда в виртуальной машине VirtualBox.
Загруженное меню. В шапке видно что загрузчик загружен по сетию
Загрузка образа boot_x86.wim в оперативную память компьютера.
Выполнение интегрированного нами скрипта.
Уведомление скриптом об успешности подключения сетевого ресурса.
Запущенный скриптом установщик ОС Windows.
На этом скриншоте видно, что установка идет реально по сети.
Итог
Технология сетевой установки ОС проста и доступна. Минимум необходимых инструментов. Все что нужно, это установочный образ Windows 10 (нет необходимости скачивать WAIK или ADK). Все описанное выше будет работать для ОС Windows начиная с 7-ки и выше (7, 8.1, 10).
Надеюсь данный материал будет полезен для вас 😉.