Pull to refresh

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

Привет Хабр!

Хочу поделиться с вами своим опытом по установке Windows 7 с сети (PXE boot на Ubuntu server).
Так как я не нашел удачного решения в интернете, решил поделится опытом.
Если интересно прошу под кат.

Эта статья является дополнением к ранее опубликованной статье на хабре.
На днях наткнулся на интересную статью, Где очень хорошо рассказывается об установке Windows 7 с сети, но с платформы на базе Windows. А так как у меня есть сервер на Ubuntu, захотелось прикрутить его туда, но все оказалось не так просто.

Создание PXE образа


Итак, начнем с создания PXE образа. Для этого нам потребуется Набор автоматической установки Windows® (AIK) для Windows®7.
Работает на платформе Windows 7 и Windows Server 2008 (R2).
После установки открываем в пуске: Командная строка средств развертывания с правами Администратора, и начинаем собирать образ.
copype.cmd x86 d:\winpe
imagex /mountrw winpe.wim 1 mount

Теперь, для автоматической установки, в примонтированной папке d:\winpe редактируем файл Windows\system32\startnet.cmd:
wpeinit
net use y: \\192.168.0.1\seven /user:seven seven
if exists y:\sources\setup.exe (
y:\sources\setup.exe
)

В строке монтирования, можно задать свои параметры, смотря как будете настраивать Samba, у меня к примеру она расшарена без авторизации с правами read only и параметр /user:seven seven не обязательно.
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
#B Копируем сам образ в папку 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 набор для установки Windows 7 с сети.
Также вы можете скачать мой образ тут или тут

Настройка DHCP – Сервера:


Конфигурационный файл /etc/dhcp/dhcpd.conf

ddns-update-style none;
option domain-name "xxxxxxxx.xx";
option domain-name-servers 8.8.8.8;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;

subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.5 192.168.0.100;
filename = "pxeboot.n12";
}


С такой конфигурацией при ланбуте сразу пойдет установка windows. Если-же вы будете использовать эту статью как дополнение к этой статье, тогда в файле /etc/dhcp/dhcpd.conf ничего не меняем, только (Важно!) переименовываем файл pxeboot.n12 в pxeboot.0 (иначе не заработает) и добавляем в меню /var/lib/tftpboot/pxelinux.cfg/default
label Install Windows7
kernel /pxeboot.0


Установка и настройка TFTP Сервера:


sudo apt-get install tftpd-hpa
sudo nano /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"

Добавляем только параметры:
-m /var/lib/tftpboot/tftp-remap (файл ремапа) и параметр -v чтобы в /var/log/syslog можно было отслеживать запросы.
Копируем содержимое папки D:\tftp в /var/lib/tftpboot/seven/.
Теперь создаем файл ремапа:
touch /var/lib/tftpboot/tftp-remap
nano /var/lib/tftpboot/tftp-remap


У меня он выглядит так:
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


Настройка 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

Спасибо за внимание!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.