Евгений Борисов
суббота, 20 октября 2007 г.
В этой статье речь пойдет о бездисковых станциях и терминалах.
Короткий ответ на этот вопрос - бездисковая станция это компьютер без жесткого диска. Такой компьютер является частью распределенной вычислительной системы (компьютерной сети). Файловая система этого компьютера располагается на других узлах компьютерной сети.
Бездисковая станция может быть самостоятельным вычислительным узлом сети, простым терминалом или тем и другим одновременно. Терминал отличается от полнофункционального компьютера тем, что он не выполняет пользовательских программ, он лишь отображает результаты работы этих программы, запущенных на других узлах сети.
Действительно - а зачем? Не лучше ли выдать каждому пользователю отдельный компьютер в личное (монопольное) пользование, где тот будет сам себе администратор и программист? Такое решение имеет ряд недостатков:
Это установка и настройка программного обеспечения, защита от вирусов и хакерских атак, периодическое техническое обслуживание системы (дефрагментация файловых систем, обновление программного обеспечения), обслуживание аппаратной части системы и т.п.
Далеко не каждый пользователь компьютера обладает квалификацией системного программиста и способен эффективно выполнять выше перечисленные операции.
К тому же необходимость выполнять эти дополнительные обязанности будет отвлекать пользователя компьютера от непосредственных профессиональных обязанностей и негативно сказываться на производительности труда в целом.
Обычно задачу системного администрирования поручают специально нанятому специалисту. Но в данной конфигурации ему приходиться обслуживать каждый компьютер по отдельности, что при большом их количестве затруднительно.
Потому как пользователи системы могут обладать широкими правами внутри её и возможностями копирования системных данных через свои устройства ввода/вывода (CD/DVD, FDD и др). Причем речь может идти даже не о злом умысле, а о случайно занесенных вредоносных программах.
Технология бездисковых станций и терминалов позволяет успешно решать большинство проблем, описанных выше.
В простейшем случае система состоит из сервера загрузки, одной или нескольких бездисковых станций и коммутатора(рис.1).
Инициализация бездисковых станций происходит следующим образом:
К представленной на (рис.1) системе легко можно подключать дополнительные функциональные возможности. Это могут быть самые разные модули(рис.2).
Несколько слов надо сказать о графических терминалах, т.е. бездисковых станциях, которые отображают результаты работы графических (GUI) программ, запущенных на других узлах сети.
Стандартом "де-факто" графической среды в unix-подобных системах есть X Window System[7]. Эта система обеспечивает базовые функции графической среды: отрисовку и перемещение окон на экране, взаимодействие с мышью и клавиатурой. Она имеет клиент-серверную архитектуру и реализует сетевую прозрачность, т.е. графические программы могут выполняться на другом узле компьютерной сети, при этом их интерфейс будет передаваться по сети и отображаться на машине пользователя (рис.3). Надо отметить, что эти узлы могут иметь различную архитектуру и работать на под управлением разных операционных систем.
X Window System чаще всего ассоциируется с UNIX, но X-серверы могут также существовать внутри других операционных сред. Например для OpenVMS от Hewlett-Packard существует реализация X Window под названием DECwindows, а в состав операционной системы Mac OS X от Apple входит система X11.app.
Microsoft Windows не включает в себя поддержку X, но существуют многочисленные сторонние реализации: как свободные (Cygwin/X, Xming,X-Deep/32, WeirdMind, WeirdX), так и коммерческие (Xmanager, WiredX, Exceed, X-Win32). Для Microsoft Windows существует система с похожей функциональностью - Remote Desktop Protocol (протокол удалённого рабочего стола). На основе этого протокола построен сервер терминалов Microsoft Windows Server 2003 Terminal Services.
UNIX и X Window могут быть включены в эту систему от Microsoft с помощью программы Rdesktop [6], которая реализует протокол RDP и может успешно работать с терминальным сервером для Microsoft Windows(рис.4).
Все эксперименты проводились на сети из следующих компьютеров.
Бездисковая станция и сервер загрузки будут работать под управлением ОС FreeBSD, терминальный сервер - под управлением Windows 2003 Server. Настройка последнего выходит за рамки данной статьи.
Настройка бездисковые станции заключается в установке в машину сетевой карты с поддержкой функции сетевой загрузки.
Относительно новые машины (после 2001г.) с интегрированными сетевыми картами должны поддерживать разработанный Intel стандарт PXE (''пикси'') - Preboot Execution Environment, необходимо просто сделать соответствующие настройки в BIOS.
Если такого интегрированного устройства нет то можно использовать ''навесную'' сетевую карту, которая должна иметь сокет для микросхемы ПЗУ (BOOTROM). В это ПЗУ (аналогично BIOS) записывается соответствующая программа сетевой загрузки.
В данном случае использовалась машина с "навесной" сетевой картой RealTek8139. Эта карта имеет сокет для BOOTROM, который не был использован, программа сетевой загрузки была успешно дописана ''в хвост'' BIOS по методу описанному в статье[1]
Последовательность операций при загрузке бездисковой станции в данном случае такая:
На сервере загрузки установим и настроим следующие программы:
Для этого выполним такие действия:
при разбивке диска кроме стандартных разделов (slice) для
/ /var /tmp /usr swapзаводим дополнительные разделы где будут ''жить'' бездисковые станции
Эти отдельные разделы нужны для корректной работы NFS-сервера дополнительную информацию по этому вопросу можно получить в статье[3].
# сd /usr/ports/net/isc-dhcp3-server && make install clean
# echo 'dhcpd_enable="YES"' >> /etc/rc.conf # sh /usr/local/etc/rc.d/isc-dhcpd start
Для передачи бездисковой станции программы начальной загрузки pxeboot воспользуемся упрощенным FTP сервером tftpd. Он присутствует в системе по умолчанию и работает в рамках inetd (internet ''super-server'')
Для запуска tftpd необходимо выполнить следующие действия:
# mkdir /diskless/tftpboot
tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /diskless/tftpboot
!tftpd *.* /var/log/tftpd.log
и создадим tftpd.log
# touch /var/log/tftpd.log
# echo 'inetd_enable="YES"' >> /etc/rc.conf # sh /etc/rc.d/inetd start
В завершении настроек tftpd скопируем в корень tftp сервера программу-загрузчик pxeboot откуда его будут ''брать'' бездисковые станции при загрузке.
# cp /boot/pxeboot /diskless/tftpboot/
Для того что бы бездисковая станция успешно работала ей нужна файловая система состоящая из следующего набора:
nfs-ресурс | точка монтирования | комментарий |
/diskless/rootfs | / | корневая файловая система для бездисковой станции |
/diskless/home | /home | каталоги пользователей бездисковой станции |
/usr | /usr | каталог c программным обеспечением |
/diskless/nodes/192.168.21.4/var | /var | персональный каталог для временных и служебных файлов бездисковой станции с адресом 192.168.21.4 |
В /diskless/nodes для каждой бездисковой станции создается подкаталог по имени ее ip. Там будут содержаться её индивидуальные данные (swap-файл и др.) К этой теме мы вернемся позже когда будем задавать конфигурацию бездисковой станции.
/diskless/rootfs и /usr ''отдаются'' бездисковой станции в режиме ''только чтение''
/home и /diskless/nodes/X.X.X.X - в режиме полного доступа.
Помещаем соответствующие записи в файл настроек /etc/exports.
Для запуска сервера NFS в файл /etc/rc.conf надо добавить:
rpcbind_enable="YES" nfs_server_enable="YES" nfs_server_flags="-u -n5"Здесь надо отдельно отметить параметр запуска -n5, он показывает сколько клиентов одновременно смогут работать с данным сервером.
Теперь перейдём к настройкам программной части бездисковых станций.
В каталоге /diskless/rootfs создадим общую корневую файловую систему для бездисковых станций. Основные скрипты и файлы конфигурации будут располагаться в каталоге /diskless/rootfs/conf. (В каталоге /usr/share/examples/diskless можно найти дополнительную информацию)
# mkdir -p /diskless/rootfs && cd /diskless/rootfs # cp -r /boot /bin /lib /libexec /sbin . # mkdir -p dev home proc usr var etc conf/default # ln -s tmp /var/tmp
в /diskless/rootfs должен получиться следующий набор
conf | - | файлы настроек (вернемся сюда позже) |
etc | ||
bin | - | основные утилиты системы |
sbin | ||
boot | - | загрузчик и ядро |
dev | - | точка монтирования devfs |
home | - | точка монтирования пользовательских каталогов |
lib | - | основные библиотеки системы |
libexec | ||
proc | - | точка монтирования procfs |
tmp | - | симлинк на /var/tmp |
usr | - | точка монтирования каталога с основным программным обеспечением |
var | - | точка монтирования каталога временных и служебных файлов |
Далее в /diskless/nodes создаем для каждой бездисковой станции каталог персональных данных.
# cd /diskless/nodes # mkdir -p 192.168.21.4/var
здесь же создаем создаем файл подкачки (для узла 192.168.21.4 размером 64MB)
# dd if=/dev/zero of=/diskless/nodes/192.168.21.4/var/swap bs=1k count=64000
Для бездисковых станций необходимо собрать специальное ядро. Из него можно удалить всё лишнее (например, поддержку ATA винчестера). В ядро надо добавить опции поддержки сетевой загрузки.
options BOOTP options BOOTP_NFSROOT options NFS_ROOT
компилируем
# cd /usr/src/sys/i386/conf # /usr/sbin/config DISKLESS # cd /usr/src/sys/i386/compile/DISKLESS/ # make cleandepend depend all
и копируем получившееся ядро в соответствующий каталог
# cp /usr/src/sys/i386/compile/DISKLESS/kernel /diskless/rootfs/boot/kernel/
Альтернативный вариант - воспользоваться системными скриптом /etc/rc.initdiskless. Для начальной инициализация бездисковой станций необходимо чтобы в каталоге /diskless/rootfs/etc был следующий набор файлов, скопированных из /etc:
# ls /diskless/rootfs/etc login.conf rc rc.initdiskless rc.subr
Работает это следующим образом: скрипт rc запускает rc.initdiskless, который проверяет как смонтирован корень файловой системы. Если выясняется что корень это NFS то запускаются сценарии инициализации бездисковой станции, содержащиеся в каталоге /conf.
В /diskless/rootfs/conf создадим следующие подкаталоги[4]:
base | - | задает начальную структуру каталогов |
defauts | - | настройки по умолчанию |
ip | - | персональные настройки узлов |
Это значит, что при запуске в памяти бездисковой станции будет создан виртуальный диск размером 6144 блока (3MB), точка его монтирования - /etc.
При запуске бездисковой станции 192.168.21.4 в её памяти будет создан виртуальный диск размером /conf/base/etc/md_size (3MB) и примонтирован в /etc. Туда копируется содержимое /conf/defauts/etc, а затем содержимое /conf/ip/192.168.21.4/etc, при копировании файлы с одинаковыми именами перезаписываются. После этого бездисковая станция инициализируется с использованием информации из этого виртуального /etc.
В этой работе был использован X.Org X Server v.1.4 [5]. Для сборки и установки этой среды во FreeBSD надо выполнить следующие действия.
# cd /usr/ports/x11/xorg && make install clean
Далее необходимо задать параметры для X-сервера, для этого надо отредактировать файл /etc/X11/xorg.conf или воспользоваться программой xorgconfig, есть ещё GUI-вариант этой утилиты xorgcfg. Для запуска X-сервера надо выполнить программу startx или xdm. Подробнее об этом читайте[1].
Чтобы запустить удалённого X-клиента, выводящего графику на локальный X-сервер, необходимо выполнить такие действия.
user@localX.my.net# netstat -a |grep LISTEN user@localX.my.net# xhost +remoteX.my.net user@localX.my.net# ssh remoteX.my.net user@remoteX.my.net# export DISPLAY="localX.my.net:0" user@remoteX.my.net# firefox
Можно также использовать вспомогательную программу, которая автоматически будет делать все описанное выше.
Говоря о графическом терминале на базе X.Org, можно ещё упомянуть клиента для Microsoft Terminal Services. Это программа rdesktop (A Remote Desktop Protocol client)[6], она позволяет отображать удалённый ''рабочий стол'' Microsoft Windows в окне локального X-сервера. Для сборки и установки этой программы во FreeBSD надо выполнить следующие действия.
# cd /usr/ports/net/rdesktop && make install clean
Для подключения к удалённому ''рабочему столу'' Microsoft Windows достаточно выполнить команду
# rdesktop mswindows.my.net
Кроме отображения окна Microsoft Windows, программа rdesktop может предоставлять разные дополнительные возможности, например, передача кроме картинки ещё и звукового канала с удалённой машины.
Примеры файлов настройки можно найти [ здесь ]