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
Теперь можно загрузиться по сети для проверки и проверить, что всё работает