Главная » Загрузка бездисковых Linux-станций с помощью 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).

* 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, которому передаётся управление.

Предварительные данные

Сетевые настройки

Сетевые интерфейсы настраиваются автоматически согласно файлу
/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).

auto lo eth0 eth1

# The loopback network interface

iface lo inet loopback

# The primary network interface
iface eth0 inet static
address 10.0.35.7
netmask 255.0.0.0
network 10.0.0.0
gateway 10.0.35.1
dns-nameservers 10.0.35.1
dns-search unix.nt

pre-up iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -j MASQUERADE
post-up echo 1 > /proc/sys/net/ipv4/ip_forward

# The secondary network interface

iface eth1 inet static
address 192.168.15.180
netmask 255.255.255.0
network 192.168.15.0

post-up ifconfig eth1:1 192.168.1.254

Интерфейс 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-сервера:

%# vim /etc/dhcp.conf

option domain-name "unix.nt";
option domain-name-servers 192.168.15.254;
option subnet-mask 255.255.255.0;
server-name "ltsp0.unix.nt";
default-lease-time 600;
max-lease-time 7200;

subnet 192.168.15.0 netmask 255.255.255.0 {
range dynamic-bootp 192.168.15.200 192.168.15.220;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.15.255;
option root-path "192.168.15.244:/opt/ltsp/i386/";
option routers 192.168.15.254;
filename "pxelinux.0";
}

Конфигурационный файл практически ничем не отличается от файла по
умолчанию. Клиентам будут выделяться 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:

%# grep tftp /etc/inetd.conf
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot

Перезапустим интернет суперсервер:

%# /etc/init.d/inetd restart
Restarting internet superserver: inetd.

И проверим выполняет ли интернет-суперсервер прослушивание порта 69
(порт TFTP):

%# netstat -lnp | grep :69
udp 0 0 0.0.0.0:69 0.0.0.0:* 7331/inetd

На этом настрока tftp-сервера завершена.

Настройка LTSP ( Linux Terminal Server Project)

Установка серверной части ltsp

Необходимо установить пакет ltsp-server. В качестве зависимостей от
этого компонента будет скачан установлен сервер NFS (при условии, что
он не был установлен ранее).

%# apt-get install ltsp-server

После установки нам рекомендовано добавить строку

/opt/ltsp *(ro,no_root_squash,async)

в файл экспортирования файловых систем /etc/exports.

Корневая файловая система, которую будут использовать клиенты,
находится в подкаталоге каталог /opt/ltsp. Она должна быть доступна
через NFS. Можно изменить файл /etc/exports сейчас, а можно позже. Мы
изменим позже.

Настройка шлюза

Если нужно чтобы бездисковые клиенты могли получить доступ в Интернет
через наш шлюз, необходимо настроить на этом шлюзе iptables и включить
forwarding-пакетов между интерфейсами.

Добавляем строки в /etc/network/interfaces

post-up iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -j MASQUERADE
post-up echo 1 > /proc/sys/net/ipv4/ip_forward

Создание клиентского образа ltsp

Образ создаётся с помощью скрипта 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:

/opt/ltsp *(ro,no_root_squash,async)

and then run the command:

invoke-rc.d nfs-kernel-server reload
info: LTSP client installation completed successfully

Необходимо экспортировать каталог, в котором находится корневая
файловая система бездисковых клиентов.

%$ 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/ :

%# ls -l /var/lib/tftpboot/ltsp/i386/
-rw-r--r-- 1 root root 72400 2006-12-04 17:52 config-2.6.18-3-486
lrwxrwxrwx 1 root root 23 2006-12-25 18:05 initrd.img -> initrd.img-2.6.18-3-486
-rw-r--r-- 1 root root 3080263 2006-12-25 18:05 initrd.img-2.6.18-3-486
lrwxrwxrwx 1 root root 20 2006-12-25 18:05 nbi.img -> nbi.img-2.6.18-3-486
-rw-r--r-- 1 root root 4307968 2006-12-25 18:05 nbi.img-2.6.18-3-486
-rw-r--r-- 1 root root 13324 2006-12-25 18:05 pxelinux.0
drwxr-xr-x 2 root root 4096 2006-12-25 18:05 pxelinux.cfg
-rw-r--r-- 1 root root 714765 2006-12-05 00:21 System.map-2.6.18-3-486
lrwxrwxrwx 1 root root 20 2006-12-25 18:05 vmlinuz -> vmlinuz-2.6.18-3-486
-rw-r--r-- 1 root root 1218196 2006-12-05 00:21 vmlinuz-2.6.18-3-486

Конфигурационный файл сетевого загрузчика pxelinux находится в
pxelinux.cfg/default корневого каталога дистрибутива.

Проверяется не только имя default/

Необходимо создать файл /var/lib/tftpboot/pxelinux.cfg/default:

DEFAULT vmlinuz-2.4.34.lan
APPEND nfsdir=192.168.15.180:/opt/ltsp/i386/ lang=ru ramdisk_size=100000 (перенос)
root=/dev/nfs rw nfsroot=192.168.15.180:/opt/ltsp/i386/ ip=dhcp
TIMEOUT 30
PROMPT 1
DISPLAY boot.msg

Подготовка клиентского ядра и initrd

Необходимо подготовить ядро, под управлением которого будут работать
клиентские станции.

При конфигурировании клиентского ядра обязательно нужно включить:

* Поддержку сетевой карты
* Поддержку 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

Категория: Интересные статьи | Просмотров: 652