Содержание

Ключевые слова: Х-терминал, linux, LTSP, Linux Terminal Server Project, терминальный linux-сервер, бездисковая станция, ПК без жесткого диска, использование старых компьютеров, diskless workstation, thin client, asplinux, использование Linux в офисе, X-terminal

Использование сетевых адаптеров PXE

PXE (Pre-boot eXecution Environment – предзагрузочная среда выполнения) - это спецификация фирмы Intel для выполнения удаленной загрузки. Сетевые карты с функцией PXE стоят, как правило, дороже и для их настройки в Х-терминалах следует использовать несколько другие приемы. Сетевая загрузка при помощи PXE, кроме довольно дорогих сетевых адаптеров от Intel и 3Com, свойственна также встроенным в материнские платы устройствам. Скорее всего это связано с тем, что в полнофункциональном устройстве (материнской плате) легче реализовать удаленную загрузку через PXE-метод.

Признаюсь честно, мне долго не могла попасться в руки PXE-сетевая карта, но в один прекрасный день у меня на столе оказался системный блок с материнской картой ASUS P4P800-VM, сразу скажу, не очень подходящий выбор для Х-терминала, но эта материнская плата имела интегрированную сетевую карту с чипсетом Intel 82562EZ, который поддерживал спецификацию PXE, а следовательно, мог быть использован для проверки этого метода удаленного запуска.

Первое, что необходимо сделать при работе с сетевой картой PXE – это включить функцию удаленной загрузки в BIOS. А также правильно установить приоритет загрузки через сеть. Для материнской платы ASUS P4P800-VM я так и сделал, и после перегрузки компьютера увидел на экране такое сообщение:

Intel ® Boot Agent FE v4.1.10
Copyright © 1997-2003, Intel Corporation

Initializing and establishing link...
PXE-E61: Media test failure, check cable
PXE-M0F: Exiting Intel Boot Agent

Reboot and Select proper Boot device
or Insert Boot Media in selected Boot device and press a key

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

Intel ® Boot Agent FE v4.1.10
Copyright © 1997-2003, Intel Corporation
CLIENT MAC ADDR: 00 11 2F CC 69 89 GUID: 848FC32 391F 8F07 66E5E96DF98A

DHCP...

После аббревиатуры DHCP стали появляться точки на экране, что явно свидетельствовало о рассылки DHCP-запросов. Через несколько секунд сообщение на экране сменилось таким:

PXE-E51: No DHCP or proxyDHCP offers were received
PXE-M0F: Exiting Intel Boot Agent

Reboot and Select proper Boot device
or Insert Boot Media in selected Boot device and press a key

Понятно, что сетевая карта не получила ответ на свой DHCP-запрос, так как мы не описали ее в конфигурационном файле DHCP-сервера. Зная MAC-адрес (00:11:2F:CC:69:89) PXE-сетевой, карты необходимо добавить информацию о ней в соответствующем разделе файла /etc/dhcpd.conf, например:

    host pxeadmin {
        hardware ethernet     00:11:2F:CC:69:89;
        fixed-address         192.168.1.14;
        filename              "/lts/vmlinuz-2.4.24-ltsp-1";
    }

Обратите внимание, что параметр filename я специально оставил прежним, то есть указывающим на ядро операционной системы Linux, которое загружалось сетевыми загрузчиками Etherboot. Сохраняем файл /etc/dhcpd.conf и перезапускаем демон dhcpd:

# /sbin/service dhcpd restart
Shutting down dhcpd:                                      [  OK  ]
Starting dhcpd:                                           [  OK  ]

Повторяем загрузку тестового Х-терминала с PXE-сетевой картой. Теперь на экране отображаются такие строки:

Intel ® Boot Agent FE v4.1.10
Copyright © 1997-2003, Intel Corporation
CLIENT MAC ADDR: 00 11 2F CC 69 89 GUID: 848FC32 391F 8F07 66E5E96DF98A

DHCP.
CLIENT IP: 192.168.1.14 MASK: 255.255.255.0 DHCP IP: 192.168.1.1
GATEWAY IP: 192.168.1.1

PXE-E79: NBP is too big to fit in free base memory
PXE-M0F: Exiting Intel Boot Agent

Reboot and Select proper Boot device
or Insert Boot Media in selected Boot device and press a key

Последнее сообщение об ошибке свидетельствует, что попытка загрузки методом PXE ядра операционной системы Linux завершилась неудачей. Причина – слишком большой размер файла ядра.

Спецификация PXE предполагает получение по сети сначала небольшого загрузчика (размером не более 32 Кбайт), который и будет инициировать дальнейшую настройку бездисковой станции. Поэтому для выполнения удаленной загрузки через PXE-сетевую карту, необходимо в качестве параметра filename передать именно такой файл, а не ссылку на ядро Linux.

К счастью, создатели LTSP позаботились о нас и в дистрибутив своего проекта включили все необходимые файлы. Так, в каталоге /tftpboot/lts/2.4.24-ltsp-1/ находится файл pxelinux.0, который необходимо использовать для загрузки Х-терминала через PXE-сетевую карту. А следовательно, правильная конфигурация сервера DHCP для загрузки методом PXE должна выглядеть так:

    host pxeadmin {
        hardware ethernet     00:11:2F:CC:69:89;
        fixed-address         192.168.1.14;
        filename              "/lts/2.4.24-ltsp-1/pxelinux.0";
    }

Еще раз перезапускаем демон dhcpd для того, чтобы он перечитал файлы конфигурации и снова пытаемся запустить Х-терминал. Теперь сообщения на экране выглядят намного лучше:

Intel ® Boot Agent FE v4.1.10
Copyright © 1997-2003, Intel Corporation
CLIENT MAC ADDR: 00 11 2F CC 69 89 GUID: 848FC32 391F 8F07 66E5E96DF98A

DHCP.
CLIENT IP: 192.168.1.14 MASK: 255.255.255.0 DHCP IP: 192.168.1.1
GATEWAY IP: 192.168.1.1

PXELINUX 1.66 2002-01-01 Copyright © 1994-2002 H. Peter Anvin
UNDI data segment at: 00094190
UNDI data segment size: 94B0
UNDI code segment at: 0009D640
UNDI code segment size: 2210
PXE entry point found (we hope) at 9D64:0106
My IP address seems to be C0A8010E 192.168.1.14
ip=192.168.1.14 : 192.168.1.1 : 192.168.1.1 : 255.255.255.0
TFTP prefix: /lts/2.4.24-ltsp-1/
Try to load: pxelinux.cfg/C0A8010E
Try to load: pxelinux.cfg/C0A8010
Try to load: pxelinux.cfg/C0A801
Try to load: pxelinux.cfg/C0A80
Try to load: pxelinux.cfg/C0A8
Try to load: pxelinux.cfg/C0A
Try to load: pxelinux.cfg/C0
Try to load: pxelinux.cfg/C
Try to load: pxelinux.cfg/default
Loading bzImage-2.4.24-ltsp-1 ..............

Х-терминал успешно загрузился, но в приведенном выше фрагменте загрузочных сообщений я рекомендую обратить ваше внимание на значение C0A8010E. Это записанный в шестнадцатеричной форме IP-адрес нашего Х-терминала, то есть 192.168.1.14. Перед выполнением загрузки ядра операционной системы Linux через локальную сеть, PXE-загрузчик пытается открыть файл конфигурации, который соответствует полученному от сервера IP-адресу. После неудачной попытки (если такого файла на диске не оказалось) он продолжает открывать файлы, названия которых хотя бы частично соответствуют IP-адресу удаленного компьютера. В последнюю очередь считывается файл /tftpboot/lts/2.4.24-ltsp-1/pxelinux.cfg/default, в котором должна быть указана конфигурация для всех Х-терминалов локальной сети вне зависимости от их IP-адреса.

Файл конфигурации для загрузчика PXE очень напоминает файл загрузчика LILO и в основном содержит параметры, которые передаются ядру (опция append). Вот пример этого файла /tftpboot/lts/2.4.24-ltsp-1/pxelinux.cfg/default:

prompt=0
label linux
	kernel bzImage-2.4.24-ltsp-1
	append init=/linuxrc rw root=/dev/ram0 initrd=initrd-2.4.24-ltsp-1.gz

Не совсем понятен принцип порядка загрузки файлов конфигурации. Так, если отсутствует файл, названный именем IP-адреса в шестнадцатеричной форме, то PXE-загрузчик пытается найти файлы в такой последовательности:

Имя файла вшестнадцатеричной формеСоответствующийIP-адрес
C0A8010E192.168.1.14
C0A8010192.168.1.0
C0A801192.168.1.0
C0A80192.168.0.0
C0A8192.168.0.0
C0A192.10.0.0
C0192.0.0.0
C12.0.0.0

Если с предложенными C0A8010E (192.168.1.14), C0A801 (192.168.1.0), C0A8 (192.168.0.0) и C0 (192.0.0.0) еще можно согласиться, то использование C0A8010, C0A80, C0A и C вызывает недоумение.

Как только встретится соответствующий (даже частично) IP-адресу Х-терминала конфигурационный файл, поиск прекращается и данный файл используется в качестве базисного. Поэтому, если у вас в сети есть Х-терминал с PXE-сетевой картой, ядру которого нужно передать специфические параметры, то наиболее рациональный способ сделать это – скопировать файл pxelinux.cfg/default в тот же каталог, но с именем, которое соответствует IP-адресу в шестнадцатеричной форме. Например, для Х-терминала с IP-адресом 192.168.2.25 следует выполнить такие команды:

# cd /tftpboot/lts/2.4.24-ltsp-1/pxelinux.cfg/
# cp default C0A80219

Далее вновь созданный файл необходимо отредактировать согласно требованиям Х-терминала.

Пока интересно, читаем дальше!

Авторское право © Сеник Николай, 2004-2006