Сервер сетевой загрузки (PXE) на Freebsd ч.3 - Установка Windows систем.
Опубликовано чт, 01/12/2012 - 11:46 пользователем alitius
Установка 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 можно -
Полезные ссылки по установке Windows7 по сети:
(1 оценка)
Комментарии
Уточнение по драйверам
Не совсем понятно:
"Распаковываем драйвера из папки дистрибутива i386 и копируем их в папку drv - файлы с расширением inf, в папку drv/sys файлы с расширением sys."
Если можно подробнее насчет файлов с расширением sys.
Где они в дистрибутиве Win?
Re: Уточнение по драйверам
Если дальше статью внимательно прочитаете:
Соотвественно файлы находящиеся в папке I386 и имеющие названия net*.in_, например NETW840.IN_ , то бишь файлы начинающиеся на net и имеющие расширение in_
Уточнение по драйверам
Про inf я понял, а как же с sys. Как я понял в inf-файлы ссылаются на sys. А где они. Если можно чтоб понятно было для чайника.
Re: Уточнение по драйверам
Загляните в 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 - та же реакция
Не пойму в чем дело
Скорей всего в путях напутали
Скорей всего в путях напутали -
Обратите внимание на -
Также на всякий выкладываю свой 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) то же самое.
Re: Что-то с виртуалкой?
А вы поставили VM Virtual Box Extension Pack? Если нет, то будет работать только PCnet-PCI II (Am79C970A)
RTL8139.SYS
Добрый день, такая вот ошибка, не знаю куда копать:
RTL8139.SYS вызвал неожиданную ошибку (21)
в строке 3788 из d:\xpsp\base\boot\setup\setup.c
Re: RTL8139.SYS
Скорей всего у Вас в папке drv/sys не хватает файла для сетевухи - RTL8139.SYS
Скачал драйвер: driver for
Скачал драйвер: 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/ .
не фурычит ссылка
Поправьте пожалуйста ссылку на пакет драйверов сетевых карт, если возможно.
Re: не фурычит ссылка
Спасибо, ссылку подправил, на второй Ваш вопрос по второй части статьи отвечу после праздников.
Не записывает информацию о драйверах
День добрый!
все делал согласно ваших инструкций но при выполнении скрипта:
"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.