PXE загрузка (организация и использование)

Настройка, программирование, распределённые вычисления

Модераторы: Olej, bellic, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

PXE загрузка (организация и использование)

Непрочитанное сообщение Olej » 05 ноя 2012, 16:34

К теме такой уже подступали не раз ... но детально она ещё не рассматривалась.

Исходные данные:
- есть работающая инсталляция Linux (не важно какой дистрибутив)...
- с развёрнутой сетью

Задача:
- добавить в эту инсталляцию то, чего не хватает для сетевой PXE загрузки...
- чтобы запускаемые новые рабочие станции (бездисковые, положим) при старте (включении) загружались по PXE с названной выше работающей инсталляции.
- (рабочие станции могут быть как реальные в LAN, так и виртуальные машины в виртуальной сети ... значения это, похоже, не имеет)

Как? ... детально и пошагово.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: PXE загрузка (организация и использование)

Непрочитанное сообщение Olej » 05 ноя 2012, 16:46

Нужные материалы по PXE:

- PXE
Авторы: Сергей Черепенин, Игорь Чубин
Изображение
pxe — Загрузка PXE-загрузчика. Прошивкой PXE, встроенной в сетевую карту, выполняется загрузка загрузчика pxelinux.
dhcp1 — Получение IP-адреса и адреса TFTP-сервера. Загрузчик pxelinux делает DHCP-запрос и с его помощью получает IP-адрес и адрес TFTP-сервера. По умолчанию адрес TFTP-сервера равен адресу DHCP-сервера.
tftp — Обращение к TFTP-серверу для получения ядра Linux. Загрузчик pxelinux обращается к TFTP-серверу и запрашивает у него ядро Linux (и, при необходимости, образ initrd).
kernel — Запуск ядра Linux. После того как ядро Linux загружено, управление передаётся ему.
dhcp2 — Получение IP-адреса DHCP. Ядро Linux делает запрос DHCP, с помощью которого получает свой IP-адрес, адрес NFS-сервера, на котором находится корневая файловая система, а также путь к местоположению этой файловой системы на диске.
nfs — Монтирование корневой файловой системы. Корневая файловая система монтируется.
init — Вызов процесса init. На корневой файловой системе находится файл /sbin/init, которому передаётся управление.
Самые любопытные места я здесь выделил:
1. что IP TFTP-сервера, где лежит загружаемая система, по умолчанию совпадает с адресом DHCP-сервера, откуда получался IP загружаемого хоста ... а значит, что не по умолчанию может и не совпадать.
2. что запрос к DHCP-серверу делается дважды, и что IP этих запросов могут, в принципе, не совпадать.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: PXE загрузка (организация и использование)

Непрочитанное сообщение Olej » 05 ноя 2012, 16:54

homecluster писал(а):
- (рабочие станции могут быть как реальные в LAN, так и виртуальные машины в виртуальной сети ... значения это, похоже, не имеет)
Похоже что различия всё же есть. Виртуальная сеть отличается от реальной.
Чем отличаются? - Ничем не отличаются. ;-)

Т.е. проводами и хабами, конечно, отличаются ;-), но с точки зрения Linux они работают через одну и ту же сетевую подсистему, через протокол TCP/IP, когда система Linux никак не различает интерфейсы на которых это происходит.

На самом деле (если в деталях), там всё сложнее:
- в зависимости от настройки режима сетевого интерфейса виртуальной машины
- виртуальная машины может отправлять IP пакеты в самые разнообразные места
- а). в сетевую систему хост-машины, которая потом будет "маскарадить" эти пакеты в IP реальной LAN (NAT-режим);
- б). непосредственно в LAN на уровне MAC-пакетов Ethernet (сетевой мост);
- в). внутрь сетевой подсистемы хост-машины (внутренняя сеть);
- ... и ещё 2-3 режима настройки, отличающие то, как, с какой адресацией и куда будут направляться IP-пакеты.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: PXE загрузка (организация и использование)

Непрочитанное сообщение Olej » 06 ноя 2012, 00:35

homecluster писал(а):
Чем отличаются? - Ничем не отличаются.

Отличается тем что одна крутиться в быстрой памяти а вторая крутиться на сетевых адаптерах и свичах (как минимум) соединённых кабелями на коннекторах.
Это вы просто не очень сильно понимаете кто, где и как крутится :lol:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: PXE загрузка (организация и использование)

Непрочитанное сообщение Olej » 06 ноя 2012, 00:37

Olej писал(а):Нужные материалы по PXE:
Поехали дальше ...

- Настройка PXE сервера на Linux Ubuntu / Debian

- Setting up a server for PXE network booting - одно из лучших руководств Debian Administration (хоть оно и относится к 2006г.), мне особенно интересно было здесь конфигурирование в качестве DHCP-сервера dnsmasq, а не dhcp3-server (который все переписывают друг у друга ;-) ).

- http://www.openkazan.info/Debian-Suse-Fedora-Ubuntu-Linux-PXE-boot - это место интересно тем, что упоминается, хоть и очень кратко, о возможности установки (альтернативно) разных TFTP-серверов:
atftpd
dnsmasq
tftpd
tftpd-hpa
В частности, и встроенного TFTP в dnsmasq. Это интересный вариант, потому как dnsmasq при этом объединяет "3 в одном флаконе": DNS + DHCP + TFTP - всё, что нужно для организации PXE загрузки со стороны сервера загрузки.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: PXE загрузка (организация и использование)

Непрочитанное сообщение Olej » 08 ноя 2012, 02:01

Olej писал(а):В частности, и встроенного TFTP в dnsmasq. Это интересный вариант, потому как dnsmasq при этом объединяет "3 в одном флаконе": DNS + DHCP + TFTP - всё, что нужно для организации PXE загрузки со стороны сервера загрузки.
Для начала, чтобы не сильно вникать, а посмотреть как это у людей делается, глянем PXE загрузку как она сделана на терминальном хосте кластера: кластер PelicanHPC в VirtualBox.

Кластер PelicanHPC очень неплох для рассмотрения, в нём ещё до запуска кластера (команда/скрипт pelican_setup) уже запущен SSH-сервер:

Код: Выделить всё

bash-4.2$ ssh user@192.168.1.20
user@192.168.1.20's password: 

user@pel1:~$ cat /etc/debian_version 
6.0.5
user@pel1:~$ who
user     tty1         2012-11-07 22:52
user     pts/0        2012-11-07 22:52 (:0.0)
user     pts/1        2012-11-07 22:52 (:0.0)
user     pts/2        2012-11-07 22:58 (192.168.1.5)
Вот что у них из запущенных процесов к этому времени, интересных для PXE

Код: Выделить всё

user@pel1:~$ ps -A | grep ssh
 7071 ?        00:00:00 ssh-agent
 7154 ?        00:00:00 sshd
 7188 ?        00:00:00 sshd
 7193 ?        00:00:00 sshd
 7235 ?        00:00:00 sshd
 7240 ?        00:00:00 sshd
user@pel1:~$ ps -A | grep netd
 1499 ?        00:00:00 xinetd

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: PXE загрузка (организация и использование)

Непрочитанное сообщение Olej » 08 ноя 2012, 02:11

Olej писал(а): Кластер PelicanHPC очень неплох для рассмотрения, в нём ещё до запуска кластера (команда/скрипт pelican_setup) уже запущен SSH-сервер:
Но ещё результативнее подключиться к нему по SSH с рабочего Linux-компьютера в одной из панелей mc.
Примерно в такой последовательности:
mc_056.png
mc_056.png (128.24 КБ) 8830 просмотров
mc_057.png
mc_057.png (116.57 КБ) 8831 просмотр
mc_058.png
mc_058.png (99.01 КБ) 8831 просмотр
При этом получаем возможность легко гонять файлы (F5) на/из каталогов кластера на рабочий компьютер.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: PXE загрузка (организация и использование)

Непрочитанное сообщение Olej » 08 ноя 2012, 02:59

До выполнения конфигурации командой pelican_setup, в каталоге TFTP-загрузки лежит только:

Код: Выделить всё

user@pel1:~$ cd /var/lib/tftpboot/
user@pel1:/var/lib/tftpboot$ ls -l
total 10996
-rw-r--r-- 1 root root 11229260 Nov  7 22:52 initrd.img
Запущен суперсервер xinetd:

Код: Выделить всё

user@pel1:~$ ps -A | grep netd
 1499 ?        00:00:00 xinetd
Все скрипты инициализации у них лежат вот здесь:

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ which pelican_setup
/usr/bin/pelican_setup
user@pel1:/var/lib/tftpboot$ ls -l /usr/bin/pelican*
-rwxr-xr-x 1 root root 9444 Jun 21 10:53 /usr/bin/pelican_boot_setup
-rwxr-xr-x 1 root root 1592 Jun 21 10:53 /usr/bin/pelican_nodes
-rwxr-xr-x 1 root root 8597 Jun 21 10:53 /usr/bin/pelican_restart_hpc
-rwxr-xr-x 1 root root   99 Jun 21 10:53 /usr/bin/pelican_setup
-rwxr-xr-x 1 root root 4320 Jun 21 10:53 /usr/bin/pelican_setup_netdevice
-rwxr-xr-x 1 root root 1012 Jun 21 10:53 /usr/bin/pelican_setup_user
-rwxr-xr-x 1 root root 3386 Jun 21 10:53 /usr/bin/pelican_terminalserver
А вот после выполнения конфигурации командой pelican_setup, после чего готово PXE, всё становится интереснее:

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ ls -l /etc/xinetd.d
total 9
-rw-r--r-- 1 root root 798 Mar 24  2008 chargen
-rw-r--r-- 1 root root 660 Mar 24  2008 daytime
-rw-r--r-- 1 root root 549 Mar 24  2008 discard
-rw-r--r-- 1 root root 580 Mar 24  2008 echo
-rw-r--r-- 1 root root 274 Nov  7 23:27 tftp-hpa
-rw-r--r-- 1 root root 727 Mar 24  2008 time
По дате хорошо видно, что они дописали конф. файл tftp-hpa:

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ cat /etc/xinetd.d/tftp-hpa 
service tftp
{
	disable         = no
	id              = chargen-dgram
        socket_type     = dgram
        protocol        = udp
        user            = root
        wait            = yes
	server          = /usr/sbin/in.tftpd
	server_args     = -s /var/lib/tftpboot/
}
И это, собственно, единственный разрешённый (disable = no) сервер для xinetd. Сам xinetd перезапущен (PID поменялся, см. выше):

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ ps -A | grep netd
 7571 ?        00:00:00 xinetd
xinetd подымает FTFP сервер:

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ ps -A | grep ftp
 7579 ?        00:00:00 in.tftpd
И запущен dnsmasq, который у них совмещает DNS + DHCP:

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ ps -A | grep dns
 7592 ?        00:00:00 dnsmasq
Всё, в общем, понятно ... но неожиданностью (для меня) было то, что они при конфигурировании, динамически дописали содержимое TFTP-каталога для PXE-загрузки :-o :

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ ls -l /var/lib/tftpboot/
total 13404
-rw-r--r-- 1 root root 11229260 Nov  7 22:52 initrd.img
-rw-r--r-- 1 root root    26816 Nov  7 23:27 pxelinux.0
drwxr-xr-x 2 root root       60 Nov  7 23:27 pxelinux.cfg
-rw-r--r-- 1 root root  2424448 Nov  7 23:27 vmlinuz-2.6.32-5-amd64
До конфигурирования здесь был только образ файловой системы initrd.img (см. выше).
Ну хитрецы! ;-)

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ ls /var/lib/tftpboot/pxelinux.cfg/
default
user@pel1:/var/lib/tftpboot$ cat /var/lib/tftpboot/pxelinux.cfg/default 
DEFAULT linux
LABEL linux
KERNEL vmlinuz-2.6.32-5-amd64
APPEND initrd=initrd.img  nfsroot=10.11.12.1:/live/image ip=dhcp rw noautologin noxautologin union=aufs netboot=nfs boot=live

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: PXE загрузка (организация и использование)

Непрочитанное сообщение Olej » 08 ноя 2012, 03:06

Olej писал(а):

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ ls -l /var/lib/tftpboot/
total 13404
-rw-r--r-- 1 root root 11229260 Nov  7 22:52 initrd.img
-rw-r--r-- 1 root root    26816 Nov  7 23:27 pxelinux.0
drwxr-xr-x 2 root root       60 Nov  7 23:27 pxelinux.cfg
-rw-r--r-- 1 root root  2424448 Nov  7 23:27 vmlinuz-2.6.32-5-amd64
До конфигурирования здесь был только образ файловой системы initrd.img (см. выше).
Ну хитрецы! ;-)
Ядро, как я понимаю, при конфигурировании к PXE они копируют отсюда, чтобы ядра терминального и всех остальных хостов совпадали:

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ ls -l /boot/vmlinuz-2.6.32-5-amd64 
-rw-r--r-- 1 root root 2424448 May  6  2012 /boot/vmlinuz-2.6.32-5-amd64
А загрузчик сетевой - вот отсюда:

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ ls -l /usr/lib/syslinux/pxelinux.0 
-rw-r--r-- 1 root root 26816 Oct 14  2010 /usr/lib/syslinux/pxelinux.0

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: PXE загрузка (организация и использование)

Непрочитанное сообщение Olej » 08 ноя 2012, 03:22

Olej писал(а):

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ ls /var/lib/tftpboot/pxelinux.cfg/
default
user@pel1:/var/lib/tftpboot$ cat /var/lib/tftpboot/pxelinux.cfg/default 
DEFAULT linux
LABEL linux
KERNEL vmlinuz-2.6.32-5-amd64
APPEND initrd=initrd.img  nfsroot=10.11.12.1:/live/image ip=dhcp rw noautologin noxautologin union=aufs netboot=nfs boot=live
Ну и по NFS разделяется по сети общая файловая система:

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ cat /etc/exports 
/live/image *(ro,async,no_subtree_check,no_root_squash,fsid=12345)
/home 10.11.12.0/255.255.255.0(rw,no_root_squash,async,no_subtree_check,fsid=54321)

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ ls -l /live/
total 2
drwxr-xr-x 10 root root  220 Nov  7 22:51 cow
dr-xr-xr-x  6 root root 2048 Jun 21 11:26 image
И все PXE-загруженные хосты получают общую единую файловую систему, смонтированную по NFS.

Код: Выделить всё

user@pel1:/var/lib/tftpboot$ ps -A | grep nfs
 7628 ?        00:00:00 nfsd4
 7629 ?        00:00:00 nfsd
 7630 ?        00:00:00 nfsd
 7631 ?        00:00:00 nfsd
 7632 ?        00:00:00 nfsd
 7633 ?        00:00:00 nfsd
 7634 ?        00:00:00 nfsd
 7635 ?        00:00:00 nfsd
 7636 ?        00:00:00 nfsd
В общем, немножко громоздко, но всё относительно понятно! ;-)

Ответить

Вернуться в «Сети»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей