Передовые виртуальные и выделенные серверы для проектов любой сложности и структуры.
 Подписывайтесь на Telegram канал!

Настроим загрузочный PXE сервер. Загрузить настроенную операционную систему на компьютере без жесткого диска всегда приятно. Использовать утилиты для диагностики и работы с жесткими дисками удобно и практично. Настройка на любом дистрибутиве Linux.

Введение

Давно хотел иметь в локальной сети загрузочный сервер PXE с помощью которого можно запускать на компьютерах не имеющих жесткого диска нужную мне операционную систему со всеми необходимыми настройками. Использование набора утилит для диагностики и работы с системой загружаемых по локальной сети тоже весьма удобная штука. В дистрибутиве Calculate Linux создание своего загрузочного образа делается просто, понятно и при хорошем знании позволяет творить чудеса.

После всех настроек мы получим возможность используя PXE загрузчик:

  • Загружать операционную систему Calculate Linux,
  • Проверить память программой Memtest86+,
  • Проверить жесткие диски программами MHDD и Victoria,
  • Работать с жесткими дисками программой Clonezilla.

Вся настройка производится на операционной система CentOS 7. Настроить можно и на любой другой системе, так как используемые пакеты присутствую во всех операционных системах Linux.

Подготовка системы для работы PXE сервера

Для загрузки по PXE в Bios подключаемого компьютера должна быть включена и настроена данная функция.

Установим необходимые пакеты без вопросов:

yum -y install dhcp xinetd tftp tftp-server nfs-utils syslinux

Настройка DHCP сервера

В локальной сети должен работать только один сервер DHCP.

Мои настройки будут производится на системе работающей в качестве шлюза локальной сети. Я не буду рассматривать настройку самого шлюза а лишь затрону моменты необходимые для нас.

Параметры сетевой карты которая смотрит во внутреннюю сеть:

TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_PEERDNS=no
IPV6_PEERROUTES=no
IPV6_FAILURE_FATAL=no
NAME=enp0s8
UUID=d785f929-dcfb-436a-8ba7-59189a394aa6
DEVICE=enp0s8
# Загрузка при старте
ONBOOT=yes
IPADDR=192.168.1.1
PREFIX=24

Как видна моя внутренняя локальная сеть будет 192.168.1.0/24

Приведем конфигурационный файл DHCP сервера к следующему виду:

vim /etc/dhcp/dhcpd.conf
= вывод команды с необходимыми изменениями =
default-lease-time 32400;
max-lease-time 604800;
min-lease-time 7200;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
option domain-name "sevo44.loc";
option domain-name-servers 192.168.1.1;
range 192.168.1.150 192.168.1.220;
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option ntp-servers 192.168.1.1;
#PXE SERVER IP
next-server 192.168.1.1;
filename "pxelinux.0";
}

Добавляем в автозагрузку:

systemctl enable dhcpd

Запустим службу:

systemctl start dhcpd

Использование DHCP сервера очень удобно, так как позволяет указывает различные параметры которые значительно упрощают жизнь при работе с локальной сетью.

Одно из таких возможностей, это закреплении ip адреса компьютера на основании мак адреса сетевой карты. Достаточно зная мак адрес нужного компьютера добавить в файл настройки DHCP строчки:

host hp4530 {
hardware ethernet 64:31:50:95:b1:b7; 
fixed-address 192.168.1.5;
}

После перезагрузки службы параметры вступят в силу:

systemctl restart dhcpd

Настройка TFTP сервера

TFTP сервер используется главным образом для первоначальной загрузки без дисковых рабочих систем. Настроим конфигурационный файл:

vim /etc/xinetd.d/tftp
= вывод команды с необходимыми изменениями =
service tftp
 {
 socket_type = dgram
 protocol = udp
 wait = yes
 user = root
 server = /usr/sbin/in.tftpd
 # Путь для расположения файлов
 server_args = -s /var/lib/tftpboot
 # Для включения поменяем yes на no
 disable = no
 per_source = 11
 cps = 100 2
 flags = IPv4
 }

Добавляем в автозагрузку:

systemctl enable xinetd

Запустим службу:

systemctl start xinetd

Настройка NFS сервера

Приведем файл настройки к виду:

vim /etc/exports
= вывод команды с необходимыми изменениями =
/var/lib/tftpboot/ 192.168.1.0/24(rw,no_root_squash)

Например, я использую сервер nfs для размещения бэкапов виртуальных машин Proxmox.

В моем случае необходимо добавить строчку:

/sevo44/pve/backup 192.168.0.100(rw,sync,no_root_squash,no_all_squash)

Где параметры имеют следующие значения:

  • /sevo44/pve/backup — расшариваемая директория;
  • 192.168.0.100 — IP адрес клиента с которого может быть подключение (можно указать 192.168.0.0/24 тогда будет возможность подключения для всей под сети);
  • rw – доступ на чтение и запись (может принимать значение ro-только чтение);
  • sync – синхронный режим доступа(может принимать обратное значение- async). sync (async) — указывает, что сервер должен отвечать на запросы только после записи на диск изменений, выполненных этими запросами. Опция async указывает серверу не ждать записи информации на диск, что повышает производительность, но понижает надежность, т.к. в случае обрыва соединения или отказа оборудования возможна потеря данных;
  • no_root_squash – запрет подмены uid/gid для суперпользователя (root). По умолчанию пользователь root на клиентской машине не будет иметь доступа к разделяемой директории сервера. Этой опцией мы снимаем это ограничение. В целях безопасности этого лучше не делать;
  • all_squash / no_all_squash — установка подмены идентификатора от всех пользователей all_squash — подмена запросов от ВСЕХ пользователей (не только root) на анонимного uid/gid, либо на пользователя, заданного в параметре anonuid/anongid. Используется обычно для публичного экспорта директорий. no_all_squash — запрет подмены uid/gid для от всех пользователей.

Создание папки и назначение прав доступа осуществляется командами:

mkdir -p /sevo44/pve/backup
chmod -R 777 /sevo44/pve/backup

Для полноценной работы необходимо открыть доступ необходимым портам. Для FirewallD команды имеют вид:

firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --permanent --add-port=54302/tcp
firewall-cmd --permanent --add-port=20048/tcp
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --permanent --add-port=46666/tcp
firewall-cmd --permanent --add-port=42955/tcp
firewall-cmd --permanent --add-port=875/tcp
firewall-cmd --permanent --zone=public --add-service=nfs
firewall-cmd --permanent --zone=public --add-service=mountd
firewall-cmd --permanent --zone=public --add-service=rpc-bind
= применим изменения =
firewall-cmd --reload

Внимательно отнеситесь к указанию зоны! Более подробно можно прочитать в статье FirewallD базовая настройка.

Добавляем в автозагрузку:

systemctl enable nfs-server

Запустим службу:

systemctl start nfs-server

Создание загрузочного меню PXE сервера

Скопируем необходимые файлы для работы меню:

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot
cp /usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot
cp /usr/share/syslinux/memdisk /var/lib/tftpboot
cp /usr/share/syslinux/mboot.c32 /var/lib/tftpboot
cp /usr/share/syslinux/chain.c32 /var/lib/tftpboot

Создадим папку для файлов меню загрузки:

mkdir /var/lib/tftpboot/pxelinux.cfg

Создание главного меню PXE сервера

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

Создадим файл главного меню:

mcedit /var/lib/tftpboot/pxelinux.cfg/default
= необходимые параметры с комментариями =
default vesamenu.c32
# Фон для меню
menu background backgrounds/fon.png
prompt 0
# Время через которое стартует первый пункт меню
timeout 100

menu title ##### PXE BOOT MENU: #####

Label 10
menu label Calculate 17 KDE & SEVO44
kernel live/calculate/cld17kde/boot/vmlinuz
append initrd=live/calculate/cld17kde/boot/initrd root=nfs:192.168.1.1:/var/lib/tftpboot/live/calculate/cld17kde calculate=lang:ru_RU,keymap:ru_RU,timezone:Europe/Moscow rw selinux=0

LABEL # ADMIN SETTINGS

LABEL 20
# Пароль для запуска
menu passwd 777
MENU LABEL Utilits
KERNEL vesamenu.c32
APPEND pxelinux.cfg/utilits

Label # BOOT LOCAL

label 30
menu label Boot from local drive
localboot 0

Файл фонового изображения меню должен быть размером 640х480 пикселей, в формате PNG или JPEG.

Создадим папку для фоновых изображений и папку для загрузочных live образов систем:

mkdir /var/lib/tftpboot/live
mkdir /var/lib/tftpboot/backgrounds

Загружаем необходимый iso образ любыми удобными вам способами и копируем содержимое в нужную папку.

При использовании образа с графической оболочкой KDE для стабильной работы необходимо использовать 4 G оперативной памяти!

Приведу лишь команды которые необходимы для монтирования и размонтирования образа iso:

mount -o loop /root/calculate_kde_sevo44.iso /mnt/iso
umount /mnt/iso

Настройки параметров для загрузки разных операционных систем различаются.

В данной настройке по умолчанию грузится live образ. В случае если вам необходима по умолчанию загрузка с жесткого диска, то разместите необходимый пункт первым в меню.

Моё главное меню:

PXE menu sevo44

Создание подменю для PXE сервера

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

Мой файл подменю для utilits выглядит так:

mcedit /var/lib/tftpboot/pxelinux.cfg/utilits
= вывод команды с пояснениями =
default vesamenu.c32
menu background backgrounds/fon.png

menu title ##### Utilits: #####

label # TEST

LABEL 10
MENU LABEL Memtest86+
KERNEL utilits/memtest86

LABEL 11
MENU LABEL MHDD
kernel memdisk
initrd utilits/mhdd32ver4.6.iso
append iso raw

LABEL 12
MENU LABEL Victoria 3.5 HDD
kernel memdisk
initrd utilits/v35.iso
append iso raw

label # Backup/Recovery

LABEL 20
MENU LABEL Clonezilla Live 2.5.2-17
KERNEL utilits/zilla/live/vmlinuz
APPEND initrd=utilits/zilla/live/initrd.img boot=live username=user union=overlay config components quiet noswap edd=on nomodeset nodmraid locales=ru_RU.UTF-8 keyboard-layouts=NONE ocs_live_run="ocs-live-general" ocs_live_extra_param="" video=uvesafb:mode_option=1024x768-16 ocs_live_batch=no net.ifnames=0 nosplash noprompt fetch=tftp://192.168.1.1/utilits/zilla/live/filesystem.squashfs

Label ###
LABEL 30
MENU LABEL NEXT
KERNEL vesamenu.c32
APPEND pxelinux.cfg/default

Скачать необходимый iso образ Clonezilla вы на сайт разработчика. На сайте вы можете найти всю необходимую информацию для настройки и работы с этой замечательной системой.

Скачать утилиты использованные в данном описании.

Моё меню с утилитами:

PXE menu utilits sevo44

Видео

На видео показано как работает система Calculate Linux которую я настроил под свои нужды запускаемая с помощью PXE сервера.

Вывод

Имея под рукой такой сервер я без труда могу запустить на любом компьютере, с возможностью PXE загрузки, операционную систему и поработать в ней. Можно загрузить ClineZilla и произвести любые манипуляции с жесткими дисками. Конечно система с KDE тяжеловата и я обязательно настрою образ с XFCE, для работы на компьютерах со слабыми техническими параметрами.

Понравилась статья? Поделитесь ей с друзьями!
Пожалуйста, оставляйте свои комментарии

Читая их я получаю информацию которая позволяет мне улучшить качество написания статей. Кроме того, оставляя комментарии вы помогаете сайту получить более высокий рейтинг у поисковых систем. Давайте общаться.

4 комментариев для статьи “PXE загрузочный сервер

  1. Я как-то игрался с rdp сервером но некоторые сложности заставили меня отказаться от этой идеи. А по этой схеме можно подключаться к нормально работающей системе в локальной сети. (Ну чтоб с другого компа например более слабого пользоваться всеми перимуществами более мощного стоящего в другой комнате)?

    1. Сложности конечно есть. В моем варианте меня всё устраивает на все 100% ну а дальше покажет время. Linux очень динамично развивается и порой то с чем бился год назад в новых версиях настраивается на раз два. По такой схеме я и подключаюсь. Настроил RDP сервер на машине где установлена программа 1С:Предприятие 8.3. Один раз был случай что полетел жесткий диск на рабочем ноутбуке а мне надо было срочно сделать в ней один документ. Достал какой то древний компьютер без диска загрузился по PXE и подключившись по RDP сделал всё что мне было нужно.

  2. По такой схеме у меня в одном офисе работали пользователи в терминале. Для них был собран дистрибутив с голыми иксами и автозапуском rdp клиента. Вариант вполне рабочий и функционировал более ли менее сносно. Но мелкие баги то с разрешением экрана, то с переключением раскладки, то с невозможностью подключаться после обновления rdp и смены версии протокола, привели к тому, что было решено использовать самые простые неттопы с windows starter. На них все работало без проблем и не требовало вообще никакого обслуживания.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *