LTSP: терминал-серверная технология загрузки бездисковых рабочих станций
Сергей «grinder» Яремчук (grinder@ua.fm, )
Сейчас во многих организациях скопилось приличное количество компьютеров старого парка, отслуживших свое как морально, так и физически. Программное обеспечение, которое можно на них запустить, уже далеко от требований и реалий сегодняшнего дня, а поэтому такие системы пылятся в углу. Выбросить их жалко, а новых никто не дает. Но, немного напрягшись можно за пару дней вдохнуть в эти железки вторую жизнь и на экране монитора компьютера с процессором Pentium 133 увидеть KDE последней сборки вместе с OpenOffice.org или Windows с последним офисом, слушать на таких системах музыку и смотреть фильмы. Не верите? Читайте дальше.
Содержание:
- Назначение и возможности LTSP
- Выбор способа загрузки по сети
- Установка сервера LTSP
- Настройка сервисов NFS и DHCP
- Настройка TFTP
- Готовые рецепты
Открытость Linux систем породила вокруг себя довольно много полезных проектов, и часто для решения какой-нибудь проблемы необходимо просто найти подходящий. Загрузкой бездисковых терминалов занимается проект (Linux Terminal Server Project). Его задача – разработка необходимых дополнений для Linux, позволяющих подключить большое количество низкопроизводительных тонких клиентов к мощному Linux-серверу и использовать его ресурсы для выполнения любых задач. Результат выполнения команд возвращается обратно клиенту и выводится на экран.
К компьютеру, выполняющему основную, наиболее трудоемкую работу, предъявляются особые требования. Особенно касается это объема оперативной памяти, которой должно теперь хватать на всех, и скорости дисковых операций. А вот к рабочим станциям пользователя требования уже гораздо ниже. С возлагаемой на них задачей спокойно могут справиться и «четверки». А при использовании компьютера мощнее Р133 с 24 Мб ОЗУ и с 2 Мб видеокартой, увеличение производительности не заметно. Поддержка основной периферии вроде принтера, сканера, приводов компакт-диска и некоторых других обеспечивается сервером, но при установке дополнительных пакетов возможно их подключение непосредственно к терминалу.
Но и это еще не все. В этом случае жесткий диск становится не у дел. Все приложения и необходимые для обработки данные могут находиться на сервере. Терминал в таком случае может использовать локальный жесткий диск лишь на первоначальном этапе для загрузки системы. Преимуществ такого способа много. Это удобство обновления и снижение стоимости ПО, резервирования информации, защиты от вирусов, снижение шума, пользователь не связан с конкретным компьютером, нет необходимости в администрировании клиентских систем. И главное – большая долговечность клиентских машин как моральная, так и физическая. LTSP распространяется под лицензией GNU GPL.
Чтобы настроить LTSP, нужно понимать процесс. Поэтому буквально в двух словах как это работает. После включения питания управление передается как обычно BIOS, который в свою очередь выполняет инициализацию, проверку POST (Power-On-Self-Test) и анализирует порты на наличие дополнительных устройств. В ходе последней обнаруживается установленная сетевая карта, в энергонезависимой памяти которой обнаруживается код, начинающий выполняться после завершения теста (вариант загрузкой с других носителей несколько проще, но суть не в этом). Дальнейшую работу условно можно разделить на три этапа:
- получение IP-адреса;
- получение образа операционной системы:
- собственно работа с данными.
Чтобы получить IP-адреса, программа загрузки инициализирует широковещательный запрос (для нашего примера 192.168.0.255, по умолчанию используется порт 68, протокол UDP) в котором указывается свой, уникальный для каждой сетевой карты, МАС-адрес. Для динамического распределения IP-адреса между компьютерами в сети используется служба DHCP. DHCP-сервер приняв запрос, находит конфигурацию, соответствующую данному МАС-адресу, и возвращает необходимые данные.
После получения адреса клиент должен загрузить ядро операционной системы. Для этого используется облегченная версия протокола FTP, которая не требует идентификации и использует UDP-протокол вместо TCP – TFTP. И, чтобы пользоваться файловой системой на другом компьютере, на сервере должна быть настроена служба NFS. После загрузки ядра оно, уже как и положено, берет бразды правления в свои руки. Причем все описанные сервисы могут быть установлены как на одном компьютере, так и разных системах. Вот сборкой готовой системы на основе LTSP мы и будем заниматься далее.
Выбор способа загрузки по сети
Клиентская система после включения питания должна получить IP-адрес, вызвав DHCP-запрос, путь к загружаемому ядру и путь к каталогу, который будет использован вместо корневого. Есть несколько вариантов, позволяющих сделать это, необходимо лишь выбрать более подходящий ситуации: сетевая загрузка, используя Etherboot, PXE, MBA, Netboot, не говоря уже о том, что можно просто загрузиться с дискеты, CD-ROM, USB или выбрав нужный пункт в меню при загрузке с жесткого диска. Выберем лишь один из них. Для получения готового образа EtherBoot, заходим на сайт , выбираем версию EtherBoot и в выпадающем списке «Choose NIC/ROM type» выбираем марку чипа на сетевой карте. К выбору последней отнесись тщательно, иначе полученный образ работать не будет. Если в системе несколько сетевых интерфейсов, выбери тот который будет использован для загрузки системы. В списке «Choose ROM output format» выбираем выходной формат. Доступно 10 вариантов. Например, при первоначальной настройке можно использовать загрузку с дискеты Floppy Bootable ROM Image (.zdsk), компакт-диска ISO bootable image with/without legacy floppy emulation (.iso/.liso) или жесткого диска HD (experimental) Hard Disk Partition Image (.zhd). Хотя в последнем случае удобнее использовать готовый образ для загрузчиков LILO, GRUB или SYSLINUX – LILO/GRUB/SYSLINUX loadable kernel format (.lzlilo) или для систем с LinuxBIOS – ELF (LinuxBIOS) ROM Image (.elf). Когда все будет работать? можно скачивать прошивку для EPROM (Erasable Programmable Read-Only Memory – перезаписываемая память) ПЗУ сетевой карты Binary ROM Image (.lzrom) или PXE loadable ROM Image (.lzpxe). При нажатии на кнопку «Configure» можно отредактировать некоторые параметры будущего образа.
Выбираем нужный вариант и жмем «Get ROM», в результате получаем нужный образ. Для записи образа на дискету даем следующую команду "cat your_image.lzdsk > /dev/fd0" (или dd if=/path/to/rom-image of=/dev/fd0 bs=1024, как кому привычнее). Все, программа первоначальной загрузки готова. Первоначально советую попробовать загрузиться с дискеты и настроить схему «один сервер – один клиент», а после успешного преодоления всех подводных камней уже нарастить количество клиентов и заняться прошивкой кода в ПЗУ. Переходим к настройке сервера.
LTSP доступен как набор пакетов для установки на Linux-cистеме, последние версии легко интегрируются в Ubuntu, Debian, Fedora Core, Gentoo и некоторые другие дистрибутивы. Также он доступен как часть уже готового дистрибутива (см. врезку). Начиная с версии 4.0, процесс установки и настройки сервера четко разделен и более логичен. Можно скачивать пакеты или архивы для установки LTSP по одному с сайта проекта или загрузить сразу одним 100-мегабайтовым iso-файлом (), а можно воспользоваться системой пакетов используемого дистрибутива. Здесь полная свобода выбора. Причем, по сравнению с версией 3, четверка ставится на ура, и надписи вроде “Unknown distributive” встречаются редко. Хотя в некоторых дистрибутивах процесс установки несколько отличается, так как разработчики используют собственные скрипты, упрощающие установку LTSP. Несколько отличаются и вводимые команды, хотя смысл процесса остается. К таким дистрибутивам относится Ubuntu, с его родным братом Kubuntu и будем работать далее (разницы в настройках между ними никакой) . Чтобы посмотреть, что есть в Kubuntu по LTSP, вводим команду:
$ sudo apt-cache search ltsp
Все, возможно, не понадобится, установим пока только необходимое:
$ sudo apt-get install ltsp-server-standalone openssh-server
В этом случае будет установлен и DHCP-сервер. Если в сети уже имеется такой сервис, используй ltsp-server вместо ltsp-server-standalone. Причем, учитывая “мягкую” систему зависимостей в пакетах, обрати внимание на поля “Предлагаемые пакеты” и “Рекомендуемые пакеты” в выводе apt-get. Кроме того, в Kubuntu предлагается пакет student-control-panel. С помощью этого аплета можно контролировать подключения клиентов к серверу. В Kubuntu LTSP работает практически сразу после установки, требуется всего несколько движений, чтобы довести ее вручную, используя в том числе и скрипты, любезно предоставленные разработчиками. Для ленивых можно посоветовать еще и пакет ltsp-utils, содержащий две стандартные утилиты. Первая, ltspadmin, предназначена для установки и обновления системы LTSP, вторая, ltspcfg, позволяет произвести первичные настройки. Далее создаем рабочее окружение клиентов. В классическом варианте необходимо использовать утилиту ltspadmin, в Ubuntu для этих целей применяется утилита ltsp-build-client, которая использует репозитарий Ubuntu, работая в chroot окружении. Утилита имеет множество параметров, но в самом простом случае достаточно ввести:
$ sudo ltsp-build-client
После чего утилита создаст нужные каталоги, соединится с репозитарием, откуда будут получены все необходимые пакеты. Некоторые системные настройки также перекочуют в созданное chroot окружение.
По окончании установки скачанных пакетов, будут запущены еще два скрипта ltsp-update-kernels и ltsp-update-sshkeys (при необходимости в дальнейшем это можно сделать и вручную). Первый скопирует системное ядро и обеспечит в дальнейшем его загрузку клиентами, создав необходимые файлы, второй создаст SSH ключи необходимые для обеспечения защищенной работы и аутендификации клиентов на сервере. Копии ключей будут помещены в файл /opt/ltsp/i386/etc/ssh/ssh_known_hosts, в таком виде:
DNS_name ssh-rsa ключ
Вместо имени может стоять IP-адрес, рекомендуется использовать оба параметра сразу, указав их через запятую.
DNS_name,192.168.0.1 ssh-rsa ключ
Такой тип аутендификации используется в Ubuntu, в классическом случае пользователи вводят пароль на сервере XDMCP (Display Manager Control Protocol). Также отличием в работе является то, что при регистрации в Ubuntu используется специально разработанный для этих целей Python скрипт LDM, который адаптирован для работы через ssh. В классическом варианте пользователя встретит KDM, GDM или XDM. И наконец последним пунктом работы скрипта ltsp-build-client будет создание файла /etc/exports, в таком виде:
/opt/ltsp/i386/ 192.168.0.0/255.255.255.0(ro,no_root_squash,async)
Слева указан каталог, который экспортирует сервер. Флаги ro или rw указывают на доступ только для чтения и для записи и чтения соответственно. А no_root_squash заменяет пользователя root более безобидным nobody. Параметры ro и no_root_squash используются в файле по умолчанию, и поэтому их можно смело опустить, хотя так нагляднее. После чего последует перезапуск сервера NFS командой "invoke-rc.d nfs-kernel-server reload". Установку можно считать законченной, теперь займемся доводкой и пройдемся по конфигурационным файлам, чтобы если что-то пойдет не так, быстро найти причину.
В настройках по умолчанию сервер LTSP для клиентских компьютеров будет использовать диапазон IP-адресов – 192.168.0.0, сам при этом получает адрес 192.168.0.1, его и буду придерживаться в дальнейшем. Если его, по каким либо причинам, нужно изменить, то не забудь подправить все файлы, о которых будет упоминаться в статье. В том числе и файле /etc/exports. После всех исправлений необходимо заново сгенерировать ключи, повторно запустив скрипт ltsp-update-sshkeys. Закончим с NFS. Строка в файле /etc/exports экспортирует в качестве корневого каталога клиентских систем каталог /opt/ltsp/i386. Бывает полезно разрешить использование файла подкачки, который физически будет располагаться на сервере, а на клиенте экспортироваться в /tmp/swapfiles (его размер указывается в файле lts.conf) и домашние каталоги пользователей. Дописываем в /etc/exports такие строки:
/var/opt/ltsp/swapfiles 192.168.0.0/255.255.255.0(rw,no_root_squash,async)
/home 192.168.0.0/255.255.255.0 (rw)
А в файл /opt/ltsp/i386/etc/fstab:
example.com:/home/ /home nfs defaults,rsize=8192,wsize=8192 0 0
Теперь переходим к настройке службы DHCP и DNS. Как уже говорилось при установке пакета ltsp-server-standalone, будет установлен и сервер DHCP, который будет в работе использовать конфигурационный файл /etc/ltsp/dhcpd.conf (если он есть, иначе – /etc/dhcp3/dhcpd.conf):
authoritative;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.20 192.168.0.100;
option domain-name «example.com»;
option domain-name-servers 192.168.0.1;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option log-servers 192.168.0.1;
option subnet-mask 255.255.255.0;
filename «/ltsp/pxelinux.0″;
option root-path «/opt/ltsp/i386″;
}
host terminal_1 {
hardware ethernet 00-02-44-07-FC-C4;
fixed-address 192.168.0.110;
}
Небольшое пояснение. В начале конфигурационного файла расположены инструкции, относящиеся ко всем компьютерам сети. Их смысл очевиден. Поскольку на терминалах нет жесткого диска, то демону журналирования syslogd в строке option log-servers 192.168.0.1 указывается удаленный сервер, который будет записывать от него сообщения. Для того чтобы демон syslogd на сервере мог принимать сообщения от терминалов в файле конфигурации /etc/sysconfig/syslog должен использоваться ключ ′-r′:
SYSLOGD_OPTIONS=»-m 0 -r «
Далее идут индивидуальные настройки для каждого компьютера клиента. Здесь можно переопределить настройки сервера индивидуально. В строке hardware Ethernet 00-02-44-07-FC-C4 указывается аппаратный МАС-адрес сетевой карты, а в строке fixed-address 192.168.0.110 за ним статически закрепляется IP-адрес. Теперь при запросе клиента с указанным МАС-адресом, ему всегда будет выдаваться этот IP-адрес. Остальным же он будет назначаться на общих правилах из таблицы свободных адресов. Строка option root-path указывает на раздел, который будет смонтирован в качестве корневого с помощью службы NFS. Если в сети используется как обычные системы, так и бездисковые клиенты, то его можно использовать только для бездисковых станций, переместив их в индивидуальные секции.
Не забудь подправить файл /etc/hosts, прописав описание компьютеров сервера и клиентов:
127.0.0.1 localhost
192.168.0.1 example.com
192.168.0.110 terminal_1
Во время установки в список зависимостей попадут и пакеты tftpd-hpa и netkit-inetd, а в файл демона inetd /etc/inetd.conf, будет занесена строка для запуска tftp:
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd
-s /var/lib/tftpboot
Если уже используется xinetd, то следует удалить netkit-inetd, и создать файл /etc/xinet.d/tftp:
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
}
И не забудь убрать в /etc/xinetd.conf строку only_from = localhost. На этом настройки этих серверов можно считать законченными. Желательно проверить их работу перед применением. Запускаем "sudo /etc/init.d/xinetd start" и даем следующие команды:
$ sudo tftp example.com tftp> get ltsp/pxelinux.0 tftp> quit
Имя файла указано так потому, что корневой каталог для этого сервиса определен в файле /etc/xinet.d/tftp как server_args = -s /var/lib/tftpboot, т.е. этот каталог делается корневым (chroot), и поэтому если указать полный путь, то сервер просто не найдет необходимый файл.
Осталось убедиться, что portmap не ограничен loopback интерфейсом, строка -i 127.0.0.1 в /etc/default/portmap закомментирована. И в целях безопасности в /etc/hosts.allow ограничиваем доступ к portmap, rpc.mountd, rpc.statd и in.tftpd только с нашей сети:
portmap: 192.168.0.0/24
rpc.mountd: 192.168.0.0/24
rpc.statd: 192.168.0.0/24
in.tftpd: 192.168.0.0/24
Перезапускаем все используемые сервера:
$ sudo /etc/init.d/dhcp3-server start $ sudo invoke-rc.d nfs-kernel-server restart $ sudo invoke-rc.d nfs-common restart $ sudo invoke-rc.d portmap restart
Настройки параметров работы клиентов производятся в файле /opt/ltsp/i386/etc/lts.conf. Этот файл состоит из общих установок и разделов, определяющих индивидуальные настройки для каждого клиента. В них при необходимости можно переопределить те или иные глобальные установки. Благодаря такой схеме появляется возможность более гибкой адаптации к аппаратной конфигурации терминалов. Этот файл можно редактировать как вручную, так и используя скрипт /usr/lib/ltsp/ltsp_config.
Вот и все. Самое интересное, что это действительно работает. На клиентском компьютере спокойно загружается KDE с OpenOffice и работает с вполне терпимой скоростью, после перехода на оконный менеджер полегче вроде IceWM система вообще летает. Наиболее очевидное применение данной технологии это наши учебные заведения со старыми компьютерными классами, где добавление одного мощного компьютера позволит работать с современным ПО.
Хотя самым простым вариантом познакомиться или установить сервер LTSP, это взять один из дистрибутивов, в которых эта технология включена по умолчанию. В первую очередь это версия Ubuntu, ориентированная для использования в учебных заведениях . Кстати, именно на нем отрабатывается следующая версия пакета LTSP5, основное отличие которой – отказ от специализированных пакетов и максимальное использование оригинальных пакетов, идущих в репозитариях дистрибутивов. Другой известных проект аналогичного назначения, базирующийся на Fedora Core 4, также включает в себя последнюю версию LTSP. Кстати, один из его разработчиков Эрик Харрисон (Eric Harrison) является одним из активных участников проекта LTSP. Тем, кому ближе Debian, можно посоветовать (в девичестве Debian Edu). К сожалению, канадский проект , выпускавший готовое решение на основе Mandrake Linux 9.1, уже более двух лет не ведет активной разработки своего дистрибутива. Есть русская версия сайта проекта LTSP – , где найдете некоторую документацию.
Статья опубликована в мартовском номере журнала «Xakep» за 2007 год.





