Ключевые слова: Х-терминал, linux, LTSP, Linux Terminal Server Project, терминальный linux-сервер, бездисковая станция, ПК без жесткого диска, использование старых компьютеров, diskless workstation, thin client, asplinux, использование Linux в офисе, X-terminal
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-адрес |
C0A8010E | 192.168.1.14 |
C0A8010 | 192.168.1.0 |
C0A801 | 192.168.1.0 |
C0A80 | 192.168.0.0 |
C0A8 | 192.168.0.0 |
C0A | 192.10.0.0 |
C0 | 192.0.0.0 |
C | 12.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
Далее вновь созданный файл необходимо отредактировать согласно требованиям Х-терминала.