PXE Boot за 15 минут

    Здравствуй %username%!

    Сегодня я расскажу как за 15 минут можно развернуть сетевую загрузку с удобным меню загрузки и минимумом полезных утилит.




    Нам понадобится cервер под управлением Linux в моем случае Ubuntu, немного энтузиазма и свободного времени.

    Я надеюсь статья будет вам полезна и я получу инвайт на Хабр :)
    Спасибо sky_lord!


    TFTP-Сервер


    Установим пакеты: tftp tftpd-hpa

    sudo apt-get install tftp tftpd-hpa

    Следующим шагом будет настройка корневого каталога TFTP сервера и самого сервера:
    открываем файл /etc/inetd.conf, и убеждаемся в наличие следующей строки, а так же, что перед ней не стоит #:

    tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /tftpboot

    /tftpboot — это папка вашего сервера, там и должны лежать файлы. Создаем ее

    sudo mkdir /tftpboot


    Проверяем. У меня в данный момент в папке /tftpboot есть файл /tftpboot/pxelinux.0

    tftp 10.22.22.22
    tftp> get pxelinux.0
    Received 16300 bytes in 0.0 seconds
    tftp>


    Как видно из ответа TFTP клиента мы успешно получили файл размером 16300 байт за 0 секунд.


    DHCP-Сервер


    Установим пакет: dhcp3-server

    sudo apt-get install dhcp3-server

    Теперь нам нужно его настроить для этого откроем фаил /etc/dhcp3/dhcpd.conf удобным нам способом. В моем случае это:

    nano /etc/dhcp3/dhcpd.conf

    Мой фаил /etc/dhcp3/dhcpd.conf:

    ddns-update-style none;
    default-lease-time 600;
    max-lease-time 7200;
    authoritative;
    log-facility local7;
    server-name "10.22.22.22";

    subnet 10.22.22.0 netmask 255.255.255.0 {
    pool {

    range 10.22.22.1 10.22.22.21;

    next-server 10.22.22.22; # Адресе tftp сервера для загрузки фаила с загрузчиком

    filename "pxelinux.0"; # Имя фаила с загрузчиком
    }
    }


    Внимание! если на вашем DHCP сервере сконфигурированы Static адреса для клиентов, то DHCP сервер проигнорирует вышеописанную конфигурацию и «отдаст» клиенту только те параметры которые внесены в секцию параметров static клиента.
    Подробности: man dhcpd.conf

    Перезапускаем dhcp сервер:

    sudo /etc/inti.d/dhcp3-server restart

    Начинка


    Теперь пришло время наполнить каталог tftpboot необходимыми нам инструментами и загрузчиком. Меню будет загружаться при помощи загрузчика syslinux а точнее pxelinux.0
    Меню формируется при помощи файла /tftpboot/pxelinux.cfg/default
    Сразу оговорюсь — не стоит «копипастить» конфиги так как в них содержатся комментарии и я не знаю как их воспримет syslinux.

    Пример файла /tftpboot/pxelinux.cfg/default:

    default /boot/vesamenu.c32 #Это путь до файла модуля меню при его указании открываются широкие возможности для оформления меню.

    #описание цветов элемнтов
    menu color border 0 #ffffffff #00000000
    menu color sel 7 #ffffffff #ff000000
    menu color title 0 #ffffffff #00000000
    menu color unsel 0 #ffffffff #00000000
    menu color disabled 0 #ffffffff #00000000
    menu color timeout_msg 0 #ffffffff #00000000
    menu color timeout 0 #ffffffff #00000000
    menu background #1F45A5

    # указание заголовка меню
    menu title PXE Network Boot Menu

    prompt 0 # Индекс выбранного по умолчанию пункта меню начинается с 0.

    timeout 1200 #Таймаут по истечении которого автоматически начинается загрузка пункта по умолчанию.


    label Boot from first hard disk #Загружаемся с первого диска в системе.
    localboot 0x80


    label Thinstation #Запуск тонкого клиента для доступа к терминальным серверам
    kernel /pxe/thinstation/vmlinuz #полный путь до ядра на сервере
    append ramdisk_blocksize=4096 initrd=/pxe/thinstation/initrd root=/dev/ram0 ramdisk_size=524288 splash=silent
    vga=791 console=ttyS3 #Указание дополнительных параметров загрузки (параметры можно подсмотреть в родном isolinux.cfg содержащимся в фале образа iso )


    menu begin # Начало Субменю
    menu title Acronis Products # название субменю


    label .. #Возврат выше на уровень
    menu exit


    label Acronis True Image Echo Enterprise
    kernel /pxe/acronis/echoen/kernel
    append initrd=/pxe/acronis/echoen/ramdisk /s ramdisk_size=40000 quiet vga=791

    label Acronis Disk Director 10
    kernel /pxe/acronis/diskdirector/kernel
    append initrd=/pxe/acronis/diskdirector/ramdisk /s ramdisk_size=40000 quiet vga=791

    menu end # Конец субменю


    Распаковываем архив. Берем тут или тут Внимание в архиве содержится полная и 100% рабочая сборка образов и загрузчик pxe (кроме Acronis)

    Что касается Acronis, а именно образов для загрузки, их можно извлечь из папки установленного продукта:

    Acronis True Image Echo Enterprise Server:
    C:\Program Files\Acronis\TrueImageEchoEnterpriseServer\BartPE\Files


    Находим 2 файла: kernel.dat и ramdisk.dat копируем их в папку

    \tftpboot\pxe\acronis\echoen

    и переименовываем в kernel и ramdisk.

    Acronis Disk Director:
    C:\Program Files\Acronis\Acronis Disk Director

    Аналогично пункту выше находим в папке фалы копируем в

    \tftpboot\pxe\acronis\diskdirector и переименовываем.



    Готово!



    Теперь идем на любую машину с PXE ROM включаем его в БИОСе и устанавливаем его приоритетным устройством загрузки

    http://img3.imageshack.us/img3/2897/vpc2k7pxeboot.png

    Сохраняем и перезагружаемся.



    Спасибо за внимание!

    Описание и документация


    Syslinux: syslinux.zytor.com/wiki/index.php/PXELINUX
    Thinstation: ru.wikipedia.org/wiki/Thinstation

    Метки:
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 49
    • +3
      >и минимумом полезных утилит
      Интересная фраза :)
      • 0
        хм) Честно сказать писал давно теперь и не помню почему так назвал)
      • 0
        А можете посоветовать, что делать, если на удаленной машине, куда мы хотим по сети ставить линукс, нету ни клавиатуры, ни монитора?
        • +1
          К сожалению посоветовать ничего проверенного не могу. Как вариант купить KVM или IP-KVM.
          Еще есть Intel AMT www.intel.com/cd/corporate/techtrends/EMEA/RUS/369661.htm На его счет так же сказать пока ничего не могу.
          • +2
            Ещё есть brain-damaged способ: Терминал через COM порт, а COM порт подключаем к соседней машине с интернетом. Заходим на эту машину удалённо.
            • 0
              Нужный способ порой. А где почитать можно?
              • +2
                Насколько я помню, Debian при установке запускает установщик на последовательном порту автоматически. Но не могу найти ничего по этому поводу в installation manual.

                Зато нашёл другой способ: preseed файл и установка по ssh: www.debian.org/releases/stable/i386/apbs04.html.en#preseed-network-console
                • +1
                  Посмотрел мельком не вникая.
                  занем мак машины. подсовываем в DHCP ему установщик он грузит ядро установщика и открывает SSH с пред установленным логином и паролем и в эту сессию сливает вывод установщика… об этом речь? я правильно понял?

                • +1
                  С тем же успехом можно сделать preseed и полностью автоматический.
                  Установка минимальной конфигурации + sshd, пароли и настройки минимальные в пресиде.
                  Бутится по dhcp, грузит инсталятор + пресид, устанвливается, ребутится и все. получаем машину с ssh.
              • 0
                Может уж тогда хотя бы Serial-over-LAN и через IPMI, если он есть?
              • НЛО прилетело и опубликовало эту надпись здесь
                • 0
                  Ну на сколько я помню придется еще шаманить с сетевыми интерфейсами, ведь драйвер то он подгрузит а конфиг в interfaces не пропишет.
                  • 0
                    Бывает, что ещё как привязывается. Как минимум, если в initrd нет драйверов нужной файловой системы + контроллера / чипсета — то ничего не загрузится. Ну и про разницу архитектур забывать не стоит. x86_64 система при всём желании на x86 не загрузится…
                  • 0
                    Крупные датацентры для таких случаев (где много серверов без мониторов) используют DSmanager который грузит специально подготовленные темплейты ОС которые по-сути есть tarball поставленной системы.
                    • 0
                      В теплейтах в ДЦ скорее всего учтены мои примечания по этому поводу (см.выше). да и железо там скорее всего одинаковое, хотя роли это и не играет.
                      • 0
                        Некоторое количество датацентров для такой цели использует Inquisitor — там как раз есть вариант загрузки по PXE с последующей инсталляцией заданной ОС в абсолютно автоматическом режиме в соответствии с заданным профилем.

                        Таким образом, все сводится к двум действиям: 1) машине с таким-то серийным номером в веб-интерфейсе нужно задать профиль «инсталлировать сюда такую-то ОС», 2) перезагрузить её в Inquisitor. После этого через 10-15 минут она готова к работе.
                      • 0
                        Можно использовать SysRescCD. Там в параметрах можно задавать IP и пароль root'а.
                        • 0
                          воспользуйтесь Chef.
                          еще почитайте про puppet и cfengine
                        • +2
                          И помним, что есть www.netboot.me/.
                          • 0
                            Полезный Ресурс. Не знал. Спасибо!
                          • 0
                            можно использовать dnsmasq, там встроен tftp сервер
                            • 0
                              Перезалейте пожалуйста файлик с рапиды куда-нибудь в более другое место.
                              • +1
                                dl.dropbox.com/u/3478682/tftpboot.zip Держи ссылку. Добавил в топик. Файл скоро станет доступен.
                                • 0
                                  Не удаляйте его если что — я сегодня его благополучно скачал
                              • НЛО прилетело и опубликовало эту надпись здесь
                                • +1
                                  круто. а как сделать то же самое, но на фрихе или на винде?
                                  • 0
                                    На винде Нужно поднять TFTP сервер (входит в комплект RIS ) И настроить в DHCP параметры для загрузки. Тут все подробно описано на примере WTWARE.
                                    • +5
                                      Использовать для этого RIS (Remote Installation Services) в Windows считается устаревшим способом. Начиная с Win2k3 SP2, рекомендуется вместо RIS для этих целей использовать WDS (Windows Deployment Services). WDS в качестве TFTP-сервера ставит под винду сервис tftpd.

                                      Что касается DHCP-опций, используемых при PXE-загрузке с образа на TFTP-сервере, то тут тоже хотелось бы кое-что уточнить. По приведённой ссылке предлагается в DHCP-опции 066 указывать IP-адрес TFTP-сервера, а в опции 067 указывать имя загрузочного образа на этом TFTP-сервере.
                                      В принципе это работает. Однако, согласно RFC 2132, в DHCP-опции 066 правильно будет указать не IP-адрес TFTP-сервера, а его имя. Имя в 66-й опции можно указать полное (FQDN) или короткое, но в случае короткого имени нужно обязательно передавать клиентам DNS-суффикс в DHCP-опции 015.
                                      При этом клиент самостоятельно будет разрешать имя сервера в IP-адрес через DNS-сервер. Но в этом случае IP-адрес DNS-сервера нужно также передать клиенту через DHCP в стандартной опции 006. Ну и на этом DNS-сервере должна быть соответствующая DNS-зона с соответствующей A-записью для TFTP-сервера.

                                      Кроме имени TFTP-сервера (DHCP-опция 066) рекомендуется через DHCP передавать клиентам и IP-адрес TFTP-сервера в опции 150 (на тот случай, если они его не смогут разрешить по имени через DNS).

                                      Ну а в опции 067, действительно, согласно RFC 2132, указывается имя загрузочного образа (например, pxelinux.0). Причём если образ лежит не в корне TFTP-сервера, то в этой опции указывается относительный путь к файлу-образу относительно корня TFTP (например, path/images/pxelinux.0).

                                      Имейте в виду, что если на DHCP задать опцию 060 = PXEClient, тогда опции 066 и 067 клиентом игнорируются, и PXE-клиент будет брать TFTP-сервер и имя образа из опции 043, где они записываются как-то хитро в бинарном виде.
                                      Если опця 060 определена как PXEClient, а опция 043 не задана (или если одновременно не заданы опции 060, 066, 067), тогда PXE-клиент по умолчанию считает TFTP-сервером для загрузки сам DHCP-сервер и пытается подключиться по TFTP к нему.

                                      WDS, насколько я помню, как раз при установке прописывает в DHCP опции 060 = PXEClient и опцию 043 с параметрами TFTP. По мне так лучше прибить эти опции и сделать через интуитивно понятные RFC-стандартизованные опции 6 (DNS server IP), 15 (DNS-suffix), 66 (TFTP-server name), 67 (boot image path/name), 150 (TFTP-server IP).

                                      Полный список DHCP-опций можно найти здесь.
                                      Если DHCP-сервер тоже виндовый, то его можно конфигурировать (в частности задавать и удалять опции) с помощью netsh. Примерно так:
                                      netsh dhcp server 10.10.10.5 set optionvalue 150 IPADDRESS 10.10.10.10
                                      (за синтаксис не ручаюсь, проверить сейчас негде, см. справку по netsh).
                                      • 0
                                        вот за это спасибо. я просто сам ни разу не поднимал, везде уже готовое было. а сейчас из возможных хостов только DC win + dhcp и freebsd. до весны надо настроить всё.
                                        • 0
                                          Как в wds засунуть iso c linux, он же только wim-образа понимает? :)

                                          P.S. Вот как раз тут с wds и deployment борюсь может знаете в чем трабл. (http://clck.ru/ubf)
                                          • +1
                                            Как в wds засунуть iso c linux, он же только wim-образа понимает? :)
                                            А кто тут вообще говорил о запихивании в WDS ISO с Linux? Возможность загрузки ОС с некоторого Live-образа через TFTP и возможность удалённой заливки HDD с дискового образа (того же виндового wim) через WDS — это не одно и то же. И одно другому не мешает.
                                            Я лично наблюдал Win2k3 с поднятым WDS и виндовым tftpd, где по умолчанию грузился некий образ pxelinux.0 на базе PXELINUX, который давал меню с выбором варианта дальнейшей загрузки, среди которых:
                                            * загрузка с HDD
                                            * несколько вариантов для загрузки по сети с LiveCD-образов (типа Acronis DiskDirector, ERD Commander и всяких многофункциональных Live-образов с кучей дисковых утилит, антивирусов, hardware-тестов и т.п.)
                                            * и, собственно, загрузка Windows Deployment для заливки на HDD клиента Windows с одного из wim-образов, размещенных на WDS.
                                            И в зависимости от выбора, сделанного в этом меню, далее уже шла загрузка соответствующего загрузочного Live-образа или WDS для разливки виндовсов.
                                      • 0
                                        ISC DHCPD, ATFTPD, NFS, Nginx должны работать и под фрей. Это на счет хоста.
                                        А про клиент — Google
                                      • –5
                                        Linux это просто)
                                        • 0
                                          Мало того, это еще и интересно :)
                                          • 0
                                            hpa умеет работать демоном, лучше поправить конфиг и использовать его отдельно от inetd
                                            • 0
                                              В чем причина не приязни к inetd? Только с аргументами. Интересно. Когда-то давно слышал про его проблемы с безопасностью.
                                              • 0
                                                Он практически не защищен от (D)DoS, сложность ограничения использования порта, ну и для тех, кто просто поставил и забыл есть вероятность поставить лишних демонов, через которые может быть взломан сервер.
                                            • 0
                                              Интересно, можно как-нибудь подружить два tftp-сервера для одной subnet при условии что один из них это wds, который требует такого для global:
                                              option option-66 code 66 = text;
                                              option option-67 code 67 = text;

                                              а такое для subnet:
                                              option option-66 «192.168.1.126»;
                                              option option-67 «boot\\x86\\wdsnbp.com\000»;
                                              next-server 192.168.1.126;
                                              • 0
                                                Интересно, можно как-нибудь подружить два tftp-сервера для одной subnet при условии что один из них это wds
                                                Можно рассмотреть вариант одного TFTP-сервера с дальнейшим ветвлением вариантов загрузки: WDS и что-то линуксовое. Но тогда поднимать это только на базе Windows, т.к. я не знаю способов поднять WDS на чём-то кроме Windows.

                                                Либо, если поднимать два TFTP-сервера, то делать всё же деление на области (DHCP scope) и в параметрах каждого скоупа прописывать свои опции для указания TFTP-сервера и образа. Но тут у клиентов не будет варианта выбора: в какой scope попал, с соответствующего TFTP-сервера и грузишься.
                                                • 0
                                                  То есть нельзя сделать в меню tftp-сервера (который будет на linux) что-то в духе теперь нужно пойти к другому tftp-серверу?

                                                  У меня с dhcp3 такая проблема что он ругается на опцию tftp указанyю для разных subnet:
                                                  /etc/dhcp3/dhcpd.conf line 115: unknown option dhcp.tftp-server-name
                                                  option tftp-server-name «192.168.1.3»
                                                  ^

                                                  • 0
                                                    То есть нельзя сделать в меню tftp-сервера (который будет на linux) что-то в духе теперь нужно пойти к другому tftp-серверу?
                                                    Затрудняюсь ответить. Никогда не реализовывал и даже не видел подобного.
                                                    • 0
                                                      можно бы, а ....? распределение нагрузки?
                                                      • 0
                                                        Все проще. Чтобы деплоимить на машины wim-образы c помощью wds
                                                • 0
                                                  tftp 10.22.22.22
                                                  tftp> get pxelinux.0

                                                  Как видно из ответа TFTP клиента мы успешно получили файл размером 16300 байт за 0 секунд.

                                                  у меня как раз-таки не может скачать, просто висит, а потом выдает Timeout. Не может же быть, что я за два предыдущих шага напортачил где-то?

                                                  Ubuntu Server, 8.04. Два eth, если это поможет
                                                  • 0
                                                    А как туда <<корректно>> развернуть образ WinXP для установки по сети?
                                                    • 0
                                                      Начиная с версии Syslinux 3.84, можно использовать неразвернутые iso-образы для загрузки. WinXP пока невозможно.
                                                      • 0
                                                        Вот PXE за 9 мин)

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