Сервер сетевой загрузки (PXE) на Freebsd ч.3 - Установка Windows систем.

Установка Windows XP по сети.

Для установки ХР нам понадобится samba, convmv, python, cabexctract, ris-linux.

Не забываем обновить порты и ставим по порядку:

Samba -

cd /usr/ports/net/samba36

install clean

 
Cabextract, для распаковки вендых архивов.
 cd /usr/ports/archivers/cabextract/
 
Convmv, для конвертации заглавных букв  строчные
cd /usr/ports/converters/convmv
make install clean
 
Python, для работы эмулятора WDS - ris-linux
cd /usr/ports/lang/python
make install clean
rehash
 
Т.к. регистрозависимости у Windows и Linux разные, а также пути обозначаются разными слешами "\" и "/", то для корректной устаноки необходимо поправить установки tftp-сервера -
Создаем файл с правилами (напомню, что tftp идущий в BSD по умолчание не поддерживает правила, мы используем tftp-hpa)
ee /usr/local/etc/tftpd.rules
rg \\ /
rg A a
rg B b
rg C c
rg D d
rg E e
rg F f
rg G g
rg H h
rg I i
rg J j
rg K k
rg L l
rg M m
rg N n
rg O o
rg P p
rg Q q
rg R r
rg S s
rg T t
rg U u
rg V v
rg W w
rg X x
rg Y y
rg Z z
 
И редактируем строку  в inetd.conf -
ee /etc/inetd.conf
tftp dgram udp wait root /usr/local/libexec/in.tftpd in.tftpd -m /usr/local/etc/tftpd.rules -v -s /usr/tftpboot
 
Опция -v включает логи, по умолчанию логи падают в /var/log/messages.
 
Перезапускаем inetd
/etc/rc.d/inetd restart
 
Теперь tftp будет переводить все имена в нижний регистр.
 
Настраиваем Samba -
 
Создаем папку для нашего дистрибутива с ХР -
mkdir /usr/tftpboot/winxp
 
Создаем файл конфигурации для самбы -
ee /usr/local/etc/smb.conf
[global]
        workgroup = WORKGROUP
        netbios name = PXE
        server string = FreeBSD PXE server
        interfaces = fxp0
        security = share
        #Следующие три строки нужны для отображения символических ссылок
        unix extensions = no
        wide links = yes
        follow symlinks = yes
        log file = /var/log/samba/log.%m
        max log size = 50
        dns proxy = No
        load printers = no
         show add printer wizard = no
        printcap name = /dev/null
        disable spoolss = Yes
        
[printers]
        comment = All Printers
        path = /var/spool/samba
        printable = Yes
        browseable = No
 
[reminstall]
        path=/usr/tftpboot/images
        public=yes
        browsable=yes
        read only=yes
        guest ok=yes
 
Добавляем в rc.conf -
nmbd_enable="YES"
smbd_enable="YES"
 
Т.к. пути до папки с дистрибом для tftp сервера и samba будут различаться, то создадим символическую ссылку в расшаренной папке, только не наоборот, т.к. tftp сервер не умеет работать с символическими ссылками. (понадобится для файла ответов).
ln -s /usr/tftpboot/winxp /usr/tftpboot/images/winxp
 
Если этого не сделать, то вам придется делать вторую копию дистристрибутива по пути указанном  в Samba или получите ошибку -
 
INF-файл txtsetup.sif испорчен или отсутствует состояние 21 
или
Установка Windows: произошла неожиданная ошибка (32768) строка 5218 в d:\xpsp\base\boot\setup\setup.c. нажмите любую клавишу для продолжения
 
Запускаем Samba -
/usr/local/etc/rc.d/samba start
 
Подготавливаем дистрибутив для установки -
Копируем содержимое диска -
mount -t cd9660 /dev/`mdconfig -f WinXP.iso` /mnt
rsync -a /mnt/ /usr/tftpboot/winxp/
umount /mnt
mdconfig -d -u 0
 
Распаковываем и переименовываем файлы для загрузки
cd /usr/tftpboot/
cabextract  /usr/tftpboot/winxp/SETUPLDR.EX_
mv /usr/tftpboot/winxp/setupldr.exe ntldr
cabextract  /usr/tftpboot/winxp/STARTROM.N1_
mv /usr/tftpboot/winxp/startrom.n12 startrom.0
cp /usr/tftpboot/winxp/NTDETECT.COM ntdetect.com
 
И для того чтобы устанока была на русском языке копируем -
cp /usr/tftpboot/winxp/BOOTFONT.BIN bootfont.bin
 
Переводим имена всех файлов в нижний регистр -
cd /usr/tftpboot/winxp
convmv --lower -r --notest --replace *
 
Перейдем настройке ris-linux
Скачиваем и распаковываем дистрибутив -
cd /usr/tftpboot/
tar -xvf ris-linux-0.4.tar.gz
mv ris-linux-0.4 /usr/tftpboot/winxp/ris
 
Указываем где располагается дистрибутив, для этого редактируем файл binlsrv.py
ee /usr/tftpboot/winxp/ris/binlsrv.py
и изменяем строку
BASEPATH=/usr/tftpboot/winxp/
 
Далее необходимо создать пакет драйверов сетевых карт. Создать их можно самому или скачать отсюда (набор этих сетевых карт взят с сайта Сергея Крутских, по статье из Системного Администратора).
 
Чтобы подготовить набор сетевых карт самому, необходимо -
 
Cоздаем папки для наших драверов
mkdir /usr/tftpboot/winxp/ris/drv
mkdir /usr/tftpboot/winxp/ris/drv/sys
 
Распаковываем драйвера из папки дистрибутива i386 и копируем их в  папку drv - файлы с расширением   inf,  в папку drv/sys файлы с расширением sys.
Распаковать можно из  BSD командой
cabextract net*.in_
 
Из-под Windows 
expand -r net*.in_ 
 
Также можно добавить какие-либо специфичные драйвера для сетевых устройств.
И запускаем скрипт из набора ris-linux -
cd /usr/tftpboot/winxp/ris 
python infparser.py /drv
Данный скрипт записывает информацию о драйверах  в файл nics.txt RIS-сервера.
 
Набор драйверов готов, теперь необходимо содержимое каталогов /drv и /drv/sys скопировать в папку i386 дистрибутива (только файлы, без самих каталогов).
 
Далее для загрузки ХРюши по сети нам понадобиться файл ответов. Его можно создать с помощью setupmgr.exe находящегося на установочной диске в архиве DEPLOY - \SUPPORT\TOOLS\DEPLOY.CAB
 
Справку по разделам файла ответов можно найти в этом же архиве в файле deploy.chm или на сайте мелкософта.
 
Для примера будем использовать файл winnt.sif идущий в комплекте дистрибутива ris-linux
cp /usr/tftpboot/winxp/ris/winnt.sif /usr/tftpboot/
 
и изменяем строки -
Путь к нашей шаре на самбе
OriSrc = "\\192.168.0.1\reminstall\winxp\i386" 
Устройство с которого идет установка -
SetupSourceDevice = "\Device\LanmanRedirector\192.168.0.1\reminstall\winxp"
 
Добавляем запуск Венды на наш pxe-сервер, для чего в наш файл default находящийся в /usr/tftpboot/pxelinux.cfg добавляем строки для запуска Венды -
label winxp
        menu label ^Windows XP SP3
        kernel startrom.0
 
На этом все настройки произведены, запускаем сервер WDS -
cd /usr/tftpboot/winxp/ris 
./binlsrv.py
 
Пробуем установку, если все хорошо, то в консили сервера мы увидим - 
#./binlsrv.py
Succesfully loaded 6391 devices
Binlserver started... pid 6738
Recv BINL NCQ len = 48
NCQ Driver request
[R] Mac address 08:00:27:bf:52:a8
[R] Vid: 0x1022
[R] Pid: 0x2000
[R] rev_u1 = 0x0
[R] rev_u2 = 0x0
[R] rev_u3 = 0x0
[R] rev    = 0x0
[R] rev2   = 0x18
[R] subsys = 0xffffffff
[R] Source path: \\192.168.0.1\reminstall\winxp
Checking PCI\VEN_1022&DEV_2000&SUBSYS_FFFFFFFF
Checking PCI\VEN_1022&DEV_2000
Found PCI\VEN_1022&DEV_2000 in netamd2.inf
[S] Packet len = 0xb8 (184)
[S] Result code: 0x0
[S] type: 0x2
[S] base offset = 0x24 (36)
[S] drv_off = 0x50 (80)
[S] srv_off: 0x6a (106) -> 98 from start
[S] plen: 0x4a (74)
[S] p_off: 0x76 (118) -> 110 from start
[S] hid: PCI\VEN_1022&DEV_2000 - Len 0x15 (21)
[S] drv: pcntpci5.sys - Len 0xc (12)
[S] srv: PCnet - Len 0x5 (5)
[S] Description (REG_EXPAND_SZ [2]) = AMD PCNET  PCI Ethernet
[S] Characteristics (REG_SZ [1]) = 132
[S] BusType (REG_SZ [1]) = 5
[S] Total Params: 3
 
А на загружаемой машине привычный установщик -
Для отладки возможен запуск WDS c ведением лога -
./binlsrv.py -l binlsrv.log
 
На этом сетевую установку Windows XP считаю завершенной, автоматизацию установку перекладываю на Ваши плечи =)
 
Сетевая установка Windows 2003 идентична данной установке.
 
Полезные ссылки к данной части -
 

Сетевая установка Windows 7

 
Установка Windows 7 через PXE будет выглядеть несколько проще, т.к. основную работу по настройке сервера мы уже произвели.
 
Для установки нам понадобится образ WinPE и непосредственно сам дистрибутив с семеркой.
 
Чтобы собрать установочный образ WinPE берем машину с установленной Windows Vista,7 или 2008, на которую  устанавливаем Windows Automated Installation Kit (WAIK). Скачать можно тут.
 
После установки, запускаем от имени администратора Deployment Tools Command Prompt.
 
Создаем копию загрузочного диска с необходимой нам архитектурой (x86 или х64)-
copype.cmd x86 c:\winpe
или
copype.cmd amd64 c:\winpe
Переходим в папку с созданным образом и монтируем его для дальнейших изменений.
cd c:\winpe
Dism /Mount-WIM /WimFile:c:\winpe\winpe.wim /Index:1 /MountDir:c:\winpe\mount
или что тоже самое - 
imagex /mountrw winpe.wim 1 mount
 
для автоматического старта установки добавляем в файл c:\winpe\mount\windows\system32\startnet.cmd -
wpeinit
net use y: \\192.168.0.1\win7 
if exist y:\sources\setup.exe (
y:
cd \sources
setup.exe
)
Можно этот скрипт не добавлять, но тогда при загрузке WinPE придется подключать диск и запускать setup вручную.
 
Если на нашу шару стоят ограничения по правам, то можно добавить имя пользователя и пароль, от которого будет подключатся эта папка (net use y: \\192.168.0.1\win7 /user:install install)
 
Добавляем в наш дистрибутив необходимые драйвера -
dism /image:c:\winpe\mount  /add-driver /driver:c:\winpe\drivers\vboxdrv\vboxdrv.inf
 
 
Копируем папку PXE из C:\winpe\mount\Windows\Boot\ в C:\winpe
 
Сохраняем и отключаем образ -
imagex.exe /unmount /commit mount
или
dism /unmount-wim /mountdir:mount /commit
 
Таким образом мы получили простейший образ WinPE.
 
Далее на нашем установочном сервере создаем две папки в корне tftp-сервера - boot и source. 
 
Копируем в /usr/tftpboot/sources файлы - из C:\winpe - winpe.win под именем boot.wim и из папки C:\winpe\PXE - pxeboot.n12 под именем pxeboot.0
 
В папку  /usr/tftpboot/boot - из C:\winpe\ISO\boot - bcd и boot.sdi
 
В папку /usr/tftpboot из C:\winpe\PXE - bootmgr.exe
 
Cоздаем папку /usr/tftpboot/images/win7 и копируем туда содержимое установочного диска венды.
 
Добавляем в /usr/tftpboot/pxelinux.cfg/default 
label win7
        menu label ^Windows 7 x86
        kernel sources/pxeboot.0
 
И запускаемся.
Если все сделали правильно, то увидим -
 
Для автоматизации установки необходимо использовать файл Unattend.xml, формат запуска в скрипте startnet.cmd будет выглядеть -
setup.exe /unattend:y:\unattend.xml
 
Почитать по параментрам unattend.xml можно -

 

5
Ваша оценка: Нет Средняя: 5 (1 оценка)

Комментарии

Не совсем понятно:
"Распаковываем драйвера из папки дистрибутива i386 и копируем их в папку drv - файлы с расширением inf, в папку drv/sys файлы с расширением sys."
Если можно подробнее насчет файлов с расширением sys.
Где они в дистрибутиве Win?

Если дальше статью внимательно прочитаете:


Распаковать можно из  BSD командой
cabextract net*.in_
 
Из-под Windows 
expand -r net*.in_

Соотвественно файлы находящиеся в папке I386 и имеющие названия net*.in_, например NETW840.IN_ , то бишь файлы начинающиеся на net и имеющие расширение in_

 

Про inf я понял, а как же с sys. Как я понял в inf-файлы ссылаются на sys. А где они. Если можно чтоб понятно было для чайника.

Загляните в driver.cab, там вы найдете большинство .sys файлов встроенных в дистрибутив. Какие именно нужны для каждого конкретного .inf вы можете просмотреть открыв его. Например открываем файл net3c556.inf и видим:

HKLM,     Software\3Com\TCAUDIAG\TCAUM556,DriverNames,  0,  "SYSTEM\EL556ND5.SYS"

Вроде все сделал правильно, но
идет загрузка файлов установки Windows, последним <Файловая система UNC>
Если в winnt.sif OsLoadOptions = "/noguiboot /fastdetect" то черный экран
Если в winnt.sif OsLoadOptions = "/fastdetect" то графика Microsoft Windows с индикатором и все
В логе последнее сообщение
in.tftpd[5487]: RRQ from 10.0.0.106 filename \winxp\i386\mrxsmb.sy_ remapped to /winxp/i386/mrxsmb.sy_
То есть далее должна вроде быть загрузка с шары
Пробовал шару перенести на ПК WindowsXP, как описано на http://unattendedxp.com/articles/pxelinux/prep_folders.shtml, с соответствующей правкой winnt.sif - та же реакция
Не пойму в чем дело

Скорей всего в путях напутали -

Обратите внимание на -


Т.к. пути до папки с дистрибом для tftp сервера и samba будут различаться, то создадим символическую ссылку в расшаренной папке, только не наоборот, т.к. tftp сервер не умеет работать с символическими ссылками. (понадобится для файла ответов).
ln -s /usr/tftpboot/winxp /usr/tftpboot/images/winxp

 

Также на всякий выкладываю свой winnt.sif -


[data]
floppyless = "1"
msdosinitiated = "1"
; Needed for second stage
OriSrc = "\\192.168.0.1\reminstall\winxp\i386"
OriTyp = "4"
LocalSourceOnCD = 1
DisableAdminAccountOnDomainJoin = 1

[SetupData]
OsLoadOptions = "/fastdetect"
; Needed for first stage
SetupSourceDevice = "\Device\LanmanRedirector\192.168.0.1\reminstall\winxp"

[RemoteInstall]
; Avoid automatic format/repartition
Repartition = No
UseWholeDisk = No

[UserData]
ComputerName = NewNet
ProductID=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
FullName="NewNet"
OrgName="Kontora"

[FavoritesEx]
Title1="intra.url"
URL1="intra.kontora.com"

[Branding]
BrandIEUsingUnattended=Yes

[URL]
Home_Page=www.google.ru

[Proxy]
Proxy_Enable=0
Use_Same_Proxy=1

[Identification]
JoinDomain=%MACHINEDOMAIN%
DoOldStyleDomainJoin=Yes

[Networking]
InstallDefaultComponents=Yes
ProcessPageSections=Yes

[RemoteInstall]
Repartition=Yes



 

Попробовал с реального ПК все работает(сет карта Intel 100).
Под VirtualBox - нет(обновился до последней версии VB - тоже нет)
Настройка сети:
Сеть Адаптер 1:
Intel PRO/1000 MT Desktop (Сетевой мост, 'Realtek PCIe GBE Family Controller')
где-то здесь не работает.
По моему виртуальная система виснет. На Host-Del не реагирует. Курсор не мигает.
Ставил PCnet-FAST III(вместо Intel) то же самое.

А вы поставили VM Virtual Box Extension Pack? Если нет, то будет работать только PCnet-PCI II (Am79C970A)

Добрый день, такая вот ошибка, не знаю куда копать:
RTL8139.SYS вызвал неожиданную ошибку (21)
в строке 3788 из d:\xpsp\base\boot\setup\setup.c

Скорей всего у Вас в папке drv/sys не хватает файла для сетевухи - RTL8139.SYS

Скачал драйвер: driver for RTL8139/810x and Windows XP 32bit
положил Netrtlx.inf и  Rtnicxp.sys соответственно в папки /ris/drv и  /ris/drv/sys , переведя их в нижний регистр, сделал
python infparser.py drv
Compiled 3792 drivers
generated devlist.cache
generated nics.txt

Перезапустил ./binlsrv.py
Но теперь та же ошибка только в файле Rtnicxp.sys
 

Спасибо . Проблема решена. Нужно было эти драйвера так же забросить в дистрибутив папку i386/ .

Поправьте пожалуйста ссылку на пакет драйверов сетевых карт, если возможно.
 

Спасибо, ссылку подправил, на второй Ваш вопрос по второй части статьи отвечу после праздников.

День добрый!
все делал согласно ваших инструкций но при выполнении скрипта:

"cd /usr/tftpboot/winxp/ris
python infparser.py /drv
Данный скрипт записывает информацию о драйверах в файл nics.txt RIS-сервера."

пишет:
Compiled 0 drivers
generated devlist.txt и так далее.., хотя все драйвера находятся в папках .../ris/drv и /drv/sys соответственно.

И еще при загрузке ОС на клиенте пишет: TFTP failed.
Помогите разобраться, pls.