автоматическая сетевая установка Windows

Трудно найти себе занятие более унылое и бесполезное, чем регулярная установка Windows на рабочие места. Эта задача усугубляется необходимостью установки дополнительного програмного обеспечения и его настройкой. В природе существует множество коммерческих продуктов для развертывания приложений в масштабах предприятия, способных сделать администратора счастливым. Но все они работают в среде Microsoft Windows и представляют собой готовые закрытые решения.
По разным причинам сложилось так, что на серверах , которые я обслуживаю работает програмное обеспечение Open Source. Поэтому мне пришлось строить счастье своими руками. Эта статья посвящена автоматической сетевой установке и настройке Windows со всем необходимым для работы програмным обеспечением.


серверы

Нам понадобится хотя бы один Unix-сервер, на котором работают службы DNS, DHCP, TFTP и samba.

рабочие станции

Подразумевается, что все рабочие станции имеют сетевые адаптеры, поддерживающие спецификацию PXE.

клиентские програмные пакеты

Операционная система и дополнительные программы для рабочих станций пользователей выбирались, исходя из соображений производственной необходимости. Вот список программных пакетов, которые будут задействованы в процессе установки и настройки рабочих мест:
- установочный диск Microsoft Windows XP Professional RUS Corporate;
- пакет сетевой установки пакета обновления 2 для Windows XP для ИТ-специалистов и разработчиков. Доступен на сайте производителя, имя файла - WindowsXP-KB835935-SP2-RUS.exe. Он необходим для обновления имеющейся копии Windows до актуального состония;
- средства развертывания пакета обновления 2 (SP2) для Windows XP. Доступен на сайте производителя, имя файла - WindowsXP-KB838080-SP2- DeployTools-RUS.cab . Из этого пакета нам понадобится диспетчер установки setupmgr.exe;
- средства поддержки пакета обновления 2 (SP2) для Windows XP. Доступен на сайте производителя, файл WindowsXP-KB838079-SupportTools- ENU.exe . Из этого пакета нам понадобится программа netdom.exe;
- дополнительные драйверы устройств, поскольку Microsoft Windows XP поддерживает далеко не весь спектр имеющегося у нас оборудования;
- первый установочный диск Microsoft Office 2003;
- пакет обновления Office 2003 Service Pack 1. Доступен на сайте производителя, файл Office2003SP1-kb842532-fullfile-rus.exe;
- Office 2003 Resource Kit Toolbox. Доступен на сайте производителя, файл ork.exe. Из этого пакета нам понадобится Custom Installation Wizard;
- Russian Adobe Reader 6.0.2;
- Russian WinRAR 3.40;
- SUN Java 2 Runtime Environment, Standard Edition 1.4;
- Microsoft .NET версии 1.1 (dotnetfx.exe);
- дистрибутив 1С Предприятие;
- Oracle Client;
- Russian Mozilla;
- Macromedia Flash Player;
- программа wsname.exe, доступна на сайте автора.
Список можете дополнить (изменить) сами, исходя из своих задач и потребностей.

програмные пакеты на стороне сервера

Операционная система и дополнительные программы для серверов выбирались исходя из соображений удобства и простоты сопровождения. Программные пакеты, которые будут задействованы в процессе установки и настройки рабочих мест на стороне серверов:
- операционная система FreeBSD, рабочая версия 5.2.1;
- ISC DHCP server, доступный в коллекции портов FreeBSD (net/isc-dhcp3-server), рабочая версия 3.0.1.r12;
- Samba server, доступный в коллекции портов FreeBSD (net/samba3), рабочая версия 3.0.7;
- Tftp server, доступный в коллекции портов FreeBSD (ftp/tftp-hpa), рабочая версия 0.34.
Многие могут спросить, чем меня не устроил TFTP-сервер, идущий в поставке с системой? Рассказываю: при сетевой загрузке Windows начальная фаза использует протокол TFTP. И тут появляются 2 проблемы: первая - регистр имен файлов и каталогов (в мире Windows между именами файлов Filename.Txt и filename.txt нет разницы, а в мире UNIX есть); вторая проблема - в разделителе имен на файловой системе (в мире Windows это обратный слэш, а в мире UNIX - прямой. Т.е. при сетевом старте Windows просит у TFTP-сервера имена файлов в каком попало регистре и с обратными слэшами в качестве разделителя. В качестве рабочего был выбран TFTP-сервер, который умеет конвертировать запрашиваемые имена файлов как угодно.
- интерпретатор python, доступный в коллекции портов FreeBSD (lang/python), рабочая версия 2.3.4;
Binl server, доступный на сайте автора. Это единственная свободная реализация протокола Boot Information Negotiation Layer (протокол UDP, порт 4011). Он реализован на языке python. Служба binl используется для установки Windows 2000, Windows XP и Windows Server 2003 на клиентских компьютерах с PXE (Pre-Boot eXecution Environment) при помощи удаленной загрузки. Служба уровня согласования информации загрузки (Boot Information Negotiation Layer, BINL) отвечает на запросы клиентов РХЕ, а также осуществляет обмен данными между клиентом и сервером. Основная ее задача заключается в том, чтобы на запрос клиента (который в запросе присылает информацию о производителе (Vendor ID) и модели (PCI ID) своей сетевой карты) ответить, какой драйвер сетевой карты ему необходимо загрузить.

подготовка дистрибутива Windows XP

Нам необходимо подготовить дистрибутив, который помимо Windows XP включил бы в себя дополнительные драйверы, программы и пакеты, необходимые для полноценной работы пользователей на их рабочих местах.
Для этого создадим какой-нибудь каталог, например, c:\WinXP-SP2.RUS, скопируем в этот каталог все содержимое установочного диска Microsoft Windows XP Professional RUS Corporate. Затем обновим установочные файлы Windows XP добавлением пакета обновления 2 (SP2). Для этого выполним команду:

C:\>WindowsXP-KB835935-SP2-RUS.exe /integrate:C:\WinXP-SP2.RUS

Необходимо заметить, что процедура обновления корректно работает только под Windows XP (под Windows 2000 программа выполняет недопустимую операцию). Процесс обновления занимает несколько минут.
Полученный таким образом дистрибутив Windows XP Professional RUS Corporate SP2 самодостаточен, т.е. его можно снова записать на CD и использовать для установки.

Воспользовавшись диспетчером установки, создадим дистрибутив, который может быть установлен в автоматическом режиме на основе файла ответов. Для этого запустим программу setupmgr.exe (доступна в пакете "Средства развертывания пакета обновления 2 (SP2) для Windows XP") и по шагам ответим на ее вопросы:
- файл ответов;
- тип установки;
- продукт;
- взаимодействие с пользователем;
- дистрибутивный общий ресурс;
- размещение файлов установки;
- расположение дистрибутивного общего ресурса;
- лицензионное соглашение;
- имя и организация;
- параметры экрана;
- часовой пояс;
- ключ продукта;
- имя компьютера;
- пароль администратора;
- сетевые компоненты;
- рабочая группа;
- телефония;
- язык и стандарты;
- языки;
- параметры обозревателя и оболочки;
- каталог установки Windows;
- установка принтеров;
- однократно выполняемые команды;
- дополнительные команды;
- размещение файла ответов;
Затем произойдет копирование файлов и завершение работы диспетчера установки.
Выспросив у нас всю подноготную диспетчер установки должным образом разместит установочные файлы и файл ответов unattend.txt в каталоге c:\windist.

редактирование файла ответов

Вооружившись Руководством пользователя по средствам развертывания Microsoft Windows на предприятии (файл deploy.chm , входящий в состав средств развертывания пакета обновления 2 (SP2) для Windows XP) отредактируем unattend.txt , приведя его в соответствие нашим нуждам:

[Data]
AutoPartition="1"
MsDosInitiated="1"
UnattendedInstall="Yes"
floppyless="1"
OriSrc="\\%SERVERNAME%\RemInst\%INSTALLPATH%"
OriTyp="4"
LocalSourceOnCD=1

[SetupData]
; параметры запуска Windows с tftp
OsLoadOptions="/noguiboot /fastdetect"
; откуда будет происходить сетевая установка
SetupSourceDevice = "\Device\LanmanRedirector\%SERVERNAME%\RemInst\wxp-pro.rus"

[GuiUnattended]
AdminPassword=04764ffa20b75a4de8a1028ae36ad3b435b51404e78ddb5d3190aad3b435b514
EncryptedAdminPassword=Yes
OEMSkipRegional=1
TimeZone=145
OemSkipWelcome=1

[Unattended]
AutoActivate=No
CrashDumpSetting=0
; устанавливать драйверы без подписи
DriverSigningPolicy=Ignore
UpdateInstalledDrivers=Yes
FactoryMode=No
FileSystem=LeaveAlone
Repartition=Yes
; путь поиска дополнительных драйверов при определении PNP-устройств во время установки Windows
OemPnPDriversPath="windows\drv\chipset\intel;windows\drv\net\intel;windows\drv\video\intel8;windows\drv\video\intel9;windows\drv\audio"
OemPreinstall=Yes
OemSkipEula=Yes
TargetPath=\windows
UnattendMode=FullUnattended
UnattendSwitch=Yes
WaitForReboot=No
NoWaitAfterTextMode=1
NoWaitAfterGUIMode=1
ConfirmHardware=Yes
NtUpgrade=No
OverwriteOemFilesOnUpgrade=No

[Display]
BitsPerPel=16
Xresolution=800
YResolution=600

[PCHealth]
; не слать отчеты об ошибках
ER_Display_UI=0
ER_Enable_Applications=None
ER_Enable_Kernel_Errors=0
ER_Enable_Reporting=0
ER_Enable_Windows_Components=1
ER_Force_Queue_Mode=0
ER_Include_MSApps=0
ER_Include_Shutdown_Errs=0
; включить удаленный помощник
RA_AllowFullControl=1
RA_AllowToGetHelp=1
RA_AllowUnsolicited=1
RA_MaxTicketExpiry=28800

[RegionalSettings]
LanguageGroup=1,5,2
Language=00000419
SystemLocale=00000419
UserLocale=00000419
UserLocale_DefaultUser=00000419
InputLocale=0409:00000409,0419:00000419
InputLocale_DefaultUser=0409:00000409

[Shell]
DefaultStartPanelOff=Yes
DefaultThemesOff=Yes

[TapiLocation]
CountryCode=7
Dialing=Tone
AreaCode=8212
LongDistanceAccess="0"

[TerminalServices]
; разрешить RDP
AllowConnections=1

[UserData]
ProductKey=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
FullName="anonymous"
OrgName="anonymous"
; случайным образом выбирать имя компьютера - мы поменяем его на рельное при окончании установки
ComputerName=*

[URL]
AutoConfig=1

[Identification]
JoinWorkgroup=komi

[Networking]
ProcessPageSections=Yes
InstallDefaultComponents=No

[NetAdapters]
Adapter1=params.Adapter1

[params.Adapter1]
ConnectionName="MTS Komi network"
INFID=*

[NetClients]
MS_MSClient=params.MS_MSClient

[NetServices]
MS_SERVER=params.MS_SERVER

[NetProtocols]
MS_TCPIP=params.MS_TCPIP

[params.MS_TCPIP]
; DNSDomain=komi.mts.ru
DNS=Yes
UseDomainNameDevolution=No
EnableLMHosts=No
AdapterSections=params.MS_TCPIP.Adapter1

[params.MS_TCPIP.Adapter1]
SpecificTo=Adapter1
DHCP=Yes
WINS=No
NetBIOSOptions=0

; компоненты Windows для установки
[Components]
accessopt=Off
calc=On
charmap=On
chat=Off
clipbook=Off
deskpaper=Off
dialer=On
fax=Off
freecell=Off
hearts=Off
hypertrm=On
; спрятать Internet Explorer
IEAccess=Off
indexsrv_system=Off
media_clips=On
media_utopia=Off
minesweeper=Off
mousepoint=Off
msnexplr=Off
mswordpad=On
netcis=Off
netoc=Off
objectpkg=Off
; спрятать Outlook Express и другой не нужный нам стандартный софт
OEAccess=Off
paint=On
pinball=Off
rec=Off
solitaire=Off
spider=Off
; спрятать Windows Messenger
WMAccess=Off
templates=Off
zonegames=Off

[NetOptionalComponents]
Beacon=0

[WindowsFirewall]
Profiles=WindowsFirewall.Standard
LogFile="%WINDIR%\pfirewall.log"
LogSize=4096
LogDroppedPackets=1
LogConnections=1

[WindowsFirewall.Standard]
Type=3
Mode=1
Exceptions=1
Notifications=1
MulticastBroadcastResponse=0
Services=WindowsFirewall.AllSrv
IcmpSettings=WindowsFirewall.EchoRequest

; административная сеть 10.50.0.0/24 имеет полный доступ ко всем компьютерам
[WindowsFirewall.AllSrv]
Type=5
Mode=1
Scope=2
Addresses=10.50.0.0/24

; остальным только ping :-)
[WindowsFirewall.EchoRequest]
Type=8
Mode=1

; при установке удалять все существующие разделы и использовать весь диск для установки
[RemoteInstall]
Repartition=Yes
UseWholeDisk=Yes

[OSChooser]
Description="Windows Professional - стандартная установка"
Help="Будет выполнена установка Windows Professional в стандартной конфигурации."
LaunchFile="%INSTALLPATH%\%MACHINETYPE%\templates\startrom.com"
ImageType=Flat

; EOF

Про параметры без комментариев читайте в deploy.chm и на сайте технической поддержки Microsoft.

дополнение дистрибутива

Как уже было отмечено, "голая" Microsoft Windows XP мало пригодна для работы, поэтому пришла пора рассказать о том, как добавить в получившийся дистрибутив дополнительные драйверы устройств и программное обеспечение, необходимое для работы пользователей.

добавление драйверов устройств

В каталоге c:\windist необходимо создать поддерево каталогов, в котором мы разместим драйверы PNP-устройств. Пути в этом дереве должны совпадать с путевыми именами, описанными нами в секции [Unattended] файла unattend.txt (рис. 1). Все, что будет помещено в каталог $$, программа установки скопирует в каталог Windows. При этом не важно, как он будет называться: Windows, WINNT, WindowsXP). А все, что будет помещено в каталог $1 программа установки скопирует в корневой каталог диска, на который будет установлена система. Например, если поместить программу netsvc.exe в c:\windist\$oem$\$$\system32 , то во время установки она будет скопирована в c:\windows\system32\netsvc.exe.


Рисунок. 1.

В каждом каталоге, описанном при помощи OemPnPDriversPath в секции [Unattended] файла unattend.txt, программа установки будет искать inf-файлы и драйверы устройств.

добавление программ

Для запуска внешних программ во время завершающей фазы установки Windows XP можно воспользоваться файлом Cmdlines.txt . Его необходимо поместить в каталог $oem$. В файле Cmdlines.txt используется следующий синтаксис:

[Commands]
"команда_1"
"команда_2"
.
.
"команда_x"

Где "команда_1", "команда_2" и т. д. - это команды, исполняемые в соответствующем порядке на этапе графической установки из файла Cmdlines.txt . Следует обратить внимание на то, что все команды должны быть заключены в кавычки. В отношении файла Cmdlines.txt действует ряд ограничений. При обработке файла Cmdlines.txt не должно быть пользователей, вошедших в систему, а сетевые подключения должны быть отключены. Все данные о пользователе записываются в соответствующий раздел реестра, и все создаваемые впоследствии пользователи наследуют эти данные. Файлы, необходимые для запуска приложения или служебной программы, должны храниться в дистрибутивном общем ресурсе. Кроме того, команды не могут содержать кавычек. Установка приложения с помощью файла Cmdlines.txt должна выполняться в автоматическом режиме таким образом, чтобы пользователю не приходилось указывать сведения о данном приложении. Итак, для установки каких-либо программ сначала необходимо подготовить их дистрибутивы для пакетной установки без взаимодействия с пользователем.

Microsoft Office 2003

Сначала произведем административную установку Microsoft Office 2003. Для этого нужно выполнить:

C:\>setup.exe /a pro11.msi


Программа установки, получив интересующие ее сведения, создаст административную установку Microsoft Office 2003 в каталоге c:\Office.
Теперь обновим установочные файлы Microsoft Office 2003 добавлением пакета обновления 1 (SP1). Для этого сначала развернем пакет обновления (в данном случае я разворачивал в каталог c:\o3ksp1), выполнив команду:

C:\>Office2003SP1-kb842532-fullfile-rus.exe /c /t:c:\o3ksp1


После чего, находясь в каталоге c:\o3ksp1, выполним команду:

C:\o3ksp1>msiexec /p MAINSP1ff.msp /a c:\Office\PRO11.MSI


которая обновит дистрибутив Microsoft Office 2003 до актуального состояния.
Для создания пакетной установки Microsoft Office 2003 воспользуемся программой Custom Installation Wizard из Office 2003 Resource Kit Toolbox – программа выполнена в виде масера, так что все что от нас требуется – честно ответить на все предлагаемые вопросы :)
Таким образом, для полностью автоматической установки Microsoft Office 2003 необходимо выполнить команду.

setup.exe TRANSFORMS=mtskomi.mst /qn


которая установит зараненее выбранные компоненты без взаимодействия с пользователем. Теперь скопируем содержимое каталога c:\Office в каталог c:\windist\$oem$\addon\of для включения Microsoft Office 2003 в дистрибутив Windows XP.

Adobe Reader 6

Запустим программу установки Adobe Reader 6, но сам продукт ставить не будем. Вместо этого, пройдя несколько шагов мастера установки (подготовка к установке, Acrobat Reader setup и Мастер установки Acrobat Reader) скопируем файлы "Adobe Reader 6.0.2 CE.msi" и Data1.cab из каталога C:\WINDOWS\Cache\Adobe Reader 6.0.1\RUSMIN в каталог c:\windist\$oem$\addon\ar для включения Adobe Reader 6 в дистрибутив Windows XP. Чтобы не иметь проблем с длинными именами, содержащими пробелы, файл "Adobe Reader 6.0.2 CE.msi" переименуем в ar.msi. Для автоматической установки MSI-пакета достаточно выполнить команду:

msiexec /i ar.msi ALLUSERS=1 /qn


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

WinRAR 3

Для автоматической установки WinRAR 3 достаточно запустить программу установки с параметром /s.

winrar.exe /s


которая установит компоненты WinRAR по умолчанию.

SUN Java 2 Runtime Environment

Для автоматической установки Java 2 Platform Runtime Environment достаточно запустить программу установки со следуюущими параметрами:

jre.exe /s /v"/qn ADDLOCAL=ALL IEXPLORER=1 MOZILLA=1 REBOOT=Suppress JAVAUPDATE=0 WEBSTARTICON=0"


которая установит все компоненты JRE и зарегистрирует Java-плагин для Internet Explorer и Mozilla. Кроме того, не будет содан ярлык "Java WEB start" на рабочем столе и будет отключена функция автоматического обновления.

Microsoft .NET версии 1.1

Поступаем так же, как и с Adobe Reader 6. Запускаем программу установки, проходим два шага мастера (до лицензионного слоглашения), затем ищем во временном каталоге %TEMP% файлы netfx.msi и netfx1.cab и скопируем их в каталог c:\windist\$oem$\addon\dn для включения Microsoft .NET в дистрибутив Windows XP. Для автоматической установки MSI-пакета достаточно выполнить команду:

msiexec /i netfx.msi ALLUSERS=1 /qn


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

1С Предприятие

Сначала необходимо создать файл ответов для программы установки. Для этого 1С Предприятие необходимо установить на какую-нибудь машину, запустив программу установки с ключем /r (record). В этом случае программа установки создает файл ответов, в который записывается последовательность хода установки.

setup.exe /r /f1C:\1c\DISK1\setup.iss


В дальнейшем этот файл можно использовать для точно такой же установки, но уже без взаимодействия с пользователем:

setup.exe /s /sms /f1C:\1c\DISK1\setup.iss


Oracle Client

Программа установки Oracle Client также умеет пакетный режим, но я не стал его использовать, т.к. дистрибутив очень большой по размеру, а реально устанавливается около 50 мегабайт. Кроме того программа установки не может корректно деинсталлировать этот продукт. Поэтому я установил Oracle Client вручную на чистую машину, затем при помощи WinRAR создал SFX-архив, в который поместил каталог ORANT и сделал экспорт ветки реестра HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE. При установке Windows XP этот архив распаковывает себя в нужный каталог и делает импорт данных в реестр. Размер архива, кстати, получился около 10 мегабайт.

Mozilla

Программа установки Mozilla имеет нексколько ключей, которые позволяют установить продукт в автоматическом режиме:

mozilla-win32-1.7.2-ruRU-installer.exe -ma -ms -ira -hideBanner


После такой установки необходимо скопировать файлы автонастройки в каталог MOZILLA_HOME. Это позволит Mozilla автоматически настраивать браузер, прокси, учетные записи электронной почты и news конференций для каждого пользователя.

Macromedia Flash Player

Программа установки Macromedia Flash Player имеет ключ, который позволяет установить продукт в автоматическом режиме:

flashplayer7installer.exe /s


При этом программа установки разворачивает пакет и регистрирует плагин для Mozilla.

изменение имени машины

В файле ответов unattend.txt мы дали указание программе установке самой выбирать имя машины, на которой происходит установка Windows XP. У нас для всех рабочих станций существуют DNS-записи, поэтому логично давать имя машине в соответствии с базой данных DNS. Для этого в конце установки, когда система уже установлена и ее сетевой интерфейс сконфигурирован, выполним программу, которая назначит компьютеру имя, соответствующее его адресу:

wsname /N:%DNS /NOREBOOT


Все остальные параметры системы я изменяю при помощи правки реестра во время установки.

собираем все вместе

Применим полученные навыки для установки всего вышеописанного программного обеспечения. Для этого скопируем каждый программный продукт в соответствующий ему каталог c:\windist\$oem$\addon\ПРОГРАММА и добавим вызов программы установки в файл c:\windist\$oem$\Cmdlines.txt. Получилось что-то вроде этого:

[Commands]
"wscript /B off.vbs"
"addon\of\setup.exe TRANSFORMS=addon\of\mtskomi.mst /qn"
"addon\mz\mozilla.exe -ma -ms -ira -hideBanner"
"msiexec /i addon\ar\ar.msi ALLUSERS=1 /qn"
"msiexec /i addon\dn\netfx.msi ALLUSERS=1 /qn"
"addon\mz\flash.exe /s"
"addon\wr\winrar.exe /s"
"addon\or\ora.exe"
"wscript /B jdk.vbs"
"addon\1c\DISK1\setup.exe /s /sms /f1addon\1c\DISK1\setup.iss"
"regedit /s default.reg"
"wsname /N:%DNS /NOREBOOT"


Итак, мы создали дистрибутив, содержащий необходимые для работы программные продукты и средства для их автоматической установки, настройки и обновления.

настройка UNIX-сервера

Я предполагаю, что у вас уже есть работающий UNIX-сервер, поэтому не буду полностью описывать процесс его настройки, а коснусь только специфики настройки отдельных сервисов, которые необходимы для сетевой загрузки и установки Windows XP.

настройка DHCP

Когда DHCP-сервер получает запрос от PXE-клиента, он помимо прочих параметров (IP-адреса, маски сети, адреса шлюза и т.д.) выдает клиенту имя файла и адрес TFTP сервера (опционально). Т.к. информация, предоставляемая PXE-клиентам, специфическая, нам необходимо описать конфигурацию DHCP-сервера таком образом, чтобы обычные BOOTP/DHCP-клиенты никак не пострадали. Для этого опишем класс PXE в dhcpd.conf:

option space PXE;
option PXE.mtftp-ip code 1 = ip-address;
option PXE.mtftp-cport code 2 = unsigned integer 16;
option PXE.mtftp-sport code 3 = unsigned integer 16;
option PXE.mtftp-tmout code 4 = unsigned integer 8;
option PXE.mtftp-delay code 5 = unsigned integer 8;
option PXE.discovery-control code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr code 7 = ip-address;

class "PXE" {
match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
option vendor-class-identifier "PXEClient";
vendor-option-space PXE;
option PXE.mtftp-ip 0.0.0.0;
option PXE.mtftp-tmout 60;
filename "startrom.com";
}

В результате, получив запрос от PXE-клиента, наш сервер выдаст ему (помимо прочих настроек) имя файла загрузчика: startrom.com.

настройка TFTP

Установим из дерева портов TFPF-сервер и опишем его в /etc/inetd.conf:

tftp dgram udp wait root /usr/local/libexec/in.tftpd in.tftpd -m /usr/local/etc/tftpd.rules -v -s /home/tftpboot

В /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

В результате, получив в запросе имя файла \System32\PCpci5.Sys, TFTP-сервер будет искать файл /system32/pcpci5.sys. Скопируем наш дистрибутив на сервер, в каталог /home/tftpboot/wxp-pro.rus (имя каталога wxp-pro.rus должно совпадать с путевым именем, которое мы описали как SetupSourceDevice секции [SetupData] файла unattend.txt ). Как вы уже поняли, все имена каталогов и файлов в /home/tftpboot/wxp-pro.rus/i386 нужно перевести в нижний регистр. Это можно сделать при помощи FAR Manager или простым shell-скриптом:

#!/bin/sh
pwd
for i in * ; do
lower=`echo $i | tr \'[:upper:]\' \'[:lower:]\'`
if [ "$lower" != "$i" ] ; then
echo "$i -\>$lower"
mv -f "$i" "$lower"
fi
done

for i in * ; do
test -d "$i" && ( cd "$i" ; $0 )
done

Для сетевой загрузки Windows XP нужно скопировать из дистрибутива в /home/tftpboot следующие файлы: bootfont.bin, ntdetect.com, setupldr.bin и startrom.com. После чего файл setupldr.bin нужно переименовать в ntldr и пропатчить при помощи fixloader.py, который входит в состав binl-сервера:

$ ./fixloader.py ntldr
Loader fixed

Ну и, наконец, последний шаг. Скопируем наш файл ответов unattend.txt в /home/tftpboot/winnt.sif. Именно с таким именем там будет искать его загрузчик ntldr.

настройка samba

Необходимо разрешить использование пустых паролей и описать новый ресурс:

[global]
null passwords = true

[reminst]
path = /home/samba/reminst
browseable = no
read only = No
guest ok = Yes
valid users = guest,@admins
write list = @admins

Так как этот ресурс будет обеспечивать доступ к файлам, которые уже существуют в /home/tftpboot/wxp-pro.rus, создадим символическую ссылку /home/samba/reminst/wxp-pro.rus указывающую на /home/tftpboot/wxp-pro.rus.

настройка binl

Из полученного нами дистрибутива Windows XP необходимо скопировать по маске файлы net*.in_ на сервер, например, в каталог /home/ samba/reminst/inf и распаковать при помощи команды

expand -r net*.in_


после чего файлы net*.in_ можно удалить. Кроме дистрибутивных INF-файлов необходимо скопировать INF-файлы от всех драйверов сетевых карт, которые установлены в наших рабочих станциях. При помощи infparser.py, который входит в состав binl-сервера, скомпилируем INF-файлы:

$ ./infparser.py /home/samba/reminst/inf
Compiled 955 drivers


результатом его работы будет файл devlist.cache, расположенный в текущем каталоге.

первая установка

Запустим binl сервер в интерактивном режиме:

# ./binlsrv.py
Succesfully loaded 955 devices
Binlserver started...


При старте он ищет в текущем каталоге файл devlist.cache. Для нормальной работы этот сервис необходимо запустить с ключем -d.
На любой рабочей станции, сетевая карта которой соответствует спецификации PXE, изменим порядок загрузки так, чтобы в первую очередь она пыталась загрузиться при помощи сетевой карты.
DHCP-запрос PXE-клиента см. на рис. 2.


Рисунок 2.

В ответ на свой запрос PXE-клиент получает IP-адрес, маску сети, адрес шлюза, адреса DNS- и WINS-серверов и имя файла загрузки - startrom.com. После чего PXE-клиент попросит у TFTP-севера загрузчик:

Sep 23 08:00:53 server in.tftpd[17998]: RRQ from 10.50.7.77 filename startrom.com
Sep 23 08:00:53 server in.tftpd[17998]: tftp: client does not accept options
Sep 23 08:00:53 server in.tftpd[17999]: RRQ from 10.50.7.77 filename startrom.com

получит его, и передаст ему управление. В дистрибутиве есть два загрузчика: startrom.com и startrom.n12, различие между которыми состоит в том, что startrom.com в течение 5 секунд просит подтверждения сетевой загрузки у пользователя (нажатия клавиши F12), а startrom.n12 сразу производит сетевую загрузку Windows без подтверждения пользователя. Кроме того, вы можете организовать сетевую загрузку при помощи других программ, например, bpbatch или pxelinux, возможности которых намного превышают возможности startrom. Итак, мы решили воспользоваться startrom.com.
После запуска программа startrom.com, как было сказано выше, в течение 5 секунд ждет нажатия клавиши F12. Если мы ответим ему нажатием клавиши F12, он продолжит сетевую загрузку, в противном случае startrom.com вернет управление PXE-клиенту, который, в свою очередь, завершит свою работу, и BIOS попытается загрузить компьютер со следующего по списку устройства, например, с жесткого диска.
Однако продолжим именно сетевую загрузку и нажмем клавишу F12. После этого startrom.com загрузит с TFTP-сервера ntldr , который обладает уже большим интеллектом.
ntldr загрузит с TFTP-сервера файлы bootfont.bin (русский шрифт) и ntdetect.com:
В свою очередь, ntdetect.com производит начальную дигностику оборудования, во время которой он выясняет производителя (Vendor ID) и модель (PCI ID) сетевой карты.
Далее с TFTP-сервера забирается наш файл ответов winnt.sif, и загрузчик шлет запрос binl-серверу, в котором сообщает сведения о сетевой карте и ожидает получить ответ, содержащий имя драйвера. binl-сервер получает запрос и ищет в devlist.cache указанного производителя и модель карты. Если описание этой карты присутствовало в одном из INF-файлов, binl-сервер шлет ответ клиенту, в котором содержится имя драйвера сетевой карты:

Recv NCQ len = 48
NCQ Driver request
[R] Vid: 0x1022
[R] Pid: 0x2000
[R] rev_u1 = 0x2
[R] rev_u2 = 0x0
[R] rev_u3 = 0x0
[R] rev = 0x10
[R] rev2 = 0x88
[R] subsys = 0x20001022
Checking PCI\VEN_1022&DEV_2000&SUBSYS_20001022
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

Если описание карты отсутствует, клиент получает ответ "Driver not found":

Recv NCQ len = 48
NCQ Driver request
[R] Vid: 0x1022
[R] Pid: 0x2000
[R] rev_u1 = 0x2
[R] rev_u2 = 0x0
[R] rev_u3 = 0x0
[R] rev = 0x10
[R] rev2 = 0x88
[R] subsys = 0x20001022
Checking PCI\VEN_1022&DEV_2000&SUBSYS_20001022
Checking PCI\VEN_1022&DEV_2000
Driver not found

и сетевая загрузка на этом прекращается: (рис. 3).


Рисунок 3.

После того, как загрузчик узнал имя драйвера сетевой карты, он загружает с TFTP-сервера большое число INF-файлов и драйверов, затем пытается загрузить указанный драйвер сетевой карты, ожидая найти его в каталоге wxp-pro.rus/i386:

Sep 23 11:38:24 server in.tftpd[26571]: RRQ from 10.50.7.77 filename \wxp-pro.rus\i386\pcntpci5.sy_ remapped to /wxp-pro.rus/i386/pcntpci5.sy_
Sep 23 11:38:24 server in.tftpd[26572]: RRQ from 10.50.7.77 filename \wxp-pro.rus\i386\pcntpci5.sys remapped to /wxp-pro.rus/i386/pcntpci5.sys

Но наш дистрибутив содержит только установочные файлы, а все драйверы содержатся внутри файла wxp-pro.rus/i386/driver.cab. Поэтому необходимо вручную положить в каталог wxp-pro.rus/i386 SYS-файлы для каждой сетевой карты. Если этого не сделать, то загрузка прервется с сообщением, показанным на рис. 4.


Рисунок 4.

Добавим файл pcntpci5.sys в каталог wxp-pro.rus/i386 и начнем установку заново. В ходе установки будут загружены необходимые драйвера устройств и ядро операционной системы. При старте ядро получает параметры, описанные нами как OsLoadOptions в секции [SetupData] файла unattend.txt. Далее стартует процедура установки операционной системы. Она проверяет конфигурацию дисков и осуществляет разбивку и форматирование раздела для установки системы в соответствии с секцией [RemoteInstall] файла unattend.txt.

Далее программа установки проверяет только что созданный и отформатированный раздел на ошибки, подключается к SMB-ресурсу, описанному нами как SetupSourceDevice в секции [SetupData] файла unattend.txt и начинает копирование всех файлов с этого ресурса. После завершения копирования файлов дистрибутива начинается первая фаза установки, она проходит в текстовом режиме и завершается перезагрузкой компьютера.
После перезагрузки начинается вторая фаза установки Windows XP, во время которой определяются устройства компьютера и устанавливаются драйверы найденных устройств. Потом происходит установка Windows XP, дополнительных программных продуктов, которые мы включили в наш дистрибутив, и, наконец, завершение установки.

После перезагрузки пользователь увидит приглашение, позвонит администратору и его машина будет включена в домен samba удаленно с машины администратора при помощи программы netdom.exe:

netdom join pc-name /Domain:komi /UserD:admin /PasswordD:* /UserO:Администратор /PasswordO:* / REBoot
Type the password associated with the domain user:
Type the password associated with the object user:
The command completed successfully.

Кроме того, на только что установленной машине можно настроить синхронизацию времени, с использованием протокола SNTP. Для этого на машине администратора нужно выполнить команду:

net time \\pc-name /setsntp:"ntp1.komi.mts.ru ntp2.komi.mts.ru"

После еще одной перезагрузки пользователь входит в систему под своми именем, получает с netlogon-сервера системные и пользовательские политики, профиль пользователя, принтера и netlogon-скрипт. То есть получает в свое распоряжение полностью готовую для работы систему, в которой установлено необходимое для работы программное обеспечение, настроено сетевое соединение, firewall и автоматическое обновление продуктов Microsoft с корпоративного SUS-сервера.

заключение

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



Александр Дейтер, технический специалист службы автоматизации ФОАО "МТС" в г.Сыктывкаре, РК, tiamat@komi.mts.ru.

обсуждение статьи


Сетевые решения. Статья была опубликована в номере 10 за 2004 год в рубрике sysadmin

©1999-2022 Сетевые решения