Вторая жизнь старых компьютеров Сергей «grinder» Яремчук Хакер, номер #099, стр. 150 (grinder@ua.fm) LTSP: терминал-серверная технология загрузки бездисковых рабочих станций Сейчас во многих организациях скопилось приличное количество компьютеров старого парка, отслуживших свое как морально, так и физически. Программное обеспечение, которое можно на них запустить, уже далеко от требований и реалий сегодняшнего дня, и поэтому такие системы пылятся в углу. Выбросить их жалко, а средств на новые никто не выделяет. Но, немного постаравшись, можно за пару дней вдохнуть в эти железки вторую жизнь и на экране монитора компьютера с процессором Pentium 133 увидеть KDE последней сборки вместе с OpenOffice.org или Windows с свежим офисом, слушать на таких системах музыку и смотреть фильмы. Не веришь? Читай дальше. Назначение и возможности LTSP Открытость Linux-систем породила вокруг себя довольно много полезных проектов, и часто для решения какой-нибудь проблемы необходимо просто найти подходящий. Загрузкой бездисковых терминалов занимается проект LTSP (Linux Terminal Server Project, распространяется под лицензией GNU GPL) – www.ltsp.org. Его функция - разработка необходимых дополнений для Linux, позволяющих подключить большое количество низкопроизводительных тонких клиентов к мощному Linux-серверу и использовать его ресурсы для выполнения любых задач. Результат выполнения команд возвращается обратно клиенту и выводится на его экран. К компьютеру, выполняющему основную, наиболее трудоемкую работу, предъявляются особые требования. В большей степени это относится к объему оперативной памяти, которой должно теперь хватать на всех, и к скорости дисковых операций. А вот к рабочим станциям пользователей требования уже гораздо ниже. С возлагаемой на них задачей спокойно могут справиться и «четверки». А при использовании компьютера мощнее Р133 с 24 Мб ОЗУ и с 2 Мб видеокартой, увеличение производительности практически не заметно. Поддержка основной периферии (принтера, сканера, привода компакт-диска и некоторых других) обеспечивается сервером, но при установке дополнительных пакетов возможно их подключение непосредственно к терминалу. Но и это еще не все. В этом случае жесткий диск оказывается не у дел. Все приложения и необходимые для обработки данные могут находиться на сервере. Терминал при этом может использовать локальный жесткий диск лишь на первоначальном этапе, для загрузки системы. Преимуществ такого способа много: удобство обновления и снижение стоимости ПО, упрощение процедуры резервирования информации, централизованная защита от вирусов, снижение шума. Кроме того, пользователь не связан с конкретным компьютером, и нет необходимости в администрировании клиентских систем. И главное - большая долговечность клиентских машин, как моральная, так и физическая. Чтобы настроить LTSP, нужно понимать процесс. Поэтому буквально в двух словах опишу, что и как. После включения питания, управление передается BIOS, который, в свою очередь, выполняет инициализацию, проверку POST (Power-On-Self-Test) и анализирует порты на наличие дополнительных устройств. В ходе последней операции определяется установленная сетевая карта, в ее энергонезависимой памяти обнаруживается код, который начинает выполняться после завершения теста (вариант загрузки с других носителей несколько проще, но суть не в этом). Дальнейшую работу условно можно разделить на три этапа: получение IP-адреса, получение образа операционной системы и работа с данными. Чтобы получить IP-адреса, программа загрузки инициализирует широковещательный запрос (для нашего примера 192.168.0.255 по умолчанию используется порт 68, протокол UDP), в котором указывается свой, уникальный для каждой сетевой карты МАС-адрес. Для динамического распределения IP-адресов между компьютерами в сети задействуется служба DHCP. DHCP-сервер, приняв запрос, находит конфигурацию, соответствующую этому МАС-адресу, и возвращает необходимые данные. После получения адреса клиент должен загрузить ядро операционной системы. Для этого применяется TFTP - облегченная версия протокола FTP, которая не требует идентификации и использует UDP вместо TCP. Чтобы клиентские терминалы могли пользоваться файловой системой, на сервере должна быть настроена служба NFS. Вот сборкой готовой системы на основе LTSP мы и будем заниматься далее. Выбор способа загрузки по сети Клиентская система, после включения питания, отправляет DHCP-запрос, чтобы получить IP-адрес, путь к загружаемому ядру и путь к каталогу, который будет использован вместо корневого. Есть несколько вариантов, позволяющих сделать это, необходимо лишь выбрать более подходящий для конкретной ситуации: сетевая загрузка, используя EtherBoot, PXE, MBA, Netboot, не говоря уже о том, что можно просто загрузиться с дискеты, CD-ROM, USB или выбрать нужный пункт в меню при загрузке с жесткого диска. Для получения готового образа EtherBoot, заходим на сайт rom-o-matic.net, выбираем версию 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). Когда все будет работать, скачиваем прошивку Binary ROM Image (.lzrom) или PXE loadable ROM Image (.lzpxe) для EPROM (Erasable Programmable Read-Only Memory - перезаписываемая память) сетевой карты. При нажатии на кнопку «Configure» можно отредактировать некоторые параметры будущего образа. Выбираем нужный вариант и жмем «Get ROM». В результате получаем нужный образ. Для записи образа на дискету даем следующую команду: «cat your_image.lzdsk > /dev/fd0» (или «dd if=/path/to/rom-image of=/dev/fd0 bs=1024» - как кому привычнее). Все, программа первоначальной загрузки готова. Для теста советую попробовать загрузиться с дискеты и настроить схему «один сервер - один клиент», а после успешного преодоления всех подводных камней уже нарастить количество клиентов и заняться прошивкой кода в ПЗУ. Переходим к настройке сервера. Установка сервера LTSP LTSP доступен как набор пакетов для установки на Linux-cистеме, последние версии легко интегрируются в Ubuntu, Debian, Fedora Core, Gentoo и некоторые другие дистрибутивы. Кроме того, он есть в виде части уже готового дистрибутива (смотри врезку). Начиная с версии 4.0, процессы установки и настройки сервера стали четко разделены и более логичны. Можно скачивать пакеты или архивы для установки LTSP по одному с сайта проекта, можно загрузить их сразу одним 100-мегабайтным iso-файлом (ltsp.mirrors.tds.net/pub/ltsp/isos), либо взять систему пакетов используемого дистрибутива. Здесь полная свобода выбора. Причем, по сравнению с версией 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. Установку можно считать законченной. Теперь займемся доводкой и пройдемся по конфигурационным файлам, чтобы, если что-то пойдет не так, быстро найти и устранить причину. Настройка сервисов NFS и DHCP В настройках по умолчанию сервер LTSP для клиентских компьютеров будет использовать диапазон IP-адресов - 192.168.0.0. Сам сервер при этом получает адрес 192.168.0.1. Если по каким-либо причинам его нужно изменить, то не забудь подправить все файлы, которые будут упоминаться в статье. В том числе и файл /etc/exports. После всех исправлений необходимо заново сгенерировать ключи, повторно запустив скрипт ltsp-update-sshkeys. Строка в файле /etc/exports экспортирует в качестве корневого каталога клиентских систем каталог /opt/ltsp/i386. Полезно разрешить клиентам использование своих домашних каталогов и файла подкачки, который физически располагается на сервере. Дописываем в /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 Настройка TFTP Во время установки в список зависимостей попадут и пакеты tftpd-hpa и netkit-inetd, а в файл /etc/inetd.conf демона inetd будет занесена строка для запуска 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 или установить его - это взять один из дистрибутивов, в которых эта технология включена по умолчанию. Например, Edubuntu (www.edubuntu.org) - версия Ubuntu, ориентированная для использования в учебных заведениях. Кстати, именно на нем отрабатывается следующая версия LTSP5, основное отличие которой - отказ от пакетов специализированных и максимальное использование оригинальных, идущих в репозитариях дистрибутивов. Другой известный проект K12Ltsp (www.k12ltsp.org) аналогичного назначения базируется на Fedora Core 4. Он также включает в себя последнюю версию LTSP. К слову, его разработчик Эрик Харрисон (Eric Harrison) является одним из активных участников проекта LTSP. Тем, кому ближе Debian, можно посоветовать SkoleLinux (в девичестве Debian Edu) (www.skolelinux.org). К сожалению, канадский проект EduLinux (www.edulinux.cl), выпускавший готовое решение на основе Mandrake Linux 9.1, уже более двух лет не ведет активной разработки своего дистрибутива. Есть русская версия сайта проекта LTSP - www.ltsp.ru, где можно найти некоторую документацию. |