Что такое сетевая загрузка (PXE) и как ей можно пользоваться. Загрузочный сервер — как загрузочная флешка, только сервер и по сети Как сделать usb загрузочной для pxe

Загрузочная флешка с набором нужного софта - замечательный инструмент системного администратора. Казалось бы, что может быть лучше? А лучше может быть загрузочный сервер!

Представьте, вы выбрали в BIOS загрузку по сети и можете установить ОС/вылечить компьютер от вирусов/реанимировать диски/протестировать ОЗУ/etc с PXE Boot сервера, ведь это куда удобнее, нежели бегать с флешкой от машины к машине.
А в случае большого компьютерного парка, такой инструмент и вовсе незаменим.

О том как подготовить Windows к установке с PXE мы писали ранее.
Различие с данной инсталляцией составляет лишь то, что здесь мы можем установить и Windows 2008R2 и Windows 2012R2(впрочем и Windows 7/8 тоже, нужно только подготовить файлы дистрибутива и winpe соответствующим образом). После загрузки winpe мы монтируем папку /srv/tftp/images/ , где содержаться файлы для установки ОС от Microsoft:
ls -l /srv/tftp/images/ total 8 drwxr-xr-x 6 root root 4096 Фев 17 22:19 w2k12r2 drwxr-xr-x 7 tftp tftp 4096 Фев 17 19:05 w2k8r2
и запускаем нужный инсталятор.
Для автоматизации, через startnet.cmd, я набросал вот такое меню:

Теперь осталось разобраться с VMware.
Как вы заметили, конфиг для установки гипервизоров несколько отличается от остальных - именно тут нам и понадобится HTTP сервер.
В /var/www создадим папки vmw5.5, vmw5.0, а в папках сделаем симлинки на конфиг
# cd /var/www # mkdir vmw5.5 # cd vmw5.5/ # ln -s /srv/tftp/vmw/5.5/ks.cfg # mkdir ../vmw5.0 # cd ../vmw5.0/ # ln -s /srv/tftp/vmw/5.0/ks.cfg
О том как подготовить, например, Debian к установке с PXE написано , но я на этом останавливаться не стану.

Добавим способность загружать различные дисковые утилиты и тест памяти

Данный раздел будет содержать:
  1. Memtest86+
  2. Clonezilla-live
  3. SystemRescueCD

Конфиги разместились здесь

default
ui vesamenu.c32 PROMPT 0 menu background background.jpg menu title ServerClub PXE boot menu LABEL bootlocal menu label Boot from first HDD kernel chain.c32 append hd0 0 timeout 120000 TEXT HELP The system will boot after time is up. ENDTEXT LABEL Windows -> KERNEL vesamenu.c32 APPEND pxelinux.cfg/windows LABEL Linux -> KERNEL vesamenu.c32 APPEND pxelinux.cfg/linux LABEL FreeBSD -> KERNEL vesamenu.c32 APPEND pxelinux.cfg/bsd LABEL VMvare -> KERNEL vesamenu.c32 APPEND pxelinux.cfg/vmware LABEL HDD and RAM utils -> KERNEL vesamenu.c32 APPEND pxelinux.cfg/du
du
PROMPT 0 UI vesamenu.c32 MENU BACKGROUND background.jpg MENU TITLE HDD and RAM utils LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default LABEL Memtest86+ kernel memtest/memtest label Clonezilla-live MENU LABEL Clonezilla Live KERNEL clonezilla/vmlinuz APPEND initrd=clonezilla/initrd.img boot=live config noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_extra_param="" keyboard-layouts="" ocs_live_batch="no" locales="" vga=788 nosplash noprompt fetch=tftp://10.0.10.1/clonezilla/filesystem.squashfs label SystemRescueCD kernel SystemRescueCD/isolinux/rescue64 append initrd=SystemRescueCD/isolinux/initram.igz dodhcp nfsboot=10.0.10.1:/srv/tftp/SystemRescueCD LABEL MHDD kernel memdisk initrd mhdd/mhdd32ver4.6.iso append iso raw LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default


А я расскажу зачем мы ставили еще и NFS сервер.
Как видно из конфига загрузки SystemRescueCD, необходимые этому LiveCD файлы он подтягивает монтируя каталог по протоколу NFS. Сервер уже установлен, остается только отредактировать /etc/exports и перезапустить серверный демон.
# cat >> /etc/exports /srv/tftp/SystemRescueCD/ 10.0.10.1/255.255.255.0(ro,no_subtree_check,all_squash,insecure,anonuid=1000,anongid=1000) # service nfs-kernel-server restart
Предполагаю у вас возник резонный вопрос - «Что тут делает LiveCD, если для них есть отдельный пункт?»
SystemRescueCD содержит массу полезных программ для работы с диском(например таких как GParted и testdisk) и поэтому он доступен и здесь и в LiveCD.

LiveCD

В набор наших LiveCD войдут:
  1. Debian 7 LiveCD
  2. HirensBootCD
  3. Trinity Rescue Kit CD
  4. SystemRescueCD
  5. Plop Live

Конфиги

в конец default добавилось
LABEL LiveCDs -> KERNEL vesamenu.c32 APPEND pxelinux.cfg/livecds
livecds
PROMPT 0 UI vesamenu.c32 MENU BACKGROUND background.jpg MENU TITLE LiveCDs LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default LABEL Debian LiveCD KERNEL Debian7live/vmlinuz APPEND initrd=Debian7live/initrd boot=live fetch=tftp://10.0.10.1/Debian7live/filesystem.squashfs root=/dev/ram0 rw LABEL HirensBootCD MENU LABEL Hiren"s Boot CD KERNEL memdisk APPEND iso initrd=hirens/hirens.iso LABEL Trinity Rescue Kit CD kernel trk/kernel.trk append initrd=trk/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 splash=verbose pci=conf1 trkmenu timeout 100 trknfs=10.0.10.1:/srv/tftp/trk ip=dhcp LABEL SystemRescueCD kernel SystemRescueCD/isolinux/rescue64 append initrd=SystemRescueCD/isolinux/initram.igz dodhcp nfsboot=10.0.10.1:/srv/tftp/SystemRescueCD LABEL Plop Live KERNEL plop/bzImage APPEND initrd=plop/initramfs.gz vga=normal nfsmount=10.0.10.1:/srv/tftp/plop LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default

Для загрузки Trinity Rescue Kit CD и Plop Live в /etc/exports нужно добавить строки:
/srv/tftp/trk/ 10.0.10.1/255.255.255.0(ro,no_subtree_check,all_squash,insecure,anonuid=1000,anongid=1000) /srv/tftp/plop/ 10.0.10.1/255.255.255.0(ro,no_subtree_check,all_squash,insecure,anonuid=1000,anongid=1000)
и отправить команду рестарта NFS демону.


Несколько слов о выбраных LiveCD.
Debian 7 LiveCD
Этот CD - сборка одного из наших инженеров, включающая в себя следующее:

Логин / пароль: root / ServerClub

HirensBootCD
Едва ли нуждается в представлении, содержит множество полезных утилит.
Подробнее можно ознакомиться .
Грузится достаточно долго, не работает MiniXP и Linux. Остальные утилиты доступны для использования.

Trinity Rescue Kit CD
Со слов разработчиков, создан для восстановления ОС Windows.
Содержит утилиты для сброса паролей, антивирусы, программу для клонирования «компьютера» по сети(при чем на несколько компьютеров одновременно), а так же многое другое.
Подробнее .

SystemRescueCD
Основан на Gentoo, предназначен для восстановления Linux систем.
Включает в себя большое количество всевозможных программ для администрирования, со списком можно ознакомится по ссылке .

Plop Live
LiveCD с тремя полноценными DE на выбор, а так же необходимым админским софтом .

Итоговый конфигурационный файл основного меню, а так же файл меню антивирусов

default
ui vesamenu.c32 PROMPT 0 menu background background.jpg menu title ServerClub PXE boot menu LABEL bootlocal menu label Boot from first HDD kernel chain.c32 append hd0 0 timeout 120000 TEXT HELP The system will boot after time is up. ENDTEXT LABEL Windows -> KERNEL vesamenu.c32 APPEND pxelinux.cfg/windows LABEL Linux -> KERNEL vesamenu.c32 APPEND pxelinux.cfg/linux LABEL FreeBSD -> KERNEL vesamenu.c32 APPEND pxelinux.cfg/bsd LABEL VMvare -> KERNEL vesamenu.c32 APPEND pxelinux.cfg/vmware LABEL HDD and RAM utils -> KERNEL vesamenu.c32 APPEND pxelinux.cfg/du LABEL LiveCDs -> KERNEL vesamenu.c32 APPEND pxelinux.cfg/livecds LABEL Antiviruses -> KERNEL vesamenu.c32 APPEND pxelinux.cfg/av
av
PROMPT 0 UI vesamenu.c32 MENU BACKGROUND background.jpg MENU TITLE Antivirues LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default LABEL Kaspersky Antivirus KERNEL kav/rescue APPEND initrd=kav/rescue.igz root=live rootfstype=auto vga=791 init=/init kav_lang=ru udev liveimg doscsi nomodeset LABEL Kaspersky Antivirus (text mode) KERNEL kav/rescue APPEND initrd=kav/rescue.igz root=live rootfstype=auto vga=791 init=/init kav_lang=ru udev liveimg nox kavshell noresume doscsi nomodeset label AVG menu label AVG Rescue CD kernel avg/vmlinuz append max_loop=255 vga=791 initrd=avg/initrd.lzm init=linuxrc reboot=bios label AVG nofb menu label AVG Rescue CD with Disabled Framebuffer kernel avg/vmlinuz append max_loop=255 video=vesafb:off initrd=avg/initrd.lzm init=linuxrc reboot=bios label AVG vgask menu label AVG Rescue CD with Resolution Selection kernel avg/vmlinuz append max_loop=255 initrd=avg/initrd.lzm init=linuxrc vga=ask reboot=bios LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default

Заключение, оно же и сюрприз

На протяжении статьи я сознательно не давал объяснений где взять и как подготовить контент, потому как действия эти весьма тривиальны и только перегрузили бы текст.

В качестве сюрприза предлагаю вам два варианта нашей сборки, доступные по ссылкам ниже:

  1. Архив со всем контентом /srv/tftp (ссылка на торрент файл , прямая ссылка)
  2. Архив всей ОС (ссылка на торрент файл , прямая ссылка)
В первом случае необходимо самостоятельно подготовить сервер(в этом поможет глава «Начало» данного эпоса), разархивировать содержимое архива и внести корректировки сообразно реалиям вашей среды.

Второй случай подразумевает установку на голое железо или виртуальную машину.
Вкратце шаги по развертыванию сборки из полного архива ОС будут такими:
1. Загрузиться с Linux LiveCD.
2. Разметить диск и отформатировать разделы.
3. Примонтировать "/" раздел.
4. Распаковать архив.
5. Установить загрузчик.
6. Перезагрузиться.
7. Настроить ОС в соответствии вашей сети и начать пользоваться.
Логин / пароль: root / ServerClub.
ВАЖНО: Если в вашей сети есть работающий dhcp сервер, то перед запуском нашей сборки отключите в ней автостарт dhcp.

За сим заканчиваю, благодарю за внимание!

Для тех, у кого нет аккаунта на Хабре.
Если у вас возникнут вопросы/замечания, то пишите мне на почту - erserverclub.com.

У PXE есть одна очень полезная особенность, все что в нем настроено довольно трудно потерять т.к. все это хранится на сервере, а не на съемном носителе, которые имеют обыкновение теряться, вороваться, забываться в приводах DVD/дома, даваться попользоваться и «с концами», так что, вероятность что у вас возьмут попользоваться и «заиграют» стремится к нулю, ну разве что вместе с сервером… Подключив устройство имеющее возможность загрузки PXE, можно делать довольно много полезных вещей, а именно: производить диагностику оборудования, развертывать операционные системы, загрузить Live систему и т.п. на что хватит знаний и фантазии.
Для этого нам понадобится настроить DHCP сервер и TFTP сервер.
Ранее я уже писал о том как настроить сервер для , крайне рекомендую для ознакомления, основные моменты перекочевали из нее.
Что мы получим на выходе?!
А получим меню загрузки с возможностью выбора приложения которое мы будем загружать на клиентскую машину, а также действия, по умолчанию, которые будут произведены системой-если не поступит команд от пользователей.

Для работы нам понадобится:
1) Установленный Ubuntu server
2) Настроенный DHCP сервер, пример настройки можно взять в статье:
3) Диск или ISO-образ, установочного дистрибутива Ubuntu - разрядность значения не имеет, а вот версию лучше брать посвежее.

Все остальное мы установим по ходу дела… Я не буду останавливаться на настройках DHCP, предполагая что он у вас настроен, согласно статье, ссылка на которую представлена в требованиях к системе.

Установка tftp сервера
Установим необходимый пакет:
Поднимаем права до root:
sudo su

Установим необходимый пакет
aptitude install tftpd-hpa

Теперь все файлы которые относятся к нашему tfpt серверу, должны находиться в директории /var/lib/tftpboot/ , все пути указываются относительно нее.

Переходим к созданию меню загрузки
Первым делом, нам нужно добыть зам загрузчик, как это сделать?! Его можно найти на любом диске с ubuntu, в остальных дистрибутивах Linux, расположение почти всегда такое же. Нам потребуется установочный ISO образ или диск вставленный в привод DVD, в котором мы идем в следующею директорию:
Если установочный диск х86 архитектуры:
/install/netboot/ubuntu-installer/i386
Нас интересует файл pxelinux.0 это и есть загрузчик, забираем его и копируем в директорию:
/var/lib/tftpboot/
Тогда путь к нему выглядит:
/var/lib/tftpboot/pxelinux.0
Также, нам понадобится, само boot-меню, которое можно взять на том же диске, в директории boot-sccreens нас интересует файл с именем vesamenu.c32

Копируем его в туже директорию что и загрузчик чтобы путь выглядел:
/var/lib/tftpboot/vesamenu.c32

Настраиваем содержимое PXE меню

В качестве примера, мы сделаем меню загрузки, состоящее из 2х пунктов.
Пункт первый: Загрузка с локального жесткого диска. Этот пункт будет пунктом по умолчанию, если пользователь загрузил ПК по PXE и в течении 15 сек. не выполнил никаких действий, то система автоматически загрузится с локального диска.
Пункт второй: назовем его Testing Внутри данного меню будет находиться, пункт с возможностью загрузки Memtest x86+. Данная программа всегда будет полезна в диагностике проблем рабочих станций и серверов, в общем, вещь нужная, в хозяйстве пригодится всем…

Для начала, нам нужно создать директорию для конфигурационных файлов с именем pxelinux.cfg - имя критично для работы!
mkdir /var/lib/tftpboot/pxelinux.cfg

Теперь создадим конфигурационный файл с параметрами пунктов меню, с именем default
nano /var/lib/tftpboot/pxelinux.cfg/default

Со следующим содержимым:
default vesamenu.c32 prompt 0 menu title PXE Boot Menu MENU AUTOBOOT Starting Local System in # seconds label Boot from local drive menu label ^Boot from local drive menu default localboot 0 timeout 150 TOTALTIMEOUT 9000 LABEL Testing MENU LABEL ^Testing KERNEL vesamenu.c32 APPEND pxelinux.cfg/testing.menu

Наиболее наблюдательные, заметили что в предыдущем файле у нас появилась запись которая касается другого файла testing.menu , в нем у нас будут находиться параметры настройки пункта Testing
Создадим данный файл:

Со следующим содержимым:
MENU TITLE Testing LABEL Test software MENU LABEL ^Return to Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default label Memory Test menu label ^Memory Test: Memtest86+ v4.20 kernel memtest/mt86plus

Первый пункт меню, будет отвечать за возврат в предыдущее меню, а второй за загрузку Memtest86+ v4.20

Все ничего, но мы не создали директорию где хранится файл Memtest, это мы сейчас исправим, давайте создадим соответствующую директорию.
Сделаем это:
mkdir /var/lib/tftpboot/memtest
Нам осталось добавить исполняемый файл самого Memtest86+, его можно найти на установочном диске, в директории /install/ нас интересует файл mt86plus нам него необходимо скопировать в директорию memtest, чтобы путь к нему выглядел:
/var/lib/tftpboot/memtest/mt86plus

На этом мы закончили с tftp сервером, нам осталось немного допилить DHCP сервер.

Настриваем DHCP сервер

Этот пункт, настройкой можно назвать только с натяжкой, если вы настроили DHCP сервер по статье, то вам необходимо добавить только одну запись в:
nano /etc/dhcp/dhcpd.conf

Находим пункт с настройками пула IP адресов, который имеет вид:
subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.10 192.168.10.254; option domain-name-servers 192.168.10.1; option domain-name "example.org"; option routers 192.168.10.1; option broadcast-address 192.168.10.255; default-lease-time 604800; max-lease-time 604800; }

И в него добавляем запись указывающую на наш PXE загрузчик:
ping-check = 1; filename = "pxelinux.0";
Путь к файлу указан относительно директории /var/lib/tftpboot/ т.е. она считается корневой директорией, о чем я писал ранее…

Вся запись имеет вид:
ping-check = 1; filename = "pxelinux.0"; subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.10 192.168.10.254; option domain-name-servers 192.168.10.1; option domain-name "example.org"; option routers 192.168.10.1; option broadcast-address 192.168.10.255; default-lease-time 604800; max-lease-time 604800; }

Сохраняем изменения и перезагружаем DHCP сервер:
/etc/init.d/isc-dhcp-server restart

Теперь мы можем подключить к нашей локальной сети устройство которое поддерживает загрузку PXE и в котором эта функция включена(смотрите документацию к своему оборудованию) или подключить виртуальную машину, а адаптометром подключенным в режиме моста и без загрузочного носителя.

Если вы все сделали правильно, то меню будет иметь следующий вид:

А если зайти в меню Testing :


Если выбрать пункт с Memtest то запустится тест памяти.
Другие пункты меню добавляются соответствующим образом.

Представим ситуацию, что вам требуется предоставить доступ к одному из меню, ограниченному кругу лиц, например там у вас лежит дистрибутив, который стоит кучу денег. С этой целью на пункт меню можно установить пароль, как это сделать?!
Представим ситуацию, вам нужно установить пароль (например: password ) на Memory Test, делается это просто

Nano /var/lib/tftpboot/pxelinux.cfg/testing.menu

Нам необходимо добавить запись:
MENU PASSWD password

Тогда файл принимает вид:
MENU TITLE Testing LABEL Test software MENU LABEL ^Return to Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default label memtest MENU PASSWD password menu label ^Memory Test: Memtest86+ v4.20 kernel memtest/mt86plus

Защита конечно, так себе, но от обычных пользователей может помочь.

Тогда при попытке запуска выйдет окно:


если ввести правильный пароль, то запустится Memtest.
Таким способом можно скрывать целые меню или блокировать доступ к отдельным его пунктам.
В случае внесения изменения в эти конфигурационные файлы, DHCP сервер перезапускать нет необходимости, достаточно перезагрузить клиентский ПК если он загрузился по PXE.
По поводу скорости работы tftp, скорость работы не высока, и если вы решите перекачивать большие объемы информации, сторайтесь использовать для этого WEB или FTP сервер, готовьтесь затратить на это некоторое количество времени. Если есть необходимость загрузить какой-то дистрибутив, то лучше загрузить ОС небольшого размера, примером может служить Windows PE , ну или миниатюрный дистрибутив Linux.
На этом я пожалуй и закончу…

Что ж, пришло время продолжить загрузить по сети еще что-нибудь интересное и, самое главное, полезное. В мы рассмотрели запуск программ Acronis, установку Debian/Ubuntu Linux, загрузку маленьких ISO и запуск готовых WIM-образов.

Итак, планы на сегодня!

  1. Установка Windows в ручном и автоматическом режимах.
    1. Сборка WIM-образа.
    2. Подготовка файла ответов.
  2. Запуск ERD Commander (MSDaRT).
  3. Бонусом реализуем запуск установки Debian с дальнейшей установкой по SSH.

Начнем с Windows

WARNING

Все дальнейшие действия, связанные с подготовкой Windows, выполняются в среде Windows.

Первым делом необходимо подготовить среду WinPE, с которой и будем запускать установки различных систем семейства Windows. Для этого нам потребуется пакет Windows AIK, скачать который можно бесплатно с официального сайта Microsoft.


После установки пакета Windows AIK открываем консоль «Командная строка средств развертывания». Скопируем WIM-образ и загрузчик и смонтируем его в систему:

Copype.cmd amd64 c:\winpe mkdir c:\pe\win\boot imagex /mountrw winpe.wim 1 mount xcopy c:\winpe\mount\windows\boot\pxe\pxeboot.n12 c:\npe\win xcopy c:\winpe\mount\windows\boot\pxe\bootmgr.exe c:\pe\win xcopy c:\winpe\iso\boot\boot.sdi c:\pe\win\boot

Скрипт с меню WinPE запускается файлом startnet.cmd . Для корректного отображения кириллицы надо сменить кодировку этого файла на CP866. Следующим шагом нужно поправить по необходимости файл скрипта.

Добавляем параметры в меню PXE-сервера

Меню готово. Как видно из параметров в скрипте, на каждом этапе подключается некая сетевая папка. На PXE-сервере, установка и запуск которого были описаны в предыдущей статье, через Samba нужно опубликовать папку, которая будет доступна только для чтения (иначе установщик может стремиться что-нибудь туда запихнуть или перезаписать).

Далее для автоустановок надо подготовить файлы ответов. Забегая вперед, скажу, что благодаря этим самым файлам можно добиться абсолютно любого результата, например реализовать автоустановку с разбивкой первого диска 40/60% с подключением к домену, и дальше все необходимое программное обеспечение можно уже доставить групповыми политиками домена (но это уже совсем другая история).

Imagex.exe /unmount /commit mount

Полученный образ WinPE - winpe.wim копируем на PXE-сервер. Далее в меню загрузки PXE, созданного в , /var/lib/tftpboot/pxelinux.cfg/default подключаем дочерний файл, в котором будет раздел windows.

Label Install Windows menu passwd qwerty menu label Install/Boot Windows kernel boot/vesamenu.c32 append pxelinux.cfg/windows

Menu label WinPE Install Windows All menu passwd my_password com32 linux.c32 boot/wimboot APPEND initrdfile=/images/windows/bootmgr.exe,/images/windows/boot/BCD,/images/windows/boot/boot.sdi,/images/windows/boot/winpe.wim

Подготовка файла ответов

Начнем с Windows 7 Pro. Для подготовки файла ответов потребуется файл install.wim, который можно взять на установочном диске Windows 7 в папке source. Хватаем его, копируем в удобное доступное место. Далее запускаем Windows System Image Manager.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!

Обзор технологии PXE

Технология PXE (Pre Execution Environment — Среда предварительного исполнения), которая произносится как «Пикси» (Pixie - волшебная пыль), является подходом, который позволяет компьютеру (клиентскому компьютеру) загружаться, используя только свою сетевую карту. Этот метод загрузки был создан еще в 1999 году и если компьютер подключен к сети (и поддерживает этот стандарт), то можно обойти обычную процедуру загрузки (т. е. включение питания -> BIOS -> HD / CD) и сделать некоторые изящные вещи, начиная с поиска и устранения неисправностей, для чего обычно используется живая ОС liveOS, и даже снять образ машины …, но мы забегаем вперед - давайте вернемся к началу.

Когда используется подход PXE, процесс загрузки изменяется с обычного на следующий:

Включение питания -> BIOS -> стек PXE сетевой карты -> программа сетевой загрузки Network Boot Program (NBP), загружаемая с помощью TFTP с сервера в память клиентской машины -> ответственность за выполнение следующего шага возлагается на программу NBP (2-й этап загрузки).

Если использовать программу «PXElinux » NBP, то можно настроить сервер больше, чем просто для загрузки одной программы PXE для наших клиентов. В некотором смысле, это секретный ингредиент, который позволит нам выполнить все вышеперечисленное и даже больше. Для более подробного объяснения всего процесса, его истории и некоторые из имеющихся параметров настройки этой программы и программы gPXE (которая является более развитым клоном первой программы) смотрите эту лекцию на YouTube , предложенную разработчиками этих программ. Кроме того, ниже представлено видео, датированное 2008 годом, рассказывающее о настройке, что позволит быстро перейти к некоторым возможностям загрузки.

Примечание: В этом видео в качестве основы для сервера используется устаревший проект UDA, и аннотации были предназначены для того, чтобы объяснить, что в него были внесены самые новые (на тот момент) дополнения.

Цель

Это руководство будет первым из серии руководств, посвященных PXE. В настоящем руководстве мы заложим основы, на которые мы будет опираться в последующих статьях.

  • Клиентская машина, на которой вы тестируете, поддерживает загрузку PXE и вы знаете, как ее включить.
  • Это руководство было написано и протестировано с использованием Debian Squeeze, Ubuntu Server 9.10 и Linux Mint10. Поэтому предполагается, что у вас также есть система на основе Debian.
  • У вас есть возможность посмотреть статью «Как настроит программный RAID» для «Простого файл-сервера» и «Как настроить всю сеть (802.3ad)» , поскольку скорость работы диска и пропускная способность для этого варианта сервера должны быть очень высокими. Настоятельно рекомендуется собирать такую сеть с использованием сервера с высокоотказоустойчивыми сетевыми и дисковыми подсистемами.
  • Вы увидите, что в качестве редактора мы используем VIM, это только потому, что я привык к нему... Вы можете пользоваться любым другим редактором, который вам нравится.

Установка — трудное начало с использованием системы FOG

Использование FOG в качестве основы для вашего сервера PXE является хорошим способом иметь в наличии все необходимые составляющие, например, TFTP и, если требуется, DHCP без необходимости устанавливать и настраивать их вручную, при одновременном предоставлении вам в качестве бонуса всех функций пакета FOG.

Поскольку наша цель состоит в том, чтобы добавить новые функции к этой уже большой системе, мы не будем вдаваться в детали того, как пользоваться самим пакетом FOG и не будем рассматривать процедуру его установки. Вики пакета FOG , причем как текст, так и видео how-tos , является достаточным для получения подробной информации в том случае, если вы хотите разобраться детально. В общем, шаги следующие:

Это все, что нужно сделать во время установки пакета FOG. Опять же, поскольку FOG представляет собой большую систему, ее использование не входит в круг рассмотрения данного руководства, и для того, чтобы вы могли лучше разобраться с возможностями системы FOG и с тем, как она может помочь вам управлять жизненным циклом ваших компьютеров-клиентов, мы призываем вас обратиться к вики-страницам с описанием этой системы.

Если все пройдет так, как надо, у вас должна быть возможность выполнить загрузку вашей клиентской машине в режиме PXE (обычно с помощью F12) и получить меню-приглашение, используемое в системе FOG по умолчанию.


Изображение получено с помощью Hotfortech.

Чтобы сразу почувствовать вкус возможностей, вы можете выбрать вариант «Run Memtest86+» (выполнить тест Memtest86 +) и получить приглашение программы Memtest, которую мы рассматриваем в нашей статье «Диагностика аппаратных проблем ПК с помощью Ubuntu Live CD» .

Файлы и каталоги

Как отмечалось ранее, наша цель заключается в расширении возможности системы FOG и с этой целью мы должны добавить некоторые файлы и каталоги.

Создайте следующие подкаталоги:

Sudo mkdir -p /tftpboot/howtogeek/menus sudo mkdir -p /tftpboot/howtogeek/linux sudo mkdir -p /tftpboot/howtogeek/pics sudo mkdir -p /tftpboot/howtogeek/utils

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

Настройте конфигурационный файл default, используемый по умолчанию

Мы создадим новое главное меню и поместим в свое собственное подменю все функции системы FOG.

Скопируйте конфигурационный файл /tftpboot/pxelinux.cfg/default в howtogeek/menus/fog.cfg.

Sudo cp /tftpboot/pxelinux.cfg/default /tftpboot/howtogeek/menus/fog.cfg

Теперь отредактируйте содержимое исходного файла default, используемого по умолчанию:

Sudo vim /tftpboot/pxelinux.cfg/default

Сделайте так, чтобы его содержимое выглядело следующим образом:

DEFAULT vesamenu.c32 MENU TITLE FOG 0.32 + HowToGeek"s enhancements MENU INCLUDE /pxelinux.cfg/master.cfg menu color title 1;36;44 #ff8c00 #00000000 std LABEL FOG MENU LABEL Manual FOG MENU DEFAULT KERNEL vesamenu.c32 APPEND howtogeek/menus/fog.cfg LABEL Utils MENULABEL Utilities KERNEL vesamenu.c32 APPEND howtogeek/menus/utils.cfg LABEL Linux MENU LABEL Linux stuff KERNEL vesamenu.c32 APPEND howtogeek/menus/linux.cfg LABEL fog.local localboot 0 MENU LABEL Boot from hard disk TEXT HELP Boot from the local hard drive. If you are unsure, select this option. ENDTEXT PROMPT 0 TIMEOUT 300 ONTIMEOUT fog.local

Когда мы закончим, эта конфигурация позволит вам получить следующие 3 подменю: Utilities (Утилиты), Manual FOGing (Ручное управление системой FOG), Linux stuff (Linux).

Создайте мастер-файл

Мастер-файл позволит делать глобальные изменения во внешнем виде меню без повторного ввода их в отдельном порядке снова и снова. Такие особенности, как фоновый рисунок, используемый по умолчанию, стили границ, позиции и т.д., все это будет объединено в этом файле master.cfg.

Создайте файл:

Sudo vim /tftpboot/pxelinux.cfg/master.cfg

Сделайте так, чтобы его содержание было следующим:

MENU BACKGROUND fog/genie.png menu color screen 37;40 #80ffffff #00000000 std menu color border 30;44 #9370db #00000000 std menu color title 1;36;44 #ff8c00 #00000000 std menu color unsel 37;44 #ffffffff #00000000 std menu color hotkey 1;37;44 #ffffffff #00000000 std menu color sel 7;37;40 #4eee94 #9370db all menu color hotsel 1;7;37;40 #e0400000 #20ff8000 all menu color disabled 1;30;44 #60cccccc #00000000 std menu color scrollbar 30;44 #40000000 #00000000 std menu color tabmsg 31;40 #90ffff00 #00000000 std menu color cmdmark 1;36;40 #c000ffff #00000000 std menu color cmdline 37;40 #c0ffffff #00000000 std menu color pwdborder 30;47 #80ffffff #20ffffff std menu color pwdheader 31;47 #80ff8080 #20ffffff std menu color pwdentry 30;47 #80ffffff #20ffffff std menu color timeout_msg 37;40 #80ffffff #00000000 std menu color timeout 1;37;40 #c0ffffff #00000000 std menu color help 37;40 #c0ffffff #00000000 std menu color msg07 37;40 #90ffffff #00000000 std MENU MARGIN 0 MENU PASSWORDMARGIN 3 MENU ROWS 15 MENU TABMSGROW 21 MENU CMDLINEROW 20 MENU PASSWORDROW 11 MENU TIMEOUTROW 20 MENU HSHIFT 0 MENU VSHIFT 0

В конфигурации, приведенной выше, будут созданы фиолетовые границы и выделение текста;, если вы хотите, чтобы внешний вид был другой, просто измените значения.

Чтобы задать фоновый рисунок, поместите картину в каталог /tftproot и укажите для MENU BACKGROUND относительный путь к рисунку (мы рекомендуем использовать изображения с разрешением 640*480). Например полный путь к рисунку, сконфигурированному выше, будет /tftproot/fog/bg.png .

Подключите подменю FOG к основному меню

Т.к. мы сделали простую копию оригинального конфигурационного файла в подкаталог меню (сохранив цветовую схему, тайм-ауты и прочее), то если вы теперь перейдете в это подменю из загруженного клиента PXE, оно будет работать, но вы не сможете вернуться в главное меню без перезагрузки машины.

Поэтому отредактируйте файл /tftpboot/howtogeek/menus/fog.cfg :

Sudo vim /tftpboot/howtogeek/menus/fog.cfg

Добавьте следующую запись после записи «menu color title» и перед функциями FOG:

LABEL back MENU LABEL .. KERNEL vesamenu.c32 APPEND pxelinux.cfg/default

Создайте заготовки для подменю

Мы создали 4 подменю, три из которых будут нами заполнены. Для этого давайте создадим шаблон, которым мы будем пользоваться в дальнейшем.

Создайте файл шаблона:

Sudo vim /tftpboot/howtogeek/menus/template.cfg

Его содержимое должно быть следующим:

MENU INCLUDE /pxelinux.cfg/master.cfg #MENU BACKGROUND howtogeek/pics/fog-sub.jpgLABEL back MENU LABEL .. KERNEL vesamenu.c32 APPEND pxelinux.cfg/default

Давайте зададим заготовки для дополнительных подменю, которые нам потребуются в следующих статьях:

Cd /tftpboot/howtogeek/menus/ sudo cp template.cfg ./utils.cfg sudo cp template.cfg ./linux.cfg

Вот и все, базовая компоновка теперь готова и теперь нам нужно будет ей пользоваться, что мы будем делать в следующих статьях. Поскольку эти статьи еще не опубликованы, мы рекомендуем ознакомиться с системой FOG, т.к. эта система сама по себе исключительно интересная.

Продолжая серию статей по развёртыванию Windows, сегодня мы займёмся подготовкой сервера сетевой загрузки на базе ОС Linux и организацией загрузки Windows PE с такого сервера, а так же подготовим установочный дистрибутив Windows 7 или Windows Server 2008 R2 для установки с сетевого ресурса. В этой инструкции я приведу пример для Debian Linux 8.

Для работы нам понадобится образ Windows PE и установочный дистрибутив системы Windows.

  • Создание собственного образа дистрибутива Windows 7 или Windows Server 2008 R2
  • Настройка Linux PXE сервера сетевой установки Windows 7 или Windows Server 2008 R2

Подготовка загрузочных файлов Windows для PXE

Для загрузки системы Windows с PXE сервера нам понадобятся следующие файлы:
  • winpe/boot/fonts/wgl4_boot.ttf - из поставки Windows
  • winpe/boot/bcd - хранилище конфигурации (необходимо сгенерировать)
  • winpe/boot/boot.sdi - из поставки Windows
  • winpe/boot/winpe.wim - образ Windows PE (инструкция по сборке)
  • winpe/pxeboot.0 - pxeboot.n12 из поставки Windows
  • winpe/bootmgr.exe - из поставки Windows
Создадим папку, в которую будем собирать загружаемую по PXE систему:
Скопируем шрифт, который использует bootfix.bin и файл boot.sdi, который необходим для создания виртуального диска в памяти:
xcopy c:\WinPE\x86\ISO\boot\fonts\wgl4_boot.ttf c:\tftpboot\winpe\boot\fonts\wgl4_boot.ttf
xcopy c:\WinPE\x86\ISO\boot\boot.sdi c:\tftpboot\winpe\boot\boot.sdi
Теперь нам понадобится загрузчик, который загрузит менеджер загрузки и хранилище конфигурации. Они есть в загрузочном образе Windows PE. Для этого подключим образ Windows PE:
dism /mount-wim /wimfile:C:\WinPE\x86\winpe.wim /index:1 /mountdir:C:\WinPE\x86\mount
И скопируем от туда файл pxeboot.n12, переименовав его в pxeboot.0 и bootmgr.exe:
xcopy c:\WinPE\x86\mount\Windows\Boot\PXE\pxeboot.n12 c:\tftpboot\winpe\pxeboot.0
xcopy c:\WinPE\x86\mount\Windows\Boot\PXE\bootmgr.exe c:\tftpboot\winpe\bootmgr.exe
Необходимые файлы за исключением конфигурации загрузки и образа системы у нас есть, поэтому образ Windows PE можно отключить без сохранения изменений:
dism /unmount-wim /mountdir:C:\WinPE\x86\mount /discard
Копируем образ системы Windows PE в папку загрузки:
xcopy C:\WinPE\x86\winpe.wim c:\tftpboot\winpe\boot\
Теперь самое время сгенерировать конфигурацию загрузки, для этого создадим файл makebcd.cmd:
notepad c:\tftpboot\makebcd.cmd
Со следующим содержимым:
bcdedit -createstore %1\BCD
bcdedit -store %1\BCD -create {ramdiskoptions} /d "Ramdisk options"
bcdedit -store %1\BCD -set {ramdiskoptions} ramdisksdidevice boot
bcdedit -store %1\BCD -set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
for /F "tokens=2 delims={}" %%i in ("bcdedit -store %1\BCD -create /d "Windows PE Boot Image" /application osloader") do set guid={%%i}
bcdedit -store %1\BCD -set %guid% systemroot \Windows
bcdedit -store %1\BCD -set %guid% detecthal Yes
bcdedit -store %1\BCD -set %guid% winpe Yes
bcdedit -store %1\BCD -set %guid% osdevice ramdisk=\Boot\winpe.wim,{ramdiskoptions}
bcdedit -store %1\BCD -set %guid% device ramdisk=\Boot\winpe.wim,{ramdiskoptions}
bcdedit -store %1\BCD -create {bootmgr} /d "Windows BootManager"
bcdedit -store %1\BCD -set {bootmgr} timeout 30
bcdedit -store %1\BCD -set {bootmgr} displayorder %guid%
move %1\BCD %1\bcd
И запустим его на исполнение, передав ему в качестве аргумента расположение и имя файла хранилища конфигурации:
c:\tftpboot\makebcd.cmd c:\tftpboot\winpe\boot
На этом подготовка необходимых файлов для загрузки с PXE в среде Windows окончена, и мы приступаем к настройке Linux-сервера.

Установка PXE-сервера

Установка TFTP

Установка необходимых пакетов:
# aptitude install tftpd-hpa syslinux pxelinux -y
Настраиваем TFTP-сервер:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure -m /etc/default/tftp-remap.conf -v"
RUN_DAEMON="yes"
Т.к. Windows будет искать свои файлы загрузки относительно корня tftp, делаем маппинг и ассоциируем эти файлы с каталогом winpe на сервере.

Создаём файл маппинга:

# vim /etc/default/tftp-remap.conf
Со слеюующим содержимым:
r pxeboot.0 /pxeboot.0
r bootmgr.exe /winpe/bootmgr.exe
r \\Boot\\BCD /winpe/boot/bcd
r \\boot\\boot.sdi /winpe/boot/boot.sdi
r \\Boot\\winpe.wim /winpe/boot/winpe.wim
r \\Boot\\Fonts\\wgl4_boot.ttf /winpe/boot/fonts/wgl4_boot.ttf
gr \\ /
Последняя строка "gr \\ /" говорит tftp, если в путях указывются обратные слэши, менять их на прямые.
Внимание! Важно, чтобы регистре букв в именах файлов был точно таким же, как вы указывайтей в файлах. Если вы в на этапе создания конфигурации указали /boot/bcd, а файл назвали /Boot/BCD, загрузчик не сможет загрузить систему, т.к. не найдёт нужного файла.

Создаём наш каталог загрузки:

Теперь необходим скопировать в него файлы, из каталога c:\tftpboot\:
c:\tftpboot\winpe\> pscp -r * [email protected]:/srv/tftpboot/winpe

Создаём меню загрузки

Для того, чтобы меню загрузки работало, нам понадобятся следующие файлы, копируем их в корневой каталог нашего tftp-сервера:
# cp /usr/lib/PXELINUX/pxelinux.0 /srv/tftpboot
# cp /usr/lib/syslinux/modules/bios/chain.c32 /srv/tftpboot
# cp /usr/lib/syslinux/modules/bios/ldlinux.c32 /srv/tftpboot
# cp /usr/lib/syslinux/modules/bios/libcom32.c32 /srv/tftpboot
# cp /usr/lib/syslinux/modules/bios/libutil.c32 /srv/tftpboot
# cp /usr/lib/syslinux/modules/bios/vesamenu.c32 /srv/tftpboot
И создаём каталог, где будет хранится само меню загрузки:
# mkdir -p /srv/tftpboot/pxelinux.cfg
Ещё нам понадобится красивая загрузочная картинка для нашего меню. Она должна быть в формате jpg и разрешением 640x480. Копируем её с нашей машины:
C:\Users\golovlevmv\> pscp Pictures\menu.jpg [email protected]:/srv/tftpboot/pxelinux.cfg/menu.jpg
Теперь самое время создать меню загрузки:
Со следущим содержимым:
PROMPT 0
UI vesamenu.c32
MENU TITLE PXE Server Boot Menu
MENU BACKGROUND pxelinux.cfg/menu.jpg
TIMEOUT 600

LABEL ^0) Boot from hard disk
TEXT HELP
Boot from first (hdd 0)
ENDTEXT
COM32 chain.c32
APPEND hd0 1

LABEL ^1) Load Windows PE 3.1 x86
TEXT HELP
Boot Windows PE x86 from pxeboot
ENDTEXT
kernel winpe/pxeboot.0

Перезапускаем tftpd:
# /etc/init.d/tftpd-hpa restart

Альтернативный вариант загрузки с PXE

Так же можно организовать ещё один вариант загрузки системы с PXE, используя memdisk, но он потребует уже значительно большего объёма памяти и у вас могут возникнуть проблемы с компьютерами с объёмом памяти менее 1Гб.

Tftp сервер должен быть уже подготовлен, по инструкции выше.

Нам понадобится memdisk, копируем его из состава пакета syslinux:

# cp /usr/lib/syslinux/memdisk /srv/tftpboot
Копируем ISO-образ Windows PE:
C:\WinPE\x86\> pscp WinPE_x86.iso [email protected]:/srv/tftpboot/winpe/winpe_x86.iso
Добавляем в наше загрузочное меню ещё один пункт:
# vim /srv/tftpboot/pxelinux.cfg/default
LABEL ^2) Load Windows PE 3.1 x86 (iso)
TEXT HELP
Boot Windows PE x86 from iso image
need more 512MB RAM to correct work
ENDTEXT
KERNEL memdisk
APPEND iso raw
INITRD winpe/winpe_x86.iso

Настройка DHCP

Для того, чтобы наши клиенты могли загружаться по сети, необходимо наличие DHCP-сервера, а он в свою очередь должен выдавать клиентам адрес свервеа сетевой загрузки и имя файла, которое необходимо загружать.
Вы можете использовать любой уже имеющийся DHCP-сервер, ему необходимо передать следующие параметры:
  • filename = "pxelinux.0";
  • next-server ;
В случае отсутствия у вас DHCP-сервера, я так же приведу пример его установки и настройки на нашем PXE-серере.

Устанавливаем DHCP сервер:

# aptitude install isc-dhcp-server -y
Включаем DHCP на нужном нам сетевом интерфейсе:
# vim /etc/default/isc-dhcp-server
Приводим dhcpd.conf к нужному нам виду:
ddns-update-style none;
option domain-name "home.local";
option domain-name-servers 192.168.140.10;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
subnet 192.168.140.0 netmask 255.255.255.0 {
range 192.168.140.51 192.168.140.254;
option routers 192.168.140.10;
option domain-name "home.local";
filename = "pxelinux.0";
next-server 192.168.140.10;
}
Запускаем isc-dhcp-server:
# /etc/init.d/isc-dhcp-server start
Теперь у нас должно загружаться окружение Windows PE. Через него мы можем скопировать данные из аварийной системы и установить чистую систему на машину.

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

Если всё получилось, то основная и самая сложная часть работы сделана. Теперь подготовим дистрибутив для установки системы по сети.

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

Далее для сетевой установки можно использовать уже существующий файловый сервер на базе Windows или SAMBA. Но, посколько я решил организовать хранение установочных дистрибутивов системы на этом же сервер, то кратко покажу, как организовать такой SAMBA-сервер на нашем серере PXE.

Устанавливаем SAMBA

Тут всё достаточно просто. Я приведу минимальный конфиг smb.conf, без подключения сервера к домену и задания пользовательских учётных записей. Это будет просто сервер с гостевым доступом на чтение.

Правим конфигурацию samba:


workgroup = WORKGROUP
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
server role = standalone server
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
map to guest = bad user
acl allow execute always = true


comment = Windows 7
path = /srv/dist/win7x86
guest ok = yes
browseable = yes
create mask = 0644
directory mask = 0755
acl allow execute always = true

Не забудьте указать "acl allow execute always = true". Этот параметр необходимо указать для того, чтобы можно было запускать на исполнение exe-файлы, иначе запустить setup.exe у вас не получится.

Возьмём установочный дистрибутив Windows 7 SP1 x86 необходимой редакции, и скопируем все файлы на наш сервер в папку с дистрибутивами:

C:\Users\golovlevmv\> pscp -r E:\ [email protected]:/srv/dist/win7x86/
Перезапустим samba
Попробуем обратиться к нашему сетевому ресурсу по имени или ip адресу "\\pxeboot\" или "\\192.168.140.10\".

Теперь для того, чтобы у нас с нашего сервера устанавливалась наша система, то берём файл install.wim, который мы создавали при сборке собственного дистрибутива Windows , и заменяем им дистрибутивный файл.

C:\Users\golovlevmv\> pscp C:\Win7\x86\dist\sources\install.wim [email protected]:/srv/dist/win7x86/sources/
А вот файл /srv/dist/win7x86/sources/boot.wim можно удалить, т.к. загрузку мы уже к тому времени уже произвели с помощью Windows PE.

Запуск установки системы Windows 7 x86

Для того, чтобы запустить установку, необходимо подключить сетевой ресурс:
net use * \\192.168.140.10\win7x86
Подключится сетевой диск "Z:", и выполнить команду:
Далее, для того, чтобы автоматизировать установку системы, можно с помощью "диспетчера образов системы Windows" подготовить файл ответов autounattend.xml, и запускать установку с файлом ответов:
Z:\setup.exe /unattend:autounattend.xml
В такойм случае, для того, чтобы разворачивать системы Windows на большом количестве ПК, вам будет нужно лишь загрузиться с PXE, подключить сетевой ресурс, и запустить установку с указанием файла ответов.