Каждому системному администратору, даже не большой локальной сети, приходиться устанавливать или обновлять разнообразные операционные системы. Довольно часто конфигурация оборудования настолько разнообразна, что ни о какой установке ОС с заранее подготовленного образа установленной и настроенной системы, речи быть не может. Для компаний занимающихся разработками клиент-серверного программного обеспечения работа с СУБД Sybase SQL Anywhere [14], Oracle Database [13] и т.д. — список ОС для тестирования серверной части продукта может быть очень большим. Работы по созданию кроссплатформенных приложений тоже требуют наличия разнообразных платформ. В этот список могут входить как все версии серверных и десктопных ОС от Microsoft, так и целый зоопарк популярных операционных систем семейства Unix. Так же время от времени возникает необходимость решения таких «насущных» задач как восстановление систем, загрузчиков, удаление вирусов и т.д. и т.п. Для этого администратору удобно иметь под рукой как минимум два live-дистрибутива (Windows и Unix). Из всего выше сказанного следует, что администратору необходимы носители на которых располагаются все эти ОС, а это достаточно большое количество дисков. Тем более, что в разнообразные системы желательно интегрировать последние сервис-паки и обновления, которые выходят достаточно часто. Это приводит к тому, что носители периодически необходимо перезаписывать, что неэффективно с точки зрения затрат времени.
Следует также отметить, что, из соображений безопасности и по причине экономии при комплектовании рабочих станций не всегда устанавливается DVD привод, а многие системы инсталлируются с DVD дисков. В такой ситуации облегчить жизнь системному администратору поможет сервер сетевой загрузки и установки операционных систем. В интернете существует огромное количество статей и сайтов посвященных этой теме. Но во многих случаях описание процесса установки уже не соответствует новым реалиям, так как написаны достаточно давно. После недавнего внедрения системы сетевой установки на новом сервере, возникло желание поделиться этим опытом.
Существует два стандартных варианта решения этой задачи. Для установки операционных систем семейства Windows существуют всем известные WDS (Windows Deployment Services) и SMS (Microsoft System Management Server). У Unix-подобных систем с давних пор была возможность установки разнообразными методами, в том числе и по сети. Нет сомнения, что для развертывания и установки Windows систем WDS удобен и выполняет свои обязанности, но для инсталляции операционных систем семейства Unix он не очень подходит.
Как известно, основным компонентом сервера сетевой установки является TFTP сервер. Его расположение (IP - адрес) указывается при помощи параметров DHCP. Если DHCP-сервер в вашей сети один, то перенаправлять сетевой загрузчик то на один TFTP сервер, то на другой для загрузки не получится. Поэтому нельзя объявить сразу два источника установки – такой сервер должен быть один. Существует решение для установки Linux систем с помощью Windows WDS - проект WDSLINUX [1]. Его основной минус заключается в том, что не все дистрибутивы поддерживают подключение по smb и http протоколу к серверу установки (для примера http://www.openfiler.com). Обычно такие дистрибутивы требуют подключения по nfs. Мне хотелось получить универсальную схему для установки разных версий Microsoft Windows и Linux, а так же сетевую загрузку разнообразных «спасательных» систем.
Для начала немного теории. Принцип сетевой установки очень прост. При включении компьютера управление передается ПЗУ сетевой карты. Обычно используется среда PXE (Pre-Execution Environment). После распаковки в оперативную память, она активирует сетевую карту и начинает посылать широковещательный запрос в сеть для нахождения сервера DHCP. При ответе DHCP, PXE запрашивает у него IP адрес, который необходимо присвоить сетевой карте, маску сети, IP адрес сервера TFTP, имя файла для загрузки и т.д. Далее, если ответы на вопросы получены при помощи встроенного TFTP-клиента, PXE обращается к указанному серверу с запросом на получение указанного в параметрах файла. Если файл найден и получен то управление передается на него. Всеми последующими действиями будет руководить именно он.
Широкое распространение получил проект Питера Анвина (Peter Anvin) под названием — Syslinux [2]. Он имеет простые конфигурационные файлы и включен в поставку многих Linux дистрибутивов. На официальном сайте дается такое определение этому пакету: «SYSLINUX является загрузчиком для операционных системы Linux, который работает на MS-DOS/Windows FAT файловых системах. Он предназначен для простой загрузки и установки Linux. А также для создания спасательных и других специальных загрузочных конфигураций». В этот пакет входит PXELINUX, который является производной от SYSLINUX и используется для загрузки Linux с сетевого сервера. PXELINUX соответствует Intel PXE (Pre-Execution Environment) спецификации. Основой PXELINUX является файл «pxelinux.0» — это и есть загрузчик. Этот файл располагается в корне TFTP сервера. Его конфигурационные файлы размещаются в папке «/tftpboot/pxelinux.cfg/». После запуска на клиентской машине «pxelinux.0» скачивает с сервера и отображает файл «message». Это простой текстовый файл, в котором описаны доступные варианты загрузки. Затем он скачивает свой конфигурационный файл («/tftpboot/pxelinux.cfg/default») и переходит в режим ожидания ввода имени предоставленных конфигураций. Имя раздела пишется после метки label. В ответ на ввод имени варианта установки «pxelinux.0» начинает выполнять действия описанные в нем. Для создания простого текстового меню файл «/tftpboot/pxelinux.cfg/default» может выглядеть так:
default pe
label xpinstall # Установка Windows XP
kernel startrom.0
label win7 # Установка Windows 7
kernel sources/pxeboot.0label pe # Запуск Live-CD WindowsPE
pxe keep
kernel pe.0
append initrd=winpe.wim ramdisk_size=262144
label suse112 # Установка openSuSe11.2
kernel suse/suse112x32/linux
append initrd=suse/suse112x32/initrd ramdisk_size=65536 install=nfs://192.168.1.7/ srv/tftpboot/suse/suse112x32/CD1/
Так же возможно создание графического меню выбора операционных систем (рис.1-3).
Рисунок 2 Меню «спасательных» систем и утилит
Рисунок 3 Меню установки ОС
В связи с тем, что было много вопросов и обращений по поводу цикла статей посвященных установке и загрузке по сети различных сборок Windows XP и WinPE , под общим названием "Универсальный сервер сетевой загрузки и установки ". Я решил: во первых выложить ВСЕ конфигурационные файлы используемые в статьях. Далее привожу список файлов и директорий (как они распологаются у меня) сервера установки. Во вторых попросить всех поделиться своими наработками в этом направлении с описанием "подводных камней" с которыми пришлось столкнуться на разных конфигурациях. И в третьих задать вопрос: "А оно было надо?".
Буду всем благодарен и признателен за ответы.
Содержание файлов в папках в корне tftpboot/
23.09.2010 12:22 4 952 bootfont.bin
23.09.2010 16:32 523 328 bootmgr.exe
27.01.2012 08:12 90 349 568 filesystem.squashfs
27.01.2012 08:12 9 765 456 initrd.img
23.01.2012 18:03 392 540 ipxe.lkn
27.09.2010 16:08 20 068 memdisk
23.09.2010 12:10 54 576 menu.c32
21.09.2012 12:53 3 545 new_winxp.sif
23.09.2010 12:24 47 564 ntdetect.com
13.12.2010 11:55 298 496 ntld1
13.12.2010 11:55 298 496 ntld2
24.01.2011 18:10 298 496 ntld7
29.06.2009 22:14 298 496 NTLDR
23.09.2010 11:51 14 646 pxelinux.0
21.09.2012 12:54 0 tt.txt
27.01.2012 08:12 2 651 200 vmlinuz
13.12.2010 12:08 168 winn1.sif
13.12.2010 12:10 173 winn2.sif
24.01.2011 18:07 166 winn7.sif
21.09.2012 12:51 3 571 winxp.sif
23.09.2010 12:18 241 664 xpldr
Содержание файлов в папках (от корня tftpboot/) и архивах.
Содержание tftpboot/pe/
01.11.2010 13:56 125 984 891 boot.wim
21.09.2012 12:37 0 dir.txt
12.09.2008 15:11 2 949 120 freedos.ima
21.06.2008 00:00 111 864 memtest
24.08.2009 12:28 22 454 startrom1.0
13.12.2010 11:51 22 454 startrom2.0
24.01.2011 18:06 22 454 startrom7.0
27.05.2012 22:14 306 489 726 wim_antivir.wim
27.05.2012 22:20 275 166 347 wim_hdd.wim
12.03.2010 16:07 22 454 xp0.0
Содержание tftpboot/pxelinux.cfg/
02.02.2012 14:12 660 default
26.11.2010 13:05 449 graphics.conf
15.02.2012 15:53 1я886 mini.menu
04.06.2012 10:17 3я851 setup.menu
18.03.2012 11:08 2я337 tools.menu
Содержание tftpboot/reminst/
26.01.2010 17:26 39 convert
21.09.2012 12:43 0 tt.txt
12.03.2010 16:07 22 454 xp0.0
12.03.2010 16:08 241 664 xpldr
Содержание tftpboot/sources/
19.10.2011 14:28 268 609 178 boot.wim
11.06.2009 01:15 25 772 pxeboot.0
Содержание tftpboot/ris
21.09.2012 12:59 0 binl.log
17.03.2007 06:38 12 308 binlsrv.c
23.09.2010 15:29 33 352 binlsrv.py
22.09.2006 09:19 318 contrib.txt
26.09.2007 11:49 1 614 decode.py
21.02.2012 15:37 1 353 523 devlist.cache
21.02.2012 15:37 <DIR> drv
22.09.2006 09:19 1 162 fixloader.py
22.09.2006 09:19 1 409 fixup-repository.sh
26.09.2007 11:49 1 040 hexdump.py
26.09.2007 11:49 1 136 infdump.py
27.04.2008 06:35 11 086 infparser.py
17.03.2007 06:50 5 292 modldr.py
21.02.2012 15:37 11 198 nics.txt
27.04.2008 07:04 <DIR> patches
21.09.2012 13:00 0 tt.txt
26.09.2007 11:45 1 151 wspaste.py
menu7.zip - файлы для установки Windows7: install_menu.cmd, install_menu.cmd install_menu.lst, Wselect.exe
Все файлы есть в архивах с названиями папок, прикрепленных к сообщению.
С разрешения редакции журнала "Системный администратор" публикую продолжение статьи.
В первой части статьи [1] были рассмотрены принципы работы, создание и конфигурирование сервера для инсталляции различных операционных систем в сети. Подготовили и настроили для установки в обычном режиме (вопрос–ответ) два дистрибутива: Microsoft Windows XP и Microsoft Windows 7.
Рассмотрим процесс автоматизации установки операционных систем. Автоматическая установка Windows XP подробно описана не только в официальной документации Microsoft [2], но и в огромном количество how-to разбросанным по интернету [3]. Поскольку Windows XP снята с поддержки, то перейдем к обзору автоматической установки флагманской операционной системы компании Microsoft Windows 7.
Автоматическая установка обеспечивается при наличии в дистрибутиве Microsoft Windows XP текстового файла настройки системы winnt.sif и диспетчер установки setupmgr.exe. В последующих версиях Windows (Microsoft Windows Vista и старше) эту роль играет файл ответов autounattend.xml. Как понятно из расширения он представляет собой простую XML-структуру (рис.1).
Рисунок 1. Структура файла autounattend.xml
В нем можно указать используемые по умолчанию параметры Internet Explorer, настройку сети, принадлежность к домену и т.д. В связи с тем, что теперь в Windows используется модульная архитектура, появилась возможность тонкой настройки каждого компонента устанавливаемой системы, за счет вложенных элементов структуры XML.
Создать файл ответов можно в любом текстовом редактором, но лучше все действия производить при помощи диспетчера установки Windows (Windows Automated Installation Kit или сокращенно WAIK) [4]. Кроме того WAIK проверяет корректность указанных значений и имеет очень удобно реализованную систему помощи. Подробные сведения о том или ином параметре настройки можно узнать из контекстного меню его интерфейса. Вместе с этим продуктом поставляется набор документации, включающий руководство пользователя пакета автоматической установки Windows, а так же средства миграции пользовательской среды и другие документы.
Для просмотра этих документов после установки Windows AIK нажмите кнопку Пуск, последовательно выберите Все программы | Microsoft Windows AIK | Документация, а затем откройте необходимый файл справки. По умолчанию все документы находятся в папке %ProgramFiles%\Windows AIK\Docs\CHMs. Дополнительно в папке C:\Program Files\Windows AIK\Samples обслуживающего компьютера [1] можно найти образец файла ответов (Corp_autounattended_sample.xml).
Рассмотрим пример развертывания образа Windows 7 используя WAIK .Для этого выполним следующие действия:
Врезка.
В данном примере не импортируются специальные драйверы устройств, а так же дополнительные приложения и пакеты. Производиться первоначальное конфигурирование и форматирование дисков, установка редакции и локали системы, а так же ввод ключа продукта.
После выполненных действий в области Файл ответов появится пустой файл с названием Untitled. Далее, выполняем добавление компонентов системы настройки, для этого в панели Образ Windows разворачиваем вкладку Components.
Таблица 1. Компоненты необходимые для создания базового образа Windows
Компонент | Этап настройки |
Microsoft Windows Deployment Reseal | oobeSystem |
Microsoft-Windows-International-Core-WinPE\SetupUILanguage | windowsPE |
Microsoft-Windows-Setup\DiskConfiguration\Disk\CreatePartitions\CreatePartition |
windows PE |
Microsoft-Windows-Setup\DiskConfiguration\Disk\ModifyPartitions\ModifyPartition |
windowsPE |
Microsoft-Windows-Setup\ImageInstall\OSImage\InstallTo |
windowsPE |
Microsoft-Windows-Setup\UserData |
windowsPE |
Microsoft-Windows-Shell-Setup\OOBE |
oobeSystem |
На основе данных, приведенных в таблице 1 выбираем необходимый параметр нажимаем на нем правой кнопкой мыши. Система предложит выбрать этап настройки, указываем сверяясь с таблицей 1. Приведенные компоненты взяты из официальной документации и являются минимально необходимыми. Присмотревшись внимательнее к названиям в большинстве случаев можно определить за что отвечает каждый компонент. Вопрос который может возникнуть: «Что такое этап настройки?». Этап настройки это момент времени в которое будет производиться описанное действие. Этапы по своей сути очень похожи на «шаги инсталляции» Windows XP. Настройки автоматической установки могут быть применены в одном или нескольких этапах. Нам необходимо использовать этап под названием WindowsPE. Вот как он описан в документации: «...параметры могут включать определение образа ОС Windows для установки и настройки диска на компьютере назначения. На этом этапе настройки, образ Windows копируется на целевой целевой компьютер применяя конфигурацию указанную в WindowsPE.
Если ваша установка Windows PE требует загрузки драйверов для доступа к локальному жесткому диску или сети, используйте этот этап настройки для добавления драйверов в хранилище драйверов Windows PE.»
Все просто и понятно - это самый главный этап для сетевой установки.
Итак, закончив добавление, переходим к редактированию свойств компонентов (рис.2).
Рисунок 2. Редактирование свойств компонента
В области Параметры панели Свойства выбираем нужный параметр и в правом столбце вводим соответствующее значение, как указано в таблице 2. Названия и значения свойств интуитивно понятны и не должны вызвать вопросов.
Таблица 2. Параметры свойств компонента
Этап настройки |
Компонент |
Значение |
WindowsPE |
Microsoft-Windows-International-Core-WinPE |
<язык ввода> |
WindowsPE |
Microsoft-Windows-International-Core-WinPE\SetupUILanguage |
<язык интерфейса> |
WindowsPE |
Microsoft-Windows-Setup\DiskConfiguration |
WillShowUI = OnError |
WindowsPE |
Microsoft-Windows-Setup\DiskConfiguration\Disk |
DiskID = 0 WillWipeDisk = true |
WindowsPE |
Microsoft-Windows-Setup\DiskConfiguration\Disk\CreatePartitions\CreatePartition |
Order = 1 Size = 100 Type = Primary |
WindowsPE |
Microsoft-Windows-Setup\DiskConfiguration\Disk\ModifyPartitions\ModifyPartition |
Active = true Format = NTFS Label = System Order = 1 PartitionID = 1 |
WindowsPE |
Microsoft-Windows-Setup\ImageInstall\OSImage |
InstallToAvailablePartition = false WillShowUI = OnError
|
WindowsPE |
Microsoft-Windows-Setup\ImageInstall\OSImage\InstallTo |
DiskID = 0 PartitionID = 1 |
WindowsPE |
Microsoft-Windows-Setup\UserData |
AcceptEula = true |
WindowsPE |
Microsoft-Windows-Setup\UserData\ProductKey |
Key = <ключ продукта> WillShowUI = OnError |
Со списком минимально необходимых компонентов, а так же с подробным описанием каждого можно познакомиться в документе под названием «Пошаговое руководство создания файла ответов» — файл stepbystep_itpro.htm дистрибутива [4].
После добавления всех необходимых параметров и компонентов в меню Сервис выбираем Проверка файла ответов. Все значения сравниваются с доступными параметрами выбранного образа Windows. Если проверка прошла успешно, в области Сообщения в нижней части окна Диспетчер установки Windows появляется сообщение Ошибок и предупреждений нет. В противном случае в области Сообщения появляется сообщение об ошибке. Для исправления обнаруженной ошибки, необходимо дважды кликнуть по соответствующему сообщению, чтобы перейти к неверному параметру. Исправляем ошибку, используя встроенную систему помощи и снова выполняем проверку. Повторяем это действие, пока файл ответов не будет годным к эксплуатации. И только после этого сохраняем файл под именем autounattend.xml. Осталось скопировать этот файл в корневую папку сервера сетевой загрузки и исправить вызов setup.exe в файле install_menu.cmd [1] с указанием его имени: setup.exe /unattend: autounattend.xml. Теперь установка системы будет происходить в автоматическом режиме с указанными параметрами.
После создания базового файла ответов его можно изменить, включив дополнительные настройки, автоматизировать части процесса инсталляции путем создания сценариев. Дополнительно интегрировать в загружаемый образ разнообразные драйвера устройств и необходимые приложения. Много информации о настройке и развертывании образа Windows содержаться в разделе Сценарии пакета автоматической установки Windows справки Waik.chm и документации к WAIK [4], а так же по адресу [5].
Добавить в загрузку Linux-дистрибутив не составляет большого труда. Обычно сборщики популярных дистрибутивов таких как CentOS, Ubuntu, openSuSe и т.д. Включают в поставку текстовый файл с описанием установки ОС с сетевого ресурса.
Общий принцип одинаков: загрузка ядра системы установки и передача ему параметров с указанием пути по которому располагается дистрибутив. Так как этот вопрос подробно рассматривался в первой части статьи , то останавливаться на нем не будем. Дополнительную информацию можно найти по адресу [6].
Citrix XenServer является одной из самых популярных платформ виртуализации инфраструктуры масштаба предприятия. Популярность ей обеспечивает отличное средство управления и настройки - Citrix XenCenter, а так же возможность использовать редакцию Free XenServer бесплатно. Рассмотрим установку этой операционной системы в качестве первого примера.
В документации к дистрибутиву в файле installation.pdf [8] приведен пример, готовый к использованию совместно с PXE. Для использования в созданной нами сетевой конфигурации его необходимо немного изменить:
После всех изменений содержимое должно принять такой вид:
#default xenserver # Эта директива установки по умолчанию. Нам она не нужна - есть меню выбора установок
label xenserver # наименование загрузки (на ваш выбор)
menu label Install - ^Citrix XenServer # Название пункта меню
kernel xensrv/mboot.c32 # Ядро-загрузчик установки (xensrv/ - директория на сервере установки)
append xensrv/xen.gz dom0_mem=752M com1=115200,8n1 console=com1,tty --- xensrv/vmlinuz console=ttyS0,115200n8 console=tty0 --- xensrv/install.img # параметры установки рекомендованные Citrix
Рассмотрим за что отвечает каждый параметр:
xen.gz — сжатая файловая система инсталлятора;
dom0_mem=752M — использование памяти хост-машиной;
com1=115200 — виртуальный com-порт;
n1 console=com1 — «привязка» порта к терминалу 8 бит с проверкой четности;
vmlinuz — ядро системы;
console=ttyS0,115200n8 console=tty0 — параметры загрузки ядра ;
install.img — образ установочного диска.
Меню создано, осталось скопировать файлы. Для этого последовательно выполняем:
# mount /media/dvd /mnt # Монтируем DVD или
# mount -o loop /distrib/CitrixXS56.iso /mnt # iso-образ Citrix XenServer 5.6.0
Далее создаем папку /tftpboot/xensrv на сервере и скопируем в нее из /mnt/boot/ файлы ядра vmlinuz и xen.gz. Затем скопируем из /mnt/boot/isolinux папку packages.main и файл install.img. В папке packages.main находятся: dom0fs.tar.bz2 он содержит корневую файловую систему и архивы дополнительных пакетов, разработанных в Citrix, необходимые серверу. Можно включить в установку пакеты которые вам нужны, достаточно просто добавить их в dom0fs.tar.bz2, взяв из соответсвующего репозитория CentOS.
В Citrix XenServer так же предусмотрена возможность автоматической установки. Такой вариант удобен при создании большого количества однотипных серверов, например фермы Citrix App. В этом случае необходимо использовать предварительно созданный файл ответов, путь к которому указываем в параметрах /tftboot/pxelinux.cfg/default перед указанием параметра install.img:
answerfile=http://myhost.ru/5.6.0-answerfile \
install --- /tftpboot/xenserver/install.img
В приведенном листинге myhost.ru — адрес сервера установки (в частном случае это IP-адрес 192.168.1.7); 5.6.0-answerfile — имя файла. Необходимо обратить внимание на то, что обращение к файлу идет по протоколу HTTP (answerfile=http://...).
Для создания файла 5.6.0-answerfile обратимся к инструкции по установке XenServer [8], где приведены готовые примеры. Структура этого XML файла проста и интуитивно понятна (Рис. 3), поэтому не вызовет никаких затруднений при заполнении.
Рисунок 3. Структура файла 5.6.0-answerfile
На этом подготовка закончена и можно проверить установку выбрав в загрузочном меню [1] пункт “Citrix XenServer” (Рис.4).
Рисунок 4. Начало загрузки Citrix XenServer 5.6.0
Все шаги которые были производены для Citrix XenServer, полностью справедливы для дистрибутива Ubuntu. В этом примере использовалась версия Ubuntu — 10.10 x64 и стандартная установка режима cloud. Исключение составляют файлы ответов. Они располагаются в каталоге /preseed/ инсталляционного диска. Небольшая тонкость – они запрашиваются и передаются установщиком по протоколу http (так же как у XenServer, см. выше). Следовательно необходимо установить и настроить HTTP-сервер, например apache, ligth-http, nginx – любой на ваш выбор, указав для него корневую директорию /srv/tftpboot/. Для прямых обращений к HTTP желательно прописать алиасы на директории содержащие файлы систем. Добавляем в /etc/apache2/conf.d/ две конфигурации (еще одну для CentOS). Соотвественно для Ubuntu10.10 файл ubuntu.conf с таким содержанием:
Alias /ubuntu "/tftpboot/ubuntu/"
<Directory "/backup/ubuntu/">
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Для CentOS файл "centos.conf" с таким:
Alias /centos "/tftpboot/centos/"
<Directory "/tftpboot/centos/">
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
В дистрибутиве поставляется несколько вариантов установки конечных систем. Вы можете выбрать подходящий вам и указать соответсвующий ему файл ответов. Мне необходим вариант Cloud и поэтому в моей конфигурации указан /preseed/cloud.seed.
Добавляем в pxelinux.cfg/default описание раздела:
label ubuntu # наименование загрузки (на ваш выбор)
menu label Install - ^Ubuntu-10.10 x64 cloud # наименование пункта меню
kernel ubuntu/linux # ядро установщика
append vga=normal # включить графический режим установщика
initrd=ubuntu/initrd.gz # сжатая файловая система preseed/url=http://192.168.1.7/ubuntu/preseed/cloud.seed – quiet # путь к файлу ответов, параметр “– quiet” - установка с вводом параметров в ручном режиме (необходимо уазывать если не все параметры описаны в файле ответов)
Затем создаем папку /ubuntu/, монтируем iso-образ и копируем все файлы дистрибутива в нее. Проверяем установку выбрав в загрузочном меню пункт Ubuntu-10.10 x64 cloud.
Так как в параметрах указано – quiet, то на вопрос Выбор зеркала архива необходимо выбрать самую верхнюю строку — Ввести информацию вручную. И указать URL папки на сервере установки (Рис. 5,6).
Рисунок 5. Установка Ubuntu- Выбор зеркала архива.
Рисунок 6. Установка Ubuntu- Наше зеркало.
Установка этой операционной системы практически ни чем не отличается от предыдущего примера, наверное сказываются общие корни. Интерес вызывает возможность не распаковывать ISO-образ в папку на сервере, а просто скопировать его в корень HTTP-сервера и указать путь к нему. Итак:
добавляем в pxelinux.cfg/default описание раздела для CentOS-6.0:
label CentOS
menu label Install - ^CentOS-6.0
kernel centos/vmlinuz
append initrd=centos/initrd.img text
В таком варианте после загрузки ядра системы получим стандартное меню инсталлятора и уже с его помощью производите установку системы. При появлении запроса о дистрибутивном устройстве указываете полный путь URI к файлу ISO на сервере (рис.7). О возможностях автоматизации этого процесса можно прочитать в документации к дистрибутиву и по адресу [9].
Рисунок 7. Установка "CentOS 6.0".
В следующей части будут рассмотрены вопросы создания дистрибутивов «спасательных» систем, загружаемых по сети, на базе Windows PE и FreeDOS.
Литература
Итак продолжим тему сетевой загрузки. Полный комплект необходимых (готовых) конфигурационных файлов можно загрузить отсюда - ris-linux.zip. В случае графического меню структура каталогов на TFTP сервере будет выглядеть так:
/tftpboot/
/tftpboot/pxelinux.0 - загрузчик
/tftpboot/menu.c32 - модуль syslinux для создания меню на экране
/tftpboot/pxelinux.cfg/
/tftpboot/pxelinux.cfg/default — описание разделов основного меню
/tftpboot/pxelinux.cfg/graphics.conf — параметры меню: цвет, высота и т.д.
/tftpboot/pxelinux.cfg/fixes.menu - описание дополнительного меню (инструменты)
/tftpboot/pxelinux.cfg/setup.menu - описание дополнительного меню (установки)
Рассмотрим как происходит загрузка и установка Linux на примере openSuSe11.2. При выборе пункта «suse112» загрузчик сначала скачивает ядро («kernel suse/suse112x32/linux»), затем файл сжатой временной файловой системы «initrd» («initrd=suse/suse112x32/initrd»). Как только загрузка завершена «pxelinux.0» запускает на выполнение ядро, передав в качестве аргументов запуска параметры считанные из конфигурационного файла. Запустившись, уже само ядро подключает (монтирует) каталог с дистрибутивом («install=nfs://192.168.1.7/srv/tftpboot/suse/suse112x32/CD1/»), продолжая установку. Следует упомянуть о том, что ядро в этом случае обязательно должно содержать в себе (не как модули) драйвера сетевых карт установленных в компьютерах.
Теперь поговорим о том, как происходит загрузка Windows XP, а так же Windows Server 2003(R2). Для начального старта системы используется файл «startrom.n12». Он находится в архиве «STARTROM.N1_» на дистрибутивном диске Windows XP. Этот файл и запускается на выполнение при выборе пункта меню «label xpinstall» (строка «kernel startrom.0» в конфигурационном файле). Для использования совместно с «pxelinux.0» файл «startrom.n12» необходимо переименовать в «startrom.0».
Загрузившись, «startrom.0» потребует от TFTP сервера файл «ntldr» (сокращение от NT Loader) — загрузчик для операционных систем Windows NT и более поздних (2000/XP/Server 2003). Тот в свою очередь «ntdetect.com», который собирает информацию о составе оборудования. Как только информация собрана, «ntdetect.com» запрашивает файл ответов «winnt.sif». В нем и должны быть описаны пути подключения к серверу и параметры загрузки («OriSrc = "\\192.168.1.7\reminstall\i386"»). Все дальнейшие действия установки будут происходить по этому сценарию.
Для установки ОС от Microsoft я давно использую известный проект RIS for Linux [4]. Он представляет собой набор скриптов на Python [5], которые эмулируют часть работы WDS. Так как ядро Windows не имеет в себе драйверов сетевых карт, они должны загрузиться по сети. Это осуществляется файлом «ntdetect.com», который определяет код оборудования сетевой карты и запрашивает необходимый sys-файл у сервера установки. Здесь в установку включается скрипт «binsrv.py» (эмулятор WDS), который находит требуемый файл и передает его запросившей системе. После загрузки и инициализации устройств подключаются сетевые файловые системы описанные в файле ответов «winnt.sif» и продолжается установка ОС.
В случае Microsoft Vista, Windows 7 и Windows Server 2008 сценарий установки будет выглядеть немного по другому (пункт меню «label win7»). Загружаемым файлом является «pxeboot.0» (переименованный «pxeboot.n12»). Он в свою очередь загружает «bootmgr.exe» – Windows Boot Manager (диспетчер загрузки) и запускает его на выполнение. Тот запрашивает у сервера файл BCD – boot configuration data (хранилище параметров запуска) и на основе полученных данных «bootmgr.exe» производит загрузку «boot.sdi» и «boot.wim» – образа Windows PE. Все выше перечисленные необходимые файлы можно взять из комплекта Windows Automated Installation Kit (AIK) [ссылка].
Настройка
1. Windows-домен с основным контроллером pdc.company.local с IP адресом 192.168.1.1. Операционная система Windows Standart Server 2003 R2 x64, службы AD, DNS, DHCP.
Установку начинаем с сервера DHCP. Открываем оснастку DHCP сервера и в пункте меню «Параметры области» устанавливаем галочки напротив параметров:
Если у вас сервер DHCP на Linux сервере, то в его конфигурационный файл «/etc/dhcpd.conf» необходимо внести поправки добавив директивы:
allow bootp - сообщает серверу dhcp обрабатывать или нет bootp-запросы
allow booting - сообщает серверу обрабатывать ли запрос конкретного клиента.
filename - указывает имя файла, используемого для начальной загрузки клиента
Подробнее об этих опциях можно прочитать в документации к вашему DHCP серверу или по ссылке [15].
Переходим к серверу 192.168.1.7. Устанавливаем, если еще не установлены, необходимые пакеты: tftp, syslinux, convmv, samba, cabextract и интерпретатор python. Для openSuse11.1 можно так:
# yast -i tftp syslinux convmv samba python cabextract.
Настройку TFTP начинаем с создания корневой директории сервера установки:
# mkdir /srv/tftpboot
При установке Windows с использованием Linux возникают известные всем сложности обращения к папкам на сервере: символ «\» надо замещать на «/». Так же есть проблемы с чувствительностью к регистру. Все это решается при помощи опции «remap» tftp сервера. Создаем файл «rules» в «/srv/tftpboot» с таким содержанием (естественно вместо многоточия должны быть остальные буквы для замены):
rg \\ /
rg A a
….....
rg Z z
Добавляем в строку запуска сервера (файл «/etc/xinet.d/tftp») информацию о remap-файле (путь к remap-файлу с ключом -m) и путь корневой директории сервера. Она должна выглядеть так:
tftp -s /srv/tftpboot -m /srv/tftpboot/rules
Перезапускаем xinetd:
# /etc/init.d/xinetd restart
Теперь сервер будет переводить имена всех файлов и директорий в нижний регистр. Соответственно во всех директориях tftp сервера их необходимо привести к этому виду. Эту операцию придется производить каждый раз при изменении файлов в дистрибутивах. Проще всего сделать это при помощи утилиты convmv, установленной ранее:
# convmv --lower -r --notest --replace /srv/ftpboot/*
Создаем в корневой папке tftp сервера каталог с конфигурационными файлами:
# mkdir /srv/tftpboot/pxelinux.cfg
и копируем туда загруженные конфигурационные файлы [3] для создания графического меню. В файле «/tftpboot/pxelinux.cfg/setup.menu» исправляем IP адрес сервера установки («nfs://192.168.1.7/») на IP вашего сервера (где будут располагаться распакованные дистрибутивы). Для текстового меню достаточно создать файл default из примера выше.
Примеры конфигураций можно посмотреть в каталоге /usr/share/doc/packages/syslinux/. В корень сервера копируем файлы самого загрузчика «menu.c32» и «pxelinux.0». Они находятся в директории /usr/share/syslinux/ сервера. С настройкой самого сервера все закончено, переходим к подготовке дистрибутивов.
Продолжение следует...
Начнем с подготовки фалов для установки Windows XP. Монтируем образ диска с системой:
mount -o loop /home/iso/winxpsp3.iso /home/temp/xp
Распаковываем и переименовываем файлы для загрузки:
cd /srv/tftpboot/
cabextract /home/temp/xp/I386/SETUPLDR.EX_
mv /home/temp/xp/I386/setupldr.exe ntldr
cabextract /home/temp/xp/I386/STARTROM.N1_
mv /home/temp/xp/I386/startrom.n12 startrom.0
cp /home/temp/xp/I386/NTDETECT.COM ntdetect.com
cp /home/temp/xp/BOOTFONT.BIN bootfont.bin
Копируем сам дистрибутив и переводим имена всех файлов в нижний регистр:
mkdir /srv/tftpboot/winxp
cp /home/temp/xp/* /srv/tftpboot/winxp/
convmv --lower -r --notest --replace *
Разрешим доступ к дистрибутиву через Windows network добавив в файл
«/etc/samba/smb.conf» секцию (сразу добавим секцию и для установки Windows 7):
[reminstall]
path = /srv/tftpboot/winxp/
public = yes
browsable = yes
read only = yes
guest ok = yes
[win7]
path =/srv/tftpboot/win7
public = yes
browsable = yes
read only = yes
guest ok = yes
Перезапускаем samba:
/etc/init.d/samba restart
Для настройки ris-linux понадобиться сам дистрибутив [4] и пакет драйверов сетевых карт. Готовый архив можно скачать отсюда [7], а можно изготовить самостоятельно (это позволит разобраться как в дальнейшем добавлять новые сетевые карты и обновлять их драйвера).
RIS сервер хранит информацию о драйверах в файле «nics.txt», туда она попадает при помощи скрипта «infparser.py». Скрипт выполняет поиск в указанной ему директории файлов *.inf, считывает информацию о «Vendor Id» (уникальный идентификатор производителя оборудования) производителя и записывает в файл «nics.txt» строку вида:
8086 4227 w39n50.sys w39n50
Создаем папки ris, ris/drv и ris/drv/sys в корне TFTP сервера:
mkdir /srv/tftpboot/ris
mkdir /srv/tftpboot/ris/drv
mkdir /srv/tftpboot/ris/drv/sys
Затем необходимо скопировать и распаковать в папку /srv/tftpboot/ris/drv файлы net*.in_ (из папки i386 дистрибутивного диска). Туда же следует скопировать дополнительно *.inf файлы необходимых для добавления сетевых драйверов. Файлы *.sy_ и *.sys копируем в /srv/tftpboot/ris/drv/sys. После этого составляем список доступных драйверов:
vmhost:/srv/tftpboot/ris # python infparser.py drv/
Compiled 6384 drivers
generated devlist.cache
generated nics.txt
Все, набор драйверов готов. Осталось скопировать содержимое каталогов drv/ и drv/sys/ в директорию с дистрибутивом Windows XP - /srv/tftpboot/winxp/i386/. В итоге в этой папке должны расположиться ВСЕ *.inf и *.sys файлы сетевых карточек. На сайте [10] есть немного другой способ, также пригодный для подготовки пакета драйверов в Windows XP.
Продолжаем настройку ris-linux.
Скачиваем и распаковываем ris-linux в папку с именем /srv/tftpboot/ris :
cd /srv/tftpboot/
wget http://oss.netfarm.it/guides/ris-linux-0.4.tar.gz
tar -xvf ris-linux-0.4.tar.gz
mv ris-linux-0.4 ris
Теперь необходимо указать путь по которому располагается дистрибутив. Для этого открываем файл «binlsrv.py» и правим там строку:
BASEPATH = /srv/tftpboot/winxp/
Запускаем WDS в режиме логирования для проверки :
./binlsrv.py -l binl.log
Succesfully loaded 6384 devices
Binlserver started... pid 7385
Уже сейчас можно проверить работу сервера загрузив тестовый компьютер по сети и выбрав пункт «xpinstall». Если что-то не так проверяйте логи на предмет запрашиваемых у TFTP сервера файлов, они должны присутствовать на сервере в таком виде, как и запрашиваются. Наиболее часто встречающаяся ошибка это: «Выбранный образ операционной системы не содержит необходимых драйверов для имеющегося сетевого адаптера...»(рис.5).
Рисунок 5 Отсутствие необходимых драйверов
- server_args = -s /srv/tftpboot -m /srv/tftpboot/rules -v
Про файл ответов для автоматической установки «winnt.sif» написано очень много. Подробное описание всех параметров «winnt.sif» находиться на сайте Microsoft [9], а так же здесь [10]. В этом файле описываются параметры устанавливаемой системы, которые используются на разных этапах (уровнях) установки. Создать его можно с помощью программ из архива «deploy.cab» находящегося в папке /support/tools/ дистрибутивного диска Windows XP, просто ответив на вопросы конфигуратора. Там же находиться подробная документация в виде chm-файлов по использованию и конфигурации файлов автоматической установки. Для теста можно взять готовый файл моей конфигурации и просто исправить некоторые строки [8]. В начале необходимо исправить следующие параметры: «OriScr» в секции «[data]» (это тот самый путь который мы сделали доступным посредством Samba):
- OriSrc = "\\192.168.1.7\reminstall\i386"
и «SetupSourceDevice» в секции «[SetupData]» (это указание устройства с которого идёт установка):
- SetupSourceDevice = "\Device\LanmanRedirector\192.168.1.7\reminstall"
DriverSigningPolicy=Ignore ; устанавливать драйверы без подписи
UpdateInstalledDrivers=Yes ; Для установки не подписанных драйверовRepartition=Yes ; удалить ВСЕ существующие разделы на диске и создать один для установки и использования системой
; путь поиска дополнительных драйверов во время установки Windows
OemPnPDriversPath="windows\drv\chipset\intel;windows\drv\net\intel;
windows\drv\net\marvell;windows\drv\net\realtek;windows\drv\video\intel;
windows\drv\video\nvidia;windows\drv\video\ati;windows\drv\audio\realtek"
Когда на графическом этапе инсталляции ОС выполняется поиск файлов INF, содержащих нужные идентификаторы Plug and Play устройств, программа просматривает все пути, указанные в переменной OemPnPDriversPath. Это дает возможность правильно инициализировать устройства. Файл «winnt.sif» имеет большое количество параметров, которые позволяют произвести не только основную настройку системы, но и инсталляцию необходимого программного обеспечения.
Установка будет происходить по такому сценарию:
Загрузка по сети образа Windows7 PE (без графической оболочки)
Вызов меню выбора системы для установки («install_menu.cmd»)
Монтирование необходимого сетевого устройстваЗапуск setup.exe с указанием файла ответов
Для создания загрузочного образа Windows7 PE («boot.wim») обязательно понадобиться компьютер с установленной системой Windows 7, Windows Vista, Windows Server 2003 или Windows Server 2008 (я использовал виртуальную машину c Windows 7 — далее обслуживающий компьютер). Устанавливаем Windows Automated Installation Kit (WAIK) (См. Рис.7-9.).
Рисунок 8 Выбор компонентов настройки
Запускаем Windows PE Tools Command Prompt (Пуск-> Программы-> Microsoft Windows AIK -> Windows PE Tools Command Prompt). В действительности это обычное окно программы командного процессора Cmd.exe, только с добавленными дополнительными переменными окружения. Создаем копию загрузочного образа с необходимой архитектурой (параметр x86):
copype.cmd x86 c:\windowspe-x86\
монтируем образовавшийся образ:
Dism /Mount-WIM /WimFile:c:\windowspe-x86\winpe.wim /Index:1 /MountDir:c:\windowspe-x86\mount
Открываем на редактирование файл «startnet.cmd» из каталога c:\windows7pe-x86\mount\windows\system32. Этот файл запускается первым после загрузки и старта системы. Вот в нем и надо прописать вызов скрипта «install_menu.cmd», который будет отвечать за выбор ОС для установки.
Содержание «startnet.cmd»:
Wpeinit # Окончательная инициализация системы ipconfig renew # Инициализируем сетевые интерфейсы call install_menu.cmd
Зачем использовать ipconfig renew? Как показала практика, по неизвестной причине не все сетевые карты инициализируются после выполнения Wpinit. Поэтому еще раз вызываем настройку интерфейса (рис.10).
Рисунок 10 Ошибка инициализации сети
Продолжение следует...
В файле «install_menu.cmd» реализован выбор операционных систем для установки:
@ECHO OFF CD /D "%~dp0" SETLOCAL COLOR 1E wselect.exe install_menu.lst "Выбор системы для установки" /menu /cmdCenter /oemlist /fixedfont /fs=20 CALL :M%ERRORLEVEL% ENDLOCAL GOTO :EOF :M0 :M1 ::Тело скрипта при отказе ECHO Cancel EXIT :M2 :: Тело скрипта запуска X86 ECHO Выбрана система X86 NET USE Z: \\192.168.1.7\win7 IF EXIST Z:\SOURCES\setup.exe ( CD /D Z:\SOURCES setup.exe /unattend:Z:\autounattend.xml ) GOTO :EOF :M3 :: Тело скрипта запуска X64 ECHO Выбрана система X64 NET USE Z: \\192.168.1.7\win7x64 IF EXIST Z:\SOURCES\setup.exe ( CD /D Z:\SOURCES setup.exe /unattend:Z:\autounattendX64.xml ) GOTO :EOF
Скачать архив с этим файлом можно по адресу [12]. Содержание этого архива так же необходимо скопировать в c:\windows7pe-x86\mount\windows\system32. Далее добавляем необходимые вам драйвера (сетевых карт) с помощью команды Dism с параметром /Add-Driver. Эта программа командной строки, доступна в пакете Windows Automated Installation Kit 2.0 (Windows AIK).
Dism /image:c:\windowspe-x86\mount /Add-Driver /driver:c:\mydriver\video\myvideo.inf
Dism /image:c:\windowspe-x86\mount /Add-Driver /driver:c:\mydriver\net\vboxdrv.inf
Заканчиваем редактирование, переходим в каталог c:\windowspe-x86\. Выполняем запись и размонтирование исправленного образа:
Dism /Unmount-WIM /MountDir:c:\windowspe-x86\mount /Commit
Этими нехитрыми действиями получается простейший загрузочный диск Microsoft Windows PE с необходимыми нам драйверами без графического интерфейса.
Переходим к нашему серверу. Создаем в /srv/tftpboot/ папку boot и sources копируем из c:\windowspe-x86\ISO\boot файлы «bcd», «boot.sdi» и папку «fonts» в /srv/tftpboot/boot/. Из c:\windowspe-x86\ файл «winpe.wim» под именем «boot.wim» в /srv/tftpboot/sources/.
Из папки c:\windowspe-x86\ISO\ в корень tftp помещаем файл «bootmgr.exe», а файл «pxeboot.0» в /srv/tftpboot/sources/. Создаем папку /srv/tftpboot/win7, монтируем образ iso с Microsoft Windows 7 и копируем содержимое диска в win7/. Эту операцию (если нужно) повторяем для 64-х разрядной системы. Проверяем загрузку. В случае успеха вы увидите такую картину как на рис.11.
1.Проект WDSLINUX (http://syslinux.zytor.com/wiki/index.php/WDSLINUX )
2.Проект Syslinux (http://syslinux.zytor.com/wiki/index.php/The_Syslinux_Project )
3.Комплект конфигурационных файлов для графического меню (http://win.infin.ru/ftp/distrib/risserver/pxelinux.cfg.zip )
4.RIS for Linux (http://oss.netfarm.it/guides/pxe.php )
5.Язык программирования Python (http://www.python.ru )
6.Набор автоматической установки Windows® (AIK) для Windows® 7
(http://www.microsoft.com/downloads/details.aspx?familyid=696DD665-9F76-4... )
7.Набор драйверов сетевых карт (http://win.infin.ru/ftp/distrib/risserver/lan-drivers.zip )
8.Файл winnt.sif (http://win.infin.ru/ftp/distrib/risserver/winnt_sif.zip )
9.Описание параметров файла winnt.sif от Microsoft (http://unattended.msfn.org/unattended.xp/view/web/19/ )
10.Описание автоматической установки XP (http://unattendedxp.com/ )
11.Хорошее описание WAIK (http://www.windowsfaq.ru/content/view/624/90/ )
12.Скрипт выбора ОС (ftp://infin.ru/distrib/risserver/menu7.zip )
13.СУБД Oracle (http://ru.wikipedia.org/wiki/Oracle_ (СУБД))
14.Sybase Adaptive Server Anywhere (ASA) (http://www.sybase.ru )
15.Настройка DHCP (http://lantan.chat.ru/dhcpd.conf.5.html )
16.Проект Whireshark (http://www.wireshark.org/ )
Внимание! Все используемые в статье конфигурационные файлы можно скачать по этой ссылке
http://www.winpe.ru/content/universalnyy_server_setevoy_zagruzki_i_ustanovki_fayly