Установка Windows 7 через PXE boot c *nix сервера

Сама статья взята с хабра https://habrahabr.ru/sandbox/30865/ и полностью рабочая, но была проблема с драйверами для сетевой карты.

Для начала установим необходимую ос на виртуалку или любой ПК.
Создадим PXE образ. Для этого нам потребуется Набор автоматической установки Windows® (AIK) для Windows®7.
Работает на платформе Windows 7 и Windows Server 2008 (R2).
После установки открываем в пуске с правами администратора: Все программы -> Microsoft Windows AIK -> Командная строка средств развертывания с правами Администратора, и начинаем собирать образ.

copype.cmd x86 d:\winpe
именно x86 несмотря на то, что планируем ставить х86 и существует меню amd64.

imagex /mountrw winpe.wim 1 mount
Теперь, для автоматической установки, в примонтированной папке d:\winpe редактируем файл Windows\system32\startnet.cmd:

wpeinit
net use y: \\192.168.2.86\iso-seven
if exist y:\sources\setup.exe (
y:
cd \sources
setup.exe
)

Самба сервер доступен для скачивания в гостевом режиме поэтому никаких параметров пользователя мы не задавали, при необходимости заменить на net use y: \\192.168.х.х\директория-образа /user:пользователь пароль

imagex.exe /unmount /commit mount

Теперь извлечем ядро и необходимые файлы для загрузки образа:

imagex /mount d:\winpe\winpe.wim 1 d:\winpe\mount
xcopy /ey d:\winpe\mount\windows\boot\pxe d:\tftp
xcopy /iy d:\winpe\mount\windows\boot\fonts d:\tftp\Boot\fonts
copy /y d:\winpe\ISO\boot\boot.sdi d:\tftp\Boot
imagex.exe /unmount d:\winpe\mount

Копируем сам образ в папку Boot
copy /y d:\winpe\winpe.wim d:\tftp\Boot

Прошу обратить внимание на то что папка Boot с большой буквы(Важно).
Теперь создаем «Скрипт» d:\winpe\createbcd.cmd
bcdedit -createstore %1\BCD
bcdedit -store %1\BCD -create {ramdiskoptions} /d "Ramdisk options"
bcdedit -store %1\BCD -set {ramdiskoptions} ramdisksdidevice boot
bcdedit -store %1\BCD -set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
for /F "tokens=2" %%i in ('bcdedit -store %1\BCD -create /d "MyWinPE Boot Image" /application osloader') do set guid=%%i
bcdedit -store %1\BCD -set %guid% systemroot \Windows
bcdedit -store %1\BCD -set %guid% detecthal Yes
bcdedit -store %1\BCD -set %guid% winpe Yes
bcdedit -store %1\BCD -set %guid% osdevice ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions}
bcdedit -store %1\BCD -set %guid% device ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions}
bcdedit -store %1\BCD -create {bootmgr} /d "Windows VISTA BootManager"
bcdedit -store %1\BCD -set {bootmgr} timeout 30
bcdedit -store %1\BCD -set {bootmgr} displayorder %guid%

И запускаем его:
createbcd.cmd d:\tftp\boot

Образ готов, устанавливается через самбу с PXE сервера.
Настройка samba

Есть 2 варианта:
1)Скопировать папку sources с установочного диска в /var/seven (Необязательно в /var)
2)Примонтировать образ
mkdir /var/seven
sudo mount –o loop win7.iso /var/seven/
И зашариваем саму папку /var/seven в файле /etc/samba/smb.conf

[seven]
path = /srv/tftp/seven
browseable = yes
read only = yes
guest ok = yes
Перезагружаем службы:
sudo /etc/init.d/dhcp3-server restart
sudo /etc/init.d/tftpd-hpa restart
sudo /etc/init.d/smbd restart
Готово, можем устанавливать Windows 7 с сети.
Если возникнут какието проблемы, можно их увидеть в:
sudo tail –f /var/log/syslog

___________________
При установке на виртуалку все было прекрасно, но при попытке настроить ноутбук выдало "ошибка 1231 сетевая папка недоступна" при попытке смонтировать нашу сетевую папку.
Как оказалось ноутбук не видел сеть.

Для решения проблемы необходимо скачать драйвера на сетевую плату для нужного нам ноутбука и прошить их в наш образ .vim в той же консоле.

mkdir c:\mount
dism /Cleanup-Wim
dism /Mount-Wim /WimFile:G:\winpe\winpe.wim /index:1 /MountDir:C:\mount
dism /image:C:\mount /add-driver /driver:"G:\drivers\win8\x64" /recurse /forceunsigned
dism /Unmount-Wim /MountDir:C:\mount /Commit

После чего сетевая загрузка Windows 7 доступна.

IMG_20170216_124710

Сетевая установка PXE boot c *nix сервера

Для использования подойдет любая операционная система.
Использовали Debian 7.
root@debian:~# more /etc/debian_version
7.11

1. Установка и настройка TFTP Сервера:
Ставим tFtp сервер.
sudo apt-get install tftpd-hpa
Редактируем конфиг
sudo nano /etc/default/tftpd-hpa

# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure -m /var/lib/tftpboot/tftp-remap -v"

Создаем файл sudo nano /var/lib/tftpboot/tftp-remap
с содержимым автозамен для установки Windows:
r bootmgr.exe /seven/bootmgr.exe
r abortpxe.com /seven/abortpxe.com
r hdlscom1.com /seven/hdlscom1.com
r hdlscom1.n12 /seven/hdlscom1.n12
r hdlscom2.com /seven/hdlscom2.com
r hdlscom2.n12 /seven/hdlscom2.n12
r pxeboot.com /seven/pxeboot.com
r pxeboot.n12 /seven/pxeboot.n12
r WdsConfig.inf /seven/WdsConfig.inf
r wdsnbp.com /seven/wdsnbp.com
r \\Boot\\BCD seven/Boot/BCD
r \\boot\\boot.sdi seven/Boot/boot.sdi
r \\Boot\\winpe.wim seven/Boot/winpe.wim

2. Создаем наше PXE меню.
Качаем архив syslinux. Скачиваем последнюю версию и изымаем pxelinux.0, chain.c32, menu.c32:

# wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.04.tar.bz2
# tar xf syslinux-4.04.tar.bz2
# cp syslinux-4.04/core/pxelinux.0 /srv/tftp/

либо руками качаем с https://www.kernel.org/pub/linux/utils/boot/syslinux/
Файлы находятся в директориях:
syslinux-4.04\core\pxelinux.0
syslinux-4.04\com32\modules\chain.c32
syslinux-4.04\com32\menu\menu.c32

Эти три файла грузим в наш корень tftp сервера /var/lib/tftpboot

создаем наше меню /var/lib/tftpboot/pxelinux.cfg/default
содержимое:

ui menu.c32
PROMPT 0
menu background background.png
menu title PXE boot menu

LABEL bootlocal
menu label Boot from first HDD
kernel chain.c32
append hd0 0
timeout 120000
TEXT HELP
The system will boot after time is up.
ENDTEXT

LABEL Windows ->
KERNEL menu.c32
APPEND pxelinux.cfg/windows

LABEL Linux ->
KERNEL menu.c32
APPEND pxelinux.cfg/linux

LABEL FreeBSD ->
KERNEL menu.c32
APPEND pxelinux.cfg/bsd

LABEL HDD and RAM utils ->
KERNEL menu.c32
APPEND pxelinux.cfg/du

LABEL LiveCDs ->
KERNEL menu.c32
APPEND pxelinux.cfg/livecds

LABEL Antiviruses ->
KERNEL menu.c32
APPEND pxelinux.cfg/av

создаем меню Windows /var/lib/tftpboot/pxelinux.cfg/windows
PROMPT 0
UI samenu.c32
menu background background.png
MENU TITLE Windows

LABEL <- Main Menu KERNEL menu.c32 APPEND pxelinux.cfg/default LABEL Windows 10 (x32/x64) kernel ten/pxeboot.0 LABEL Windows 7 (x32/x64) kernel seven/pxeboot.0 LABEL Windows XP kernel xp/pxeboot.0 LABEL <- Main Menu KERNEL menu.c32 APPEND pxelinux.cfg/defaul
и т.д.

На этом PXE меню готово так как у нас отдельный DHCP сервер, если такового нет дополнительно нужно его установить.

IMG_20170216_124631

Теперь добавим разные способы установки.
Samba описана в статье для сетевой установки Windows 7

Доступ по протоколу http, устанавливаем apache
aptitude install apache2
Редактируем конфиг:
nano /etc/apache2/sites-enabled/000-default
и указываем корень к нашим смонтированным OS /var/lib/tftpboot/images к примеру.
Перезагружаем apache
service apache2 restart

Редактируем fstab nano /etc/fstab и дописываем туда наши ISO

/var/lib/tftpboot/iso/win7/win7.iso /var/lib/tftpboot/iso-seven udf,iso9660 user,loop 0 0
/var/lib/tftpboot/iso/Mint/linuxmint-18.1-mate-32bit.iso /var/lib/tftpboot/images/mint/linuxmint-18.1-mate-32bit udf,iso9660 user,loop 0 0
/var/lib/tftpboot/iso/CentOS/CentOS-7-i386-DVD-1511.iso /var/lib/tftpboot/images/centos/CentOS-7-i386-DVD-1511 udf,iso9660 user,loop 0 0

Ставим NFS
aptitude install nfs-kernel-server
nano /etc/exports

# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/var/lib/tftpboot/images/mint/linuxmint-18.1-mate-32bit *(ro,sync,no_wdelay,insecure_locks,no_root_squash,insecure)
/var/lib/tftpboot/images/centos/CentOS-7-i386-DVD-1511 *(ro,sync,no_wdelay,insecure_locks,no_root_squash,insecure)

Запускаем: /etc/init.d/nfs-kernel-server start