Загрузка по сети pxe

Содержание статьи

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

Итак, сегодня мы научимся: устанавливать Windows и Linux по сети, грузить небольшие ISO-образы, полезный софт (всяких там Касперских, Акронис, WinPE, мемтесты), разворачивать тонкие клиенты и рулить ими. Чтобы, например, бухгалтер, работающая с 1С по RDP, не прибила тебя за то, что у нее слетела винда, а отчет нужно было подготовить еще вчера. Или скупой начальник, который не хочет обновлять свой комп, восхитился твоим профессионализмом, когда увидит, как на стареньких компах летает Windows 8. В достижении наших коварных целей нам поможет сервер, предоставляющий загрузку по сети (PXE).

У любого системного администратора в заначке есть универсальный USB-диск для экстренной реанимации компьютера. Согласись, было бы куда лучше иметь ту же функциональность, используя одну лишь сетевую карту. Нельзя при этом не отметить возможность одновременной работы с несколькими узлами сразу. Итак, исходя из наших потребностей у нас есть два пути решения: использовать PXE или LTSP.

LTSP нам не очень подходит: он призван грузить по сети ОС, установленную на самом сервере, что позволяет использовать приложения сервера LTSP. Это не совсем то, что нам нужно. PXE — инструмент для загрузки компьютера по сети без использования локальных носителей данных, так же как и LTSP. PXE позволяет организовать мультизагрузочное меню загрузки, аналогичное универсальному «USB-реаниматору».

Главное меню загрузки PXE, графический режим

Что будем реализовывать?

Началось все с необходимости иметь под рукой инструмент для удаленной установки Ubuntu/Debian Server по сети, с возможностью загрузки Live CD маленькой системы, вроде SliTaz или Kolibri OS.
Как говорится, аппетит приходит во время еды: намеченное не успели реализовать, а к плану добавился еще ряд «хотелок». В итоге список получился весьма внушительным.

  1. Тонкие клиенты на базе Thinstation Linux.
  2. Раздел Linux.
  1. Установка Ubuntu 14.04 x86.
  2. Установка Ubuntu 14.04 x64.
  3. Установка Ubuntu 12.04 x86.
  4. Установка Ubuntu 12.04 x64.
  5. Загрузка SliTaz Live CD.
  • Раздел Windows.
    1. Установка Windows 2012.
    2. Установка Windows 7.
    3. Acronis.
      1. Windows PE с пакетом полезного ПО.
      2. Acronis True Image.
        1. Legacy BIOS.
        2. UEFI.
        3. Acronis Disk Director.
          1. Legacy BIOS.
          2. UEFI.
          3. Касперский Rescue v 10.
          4. ERD Commander от 5 до 8 через ISO-образ.
          5. Memtest.
          6. Собираем все в кучу и взлетаем

            В качестве дистрибутива для сервера выбор пал на Ubuntu Server 14.04.2 LTS. Можно остановиться на любой другой ОС, разница будет только в синтаксисе. Итак, приступим. Нам потребуется TFTP, DHCP (необязательно установленный на этом же сервере, в роли DHCP-сервера может выступить роутер), сервис для организации сетевой файловой системы NFS. Рассматривать будем только те настройки, которые нас интересуют в рамках темы. Первым делом установим все необходимое, предварительно сделав все обновления:

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

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

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

            Вариант 2. Открой один материал

            Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.

            Александр «Plus» Рак

            Участник сообщества OmskLUG. Инженер отдела электронного взаимодействия МКУ «Информационно технического управления».

            Развиваем тему загрузки по сети
            На этот раз будем переделывать Grub4Dos на загрузку через syslinux с использованием ipxe
            Разбирать начальную установку сервера не станем, так как уже рассматривался в первой статье по сетевой загрузке
            Установка тонких клиентов на примере загрузки Thinstation и Grub4Dos
            Единственное что нам понадобится, это WEB сервер с модулем просмотра файлов. Любой. Я ставлю lighttpd

            Теперь пойдем по порядку

            1. Качаем и собираем всё необходимое для syslinux
            2. Создаем структуру каталогов
            3. Загружаем iso файлы
            4. Загружаем ipxe
            5. Пишем и правим конфигурацию до необходимого результата

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

            Читайте также:  Вегас про текст на видео

            Syslinux

            Создаем в корне tftp сервера папку syslinux
            Здесь будет вся наша структура каталогов и прочее
            Если кроме данной сборки ничего больше не используется, то можно не дробить на подкаталоги и делать без подпапки syslinux
            В моем случае используются и другие загрузочные pxe файлы
            В папке syslinux создаем подпапки:
            pxelinux.cfg — папка конфигурации загрузчика
            utils — папка утилит, можно и без нее кидать всё в корень
            В папке pxelinux.cfg создаем файл пустой файл default
            Это файл основной конфигурации меню syslinux

            Качаем с сайта архив https://cdn.kernel.org/pub/linux/utils/boot/syslinux/
            На момент установки syslinux-6.03.zip
            Не похоже чтобы он развивался дальше так как версия от 06-Oct-2014 16:33
            Распаковываем в любую временную папку и начинаем искать файлы
            Файлы необходимы для базовой работы загрузки по сети. Они раскиданы по папкам. Самое простое, воспользоваться поиском.

            Как видим файл с одинаковым именем встречается в нескольких подкаталогах.
            Нас интересует простой метод, без efi. Берем по пути ./bios/com32/
            Если что-то не докопировали, то при загрузке сервер сообщит об этом
            Список файлов и структура которую мы должны получить в итоге:

            В настройках DHCP сервера, для клиентов указываем файл загрузки
            /syslinux/pxelinux.0

            ISO IPXE

            В корне папки syslinux создаем подпапки
            iso — папка с загрузочными образами
            ipxe — папка с файлами конфигурации и модулем загрузки ipxe
            Закидываем образы для загрузки по сети. Это Live утилиты. С загрузкой больших Live линукс дистрибутивов есть сложности. Для начала рассматриваем что работает без нареканий
            Подопытный ноутбук имеет частоту CPU 1533 и на борту 512 памяти
            По большей части загрузка по сети делается для старого оборудования, которое не умеет грузиться с USB
            В папку ipxe качаем готовый обра IPXE

            Для загрузки образом есть несколько вариантов. Можно использовать nfs, можно использовать http.
            Так как в начале я ставил lighttpd, то понятно что я использую http
            Необходимо настроить путь к папке с образами, а именно путь до папки iso

            Не забвайте про права на папки, так как lighttpd работает от имени пользователя www-data, то необходимо предоставить права на iso. В процессе настройки это может понадобиться не один раз

            Конфигурация

            Основная логика работы такая:
            В пункте меню syslinux выбирается пункт, и в зависимости он грузится или сразу в память, или посредством ipxe по сети
            Мелкие образы я гружу сразу в память через модуль memdisk. Так как её мало то большие образы уже не загрузить и выдается ошибка, поэтому вызывается файл конфигурации *.ipxe для http через модуль ipxe.lkrn
            В папке ipxe создаем файл с параметрами загрузки образа. Под каждый образ, свой файл

            Теперь правим основной файл конфигурации syslinux
            Для фонового изображения необходимо положить его в папку /syslinux/pxelinux.cfg/back.jpg
            Размер изображения должен совпадать с разрешением экрана в конфигурацци
            В моем случае это 800×600

            В итоге структура каталогов имеет вид:

            При попытке загрузить обычный Linux Live дистрибутив, получаем ошибку initramfs
            В принципе есть варианты решений http://ipxe.org/appnote/ubuntu_live
            Мне удалось загрузить Slax
            Сами параметры загрузки можно увидеть распаковав образ Slax iPXE с сайта https://www.slax.org/
            Мы будем загружать простой образ Slax 32bit
            В папке iso создадим папку slax, в ней подпапку ipxe
            В папку ipxe необходимо положить загрузчик slax. Его можно взять из образа или скачать http://ftp.linux.cz/pub/linux/slax/Slax-9.x/ipxe/9.7.0/32bit/
            Сам образ кладем в корне папке slax, здесь же будет и файл параметров конфигурации slax-32bit-9.7.0.ipxe
            Проделываемые действия, без сокращений чтобы лучше понимать

            В меню syslinux создадим пункт меню

            Если получили ошибку доступа к файлам, то не забываем править права

            IP адрес — это адрес сервер tftp, того где мы все это настраиваем

            В этом небольшом посте я расскажу вам о практических способах реализации загрузки бездисковых устройств через PXE. Скажем так, что до определенного момента я совсем не интересовался этой проблемой и о PXE имел весьма посредственное представление, также, наверное как и у большинства. Т.е. все из нас знают, что в современных ПК есть возможность загрузки по сети, каждый видел в BIOS'е собственного ПК такую возможность (PXE Boot, LAN Boot), но мало кто использовал ее на практике. Реализацией этой возможности мы и займемся на практике, а также рассмотрим какое практическое применение в «домашних условиях» может иметь сетевая загрузка.

            Наша «тестовая лаборатория» включает в себя:

            • Маршрутизатор Mikrotik 951G-2HnD с RouterOS v6.39 (stable)
            • Сетевое хранилище Western Digital My Cloud EX2

            • PXE — Сетевая загрузка с микротика — здесь описывается настройка Mikrotik + TFTP для сетевой загрузки с использованием GRUB (Grub4DOS), а также приведен пример рабочей конфигурации для загрузки ALKID LiveCD и VINCOME LiveCD через PXE. Немного не то что нам хотелось (мы то хотели грузить Ubuntu LiveCD), но тем неменее информация полезная, берем на заметку.
            • Настройка TFTP сервера на Mikrotik RouterOS — а вот здесь рассматривается настройка TFTP на Mikrotik, правда тут уже у нас уже используется не GRUB, а PXELINUX (SysLinux) в качестве загрузчика. Который, как мы убедимся позже, можно будет использовать и для реализации сетевой установки Ubuntu, и для загрузки LiveCD и для множества других вещей. Уже интересно, не правда ли? Знакомимся со статьями дальше.
            • Загрузочный сервер — как загрузочная флешка, только сервер и по сети — пост на Хабре, в котором рассказывается о том как сделать «загрузочную флешку» по сети. Собственно такая конфигурация отлично подойдет для различных сервисных центров и т.п., с другой стороны, выбрать то, что будет грузиться по сети лично у него — это решение каждого, благо примеров полно. К концу чтения этого поста, вы (по-крайней мере я на это надеюсь) поймете, насколько это удобно.
            • Домашний роутер с PXE-Boot и сервисами. — приводится пример организации PXE загрузки на Asus'овском роутере с прошивкой Merlin-Firmware. Честно говоря я сам подобную никогда не использовал, но статья ценна уже как минимум различными примерами рассмотренных в ней конфигураций для загрузки. А также как отличная иллюстрация того, что при желании, для реализации PXE загрузки можно использовать только лишь ресурсы бюджетного SOHO устройства.
            • Как воспользоваться сетевой загрузкой (PXE) для Ubuntu LiveCD — переводная статья с HowToGeek, в принципе тоже может быть интересна. Кстати, именно по теме сетевой загрузки Ubuntu LiveCD вы так или иначе наткнетесь на различные ее вариации в поиске.
            • Мультизагрузочный PXE-реаниматор — статья на 3DNews от 2012 года, но тоже в принципе интересно. Если вы читая этот пост пока просто просматриваете эти ссылки «по диагонали» — то наверное уже поняли, что PXE загрузка предоставляет практически неограниченный набор возможностей, наша задача лишь научиться правильно применить их для наших задач.
            • [How-To] Запуск LiceCD Ubuntu (и не только) с любого ПК в сети с помощью PXE — название поста говорит само за себя, все действия автор проводит на сервере под управлением Debian 7. Т.е. DHCP + TFTP и т.п. у него развернуты на отдельном ПК с Debian 7. Тоже интересно, помечаем в «копилку».
            • Configure PXE Server In Ubuntu 14.04 — похожий англоязычный вариант.
            • Установка Ubuntu по сети (DHCP, PXE, boot-menu) на примере Ubuntu 14.04.
            • Ubuntu 16.04 / Debian 8: Run PXE boot server for automated install — конфигурирование сервера для автоматизированной установки Ubuntu и Debian по сети. Лично мне эта статья понравилась различными комментариями и дополнительными пояснениями. Если читать вдумчиво, а не по диагонали, то становится (хотя бы на базовом уровне) понятно что такое pxelinux.0, ldlinux.c32 и т.п.
            • Booten vom Netzwerk: Ubuntu 16.04 via PXE starten — статья, правда на немецком, подробно рассказывающая про то, как правильно настроить загрузку LiveCD с Ubuntu по сети. Собственно она и легла в основу решения поставленной задачи.
            • Руководство по сетевой загрузке предустановочной среды Windows (WinPE)
            • IT Geek: How to Network Boot (PXE) the WinPE Recovery Disk with PXElinux v5 & Wimboot
            Читайте также:  Знак лямбда в ворде

            Ну и на первое время достаточно. Просмотрев / прочитав все это начнем ваять что-то свое. Первое что мы делаем — это подключаем флешку к Mikrotik'у и форматируем ее в FAT32: System -> Disks -> Format drive . Сделать это можно как через WinBox, так и через Web-интерфейс Mikrotik. Проблем с этим возникнуть не должно.

            Затем скачиваем заранее подготовленный архив pxe-mikrotik-disk1.rar и распаковываем его содержимое в корень флешки. Сделать это можно как в меню Files в web-интерфейсе Mikrotik'а, так и через FTP в Mikrotik, ну или просто вставив отформатированную USB Flash в ПК и распаковав в корень содержимое архива. В результате там должна получиться следующая структура файлов (смотреть скриншот справа).

            Некоторых файлов, например kolibri.iso (образ Kolibri OS) в архиве не будет, т.к. их можно без труда найти и скачать в интернете, также в архиве не будет содержимого папки winpe (т.к. все эти файлы есть на любом установочном диске с Windows и включать их в состав архива я не вижу смысла). А вот на остальных мы остановимся подробнее.

            pxelinux.0 — это основной загрузчик, на который направляются DHCP сервером все клиенты сетевой загрузки, он входит в состав пакета syslinux. Все что касается данного загрузчика, а также используемых им библиотек (*.c32) можно взять в следующих пакетах:

            Для чего они? После загрузки PXELinux на устройство начинается поиск дополнительных файлов и библиотек, т.е. устройство пытается подключиться к TFTP серверу, указанному в опциях отдаваемых DHCP сервером и запросить у него, например, файл ldlinux.c32, так вот TFTP сервер должен знать о реальном местоположении файла, чтобы отдать его, например в нашем случае он лежит в disk1/tftpboot/ldlinux.c32. Честно говоря я не экспериментировал, можно ли задать соответствие не отдельным файлам, а папкам или файлам по маскам, поэтому на всякий случай сделал правила для всех файлов на TFTP сервере. После того как мы прописали правила необходимо настроить наш DHCP сервер.

            Переходим на закладку IP -> DHCP Server -> Networks в Mikrotik, выбираем нашу подсеть и делаем там следующие настройки:

            Читайте также:  Как войти в инженерное меню нокиа

            На этом приготовления к первому запуску закончены. Можно брать любой ПК и пробовать загрузиться по сети. Для меня наиболее простым решением было создание отдельной виртуальной машины в VirtualBox и настройка ее на загрузку по сети. В результате, если все сделано правильно, вы увидите вот такую вот симпатичную менюшку PXELinux:

            Сама конфигурация этого меню находится в файле disk1/tftpboot/ubuntu-installer/amd64/boot-screens/menu.cfg . Если мы попробуем загрузиться в Kolibri OS для примера, то заметим что передача казалось бы маленького (всего 66.5 Mb) образа kolibri.iso через TFTP даже по гигабитной сети займет довольно продолжительное время:

            650 Mb и отдавать их по TFTP устройствам — превращается в настоящую муку. Т.е. грузится — да, но оЧЧень медленно. Первая мысль которая приходит в голову — а что если в качестве средства доставки тяжеловесного контента использовать не TFTP, а HTTP или NFS? И да, действительно, такая возможность есть.

            Посмотрите как реализована в конфигурации (menu.cfg) загрузка того же Ubuntu LiveCD:

            Здесь ядро vmlinuz.efi и рамдиск initrd.lz у нас грузятся по TFTP, а вот содержимое rootfs уже берется с NFS ресурса (благо Ubuntu так умеет). Порядок создания папки ubuntu16.04_live_amd64 на NFS ресурсе описан тут.

            Ну или если вкратце, то я создал отдельную папку на WDMyCloud EX2, разрешил доступ к ней по NFS:

            /nfs и просто скопировал необходимые файлы с LiveCD с Ubuntu в нее:

            В результате содержимое папки ubuntu16.04_live_amd64 у нас полностью идентично корню LiveCD с Ubuntu:

            Просто? Просто. Теперь пробуем загрузиться по PXE выбрав в меню LiveCD:

            С гигабитной сетью все получилось достаточно быстро. Основное время здесь правда тратится на загрузку vmlinuz.efi (7 Mb) и initrd.lz (27 Mb) по TFTP. И вот здесь мы подходим к главному? А можно ли как-то грузить эти файлы тоже с NFS или с HTTP ресурса? Можно! И ответом здесь является использование вместо PXELinux (который к сожалению так не умеет), загрузчика iPXE. Настоятельно рекомендую вам познакомиться с ним и изучить примеры и т.п. на официальном сайте. В архив pxe-mikrotik-disk1.rar уже входит ipxe.lkrn , собранный мной из исходников с включенной поддержкой HTTP, NFS и т.п.:

            Обратите внимание, есть поддержка DNS, HTTP, iSCSI, NFS, TFTP и др. вещей. Т.е. грубо говоря используя iPXE вы можете разместить необходимые файлы не только на NFS шаре, но и где-нибудь в интернете, например, на http://yourdomain.ru/files/ . и загрузчик будет брать их оттуда. При выборе опции Load iPXE SuperBoot Menu в PXELinux открывается меню загрузчика iPXE:

            И вот здесь уже, согласитесь, есть чем впечатлиться. Сама конфигурация этого меню находится в файле boot.ipxe, который был взят мной из этого проекта bradgillap/IPXEBOOT на GitHub'е. Внутри подробные примеры и комментарии для всех вариантов загрузки, фактически это означает что вы с минимальными усилиями сможете настроить у себя загрузку любого из приведенных пунктов меню, просто разместив необходимые файлы у себя в сети и скорректировав boot.ipxe .

            Ну и последнее о чем хотелось бы рассказать — это о загрузке *.wim образов WinPE через PXE. Для этого в моем примере используется именно iPXE и wimboot. Пример конфигурации вы можете увидеть в menu.cfg от PXELinux в пункте меню «Load iPXE [wim-boot.ipxe]». Фактически там грузится ipxe.lkrn, который читает файл конфига wim-boot.ipxe. Просто размещаете файлы wimboot, bootmgr, bcd, boot.sdi и boot.wim вашего WinPE дистрибутива где-либо в сети (на HTTP, NFS ресурсах) и все замечательно загружается. Примеры опять же, смотрите в wim-boot.ipxe.

            Кстати, в меню iPXE SuperBoot от bradgillap есть пункт External Linux Installs. Фактически это внешнее (т.е. находящееся в интернет) загрузочное меню, которое позволяет вам установить некоторые Linux-based ОС, а также загрузить некоторые варианты LiveCD онлайн. Т.е. для того чтобы установить тот же Ubuntu, фактически достаточно только соответствующим образом сконфигурировать DHCP . Все остальное, даже на этапе загрузочного меню может быть взято из сети.

            p.s. Чуть не забыл 😉 Архив pxe-mikrotik-disk1.rar со всеми необходимыми загрузчиками и примерами конфигураций (пароль на архив стандартный — decker.su). Также буду рад любым вашим мнениям и отзывам в комментариях. Если у вас уже есть свои конфигурации для PXE загрузки распространенных LiveCD дистрибутивов, например, DrWeb Live CD, Kaspersky Rescue Disc и др. популярных инструментов — делитесь ими в комментариях. Также, если у кого-то есть опыт (или ссылки на соответствующие статьи) о настройке бездисковых RDP клиентов, например на базе Thinstation — это тоже приветствуется.

            Как вы уже поняли, я далеко не гуру в Linux'е и по-сути как работает PXE я узнал только вчера. Поэтому в архиве по факту используется несколько загрузчиков: PXELinus (SysLinux) как основной, а из него уже можно загрузить iPXE или Grub4DOS, хотя по факту, в реальной жизни достаточно использовать что-то одно. Все это оставлено просто в качестве примера, чтобы было наглядно понятно как работать и с тем, и с другим, и с третьим. Так что, как говорится, «ногами не пинать», а ценные комментарии всегда приветствуются.

            Оцените статью
            Adblock detector