From: Сергей Черепенин, Игорь Чубин <http://xgu.ru>
Date: Mon, 27 Apr 2008 17:02:14 +0000 (UTC)
Subject: Загрузка бездисковых Linux-станций с помощью PXE
Оригинал: http://xgu.ru/wiki/PXE
На данной странице детально описывается процесс загрузки бездисковых
Linux-станций с помощью PXE, а также рассказывается как с помощью
программ проекта LTSP подгототвить Linux-систему для использования в
качестве сервера загрузки таких станций. Рассматривается процесс
настройки всех необходимых компонентов (TFTP,DHCP,NFS-серверов),а
также приводятся примеры их конфигурационных файлов.
Что такое PXE?
PXE (Preboot Execution Environment) -- среда для загрузки компьютеров
с помощью сетевой карты без использования жёстких дисков,
компакт-дисков и других устройств, применяемых при загрузке
операционной системы. Для организации загрузки системы в PXE
используются протоколы IP, UDP, DHCP и TFTP. PXE-код, прописанный в
сетевой карте, получает загрузчик из сети, после чего передаёт ему
управление.
Загрузка Linux-системы с использованием PXE
Загрузку Linux системы с помощью PXE можно выполнить с помощью
загрузчика PXELINUX, созданного на базе SYSLINUX. PXELINUX
загружается с помощью PXE-кода в сетевой карте, а затем ему передаётся
управление. Код PXELINUX не нужно прописывать в чип на сетевой карте
(если нужно именно это, см. проект etherboot).
* 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, которому передаётся управление.
Предварительные данные
Сетевые настройки
Сетевые интерфейсы настраиваются автоматически согласно файлу
/etc/network/interfaces:
%# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
Интерфейс eth0 подлючен к сети 10.0.0.0/8 и через него осуществляется
выход в интернет.
Интерфейс eth1 подключен к сети 192.168.15.0/24, в которую
подключаются тонкие клиенты.
Аллиас на интерфейсе eth1 eth1:1 необходим для соединения с
терминальным сервером Windows
Для осуществления возможности выхода в интернет всем студентам с
тонких клентов настраивается firewall в таблице nat цепочки
POSTROUTING (о чем говорит соответствующая строка в конфигурационном
файле настройки сетевых интерфейсов):
pre-up iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -j MASQUERADE
Кроме настройки firewall необходимо включить forwarding. Иными
словами, необходимо разрешить ядру операционной системы осущетсвлять
проброс трафика с одного интерфейса на другой. Это можно сделать
несколькими способами:
1. Строка в файле /etc/network/interfaces
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
2. Строка в файле /etc/sysctl.conf
net.ipv4.conf.default.forwarding=1
3. Команда
%# sysctl net.ipv4.conf.default.forwarding=1
Но этот способ включения forwarding действует до первой перезагрузки,
а для автоматического включения на этапе старта системы необходимо
использовать первый или второй методы.
Операционная система
%$ uname -a
Linux debian 2.6.16-2-486 #1 Sat Jul 15 21:23:01 UTC 2006 i686 GNU/Linux
Инсталляция DHCP-сервера
Установка DHCP-сервера:
%# apt-get install dhcp
.
.
.
NOTE: dhcpd's messages are being sent to syslog. Look there for
diagnostics messages.
Starting DHCP server: dhcpd failed to start - check syslog for diagnostics.
DHCP-сервер не заработал в базовой конфигурации - смотрим почему:
%# tail /var/log/daemon.log
Dec 25 17:27:56 debian rpc.statd[4128]: Version 1.0.10 Starting
Dec 25 17:33:43 debian dhcpd: No subnet declaration for eth0 (192.168.15.244).
Dec 25 17:33:43 debian dhcpd: Please write a subnet declaration in your dhcpd.c
onf file for the
Dec 25 17:33:43 debian dhcpd: network segment to which interface eth0 is attached.
Dec 25 17:33:43 debian dhcpd: exiting.
Анализ лог-файла /var/log/daemon.log говорит, что не описана сеть
192.168.15.0/24. Указанная сеть была определена автоматически, исходя
из адреса интерфейса, на котором DHCP-сервер прослушивает запросы. По
умолчанию этот интерфейс eth0. Конфигурационный файл dhcpd.conf не
содержит описания этой сети.
Ниже мы отредактируем этот файл и опишем в нём названную сеть.
Если бы было нужно чтобы DHCP-сервер работал на другом интерфейсе,
нужно отредактировать файл /etc/default/dhcp -- указать нужный
интерфейс:
%# vim /etc/default/dhcp
INTERFACES="eth1"
Сейчас этого делать не нужно.
Настройка DHCP-сервера
Далее можно приступать к непосредственной настройке DHCP-сервера:
Конфигурационный файл практически ничем не отличается от файла по
умолчанию. Клиентам будут выделяться IP-адреса из диапазона
192.168.15.200-192.168.15.220, указанного в range dynamic-bootp. В
качестве DNS-сервера и шлюза используется хост 192.168.15.254.
Опции, имеющие непосредственно отношение к бездисковой загрузке:
* root-path
* filename
Запуск DHCP-сервера
Запуск DHCP-сервера:
# /etc/init.d/dhcp start
Инсталляция и настройка TFTP-сервера
Установите пакет tftpd-hpa (другие TFTP-серверы могут работать
некорректно):
%# apt-get install tftpd-hpa
Настройка TFTP-сервера
В момент завершения установки нам было сообщено о том, что tftp-сервер
по-умолчанию не работает в режиме демона, а будет запускаться через
интернет-суперсервер inetd. Проверим на наличие строки его
настройки в конфигурационном файле inetd:
Необходимо установить пакет ltsp-server. В качестве зависимостей от
этого компонента будет скачан установлен сервер NFS (при условии, что
он не был установлен ранее).
%# apt-get install ltsp-server
После установки нам рекомендовано добавить строку
/opt/ltsp *(ro,no_root_squash,async)
в файл экспортирования файловых систем /etc/exports.
Корневая файловая система, которую будут использовать клиенты,
находится в подкаталоге каталог /opt/ltsp. Она должна быть доступна
через NFS. Можно изменить файл /etc/exports сейчас, а можно позже. Мы
изменим позже.
Настройка шлюза
Если нужно чтобы бездисковые клиенты могли получить доступ в Интернет
через наш шлюз, необходимо настроить на этом шлюзе iptables и включить
forwarding-пакетов между интерфейсами.
Образ создаётся с помощью скрипта ltsp-build-client. В качестве
аргументов скрипту необходимо указать:
* архитектуру, для которой выполняется сборка;
* дистрибутив, на базе которого будет построен образ;
* зеркало, с которого должны инсталлироваться пакеты системы.
В каталог, который будет для бездисковой станции корневым,
проинсталлируется дистрибутив etch. В качестве источника пакетов
указан локальный apt-proxy. Вместо него нужно указать соответствующее
зеркало.
%# ltsp-build-client --arch i386 --dist etch --mirror http://192.168.15.251:9999/debian
.
.
.
WARNING: no entry for /opt/ltsp in /etc/exports,
you may want to add the following line to /etc/exports:
Необходимо экспортировать каталог, в котором находится корневая
файловая система бездисковых клиентов.
%$ ls -l /opt/ltsp/
drwxr-xr-x 20 root root 4096 2006-12-25 18:02 i386
%$ ls /opt/ltsp/i386/
bin dev home lib mnt proc sbin sys usr
boot etc initrd media opt root srv tmp var
Рекомендуется делать доступ к файловой системе в режиме read/only,
дабы избежать конфиликтов при совместном доступе.
Мы для экспериментов сделаем файловую систему доступной в режиме
read/write. В режиме нормальной эксплуатации никогда не экспортируйте
корневую систему бездисковых станций в режиме read/write, если точно
не знаете к каким последствиям это приведёт!
Добавьте в файл /etc/exports строку:
/opt/ltsp/i386 *(rw,no_root_squash,async)
Теперь, необходимо указать nfs-kernel-server демону чтобы он перечитал
этот файл:
%# invoke-rc.d nfs-kernel-server reload
Re-exporting directories for NFS kernel daemon...
exportfs: /etc/exports :
Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/opt/ltsp/i386".
Assuming default behaviour ('subtree_check').
NOTE: this default will change with nfs-utils version 1.1.0
И проверяем:
%# showmount -e
Export list for debian:
/opt/ltsp/i386 *
В ходе выполнения команды ltsp-build-client был также создан каталог
/var/lib/tftpboot/ltsp/i386/ :
Необходимо подготовить ядро, под управлением которого будут работать
клиентские станции.
При конфигурировании клиентского ядра обязательно нужно включить:
* Поддержку сетевой карты
* Поддержку NFS
Пример конфигурационного файла пожно скачать здесь. При такой
конфигурации ядра initrd не используется.
В том случае, если какой-либо из необходимых для загрузки и
монтирования корневой файловой системы, драйвер нельзя (или не
хочется) по какой-либо причине включить в ядро, необходимо подготовить
виртуальный загрузочный диск initrd.
Если бездисковый клиент будет загружать не только ядро Linux, но и
initrd, нужно сделать соответствующие изменения в конфигурационном
файле pxelinux.cfg/:
%# vi pxelinux.cfg/default
Дополнительная информация
PXE:
* Спецификация PXE (pdf)
* PXE на en.wikipedia.org
* rom-o-matic.net - коллекция PXE-образов
* PXELINUX на сайте SYSLINUX
LTSP:
* Linux Terminal Server Project
* LTSP.RU - Linux TERMINAL SERVER Project (Russia) -
использование Linux на бездисковых рабочих станциях
* Linux Terminal Server Project на en.wikipedia.org
* Linux Terminal Server Project на ru.wikipedia.org
* Обсуждение на iXBT
Настройка:
* журнал инсталляции LTSP-сервера
Приложения
Конфигурационные файлы
mouse usb /etc/modules
mknod mice c 13 63
Скрипты
/home/rdp/.xsession
SERVER=192.168.1.2
USER=user
while true
do
LANG=C rdesktop -a24 -f -u $USER $SERVER
done
1233 Прочтений • [Загрузка бездисковых Linux-станций с помощью PXE (pxe boot linux diskless dhcp tftp)] [08.05.2012] [Комментариев: 0]