Настроим загрузочный 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 сервера
Все утилиты я намеренно вывел в отдельное подменю и закрыл паролем. Так мне спокойней и пользователи не полезут туда куда им не надо.
Мой файл подменю для 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 вы на сайт разработчика. На сайте вы можете найти всю необходимую информацию для настройки и работы с этой замечательной системой.
Скачать утилиты использованные в данном описании.
Моё меню с утилитами:
Видео
На видео показано как работает система Calculate Linux которую я настроил под свои нужды запускаемая с помощью PXE сервера.
Вывод
Имея под рукой такой сервер я без труда могу запустить на любом компьютере, с возможностью PXE загрузки, операционную систему и поработать в ней. Можно загрузить ClineZilla и произвести любые манипуляции с жесткими дисками. Конечно система с KDE тяжеловата и я обязательно настрою образ с XFCE, для работы на компьютерах со слабыми техническими параметрами.
Я как-то игрался с rdp сервером но некоторые сложности заставили меня отказаться от этой идеи. А по этой схеме можно подключаться к нормально работающей системе в локальной сети. (Ну чтоб с другого компа например более слабого пользоваться всеми перимуществами более мощного стоящего в другой комнате)?
Сложности конечно есть. В моем варианте меня всё устраивает на все 100% ну а дальше покажет время. Linux очень динамично развивается и порой то с чем бился год назад в новых версиях настраивается на раз два. По такой схеме я и подключаюсь. Настроил RDP сервер на машине где установлена программа 1С:Предприятие 8.3. Один раз был случай что полетел жесткий диск на рабочем ноутбуке а мне надо было срочно сделать в ней один документ. Достал какой то древний компьютер без диска загрузился по PXE и подключившись по RDP сделал всё что мне было нужно.
По такой схеме у меня в одном офисе работали пользователи в терминале. Для них был собран дистрибутив с голыми иксами и автозапуском rdp клиента. Вариант вполне рабочий и функционировал более ли менее сносно. Но мелкие баги то с разрешением экрана, то с переключением раскладки, то с невозможностью подключаться после обновления rdp и смены версии протокола, привели к тому, что было решено использовать самые простые неттопы с windows starter. На них все работало без проблем и не требовало вообще никакого обслуживания.
На какой версии был собран дистрибутив?