Установка и настройка тонкого клиента Thinstation

Подробное руководство по настройке тонких клиентов

На основе дистрибутива Thinstation и протокола NX

Технология NX, разработанная фирмой Nomachine, дает новые возможности для связи и способна оживить старые компьютеры в роли тонких клиентов.

Прежде чем перейти непосредственно к описанию NX, перечислю некоторые тенденции, которые сегодня становятся очевидными для многих крупных компаний нашей страны:

1. Компьютерная техника дешевеет и становится более доступной, чем раньше. При этом её производительность удваивается каждые 1,5-2 года согласно закону Мура. Это приводит к накоплению техники, не выработавшей свой ресурс, но уже устаревшей.

2. Разработанные на предприятиях силами программистов отделов АСУ в перестроечные годы клиент-серверные приложения еще работают на старой технике, но уже не соответствуют требованиям времени.

3. Современные программное обеспечение и операционные системы не заставить работать на компьютерах с процессорами прежних поколений (i386, i486 и т. д.).

4. Не секрет, что во многих организациях нашей страны с давних времен незаконно используются многие программы и ОС, которые сотрудники устанавливали по своей инициативе. Вначале это рассматривалось как само собой разумеющееся обстоятельство, потом оправдывалось финансовым положением. Сейчас, когда наша страна вступает в ВТО, правительство вынуждено такую ситуацию спешно исправлять, в связи с этим усилилось давление на предприятия со стороны внутренних органов с требованием отказаться от незаконно используемых ПО и ОС.

Очевидно противоречие между вторым и третьим пунктами: необходимо или найти способ, позволяющий эффективно задействовать старую технику для выполнения современных задач, или отказаться от этой техники. Если имеется достаточно средств, то выбор понятен. Но что делать, если средств нет или нет возможности списать такую технику, да и просто выкидывать жалко? И как решать не менее острую проблему «лицензионной чистоты» используемых программ, о которой говорится в четвертом пункте?

На помощь приходят терминальные технологии, которые позволяют задействовать старые компьютеры, а также частично снять вопросы «лицензионной чистоты», если применять решения на базе продуктов Open Source.

В журнале уже публиковалось несколько статей по работе с дистрибутивом Thinstation . В этой статье я расскажу об особенностях настройки и опыте эксплуатации на своем предприятии тонких клиентов на базе дистрибутива Thinstation и технологии NX, разработанной фирмой Nomachine.

До недавнего времени в мире терминальной связи было мало известно удачных сетевых протоколов высокого уровня, способных эффективно сжимать и шифровать трафик между тонким клиентом и сервером. Наиболее известные и популярные из них – это RDP от Microsoft и ICA от Citrix. Оба протокола используются серверами на базе ОС MS Windows. Меня же интересовала возможность использовать тонкие клиенты с серверами на базе Linux. В качестве основы для тонкого клиента почти сразу был выбран небольшой дистрибутив, этакий Linux-конструктор, Thinstation – как наиболее стабильно развивающийся и популярный в нашей стране и за рубежом. А вот с выбором протокола, который бы отвечал за общение с сервером, пришлось повозиться и поэкспериментировать. Перечислю основные критерии, по которым выбирался протокол. Во-первых, нам хотелось использовать как можно более широкий диапазон старых компьютеров, имеющих процессоры начиная с i486, с минимальным объемом памяти, такой техники у нас предостаточно. Во-вторых, отметались коммерческие продукты: мы не хотели нести дополнительные расходы. В-третьих, необходимы хорошая поддержка русского языка и кириллицы, а также наличие привычного для пользователей способа переключения между раскладками – комбинации клавиш . В-четвертых, в рамках локальной сети нам необязательна поддержка шифрации, но важны сжатие и минимизация сетевого трафика.

Поиск решения

В первую очередь я обратил внимание на VNC как наиболее распространенный и имеющийся в любом дистрибутиве Linux, а также являющийся легким в настройке продуктом. Когда необходимо подключиться к удаленному рабочему столу Linux-сервера с рабочей станции Windows или того же Linux, то первое, что приходит в голову, это VNC. Скачайте последнюю версию дистрибутива Thinstation , затем распакуйте полученный архивный файл в домашнем каталоге. Будем считать, что путь к дистрибутиву выглядит так: ~/thinstation. Файл, отвечающий за параметры сборки, находится здесь: ~/thinstation/build.conf. Он имеет подробные комментарии. О его настройке, а также о том, как заставить образ Thinstation загружаться при помощи сетевой карты с бутовой микросхемой, я подробно рассказывать не буду, об этом уже писалось в указанных статьях. Коротко перечислю действия по настройке клиента: редактируем ~/thinstation/build.conf и создаем образ, запустив скрипт ~/thinstation/build. Готовый файл образа ~/thinstation/boot-images/etherboot/thinstation.nbi копируем на TFTFP-сервер. Добавляем в файл настройки dhcp.conf DHCP-сервера запись о MAC-адресе сетевой платы тонкого клиента. В каталоге TFTP-сервера создаем файл с настройками для данного MAC-адреса и(или) редактируем файл thinstation.conf.network. Настройки моей рабочей системы можно посмотреть в листинге раздела «Настройка и создание образа Thinstation» и на рис. 1.

Рисунок 1. Взаимосвязь компонентов NX

Для того чтобы добавить в образ пакет VNC-клиента, раскомментируем строчку «#package vncviewer» в конфигурационном файле ~/thinstation/build.conf. Если каталог tftp-сервера находится в /tftpboot (как это у меня), то отредактируйте файл /tftpboot/thinstation.conf.network таким образом, чтобы в нем появились строчки:

SESSION_0_TYPE=vncviewer

SESSION_0_TITLE="VNC"

SESSION_0_VNCVIEWER_SERVER=10.10.10.10:5901

IP-адрес 10.10.10.10 замените на адрес вашего VNC-сервера.

Теперь проверим собранный с новым параметром образ в работе: включаем тонкого клиента, дожидаемся загрузки и запуска образа Thinstation, подключаемся к VNC-серверу. Обратите внимание на то, что переключение раскладок происходит с помощью клавиши «правый Alt». Собственно, виноват здесь не VNC-клиент, а файл Thinstation из пакета поддержки кириллицы keymaps-ru. Чтобы долго не возиться с поисками решения проблемы, я сгенерировал xkb-файл в настроенной системе SUSE-10.0 следующим образом:

xkbcomp:0 ru.xkb

xkbcomp -xkm ru.xkb ru.xkm

Утилита xkbcomp конвертирует описание XKB-раскладки в один из форматов. В первой команде генерируется дамп текущей раскладки из источника, в качестве которого выступает X-дисплей «:0». Вторая команда компилирует полученный файл в понятный для системы двоичный вид. Заменяем исходный файл своим:

cp -f ru.xkm ~/thinstation/packages/keymaps-ru/x-common/lib/kmaps/xkb

После сборки образа получаем нормальное переключение раскладок по . Вот только работает VNC-клиент недопустимо медленно. На компьютерах с процессором ниже P-200 начинается этакое «слайд-шоу», когда любое действие на удаленном рабочем столе сопровождается неторопливой прорисовкой этих изменений на экране монитора тонкого клиента. Существует множество VNC-решений, использующих схожие методы кодирования данных при передаче, все используют протокол Remote FrameBuffer (RFB). Различаются они количеством функций, параметрами кодирования данных, а также числом поддерживаемых платформ. Например, RealVNC поддерживает сервер и клиент для Windows, UNIX, Microsoft PocketPC и Mac OS X, TightVNC включает сервер и клиент для Windows и UNIX, VNC for DOS – клиент для DOS, UltraVNC – сервер и клиент для Windows, OSXvnc – сервер и клиент для Mac OS X. Я протестировал RealVNC и TightVNC: второй продукт (и сервер, и клиент) субъективно немного быстрее, но оба создают эффект «слайд-шоу» на слабых компьютерах. Придется попробовать что-нибудь другое в качестве протокола связи между клиентом и сервером. VNC пока оставим в покое, позже придется к нему еще вернуться. Вот здесь я обратился к NX.

Поддержка Nomachine NX-клиента впервые появилась в Thinstation версии 2.1 в 2005 году, а последней на текущий момент является 2.2, она и будет подразумеваться далее. Для сборки образа с пакетом NX раньше был необходим прямой доступ в Интернет, в последних версиях Thinstation появилась возможность указывать путь к файлу префиксом «file://». Используемый и поддерживаемый дистрибутивом Nomachine NX клиент до сих пор имеет версию 1.5.x, хотя уже прошло достаточно времени с момента появления новой версии NX 2.0. В файле конфигурации build.conf раскомментируем строку «package nx», также в конце файла найдем строку «param nxurl»: укажем путь к заранее скачанному файлу, либо оставим как есть(нужен доступ в Интернет). Полученный сгенерированный образ копируем в каталог tftp-сервера, туда же копируем файл thinstation.conf.sample из корня дистрибутива, переименовываем его в thinstation.conf.network и правим: ищем на предмет #SESSION_0_TYPE=NX и редактируем строчки, относящиеся к этой сессии (здесь с номером 0), внося нужные параметры.

Включаем тонкого клиента и загружаем созданным образом, проверяем быстродействие. Прогресс налицо: «слайд-шоу» прекращается на ПК с процессором P-100, P-120 и выше. Это не то, чего бы нам хотелось получить в результате, так что ПК с процессорами i486 задействовать здесь не удастся. Такие ПК мы назвали «супертонкими» клиентами и определили их для работы с ДОС-программами, используя связку FreeDOS и sshdos со стороны клиента и Dosemu со стороны Linux-сервера. В этой статье я о них рассказывать не буду. Тем не менее это хороший результат, посмотрим на требования к железу со стороны разработчиков Thinstation и NX-клиента: первые рекомендуют i486-процессор и 16 Мб памяти, вторые – процессор с частотой от 400 Мгц и памятью 128 Мб. Минимально необходимой конфигурацией для работы тонкого клиента с пакетом NX эмпирически определим процессор P-120 и объем оперативной памяти 32 Мб. Я протестировал и некоторые другие клиенты, в частности, XRDP, VNC for DOS, но по той или иной причине реальной альтернативы NX я не нашел. Теперь пришло время познакомиться с технологией NX поближе.

Обзор и краткое описание Nomachine NX

Архитектура NX – это набор Open Source-технологий и коммерческих средств, призванных обеспечить легкость и распределенность сетевых вычислений. Он состоит из серверного ПО, позволяющего любому UNIX-компьютеру стать терминальным сервером, и клиентов для широкого набора платформ и ОС. Nomachine выбрала в качестве основы для архитектуры NX известную и широко используемую систему X-Window, на которой основаны GUI Linux и других ОС UNIX.

Большинство имеющихся сетевых решений не было разработано в качестве основного средства для доступа пользователей к рабочему столу. Такие протоколы как RDP и VNC являются много более простыми, чем X (и поэтому хорошо подходящими для тонких клиентов), но их простота не компенсирует недостатка эффективности и функциональности. Например, эти протоколы используют для прорисовки удаленного экрана передачу больших объемов данных изображений. Хотя RDP и является более эффективным протоколом, чем RFB (протокол, используемый VNC), он был изначально разработан не для ежедневного использования устройствами сети, а лишь в качестве расширения для ОС. X-Window – это графическая подсистема (а не расширение ОС), и X-приложения взаимодействуют с ней, используя X-протокол, поэтому ОС не имеет специального уровня, отвечающего за трансляцию обновлений экрана в сетевой протокол.

Основными недостатками сетей с X-терминалами являются избыточность и задержки в передаче графических данных X-протокола. Со времени появления X-Window рабочий стол пользователя оброс всевозможными графическими элементами и эффектами, которые увеличили требования к сетям передачи данных.

На рис. 1 под цифрой 1 показана традиционная работа по протоколу X: сжатия нет, требования к пропускной способности и задержкам сети критичны. Напомню, что в идеологии X-Window X-сервер работает на терминале, а на терминальном сервере – X-клиент, который шлет запросы X-серверу терминала .

В простейшем случае можно запускать приложения с графическим выводом с помощью параметра -X команды ssh, например, «ssh -X me@server firefox». Можно добавить параметр -С для компрессии(используется библиотека ZLIB). Также можно оптимизировать скорость взаимодействия узлов, увеличивая пропускную способность сети. Но существует предел, выше которого увеличение пропускной способности перестанет влиять на скорость этого взаимодействия. Причиной тому – интенсивный обмен запросами/ответами современных X-приложений.

NX использует три основных метода ускорения работы приложений: сжатие, кэширование и подавление избыточного трафика X-протокола.

n В основе идеи разностной компрессии лежит проект Differential X Protocol Compressor (DXPC) , созданный в 1995 году, там уже упоминаются термины клиентского и серверного прокси. Nomachine подхватила идею и разработала свой собственный продукт. Заявляется о 10-кратном превосходстве NX над стандартной библиотекой ZLIB.

n Nomachine также разработала умный механизм кэширования X-трафика, который использует знакомый по прокси-серверам термин «попаданий в кэш». Этот механизм сокращает сетевой трафик при передаче одних и тех же блоков данных, а при изменении этих блоков данных потока вычисляет и передает только их разницу.

n До NX не было надежного способа подавления избыточного трафика X-протокола на дальних линиях связи. NX может это делать, транслируя X-трафик на удаленном конце(от приложения к nxagent) в трафик протокола NX.

Все три метода совокупно позволяют достичь 70-кратного улучшения работы с удаленным X GUI при использовании наибольшего уровня сжатия на линиях связи с низкой пропускной способностью и большой задержкой (в настройках клиента NX «modem» соответствует максимальному сжатию, а «lan» – отсутствию сжатия). На рис. 1 под цифрой 2 показана взаимосвязь компонентов NX: на модулях NX Proxy осуществляется компрессия/декомпрессия и кэширование, между ними проходит трафик по NX-протоколу, требования к качеству линий связи минимальны, заявляется о возможности работы вплоть до скорости 9600 бит/сек.

Подобно трансляции X-трафика посредством nxagent, имеется другой агент (“nxviewer”), который транслирует RFB/VNC-трафик в протокол NX. Это улучшает эффективность соединений до 10 раз по сравнению с работой обычного vncviewer, связывающего локальный X-дисплей с удаленным сервером VNC. В этом мы убедимся.

На рис. 1 под цифрой 3 показана возможность одновременной работы разных агентов NX, RDP, VNC. При этом NX-агенты эффективно транслируют чужеродные протоколы в свой собственный и далее передают трафик через NX Proxy.

n NX Proxy – этот компонент как раз и отвечает за компрессию/декомпрессию: в клиентском режиме кодирует запросы от X-клиентов и декодирует ответы от X-сервера, в серверном – наоборот.

n NX Agent – термин «агент» используется для описания компонента, которому передается сформированное изображение перед передачей в сеть через прокси.

n NX Viewer – модифицированный Nomachine обычный VNC-клиент, транслирующий VNC/RFB-трафик в NX-протокол.

n NX Desktop – RDP-клиент, который транслирует RDP-трафик в NX-протокол.

Nomachine открыла исходные коды большинства своих наработок и библиотек, их можно скачать всем желающим с . Сборки от самой Nomachine для всех клиентов доступны бесплатно, также есть различные варианты сборок NX-серверов, поставляемые за определенную плату: годовая подписка на NX Enterprise Server с неограниченным количеством пользователей и числом процессоров 1-2 стоит 1494$, наиболее полное решение с балансировкой нагрузки и управлением узлов на базе NX Advanced Server обойдется в 3494$. Кроме того, имеется вариант NX Free Edition, который можно скачать бесплатно, но имеет ограничение на количество одновременных соединений и пользователей, равное двум, так что если есть желание администрировать Linux-сервер из дома с помощью обычного аналогового модема, то лучше, безопаснее и проще этого решения не найти. Отмечу также наличие клиентских версий NX Client Desktop Edition для PlayStation 2 (при использовании Linux Kit), а также NX Client Embedded Edition для Sharp Zaurus 5xxx и HP/Compaq iPAQ. Их можно также скачать бесплатно . Так что, если вы в командировке, а с собой только КПК, ничего не мешает подключиться и работать удаленно на своем Linux-сервере.

Сборка и запуск NX

В свою очередь, на основе открытых исходников сообщество разработало версию серверной части NX под названием FreeNX, а также KNX – клиент для соединения с сервером из под X. FreeNX – это набор shell-скриптов, которые вместе с открытыми библиотеками от NX формируют серверную часть (backend).

Вначале работы с NX в качестве сервера мною использовался ПК с ОС SUSE 10.0. В составе дистрибутива уже шла сборка FreeNX, но, во-первых, она имела более чем годовую давность, а, во-вторых, столкнувшись с первыми трудностями при работе, я решил, что пора собрать серверную часть из исходников самому. Рассказывать буду о сборке из исходников версии 1.5 как наиболее проверенной временем, а потом уточню, какие имеются особенности для сборки версии 2.0(2.1).

В настоящий момент на сайте Nomachine выложены исходники версии NX 2.0, эта версия является рекомендуемой фирмой, а на исходники версии 1.5 там же имеется специальная ссылка. Качаем последние версии следующих тарболов со странички : nx-X11, nxagent, nxcomp, nxcompext, nxdesktop (если нужна поддержка RDP), nxproxy, nxscripts, nxviewer (если нужна поддержка VNC). nx-X11 – это версия 4.3 Xfree86, которая имеет модифицированные Nomachine X-библиотеки. Часть исходников будет распаковываться прямо в дерево nx-X11, поэтому развернем его в первую очередь, очередность распаковки остальных тарболов неважна, главное, чтобы они все распаковывались в одном каталоге. Туда же качаем и распаковываем скрипты FreeNX с адреса . Еще понадобятся два патча, качаем их отсюда . Каталог нашей сборки примет следующий вид:

n freenx-0.4.4

n nx-X11

n nxcomp

n nxcompext

n nxdesktop

n nxproxy

n nxscripts

n nxviewer

n freenx-lfs_hint.diff

n NX-lfs_hint.diff

Для сборки понадобятся следующие пакеты (их можно установить из вашего дистрибутива Linux): libjpeg-devel, libpng-devel, openssl-devel, netcat, expect. Описание сборки можно найти также здесь .

# Накладываем NX patch

patch -p0 < NX-lfs_hint.diff

# Собираем X – самая длительная часть, может занять до часа времени

pushd nx-X11

make World

popd

# nxproxy

pushd nxproxy

./configure --prefix=/srv/NX

make

popd

# Сборка RFB-агента

pushd nxviewer

xmkmf -a

cp -a /usr/X11R6/lib/libXp.so* ../nx-X11/exports/lib/

make 2> /dev/null

popd

# Сборка RDP-агента

pushd nxdesktop

./configure --prefix=/srv/NX --sharedir=/srv/NX/share

make

popd

# Вся серверная часть будет находиться в каталоге /srv/NX, создаем некоторые из подкаталогов

mkdir -p /srv/NX/bin

mkdir -p /srv/NX/lib

mkdir -p /srv/NX/man/man1

mkdir -p /srv/NX/share/doc

# Инсталлируем собранные библиотеки и агенты

cp -a nx-X11/lib/X11/libX11.so.* nx-X11/lib/Xext/libXext.so.* nx-X11/lib/Xrender/libXrender.so.* /srv/NX/lib

install -m 755 nx-X11/programs/Xserver/nxagent /srv/NX/lib

# Создаем скрипт nxagent, который будет управлять всеми программами

cat > nxagent << "EOF"

#!/bin/sh

NXCOMMAND=$(basename $0)

export LD_LIBRARY_PATH=/srv/NX/lib:$LD_LIBRARY_PATH

exec /srv/NX/lib/$NXCOMMAND ${1+"$@"}

EOF

# И устанавливаем его:

install -m 755 nxagent /srv/NX/bin

# Устанавливаем библиотеки сжатия и прокси

cp -a nxcomp/libXcomp.so.* /srv/NX/lib

cp -a nxcompext/libXcompext.so.* /srv/NX/lib

install -m 755 nxproxy/nxproxy /srv/NX/lib

ln -snf nxagent /srv/NX/bin/nxproxy

# Установка RFB-агента

pushd nxviewer

make install DESTDIR=/srv/NX

mv /srv/NX/usr/X11R6/bin/nxviewer /srv/NX/lib

ln -snf nxagent /srv/NX/bin/nxviewer

chmod 755 /srv/NX/bin/nxviewer

mv /srv/NX/usr/X11R6/bin/nxpasswd /srv/NX/bin

popd

# Установка RDP-агента

pushd nxdesktop

make install

mv /srv/NX/bin/nxdesktop /srv/NX/lib

ln -snf nxagent /srv/NX/bin/nxdesktop

chmod 755 /srv/NX/bin/nxdesktop

rm -rf /srv/NX/usr

popd

# Установка скриптов

cp -r nxscripts /srv/NX/share/doc

# установка FreeNX

mkdir -p /srv/NX/etc

mkdir -p /srv/NX/var

mkdir -p /srv/NX/var/db

mkdir -p /srv/NX/home

mkdir -p /srv/NX/home/nx

pushd freenx-0.4.4

# Накладываем патч freenx, в основном здесь правятся пути на соответствие /srv/NX

patch -p0 < ../freenx-lfs_hint.diff

cp -a nxnode /srv/NX/bin

cp -a nxserver /srv/NX/bin

cp -a nxsetup /srv/NX/bin

cp -a nxkeygen /srv/NX/bin

cp -a nxnode-login /srv/NX/bin

cp -a nxloadconfig /srv/NX/bin

cp -a nxclient /srv/NX/bin

cp -a nxprint /srv/NX/bin

install -m 755 node.conf.sample /srv/NX/etc

popd

# Добавляем пользователя и группу nx

groupadd -g 77 nx

useradd -c "FreeNX user" -d /srv/NX/home/nx -g nx -s /bin/bash -u 77 nx

chown -R root.root /srv/NX

chown -R nx.nx /srv/NX/home/nx

# Если хотите использовать аутентификацию пользователей с помощью ключей, уберите параметр –setup-nomachine-key.

# Для работы с тонкими клиентами можно ничего не менять

/srv/NX/bin/nxsetup --install --uid 77 --gid 77 --setup-nomachine-key

# Проверяем, работает ли сервер NX:

/srv/NX/bin/nxserver --status

Должен быть примерно такой ответ:

NX> 100 NXSERVER - Version 1.4.0-44 OS (GPL)

NX> 110 NX Server is running

NX> 999 Bye

Устанавливаем конфигурационный файл freenx:

mv /srv/NX/etc/node.conf.sample /srv/NX/etc/node.conf

В конфигурационном файле находим следующую строчку и раскомментируем ее:

ENABLE_1_5_0_BACKEND="1"

Там же можно на первое время включить возможность ведения лога:

NX_LOG_LEVEL=6

Теперь можно установить клиент Nomachine NX на любой компьютер Linux (можно использовать и KNX) или Windows и проверить работу NX-сервера. C сервером можно работать как в режиме приложений, так и в режиме удаленного рабочего стола.

Рисунок 2. NX-сессия KDE в режиме рабочего стола из Windows XP

Настройка и создание образа Thinstation

От серверной части NX теперь перейдем к созданию образа Thinstation. Сам дистрибутив можно скачать здесь . При сборке образа будем стараться максимально уменьшить количество модулей и пакетов, все лишнее выкидываем. Поскольку у многих компьютеров, выбранных в качестве тонких клиентов, железо и периферия будут отличаться, то отдельные пакеты хотелось бы вынести за рамки общего для всех образа. Такая возможность у Thinstation есть: pkg означает собрать как отдельный подгружаемый пакет с расширением pkg, package означает включение в общий образ. Пакеты lprng, sshd, samba-server и другие однозначно собираем как подгружаемые. Можно все пакеты с X-драйверами видеокарт указать как pkg, но тогда при сборке образа появятся несколько дополнительных пакетов, которые надо будет подгружать всем, и в результате общий размер подгружаемых данных будет больше. Поступим проще: один из видеодрайверов, наиболее часто используемый, а именно S3, укажем как package, остальные – pkg. Модули тоже можно выносить за пределы ядра, но пока эта возможность работала некорректно, к тому же места в составе ядра они занимают совсем немного. Ниже представлен мой файл конфигурации build.conf:

module serial

module intel-agp

module via-agp

module 8139too

module floppy

module vfat

module supermount

pkg xorg6-ati

pkg xorg6-i810

pkg xorg6-nv

package xorg6-s3

pkg xorg6-s3virge

pkg xorg6-sis

pkg xorg6-trident

package keymaps-ru

package nx

pkg lprng

pkg sshd

pkg samba-server

param rootpasswd pleasechangeme

param xorgvncpasswd pleasechangeme

param bootlogo false

param bootresolution 800x600

param defaultconfig thinstation.conf.buildtime

param basename thinstation

param basepath .

param knownhosts ./known_hosts

param localpkgs true

param fulllocales false

param bootverbosity 3

param nxurl file://home/zhen/sources/nx/bin/nxclient-1.5.0-141.i386.tar.gz

Если будете использовать печать на принтер, подключенный к тонкому клиенту с помощью lprng, необходимо внести небольшую модификацию в файл thinstation/packages/lprng/etc/init.d/lprng. Для этого замените строчку:

echo "$PRINTER_X_NAME:lp=$PRINTER_X_DEVICE:wd=$PRINTER_X_DRIVER:br=$PRINTER_X_OPTIONS:lf=/var/log/spooler.log:sh:sf" >> /etc/printcap

echo "$PRINTER_X_NAME:lp=$PRINTER_X_DEVICE:wd=$PRINTER_X_DRIVER:br=$PRINTER_X_OPTIONS:if=/bin/lpf:lf=/var/log/spooler.log:sh:sf" >> /etc/printcap

Добавление локальной фильтрации избавило меня от проблемы «лесенки» при печати. Кроме того, я создал следующий скрипт для проверки работы печати ~/thinstation/packages/base/bin/my:

#!/bin/sh

echo PRINTER TEST to /dev/printers/0 1>&2

for i in 1 2 3 4 5 6 7 8 9;

do

echo PRINTER /dev/printers/0 $i > /dev/printers/0;

done

echo -e \\r\\f > /dev/printers/0

exit 0;

Когда непонятно, что именно не работает, можно выполнить этот скрипт на консоли тонкого клиента: /bin/my.

Чтобы при подключении клиента NX к серверу каждый раз не появлялось окошко с предупреждением о незнакомом хосте, создадим в корне Thinstation файл known_hosts:

ssh-keyscan -t rsa nxserver_ip>>~/thinstation/known_hosts

В качестве «nxserver_ip» надо указать IP-адрес NX-сервера. Таким образом клиент будет знать о цифровом отпечатке rsa-ключа NX-сервера при аутентификации.

После успешного выполнения build копируем thinstation/boot-images/etherboot/thinstation.nbi и thinstation.nbi.zpxe, а также все pkg-файлы из thinstation/boot-images/pkg-packages в каталог /tftpboot на tftp-сервер. У меня создающийся файл thinstation.nbi.zpxe не заработал, в таком случае по адресу можно скачать файл BootPXE535.zip, в этом архиве есть универсальный загрузчик loader-native.zpxe, с ним все должно работать.

Конфигурационные файлы Thinstation достаточно хорошо откомментированы, но вот сам процесс настройки и последовательность действий не всегда очевидны, так что некоторые трудности, с которыми мне пришлось столкнуться, и тонкости я все-таки упомяну.

Рисунок 3. Файлы настроек тонких клиентов Thinstation

На рис. 3 показаны основные действия по включению тонкого клиента в работу. Сначала добавляем информацию о MAC-адресе сетевой карты в dhcpd.conf. Не забудьте указать настройки в описании подсети, связанные с tftp, они задаются директивами «next-server» и «option root-path». У меня сервисы tftp и dhcp находятся на одном сервере FreeBSD, это облегчает их настройку. Все файлы настроек располагаются в /tftpboot. Потом в файле thinstation.hosts прописываем по-порядку: произвольное имя хоста (лучше, чтоб оно включало информацию о размещении терминала), MAC-адрес, группы, членом которых терминал является, в конце строки можно поместить комментарии за знаком «#», например:

otd146_57158 00e04d08d710 smb_flop_hard TUX1C monitor #very important PC

Здесь по порядку: имя хоста, в моем случае состоит из номера отдела и инвентарного номера, далее MAC, и далее перечисление названий файлов конфигураций, который будут использованы этим хостом.

Далее создаем файл настроек thinstation.conf-MAC, я использую в названии MAC-адрес, хотя можно использовать IP-адрес или имя из thinstation.hosts. Заметьте, что здесь в имени файла MAC-адрес использует только заглавные буквы. Группы описываются в файлах с названием thinstation.conf.group-ИМЯГРУППЫ. В файле thinstation.conf-MAC находятся те настройки, которые касаются только этого терминала, и не включены в другие группы. Например, все общие настройки монитора описаны в файле thinstation.conf.group-monitor, а один параметр «SCREEN_VERTREFRESH» вынесен в файл thinstation.conf-MAC. Это связано с тем, что используются разные мониторы, и можно изменить настройку кадровой частоты экрана, этот и другие параметры можно настраивать для каждого терминала или для всех сразу. То же касается настройки мышки. По умолчанию настройка выполнена для PS/2-мыши. Если используется мышка, подключенная к порту COM1, то указываются два параметра «MOUSE_PROTOCOL=Microsoft» и «MOUSE_DEVICE=/dev/ttyS0», если к порту COM2, то во втором параметре указывается /dev/ttyS1.

Общий для всех файл конфигурации /tftpboot/thinstation.conf.network у меня почти пустой. Вся информация из него вынесена в отдельные файлы групповых настроек, на которые есть ссылки в thinstation.hosts. Так как используются два терминальных сервера c разными версиями NX и каждый клиент использует только свой сервер, то конфигурации вынесены в отдельные текстовые файлы (NX и TUX1C), кроме того, используются разные образы Thinstation. Также не забывайте, что названия файлов thinstation.nbi и thinstation.nbi.zpxe взаимосвязаны: если в dhcpd.conf указана строчка:

thinstation.nbi.zpxe";

то будет использован образ thinstation.nbi, в моем случае образов несколько, соответственно и записи в dhcpd.conf для каждого терминала разные.

Отличия сборки NX2

В нашей системе используются два NX-сервера. На одном работает NX, собранный из исходников версий 1.5, для работы с ним используются клиенты 1.5.x. На другом работает NX версии 2.0. Расскажу, в чем отличия работы и сборки этой версии. На сервере установлены 64-битные Opteron, используется система SLES 10.0 x86_64. Так вот собрать на этом сервере NX так, как это было в случае с NX 1.5 на 32-битной системе, у меня не получилось, даже когда я пробовал явно указать сборку для 32-битной системы:

make World BOOTSTRAPCFLAGS="-m32"

Видимо, это особенности 64-разрядной системы и ее библиотек. Несколько позже на сайте Nomachine я нашел заметку , в которой сказано, что исходные тексты NX разработаны для 32-битных систем, но их можно использовать и в 64-битных системах. Поскольку у меня еще есть компьютер с установленной SLED 10.0 x86 и версии всех библиотек, ядра и программ точно такие же, как у SLES, то я решил собрать NX на нем, а потом перенести каталог с результатом сборки обычным копированием на 64-разрядную систему. Так и сделал: все заработало как ни в чем не бывало. Качаем файлы с теми же названиями, что и при сборке версии 1.5, только с суффиксами 2.0 (или 2.1). Всё компилируется точно так же, как и в случае с NX 1.5, за некоторыми исключениями: во-первых, я не стал накладывать патч NX-lfs_hint.diff, во-вторых, появилась новая версия скриптов FreeNX 0.5, поддерживающая новый NX 2.0, её можно забрать здесь , в-третьих, файл freenx-lfs_hint.diff, который вносит изменения в файл nxloadconfig из FreeNX 0.4, не подходит к новой версии FreeNX, его нужно отредактировать. Вот вывод команды diff, показывающий разницу между оригинальным и отредактированным файлом nxloadconfig:

--- nxloadconf_orig 2006-07-01 22:03:39.000000000 +0500

+++ nxloadconfig 2006-10-16 12:32:19.000000000 +0500

@@ -56,12 +56,12 @@

NX_LICENSE="OS (GPL)"

# Where can different nx components be found

-NX_DIR=/usr

+NX_DIR=/srv/NX

PATH_BIN=$NX_DIR/bin # if you change that, be sure to also

change the public keys

PATH_LIB=$NX_DIR/lib

-NX_ETC_DIR=/etc/nxserver

-NX_SESS_DIR=/var/lib/nxserver/db

-NX_HOME_DIR=/var/lib/nxserver/home

+NX_ETC_DIR=$NX_DIR/etc

+NX_SESS_DIR=$NX_DIR/var/db

+NX_HOME_DIR=$NX_DIR/home/nx

# Advanced users ONLY

AGENT_LIBRARY_PATH="" #Calculated

@@ -265,7 +265,7 @@

[ -z "$AGENT_LIBRARY_PATH" ] && AGENT_LIBRARY_PATH=$PATH_LIB

[ -z "$PROXY_LIBRARY_PATH" ] && PROXY_LIBRARY_PATH=$PATH_LIB

[ -z "$APPLICATION_LIBRARY_PATH" ] && APPLICATION_LIBRARY_PATH=$PATH_LIB

-[ -z "$APPLICATION_LIBRARY_PRELOAD" ] && APPLICATION_LIBRARY_PRELOAD="$APPLICATION_LIBRARY_PATH/libX11.so.6.2:$APPLICATION_LIBRARY_PATH/libXext.so.6.4:$APPLICATION_LIBRARY_PATH/libXcomp.so.1:$APPLICATION_LIBRARY_PATH/libXcompext.so.1:$APPLICATION_LIBRARY_PATH/libXrender.so.1.2"

+[ -z "$APPLICATION_LIBRARY_PRELOAD" ] && APPLICATION_LIBRARY_PRELOAD="$APPLICATION_LIBRARY_PATH/libX11.so.6.2:$APPLICATION_LIBRARY_PATH/libXext.so.6.4:$APPLICATION_LIBRARY_PATH/libXcomp.so.2.1.0:$APPLICATION_LIBRARY_PATH/libXcompext.so.2.1.0:$APPLICATION_LIBRARY_PATH/libXrender.so.1.2"

[ -z "$KDE_PRINTRC" -a -n "$KDEHOME" ] && KDE_PRINTRC="$KDEHOME/share/config/kdeprintrc"

[ -z "$KDE_PRINTRC" -a -z "$KDEHOME" ] && KDE_PRINTRC="$HOME/.kde/share/config/kdeprintrc"

@@ -511,8 +511,8 @@

[ -z $(echo "$ENABLE_ROOTLESS_MODE" | egrep "^$") ] && \

ERROR="yes" && echo "Error: Invalid value \"ENABLE_ROOTLESS_MODE=$ENABLE_ROOTLESS_MODE\""

- [ -z "$(strings $PATH_BIN/nxagent | grep "NXAGENT - Version 1.5.0")" ] && \

- ERROR="yes" && echo "Error: Could not find 1.5.0 version string in nxagent. NX 1.5.0 backend is needed for this version of FreeNX."

+# [ -z "$(strings $PATH_BIN/nxagent | grep "NXAGENT - Version 1.5.0")" ] && \

+# ERROR="yes" && echo "Error: Could not find 1.5.0 version string in nxagent. NX 1.5.0 backend is needed for this version of FreeNX."

[ -z $(echo "$ENABLE_USESSION" | egrep "^$") ] && \

ERROR="yes" && echo "Error: Invalid value \"ENABLE_USESSION=$ENABLE_USESSION\""

Nxloadconfig надо отредактировать до выполнения команды /srv/NX/bin/nxsetup. В конфигурационном файле /srv/NX/etc/node.conf раскомментируйте строчку:

ENABLE_2_0_0_BACKEND="1"

Теперь посмотрим, что надо изменить в дистрибутиве Thinstation (последняя версия сейчас 2.2) для поддержки NX 2.0 со стороны клиента. На момент написания статьи поддерживался только клиент версии 1.5. Забираем с адреса NX client, не требующий поддержки библиотек XFT, в виде tar.gz-архива (на данный момент это nxclient-2.1.0-9.i386.tar.gz), распаковываем его в домашнем каталоге, копируем файлы и создаём недостающие ссылки.

#!/bin/sh

tar -xzf nxclient-2.1.0-9.i386.tar.gz

cp ~/NX/bin/* ~/thinstation/packages/nx/usr/NX/bin

cp -fl ~/NX/lib/libXcomp.so.* ~/thinstation/packages/nx/usr/NX/lib/

ln -sf libXcomp.so.2.1.0 ~/thinstation/packages/nx/usr/NX/lib/libXcomp.so.1.5.0

cp ~/NX/share/keys/server.id_dsa.key ~/thinstation/packages/nx/usr/NX/share/keys

cp ~/NX/share/keyboards ~/thinstation/packages/nx/usr/NX/share/

cp -R ~/NX/share/images ~/thinstation/packages/nx/usr/NX/share/

touch ~/thinstation/packages/nx/build/installed

После этих действий пакет NX считается установленным в дереве пакетов Thinstation, теперь собираем образ, выполнив build, и копируем на tftp-сервер. Ну вот, образ готов и помещен в каталог tftp-сервера, но это еще не все. Оказывается NX-клиент новой версии на тонком клиенте по-другому интерпретирует настройки из файлов thinstation.conf.group-TUX1C(NX). После некоторого выяснения оказалось, что файл с настройками NX-сессии должен создаться в корне файловой системы тонкого клиента. Пришлось сделать небольшой патч для Thinstation, идею я подсмотрел на одном форуме:

# Патч просто копирует файл(ы) настроек NX-клиента из стандартного места в корень

ls $HOME/.nx/config/.>nxsessions

if [ -s nxsessions ] ; then

(cat nxsessions) |

while read filename ; do

probe=${filename%*.nxs}

if [ "$filename" != "$probe" ]

then

cp $HOME/.nx/config/$filename /$probe

fi

done

fi

rm nxsessions

Данный кусок кода надо вставить в конец файла ~/thinstation/packages/nx/etc/init.d/nx.init перед последней командой «exit 0». После этого надо пересобрать образ Thinstation. Вот, теперь NX-сессия на тонком клиенте запускается так, как и задумано. В целом новая версия работает более стабильно, управление сессиями происходит более корректно плюс в свежих исходниках обновлены алгоритмы компрессии, исправлены некоторые ошибки. Ранее для очистки и закрытия незавершенных сессий и процессов приходилось обращаться к помощи cron:

1 0 * * * root /srv/NX/bin/nxserver –cleanup

Удобно и то, что клиент NX 2.1 работает с серверами обеих версий.

Рисунок 4. NX-сессия в режиме приложения (1С)

В следующем номере читайте продолжение статьи, в которой я расскажу об особенностях эксплуатации, дополнительных настройках NX и Thinstation, а также предложу решения некоторых возможных проблем.

1. Борисов А. Тонкий клиент – шаг к мэйнфреймам? //Системный администратор, №11, ноябрь 2005 г. – С. 32-38.

2. Маркелов А. Использование бездисковых Linux-станций с загрузкой по сети. //Системный администратор, № 11, ноябрь 2004 г. – С. 12-14.

С понятием тонких клиентов многие из пользователей сталкиваются чуть ли не каждый день, правда, совершенно не отдавая себе отчета в том, с чем они имеют дело. На самом деле ничего в понимании того, каким образом работают тонкие клиенты, нет. Достаточно посмотреть на свой компьютер и установленное на нем программное обеспечение. Далее предлагается рассмотреть несколько возможных ситуаций, связанных с понятием тонких клиентов в операционной системе. И необязательно это должны быть ОС семейства Windows. Принципы, по которым производится установка и настройка тонкого клиента, для всех систем одинаковы.

Что такое тонкий клиент по своей сути?

Вообще, если посмотреть на некое официальное обоснование, под тонким клиентом подразумевается либо компьютерная система с ограниченными возможностями, либо программное обеспечение, которые взаимодействуют с удаленными серверами.

Чтобы было немного понятно, тонкие клиенты на пользовательских терминалах можно представить даже в виде обычного веб-браузера. Вся компьютерная система является так называемым толстым клиентом, а при формировании и подаче запроса серверу в интернете используется прослойка в виде тонкого клиента (как раз интернет-обозревателя).

С другой стороны, тонкие клиенты можно описать и как компьютерные терминалы с минимальной конфигурацией и отсутствием на них жестких дисков, но подключенные к локальной сети, когда загрузка операционной системы с центрального сервера производится на каждый компьютер при помощи специальных сетевых протоколов. То же самое касается и некоторых типов прикладного программного обеспечения.

Схема «сервер - тонкий клиент»: как это работает?

Собственно, суть вопроса сводится к тому, чтобы при отправке запроса на сервер он идентифицировал запрос, подтверждал его и отправлял ответ на клиентскую машину.

Тут абсолютно неважно, какая используется схема подключения Главное - четкая переадресация. Пояснить это можно на примере загрузки ОС с центрального сервера на клиентские терминалы, не имеющие винчестеров.

Загрузка операционных систем

Но как же операционная система может загружаться на компьютер без жесткого диска? Элементарно! Современные соединений могут использовать протоколы вроде RIS, DHCP, PXE, RDP и другие.

Получается, что фактически операционной системы на удаленной клиентской машине нет, но терминал может работать с ОС, установленной на сервере, при этом частично используя и его вычислительные возможности, и конфигурации компьютеров в окружении. Таким образом, сами тонкие клиенты этого типа получают распределенную по всей сети нагрузку на компьютерные ресурсы, а быстродействие ОС от этого не страдает. Плюс еще и в том, что администрирование клиентских машин в плане физического вмешательства в настройки ОС на каждой из них совершенно необязательно. Сделать это можно с администраторского компьютера или сервера посредством самого обычного удаленного доступа. В данном случае речь идет о том, что используется тонкий клиент на Windows (RDP), который в седьмой версии и выше является встроенным.

Система «тонкий клиент»: требования

Если речь идет именно о компьютерных терминалах, для работы тонкого клиента любого типа обычно достаточно самого простенького процессора и всего-то 1 Мб оперативной памяти.

В случае когда используется какая-то интернет-среда (например, Office 365), в обязательном порядке необходимо наличие хоть какого-то веб-браузера и достаточно высокой скорости подключения. С «Офисом», кстати, ситуация выглядит достаточно интересно. Дело в том, что этот интернет-проект использует возможности, присущие большинству программ этого типа с возможностью одновременного доступа и редактирования отдельно взятых документов, пусть даже сохраненных в облачном хранилище.

Пример установки и настройки приложений 1С

Однако посмотрим, что собой представляет установка тонкого клиента на примере программных продуктов 1С.

Требование тут самое простое: серверная часть находится на центральном терминале, клиенты - на остальных машинах в локальной сети. Только в данном случае использование подключения через обычно применяется на уровне TCP/IP, HTTP или HTTPS, а на терминалах устанавливаются жесткие диски минимального объема для инсталляции клиентской части программы.

Приблизительная схема по настройке может выглядеть следующим образом:

  • загрузка и инсталляция клиентов 8.2 и 8.3;
  • публикация базы данных на сервере;
  • добавление базы в список доступных;
  • установка подключения типа «веб-сервер».

Кстати, стоит отметить, что клиентские машины могут только получать доступ к центральной программе или выполнять какой-то минимальный набор разрершенных действий.

В формировании отчетности они участия не принимают, а вся нагрузка ложится исключительно на серверный ПК.

Подключение и лицензии

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

Выгоды и преимущества

Если посмотреть на преимущества, которые получает организация или предприятие при использовании тонких клиентов, они в основном сводятся к нескольким вещам. Во-первых, наблюдается существенная экономия затратных средств на приобретение необходимого «железного» оборудования или программного обеспечения. Во-вторых, сразу же отпадает проблема администрирования пользовательских терминалов, находящихся в локальной сети. Как уже говорилось выше, сделать это можно просто с центрального сервера. В-третьих, появляется возможность использования на всех сетевых машинах одной операционной системы и одинакового ПО. Правда, на самом сервере должна быть установлена именно серверная версия ОС, хотя некоторые системные администраторы при небольшом количестве дочерних терминалов умудряются пользоваться даже обычными стационарными модификациями.

Но есть и свои проблемы. Например, при выборе топологии подключения не по схеме «звезда», компьютеры, соединенные последовательно или подключенные к одному центральному кабелю, могут стать причиной выхода из строя всей сети, если хотя бы на одном из них появляются проблемы и ошибки. В остальном же использование тонких клиентов оправдано, как говорится, на все сто. Правда, в домашних условиях применять такие технологии смысла нет. А вот на предприятиях и в офисах иногда это становится крайней необходимостью.

Thinstation — мини-дистрибутив Linux, позволяющий превратить стандартные ПК в бездисковые тонкие клиенты. Его можно загружать по сети с помощью Etherboot/PXE или со стандартного носителя — дискеты/CD/жесткого диска/flash-диска и т.п.

Схема Загрузки
Загрузка Linux с HDD (SATA или PATA) или Flash – Загружается операционная система Linux c диска на котором находятся образ системы и ядро.
Примечание: Если используется сборка собранная с опциями NET_USE_DHCP=off и NET_FILE_ENABLED=OFF, то запрос к DHCP серверу не происходит и используеться локальный файл конфигурации thinstation.profile/thinstation.conf.user
Запрос DHCP сервера – при инициализации сетевого интерфейса происходит запрос к DHCP сервера на получение IP-адреса клиента, маски подсети, IP-адреса TFTP сервера для получения конфигурационных файлов.
Ответ DHCP сервера – При получении ответа, клиенту назначается IP-адрес и передается информация, где необходимо искать конфигурационные файлы. – загрузочные скрипты системы Linux получают c TFTP-сервера конфигурационные файлы, в которых описаны необходимые параметры для соединения клиента с терминальным сервером.
Инициализация терминального клиента

Установка на Диск
Для установки необходимо создать на жестком диске раздел 100 Мб с файловой системой fat. Переписать содержимое архива на диск. Подправить файл конфигурации thinstation.profile/thinstation.conf.user, описание настроек можно посмотреть в статье Синтаксис конфигурационных файлов.
Прописать загрузчик, для чего в командной строке windows (Пуск — Выполнить — cmd) или загрузив DOS, набрать:

F:>syslinux.exe -ma f:

где f — диск с образом

Внесения изменений в файл конфигурации на уже установленной системе:
1. Загружаем терминального клиента, переходим на вторую консоль Alt+F2 или Alt+Ctrl+F2 (если AUTOSTART=On). Заходим под логином root, пароль secretword. В качестве редактора используем e3. Набираем:

E3 /mnt/disc/sda/part1/thinstation.profile/thinstation.conf.user

где sda — первый SATA диск, для PATA — hda. Чтобы не вбивать весь путь, используйте кнопку Tab после первых введенных букв. После редактирования нажмите Ctrl+K X — для сохранения.
2. Редактировать thinstation.conf.user можно удаленно по telnet. Для windows лучше использовать PuTTY
P.S. Если диск отформатирован в ext2/ext3/ext4, то для загрузки нужен extlinux Скачиваем архив syslinux и взять из него (/syslinux-6.02/bios/extlinux/). Раздел должен быть активным.
Открывем консоль и переходим на монтированный раздел с диском или флэшкой например cd /mnt/flash, копируем туда extlinux и выполняем: ./extlinux –install . точка в конце означает что устанавливаем в текущий каталог.
Файл конфигурации: extlinux.conf, точная копия syslinux.cfg


Как работает PXE
1.PXE запрос DHCP сервера:
2.Ответ DHCP сервера
– в зависимости от параметров конфигурационного файла запускается RDP или ICA клиент, который устанавливает соединение с терминальным сервером.

Настройка сервера DHCP и TFTP на linux.

Пример настройки на Freebsd.
В Freebsd чтобы inetd слушал запросы TFTP, нужно расcкомментировать строку в файле /etc/inetd.conf:

Tftp dgram udp wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot

И сделать рестарт сервиса inetd:

Dom:~# killall -1 inetd

Потом создать директорию tftpboot и дать права:

Dom:~# mkdir /tftpboot dom:~# chmod -R 777 /tftpboot

Option domain-name "example.com"; option domain-name-servers 192.168.0.1; server-identifier NAME_HOST; authoritative ; allow booting; allow bootp; max-lease-time 172800; ignore client-updates; ddns-domainname "example.com"; ddns-updates on; ddns-update-style interim; default-lease-time 86400; log-facility local7; subnet 192.168.0.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option routers 192.168.0.1; one-lease-per-client on; range 192.168.0.20 192.168.0.30; } group { filename "pxelinux.0"; next-server 192.168.0.1; host 1 { hardware ethernet 00:0E:8F:32:B6:C5; fixed-address 192.168.0.10; } host 2 { hardware ethernet 08:20:07:26:C0:A5; fixed-address 192.168.0.11; } }

Распаковываем образ thinstation с pxe в /tftpboot

PXE-совместимые прошивки используются производителями при изготовлении сетевых карт и BIOS материнских плат с интегрированными сетевыми картами. Поэтому для бездисковой загрузки потребуется сетевая карта укомплектованная прошивкой PXE. Если у вас сетевая карта без прошивки, но Вы желаете сделать бездисковую загрузку, то как единственный выход в использовании прошивок Etherboot. Этот вариант здесь не рассматривается.
Как работает PXE
1.PXE запрос DHCP сервера: сетевая карта с поддержкой PXE запрашивает DHCP сервер на получение параметров, таких как IP-адрес клиента, маска подсети, IP-адрес TFTP сервера, на котором находится образ, а также — имя образа.
2.Ответ DHCP сервера – сервер назначает IP-адрес и затем передает его для использования клиенту вместе с другими параметрами. – клиент загружает с указанного DHCP-сервером IP-адреса TFTP сервера сначала PXE загрузчик — pxelinux. 0, с помощью которого загружается уже ядро операционной системы Linux — vmlinuz и образ файловой системы — initrd, включающий все необходимое для работы клиента. – загрузочные скрипты системы Linux получают c TFTP-сервера конфигурационные файлы, в которых описаны необходимые параметры для соединения клиента с терминальным сервером.
5.Инициализация терминального клиента – в зависимости от параметров конфигурационного файла запускается RDP или ICA клиент, который устанавливает соединение с терминальным сервером.

Настройка сервера Windows 2003

Службы и сервисы, необходимые для работы «тонких» клиентов

Вы можете использовать в качестве терминального сервера:

Microsoft® Windows® Terminal Server

Citrix® MetaFrame®

Если Вы используете в качестве терминального сервера Windows® Terminal Server, выберите следующие службы и сервисы:

Terminal Server

Если Вы используете в качестве терминального сервера Citrix® MetaFrame®, выберите следующие службы и сервисы:

Citrix® MetaFrame®

Пакет файлов для загрузки по PXE

Настройка DHCP Server

Для настройки DHCP Server выполните следующие действия:

2. Нажмите кнопу Add or remove a role.

3. В открывшемся диалоговом окне Preliminary Steps нажмите кнопку Next.

4. В открывшемся диалоговом окне Configuration Options выберите элемент Custom Configuration и нажмите кнопку Next.

5. В списке Server Role выберите DHCP Server и щелкните на кнопке Next дважды.

6. В диалоговом окне Welcome to the new Scope Wizard нажмите кнопку Next.

7. В диалоговом окне Scope Name в полях Name и Description введите имя и описание, после чего нажмите кнопку Next.

8. В диалоговом окне IP Address Range выполните следующие действия для выдачи DHCP сервером IP адресов для тонких клиентов:

Введите Start IP Address (Начальный IP адрес)

Введите End IP Address (Конечный IP адрес)

Нажмите кнопку Next.

9. В открывшемся диалоговом окне Add Exclusions допускается указать диапазон адресов, которые не будут выделяться DHCP сервером. Нажмите кнопку Next.

10. В открывшемся диалоговом окне Lease Duration можете указать время использования IP-адреса тонкими клиентами. Нажмите кнопку Next.

11. В диалоговом окне Configure DHCP Options выберите No, I will configure these options later. Нажмите кнопку Next, затем кнопку Finish.

12. Подтвердите действие очередным нажатием кнопки Finish.

13. Выберите Start→Programs→Administrative Tools→Manage Your Server.

14. В открывшемся диалоговом меню выберите элемент Manage this DHCP server

15. В диалоговом окне выберите элемент Server Options. Нажав правую клавишу мыши, в открывшемся контекстном меню выберите Configure Options.

16. В списке выполните следующие действия:

Выберите пункт 066 Boot Server Host Name и укажите IP адрес TFTP сервера, на который устанавливали DHCP сервер

Выберите пункт 067 Bootfile Name и введите имя pxe-загрузчика, а именно pxelinux.0

17. Нажмите кнопку Apply.

18. В диалоговом окне выберите элемент Scope . Нажав правую клавишу мыши, в открывшемся контекстном меню выберите Activate.

Настройка DHCP сервера завершена.

Настройка TFTP Server

1. Выберите Start→Settings→Control Panel→Add or Remove Programs.

2. Нажмите кнопку Add/Remove Windows Components.

3. В списке Components выберите Remote Installation Services и нажмите кнопку Next.

4. Нажмите кнопку Finish и на запрос о перезагрузке выберите No. Перезагрузку сервера осуществите позднее.

Настройка Terminal Server

1. Выберите Start→Programs→Administrative Tools→Manage Your Server.

2. нажмите кнопку Add or remove a role.

3. В диалоговом окне Preliminary Steps нажмите кнопку Next.

4. В списке Server Role выберите элемент Terminal Server и нажмите кнопку Next дважды.

5. В открывшемся диалоговом окне Configure Your Server Wizard появится предупреждение о перезагрузке сервера. Нажмите кнопку Ok.

6. После перезагрузки нажмите кнопку Finish.

Настройка TFTP Server на автоматический запуск

2. Раскройте список Services and Applications и выберите элемент Services.

3. Справа в появившемся списке нажмите правую клавишу мыши на пункте Trivial FTP Daemon и в контекстном меню выберите Properties.

4. В закладке General в выпадающем меню Startup type выберите Automatic. Нажмите кнопку Apply, затем кнопку Ок.

Создание пользователей терминальных сессий

1. Нажмите правую клавишу мыши на ярлыке My Computer и выберите Manage.

2. В раскрывающемся списке Local Users and Groups выберите папку Users.

3. В появившемся справа списке пользователей нажмите правую клавишу мыши и в открывшемся контекстном меню выберите New User.

4. В диалоговом окне New User введите User name (Имя пользователя) и Password (Пароль). Допустимо отменить выделение User must change password at next logon (Пользователь должен изменить пароль при следующем подключении) и установить необходимые вам пункты: User cannot change password (Пользователь не может изменить пароль), Password never expires (Срок действия пароля никогда не истекает), Account is disabled (Учетная запись отключена). Нажмите кнопку Apply, затем кнопку Ок.

5. В списке выберите папку Groups, и в списке справа нажмите правой клавишей мыши на имени группы Remote Desktop Users, далее выберите Propeties.

6. В появившемся меню выберите General, нажмите кнопку Add и введите имя пользователя, которому Вы хотите разрешить терминальный доступ к серверу. Затем щелкните на кнопке Check Names и подтвердите свой выбор нажатием на кнопку Ок.

7. Нажмите кнопку Apply и кнопку Ок.

Копирование файлов, необходимых для загрузки «тонких» клиентов

1. Создайте папку C:tftpdroot.

2. Скопируйте в нее файлы pxelinux.0, vmlinuz, initrd, thinstation.conf.network.

3. Создайте папку с:tftpdrootpxelinux.cfg.

4. Скопируйте файл default в папку c:tftpdrootpxelinux.cfg

5. Теперь необходимо отредактировать конфигурационные файлы. Подробное опи¬са¬ние действий представлено в части 3. «Изменение параметров конфи¬гура¬ци¬он¬ных файлов».

Настройка сервера для передачи звука тонким клиентам
Внимание!
Для передачи звука «тонким» клиентам необходимо, чтобы на сервере была установлена ОС Microsoft® Windows® 2003, звуковая карта и необходимые драйверы.

1. Выберите Start→Settings→Control Panel

2. Откройте Sounds and Audio Devices и установите выделение в пункте Enable Windows Audio. Нажмите кнопку Ok.

3. На запрос о перезагрузке нажмите кнопку Yes.

4. После перезагрузки вызовите Microsoft® Management Console (Start→Run→mmc).

5. Затем выполните следующие действия: File→Add/Remove Snap-in и нажмите кнопку Add.

6. Выберите Group Policy Object Editor и нажмите кнопку Add, затем последовательно нажимайте на кнопки Finish, Close,Ok.

7. Откройте элемент Local Computer Policy→Computer Configuration→Administrative
Templates→Windows Components→Terminal Services→Client/Server data redirection.

8. В списке справа правой клавишей выберите Properties в пункте Allow audio redirection.

9. Выделите пункт Enabled и нажмите кнопку Apply, затем кнопку Ок.

Требования ПК:
Оперативная память не меньше 256 Mb
Флешка не меньше 128 Mb


Чтобы Флешку сделать загрузочной используйте файл →

Сборка тонкого клиента, ориетнированного на определенные клиенты, сводится к следующим этапам:

  • Скачиваем полный репозиторий ThinStation
  • Собираем "толстый" (полный) образ
  • Загружаем тонкий клиент на толстом образе
  • Получаем список необходимых для этого клиента модулей ядра и пакетов
  • Исправляем конфиги сборки, оставив только самое необходимое (в том числе полученное на предыдущем этапе)
  • Собираем "тонкий" (облегченный) образ

Подготовка кухни

Сразу скажу, что есть и другой путь сборки - скачивание подготовленного.iso образа. Но мне это кажется не таким удобным, поэтому я буду описывать "правильный" вариант.

Скачивание репозитория

Вообще, для работы с ThinStation рекомендуется иметь базовые знания работы с Git. Просто потому, что ваши изменения нужно будет куда-то сохранять, а заблудиться в иерархии файлов, когда кухня уже распакована (не зная Git) - очень легко. Скачивание сводится к выполнению одной команды.

Всё остальное сейчас не важно - настраивать тонко будем потом.

Отдельно остановлюсь на том, зачем нужно поменять систему сжатия со squashfs на gzip . Скрипт hwlister.sh , о котором пойдет речь ниже, использует очень интересную методику поиска загруженного firmware - он просто смотрит время доступа к файлам в /lib/firmware и на основе этого делает выводы, какие файлы были загружены. Но squashfs монтируется с параметром relatime , что приводит к тому, что время доступа к файлам не меняется и список firmware (чёрт, не знаю, как перевести это слово, не потеряв смысл) всегда пуст. Изменение режима сжатия на gzip - самый простой и быстрый способ вернуть скрипт к жизни не залезая в кишки. Я написал об этом разработчикам, но ответа пока не было.

Сборка

Сборка любого образа выполняется в chroot - так что не забываем в него зайти. Для сборки толстого образа существует также специальный параметр --allmodules , который включает в образ все доступные модули ядра, что также пригодится на неизвестном железе.

После того, как процесс завершится, в директории boot-images можно будет найти варианты образа - iso, pxe и syslinux. Можно использовать любой и загружать клиент любым удобным способом.

Сбор информации

Когда подопытное железо успешно загрузилось, необходимо зайти в консоль любым удобным способом и написать:

Это обычный bash-скрипт, после выполнения которого вы обнаружите несколько файлов:

  • /firmware.list - список необходимых firmware
  • /module.list - список необходимых модулей ядра
  • /package.list - список необходимых пакетов, учитывая архитектуру будет содержать только xorg7-* пакеты
  • /vbe_modes.list - если используется uvesafb , этот файл будет содержать список поддерживаемых режимов

Некоторые файлы могут отсутствовать, если ничего подходящего не найдено

Этот же скрипт попытается загрузить файлы на ваш tftp-сервер, указанный в конфиге, однако, надеюсь, у вас запись на tftp, как и у меня, запрещена. Поэтому забираем файлы с тестируемой системы любым способом и кладем в директорию ts/build/machine/MACHINENAME , где MACHINENAME - кодовое имя, которое вы дадите своему железу.

Тонкий образ

Сборка тонкого образа - это всегда балансирование на границе между функциональностью и объемом. Меньше объем - быстрее загрузка бездисковых рабочих станций по сети, быстрее старт системы, меньше оперативной памяти требуется клиентам. Лично у меня стояла задача сделать образ минимального объёма всего под одну задачу - терминальный RDP-клиент. Об этом я и буду рассказывать.

Итак, у нас есть офис, набор тонких клиентов, подключенных проводами, получающих адрес по DHCP, загружающихся по PXE и стартующих одно единственное приложение - RDP-клиент.

Конфигурация сборки - build.conf

Как я уже писал выше, первый этап в конфигурации сборки - это правка файла build.conf . Он определяет какие пакеты будут включены в образ и некоторые другие параметры сборщика.

  • Все строки начинающиеся с machine - комментируем. Должно остаться только то, что используется у вас. Нужно отметить, что в конфигурации можно держать активными сразу несколько профилей - тогда получится образ, запускающийся на любом из них (в теории, если нет конфликтов).
  • Скорее всего вам не понадобятся файловые системы кроме vfat и ntfs - поэтому в блоке файловых систем можно смело комментировать строки isofs , udf , ext* .
  • Так как мы создали профиль для своего железа, содержащий необходимые пакеты xorg7 , то все строки содержащие package xorg7-* - можно смело комментировать.
  • Смело комментируем все пакеты локалей package locale-* кроме, конечно ru_RU , и, по желанию, en_US - нужна она или нет вопрос спорный.
  • Если вам нужен удаленный доступ к рабочим станциям - включите package sshd
  • Если вам нужны смарт-карты и USB-токены - включите package ccidreader
  • Если вы собираетесь вырезать оконный менеджер, рабочий стол и показывать пользователю только одно приложение (например FreeRDP) - включите пакет package automount для автоматического монтирования любых USB-устройств. При этом package udisks можно смело выключить.
  • Если вам не нужен интерфейс для Wi-Fi соединений и другие рюшечки - закомментируйте package networkmanager и включите package autonet . Но будьте готовы к тому, что придется покопаться в его внутренностях - это скриптовая обвязка для системных утилит и в некоторых сетях может работать не совсем так, как ожидается.
  • Чтобы максимально облегчить образ, включаем package openbox и выключаем package gtk-* , package icons-* , package fonts-* .

Что касается пакетов в разделе Applications - здесь выбор полностью за вами. Всё описанное выше применимо к тонким клиентам, где пользователь не будет видеть своего рабочего стола (RDP, VNC, etc) и для использования, например, локального браузера - многое из перечисленного выше придется оставить.

Остается не забыть вернуть param initrdcmd "squashfs" и убрать 3 строки в самом конце: package alltimezone , param allres true и param allfirmware true - в тонком образе это нам не пригодится.

Runtime-конфигурация - thinstation.conf.buildtime

Файл thinstation.conf.buildtime является по своей сути bash-скриптом, предоставляющим переменные окружения для всех скриптов запуска. Перед тем, как начать его редактировать, стоит заглянуть в директорию ts/build/conf (github) - здесь собраны кусочки конфигураций для каждого пакета, включающие в себя пояснения и все доступные переменные.

Давать какие-то универсальные советы - сложно. Настройка будет зависеть от вашего окружения и используемых пакетов. Приведу лишь пример для RDP-сессии.

# У пользователя не будет локального UI, так что локально выкручиваем громкость на максимум AUDIO_LEVEL = 100 MIC_LEVEL = 100 # Для бездисковых станций резонно собирать логи в одном месте SYSLOG_SERVER = syslog.example.com # Локаль и таймзона LOCALE = ru_RU.UTF8 TIME_ZONE = Europe/Moscow # Кнопки "Безопасного извлечения устройства" также не будет - поэтому включаем обязательно USB_STORAGE_SYNC = ON DISK_STORAGE_SYNC = ON # Монтировать устройства нужно в директорию, которую мы потом пробросим в удаленную сессию USB_MOUNT_DIR = /mnt/usb # Для поддержки кириллицы на съемных накопителях, я для себя вывел вот такой набор параметров. Он точно подходит для FAT32/NTFS разделов и FreeRDP USB_MOUNT_OPTIONS = DISK_MOUNT_OPTIONS = "rw,nosuid,nodev,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,showexec,utf8,flush,errors=remount-ro" # Если выключили NetworkManager и включили autonet - обязательно настройте сеть NET_USE_DHCP = ON # Нулевая сессия должна быть оконным менеджером # Можно попробовать обойтись без него и даже вообще без Иксов # но это тема для отдельной статьи SESSION_0_TITLE = Desktop SESSION_0_TYPE = openbox SESSION_0_AUTOSTART = ON # Главная рабочая сессия # Список параметров FreeRDP - пожалуй также повод для отдельной статьи SESSION_1_TITLE = RemoteDesktop SESSION_1_TYPE = freerdp SESSION_1_AUTOSTART = ON SESSION_1_FREERDP_SERVER = rdp.example.com SESSION_1_FREERDP_OPTIONS = "+decorations +fonts +aero ..."

Сборка тонкого образа

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

И это всё. В зависимости от того, что вы указали в build.conf , вы получите готовые образы для загрузки по PXE, с CD-ROM, жесткого диска или флешки. При описанной конфигурации можно добиться образа размером ~90 MB и времени загрузки по PXE (от включения питания до рабочего стола) около 1 минуты. С локального диска и того быстрее.

Другие возможности

Нужно отметить, что всё, о чем я писал выше - советы по сборке универсального образа. Я добился того, чтобы с одного образа можно было загрузить любой ПК из присутствующих в зоопарке компании. Но может получиться так, что вам понадобится сделать несколько вариантов клиентов, с разными настройками или, например, разными адресами серверов. В таком случае обратите внимание, что ThinStation умеет как скачивать дополнительные конфигурационные файлы во время загрузки, так и докачивать дополнительные модули. Это очень хорошо описано в документации, и я на этом останавливаться не буду.

Полезные заметки

Очистка кухни

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

  1. Не забыть выйти из chroot
  2. Убедиться, что сохранили все свои изменения в Git
  3. Отмонтировать все системные ФС внутри кухни: umount -R thinstation/*
  4. Запустить скрипт очистки: sudo ./setup-chroot -a
  5. Удалить всё, что осталось: git clean -dx - это удалит все несохраненные файлы

Добавление своих пакетов

Если вы собираетесь привносить в проект что-то свое, нужно знать о том, что в терминологии ThinStation, а вернее в терминологии CRUX Linux, на котором базируется TS, существует два базовых понятия:

  • package (далее "пакет") - некая абстракция, указывающая на то, что необходимо установить в будущий образ. Пакет может содержать кусок дерева файловой системы, отдельные файлы, или даже просто один конфигурационный файл, указывающий, например на зависимости.
  • port (далее "порт") - подобие *.deb иди *.rpm пакета, с одним важным отличием: архив со скомпилированными файлами не содержит правил установки, а представляет из себя просто кусок дерева файловой системы. Любые правила (скрипт компиляции, скрипты пост-установки, и т.д.) лежат рядом с архивом и легко редактируются.

Когда вы хотите дополнить образ чем-то своим, первое, о чем стоит задуматься, а что именно вам нужно? Если вы хотите добавить в образ пару текстовых конфигов - просто создайте свой пакет, включите его build.conf - и этого будет более чем достаточно. Если же вам нужно собирать бинарные файлы - то вам понадобится сделать свой порт.

Создание своего порта

Prtdir /ts/ports/yourproject

Хранить в отдельной директории будет гораздо проще и безопаснее. После редактирования файла нужно не забыть перезайти в chroot. Стоит отметить, что в этом файле уже присутствуют директории с портами, разложенными по коллекциям. Сборщик будет искать порт по имени во всех директориях по-порядку, поэтому, если боитесь коллизии имен - располагайте вашу директорию выше остальных.

Теперь вам понадобится создать один единственный bash-скрипт, который будет отвечать за сборку порта: /ts/ports/yourproject/portname/Pkgfile . Образец можно посмотреть , а можно подсмотреть в любом другом порте. Базовый вариант выглядит так:

Name = mdetect-TS version = 0 .5.2.3 release = 1 source =(http://ftp.de.debian.org/debian/pool/main/m/$name /$name -$version .tar.bz2) build() { cd $name -$version ./configure --prefix= /usr \ --exec-prefix= / \ --sysconfdir= /etc \ --mandir= /usr/man \ --disable-extras make make DESTDIR = $PKG install }

Давайте разберемся, что он делает (на самом деле делает не он, он лишь определяет стадию сборки):

  1. Скачивает файлы, заданные в source (в данном случае - http://ftp.de.debian.org/debian/pool/main/m/mdetect-TS/mdetect-TS-0.5.2.3.tar.bz2), их может быть несколько
  2. Распаковывает все скачанные файлы в рабочую директорию
  3. Выполняет configure + make
  4. Делает make install из директории /ts/ports/yourproject/portname/work/src в /ts/ports/yourproject/portname/work/pkg
  5. Полученное содержимое директории pkg упаковывается в архив. Это и будет наш порт, готовый для установки.

Проверим наши предположения. Чтобы выполнить первую сборку, необходимо сделать следующее:

[ _chroot]/# cd ts/ports/yourproject/portname/ [ _chroot]/ts/ports/yourproject/portname# pkgmk -kw =======> Building "/ts/ports/yourproject/portname/portname#0.5.2.3-1.pkg.tar.xz".

PXE -совместимые прошивки используются производителями при изготовлении сетевых карт и BIOS материнских плат с интегрированными сетевыми картами. Поэтому для бездисковой загрузки потребуется сетевая карта укомплектованная прошивкой PXE . Если у вас сетевая карта без прошивки, но Вы желаете сделать бездисковую загрузку, то как единственный выход в использовании прошивок Etherboot . Этот вариант здесь не рассматривается.

Как работает PXE

1.PXE запрос DHCP сервера: сетевая карта с поддержкой PXE запрашивает DHCP сервер на получение параметров, таких как IP-адрес клиента, маска подсети, IP-адрес TFTP сервера, на котором находится образ, а также - имя образа.

2.Ответ DHCP сервера – сервер назначает IP-адрес и затем передает его для использования клиенту вместе с другими параметрами.

– клиент загружает с указанного DHCP-сервером IP-адреса TFTP сервера сначала PXE загрузчик - pxelinux. 0, с помощью которого загружается уже ядро операционной системы Linux - vmlinuz и образ файловой системы - initrd, включающий все необходимое для работы клиента.

– загрузочные скрипты системы Linux получают c TFTP-сервера конфигурационные файлы, в которых описаны необходимые параметры для соединения клиента с терминальным сервером.

5.Инициализация терминального клиента – в зависимости от параметров конфигурационного файла запускается RDP или ICA клиент, который устанавливает соединение с терминальным сервером.

Настройка сервера DHCP и TFTP на linux

Пример настройки на Slackware.

В slackware чтобы inetd слушал запросы TFTP , нужно расcкомментировать строку в файле /etc/inetd.conf :

Tftp dgram udp wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot -r blksize

И сделать рестарт сервиса inetd :

Host:~# killall -1 inetd

Потом создать директорию tftpboot и дать права:

Host:~# mkdir /tftpboot host:~# chmod -R 777 /tftpboot

Option domain-name "example.com"; option domain-name-servers 192.168.0.1; server-identifier NAME_HOST; authoritative ; allow booting; allow bootp; max-lease-time 172800; ignore client-updates; ddns-domainname "example.com"; ddns-updates on; ddns-update-style interim; default-lease-time 86400; log-facility local7; subnet 192.168.0.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option routers 192.168.0.1; one-lease-per-client on; range 192.168.0.20 192.168.0.30; } group { filename "pxelinux.0"; next-server 192.168.0.1; host 1 { hardware ethernet 00:0E:8F:32:B6:C5; fixed-address 192.168.0.10; } host 2 { hardware ethernet 08:20:07:26:C0:A5; fixed-address 192.168.0.11; } }

Распаковываем образ thinstation с pxe в /tftpboot

Установка в Debian stretch.

Ставим сервер DHCP:

Apt-get install isc-dhcp-server

Конфиг /etc/default/isc-dhcp-server

DHCPDv4_CONF=/etc/dhcp/dhcpd.conf DHCPDv4_PID=/var/run/dhcpd.pid INTERFACESv4="eth0"

Конфиг /etc/dhcp/dhcpd.conf как в примере выше.

Ставим сервер TFTP:

Apt-get install tftpd-hpa

Конфиг /etc/default/tftpd-hpa

TFTP_USERNAME="tftp" TFTP_DIRECTORY="/tftpboot" TFTP_ADDRESS="192.168.0.2:69" TFTP_OPTIONS="--secure"

где 192.168.0.2 внешний IP интерфейса сервера

Перезапускаем сервис:

/etc/init.d/tftpd-hpa restart

Для записи логов в /var/log/dhcpd.log нужно прописать в dhcpd.conf :

Log-facility local7;

В /etc/rsyslog.conf добавить в конец файла:

Local7.* /var/log/dhcpd.log

Перезапустить сервисы:

/etc/init.d/rsyslog restart /etc/init.d/isc-dhcp-server restart

Настройка сервера Windows 2003

Службы и сервисы, необходимые для работы «тонких» клиентов

Вы можете использовать в качестве терминального сервера:

Microsoft® Windows® Terminal Server

Citrix® MetaFrame®

Если Вы используете в качестве терминального сервера Windows® Terminal Server, выберите следующие службы и сервисы:

Terminal Server

Если Вы используете в качестве терминального сервера Citrix® MetaFrame®, выберите следующие службы и сервисы:

Citrix® MetaFrame®

Пакет файлов для загрузки по PXE

Настройка DHCP Server

Для настройки DHCP Server выполните следующие действия:

2. Нажмите кнопу Add or remove a role.

3. В открывшемся диалоговом окне Preliminary Steps нажмите кнопку Next.

4. В открывшемся диалоговом окне Configuration Options выберите элемент Custom Configuration и нажмите кнопку Next.

5. В списке Server Role выберите DHCP Server и щелкните на кнопке Next дважды.

6. В диалоговом окне Welcome to the new Scope Wizard нажмите кнопку Next.

7. В диалоговом окне Scope Name в полях Name и Description введите имя и описание, после чего нажмите кнопку Next.

8. В диалоговом окне IP Address Range выполните следующие действия для выдачи DHCP сервером IP адресов для тонких клиентов:

Введите Start IP Address (Начальный IP адрес)

Введите End IP Address (Конечный IP адрес)

Нажмите кнопку Next.

9. В открывшемся диалоговом окне Add Exclusions допускается указать диапазон адресов, которые не будут выделяться DHCP сервером. Нажмите кнопку Next.

10. В открывшемся диалоговом окне Lease Duration можете указать время использования IP-адреса тонкими клиентами. Нажмите кнопку Next.

11. В диалоговом окне Configure DHCP Options выберите No, I will configure these options later. Нажмите кнопку Next, затем кнопку Finish.

12. Подтвердите действие очередным нажатием кнопки Finish.

13. Выберите Start→Programs→Administrative Tools→Manage Your Server.

14. В открывшемся диалоговом меню выберите элемент Manage this DHCP server

15. В диалоговом окне выберите элемент Server Options. Нажав правую клавишу мыши, в открывшемся контекстном меню выберите Configure Options.

16. В списке выполните следующие действия:

Выберите пункт 066 Boot Server Host Name и укажите IP адрес TFTP сервера, на который устанавливали DHCP сервер

Выберите пункт 067 Bootfile Name и введите имя pxe-загрузчика, а именно pxelinux.0

17. Нажмите кнопку Apply.

18. В диалоговом окне выберите элемент Scope . Нажав правую клавишу мыши, в открывшемся контекстном меню выберите Activate.

Настройка DHCP сервера завершена.

Настройка TFTP Server

1. Выберите Start→Settings→Control Panel→Add or Remove Programs.

2. Нажмите кнопку Add/Remove Windows Components.

3. В списке Components выберите Remote Installation Services и нажмите кнопку Next.

4. Нажмите кнопку Finish и на запрос о перезагрузке выберите No. Перезагрузку сервера осуществите позднее.

Настройка Terminal Server

1. Выберите Start→Programs→Administrative Tools→Manage Your Server.

2. нажмите кнопку Add or remove a role.

3. В диалоговом окне Preliminary Steps нажмите кнопку Next.

4. В списке Server Role выберите элемент Terminal Server и нажмите кнопку Next дважды.

5. В открывшемся диалоговом окне Configure Your Server Wizard появится предупреждение о перезагрузке сервера. Нажмите кнопку Ok.

6. После перезагрузки нажмите кнопку Finish.

Настройка TFTP Server на автоматический запуск

2. Раскройте список Services and Applications и выберите элемент Services.

3. Справа в появившемся списке нажмите правую клавишу мыши на пункте Trivial FTP Daemon и в контекстном меню выберите Properties.

4. В закладке General в выпадающем меню Startup type выберите Automatic. Нажмите кнопку Apply, затем кнопку Ок.

Создание пользователей терминальных сессий

1. Нажмите правую клавишу мыши на ярлыке My Computer и выберите Manage.

2. В раскрывающемся списке Local Users and Groups выберите папку Users.

3. В появившемся справа списке пользователей нажмите правую клавишу мыши и в открывшемся контекстном меню выберите New User.

4. В диалоговом окне New User введите User name (Имя пользователя) и Password (Пароль). Допустимо отменить выделение User must change password at next logon (Пользователь должен изменить пароль при следующем подключении) и установить необходимые вам пункты: User cannot change password (Пользователь не может изменить пароль), Password never expires (Срок действия пароля никогда не истекает), Account is disabled (Учетная запись отключена). Нажмите кнопку Apply, затем кнопку Ок.

5. В списке выберите папку Groups, и в списке справа нажмите правой клавишей мыши на имени группы Remote Desktop Users, далее выберите Propeties.

6. В появившемся меню выберите General, нажмите кнопку Add и введите имя пользователя, которому Вы хотите разрешить терминальный доступ к серверу. Затем щелкните на кнопке Check Names и подтвердите свой выбор нажатием на кнопку Ок.

7. Нажмите кнопку Apply и кнопку Ок.

Копирование файлов, необходимых для загрузки «тонких» клиентов

1. Создайте папку C:\tftpdroot.

2. Скопируйте в нее файлы pxelinux.0, vmlinuz, initrd, thinstation.conf.network.

3. Создайте папку с:\tftpdroot\pxelinux.cfg.

4. Скопируйте файл default в папку c:\tftpdroot\pxelinux.cfg

5. Теперь необходимо отредактировать конфигурационные файлы. Подробное опи¬са¬ние действий представлено в части 3. «Изменение параметров конфи¬гура¬ци¬он¬ных файлов».

Настройка сервера для передачи звука тонким клиентам Внимание! Для передачи звука «тонким» клиентам необходимо, чтобы на сервере была установлена ОС Microsoft® Windows® 2003, звуковая карта и необходимые драйверы.

1. Выберите Start→Settings→Control Panel

2. Откройте Sounds and Audio Devices и установите выделение в пункте Enable Windows Audio. Нажмите кнопку Ok.

3. На запрос о перезагрузке нажмите кнопку Yes.

4. После перезагрузки вызовите Microsoft® Management Console (Start→Run→mmc).

5. Затем выполните следующие действия: File→Add/Remove Snap-in и нажмите кнопку Add.

6. Выберите Group Policy Object Editor и нажмите кнопку Add, затем последовательно нажимайте на кнопки Finish, Close,Ok.

7. Откройте элемент Local Computer Policy→Computer Configuration→Administrative Templates→Windows Components→Terminal Services→Client/Server data redirection.

8. В списке справа правой клавишей выберите Properties в пункте Allow audio redirection.

9. Выделите пункт Enabled и нажмите кнопку Apply, затем кнопку Ок.

Изменение параметров конфигурационных файлов

Конфигурационные файлы

При запуске «тонкого» клиента происходит поиск на TFTP-сервере конфигурационных фай-лов в следующем порядке:

1. thinstation.conf.buildtime - Задает параметры в загрузочном образе

2. thinstation.conf.network – глобальный конфигурационный файл. Этот файл может использоваться, если Вам требуются одинаковые настройки для всех «тонких» клиентов. Если вам необходимы по различным причинам (разные частотные характеристики развертки мониторов, клиенты должны устанавливать сессии только с определенными терминальными серверами, обеспечение передачи звука только определенным клиентам) разные настройки «тонких» клиентов, то используйте ниже описанные конфигурационные файлы.

3. thinstation.hosts – конфигурационный файл содержащий информацию о клиентах (имя компьютера, MAC-адрес, группу). Для объединения клиентов в группы используется совместно с файлом thinstation.conf.group-ИМЯ_ГРУППЫ. Для ин¬ди¬ви¬ду-альной настройки клиентов по имени компьютера используется совместно с thinstation.conf-ИМЯ_КОМЬЮТЕРА.

4. thinstation.conf.group-ИМЯ_ГРУППЫ – конфигурационный файл группы. Ис¬поль-зуется совместно с thinstation.hosts (например, thinstation.conf.group-managers).

5. thinstation.conf-ИМЯ_КОМПЬЮТЕРА – конфигурационный файл для инди¬ви¬ду-альной настройки клиента по имени компьютера. Используется совместно с thinstation.hosts (например, thinstation.conf-ivanov).

6. thinstation.conf-IP_АДРЕС - конфигурационный файл для индивидуальной на¬строй-ки клиента по IP-адресу (например, thinstation.conf-192.168.0.1).

7. thinstation.conf-MAC_АДРЕС - конфигурационный файл для индивидуальной на-строй¬ки клиента по MAC-адресу (например, thinstation.conf-000C6ED598AC).

8. thinstation.conf.user - локальный конфигурационный файл, размещаемый на локальных носителях (жесткий диск, дискета, флэшка) в каталоге thinstation.profile

Последовательность применения переменных из файлов конфигурации:

Первым применяется thinstation.conf.buildtime при начальной загрузки образа, затем происходит получение файла thinstation.conf.network, и далее индивидуальные файлы конфигурации.

Если значение переменной SESSION_0_TYPE=rdesktop в файле thinstation.conf.network, а в thinstation.conf-ИМЯ_КОМЬЮТЕРА уже SESSION_0_TYPE=freerdp, то в результате загрузится freerdp.

Но если уровень загрузки программы rc.0, то программа инициализируется раньше чем подхватываются файлы конфигурации. В таком случае параметры для этой программы можно задать только при сборке образа системы в файле thinstation.conf.buildtime.

Объединение клиентов в группы

Используя файлы thinstation.hosts и thinstation.conf.group-ИМЯ_ГРУППЫ можно объединить клиентов в группы с одинаковыми конфигурациями. Для этого нужно внести сведения в файл thinstation.hosts, такие как ИМЯ_КОМПЬЮТЕРА,MAC_АДРЕС, ИМЯ_ГРУППЫ. Отредактировать файл thinstation.conf.group-ИМЯ_ГРУППЫ. Подробное описание синтаксиса конфигурационных файлов можно посмотреть в конце этого раздела.

Индивидуальная настройка «тонких» клиентов Для индивидуальной настройки «тонких» клиентов следует использовать следующие группы файлов:

1. Используя thinstation.hosts и thinstation.conf-ИМЯ_КОМПЬЮТЕРА можно настроить клиент с определенным именем компьютера. Для этого в файл thinstation.hosts нужно внести сведения, такие как ИМЯ_КОМПЬЮТЕРА и MAC_АДРЕС. Кроме этого, требуется отредактировать файл thinstation.conf.group-ИМЯ_КОМПЬЮТЕРА.

2. Используя thinstation.conf-IP_АДРЕС можно передать настройки клиенту с конкретным IP-адресом. Так как IP-адрес выдается DHCP сервером, то необходимо настроить сервер так, чтобы каждому клиенту выдавался уникальный IP-адрес.

3. Используя thinstation.conf-MAC_АДРЕС можно передать настройки клиенту с конкретным MAC-адресом. Для этого достаточно отредактировать файл thinstation.conf-MAC_АДРЕС.

Синтаксис конфигурационных файлов

Синтаксис конфигурационного файла thinstation.hosts:

#ИМЯ_КОМПЬЮТЕРА MAC_АДРЕС ИМЯ_ГРУППЫ КОМЕНТАРИИ thinstation1 000103014152 samba # IVANOV thinstation2 000103014152 # PETROV

Синтаксис конфигурационных файлов thinstation.conf.network , thinstation.conf.group-ИМЯ_ГРУППЫ, thinstation.conf-ИМЯ_КОМПЬЮТЕРА, thinstation.conf-IP_АДРЕС, thinstation-MAC_АДРЕС:

# --- Пример конфигурационного файла # --- Опции сессий # # # SESSION_TITLE Описание сессии # SESSION_TYPE Тип сессии: # - rdesktop Терминальный клиент к Microsoft® Terminal # Services # - ica Терминальный клиент к Citrix® MetaFrame® # # SESSION_SCREEN Экран сессии на котором запускается X server # SESSION_AUTOSTART On/Off Автоматический ввод логина и пароля # SESSION_WORKSPACE Workspace для запуска программ # SESSION_PACKAGE_SERVER IP адрес терминального сервера # SESSION_PACKAGE_OPTIONS опции терминального клиента # # # --- Опции клиента Citrix # #ICA_USE_SERVER_KEYBOARD Использовать раскладку клавиатуры сервера, # В противном случае используйте KEYBOARD_MAP #ICA_BROWSER_PROTOCOL Протокол браузера, HTTPonTCP или UDP #ICA_ENCRYPTION Уровни шифрации #ICA_COMPRESS Компрессия, On/Off #ICA_AUDIO Audio, On/Off #ICA_AUDIO_QUALITY Качество Audio: Low, Medium, High #ICA_APPLICATION_SET Опубликованное приложение (Не используется если есть ICA_SERVER) #ICA_SERVER Сервер Citrix (не используется если есть # ICA_APPLICATION_SET) # Настройки по умолчанию для всех сессий SCREEN=0 WORKSPACE=1 AUTOSTART=Off ICA_USE_SERVER_KEYBOARD=On ICA_BROWSER_PROTOCOL=HTTPonTCP ICA_SERVER=192.168.88.100 ICA_ENCRYPTION=Basic ICA_COMPRESS=On ICA_AUDIO_QUALITY=Medium ICA_AUDIO=On # Индивидуальные настройки, # Внимание! Будьте уверены, что Вы начинаете с SESSION 0. В противном случае Вы # получите ошибку при загрузке SESSION_0_TITLE="Citrix MetaFrame Terminal Server" SESSION_0_TYPE=ica SESSION_0_SCREEN=1 SESSION_0_ICA_SERVER=192.168.88.100 # Опция -a указывает глубину цвета # Будьте уверены, что ваш сервер поддерживает такую глубину цвета, так как # в противном случае это приведет к ошибке SESSION_1_TITLE="Microsoft Terminal Server" SESSION_1_TYPE=rdesktop SESSION_1_SCREEN=0 SESSION_1_RDESKTOP_SERVER=192.168.88.100 SESSION_1_RDESKTOP_OPTIONS="-u user -a 16 -r sound" # SESSION_0_AUTOSTART=Off # --- Главные настройки # # KEYBOARD_MAP Раскладка клавиатуры # AUTOPLAYCD автоматическое проигрывание CD # RECONNECT_PROMPT Переподключение к серверу: On/Off KEYBOARD_MAP=ru # AUTOPLAYCD=On RECONNECT_PROMPT=On # --- Сетевые настройки # # NET_HOSTNAME Имя компьютера, если не используется # thinstation.hosts, # символ * будет заменен на MAC address NET_HOSTNAME=ts_* # --- Настройки XServer # # SCREEN_RESOLUTION Разрешение экрана 1024х768,800х600,640х480 # SCREEN_COLOR_DEPTH Число бит на пиксель (8,16,24) # SCREEN_HORIZSYNC Горизонтальная частота в Khz. # SCREEN_VERTREFRESH Вертикальная частота в Hz. SCREEN_RESOLUTION="800x600" SCREEN_COLOR_DEPTH="16 | 8 | 24" SCREEN_HORIZSYNC="30-64" SCREEN_VERTREFRESH="56-87"

Пример основныx настроек thinstation.conf.user:

NET_USE_DHCP=off # Если не используете DHCP, то обязательно указать OFF NET_USE_TFTP=off # Для загрузки файлов конфигурации с диска поставить OFF NET_IP_ADDRESS=XXX.XXX.XXX.XXX # IP клиента NET_MASK=255.255.255.0 # Маска подсети #NET_GATEWAY=XXX.XXX.XXX.XXX # Если нужно указать шлюз #NET_DNS1=XXX.XXX.XXX.XXX # IP адрес DNS сервера #NET_DNS2=XXX.XXX.XXX.XXX SCREEN=0 WORKSPACE=1 AUTOSTART=Off # Для нескольких сессий выбрать off. SESSION_0_TITLE="terminall server 1" # Название сервера или имя клиента, отображаеться в режиме AUTOSTART=Off SESSION_0_TYPE=rdesktop # Тип сессии SESSION_0_SCREEN=1 # Экран сессии SESSION_0_RDESKTOP_SERVER=XXX.XXX.XXX.XXX # IP терминального сервера SESSION_0_RDESKTOP_OPTIONS="-u "user"" # Имя пользователя #SESSION_1_TITLE="terminall server 2" #SESSION_1_TYPE=rdesktop #SESSION_1_SCREEN=1 #SESSION_1_RDESKTOP_SERVER=XXX.XXX.XXX.XXX #SESSION_1_RDESKTOP_OPTIONS="-u "user2"" # Подключение устройств в RDP сессии. RDESKTOP_SOUND=Off RDESKTOP_FDD=On RDESKTOP_CDROM=Off RDESKTOP_HDD=Off RDESKTOP_USB=On RDESKTOP_1394=Off RDESKTOP_COM3=Off RDESKTOP_COM4=Off RDESKTOP_SLOWLINK=On # Оптимизация под модемное соединение RDESKTOP_COMPRESSION=On # Использование компрессии для RDP данных RDESKTOP_COLOR_DEPTH="16" # Глубина цвета KEYBOARD_MAP=en_us # Раскладка клавиатуры TIME_ZONE="Europe/Moscow" USB_ENABLED=On # Включение драйверов USB AUDIO_LEVEL=67 AUTOPLAYCD=On # Автоматическое проигрывание музыкальных CD DAILY_REBOOT=On # Если в течении дня нет соединения с сервером, то происходит перезагрузка CUSTOM_CONFIG=off RECONNECT_PROMPT=menu # Действие при отключении сессии, варианты: ON (переподключиться), OFF (не переподключаться), MENU (показывать меню), MENUXX (где XX - время паузы в мин. перед отключением). Работает в режиме AUTOSTART=On NET_HOSTNAME=host # Имя компьютера клиента NET_TELNETD_ENABLED=On # Доступ к клиенту по сетевому протоколу telnet SCREEN_RESOLUTION="1024x768" # Разрешение экрана SCREEN_HORIZSYNC="30-65" # Для CRT лучше поставить 30-75 SCREEN_VERTREFRESH="75" # Для LCD мониторов, для CRT поставить 85 SCREEN_COLOR_DEPTH="16" # Глубина цвета иксов MOUSE_PROTOCOL=IMPS/2 # Протокол для мыши MOUSE_RESOLUTION=100 # Разрешающая способность мыши MOUSE_ACCELERATION="1" # Ускорение мыши, например значение 1/8 замедлит движение X_DRIVER_OPTION1="swcursor On" # Аппаратный курсор POWERBTN_ACTION=Off # Выключение кнопкой питания, если не указывать эту переменную, то переход в режим standby PRINTER_0_NAME=parallel # Имя принтера PRINTER_0_DEVICE=/dev/printers/0 # Устройство принтера PRINTER_0_TYPE=P # Для принтера подключенного к параллельному порту PRINTER_1_NAME=usb # Имя принтера PRINTER_1_DEVICE=/dev/usb/lp0 # Устройство принтера PRINTER_1_TYPE=U # Для USB принтера