PXE-сервер на CentOS для сетевой загрузки за 5 минут
10 Nov 2016PXE-сервер - это полезная и удобная вещь во многих случаях:
- когда у оборудования или у вас проблемы с загрузкой иным способом;
 - когда есть N экземляров железа, N портов в коммутаторе, N патч-кордов… :)
 - когда это просто удобно!
 
Для полноценной работы PXE-сервера необходимо три пакета: tftp-server, syslinux, dhcp. Поэтому:
$ yum install tftp-server syslinux dhcpПроверьте, что в xinetd tftp-сервис включен
$ grep disable /etc/xinetd.d/tftp 
  disable                 = noЕсли да, то перезапустите xinetd
$ service xinetd restartЕсли всё хорошо, то включите сервис в автозапуск
$ systemctl enable xinetdСоздайте каталог для tftpboot и скопируйте файлы для загрузки syslinux:
$ mkdir /tftboot
$ cp /usr/lib/syslinux/gpxelinux.0 /tftpboot
$ cp /usr/lib/syslinux/mboot.c32 /tftpboot
$ cp /usr/lib/syslinux/chain.c32 /tftpboot
$ cp /usr/lib/syslinux/vesamenu.c32 /tftpbootПредположим, что вы будете загружать по сети маленький GNU/Linux Slitaz, поэтому положите то, что надо, куда надо:
$ mkdir -p /tftpboot/images/slitaz
cp slitaz/{bzImage,rootfs.gz} /tftpboot/images/slitazСоздайте каталог для конфигурационного файла
mkdir /tftpboot/pxelinux.cfgНу и сам конфигурационный файл (пример)
$ cat /tftpboot/pxelinux.cfg/default
    default vesamenu.c32
    prompt 0
    timeout 100
    ONTIMEOUT local
    MENU TITLE WELCOME TO PXE BOOT
    LABEL local
            MENU LABEL Boot local hard drive
            LOCALBOOT 0
    LABEL Slitaz
            MENU LABEL Slitaz
            KERNEL /images/slitaz/bzImage
            APPEND initrd=/images/slitaz/rootfs.gz root=/dev/null autologin rw vga=normal lang=ru_RU kmap=en user=root sound=noОсталось настроить DHCP-сервер. В данном варианте приведены настройки для сервера, который ничего больше не делает, кроме как раздает IP так называемым PXEClients
$ cat /etc/dhcp/dhcpd.conf 
    ddns-update-style none;
    option domain-name "<your.domain>";
    option domain-name-servers 192.168.111.1;
    default-lease-time 600;
    max-lease-time 7200;
    log-facility local7;
    class "pxeclients" {
    match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
    filename "gpxelinux.0";
    }
    shared-network pxe {
    subnet 192.168.111.0 netmask 255.255.255.0 {
    }
    pool {
    allow members of "pxeclients";
    range dynamic-bootp 192.168.111.100 192.168.111.200;
    }
    }
    Если в конфигурации всё ОК, то запустим/перезапустим и добавим в автозапуск DHCP-сервис
$ service dhcp restart
$ systemctl enable dhcpТеперь можно загрузиться по сети для проверки и проверить, что всё работает
