Установка Windows по сети с Ubuntu PXE сервера

Posted by

Итак, я плавно со своим PXE сервером развернутым на Ubuntu 18.04 Server подошел к этапу, когда нужно в дополнении к автоматизированным установкам Ubuntu 18.04 Desktop & Server дополнить функционал. Уже сделал, что можно загрузившись через LiveCD инструмент сбросить Windows пароль, проверить жесткий диск на предмет заражения вирусами т. д. А вот моя мечта это возможность устанавливать Windows 7,10 и серверную линейку из среды Ubuntu. Использовать WDS, пожалуй нет. Я специализируюсь на Ubuntu системах, а значит и пишу и делаю исходя из своего предпочтения. В этой заметке я для себя разобрал, как сделать Windows загрузку из под Ubuntu 18.04 PXE.

Подготавливаю систему Ubuntu 18.04 Server amd64 под первоначальное использование:

ekzorchik@srv-bionic:~$ hg clone --insecure https://172.33.33.7/hg/dproject

ekzorchik@srv-bionic:~$ sudo ./dproject/default

Устанавливаю пакет Samba на нем, точнее с его помощью у меня будет файловый ресурс где будет храниться образа Windows 7, как x86/amd64:

ekzorchik@srv-bionic:~$ sudo apt-get install samba samba-common -y

ekzorchik@srv-bionic:~$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.backup

ekzorchik@srv-bionic:~$ sudo nano /etc/samba/smb.conf

[global]

workgroup = WORKGROUP

server string = Samba Server Version %v

log file = /var/log/samba/log.%m

max log size = 50

idmap config * : backend = tdb

cups options = raw

netbios name = pxe

map to guest = bad user

dns proxy = no

public = yes

## For multiple installations the same time - not lock kernel

kernel oplocks = no

nt acl support = no

security = user

guest account = nobody

[install]

comment = Windows 7 Image

path = /windows

read only = no

browseable = yes

public = yes

printable = no

guest ok = yes

oplocks = no

level2 oplocks = no

locking = no

acl allow execute always = true

На заметку: Параметр «acl allow execute always = true» в smb.conf необходим для возможности запускать на исполнение файлы exe.

ekzorchik@srv-bionic:~$ sudo testparm

Load smb config files from /etc/samba/smb.conf

rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)

ekzorchik@srv-bionic:~$ sudo mkdir -p /windows/x32

ekzorchik@srv-bionic:~$ sudo mkdir -p /windows/x64

Монтирую ISO образ Windows 7 на каталог Samba сервиса:

ekzorchik@navy:~$ scp /media/ekzorchik/iso/SW_DVD5_Win_Pro_7w_SP1_64BIT_Russian_-2_MLF_X17-59431.ISO ekzorchik@172.33.33.25:/home/ekzorchik

ekzorchik@srv-bionic:~$ sudo mount -o loop SW_DVD5_Win_Pro_7w_SP1_64BIT_Russian_-2_MLF_X17-59431.ISO /mnt

mount: /mnt: WARNING: device write-protected, mounted read-only.

ekzorchik@srv-bionic:~$ sudo cp -fr /mnt/* /windows/x64/

ekzorchik@srv-bionic:~$ sudo umount /mnt

ekzorchik@navy:~$ scp /media/ekzorchik/iso/SW_DVD5_Win_Pro_7w_SP1_32BIT_Russian_MLF_X17-28979.ISO ekzorchik@172.33.33.25:/home/ekzorchik

ekzorchik@srv-bionic:~$ sudo mount -o loop SW_DVD5_Win_Pro_7w_SP1_32BIT_Russian_MLF_X17-28979.ISO /mnt

ekzorchik@srv-bionic:~$ sudo cp -fr /mnt/* /windows/x32/

ekzorchik@srv-bionic:~$ sudo umount /mnt

ekzorchik@srv-bionic:~$ sudo chmod -R 755 /windows/

ekzorchik@srv-bionic:~$ sudo chown -R nobody:nogroup /windows/

ekzorchik@srv-bionic:~$ sudo /etc/init.d/smbd restart

ekzorchik@srv-bionic:~$ sudo /etc/init.d/nmbd restart

Samba ресурс с двумя каталогами x32 & x64

 

Устанавливаю PXE сервис:

Устанавливаю в систему пакет tftpd-hpa:

ekzorchik@srv-bionic:~$ sudo apt-get install tftpd-hpa -y

ekzorchik@srv-bionic:~$ sudo mkdir /media/pxeboot

ekzorchik@srv-bionic:~$ sudo chmod -R 777 /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo chown -R nobody:nogroup /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo cp /etc/default/tftpd-hpa /etc/default/tftpd-hpa.backup

ekzorchik@srv-bionic:~$ sudo nano /etc/default/tftpd-hpa

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/media/pxeboot"

TFTP_ADDRESS=":69"

TFTP_OPTIONS="--secure --create --verbose"

Перезапускаю сервис tftpd-hpa:

ekzorchik@srv-bionic:~$ sudo service tftpd-hpa restart && sudo service tftpd-hpa status | head -n 5

ekzorchik@srv-bionic:~$ sudo apt-get install pxelinux syslinux -y

ekzorchik@srv-bionic:~$ sudo cp /usr/lib/syslinux/modules/bios/vesamenu.c32 /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo cp /usr/lib/syslinux/modules/bios/libcom32.c32 /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo cp /usr/lib/syslinux/modules/bios/libutil.c32 /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo cp /usr/lib/PXELINUX/pxelinux.0 /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo cp /usr/lib/syslinux/memdisk /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo cp /usr/lib/syslinux/modules/bios/ldlinux.c32 /media/pxeboot/

ekzorchik@srv-bionic:~$ sudo mkdir /media/pxeboot/pxelinux.cfg/

ekzorchik@srv-bionic:~$ sudo nano /media/pxeboot/pxelinux.cfg/default

#Секция по умолчанию, если пользователь не выбрал никакого варианта или нажал
клавишу Enter

DEFAULT vesamenu.c32

#Секция времени в секундах, в течении которого отображается загрузочное меню

TIMEOUT 600

#Секция отображения строки для выбора варианта загрузки (1 - view, 0 - hidden)

PROMPT 0

MENU TITLE PXE MENU

# загрузка системы с диска

LABEL Boot from first hard disk

localboot 0x80

label Install Windows 7 x32/x64

KERNEL memdisk

INITRD windows/winpe_amd64.iso

APPEND iso raw

ekzorchik@srv-bionic:~$ sudo chown -R nobody:nogroup /media/pxeboot/

ekzorchik@srv-bionic:~$ ss -l4 | grep tftp

udp UNCONN 3072 0 0.0.0.0:tftp 0.0.0.0:*

Далее на VM под управлением Windows 7 x64 устанавливаю пакет Windows AIK (KB3AIK_RU.iso размером 1.2 Gb) и через инструмент Deployment Tools Command Prompt

Win + Все программы — Microsoft Windows AIK — «Командная стройка средств развертывания» (запускаю через правый клик с правами администратора)

(для amd64 создаю winpe образ)

C:\Program Files\Windows AIK\Tools\PETools>copype amd64 c:\winPE_x64

c:\winPE_x64>copy "c:\Program Files\Windows AIK\Tools\PETools\amd64\winpe.wim" c:\winPE_x64\ISO\sources\Boot.wim

c:\winPE_x64>copy "c:\Program Files\Windows AIK\Tools\amd64\imagex.exe" c:\winPE_x64\ISO\

c:\winPE_x64>oscdimg -n -bC:\winPE_x64\etfsboot.com c:\winPE_x64\ISO c:\winPE_x64\winpe_amd64.iso

Computing directory information complete

Image file is 170760192 bytes

Writing 22 files in 9 directories to c:\winPE_x64\winpe_amd64.iso

100% complete

Final image file is 170760192 bytes

Done.

(для x86 создаю winpe образ)

C:\Program Files\Windows AIK\Tools\PETools>copype x86 c:\winPE_x86

c:\winPE_x86>copy "c:\Program Files\Windows AIK\Tools\PETools\x86\winpe.wim" c:\winPE_x86\ISO\sources\Boot.wim

c:\winPE_x86>copy "c:\Program Files\Windows AIK\Tools\x86\imagex.exe" c:\winPE_x86\ISO\

c:\winPE_x86>oscdimg -n -bC:\winPE_x86\etfsboot.com c:\winPE_x86\ISO c:\winPE_x86\winpe_x86.iso

Computing directory information complete

Image file is 145268736 bytes

Writing 18 files in 8 directories to c:\winPE_x86\winpe_x86.iso

100% complete

Final image file is 145268736 bytes

Done.

Копирую получившийся iso файл на SAMBA сервис в каталог \\172.33.33.25\install

Копирую winpe_amd64.iso в smb ресурс \\172.33.33.25\installФайл успешно скопирован на SMB ресурс

 

 

ekzorchik@srv-bionic:~$ sudo mkdir /media/pxeboot/windows/

ekzorchik@srv-bionic:~$ sudo mv /windows/winpe_amd64.iso /media/pxeboot/windows/

ekzorchik@srv-bionic:~$ sudo mv /windows/winpe_x86.iso /media/pxeboot/windows/

Теперь беру VM и выставляю ей что она сперва должна произвести загрузку по сети

При загрузке по сети вижу свое PXE менюВыбрав установку Windows 7 ожидаю когда файлы загрузятсяВижу запрос на нажатие клавиши нажимаю клавишу Enter и производится загрузка с диска, а диск у меня это iso образ. Тем самым стартует загрузка Windows, но не привычная установка а приглашение командной строки:

Нажимаю клавишу Enter и начинается загрузка с winpe_amd64.isoВижу приглашение командной строки

 

В этом приглашении следует уже подмонтировать SAMBA ресурс и запустить установку ОС, т. е. Windows 7 Pro x64

X:\windows\system32> net use M: \\172.33.33.25\install\x64

где M: — это произвольное буква на которую монтирую доступ к ресурсу.

Затем перехожу на букву M: и запускаю файл инсталляции операционной системы:

X:\windows\system32\cd /d M:

M:\>setup.exe

Указываю метод ввода (я предпочитаю чтобы дефолтным был английский язык, а не русский)

Запустив установку Windows 7 SP1 Pro x64 начинаю с первого шага выбора языка

Нажимаю «Далее» — «Установить» и начинается обыденный процесс инсталляции операционной системы Windows, как если бы я просто записал образ на болванку или USB Flash Drive, выставил в BIOS с чего загружаться и загрузился.

Вообще следует разделить установку Windows в default файле:

LABEL Boot from first hard disk

localboot 0x80

LABEL Install Windows 7 Pro SP1 x64

KERNEL memdisk

INITRD windows/winpe_amd64.iso

APPEND iso raw

LABEL Install Windows 7 Pro SP1 x86

KERNEL memdisk

INITRD windows/winpe_x86.iso

APPEND iso raw

Далее, для того, чтобы автоматизировать установку системы, можно с помощью «диспетчера образов системы Windows» подготовить файл ответов Autounattend.xml (именно так должен именовать файл ответов), и запускать установку с файлом ответов:

M:\setup.exe /unattend: Autounattend.xml

Исходя из этого, становится возможным на большом количестве персональных компьютеров которые необходимо вот прям, завтра, или сейчас ввести в эксплуатацию установить ось задействовав текущий PXE сервис и общий ресурс в роли SAMBA сервиса на который взгромоздить подготовленный ранее файл ответом или ставить все в ручную.

О том, как подготовить файл ответов будет в следующей заметке.

А пока я прощаюсь, на этом всё, с уважением автор блога Олло Александр aka ekzorchik