Comments 82
Офф-топ:
Ну наконец-то. Неделя «Системного администрирования» на хабре. Ваша борода имеет +5 к приросту.:)
А по теме — большое спасибо. Частенько приходится заниматься «воскрешением» убитых систем. И иногда на всех даже флешек не хватает:)
Скорее, астрологи объявили неделю загрузки по сети на хабре. Количество восстановленных ОС выросло вдвое.
Вопрос по безопасности. Получается, что любой пользователь сможет во время загрузки войти в биос, выставить там загрузку по сети и так или иначе получить доступ к некоторым админским функциям? Пароль на биосе сбрасывается батарейкой.
Так любой пользователь и так априори имея физический доступ к машине может провести все те же манипуляции.
Как уже ответили, если у пользователя есть соответствующий скилл и возможность приложить его к компьютеру, то его врядли что-то остановит.
Но в разрезе данного how-to есть возможность установить пароль на меню — fedorahosted.org/cobbler/wiki/SetPXEBootPasswd
Рекомендую ipxe посмотреть — позволяет загружать образы по http прямо с официальных зеракал.
Понравилась статья, очень подробно расписано, порадовал тот факт, что все необходимое уже собрано в удобные архивы, в свое время пришлось повозиться с разворачиванием pxe boot сервера, по крупицам собирать информацию.
Насчет Mikrotik, как я понял, если вся сеть настроена на микротике, то «загрузочный» сервер указывается в микротике как главный dhcp сервер?
Если MikroTik выступает в качестве DHCP сервера в сети, то в настройках нужно указать BOOT(TFTP) сервер next-server=
и имя файла загрузчика boot-file-name=
Друзья,

Если есть интересующие темы, которые хочется раскрыть в рамках нашей тематики — будем рады их услышать. Самую интересную выберем — для следующей статьи.
А как обстоят дела с UEFI PXE? Последнее время разворачивая ОС столкнулся с тем, что на новых ноутбуках стоит именно эта версия и нужен соответствующий загрузчик. Так же если система не X86_64 по хорошему отдавать соответствующий и так далее. В данном решении никак не проверяется на уровне DHCP (хотя возможность есть) какой загрузчик подходит конкретному устройству. Тот же WDS контролирует данный момент и отдает ровно то что требуется.

Вангую, pxelinux.0 не подходит. Сам держу DHCP на миротике и приходится подменять файл ручками. Правда меняю на родной для WDS загрузчик, для pxelinux еще не разбирался с этим вопросом, но планирую.
Wimboot Вам в помощь. На лету патчит bcd, просто указываете пути к оригинальным bootmgr, bcd, boot.sdi, boot.wim.
У меня нет проблемы в запуске WDS, проблема в том, что для UEFI нужен один загрузчик, а для обычного другой и это должно разруливаться еще на DHCP. А так же x32 x64 разные загрузчики. Так что до pxelinux, winboot, WDS и чего либо еще дело не дойдет, если будет отдан не подходящий файл.
Хотел спросить, есть ли на микротике возможность удаленно управлять dhcp сервером через omapi? Если да, то утилиты типа foreman-proxy смогут помочь. Посылаете соответствующий запрос на прокси, а она авторизуется по ключу и конфигурирует правильные параметры для указанного mac-адреса.

Если честно, от WDS меня немного подташнивает, тем более ничего волшебного оно не делает, чего я не могу сделать при помощи foreman, его шаблонов и pxe.
Вроде этот случай разобран в вики сислинукса

option architecture-type code 93 = unsigned integer 16;

{
if option architecture-type = 00:00 {
 filename "path/to/BIOS/pxelinux.0";
 } elsif option architecture-type = 00:09 {
 filename "path/to/EFIx64/syslinux.efi";
 } elsif option architecture-type = 00:07 {
 filename "path/to/EFIx64/syslinux.efi";
 } elsif option architecture-type = 00:06 {
 filename "path/to/EFIia32/syslinux.efi";
 } else {
 filename "path/to/BIOS/pxelinux.0"; 
}


Не подходит?
А магнита или торрента нет, а то в 12К/с качать 16 дней как-то не очень
Вместо прямых ссылок на файлы лучше бы торрент вложили. На скорости 3-11кб/с при размере файла 11гб как-то печально качать :)
Спасибо за статью!
Единственное чего не хватает, — готового Docker'а.
Ибо держать для этого отдельную машину, при редком использовании, расточительно.
Не реализован выбор между установкой 32- и 64-битных версий Windows (вижу только 64-битный WinPE). Там тоже есть пара тонкостей…
Да.
Но как уже писал — ставим только х64, поэтому не реализовывал установку 32-х битных.
Как вариант создать отдельный загрузчик для х86 версии и вынести его в отдельную папку (Как я и поступил), в меню просто делаем 2 пункта, загрузка x86 версии установки и x64 и указываете для каждого свой pxeboot.0.
Есть ли решение по созданию одного WinPE образа с двумя архитектурами сразу или хотя-бы выбором их из bcd?
Пираты такое точно делали с меню в установщике Windows, сам WinPE для совместимости можно использовать 32-битный.
UFO landed and left these words here
dnsmasq для DHCP+TFTP. (Для DNS лучше unbound)

возможно, мне такую связку не доводилось настраивать
nginx или лайти для HTTP

да здесь это, на мой взгляд, вообще не принципиально
UFO landed and left these words here
а зачем каждый раз перегружать меню? так часто обовляется?
include pxelinux.cfg\fedora.conf
include pxelinux.cfg\freebsd.conf
include pxelinux.cfg\solaris.conf


а внутри что то вроде
menu begin FreeBSD MFS AMD64
menu title FreeBSD MFS AMD64
label FreeBSD 10.0 MFS (root:mfsroot)
kernel memdisk
append initrd=iso/FreeBSD/mfsbsd-se-10.0-RELEASE-amd64.iso iso raw

label Back
menu EXIT
menu end
Нет, не часто.
Просто при таком конфиге меню более логично разделено на подпункты.
Спойлер для тех у кого DHCP на Cisco —
Параметры DHCP
network <ip сети> <маска>
ip dhcp pool <Имя пула>
bootfile \srv\tftp\pxelinux.0
next-server <IP сервера tftp>
default-router <Шлюз>
option 66 ascii «Имя сервера»
dns-server <DNS сервера>
option 150 <IP сервера tftp>
domain-name <доменное имя>
livecds

PROMPT 0
UI vesavesamenu.c32


а по какой причине может не подгружаться картинка? делаю 640*480, jpg
Проверьте в какой директории лежит изображение (Должна лежать в корне /srv/tftp, если вы делали по этому ману), выставтье права на поиск\чтение для всех на этот файл и перезагрузите tftp сервис.
Опечатку в статье поправил.
Касаемо картинки.
Проверьте права на файл(чтение должно быть разрешено всем), файл должен лежать в /srv/tftp
Есть вопрос по DHCP. У нас в сети уже есть DHCP сервер на Win Server 2003, и не хотелось бы заводить второй. Достаточно ли будет если мы на уже имеющемся сервере DHCP укажем необходимые опции:

Option No	                   Option Name	                             Example Value
17	                            Root Path	                             10.0.10.1:/srv/tftp/
66	                            Boot Server Host Name                    SERVER_NAME
67	                            Bootfile Name	                     pxelinux.0

Будет ли такой вариант работать?
Спасибо большое, статья очень годная, давно уже подумываю себе такую красоту соорудить
gpxelinux кстати умеет по http грузить, что намного быстрее, чем по tftp (если, допустим, iso образы грузить, или образы фс).
Как быть если у меня в сети уже есть PXE/dhcp/tftp сервер, который раздает образы для тонких клиентов ( wtware ). можно ли модифицировать загрузчик таким образом чтобы по таймауту скажем в 5 секунд загружался образ для Тк, а в случае если в течение 5 сек была нажата any key появлялось меню с вариантами загрузки?
С ходу могу предложить только вынесение в отдельный VLAN сервера со сборкой из статьи и переводить нужную машину в этот VLAN при необходимости загрузить что-то с него.
Т.е. Ваш сервер в одном VLAN, сервер из статьи в другом.
У сборки в целом только 1 недостаток. всё заточено под IP — 10.0.10.0
в версии установки на свой сервер, очень быстро всё развернул — спасибо.
всего раз 15 поправил IP.
а вот когда попытался поставить винду, тут сюрприз — надо патчить winpe.wim -для винды настройки вшиты туда.
к сожалению патчить файл winpe.wim — не помогает.
есть нормальная инструкция по сборке (в статье). нужно Винду, и провести пляски с изменением startnet.cmd

На будущее автору придумал такой вариант:
положить файл startnet.cmd на сервер, рядом с образами дисков. а в самом winpe.wim, сделать другой файл, который при запуске будет просить ip сервера, который примаунтить. (и например по умолчанию считать что это шлюз)
IP из конфигов меняется одной командой:
sed -ri 's/10.0.10.1/192.168.1.1/g' ./*
например
root@pxe:~# cd /srv/tftp/pxelinux.cfg/
root@pxe:/srv/tftp/pxelinux.cfg# grep -rl 10.0.10.1 ./
./vmware
./livecds
./du
root@pxe:/srv/tftp/pxelinux.cfg# sed -ri 's/10.0.10.1/192.168.1.1/g' ./*
root@pxe:/srv/tftp/pxelinux.cfg# grep -rl 10.0.10.1 ./
root@pxe:/srv/tftp/pxelinux.cfg# grep -rl 192.168.1.1 ./
./vmware
./livecds
./du

касаемо подготовки Windows, смотрите статьи:
habrahabr.ru/company/serverclub/blog/213007/
unattendedxp.com/articles/pxelinux/prep_files_windows_7_vista.shtml
В статье есть ссылка на другую статью, где описано как готовить winpe.wim под ваши реалии.
Да и вообще, в варианте winpe.wim из статьи есть пункт(1) — ничего не делай, я сделаю все сам.
А есть ли какое либо ПО для лёгкого монтирования /? Через лайв последней убунты у меня ничего не получилось.
Немного оживлю старую, но актуальную, тему.

Внимание! Сразу скажу что я не анализировал глубоко работу gPXE (например, я не проверил действительно ли все ресурсы теперь грузятся по http или ускорение вышло благодаря замене обычного PXE на gPXE), но решил проблемы скорости, критичные для меня лично. Пообщавшись со знакомыми, которым помогли мои твики, решил написать этот мини-пост.

Попробовал использовать данный мануал на стареньком нетбуке (его удобно носить как мобильного доктора, а с твиками ниже он превращается в тот известный бокс от Zalman, да еще и с шифрованием!), но в процессе несколько раз наступил на грабли неприемлемой скорости загрузки, особенно iso-образов.
Как решал? Переключился на использование gPXE. В том же архиве, syslinux-4.02.tar.gz, берем дополнительно директорию gpexe и копируем из нее в наш корень /srv/tftp файл gpxelinux.0

Но этого недостаточно! Теперь нам нужно передать DHCP серверу что мы желаем грузиться быстро и по http. Редактируем файл /etc/dhcp/dhcpd.conf:
Перед блоком shared-networks добавляем
option space pxelinux;
option pxelinux.magic code 208 = string;
option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;

Сам блок меняем на такой, учтите что хабр заменил двойные кавычки
shared-network PXE-Netwotk {
subnet 10.0.10.0 netmask 255.255.255.0 {
range 10.0.10.10 10.0.10.254;
option routers 10.0.10.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 8.8.8.8, 8.8.4.4;
# filename «pxelinux.0»;
filename «gpxelinux.0»;
next-server 10.0.10.1;
option root-path «10.0.10.1:/srv/tftp/»;
option pxelinux.configfile «pxelinux.cfg/default»;
option pxelinux.pathprefix «10.0.10.1/srv/tftp»;
vendor-option-space pxelinux;
}

Перезапускаем сервис: /etc/init.d/isc-dhcp-server restart

В принципе, этого уже достаточно. http префикс должен работать на всех сборках, исошках и т.п.
А скорость вырастает с неприличных ~44 кб/сек до 11 Мб/сек! Тестировал на десятках серверов Dell и HP, ноутбуках Lenovo, Dell, Acer, Samsung, включая старые с IDE винтами. Загрузка работала превосходно.

Я некоторое время бился с двумя необходимыми мне программами — Acronis True Image и ESXi инсталлятором.
Немного вайна
Обе они имеются в своих iso (по непонятной мне причине метод загрузки ESXi через распакованные файлы не работает с http, точнее работать-то работает, но после изначально быстрой загрузки переключается на ~44 кб/сек скорость, я плюнул на плюшки от своего ks.cfg и разместил iso файл, заодно и версию обновил на 5.5.0 update03 — скорее всего можно ks.cfg вкрутить в исошку, так что кому важно — дерзайте).

Акронис из-за своего размера не помещался в оперативную память, решается добавлением mem=1536mb
ESXi же превосходно работает без доп.настроек, хотя я все равно прописал его с полными путями (должно работать и без них, как акронис, просто не успел проверить).
Пункты меню
LABEL VMware-5-5-u3-http-iso
KERNEL 10.0.10.1/srv/tftp/memdisk
APPEND iso initrd=http://10.0.10.1/srv/tftp/vmw/5.5.3.iso

LABEL VMware-5-5-u3-iso
KERNEL memdisk
APPEND iso initrd=vmw/5.5.3.iso

LABEL Acronis2015
MENU LABEL Acronis 2015 (1536mb)
KERNEL memdisk
APPEND iso initrd=acronis/acronis.iso mem=1536mb

В целом, с включением gPXE стало возможным указывать не относительные пути к файлам, а их URL.
Пример
Вместо:
APPEND iso initrd=acronis/acronis.iso
Можно так:
APPEND iso initrd=http://10.0.10.1/srv/tftp/acronis/acronis.iso
Хотя в целом это overkill, ведь сейчас, как я понял, все ресурсы изначально грузятся по http за счет глобального префикса (помните, мы указали его в DHCP?).

Рекомендую избавиться от тяжелого апача и использовать православный nginx. Все что нужно:
К стоковому /etc/nginx/sites-available/default добавить такой location (не надо бояться root /;)
location /srv/tftp
{
root /;
error_page 404 10.0.10.1/srv/tftp/pxelinux.cfg/default;
}
А не могли бы подсказать по настройке префикса в Windows DHCP? У меня при прямом указании через INITRD http://.. грузится по http. Но без этого по тфтп (сужу по секундомеру). Сделал в windows dhcp «Set predefined option» там создал опцию pxelinux.configfile и pxelinux.pathprefix. Типа text нет в списке выбора, взял string [arial], может в этом дело. Назначил данный код, но видимо этих действий не хватает. Уже попробовал и pxelinux.magic задать. Также пробовал vendor class создавать pxelinux и в нем определять эти опции.
Дополняю свои наблюдения. Пришлось ознакомится с отловом DHCP ответов. Смотрел через Wireshark и tcpdump|dhcpdump. При создании опций 209 210 и даже 252 из руководства эти опции не отображаются в ответах DHCP сервера. При этом есть ряд неопределнных опций 128...135 без названия и данных. Если создать предопределенную опцию с этим кодом (от 128 до 135) то она появляется в ответах, в Wireshark и dhcpdump. Пока я могу сделать только 3 возможных вывода:
  1. Ограничения Windows 2012R2
  2. Ограничение декодирования dhcpdump, wireshark
  3. Проблема в DHCP Relay(хотя не должно быть никаких изменений

На данный момент даже не знаю что и думать. В ближайшее время планирую сделать такую же сборку в виртуалке на сервисном ноутбуке с DHCPd. Вот и сравню выводы Wireshark'а.

Кстати вопрос в догонку, при отдаче контента через NGINX вместо Apache получили ли какой нибудь прирост?
По Nginx — он просто легче. Статику в рамках одной машины и одного соединения и апач нормально отдает, но он тяжелый, а nginx легенький, как пушинка. И это не тот случай когда Nginx не пушка — когда нужно, nginx'ом не то что воробьев, ворон гонять можно :)

Кстати, нашел старый компьютер на ASRock, где встроенный PXE не поддерживает gPXE и скорость печальная, как обычно. На брендовых материнках и ноутбуках/серверах, даже старых, все нормально.

А по DHCP на Windows не подскажу, я чистейшей воды линуксоид, хоть и работаю время от времени с Windows.
Тестил на Asus'ах под S478 — заработало. Разницы в скорости не заметил в гостевых машинах VMWare ESXi, а с виртуальным адаптером VMXNET3 gpxe не заработал, по http не мог загрузить образы :(
Интересный еще момент, какие карточки использовать взамен сгоревших встроенных, чтоб была поддержка загрузки по сети. Есть D-link'и dge-528T (еще с распаянным отсеком под bootrom, сейчас пошли уже без распаянного). Только вот bootrom чипов к ним понятия не имею где достать. Итого в продаже кроме Intel PWLA не нашел других карт, которые были бы в полном комплекте для сетевой загрузки.
С тех пор тоже встретилась машинка (старая) которая не поддерживала gPXE, немного помучившись все таки поменял загрузчик на iPXE. Плюшек много, но синтаксис немного отличается, приходится постепенно переписывать старые пункты. Зато пока работает везде. Плюс можно прям средствами iPXE раздавать разным машинам разные конфиги
Ссылки на ресурсы не очень хорошо, они тоже умирают, лучше уж MAGNET:
magnet:?xt=urn:btih:A9B86DBDD42D1EAA816F00E0D0496923834C989D — root_tftp_by_ServerClub.tgz
magnet:?xt=urn:btih:ABE5C64FB7AE418D8FB6E5F001B7192AE3B1D529 — entire_system_pxe_boot_by_ServerClub.tgz
Разместить фото
Ребят помогиде пожалуйста при попытке запустить установку windows вылезает вот такая ошибка что я делаю не так если можно объясните для тупых пожалуйста
Проверяйте доступы на файлы windows, для всех должно быть право на чтение.
Качали готовые сборки или сами делали по аналогии?
делал сам по аналогии доступ открыл полный на чтение и изменение всё равно не помогает
Only those users with full accounts are able to leave comments. Log in, please.