http://itfap.ru/read/Kak_obojtisq_bez_WDS_servera_pri_ustanovke_Windows_iz_WIM_obrazov_po_seti
Введение
Образы в WIM формате, подготовленные в системе MDT, компания Microsoft предлагает развертывать по сети с помощью WDS-сервера, либо интегрировать в SCCM.
SCCM стоит довольно дорого, а вот WDS-сервер бесплатен в случае, если вы являетесь счастливым обладателем лицензии на Windows Server 2008/2012. Но не всех устраивают возможности WDS-сервера.
Предлагаемый мной способ будет полезен тем:
- у кого нет лицензии на Windows Server, или все ресурсы на имеющихся серверах уже задействованы и нет возможности приобрести еще одну лицензию;
- кого не устраивает скорость загрузки Windows PE по протоколу TFTP, используемому WDS-сервером;
- кому необходимо совместить развертывание ОС Windows и Linux по сети на одном сервере.
Хочу предложить читателям решение на базе ОС Ubuntu Linux, с использованием syslinux и iPXE.
В дальнейшем будет подразумеваться использование ОС Ubuntu 14.04 LTS.
Упомянутые ниже службы не обязательно должны работать на одном и том же сервере.
Установка и настройка tftp-сервера
Для организации передачи данных по TFTP-протоколу будет использован сервер tftpd-hpa. Он обладает необходимыми возможностями, а также поддерживает remapping.
Установим соответсвующий пакет:
aptitude install tftpd-hpa
Настройки находятся в конфигурационном файле
/etc/default/tftpd-hpaRUN_DAEMON="yes"
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --listen --verbose --verbosity 10 --map-file /etc/tftpd.remap --refuse blksize"
Также нам потребуется файл с правилами для remapping
/etc/tftpd.remaprg \\ /
ri (.*)ÿ$ \1
ri (.*)M-\^\?$ \1
ri (pxelinux\.0).*$ \1
Первая строка переопределяет слэши для ОС Windows, последующие предупреждают возможные проблемы с загрузкой на некоторых сетевых адаптерах, когда клиент пытается запросить у tftp-сервера файл «pxelinux.0M-^» или «pxelinux.0ÿ» вместо «pxelinux.0».
Настройка http-сервера
Для чего вообще нам нужен http-сервер, ведь для загрузки WIM-образов по сети достаточно tftp-сервера?
Так получилось, что Trivial FTP хоть и обеспечивает базовые функции для передачи файлов по сети, но не может обеспечить высокую надежность и скорость передачи данных.
Как показывает практика, образы с Windows PE размером около 250МБ, скачиваются по сети 1Гбит с использованием http-протокола в несколько раз быстрее (5-10 секунд, против 30-60 секунд соответственно).
Также по протоколу http можно загружать preseed-файлы для установщика debian-installer.
В качестве http-сервера можно использовать apache, nginx или любой другой сервер который вам нравится. Каких-либо особенных настроек не требуется. Главное, чтоб перечисленные ниже файлы *.ipxe, *.wim и другие файлы, размещенные на http-сервере, были доступны для чтения.
Настройка dhcp-сервера
Согласно RFC1232 необходимо настроить опцию 66 TFTP server name, где указать IP-адрес вашего tftp-сервера, например 192.168.1.1; и опцию 67 Bootfile name, где указать имя файла для загрузки «pxelinux.0»;
Если вы используете, например isc-dhcp-server под управлением Ubuntu, то нужно будет добавить примерно такие настройки в файл
/etc/dhcp/dhcpd.conf
shared-network PXE-Netwotk {
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.2 192.168.1.254;
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.1;
filename "pxelinux.0";
next-server 192.168.1.1;
option root-path "192.168.1.1:/var/lib/tftpboot/";
}
}
Установка и настройка загрузчика syslinux
Установка загрузчика
Нам потребуется syslinux версии 5.03 или выше.
Я бы рекомендовал собрать загрузчик из исходных кодов, ничего страшного и сложного в этом нетДля сборки из исходников нужно установить make, gcc, nasm, uuid-dev, и выполнить команды:
wget https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.zip
unzip syslinux-6.03.zip -d syslinux-6.03
cd syslinux-6.03
make
cd ..
cp syslinux-6.03/bios/memdisk/memdisk /var/lib/tftpboot/
find ./syslinux-6.03/bios/ -name "pxelinux.0"|xargs -I {} cp '{}' /var/lib/tftpboot/
find ./syslinux-6.03/bios/ -name "*.c32"|xargs -I {} cp '{}' /var/lib/tftpboot/
Настройка меню загрузчика
Создадим каталог для файлов меню syslinux:
mkdir -p /var/lib/tftpboot/pxelinux.cfg/
И создадим файл с меню по умолчанию
/var/lib/tftpboot/pxelinux.cfg/defaultui vesamenu.c32
PROMPT 0
menu background background.jpg
menu title PXE boot menu
LABEL bootlocal
menu label Boot from first HDD
kernel chain.c32
append hd0 0
timeout 120
TEXT HELP
The system will boot after the time is up
ENDTEXT
LABEL Central Office ->
KERNEL vesamenu.c32
APPEND pxelinux.cfg/CentralOffice
LABEL Regional Offices ->
KERNEL vesamenu.c32
APPEND pxelinux.cfg/RegionalOffices
А теперь создадим подменю непосредственно для загрузки ОС:
/var/lib/tftpboot/pxelinux.cfg/CentralOfficePROMPT 0
UI vesamenu.c32
MENU BACKGROUND background.jpg
MENU TITLE Central Office
# Возврат в главное меню
LABEL <- Main Menu
KERNEL vesamenu.c32
APPEND pxelinux.cfg/default
# Загрузка через http
LABEL PE via http
KERNEL ipxe.lkrn
APPEND dhcp && chain http://192.168.2.1/winpe.ipxe
# Для сравнения загрузка через tftp
LABEL PE via tftp
KERNEL ipxe.lkrn
APPEND dhcp && chain tftp://192.168.2.1/winpe.ipxe
# Можно также загрузить debian-installer
LABEL Ubuntu
KERNEL ubuntu-installer/i386/linux
APPEND initrd=ubuntu-installer/i386/initrd.gz preseed/url=http://192.168.1.1/preseed/custom.seed debconf/priority=high auto-install/enable=true debian-installer/language=ru debian-installer/locale=ru_RU.UTF-8 debian-installer/country=RU ipv6.disable=1 netcfg/hostname=testname DEBCONF_DEBUG=5 --
, где winpe.ipxe — конфигурационный файл с настройками для ipxe, который мы разберем ниже, в соответствующем разделе.
Не стоит забывать, что tftp не умеет работать с символическими ссылками, поэтому нужно будет сделать отдельную копию файла winpe.ipxe в каталоге tftp-сервера, если захочется сравнить скорость загрузки по http и tftp.
Некоторые сетевые карты не успевают поднять link с первого раза, поэтому можно сделать вторую попытку загрузки в случае неудачи, с использованием оператора “||”. Если после второй попытки нас снова постигнет неудача, то можно вывести статистику интерфейса и открыть командную строку для диагностики проблемы:
APPEND dhcp && chain http://192.168.2.1/winpe.ipxe || dhcp && chain http://192.168.2.1/winpe.ipxe || ifstat && shell
iPXE
Установка iPXE
iPXE я тоже предлагаю собирать из исходных кодов, к тому же это тоже очень просто:
git clone git:
cd ipxe/src
make
cp bin/ipxe.lkrn /var/lib/tftpboot
Если какая-либо сетевая карта отказывается поднимать link с любой попытки, то скорее всего проблема в драйвере iPXE.
Особенно эта проблема касается новых сетевых карт от Intel. У меня возникли проблемы с картами i218lm и с i218v-2, при принудительно выставленной скорости 1Гбит на свиче.
Перед сборкой нужно поправить ipxe/src/drivers/net/intel.c: для i218lm и i218v-2 выставить флаг INTEL_NO_PHY_RST:
PCI_ROM ( 0x8086, 0x155a, "i218lm", "I218-LM", INTEL_NO_PHY_RST),
PCI_ROM ( 0x8086, 0x15a1, "i218v-2", "I218-V", INTEL_NO_PHY_RST ),
Установка wimboot
Для загрузки WIM-образов через iPXE потребуется утилита wimboot.
Установка этой утилиты также очень проста:
wget http://git.ipxe.org/releases/wimboot/wimboot-latest.zip
unzip wimboot-latest.zip
cp wimboot-2.5.1-signed/wimboot /var/lib/tftpboot/
Создание конфигурационных файлов .ipxe
Конфигурационные файлы .ipxe (расширение может быть любым, но так удобнее) содержат инструкции для ядра ipxe: что именно загружать дальше.
Мы будем загружать утилиту wimboot, и передадим ей в параметрах пути к файлу данных конфигурации загрузки BCD, файлу конфигурации RAM-диска boot.sdi и к образу boot.wim. Структуру каталогов сохранять не обязательно, wimboot сама позаботиться об этом. Все файлы можно сложить в один каталог.
winpe.ipxe
kernel http://192.168.1.1/boot/wimboot
initrd http://192.168.1.1/boot/DeploymentShare/Boot/x86/Boot/bcd BCD
initrd http://192.168.1.1/boot/DeploymentShare/Boot/x86/Boot/boot.sdi boot.sdi
initrd http://192.168.1.1/boot/DeploymentShare/Boot/LiteTouchPE_x86.wim boot.wim
boot
В данном примере на http-сервере сделана символическая ссылка для 192.168.1.1/boot/DeploymentShare прямо на корень MDT DeploymentShare. Этот способ не подходит в качестве основного рабочего варианта. Т.к. если Вы вдруг соберете «кривой» wim-образ, то сразу же испортите загрузку по сети для тех, кто с этим работает. Но этот способ хорошо подходит для тестирования новых wim-образов.
Желающие могут заменить в .ipxe файле протокол http на tftp — тоже будет работать, но медленно.
Все. Теперь можно загружаться и ставить ОС. 🙂
Поделиться:
943 просмотров
Апр 5 2017
Как обойтись без WDS сервера, при установке Windows из WIM образов по сети
http://itfap.ru/read/Kak_obojtisq_bez_WDS_servera_pri_ustanovke_Windows_iz_WIM_obrazov_po_seti
Введение
Образы в WIM формате, подготовленные в системе MDT, компания Microsoft предлагает развертывать по сети с помощью WDS-сервера, либо интегрировать в SCCM.
SCCM стоит довольно дорого, а вот WDS-сервер бесплатен в случае, если вы являетесь счастливым обладателем лицензии на Windows Server 2008/2012. Но не всех устраивают возможности WDS-сервера.
Предлагаемый мной способ будет полезен тем:
Хочу предложить читателям решение на базе ОС Ubuntu Linux, с использованием syslinux и iPXE.
В дальнейшем будет подразумеваться использование ОС Ubuntu 14.04 LTS.
Упомянутые ниже службы не обязательно должны работать на одном и том же сервере.
Установка и настройка tftp-сервера
Для организации передачи данных по TFTP-протоколу будет использован сервер tftpd-hpa. Он обладает необходимыми возможностями, а также поддерживает remapping.
Установим соответсвующий пакет:
Настройки находятся в конфигурационном файле
RUN_DAEMON="yes" TFTP_USERNAME="tftp" TFTP_DIRECTORY="/var/lib/tftpboot" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure --listen --verbose --verbosity 10 --map-file /etc/tftpd.remap --refuse blksize"
Также нам потребуется файл с правилами для remapping
rg \\ / ri (.*)ÿ$ \1 ri (.*)M-\^\?$ \1 ri (pxelinux\.0).*$ \1
Первая строка переопределяет слэши для ОС Windows, последующие предупреждают возможные проблемы с загрузкой на некоторых сетевых адаптерах, когда клиент пытается запросить у tftp-сервера файл «pxelinux.0M-^» или «pxelinux.0ÿ» вместо «pxelinux.0».
Настройка http-сервера
Для чего вообще нам нужен http-сервер, ведь для загрузки WIM-образов по сети достаточно tftp-сервера?
Так получилось, что Trivial FTP хоть и обеспечивает базовые функции для передачи файлов по сети, но не может обеспечить высокую надежность и скорость передачи данных.
Как показывает практика, образы с Windows PE размером около 250МБ, скачиваются по сети 1Гбит с использованием http-протокола в несколько раз быстрее (5-10 секунд, против 30-60 секунд соответственно).
Также по протоколу http можно загружать preseed-файлы для установщика debian-installer.
В качестве http-сервера можно использовать apache, nginx или любой другой сервер который вам нравится. Каких-либо особенных настроек не требуется. Главное, чтоб перечисленные ниже файлы *.ipxe, *.wim и другие файлы, размещенные на http-сервере, были доступны для чтения.
Настройка dhcp-сервера
Согласно RFC1232 необходимо настроить опцию 66 TFTP server name, где указать IP-адрес вашего tftp-сервера, например 192.168.1.1; и опцию 67 Bootfile name, где указать имя файла для загрузки «pxelinux.0»;
Если вы используете, например isc-dhcp-server под управлением Ubuntu, то нужно будет добавить примерно такие настройки в файл
shared-network PXE-Netwotk { subnet 192.168.1.0 netmask 255.255.255.0 { # Общие настройки для подсети range 192.168.1.2 192.168.1.254; option routers 192.168.1.1; option subnet-mask 255.255.255.0; option domain-name-servers 192.168.1.1; # Настройки опций для сетевой загрузки в подсети filename "pxelinux.0"; next-server 192.168.1.1; option root-path "192.168.1.1:/var/lib/tftpboot/"; # необязательный параметр } }
Установка и настройка загрузчика syslinux
Установка загрузчика
Нам потребуется syslinux версии 5.03 или выше.
# Скачаем архив с исходными кодами wget https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.zip # распакуем его unzip syslinux-6.03.zip -d syslinux-6.03 # Собственно сама сборка с помощью make cd syslinux-6.03 make # Скопируем полученные файлы в каталог tftp-сервера: cd .. cp syslinux-6.03/bios/memdisk/memdisk /var/lib/tftpboot/ find ./syslinux-6.03/bios/ -name "pxelinux.0"|xargs -I {} cp '{}' /var/lib/tftpboot/ find ./syslinux-6.03/bios/ -name "*.c32"|xargs -I {} cp '{}' /var/lib/tftpboot/
Настройка меню загрузчика
Создадим каталог для файлов меню syslinux:
mkdir -p /var/lib/tftpboot/pxelinux.cfg/
И создадим файл с меню по умолчанию
ui vesamenu.c32 PROMPT 0 menu background background.jpg menu title PXE boot menu # По умолчанию загружаемся с первого жесткого диска LABEL bootlocal menu label Boot from first HDD kernel chain.c32 append hd0 0 # Таймаут для автоматической загрузки 12 секунд timeout 120 TEXT HELP The system will boot after the time is up ENDTEXT # Подменю для центрального офиса LABEL Central Office -> KERNEL vesamenu.c32 APPEND pxelinux.cfg/CentralOffice # Подменю для региональных офисов LABEL Regional Offices -> # menu PASSWD $1$15opgKTx$dP/IaLNiCbfECiC2KPkDC0 # раскомментировать если требуется вход в подменю по паролю, пароль Qwerty, алгоритм MD5 KERNEL vesamenu.c32 APPEND pxelinux.cfg/RegionalOffices
А теперь создадим подменю непосредственно для загрузки ОС:
PROMPT 0 UI vesamenu.c32 MENU BACKGROUND background.jpg MENU TITLE Central Office # Возврат в главное меню LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default # Загрузка через http LABEL PE via http KERNEL ipxe.lkrn APPEND dhcp && chain http://192.168.2.1/winpe.ipxe # Для сравнения загрузка через tftp LABEL PE via tftp KERNEL ipxe.lkrn APPEND dhcp && chain tftp://192.168.2.1/winpe.ipxe # Можно также загрузить debian-installer LABEL Ubuntu KERNEL ubuntu-installer/i386/linux APPEND initrd=ubuntu-installer/i386/initrd.gz preseed/url=http://192.168.1.1/preseed/custom.seed debconf/priority=high auto-install/enable=true debian-installer/language=ru debian-installer/locale=ru_RU.UTF-8 debian-installer/country=RU ipv6.disable=1 netcfg/hostname=testname DEBCONF_DEBUG=5 --
, где winpe.ipxe — конфигурационный файл с настройками для ipxe, который мы разберем ниже, в соответствующем разделе.
Не стоит забывать, что tftp не умеет работать с символическими ссылками, поэтому нужно будет сделать отдельную копию файла winpe.ipxe в каталоге tftp-сервера, если захочется сравнить скорость загрузки по http и tftp.
Некоторые сетевые карты не успевают поднять link с первого раза, поэтому можно сделать вторую попытку загрузки в случае неудачи, с использованием оператора “||”. Если после второй попытки нас снова постигнет неудача, то можно вывести статистику интерфейса и открыть командную строку для диагностики проблемы:
APPEND dhcp && chain http://192.168.2.1/winpe.ipxe || dhcp && chain http://192.168.2.1/winpe.ipxe || ifstat && shell
iPXE
Установка iPXE
iPXE я тоже предлагаю собирать из исходных кодов, к тому же это тоже очень просто:
git clone git://git.ipxe.org/ipxe.git cd ipxe/src make cp bin/ipxe.lkrn /var/lib/tftpboot
Если какая-либо сетевая карта отказывается поднимать link с любой попытки, то скорее всего проблема в драйвере iPXE.
Особенно эта проблема касается новых сетевых карт от Intel. У меня возникли проблемы с картами i218lm и с i218v-2, при принудительно выставленной скорости 1Гбит на свиче.
Перед сборкой нужно поправить ipxe/src/drivers/net/intel.c: для i218lm и i218v-2 выставить флаг INTEL_NO_PHY_RST:
PCI_ROM ( 0x8086, 0x155a, "i218lm", "I218-LM", INTEL_NO_PHY_RST), PCI_ROM ( 0x8086, 0x15a1, "i218v-2", "I218-V", INTEL_NO_PHY_RST ),
Установка wimboot
Для загрузки WIM-образов через iPXE потребуется утилита wimboot.
Установка этой утилиты также очень проста:
wget http://git.ipxe.org/releases/wimboot/wimboot-latest.zip unzip wimboot-latest.zip cp wimboot-2.5.1-signed/wimboot /var/lib/tftpboot/
Создание конфигурационных файлов .ipxe
Конфигурационные файлы .ipxe (расширение может быть любым, но так удобнее) содержат инструкции для ядра ipxe: что именно загружать дальше.
Мы будем загружать утилиту wimboot, и передадим ей в параметрах пути к файлу данных конфигурации загрузки BCD, файлу конфигурации RAM-диска boot.sdi и к образу boot.wim. Структуру каталогов сохранять не обязательно, wimboot сама позаботиться об этом. Все файлы можно сложить в один каталог.
winpe.ipxe
#!ipxe kernel http://192.168.1.1/boot/wimboot initrd http://192.168.1.1/boot/DeploymentShare/Boot/x86/Boot/bcd BCD initrd http://192.168.1.1/boot/DeploymentShare/Boot/x86/Boot/boot.sdi boot.sdi initrd http://192.168.1.1/boot/DeploymentShare/Boot/LiteTouchPE_x86.wim boot.wim boot
В данном примере на http-сервере сделана символическая ссылка для 192.168.1.1/boot/DeploymentShare прямо на корень MDT DeploymentShare. Этот способ не подходит в качестве основного рабочего варианта. Т.к. если Вы вдруг соберете «кривой» wim-образ, то сразу же испортите загрузку по сети для тех, кто с этим работает. Но этот способ хорошо подходит для тестирования новых wim-образов.
Желающие могут заменить в .ipxe файле протокол http на tftp — тоже будет работать, но медленно.
Все. Теперь можно загружаться и ставить ОС. 🙂
Поделиться:
By serg • iPXE 0