Рассмотрим пример организации выделенной сети тонких клиентов, подключающихся по протоколу RDP к центральному серверу служб удалённых рабочих столов Microsoft Windows Server (Remote Desktop Services). В качестве ОС тонкого клиента будем использовать свободно распространяемую среду Thinstation из проекта Thinstation by Donald A. Cupp Jr., в составе которой присутствует RDP-клиент FreeRDP.
В качестве аппаратной платформы для тонкого клиента мы будем использовать устройства HP t610, хотя в рамках нашей задачи эти устройства имеют более чем избыточную конфигурацию. По сути минимальные системные требования для тонкого клиента с Thinstation – любой «аппаратный хлам» начиная с уровня Pentium-II с 128MB RAM и выше. Мы будем использовать бездисковую конфигурацию тонких клиентов, то есть загрузка системы будет выполняться по сети с использованием PXE (приоритетно) или с локальных загрузочных USB-накопителей (для клиентов без поддержки PXE и в отдалённых участках со слабым каналом передачи данных).
Когда я изучал доступные в открытых источниках статьи на тему подобного развёртывания, то среди множества материалов выделил для себя статью Пети Хинчли «Use Thinstation to build a network-bootable RDP-enabled thin client image», от наработок которой я и буду отталкиваться. Также в качестве полезного источника информации стоит отметить такие русскоязычные ресурсы, как Thinstation по русски и Thinstation Доработка тонкого клиента.
В рассматриваемом примере имеется несколько исходных условий, от которых нам придётся отталкиваться:
- Все тонкие клиенты должны быть изолированы в рамках одной сети и должны маршрутизироваться только до своего RDS-сервера.
- RDS-сервер, помимо предоставления сессий удалённых рабочих столов, по совместительству должен выполнять все функции управления тонкими клиентами (раздача IP адресов, раздача загрузочных образов ОС, раздача настроек каждого конечного клиента и т.д.).
- Загрузка конечной рабочей среды тонкого клиента должна происходить автоматически без участия пользователя/оператора (авто-логон RDP-сессии и запуск необходимой оболочки – конечного бизнес-приложения)
- Цикличная работа тонких клиентов должна быть автоматизирована, то есть клиенты должны автоматически включаться по расписанию утром каждого рабочего дня и выключаться в конце рабочего дня.
Начнём процедуру настройки с выделенного сервера, который в нашем случае является виртуальной машиной Hyper-V с предварительно установленной гостевой ОС Windows Server 2012 R2 Standard. Развернём и настроим на этом сервере службы DHCP и WDS.
Настройка сервера DHCP
Для автоматического назначения IP-адресации нашим тонким клиентам установим и настроим службу DHCP на нашем сервере управления.
Устанавливаем роль DHCP Server через оснастку Server Manager или через PowerShell:
Install-WindowsFeature -Name DHCP -IncludeManagementTools
После установки роли откроем оснастку Server Manager и запустим мастер Post-Deployment Configuration, после завершения которого роль сервера DHCP может считаться развёрнутой.
В нашем примере сервер DHCP разворачивается на компьютере, не являющемся членом домена, поэтому с авторизацией (активацией) службы DHCP не возникнет проблем – сразу после развёртывания сервер будет готов к работе. Создадим для тонких клиентов область с пулом выдаваемых IP адресов и активируем её:
В случае если DHCP сервер разворачивается на доменной системе, то дополнительно может потребоваться его авторизация. Если прав Администратора домена нет, то провести авторизацию сервера можно путём небольшой правки реестра: Как авторизовать DHCP сервер не имея прав Администратора домена.
В оснастке управления правилами Windows Firewall проверяем правила относящиеся к серверу DHCP (как минимум нужно разрешить входящие подключения по протоколу UDP на порты 67/68)
Настройка сервера Windows Deployment Services
Роли Windows Deployment Services и Web Server понадобятся нам для возможности раздачи по сети (PXE) загружаемых образов Thinstation тонким клиентам по протоколам TFTP/HTTP. Устанавливаем роли:
Install-WindowsFeature -Name "Web-Server","WDS" -IncludeManagementTools
К настройке веб-сервера IIS мы обратимся позже, а сейчас рассмотрим то, как настроить WDS сервер на поддержку загрузчика SYSLINUX.
Откроем консоль WDS и первым делом вызовем мастер конфигурирования сервера Configure Server
На первом шаге мастер ознакомит нас с требованиями необходимыми для работы WDS.
- Первым пунктом идёт информация о том, что сервер может быть сконфигурирован как с поддержкой доменной инфраструктуры, так и в изолированном варианте (как раз наш случай).
- Службу сервера DHCP мы уже развернули. В процессе конфигурации WDS будет включена специальная опция DHCP сервера для поддержки PXE-клиентов.
- Среди требований присутствует наличие DNS-сервера в сети, хотя в нашем конкретном случае в этом нет реальной необходимости. DNS это конечно хорошо и правильно, но мой практический опыт работы с Thinstation показал, что полностью избавится от применения IP-адресов вместо FQDN-имён не получится, и поэтому я решил вообще не заморачиваться с использованием службы DNS.
- Отдельный NTFS-раздел для хранения загрузочных образов сделан на нашем WDS-сервере (далее в примерах будет фигурировать как диск D:\)
На шаге выбора типа развёртывания WDS, согласно исходных условий нашего примера, выбираем режим изолированного сервере Standalone server
На шаге размещения каталога для файлов WDS и загрузочных образов по умолчанию предлагается каталог C:\RemoteInstall. В нашем примере путь изменён на диск D:\
На следующем шаге мастер конфигурации, определив наличие на нашем сервере службы DHCP-сервера, предложит настроить параметры взаимодействия с этой службой. А именно, нам потребуется включить запрет прослушивания портов DHCP службой WDS и разрешить конфигурирование опций DHCP-сервера для поддержки PXE-клиентов.
На шаге настроек PXE по условиям нашей задачи разрешаем WDS серверу отвечать на запросы всех PXE-клиентов
По завершению работы мастера служба WDS будет запущена. В консоли WDS откроем свойства сервера и на закладке Boot отключим включенное по умолчанию требование нажатия F12 на стороне PXE-клиента для возможности загрузки по сети, выбрав опцию Always continue the PXE boot.
Заглянем в оснастку управления сервером DHCP и проверим, что в DHCP-опциях на уровне сервера появилась опция PXE
***
Теперь сделаем ряд действий по добавлению нашему WDS серверу поддержи SYSLINUX.
Скачаем архив актуальной версии загрузчика syslinux-6.03 по ссылке:
https://www.kernel.org/pub/linux/utils/boot/syslinux/
Распакуем архив syslinux-6.03.zip и выполним следующие действия:
- Скопируем в каталог D:\RemoteInstall\Boot\x64 на сервере WDS следующие файлы:
\syslinux-6.03\bios\core\pxelinux.0 (переименовать в pxelinux.com)
\syslinux-6.03\bios\com32\menu\vesamenu.c32
\syslinux-6.03\bios\com32\elflink\ldlinux\ldlinux.c32
\syslinux-6.03\bios\com32\chain\chain.c32
\syslinux-6.03\bios\memdisk\memdisk - Скопируем файл D:\RemoteInstall\Boot\x64\abortpxe.com в файл abortpxe.0.
- Скопируем файл D:\RemoteInstall\Boot\x64\pxeboot.n12 в файл pxeboot.0.
Повторим действия, проделанные для каталога D:\RemoteInstall\Boot\x64 применительно к каталогу D:\RemoteInstall\Boot\x86
***
Создадим каталог D:\RemoteInstall\Boot\pxelinux.cfg (не файл, а именно каталог). В этом каталоге будут хранится конфигурационный файлы PXE, которые будет отдавать WDS-сервер PXE-клиентам.
Создадим конфигурационный файл PXE «по умолчанию» с именем default в каталоге D:\RemoteInstall\Boot\pxelinux.cfg и добавим в него следующий контент:
DEFAULT RDP
PROMPT 0
NOESCAPE 1
ALLOWOPTIONS 0
LABEL RDP
MENU DEFAULT
KERNEL /Linux/vmlinuz
APPEND initrd=/Linux/initrd splash=silent,theme:default load_ramdisk=1 ramdisk_blocksize=4096 root=/dev/ram0 ramdisk_size=786432 loglevel=3 console=tty1 vt.global_cursor_default=0 LM=3
***
В командной строке с правами Администратора перейдём в каталог D:\RemoteInstall\Boot\x64 и создадим символическую ссылку (junction) на каталог D:\RemoteInstall\Boot\pxelinux.cfg:
cd /d D:\RemoteInstall\Boot\x64
mklink /J pxelinux.cfg D:\RemoteInstall\Boot\pxelinux.cfg
Повторим тоже самое для каталога D:\RemoteInstall\Boot\x86:
cd /d D:\RemoteInstall\Boot\x86
mklink /J pxelinux.cfg D:\RemoteInstall\Boot\pxelinux.cfg
***
Создадим каталог D:\RemoteInstall\Images\Linux. В этом каталоге мы будем размещать загружаемые образы ОС тонких клиентов.
В командной строке с правами Администратора перейдём в каталог D:\RemoteInstall\Boot\x64 и создадим символическую ссылку (junction) на каталог D:\RemoteInstall\Images\Linux:
cd /d D:\RemoteInstall\Boot\x64
mklink /J Linux D:\RemoteInstall\Images\Linux
Повторим тоже самое для каталога D:\RemoteInstall\Boot\x86:
cd /d D:\RemoteInstall\Boot\x86
mklink /J Linux D:\RemoteInstall\Images\Linux
***
Для того, чтобы настроить WDS на использование добавленных нами загрузочных программ SYSLINUX (замена стандартного для WDS загрузчика pxeboot на pxelinux), выполним ряд команд с правами Администратора на сервере WDS:
wdsutil /set-server /bootprogram:boot\x86\pxelinux.com /architecture:x86
wdsutil /set-server /N12bootprogram:boot\x86\pxelinux.com /architecture:x86
wdsutil /set-server /bootprogram:boot\x64\pxelinux.com /architecture:x64
wdsutil /set-server /N12bootprogram:boot\x64\pxelinux.com /architecture:x64
Примечание: Если в дальнейшем по какой-то причине потребуется восстановить загрузочные программы (pxeboot), используемые в WDS по умолчанию, сделать это можно командами:
wdsutil /set-server /bootprogram:boot\x86\pxeboot.com /architecture:x86
wdsutil /set-server /N12bootprogram:boot\x86\pxeboot.n12 /architecture:x86
wdsutil /set-server /bootprogram:boot\x64\pxeboot.com /architecture:x64
wdsutil /set-server /N12bootprogram:boot\x64\pxeboot.n12 /architecture:x64
***
В оснастке управления правилами Windows Firewall проверяем правила относящиеся к серверу WDS (как минимум нужно разрешить входящие подключения по протоколу UDP к исполняемому файлу службы).
А также включаем правило, разрешающее входящий трафик к веб-серверу IIS
Кстати, к настройке веб-сервера IIS мы ещё вернёмся позже.
Развёртывание сборочной среды DevStation
Для сборки собственных загрузочных образов проект Thinstation, в качестве одного из вариантов, предлагает использовать специальную загружаемую среду DevStation. Используя загрузочный дистрибутив DevStation, мы развернём выделенную Linux-систему, с помощью которой в дальнейшем будем собирать загрузочные образы Thinstation для конечных тонких клиентов. Прежде всего в DevStation будет сгенерирован специальный загрузочный образ Thinstation, с которого, в свою очередь, нужно будет загрузиться на всех используемых типах аппаратных конфигураций наших клиентов и сгенерировать профиль оборудования. На базе полученных профилей оборудования на нашем сервере DevStation будут скомпилированы конечные загрузочные сборки Thinstation под каждую аппаратную конфигурацию. Такой подход позволит свести к разумному минимуму размер загружаемого по сети образа Thinstation для каждой конкретной партии «железок».
Под задачу развёртывания DevStation можно использовать виртуальную машину. В сети можно найти примеры использования для этих целей виртуальных машин на базе VMWare и VirtualBox. В моём случае используются среды виртуализации Microsoft Hyper-V и oVirt. Попытки развернуть DevStation 5.5 на виртуальную машину Hyper-V 2012 R2 результата не дали, так как происходило зависание процесса установки на стадии разметки диска, хотя с определением диска проблемы не возникало. В конечном итоге виртуальная машина была создана в среде виртуализации oVirt с настройками согласно документа DevStation setup.
Созданная виртуальная машина имеет 2vCPU , 3GB ОЗУ, vHD 25GB (при меньшем размере диска, чем 20GB, DevStation может не установиться). В качестве интерфейса диска вместо используемого по умолчанию в oVirt 4.0.6 значения VirtIO я выбрал IDE, так как развёртывание DevStation заработало корректно только на этом интерфейсе.
***
Загружаем последнюю версию DevStation по ссылке: Thinstation Latest Download
В нашем случае это файл TS-5.5.1-Installer-0627.iso размером 212MB
Загружаемся в подготовленную виртуальную машину с ISO-образа и выбираем пункт установки – Installer for DevStation
В память загрузится Live-система, будет выполнен авто-вход в графическую оболочку, где с рабочего стола запустим ярлык Install to HD. В открывшейся форме нам поведают о том, что на самом деле можно прожить и без выделенной инсталляции DevStation, залив git-клон проекта Thinstation на любой другой сборочной Linux-системе.
Утвердительно «кивнём гривой», после чего будет запущена процедура проверки Интернет-соединения.
В случае, если наша виртуальная машина DevStation не имеет прямого подключения к Интернету, то нам любезно будет предложено настроить параметры прокси-сервера
Однако практическое применение показало, что инсталлятор не смог пройти через Squid с включённой аутентификацией, даже не смотря на то, что были явным образом указаны параметры прокси и учётные данные для аутентификации на прокси. В конечном итоге виртуальная машина DevStation на время инсталляции была выпущена в Интернет напрямую.
После того, как Интернет-соединение будет успешно проверено, нам сообщат о том, на какой диск будет установлена система DevStation.
Затем укажем предпочитаемое разрешение экрана. У нас ВМ и выбор здесь небольшой.
Затем из представленных списков выберем свою временную зону и раскладку клавиатуры:
Перед началом процесса установки DevStation нас предупредят о том, что все данные на диски будут уничтожены (инсталлятор по своему усмотрению выполнит разметку диска)
Будет запущена программа развёртывания DevStation, в ходе которой будет выполнена разметка диска, загрузка и установка всех необходимых пакетов из онлайн-репозитория проекта Thinstation размером примерно около 2GB.
Процедура может занять от 20 минут и более, в зависимости от пропускной способности вашего Интернет-канала и проворности диска виртуальной машины. Когда процесс будет завершён, мы получим несколько уведомительных сообщений о том, как собрать собственный загрузочный образ тонкого клиента…
…о том, что наша система DevStation способна выступать в качестве PXE-сервера…
…и о том, что загрузочный образ ISO, с которого мы выполняли установку теперь нам больше не нужен, как, впрочем, и прямое подключение к Интернет, и после перезагрузки мы уже можем использовать установленную систему…
На это этапе можно извлечь загрузочный ISO образ из привода виртуальной машины и нажать OK
Отправляем виртуальную машину в перезагрузку.
Сборка служебного образа Thinstation
Подключаемся к консоли только что развёрнутой сборочной среды DevStation. Учётные данные при этом вводить не требуется, так как в системе настроен авто-вход. Пароль пользователя root на нашей виртуальной машине DevStation — pleasechangeme. По умолчанию в DevStation включен Telnet-сервер и с этими учётными данными без проблем можно удалённо подключиться к системе. И как я понял, простого и вменяемого способа изменить такое поведение нет. Лишь в ветке обсуждения Thinstation Installer Disc Server — ssh access я нашёл пример того, как вместо Telnet можно включить SSH и сменить root-пароль, который подразумевает пересборку самого образа DevStation. Что скорее всего, как следствие, вызовет необходимость его переустановки. Как бы там ни было, включённая система DevStation нам нужна только на этапе сборки конечных образов тонких клиентов, а всё остальное время можно держать её выключенной.
Итак, с рабочего стола графической среды DevStation запускаем ярлык Terminal Chroot
В открывшейся консоли автоматически откроется файл справки README. Нажмём Q чтобы закрыть справочный файл и перейти в консоль.
Сменим текущий каталог на /build. Здесь мы и будем выполнять практически всю работу – настройку конфигурации под наших клиентов и сборку образов для их загрузки. В первую очередь нас интересуют два основных файла build.conf и thinstation.conf.buildtime. Первый файл определяет порядок сборки образов Thinstation, то есть то, какие в образ будут включены драйверы для поддержки оборудования (например поддержка определённых видео-адаптеров), какие будут добавлены пакеты приложений сервисного уровня (например поддержка NFS, NTP и т.п.) и прикладного уровня (например наличие веб-браузера, RDP-клиента и т.д.) и ряд других параметров сборки. Второй файл добавляется в собираемый образ и в основном служит для передачи неких параметров/переменных, которые могут определять тот или иной порядок работы тонкого клиента и включённых в него приложений.
На данном этапе перед нами стоит задача сборки служебного загрузочного образа Thinstation, который будет содержать в себе все драйверы, поддерживаемые средой Thinstation и с минимальными изменениями в файле build.conf. Этот служебный образ потребуется нам для того, чтобы на следующем этапе, загрузившись с него уже на конечных устройствах – тонких клиентах, выполнить процедуру генерации файлов профиля оборудования, которые в свою очередь будут использоваться для сборки конечных результативных образов тонких клиентов.
Удалим имеющуюся символическую ссылку на конфигурационный файл build.conf и создадим новый файл на базе шаблона build.conf.example
# rm build.conf
# cp build.conf.example build.conf
Обратите внимание на то, что все команды здесь мы будем выполнять в chroot-окружении, которое ссылается на каталог /thinstation/ относительно корневой системы DevStation.
С помощью текстового редактора внесём минимальные корректировки в файл build.conf.
В частности, нужно убрать комментарий (#) в строке содержащей запись package extensions-x (этот пакет содержит инструменты создания профилей оборудования, в том числе и скрипт hwlister.sh, который нам потребуется в дальнейшем)
В целом этого достаточно, однако на практике я столкнулся с багом squashfs and firmware.list generation #192, который, как я понимаю, на данный момент не исправлен. Баг приводит к тому, что в процессе генерации профиля оборудования, который мы будем делать на следующем этапе, не создаётся файл firmware.list, что может привести к отсутствию корректной поддержки необходимых аппаратных компонент тонкого клиента. В качестве обходного решения этой проблемы на данный момент является замена параметра initrdcmd (Compression Mode) в файле build.conf c «squashfs«…
… на «gzip -9«
Сохраним отредактированный файл build.conf и выполним команду сборки образа, включающего в себя все драйверы, которые поддерживает Thinstation
# ./build --allmodules
В процессе сборки будет задан вопрос о добавлении Firefox в собираемый образ. Если он Вам не нужен, вполне можно от него отказаться. То же самое касается включённых в конфигурации по умолчанию гостевых компонент VBox.
Процесс компиляции образа будет завершён созданием файла initrd размером около 175MB. Этот файл и содержит загружаемую ОС c ПО Thinstation для наших тонких клиентов. Напоминаю, что размер образа большой по той причине, что мы на этапе сборки включили в него все модули поддержки оборудования.
В конечном итоге на данный момент нас интересуют 2 файла, появившихся после компиляции — initrd (Initial RAM Disk) и vmlinuz (Linux Kernel). Файл vmlinuz служит для первичной загрузки и инициализации оборудования тонкого клиента, после чего начинается загрузка initrd.
После завершения процесса компиляции оба эти файла можно найти в каталоге /thinstation/build/boot-images/pxe/boot/ (в консоли «Terminal Chroot» это каталог /build/boot-images/pxe/boot/). Нужно скопировать эти два файла на наш WDS-сервер в каталог D:\RemoteInstall\Images\Linux
Создадим временную сетевую папку на нашем Windows-сервере и предоставим доступ на запись к этой папке для своей учётной записи. На DevStation-машине создадим новый каталог и смонтируем в него сетевую папку с Windows-сервера WDS, после чего скопируем в смонтированную папку все нужные нам файлы:
# mkdir /mnt/WDSTempShare
# mount.cifs //KOM-APP20/TempShare /mnt/WDSTempShare -o user=volodya
# cp /build/boot-images/pxe/boot/initrd /mnt/WDSTempShare/
# cp /build/boot-images/pxe/boot/vmlinuz /mnt/WDSTempShare/
# umount /mnt/WDSTempShare
На WDS-сервере из папки /TempShare перенесём файлы initrd и vmlinuz в каталог, из которого PXE-сервер будет отдавать PXE-клиентам файлы для загрузки D:\RemoteInstall\Images\Linux
Получение файлов профиля оборудования для Thinstation
Задача получения профиля оборудования заключается в том, чтобы загрузить эталонный компьютер (тонкий клиент с типичным для партии набором аппаратных компонент) с образа Thinstation собранного с опцией —allmodules и выполнить в этой системе скрипт /bin/hwlister.sh. Данный скрипт сгенерирует файлы профиля оборудования и попытается передать их на PXE-сервер, встроенный в DevStation.
Обратите внимание на то, что на данном этапе PXE-загрузку эталонного клиента (для генерации файлов профиля оборудования) мы можем произвести как с нашего WDS-сервера (ведь мы уже скопировали на него загрузочные файлы образа initrd и vmlinuz), так и с встроенного в DevStation PXE-сервера. Однако стоит учитывать то, что скрипт hwlister.sh будет пытаться передать получившиеся файлы профиля оборудования именно на тот PXE-сервер, с которого он был загружен. Поэтому для генерации профиля оборудования будет проще всего загружаться именно с PXE-сервера встроенного в DevStation.
При этом на сервере DevStation для загрузки будут использоваться именно те файлы initrd и vmlinuz, которые расположены в каталоге /thinstation/build/boot-images/pxe/boot/, так как этот каталог является корневым для встроенного в DevStation PXE-сервера. Именно поэтому важно, чтобы при попытке загрузки эталонной машины c PXE-сервера DevStation, на этом сервере в каталоге /thinstation/build/boot-images/pxe/boot/ находились файлы образа собранного с опцией —allmodules, который мы собрали в на предыдущем этапе. Это предотвратит потенциальные проблемы с распознаванием оборудования и полноценной загрузкой Thinstation.
***
Теперь на нашем Windows-сервере потребуется на время внести некоторые изменения:
- В оснастке управления сервером DHCP создадим резервирование IP для эталонной машины
- В оснастке управления сервером WDS отключим опцию интеграции с DHCP
Чтобы заставить нашу эталонную машину тонкого клиента загружать образ по сети не с WDS сервера, а с машины DevStation, создадим на DHCP-сервере резервирование IP адреса для эталонной машины с опциями 66 и 67:
66 = <IP-адрес DevStation>
67 = boot/pxelinux/pxelinux.0
Кстати, в значении 67 опции по замечанию из статьи Thinstation OS можно указать путь к другому файлу, чтобы изменить загрузку с TFTP на HTTP (это может несколько ускорить процесс загрузки образа). Для этого значение boot/pxelinux/pxelinux.0 нужно заменить на на boot/lpxelinux/lpxelinux.0. Однако, как я понял, загрузка по HTTP поддерживается не всеми сетевыми картами и поэтому в большинстве случаев всё же будет использоваться TFTP.
Так, как мы планируем использовать PXE сервер с DevStation, то в нашей конфигурации потребуется на время отключить PXE сервер, встроенный в WDS, чтобы из опций DHCP-сервера исчезла опция 060 = PXEClient. Если этого не сделать, то WDS может передавать PXE-клиенту не тот адрес PXE-сервера, который нас интересует.
***
Переходим на DevStation и разрешаем запись всем пользователям в корневой каталог встроенного TFTP сервера. Для этого можно либо выполнить консольную команду:
# chmod 777 /thinstation/build/boot-images/pxe
Либо в графической оболочке вызвать через пункт меню Start > DevStation > Toggle PXE Read/Write:
После вызова этого пункта меню мы увидим сообщение о том, что запись для PXE-сервера включена:
***
Включаем эталонный компьютер. При старте клиент получит с DHCP зарезервированный нами IP-адрес с опциями указывающими на PXE-сервер DevStation и начнёт оттуда загружать образ.
На загруженном эталонном клиенте в графической оболочке открываем меню Applications > Utilities и выбираем Terminal Emulator
В окне терминала запускаем генерацию профиля оборудования с передачей на машину DevStation командой:
# /bin/hwlister.sh
Заглянем в каталог /thinstation/build/boot-images/pxe на DevStation машине. Здесь появятся файлы переданные с клиента (в зависимости от «железа» клиента): module.list, package.list, firmware.list
Итак, аппаратный профиль эталонного клиента получен и передан на DevStation. Теперь можем выключить эталонный компьютер. Он нам больше не нужен.
На DevStation создаём новый подкаталог для профиля клиента в каталоге /thinstation/build/machine/ (/build/machine/ в chroot-окружении) и переносим туда только что полученные с эталонного клиента list-файлы
# mkdir /build/machine/HPt610
# cd /build/machine/HPt610
# mv /build/boot-images/pxe/*.list .
Далее созданный профиль под названием HPt610 мы будем использовать при сборке конечного рабочего образа (будем указывать имя этого каталог в build.conf).
Туже самую процедуру создания нового профиля из list-файлов, попавших в каталог /thinstation/build/boot-images/pxe, можно сделать и с помощью графической оболочки DevStation. Для этого будет достаточно вызвать пункт меню Start > DevStation > Make Machine Profile и указать имя нового профиля
***
Отключаем право на запись в PXE-сервере DevStation через ранее упомянутый пункт меню Start > DevStation > Toggle PXE Read/Write или командой в терминале:
# chmod 755 /thinstation/build/boot-images/pxe
***
Возвращаемся на наш Windows-сервер и в консоли WDS не забываем обратно включить опцию поддержки интеграции PXE с DHCP (вторую галочку)
А в консоли управления DHCP-сервером удаляем созданное ранее резервирование, которое мы делали под эталонного клиента.
Сборка рабочего образа Thinstation
На данном этапе можно считать, что у нас всё готово для сборки конечного рабочего образа Thinstation, который будет использоваться для наших тонких клиентов определённой аппаратной конфигурации. Процедура сборки аналогична той, что мы рассмотрели ранее, когда делали служебный образ Thinstation с главным отличием в том, что сборка выполняется без ключа —allmodules. При этом в собираемый образ Thinstation будут добавлены только те модули поддержки оборудования, которые перечислены в незакомментированных строчках перечисляющих профили оборудования (machine …) в файле build.conf.
Базовую информацию о структуре конфигурационного файла build.conf можно получить из документа Thinstation Wiki — build.conf. Логика простая – включаем только те модули и пакеты, которые нужны для работы наших тонких клиентов, всё что не нужно – отключаем (комментируем), так как каждый лишний модуль/пакет увеличивает размер образа который получится в результате компиляции. При этом лучше не отключать те вещи, значение которых вам непонятно, если не хотите потерять время на отладке, которой можно было и не заниматься.
Далее рассмотрим правки, которые нужно внести в build.conf исходя из условий нашей задачи.
В секции #!Hardware добавим запись о ранее созданном профиле machine HPt610
В секции #!!File System Support оставим модули usb-storage, isofs, udf, vfat. Остальные модули закомментируем. Эти модули нам потребуются на случай необходимости загрузки не по сети а с накопителей, типа USB-флэш диск.
В секции #!!Miscellaneous (я обнаружил в файле 2 таких секции) в списке пакетов закомментируем ранее включённый пакет extentions-x, так как на рабочем образе тонкого клиента в нём нет необходимости. Для возможности нормальной автоматической конфигурации сети в процессе загрузки тонкого клиента включим пакет ts-classic, выключим networkmanager и добавим autonet.
В секции #!!X закомментируем пакеты xorg7-vmware и, при необходимости, раскомментируем прочие (например в нашем случае нужен пакет xorg7-ati). В любом случае рекомендуется оставлять пакет xorg7-vesa, так как он будет использован, если родной пакет драйвера не обнаружен или по какой-то причине не заработал.
В секции #!!Locale закомментируем все языковые пакеты за исключением тех. которые могут нам быть полезны: locale-en_US и locale-ru_RU.
В секции #!Applications закомментируем пакеты все ненужные нам пакеты, например firefox, open-vm-tools и vboxguest. В нашем случае в этой секции остаться только пакет freerdp.
В секции #!!Window Managers комментируем все пакеты оконных менеджеров, так как в нашей ситуации в них нет необходимости.
В секции #!!Other services комментируем пакеты cups (печать в нашем случае не нужна) и samba-client (нам не требуется, чтобы тонкий клиент мог куда-то попасть по SMB).
В секции #!!Basic раскомментируем параметр fastboot, чтобы использовать механизм быстрой загрузки образа (HTTP вместо TFTP). Зададим значение пароля в параметре rootpasswd. Закомментируем параметры xorgvncpasswd, storagepasswd, dualupasswd, sambapasswd, так как в них нет нужды. Так, как мы собрались использовать быструю загрузку HTTP, зададим параметр baseurl, в котором укажем URL-адрес веб-сервера и параметр basepath, в котором укажем имя папки на веб-сервере, в которой нужно искать файлы для загрузки. Параметр initrdcmd вернём в исходное значение «squashfs».
В конечном счёте (без учёта закомментированных строк) конфигурационный файл build.conf в нашем случае примет следующий вид:
#!Hardware
machine HP-t610
#!!Filesystem Support
module usb-storage
module isofs
module udf
module vfat
#!!Miscellaneous
package overlayfs
package ts-classic
package autonet
package udisks
package ntp
package cpufreq
#!!X related
package xorg7-vesa
package xorg7-ati
#!!Locale
package locale-en_US
package locale-ru_RU
#!Applications
package freerdp
#!!Miscellaneous
package fonts-TTF-BH
package fonts-TTF-vera
package fonts-TTF-liberation
#!!Basic
param fastboot true
param rootpasswd Str0nGpWd
param bootlogo true
param boottheme default
param splash silent
param fbmtrr 0
param fbnocrtc true
param fbsm ywrap
param bootresolution 1280x768-32
param desktop file:./backgrounds/Hive_Lite.jpg
param defaultconfig thinstation.conf.buildtime
param basename thinstation
param basepath ThinClients
param baseurl http://10.1.4.10
param haltonerror false
param hardlinkfs true
param sametimestmp true
param initrdcmd "squashfs"
param bootverbosity 3
#!!Advanced
param downloads /downloads
param bootimages "iso syslinux pxe"
param syslinuxtheme "default"
package alltimezone
param allres true
param allfirmware true
param blacklist snd-pcsp.ko
***
Следующим правим конфигурационный файл thinstation.conf.buildtime, предварительно сделав копию оригинального файла на всякий случай:
# cp thinstation.conf.buildtime thinstation.conf.buildtime.original
Базовую информацию об этом файле можно получить в документе Thinstation Wiki — thinstation.conf, а узнать о возможных параметрах и их описании можно в файле thinstation.conf.sample.
Основную массу имеющихся в файле thinstation.conf.buildtime параметров можно оставить без изменений. Изменим и добавим лишь те параметры которые относятся к специфике нашей задачи:
NET_FILE_ENABLED=On
NET_FILE_METHOD=wget
...
SESSION_0_TYPE=freerdp
SESSION_0_TITLE="RDP"
SESSION_0_AUTOSTART=on
...
NET_USE=LAN
NET_USE_DHCP=ON
NET_DHCP_DELAY=30
NET_DHCP_TIMEOUT=30
NET_LINKWAIT=30
...
Добавленными параметрами NET_FILE_* мы укажем на необходимость загрузки конфигурационных файлов Thinstation по сети по протоколу HTTP. Это позволит нам разместить на веб-сервере конфигурационные файлы thinstation.conf-<MAC>, настраивающие конкретных тонких клиентов, не меняя при этом настройки внутри раздаваемого образа. Далее мы рассмотрим пример такого файла.
В параметрах SESSION_0_* вместо используемого по умолчанию графического оконного менеджера xfwm4 мы сразу будем вызывать RDP-клиента freerdp. А общие для всех наших клиентов параметры подключения RDP-клиента к RDS-серверу (имя сервера, опции RDP-сессии) мы также вынесем в дальнейшем на веб-сервер в файл thinstation.conf.network. Его пример мы также рассмотрим далее.
В перечисленных параметрах NET_* мы зададим те опции тонкого клиента, которые могут повлиять на корректность инициализации сети в загружаемой системе и успешность загрузки по сети, как таковую. Например первая опция NET_USE=LAN задаёт приоритет использования проводных сетевых адаптеров перед беспроводными (может быть полезно, если тонкий клиент имеет и беспроводной и проводной адаптеры и один мешает загрузке другого). Опции задержки и таймаутов нужны для ожидания инициализации драйвера сетевого адаптера. На практике столкнулся с тем, что неуспевающий пройти инициализацию сетевой адаптер ломал загрузку по сети через HTTP.
***
Так как по условиям нашей задачи требуется авто-вход в RDP-сессию, удалим пару файлов, которые предотвращают авто-вход для freerdp
# rm /thinstation/build/packages/freerdp/etc/cmd/freerdp.getuser
# rm /thinstation/build/packages/freerdp/etc/cmd/freerdp.getpass
Это позволит нам передавать учётные данные для подключения к RDS-серверу клиенту freerdp в виде параметров. Эти параметры мы будем хранить в файлах thinstation.conf-<MAC>, которые тонкие клиенты будут получать с веб-сервера в процессе загрузки. В целом, с точки зрения безопасности, такое решение может быть неверным, однако учитывая условия нашей задачи (изоляцию сегмента сети тонких клиентов и одинаковый ограниченный набор возможностей конечных пользователей работающих на всех тонких клиентах) такая конфигурация вполне имеет право на жизнь.
***
Теперь на DevStation всё готово для сборки рабочего образа. Запускаем сборку из chroot-окружения:
# ./build
Так, как в конфигурационном файле build.conf мы включили поддержку fastboot, то при сборке вместо одного «тяжёлого» файла initrd мы получим «легковесный» initrd и дополнительный squash-файл, который и будет в себе содержать бОльшую долю загружаемых данных.
Таким образом, подразумевается что первая часть (файл initrd) будет загружаться на PXE-клиенте по протоколу TFTP (с сервера WDS), а вторая часть (файл lib.squash) по протоколу HTTP (с веб-сервера IIS).
Получившиеся в процессе компиляции файлы initrd и vmlinuz мы скопируем на WDS сервер в ранее созданный нами каталог D:\RemoteInstall\Images\Linux (перезаписав возможно ранее размещённые там файлы от служебного образа Thinstation), а о файле lib.squash мы поговорим чуть позже, после настройки веб-сервера IIS.
Настройка веб-сервера IIS для поддержки Fast Boot
Так как на этапе сборки рабочего образа Thinstation мы включили опцию поддержки fastboot в build.conf, а в thinstation.conf.buildtime указали расположение веб-сервера Fast Boot, то теперь нам нужно разместить получившийся ранее Squash-файл на этом веб-сервере, чтобы в процессе загрузки основной «тяжёлой» части образа использовался не протокол TFTP а протокол HTTP. Это позволит ускорить время загрузки ОС тонкого клиента.
В нашем случае в качестве веб-сервера выступает IIS, который мы уже развернули ранее вместе с WDS, поэтому выполним его настройку, например через IIS Manager. Нам нужно сделать две вещи. Включить поддержку нового MIME-типа .squash и убедиться в том, что к сайту разрешён анонимный доступ.
В оснастке IIS Manager выберем сайт, в нашем случае это Default Web Site.
В настройках сайта выберем пункт MIME Types и используя в меню Actions ссылку Add добавим новый MIME-тип: filename extension = .squash , MIME type = application/octet-stream
Если не выполнить данную настройку, то наш веб-сервер IIS приходящим к нему PXE-клиентам попросту не будет отдавать squash-файл, а будет возвращать ошибку доступа.
Перейдём к разделу настроек сайта Authentication и убедимся в том, что включена анонимная аутентификация
Опять же, это нужно для того, чтобы приходящие PXE-клиенты без проблем могли скачать нужные им файлы.
***
Скопируем с DevStation появившийся после компиляции файл /thinstation/build/boot-images/pxe/boot/lib.squash в подкаталог ThinClients каталога, в котором размещена корневая папка сайта IIS (по умолчанию C:\Inetpub\wwwroot). Вспомним, что именно этот подкаталог веб-сервера мы указывали в параметре basepath в файле build.conf перед компиляцией рабочего образа Thinstation.
Использование разных сборок и конфигураций Thinstation
Есть разные походы к тому, каким образом можно настроить разный порядок загрузки «разношёрстных» тонких клиентов и выбор того или иного подхода зачастую зависит от исходных условий среды реализации. Исключительно оптимальных подходов, на мой взгляд здесь не существует, так как каждое решение имеет свои преимущества и недостатки. По имеющимся исходным условиям я выбрал вариант с выдачей PXE-клиентам загрузочных образов Thinstation (и конфигурационных файлов) в зависимости от их конкретных MAC-адресов. Поговорим о том, как реализовать подобную схему.
Мы помним, что для размещения файлов образа Thinstation initrd и vmlinuz на WDS мы использовали каталог D:\RemoteInstall\Images\Linux. В процессе загрузки PXE клиенты сначала скачивают файл D:\RemoteInstall\Boot\pxelinux.cfg\default (на него ведут сим.линки из D:\RemoteInstall\Boot\x64\pxelinux.cfg и D:\RemoteInstall\Boot\x86\pxelinux.cfg), в котором указан путь к файлам initrd и vmlinuz. Этот файл мы создавали ранее на этапе настройки WDS.
Мы можем заставить отдельно-взятого тонкого клиента Thinstation вместо настроек, указанных в файле default использовать какие-то другие настройки порядка загрузки, например указав путь к другим файлам initrd и vmlinuz. Для этого в каталоге PXE-сервера D:\RemoteInstall\Boot\pxelinux.cfg\ можно создать файл, с содержанием аналогичным файлу default, но с именем в формате 01-<MAC>. Например, для клиента с MAC-адресом 00-15-5d-00-40-36 файл должен иметь имя 01-00-15-5d-00-40-36.
Содержимое файла может иметь следующие настройки:
DEFAULT RDP
PROMPT 0
NOESCAPE 1
ALLOWOPTIONS 0
LABEL RDP
MENU DEFAULT
KERNEL /Linux/HP-t610/vmlinuz
APPEND initrd=/Linux/HP-t610/initrd splash=silent,theme:default load_ramdisk=1 ramdisk_blocksize=4096 root=/dev/ram0 ramdisk_size=786432 loglevel=3 console=tty1 vt.global_cursor_default=0 LM=3 FASTBOOT_URL=http://10.1.4.10/ThinClients/HP-t610/
Как видно, в качестве пути к файлам initrd и vmlinuz, которые загружаются с нашего PXE-сервера по протоколу TFTP, здесь уже указаны пути отличные от тех, что могут быть указаны в файле D:\RemoteInstall\Boot\pxelinux.cfg\default. То есть в каталоге, из которого PXE-сервер отдаёт клиентам загрузочные образы мы создали подкаталог /Linux/HP-t610/ (физический путь D:\RemoteInstall\Images\Linux\HP-t610\) с файлами определённой сборки образа нашего клиента Thinstation.
Также можно обратить внимание на то, что строку инициализации initrd здесь мы дополняем параметром FASTBOOT_URL, который ссылается на веб-сервер, где у нас расположен squash-файл ассоциированный с initrd-файлом. Нетрудно догадаться, что на веб-сервере в каталоге /ThinClients/ у нас также создан подкаталог под конкретную сборку образа — /ThinClients/HP-t610/.
Таким образом мы организовали возможность раздачи файлов загружаемого образа Thinstation в зависимости от MAC-адреса PXE-клиента.
***
Теперь вспомним, что по условиям нашей задачи требуется, чтобы каждый загруженный экземпляр Thinstation автоматически создавал RDP-сессию на RDS-сервере, где автоматически должно запускаться определённое бизнес-приложение. А подключение к RDS-серверу подразумевает передачу каких-то учётных данных, используемых на этом сервере. При этом, как мы понимаем, каждый тонкий клиент должен передавать уникальные учётные данные, чтобы иметь выделенную RDP-сессию на сервере. Получается, что у нас добавляется необходимость дополнительной уникальной для каждого клиента настройки ПО freerdp, запускаемого в среде Thinstation.
Реализовать это можно с помощью дополнительно загружаемых с веб-сервера файлов вида thinstation.conf.network и thinstation.conf-<MAC>. И не забываем про то, что в процессе сборки рабочего образа Thinstation мы настаивали файл thinstation.conf.buildtime, который попал в этот образ. Thinstation обрабатывает все эти thinstation.conf* файлы в следующем порядке (процитирую источник):
Первым применяется thinstation.conf.buildtime при начальной загрузке образа, затем происходит получение файла thinstation.conf.network, и далее индивидуальные файлы конфигурации.
Если значение переменной SESSION_0_TYPE=rdesktop в файле thinstation.conf.network, а в thinstation.conf-ИМЯ_КОМЬЮТЕРА уже SESSION_0_TYPE=freerdp, то в результате загрузится freerdp.
Получить общую информацию о том, какими вообще методами могут загружаться конфигурационные файлы Thinstation можно из документа Thinstation Wiki – Configuration. Как я уже сказал, мы будем использовать загрузку дополнительных конфигурационных файлов тонких Thinstation по протоколу HTP с веб-сервера IIS. Поэтому сначала создадим на нашем веб-сервере файл групповых настроек, затем файл персональных настроек тонкого клиента.
***
На веб-сервере (вспомним параметр baseurl из build.conf) в каталоге, где уже размещаются squash-файлы (вспомним параметр basepath из build.conf) создадим общий для всех клиентов конфигурационный файл thinstation.conf.network:
SESSION_0_AUTOSTART=ON
SESSION_0_TYPE=freerdp
SESSION_0_TITLE="RDP"
SESSION_0_FREERDP_SERVER="10.1.4.10"
RECONNECT_PROMPT=FORCE
NET_TIME_SERVER="10.1.4.10"
TIME_ZONE="Europe/Moscow"
CRON_JOB1="30 18 * * * /sbin/poweroff"
Этот файл будет содержать общие для всех клиентов параметры работы ОС Thinstation (запуск оболочки в опциях SESSION_0_*) и адрес RDS-сервера (SESSION_0_FREERDP_SERVER). Опция RECONNECT_PROMPT=FORCE, позволит автоматически выполнять переподключение к RDS-серверу в случае попыток завершения сессии и/или проблем с временной недоступностью сервера. Присутствующие здесь опции, связанные со временем и планировщиков задач рассмотрим далее.
***
Теперь в этом же каталоге веб-сервера создадим файл индивидуальных настроек тонкого клиента с именем формата thinstation.conf-<MAC>. В нашем примере файл получится с именем thinstation.conf-00155D004036. В этом файле будут указаны опции подключения freerdp, касающиеся только этого конкретного тонкого клиента:
SESSION_0_FREERDP_OPTIONS="/u:'thinusr-00155d004036' /p:'rdpClPwd00155d004036' /bpp:32 /cert-ignore /sec:nla +fonts +aero"
Разумеется на RDS-сервере мы параллельно должны создать соответствующую учётную запись пользователя с указанным именем и паролем. Эта учётная запись будет ассоциироваться с данным тонким клиентом.
Кстати, информацию о допустимых опциях freerdp можно найти в документе: FreeRDP Wiki – CommandLineInterface.
В конечном итоге на веб-сервере мы получим примерно следующую картину:
***
Ещё раз напомню о том, чего не стоит упускать для успешной загрузки конфигурационных файлов Thinstation с веб-сервера.
Образ Thinstation должен быть собран со следующими параметрами:
- В файле thinstation.conf.buildtime должны присутствовать директивы NET_FILE_ENABLED=On
и NET_FILE_METHOD=wget - В файле build.conf должен быть указан пусть каталоге на веб-сервере, где искать файлы конфигурации в параметрах baseurl и basepath
Кроме этого, не стоит забывать про ограничения MIME-типов которые накладывает IIS. То есть нужно решить вопрос возможности загрузки файлов с именами формата thinstation.conf*
Для этого ранее описанным способом на веб-сервере IIS добавим MIME-типы .network и .conf-<MAC-клиента> (для всех допустимых MAC-адресов) с типом text/plain:
После этого убедимся в том, что через браузер мы можем без проблем скачать соответствующие файлы с веб-сервера по ссылкам типа:
- http://10.1.4.10/ThinClients/thinstation.conf.network
- http://10.1.4.10/ThinClients/thinstation.conf-00155D004036
Если заниматься настройкой MIME-типов в IIS под каждый MAC-адрес не очень хочется, то можно разрешить загрузку файлов с любым расширением для определённого каталога веб-сервера. Для того, чтобы это сделать воспользуемся рекомендацией из статьи KB326965 — IIS 6.0 does not serve unknown MIME types и добавим для соответствующего каталога IIS универсальную запись: * = application/octet-stream
***
Теперь можно считать, что наш веб-сервер готов к раздаче PXE-клиентам разных сборок и конфигураций Thinstation.
Тестируем запуск тонкого клиента
Перед тем, как выполнять проверочный запуск тонкого клиента, ещё раз вспомним о том, какие файлы мы имеем для его автоматической загрузки и настройки, и где эти файлы расположены на нашем Windows-сервере управления:
- После компиляции рабочего образа Thinstation мы имеем три файла, которые распределены на сервере следующим образом:
- D:\RemoteInstall\Images\Linux\HP-t610\vmlinuz
- D:\RemoteInstall\Images\Linux\HP-t610\initrd
- C:\inetpub\wwwroot\ThinClients\HP-t610\lib.squash
- Файл настроек загрузки PXE-клиента:
- D:\RemoteInstall\Boot\pxelinux.cfg\01-00-15-5d-00-40-36
- Конфигурационные файлы Thinstation:
- C:\inetpub\wwwroot\ThinClients\thinstation.conf.network
- C:\inetpub\wwwroot\ThinClients\thinstation.conf-00155D004036
При запуске клиент с PXE-сервера получит по TFTP файлы vmlinuz и initrd, указанные в \pxelinux.cfg\01-00-15-5d-00-40-36 и загрузит их в память тонкого клиента…
…на следующем этапе (опять же согласно настроек \pxelinux.cfg\01-00-15-5d-00-40-36) с веб-сервера будет загружен файл lib.squash и произведено применение конфигурационных файлов thinstation.conf.network и thinstation.conf-00155D004036
На последней стадии загрузки, согласно условий нашей задачи, будет запущен RDP-клиент freerdp с автоматическим подключением к серверу RDS.
Если что-то «пошло не так», перепроверим все конфигурационные файлы и заглянем в раздел Поиск решений проблем (далее).
Загрузка с USB накопителя
В некоторых случаях может получиться так, что загрузка образа тонкого клиента по сети не самый лучший вариант, например, из-за слабеньких и неустойчивых каналов передачи данных между конечным тонким клиентом и PXE-сервером. В таком случае, в качестве исключения, можно воспользоваться загрузкой Thinstation с локального USB-накопителя, подключённого в порт тонкого клиента.
При каждой процедуре компиляции рабочего образа Thinstation, которую мы рассматривали ранее, помимо уже знакомых нам файлов initrd/vmlinuz/lib.squash, генерируется файл загрузочного ISO-образа:
/build/boot-images/iso/thinstation.iso
Однако, как я понял, если образ Thinstation был скомпилирован с параметром fastboot в build.conf, то он для локальной загрузки не подойдёт. Поэтому, для того, чтобы получить отдельно загружаемый (без проблем) с локального накопителя образ, нам потребуется скомпилировать его с выключенной опцией fastboot.
В некоторых источниках можно встретить рекомендации по специальной настройке thinstation.conf.buildtime в процессе подготовки к компиляции локально загружаемого образа. Однако я таких настроек не выполнял, и у меня загрузка тонкого клиента с локального USB-накопителя успешно прошла из образа по сути аналогичного, тому что я собирал для сетевой загрузки с единственным упомянутым исключением — выключенным fastboot.
Структура расположения файлов внутри получающегося при компиляции ISO-образа такова:
g:\>tree /f
Структура папок тома THINSTATION
Серийный номер тома: 65F3-6981
G:.
│ syslinux.cfg
│
└───boot
│ image.md5
│ initrd
│ vmlinuz
│
└───syslinux
boot.cat
isolinux.bin
isolinux.cfg
ldlinux.c32
product.txt<\pre>
То есть, мы видим, что нужные для загрузки системы файлы vmlinuz и initrd имеются в каталоге boot (lib.squash при этом не используется, так как образ собирался с выключенным fastboot). При этом конфигурационные файлы thinstation.conf.network и thinstation.conf-00155D004036, как и при сетевой загрузке с веб-сервера, что по прежнему нам даёт преимущества управления некоторыми параметрами конфигурации клиентов в централизованном месте.
Для записи загрузочного ISO-образа на USB-накопитель можно использовать, например, свободно распространяемую утилиту Rufus:
Работа тонких клиентов по расписанию
Как мы помним, согласно исходных условий, нам нужно решить вопрос автоматизации цикличной работы тонких клиентов. То есть утром каждого рабочего дня клиентов нужно автоматически включать, а вечером — автоматически выключать. Фактически эту задачу можно разложить на три составляющих момента:
- Синхронизация времени на тонких клиентах
- Включение клиентов по расписанию
- Выключение клиентов по расписанию
***
Синхронизация времени нам нужна для того, чтобы исключить возможные курьёзы, связанные с работой тонких клиентов по расписанию. Согласитесь, будет неприятно, если клиент со сбившимся по какой-то причине временем, будет выключаться в середине рабочего дня, считая, что рабочий день кончился.
Учитывая изолированность наших тонких клиентов, единственным источником, с которым они могут синхронизировать время, является наш выделенный Windows-сервер. Давайте настроим службу времени на этом сервере.
Так как наш Windows-сервер является виртуальной машиной Hyper-V, то в первую очередь в свойствах этой виртуальной машины отключим функцию синхронизацию времени с хостом:
Для настройки службы времени «Windows Time» (w32time) будем использовать входящую в состав Windows Server утилиту w32tm, которая будет управлять значениями ключа реестра HKLM\System\CurrentControlSet\Services\W32Time
Конфигурируем службу времени на синхронизацию с внешним NTP-сервером командой:
net stop w32time
w32tm /config /manualpeerlist:"10.10.0.2 10.11.0.3" /syncfromflags:MANUAL
net start w32time
Проверяем статус синхронизации командой:
w32tm /query /status
Для того, чтобы служба времени работала, не только как NTP-клиент, но и как NTP-сервер, нужна дополнительная правка реестра:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer]
"Enabled"=dword:00000001
После правки реестра отправляем службе NTP информацию об обновлении конфигурации (последняя команда покажет текущий статус конфигурации):
w32tm /config /update
w32tm /query /configuration
Учитывая то обстоятельство, что в в нашем случае Windows-сервер не является членом домена, у нас может возникнуть проблема с автоматическим запуском службы времени в процессе загрузки системы. Проблема эта известна давно и описана в статье KB2385818 — Windows Time service doesn’t start automatically on a workgroup computer that’s running Windows 7 or Windows Server 2008 R2. Суть проблемы в том, что служба времени имеет триггер, который выполняет запуск службы только в том случае если система является членом домена. Проверить это можно командой:
sc qtriggerinfo w32time
Для решения проблемы воспользуемся рекомендациями из вышеуказанной статьи и выберем один из предложенных методов – подмена триггера. Заменим для службы времени триггер проверки членства в домене на триггер проверки наличия сетевого подключения:
sc triggerinfo w32time start/networkon stop/networkoff
После перезапустим сервер и убедимся в том, что служба запускается автоматически без проблем.
Убедимся в том, что в системе висит UDP-прослушиватель на 123 порту:
C:\>netstat -na | findstr 123
UDP 0.0.0.0:123 *:*
UDP [::]:123 *:*
Создадим правило в Windows Firewall, разрешающее входящие подключения на порт NTP-сервера:
New-NetFirewallRule -DisplayName "NTP Server (UDP-In)" -Direction "Inbound" -Protocol "UDP" -Action "Allow" -LocalPort "123"
***
Теперь посмотрим на протокол NTP с точки зрения нашего тонкого клиента. Первое, о чём стоит заметить, это то, что для поддержки возможности синхронизации времени, образ Thinstation должен быть собран с включённым пакетом package ntp в build.conf (в приведённом ранее примере build.conf этот пакет включен).
Информацию о NTP-сервере, как источнике синхронизации времени можно указать в любом из thinstation.conf* файлов. Мне показалось более удобным указать эти опции в файле thinstation.conf.network, который лежит на веб-сервере и централизовано раздаётся всем тонким клиентам. Как минимум можно указать параметры (в приведённом ранее примере thinstation.conf.network эти параметры имеются):
NET_TIME_SERVER="10.1.4.10"
TIME_ZONE="Europe/Moscow"
Если эти условия соблюдены, то можно попробовать с загруженного тонкого клиента (а мы помним про то, что у нас есть возможность подключения к консоли клиента через Telnet) выполнить команду получения времени с нашего сервера времени:
ts_00155D004036:~# ntpdate 10.1.4.10
9 Feb 16:52:23 ntpdate[4762]: step time server 10.1.4.10 offset 1.681994 sec
Как видим, ответ от NTP-сервера получен. В конфигурации по умолчанию NTP-клиент, встроенный в Thinstation, будет выполнять синхронизацию времени в начале каждого очередного часа.
***
Теперь поговорим об автоматизации выключения тонких клиентов по расписанию. Thinstation, как Linux-система, имеет на борту работающий планировщик cron. Конфигурационные файлы thinstation.conf* позволяют нам добавлять до 9 заданий в этот планировщик с помощью параметров CRON_JOB[1-9]. Пример добавления задачи на отключение тонкого клиента по расписанию — каждый день в 19:30:
CRON_JOB1 = "30 19 * * * /sbin/poweroff"
Опять же отмечу, что в приведённом ранее примере thinstation.conf.network эта задача cron была упомянута. В случае необходимости мы можем разным тонким клиентам аналогичным образом задавать уникальные параметры отключения, например, через файлы thinstation.conf-<MAC>.
Добавленное через конфигурационные файлы Thinstation задание cron в загруженном клиенте попадёт в файл /tmp/crontab
Кстати, здесь же можем увидеть и задания синхронизации времени (первое и второе задание).
***
Задача автоматизации включения тонких клиентов по расписанию, как и прочие задачи, может иметь разные варианты реализации. Учитывая то, что в нашем случае все клиенты находятся в рамках одного физического сегмента сети, мы можем использовать функционал пробуждения клиентов по сети (Wake On Lan) по MAC-адресам.
Для этой цели я воспользовался ещё одной бесплатной утилитой командной строки для Windows: Wake On Lan Command Line
Синтаксис использования утилиты прост:
wolcmd [MAC-адрес] 255.255.255.255 255.255.255.255 7
То есть с помощью этой утилиты мы посылаем в сеть широковещательный запрос с указанием MAC-адреса интересующего нас клиента.
При этом замечено, что клиент будет реагировать на WoL-запрос, только в том случае, если в прошлый раз система была выключена штатно. Если же выключение произведено жёстко (например нажата кнопка питания с удержанием), то для последующего успешного запуска потребуется обесточить клиента (извлечь/вставить шнур питания).
В общем всё, что здесь остаётся сделать, это создать на нашем Windows-сервере управления командный файл с вызовом wolcmd и добавить его в планировщик заданий Windows на выполнение в нужное время, например, в 07:50 утра каждого рабочего дня недели.
Поиск решений проблем
Если в процессе загрузки по сети возникают проблемы, например, когда останавливается и «замерзает» индикатор загрузки на сплэш-заставке, то может потребоваться получить доступ к расширенной информации о ходе загрузки. Для этого нужно изменить параметры вызова initrd в конфигурационном файле PXE-сервера. Например так выглядит ранее приведённый пример вызова initrd в штатной ситуации:
...
APPEND initrd=/Linux/HP-t610/initrd splash=silent,theme:default load_ramdisk=1 ramdisk_blocksize=4096 root=/dev/ram0 ramdisk_size=786432 loglevel=3 console=tty1 vt.global_cursor_default=0 LM=3 FASTBOOT_URL=http://10.1.4.10/ThinClients/HP-t610/
Чтобы отключить отображение сплэш-заставки, уберём параметр splash=silent,theme:default. Чтобы перенаправить вывод процесса загрузки на основную консоль, заменим console=tty1 на tty0. Дополнительно можно увеличить уровень логирования, например loglevel=32. В тоге получится примерно так:
...
APPEND initrd=/Linux/HP-t610/initrd load_ramdisk=1 ramdisk_blocksize=4096 root=/dev/ram0 ramdisk_size=786432 loglevel=32 console=tty0 vt.global_cursor_default=0 LM=3 FASTBOOT_URL=http://10.1.4.10/ThinClients/HP-t610/
<
p align=»center»>***
Я на практике столкнулся с тем, что в загружаемой системе Thinstation сеть не успевает пройти полную инициализацию до того момента, как система пытается получить по HTTP squash-файл или файлы конфигурации. В итоге возникают ошибки типа «No lease, forking to background«, «Network is unreachable» и т.п.
В таких случаях на этапе сборки образа можно покрутить параметры в thinstation.conf.buildtime, связанные с сетью (NET_*). А получить по ним информацию можно из файла thinstation.conf.sample. Например можно для начала задать увеличенные значения интервалов ожидания и таймаутов, как было показано на выше.
NET_DHCP_DELAY=60
NET_DHCP_TIMEOUT=60
NET_LINKWAIT=60
Можно попробовать использовать эти параметры как по отдельности так и комбинировать их вместе.
***
Если сразу строить описанный стенд от начала и до конца, то допустив где-нибудь по пути ошибку, можно потратить немало времени на излишний «разбор полётов». Поэтому лучше действовать поступательно, то есть, например, сначала добиться загрузки по сети без использования fastboot, а потом уже, если всё работает как следует, переходить к усложнению конфигурации. Дополнительно в поиске решений проблем может оказаться полезной статья Thinstation Wiki — Debugging
Дополнительные источники информации:
- Thinstation / maintained by Donald A. Cupp Jr.
- Thinstation Wiki
- Peter Hinchley — Use Thinstation to Build a Network-Bootable RDP-Enabled Thin Client Image
- Блог QUADED — Сборка Thinstation образа
- ITSave — Thinstation 5.x
- Thinstation по русски
- Thinstation Доработка тонкого клиента
- PXE загрузка Thinstation в зависимости от железа тонкого клиента
- Загрузка PXE для разных платформ тонких клиентов
Разворачиваем сеть тонких клиентов Thinstation с подключением к серверу Windows Server 2012 R2 Remote Desktop Services
В качестве аппаратной платформы для тонкого клиента мы будем использовать устройства HP t610, хотя в рамках нашей задачи эти устройства имеют более чем избыточную конфигурацию. По сути минимальные системные требования для тонкого клиента с Thinstation – любой «аппаратный хлам» начиная с уровня Pentium-II с 128MB RAM и выше. Мы будем использовать бездисковую конфигурацию тонких клиентов, то есть загрузка системы будет выполняться по сети с использованием PXE (приоритетно) или с локальных загрузочных USB-накопителей (для клиентов без поддержки PXE и в отдалённых участках со слабым каналом передачи данных).
В рассматриваемом примере имеется несколько исходных условий, от которых нам придётся отталкиваться:
Начнём процедуру настройки с выделенного сервера, который в нашем случае является виртуальной машиной Hyper-V с предварительно установленной гостевой ОС Windows Server 2012 R2 Standard. Развернём и настроим на этом сервере службы DHCP и WDS.
Настройка сервера DHCP
Для автоматического назначения IP-адресации нашим тонким клиентам установим и настроим службу DHCP на нашем сервере управления.
Устанавливаем роль DHCP Server через оснастку Server Manager или через PowerShell:
После установки роли откроем оснастку Server Manager и запустим мастер Post-Deployment Configuration, после завершения которого роль сервера DHCP может считаться развёрнутой.
В нашем примере сервер DHCP разворачивается на компьютере, не являющемся членом домена, поэтому с авторизацией (активацией) службы DHCP не возникнет проблем – сразу после развёртывания сервер будет готов к работе. Создадим для тонких клиентов область с пулом выдаваемых IP адресов и активируем её:
В оснастке управления правилами Windows Firewall проверяем правила относящиеся к серверу DHCP (как минимум нужно разрешить входящие подключения по протоколу UDP на порты 67/68)
Настройка сервера Windows Deployment Services
Роли Windows Deployment Services и Web Server понадобятся нам для возможности раздачи по сети (PXE) загружаемых образов Thinstation тонким клиентам по протоколам TFTP/HTTP. Устанавливаем роли:
Откроем консоль WDS и первым делом вызовем мастер конфигурирования сервера Configure Server
На первом шаге мастер ознакомит нас с требованиями необходимыми для работы WDS.
На шаге выбора типа развёртывания WDS, согласно исходных условий нашего примера, выбираем режим изолированного сервере Standalone server
На следующем шаге мастер конфигурации, определив наличие на нашем сервере службы DHCP-сервера, предложит настроить параметры взаимодействия с этой службой. А именно, нам потребуется включить запрет прослушивания портов DHCP службой WDS и разрешить конфигурирование опций DHCP-сервера для поддержки PXE-клиентов.
На шаге настроек PXE по условиям нашей задачи разрешаем WDS серверу отвечать на запросы всех PXE-клиентов
По завершению работы мастера служба WDS будет запущена. В консоли WDS откроем свойства сервера и на закладке Boot отключим включенное по умолчанию требование нажатия F12 на стороне PXE-клиента для возможности загрузки по сети, выбрав опцию Always continue the PXE boot.
Заглянем в оснастку управления сервером DHCP и проверим, что в DHCP-опциях на уровне сервера появилась опция PXE
Теперь сделаем ряд действий по добавлению нашему WDS серверу поддержи SYSLINUX.
Скачаем архив актуальной версии загрузчика syslinux-6.03 по ссылке:
Распакуем архив syslinux-6.03.zip и выполним следующие действия:
Повторим действия, проделанные для каталога D:\RemoteInstall\Boot\x64 применительно к каталогу D:\RemoteInstall\Boot\x86
Создадим каталог D:\RemoteInstall\Boot\pxelinux.cfg (не файл, а именно каталог). В этом каталоге будут хранится конфигурационный файлы PXE, которые будет отдавать WDS-сервер PXE-клиентам.
Создадим конфигурационный файл PXE «по умолчанию» с именем default в каталоге D:\RemoteInstall\Boot\pxelinux.cfg и добавим в него следующий контент:
В командной строке с правами Администратора перейдём в каталог D:\RemoteInstall\Boot\x64 и создадим символическую ссылку (junction) на каталог D:\RemoteInstall\Boot\pxelinux.cfg :
Повторим тоже самое для каталога D:\RemoteInstall\Boot\x86 :
***
В командной строке с правами Администратора перейдём в каталог D:\RemoteInstall\Boot\x64 и создадим символическую ссылку (junction) на каталог D:\RemoteInstall\Images\Linux :
Повторим тоже самое для каталога D:\RemoteInstall\Boot\x86 :
***
Для того, чтобы настроить WDS на использование добавленных нами загрузочных программ SYSLINUX (замена стандартного для WDS загрузчика pxeboot на pxelinux), выполним ряд команд с правами Администратора на сервере WDS:
Примечание: Если в дальнейшем по какой-то причине потребуется восстановить загрузочные программы (pxeboot), используемые в WDS по умолчанию, сделать это можно командами:
В оснастке управления правилами Windows Firewall проверяем правила относящиеся к серверу WDS (как минимум нужно разрешить входящие подключения по протоколу UDP к исполняемому файлу службы).
А также включаем правило, разрешающее входящий трафик к веб-серверу IIS
Кстати, к настройке веб-сервера IIS мы ещё вернёмся позже.
Развёртывание сборочной среды DevStation
Загружаем последнюю версию DevStation по ссылке: Thinstation Latest Download
В нашем случае это файл TS-5.5.1-Installer-0627.iso размером 212MB
Загружаемся в подготовленную виртуальную машину с ISO-образа и выбираем пункт установки – Installer for DevStation
В память загрузится Live-система, будет выполнен авто-вход в графическую оболочку, где с рабочего стола запустим ярлык Install to HD. В открывшейся форме нам поведают о том, что на самом деле можно прожить и без выделенной инсталляции DevStation, залив git-клон проекта Thinstation на любой другой сборочной Linux-системе.
Утвердительно «кивнём гривой», после чего будет запущена процедура проверки Интернет-соединения.
В случае, если наша виртуальная машина DevStation не имеет прямого подключения к Интернету, то нам любезно будет предложено настроить параметры прокси-сервера
Однако практическое применение показало, что инсталлятор не смог пройти через Squid с включённой аутентификацией, даже не смотря на то, что были явным образом указаны параметры прокси и учётные данные для аутентификации на прокси. В конечном итоге виртуальная машина DevStation на время инсталляции была выпущена в Интернет напрямую.
После того, как Интернет-соединение будет успешно проверено, нам сообщат о том, на какой диск будет установлена система DevStation.
Затем укажем предпочитаемое разрешение экрана. У нас ВМ и выбор здесь небольшой.
Затем из представленных списков выберем свою временную зону и раскладку клавиатуры:
Перед началом процесса установки DevStation нас предупредят о том, что все данные на диски будут уничтожены (инсталлятор по своему усмотрению выполнит разметку диска)
Будет запущена программа развёртывания DevStation, в ходе которой будет выполнена разметка диска, загрузка и установка всех необходимых пакетов из онлайн-репозитория проекта Thinstation размером примерно около 2GB.
Процедура может занять от 20 минут и более, в зависимости от пропускной способности вашего Интернет-канала и проворности диска виртуальной машины. Когда процесс будет завершён, мы получим несколько уведомительных сообщений о том, как собрать собственный загрузочный образ тонкого клиента…
…о том, что наша система DevStation способна выступать в качестве PXE-сервера…
…и о том, что загрузочный образ ISO, с которого мы выполняли установку теперь нам больше не нужен, как, впрочем, и прямое подключение к Интернет, и после перезагрузки мы уже можем использовать установленную систему…
На это этапе можно извлечь загрузочный ISO образ из привода виртуальной машины и нажать OK
Отправляем виртуальную машину в перезагрузку.
Сборка служебного образа Thinstation
Итак, с рабочего стола графической среды DevStation запускаем ярлык Terminal Chroot
Удалим имеющуюся символическую ссылку на конфигурационный файл build.conf и создадим новый файл на базе шаблона build.conf.example
Обратите внимание на то, что все команды здесь мы будем выполнять в chroot-окружении, которое ссылается на каталог /thinstation/ относительно корневой системы DevStation.
Сохраним отредактированный файл build.conf и выполним команду сборки образа, включающего в себя все драйверы, которые поддерживает Thinstation
В процессе сборки будет задан вопрос о добавлении Firefox в собираемый образ. Если он Вам не нужен, вполне можно от него отказаться. То же самое касается включённых в конфигурации по умолчанию гостевых компонент VBox.
Процесс компиляции образа будет завершён созданием файла initrd размером около 175MB. Этот файл и содержит загружаемую ОС c ПО Thinstation для наших тонких клиентов. Напоминаю, что размер образа большой по той причине, что мы на этапе сборки включили в него все модули поддержки оборудования.
После завершения процесса компиляции оба эти файла можно найти в каталоге /thinstation/build/boot-images/pxe/boot/ (в консоли «Terminal Chroot» это каталог /build/boot-images/pxe/boot/ ). Нужно скопировать эти два файла на наш WDS-сервер в каталог D:\RemoteInstall\Images\Linux
Создадим временную сетевую папку на нашем Windows-сервере и предоставим доступ на запись к этой папке для своей учётной записи. На DevStation-машине создадим новый каталог и смонтируем в него сетевую папку с Windows-сервера WDS, после чего скопируем в смонтированную папку все нужные нам файлы:
На WDS-сервере из папки /TempShare перенесём файлы initrd и vmlinuz в каталог, из которого PXE-сервер будет отдавать PXE-клиентам файлы для загрузки D:\RemoteInstall\Images\Linux
Получение файлов профиля оборудования для Thinstation
Обратите внимание на то, что на данном этапе PXE-загрузку эталонного клиента (для генерации файлов профиля оборудования) мы можем произвести как с нашего WDS-сервера (ведь мы уже скопировали на него загрузочные файлы образа initrd и vmlinuz), так и с встроенного в DevStation PXE-сервера. Однако стоит учитывать то, что скрипт hwlister.sh будет пытаться передать получившиеся файлы профиля оборудования именно на тот PXE-сервер, с которого он был загружен. Поэтому для генерации профиля оборудования будет проще всего загружаться именно с PXE-сервера встроенного в DevStation.
Теперь на нашем Windows-сервере потребуется на время внести некоторые изменения:
Чтобы заставить нашу эталонную машину тонкого клиента загружать образ по сети не с WDS сервера, а с машины DevStation, создадим на DHCP-сервере резервирование IP адреса для эталонной машины с опциями 66 и 67:
67 = boot/pxelinux/pxelinux.0
Переходим на DevStation и разрешаем запись всем пользователям в корневой каталог встроенного TFTP сервера. Для этого можно либо выполнить консольную команду:
Либо в графической оболочке вызвать через пункт меню Start > DevStation > Toggle PXE Read/Write:
После вызова этого пункта меню мы увидим сообщение о том, что запись для PXE-сервера включена:
Включаем эталонный компьютер. При старте клиент получит с DHCP зарезервированный нами IP-адрес с опциями указывающими на PXE-сервер DevStation и начнёт оттуда загружать образ.
На загруженном эталонном клиенте в графической оболочке открываем меню Applications > Utilities и выбираем Terminal Emulator
В окне терминала запускаем генерацию профиля оборудования с передачей на машину DevStation командой:
Заглянем в каталог /thinstation/build/boot-images/pxe на DevStation машине. Здесь появятся файлы переданные с клиента (в зависимости от «железа» клиента): module.list, package.list, firmware.list
Итак, аппаратный профиль эталонного клиента получен и передан на DevStation. Теперь можем выключить эталонный компьютер. Он нам больше не нужен.
На DevStation создаём новый подкаталог для профиля клиента в каталоге /thinstation/build/machine/ ( /build/machine/ в chroot-окружении) и переносим туда только что полученные с эталонного клиента list-файлы
Далее созданный профиль под названием HPt610 мы будем использовать при сборке конечного рабочего образа (будем указывать имя этого каталог в build.conf ).
Отключаем право на запись в PXE-сервере DevStation через ранее упомянутый пункт меню Start > DevStation > Toggle PXE Read/Write или командой в терминале:
Возвращаемся на наш Windows-сервер и в консоли WDS не забываем обратно включить опцию поддержки интеграции PXE с DHCP (вторую галочку)
А в консоли управления DHCP-сервером удаляем созданное ранее резервирование, которое мы делали под эталонного клиента.
Сборка рабочего образа Thinstation
Далее рассмотрим правки, которые нужно внести в build.conf исходя из условий нашей задачи.
В секции #!Hardware добавим запись о ранее созданном профиле machine HPt610
В секции #!!File System Support оставим модули usb-storage, isofs, udf, vfat. Остальные модули закомментируем. Эти модули нам потребуются на случай необходимости загрузки не по сети а с накопителей, типа USB-флэш диск.
В секции #!!Miscellaneous (я обнаружил в файле 2 таких секции) в списке пакетов закомментируем ранее включённый пакет extentions-x, так как на рабочем образе тонкого клиента в нём нет необходимости. Для возможности нормальной автоматической конфигурации сети в процессе загрузки тонкого клиента включим пакет ts-classic, выключим networkmanager и добавим autonet.
В секции #!!X закомментируем пакеты xorg7-vmware и, при необходимости, раскомментируем прочие (например в нашем случае нужен пакет xorg7-ati). В любом случае рекомендуется оставлять пакет xorg7-vesa, так как он будет использован, если родной пакет драйвера не обнаружен или по какой-то причине не заработал.
В секции #!!Locale закомментируем все языковые пакеты за исключением тех. которые могут нам быть полезны: locale-en_US и locale-ru_RU.
В секции #!Applications закомментируем пакеты все ненужные нам пакеты, например firefox, open-vm-tools и vboxguest. В нашем случае в этой секции остаться только пакет freerdp.
В секции #!!Window Managers комментируем все пакеты оконных менеджеров, так как в нашей ситуации в них нет необходимости.
В секции #!!Other services комментируем пакеты cups (печать в нашем случае не нужна) и samba-client (нам не требуется, чтобы тонкий клиент мог куда-то попасть по SMB).
В конечном счёте (без учёта закомментированных строк) конфигурационный файл build.conf в нашем случае примет следующий вид:
Основную массу имеющихся в файле thinstation.conf.buildtime параметров можно оставить без изменений. Изменим и добавим лишь те параметры которые относятся к специфике нашей задачи:
В перечисленных параметрах NET_* мы зададим те опции тонкого клиента, которые могут повлиять на корректность инициализации сети в загружаемой системе и успешность загрузки по сети, как таковую. Например первая опция NET_USE= LAN задаёт приоритет использования проводных сетевых адаптеров перед беспроводными (может быть полезно, если тонкий клиент имеет и беспроводной и проводной адаптеры и один мешает загрузке другого). Опции задержки и таймаутов нужны для ожидания инициализации драйвера сетевого адаптера. На практике столкнулся с тем, что неуспевающий пройти инициализацию сетевой адаптер ломал загрузку по сети через HTTP.
Так как по условиям нашей задачи требуется авто-вход в RDP-сессию, удалим пару файлов, которые предотвращают авто-вход для freerdp
Теперь на DevStation всё готово для сборки рабочего образа. Запускаем сборку из chroot-окружения:
Так, как в конфигурационном файле build.conf мы включили поддержку fastboot, то при сборке вместо одного «тяжёлого» файла initrd мы получим «легковесный» initrd и дополнительный squash-файл, который и будет в себе содержать бОльшую долю загружаемых данных.
Таким образом, подразумевается что первая часть (файл initrd) будет загружаться на PXE-клиенте по протоколу TFTP (с сервера WDS), а вторая часть (файл lib.squash) по протоколу HTTP (с веб-сервера IIS).
Получившиеся в процессе компиляции файлы initrd и vmlinuz мы скопируем на WDS сервер в ранее созданный нами каталог D:\RemoteInstall\Images\Linux (перезаписав возможно ранее размещённые там файлы от служебного образа Thinstation), а о файле lib.squash мы поговорим чуть позже, после настройки веб-сервера IIS.
Настройка веб-сервера IIS для поддержки Fast Boot
В нашем случае в качестве веб-сервера выступает IIS, который мы уже развернули ранее вместе с WDS, поэтому выполним его настройку, например через IIS Manager. Нам нужно сделать две вещи. Включить поддержку нового MIME-типа .squash и убедиться в том, что к сайту разрешён анонимный доступ.
В оснастке IIS Manager выберем сайт, в нашем случае это Default Web Site.
Если не выполнить данную настройку, то наш веб-сервер IIS приходящим к нему PXE-клиентам попросту не будет отдавать squash-файл, а будет возвращать ошибку доступа.
Перейдём к разделу настроек сайта Authentication и убедимся в том, что включена анонимная аутентификация
Опять же, это нужно для того, чтобы приходящие PXE-клиенты без проблем могли скачать нужные им файлы.
Скопируем с DevStation появившийся после компиляции файл /thinstation/build/boot-images/pxe/boot/lib.squash в подкаталог ThinClients каталога, в котором размещена корневая папка сайта IIS (по умолчанию C:\Inetpub\wwwroot ). Вспомним, что именно этот подкаталог веб-сервера мы указывали в параметре basepath в файле build.conf перед компиляцией рабочего образа Thinstation.
Использование разных сборок и конфигураций Thinstation
Есть разные походы к тому, каким образом можно настроить разный порядок загрузки «разношёрстных» тонких клиентов и выбор того или иного подхода зачастую зависит от исходных условий среды реализации. Исключительно оптимальных подходов, на мой взгляд здесь не существует, так как каждое решение имеет свои преимущества и недостатки. По имеющимся исходным условиям я выбрал вариант с выдачей PXE-клиентам загрузочных образов Thinstation (и конфигурационных файлов) в зависимости от их конкретных MAC-адресов. Поговорим о том, как реализовать подобную схему.
Содержимое файла может иметь следующие настройки:
Таким образом мы организовали возможность раздачи файлов загружаемого образа Thinstation в зависимости от MAC-адреса PXE-клиента.
Теперь вспомним, что по условиям нашей задачи требуется, чтобы каждый загруженный экземпляр Thinstation автоматически создавал RDP-сессию на RDS-сервере, где автоматически должно запускаться определённое бизнес-приложение. А подключение к RDS-серверу подразумевает передачу каких-то учётных данных, используемых на этом сервере. При этом, как мы понимаем, каждый тонкий клиент должен передавать уникальные учётные данные, чтобы иметь выделенную RDP-сессию на сервере. Получается, что у нас добавляется необходимость дополнительной уникальной для каждого клиента настройки ПО freerdp, запускаемого в среде Thinstation.
Первым применяется thinstation.conf.buildtime при начальной загрузке образа, затем происходит получение файла thinstation.conf.network, и далее индивидуальные файлы конфигурации.
Если значение переменной SESSION_0_TYPE=rdesktop в файле thinstation.conf.network, а в thinstation.conf-ИМЯ_КОМЬЮТЕРА уже SESSION_0_TYPE=freerdp, то в результате загрузится freerdp.
На веб-сервере (вспомним параметр baseurl из build.conf ) в каталоге, где уже размещаются squash-файлы (вспомним параметр basepath из build.conf ) создадим общий для всех клиентов конфигурационный файл thinstation.conf.network :
Разумеется на RDS-сервере мы параллельно должны создать соответствующую учётную запись пользователя с указанным именем и паролем. Эта учётная запись будет ассоциироваться с данным тонким клиентом.
В конечном итоге на веб-сервере мы получим примерно следующую картину:
Ещё раз напомню о том, чего не стоит упускать для успешной загрузки конфигурационных файлов Thinstation с веб-сервера.
Образ Thinstation должен быть собран со следующими параметрами:
Кроме этого, не стоит забывать про ограничения MIME-типов которые накладывает IIS. То есть нужно решить вопрос возможности загрузки файлов с именами формата thinstation.conf*
Для этого ранее описанным способом на веб-сервере IIS добавим MIME-типы .network и .conf- (для всех допустимых MAC-адресов) с типом text/plain:
После этого убедимся в том, что через браузер мы можем без проблем скачать соответствующие файлы с веб-сервера по ссылкам типа:
Теперь можно считать, что наш веб-сервер готов к раздаче PXE-клиентам разных сборок и конфигураций Thinstation.
Тестируем запуск тонкого клиента
Перед тем, как выполнять проверочный запуск тонкого клиента, ещё раз вспомним о том, какие файлы мы имеем для его автоматической загрузки и настройки, и где эти файлы расположены на нашем Windows-сервере управления:
При запуске клиент с PXE-сервера получит по TFTP файлы vmlinuz и initrd, указанные в \pxelinux.cfg\01-00-15-5d-00-40-36 и загрузит их в память тонкого клиента…
…на следующем этапе (опять же согласно настроек \pxelinux.cfg\01-00-15-5d-00-40-36 ) с веб-сервера будет загружен файл lib.squash и произведено применение конфигурационных файлов thinstation.conf.network и thinstation.conf-00155D004036
На последней стадии загрузки, согласно условий нашей задачи, будет запущен RDP-клиент freerdp с автоматическим подключением к серверу RDS.
Если что-то «пошло не так», перепроверим все конфигурационные файлы и заглянем в раздел Поиск решений проблем (далее).
Загрузка с USB накопителя
В некоторых случаях может получиться так, что загрузка образа тонкого клиента по сети не самый лучший вариант, например, из-за слабеньких и неустойчивых каналов передачи данных между конечным тонким клиентом и PXE-сервером. В таком случае, в качестве исключения, можно воспользоваться загрузкой Thinstation с локального USB-накопителя, подключённого в порт тонкого клиента.
Структура расположения файлов внутри получающегося при компиляции ISO-образа такова:
Для записи загрузочного ISO-образа на USB-накопитель можно использовать, например, свободно распространяемую утилиту Rufus :
Работа тонких клиентов по расписанию
Синхронизация времени нам нужна для того, чтобы исключить возможные курьёзы, связанные с работой тонких клиентов по расписанию. Согласитесь, будет неприятно, если клиент со сбившимся по какой-то причине временем, будет выключаться в середине рабочего дня, считая, что рабочий день кончился.
Учитывая изолированность наших тонких клиентов, единственным источником, с которым они могут синхронизировать время, является наш выделенный Windows-сервер. Давайте настроим службу времени на этом сервере.
Так как наш Windows-сервер является виртуальной машиной Hyper-V, то в первую очередь в свойствах этой виртуальной машины отключим функцию синхронизацию времени с хостом:
Для настройки службы времени «Windows Time» (w32time) будем использовать входящую в состав Windows Server утилиту w32tm, которая будет управлять значениями ключа реестра HKLM\System\CurrentControlSet\Services\W32Time
Конфигурируем службу времени на синхронизацию с внешним NTP-сервером командой:
Проверяем статус синхронизации командой:
Для того, чтобы служба времени работала, не только как NTP-клиент, но и как NTP-сервер, нужна дополнительная правка реестра:
После правки реестра отправляем службе NTP информацию об обновлении конфигурации (последняя команда покажет текущий статус конфигурации):
Для решения проблемы воспользуемся рекомендациями из вышеуказанной статьи и выберем один из предложенных методов – подмена триггера. Заменим для службы времени триггер проверки членства в домене на триггер проверки наличия сетевого подключения:
После перезапустим сервер и убедимся в том, что служба запускается автоматически без проблем.
Убедимся в том, что в системе висит UDP-прослушиватель на 123 порту:
Создадим правило в Windows Firewall, разрешающее входящие подключения на порт NTP-сервера:
Теперь посмотрим на протокол NTP с точки зрения нашего тонкого клиента. Первое, о чём стоит заметить, это то, что для поддержки возможности синхронизации времени, образ Thinstation должен быть собран с включённым пакетом package ntp в build.conf (в приведённом ранее примере build.conf этот пакет включен).
Если эти условия соблюдены, то можно попробовать с загруженного тонкого клиента (а мы помним про то, что у нас есть возможность подключения к консоли клиента через Telnet) выполнить команду получения времени с нашего сервера времени:
Как видим, ответ от NTP-сервера получен. В конфигурации по умолчанию NTP-клиент, встроенный в Thinstation, будет выполнять синхронизацию времени в начале каждого очередного часа.
Добавленное через конфигурационные файлы Thinstation задание cron в загруженном клиенте попадёт в файл /tmp/crontab
Кстати, здесь же можем увидеть и задания синхронизации времени (первое и второе задание).
Задача автоматизации включения тонких клиентов по расписанию, как и прочие задачи, может иметь разные варианты реализации. Учитывая то, что в нашем случае все клиенты находятся в рамках одного физического сегмента сети, мы можем использовать функционал пробуждения клиентов по сети (Wake On Lan) по MAC-адресам.
Для этой цели я воспользовался ещё одной бесплатной утилитой командной строки для Windows: Wake On Lan Command Line
Синтаксис использования утилиты прост:
То есть с помощью этой утилиты мы посылаем в сеть широковещательный запрос с указанием MAC-адреса интересующего нас клиента.
При этом замечено, что клиент будет реагировать на WoL-запрос, только в том случае, если в прошлый раз система была выключена штатно. Если же выключение произведено жёстко (например нажата кнопка питания с удержанием), то для последующего успешного запуска потребуется обесточить клиента (извлечь/вставить шнур питания).
В общем всё, что здесь остаётся сделать, это создать на нашем Windows-сервере управления командный файл с вызовом wolcmd и добавить его в планировщик заданий Windows на выполнение в нужное время, например, в 07:50 утра каждого рабочего дня недели.
Поиск решений проблем
Если в процессе загрузки по сети возникают проблемы, например, когда останавливается и «замерзает» индикатор загрузки на сплэш-заставке, то может потребоваться получить доступ к расширенной информации о ходе загрузки. Для этого нужно изменить параметры вызова initrd в конфигурационном файле PXE-сервера. Например так выглядит ранее приведённый пример вызова initrd в штатной ситуации:
Я на практике столкнулся с тем, что в загружаемой системе Thinstation сеть не успевает пройти полную инициализацию до того момента, как система пытается получить по HTTP squash-файл или файлы конфигурации. В итоге возникают ошибки типа » No lease, forking to background «, » Network is unreachable » и т.п.
Можно попробовать использовать эти параметры как по отдельности так и комбинировать их вместе.
Дополнительные источники информации:
Источник
Время на прочтение11 мин
Количество просмотров66K
Модельный ряд HP Flexible Thin Clients предлагает несколько тонких клиентов с различной конфигурацией и производительностью. На тонких клиентах используется несколько операционных систем: HP ThinPro, HP Smart Zero Core, Windows Embedded.
Далее я опишу процесс настройки тонких клиентов на базе ОС HP Smart Zero Core с рекомендациями.
Часть 1
Основной модельный ряд t5565/t5565z и t5570/t5570e представляют из себя одно устройство, тонкие клиенты отличаются между собой базовой ОС, размером флеш накопителя и оперативной памяти. После появления t510 от прежней маркировки отказались, и тонкие клиенты можно отличить только по парт номеру.
t520 отличается от своих предшественников. Установлен процессор AMD, используется разъем для блока питания как в линейке ноутбуков Probook/ElitBook, отсутствуют порты PS/2.
Документацию для t5565/t5570/t510 можно загрузить здесь, а для t520 здесь.
HP ThinPro и HP Smart Zero Core основаны на Ubuntu Linux.
Начиная с версии 5.0, HP ThinPro и HP Smart Zero Core объединили, сейчас для скачивания доступна версия 5.2.
Модель t5570/t5570e с ОС Windows стоит дороже своих аналогов на Linux, но при желании вы можете установить HP ThinPro или HP Smart Zero Core.
Если зайти на страницу загрузки ПО для t5565/t5565z вам предложат скачать только HP Smart Zero Core 4.4. Вы можете смело скачать образ версии 5.2 для t510 и установить.
На t5565/t5565z установить Windows не получится, флешка маловата. Заменить флешку на практике экономически не выгодно, это превысит стоимость тонкого клиента.
Часть 2 — HP Smart Zero Client Service
Для управления парком тонких клиентов предлагается использовать HP Smart Zero Client Service.
Механизм распространения обновлений и настроек очень простой: тонкий клиент обращается на http сервер и скачивает профиль или обновления для компонентов ОС. Для обнаружения http сервера используется DHCP сервер или широковещательная рассылка.
Установка
Загрузить дистрибутив размером 19 мб можно здесь. Для установки необходим «сервер» с Windows XP и выше, также необходимо установить Internet Information Services (IIS) и .NET Framework 3.5.
Установите Profile Editor и Automatic Intellidgence. Intellidgence Delivery Service я не использую.
В процессе установки Automatic Intellidgence создается веб узел HP Automatic Update.
Создайте на DHCP сервере «ссылку» на HP Automatic Update, за это отвечает String параметр 137.
Профиль по умолчанию
Запустите Profile Editor и создайте профиль по умолчанию.
Обратите внимание на наличие галочки «показывать все параметры».
Все ваши параметры будут подсвечены зеленым цветом.
Если вы только начали работу с HP Smart OS:
1 — Укажите версию вашего образа.
2 — Укажите протокол (RDP, Citrix, VMware View, WEB Browser).
3 — Укажите хост.
Индивидуальный профиль
Для создания индивидуального профиля, поместите файл в папку MAC, в имени используйте MAC адрес тонкого клиента.
Устранение проблем
Механизм распространения обновлений и настроек очень простой, если у вас не загружаются обновления или новый профиль, проверьте права доступа к файлам на http сервере. Я не мог понять почему не загружаются обновления, оказалось что нет прав на чтение файлов.
Часть 3 — HP Smart Zero Core 4.4
HP Smart Zero Core 4.4 Administrator Guide
В данный момент у пользователей установлено примерно 100 шт. t5565/t5570/t510. На все тонкие клиенты установлена ОС HP Smart Zero Core 4.4. Все тонкие клиенты используются для подключения к RDSH Windows Server 2008 R2.
Установка
Последнюю версию Smart Zero Core Image Z6X44017 Rev. 1(13 Jun 2014) можно скачать здесь.
1 — Создайте установочную флешку.
2 — Подключите флешку и перезагрузите тонкий клиент.
3 — После перезагрузки тонкий клиент проверит наличие сервера HP Automatic Update, загрузит профиль и обновления, а если его нету запустит wizard и предложит вам выбрать протокол и хост.
Для каждого протокола предлагается свой стиль оформления. После выборе RDP вы будете наблюдать следующий рабочий стол.
Установка обновлений
Рекомендую обновить клиент который будет использоваться:
1 — FreeRDP Client 1.1 Rev. 1(26 Mar 2014).
2 — VMware Horizon Client 3.2 1(15 Dec 2014).
3 — Citrix Receiver with True Graphics 13.1.3 Rev.1(30 Apr 2015).
4 — Вместе с новыми пакетами необходимо установить MultiMedia Service Pack 1.0.
Обновления также можно скачать здесь. На этом ftp сервере можно обнаружить тестовые сборки пакетов.
Распакуйте архив и разместите xar файл в каталог с пакетами на сервер HP Automatic Update. Чтобы установить пакет на все тонкие клиенты используйте каталог auto-update\Packages.
Для установки пакета только на тонкие клиенты t510 используйте каталог auto-update\t510\Packages, с другими моделями поступайте аналогично.
После перезагрузки, начнется скачивание и установка.
Рекомендации по профилю
1 — Если на хосте работает служба Windows Audio, при отсутствии гарнитуры тонкий клиент будет воспроизводить звук используя внутренний динамик. Рекомендую звук отключить, при необходимости пользователи смогут его включить.
За отключение звука отвечают ключи root/Audio/OutputMute и root/Audio/RecordMute.
2 — Пользователи блокируются после первого ввода не правильного пароля, это происходит если используется шифрование SSL(TLS 1.0). Когда используется RDP Security Layer таких проблем с блокировкой нет.
Чтобы принудительно установить шифрование RDP Security Layer, необходимо воспользоваться справкой по freerdp клиенту.
Добавьте аргумент /sec:rdp в следующий ключ root/ConnectionType/freerdp/connections/{UUID}/ExtraArgs.
Более подробно про уровни шифрования можно прочитать здесь.
3 — Проверку сертификата хост сервера можно отключить, за это отвечает ключ root/ConnectionType/freerdp/connections/{UUID}/certificateCheck.
4 — Настройте время, за это отвечает ветка root/time.
5 — Установите пароль администратора, за это отвечает ключ root/users/root/password.
6 — Настройте VNC сервер, за это отвечает ветка root/vncserver.
7 — Укажите домен по умолчанию, за это отвечает root/zero-login/defaultCredentials/domain.
Часть 4 — HP Smart Zero Core 5.2
HP ThinPro 5.2 Administrator Guide
Установка
Скачать образ T6X52011 Rev.1(5 Jun 2015) можно здесь.
Вы можете записать установочную флешку, или воспользоваться сервером HP Automatic Update.
Обновление
Используя HP Automatic Update чтобы обновить ОС 4.4 до версии 5.x, необходимо установить пакет ThinPro Upgrade to 5.x Prerequisite Thinstate Addon for 4.x. Если вы не установите Prerequisite Addon, тонкий клиент перестанет загружаться и ОС придется восстанавливать используя флешку.
Разместите образ T6X52011.dd.gz в папке auto-update\Images чтобы обновить все тонкие клиенты, или в папку auto-update\t510\Images чтобы обновить только t510, с другими моделями поступайте аналогично.
Если вы хотите обновить только один тонкий клиент
1 — Создайте индивидуальный профиль, и в ветке root/auto-update настройте следующие ключи:
ManualUpdate = «1».
ServerURL = «server-name-or-ip:18287».
path = «auto-update/Custom/Z6X52011».
protocol = «http».
2 — В каталоге auto-update/Custom/Z6X52011 создайте необходимую структуру каталогов и файлов:
Каталог Image с образом ОС.
Каталог Packages с апдейтами.
Каталог PersistentProfile и файл profile.xml.
файл index.txt разместите в корне.
Перезагрузите тонкий клиент, новый образ будет загружен и установлен.
Оформление HP Smart Zero Core 5.х для RDP.
Отличия от 4.4
Это только мои наблюдения:
1 — 5.х загружается заметно дольше.
2 — Изменили стиль оформления, добавили «панель задач».
3 — Используя переходник DVi-HDMI я не могу подключить HDMI монитор если установлена ОС 4.4, в 5.2 это исправили.
4 — Если кликнуть на кнопку питания, в случаи 4.4 и протокола RDP выполняется дисконнект сессии. В случаи 5.2 при клике на кнопку питания тонкий клиенты выключится, если вам нужно работать с несколькими учетными записями, нововведение очень не удобно.
Если вы решите вернуть версию 4.4
Скопируйте образ 44017 обратно в папку Image, после перезагрузки начнется скачивание и установка.
Часть 5 — HP Velocity
Если тонкие клиенты установлены в удаленных офисах и каналы связи не отличаются качеством, HP идет к вам на помощь и предлагает инструмент HP Velocity.
HP Velocity Technology Overview
HP Velocity Version 2.1.0 Administrator Guide
В маркетинговых роликах HP Velocity выглядит очень интересно.
Установка
1 — Обновите пакет Velocity на тонких клиентах.
2 — Установите Velocity на хост машины.
Пакет с обновлением 2.1 для тонкого клиента можно скачать здесь, а серверную част для терминального сервера или виртуальных десктопов здесь. В составе пакета для хостов включены msi дистрибутивы для х86 и х64, документация, и adm шаблон для групповых политик.
После установки, на хосте вы сможете запустить HP Velocity Management.
Практика
На предприятии где я работаю, тонкие клиенты подключаются к серверам на одной площадке, плохие каналы связи по умолчанию отсутствуют. HP Velocity я установил на все терминальные сервера с параметрами по умолчанию, шаблоны для групповых политик не использую.
Вопрос: Зачем я установил HP Velocity?
Ответ: Используя HP Velocity Management, на закладке Flow Information можно наблюдать загрузку процессора тонкого клиента.
Часть 6 — USB Printer
Считаю что локальный принтер это зло для службы поддержки и лишние расходы для бизнеса.
Медленно но уверено начали менять на сетевые принтера.
Очень я не хотел подключать принтера к тонким клиентам, но желание заменить старые ПК победило.
В качестве службы печати используется Common UNIX Printing System.
Принтера которые я смог подключить: HP 1022, HP 1102, HP 1160, HP 2015, Samsung 2171N.
Принтера которые отказались печатать: HP 1320, Samsung SCX-4200, Canon LBP 2900/3000.
Подключение принтера
Для подключения USB принтера к тонкому клиенту необходимо установить пакет CUPS Printer Support .
HP Smart Zero Core 5.х содержит данный пакет по умолчанию.
После установки пакета CUPS, в меню Additional Configuration появится новый пункт Printers.
Запустите wizard и добавьте ваш принтер.
Перенаправление принтера (High-level redirection)
По умолчанию перенаправление включено. В случаи необходимости отключить перенаправление используйте ключ root/ConnectionType/freerdp/connections/{UUID}/printerMapping.
После соединение с вашим хостом, вы обнаружите в устройствах принтер.
Обратите внимание на драйвер перенаправленного принтера. Рекомендуется название драйвера задать в настройках принтера, драйвер должен быть заранее установлен на хост.
Принт сервер
Чтобы несколько пользователей могли печатать на один принтер, необходимо настроить принт сервер на тонком клиенте.
Откройте настройки принт сервера и разрешите печать из интернета.
Перезагрузите ваш тонкий клиент и откройте веб управление службой печати, http ://server-name-or-ip:631.
Подключение CUPS принтера к Windows
Для просмотра списка расшаренных принтеров перейдите по ссылке http ://server-name-or-ip:631/printers.
1 — Установите на Windows машину компонент Internet Printing Client.
2 — Подключите сетевой принтер используя адрес принтера http ://server-name-or-ip:631/printers/printername.
Если принтер не хочет печатать с родным драйвером, попробуйте подсунуть ему драйвер «MS Publisher Imagesetter».
Часть 7 — Customizing
В руководстве к версии 4.4 на странице 48 можно найти раздел посвященный оформлению рабочего стола, а для версии 5.2 на странице 73. Лично я нечего не понял, лед тронулся после прочтение этой публикации.
Стиль оформления состоит из 3х файлов: bgConfig.rtf, zero-login.rtf, desktop.qss. Конфигурационные файлы находятся здесь /etc/hptc-zero-login/styles/, данный каталог содержит несколько стилей оформления: default, firefox, freerdp, rdesktop, view, xen. Скопируйте себе эти файлы, так вам будет проще разобраться. Переключитесь в режим администратора, запустите Х терминал, и скопируйте содержимое на флешку.
Я решил добавить на рабочий стол логотип компании и контакты службы поддержки
1 — Изменил файл bgConfig.rtf из стиля freerdp.
bgConfig.rtf
global {
color: 515151;
}
text {
name: Remote Desktop text;
text: Remote Desktop;
color: white;
font: DejaVuSans-ExtraLight;
max-height: 200;
max-width: 600;
alignment: left vcenter;
font-size: 200;
position: 100,100;
}
text {
name: Support text;
text: Support 911;
color: white;
font: DejaVuSans-ExtraLight;
font-size: 20;
max-width: 70%;
position: 0%,100%;
alignment: left bottom;
padding: 20;
}
image {
name: Logo;
source: /etc/hptc-zero-login/styles/demo/logo.png;
size: 200×50;
proportional: true;
position: 100%,100%;
alignment: right bottom;
padding: 20;
}
2 — Сделал логотип с прозрачным фоном в формате png.
3 — Создал новый профиль для тонких клиентов, в профиль я импортировал логотип и файлы стиля, новые файлы сохранятся на тонком клиенте в каталоге etc/hptc-zero-login/styles/demo/. В ключе реестра root/zero-login/styledir/freerdp, необходимо указать каталог нового стиля.
После применения нового профиль получилось вот что. Контакты суппорта слева, логотип справа.
Если вы не желаете останавливаться на достигнутом, и хотите установит дополнительное ПО на тонкий клиент.
Используйте Х терминал и команду «sudo mount -o rw,remount /» чтобы перемонтировать файловую систему с правами на запись, затем используйте dpkg или apt-get для установки пакетов.
Для работы apt-get необходимо отредактировать файл /etc/apt/sources.list, по умолчанию репозитории пакетов закомментированы.
Файл sources.list приобретет следующий вид:
deb us.archive.ubuntu.com/ubuntu precise main restricted universe multiverse
deb us.archive.ubuntu.com/ubuntu precise-updates main restricted universe multiverse
deb ports.ubuntu.com/ubuntu-ports precise main restricted universe multiverse
deb ports.ubuntu.com/ubuntu-ports precise-updates main restricted universe multiverse
Чтобы настроить работу apt-get через прокси сервер, создайте файл /etc/apt/apt.conf с следующим содержимым:
Acquire::http::Proxy «http:// server-name-or-ip:port»;
Пример установки Midnight Commander:
sudo apt-get update
sudo apt-get install mc
Часть 8 — Smart Cards Redirection over RDP
Страница 18 (руководство 4.4) и страница 44 (руководство 5.2)
By default, smart cards will be redirected using high-level redirection, allowing them to be used to log in to the session and other remote applications.
This technology requires drivers for the smart card reader driver to be installed on the client. By default, the CCID and Gemalto drivers are installed, which adds support for the majority of smart card readers available. Additional drivers can be installed by adding them to /usr/lib/pkcs11/.
Обещали работу из коробки, но на практике нечего у меня не работало
Долго у меня не получалось настроить проброс токена «BIFIT iBank 2 Key», пока я не добавил аргумент /smartcard:»*» в ключ root/ConnectionType/freerdp/connections/{UUID}/ExtraArgs. Ключ приобрел следующий вид /sec:rdp /smartcard:»*».
Токен начал работать с банком №1, с банком №2 работать не захотел
Диагностика
За работу смарт карт отвечает служба pcscd, в состав SmartOS 4.4 и 5.2 включена версия 1.7.4.
Чтобы проверить работу токена необходимо:
1 — остановить службу /etc/init.d/pcscd stop
2 — запустите службу в режиме отладки pcscd -d -f
После подключения токена вы увидите процесс его загрузки.
По какой то причине, токен периодически не загружается, выявить закономерность у меня не получилось.
Установка драйверов
Токен для банка №2 и №3 не определяется в системе пока не установлены драйвера.
Драйвер необходимо скачать на сайте банка или портале iBank2.RU, на момент написания статьи для скачивания была доступна версия 1.08.
пример:
sudo mount -o rw,remount /
sudo apt-get remove pcscd
sudo apt-get update
sudo iBank2Key-Driver-Linux-x86-1.08.sh
Без предварительного удаления службы pcscd, токены не будут определяются. Также чтобы подстраховаться я удалял каталоги /usr/lib/pcsc/ и /usr/lib/pkcs11/.
Часть 9 — Performance
В тонкие клиенты 5565/5570 установлен процессор VIA Nano u3500 (1 GHz), в t510 установлен процессор VIA Eden X2 U4200 (1 GHz, 2 cores).
Подключение к RDSH Windows Server 2008 R2
На сервере активен протокол RemoteFX, про RemoteFX я писал здесь.
Конфигурация RemoteFX:
Screen capture rate = Highest (best quality).
Screen Image Quality = Highest (best quality).
VIA Nano u3500 заметно уступает VIA Eden X2 U4200, это хорошо видно при работе в Autocad LT 2012.
Более подробно про Autocad LT 2012
Autocad LT 2012 необходим для редактирования плоских фигур.
Некоторые пользователи работают на терминальном сервере ws2008R2 и используют RemoteApp Autocad LT 2012.
Autocad LT 2012 установлен на отдельный виртуальный сервер ws2012R2, в этом случаи можно запустить две копии приложения.
Чтобы создать нагрузку на сервер и клиент, я начинал рисовать круг и менял ему радиус по горизонтали несколько минут.
Чтобы снизить нагрузку с процессора сервера и клиента можно и нужно отключить RDP Compression.
В ключе root/ConnectionType/freerdp/connections/{UUID}/compression установите значение 0.
Отключение сжатия дает заметный эффект, но про снижение нагрузки на процессор сервера говорить рано.
Подключение к RDSH Windows Server 2012 R2
VIA Nano u3500 приятно удивил, в сравнении с подключением к ws2008R2, загрузка процессора тонкого клиента заметно ниже.
При работе в Autocad LT 2012 все плавно и быстро в отличии от ws2008R2.
Часть 10 — Стоимость
t510 и более ранние модели HP больше не отгружает.
t520 J9A27EA HP ThinPro
320$ — Россия
346$ — Украина
362$ — Молдова
t520 G9F08AA Windows Embedded Standard 7
425$ — Россия
433$ — Украина
Это розничная цена за 1 шт, и цена не самая интересная.
Чтобы получить интересную цену от HP, нужен проект, мне озвучивали условие в 60 шт.
Если вы не тяните на проект или просто хотите сэкономить, можно рассмотреть вариант покупки БУ тонких клиентов t5570/t510, стоимость БУ t510 примерно 120$ за 1 шт.
Предприятие на котором я работаю больше половины тонких клиентов приобрело БУ. Комплект поставки минимальный, тонкий клиент и блок питания. Отдельно пришлось покупать адаптеры DVI-VGA. Один тонкий клиент ремонтировали по гарантии.
Заключение
Спустя 2 года, тонкими клиентами HP я доволен, плюсов больше чем минусов.
Модельный ряд меняется медленно, не спеша в течении нескольких лет можно заменить проблемные ПК, и в итоге получится одинаковый парк устройств.
Огорчает ценовая политика, трудно объяснить руководству необходимость покупки тонких клиентов по цене, сопоставимой с ценой некоторых ноутбуков.
Это отзыв об WTware. Описываю свой опыт внедрения тонких клиентов на базе WTware. Получился интересный результат.
Сайт проекта: https://wtware.ru/
Документация: https://wtware.ru/docs5/docs.html
Содержание
Немного мат.части
Тонкий клиент (англ. thin client) в компьютерных технологиях — бездисковый компьютер-клиент в сетях с клиент-серверной или терминальной архитектурой. Хабр ©
Продукт WTware позволяет сделать из обычного терминального сервера, сервер загрузки тонких клиентов. То есть, если очень грубо сказать, то наш пользователь при загрузке сразу попадает в свою термильную сессию. Способ довольно интересный. Расскажу про плюсы и минусы.
Плюсы и минусы
Основные преимущества:
- Очень легко настроить;
- Огромная поддержка устройств, даже малинки и апельсинки;
- Централизованная работа пользователей в одном месте;
- Если надо, то работу пользователя очень легко организовать удаленно. У нашего любимого пользователя его рабочее окружение всегда под рукой, хоть с телефона;
- Экономия на железе под рабочие станции;
- Экономия на обслуживание рабочих станций;
- Экономия на лицензия ОС, офиса, etc;
Основные недостатки:
- Требуется подбирать оргтехнику с поддержкой серверной ОС;
- Становиться труднее перезагрузить сервер в рабочее время, если требуется;
- Требуется повышенная отказоустойчивость нашего сервер. Если он упал, то падает вообще вся работа;
- Пользователь не париться на счёт места и того, что качает. Либо закручивать гайки, либо постоянно следить за действиями пользователей. (Это решаемо);
- Повышает стоимость обслуживания серверной архитектуры;
- Это, конечно, каприз, но я отмечу. Не работают приложения для тонкой настройки периферийной части рабочей станции. У нас не взлетело Logitec G HUB, что очень расстроило пользователя;
- Это, конечно, каприз, но я отмечу. При настройке и вводе в эксплуатацию надо тонко настроить: разрешения, звук, usb, принтеры, ЭЦП;
Некоторые радости:
- Невысокая стоимость лицензий;
- Настроил и забыл;
- Хорошая поддержка продукта;
- Обширная документация;
- Почти все проблемы решаемы;
- Отечественный продукт;
Наш опыт
Хочу отметить, что по началу были трудности из-за того, что мы внедряли данный продукт уже в рабочей компании, которая несколько лет работала на обычных десктопах/моноблоках. Из-за это был ряд трудней. Как показывает практика, если пользователь не особо понимает, что происходит и ломают привычный рабочий уклад, то могут возникнуть недопонимания. Но инициатива была со стороны руководства. Поэтому все вопросы оказались решаемы. Но это так, ремарка.
Было принято решение, что сервер терминалов + wtware будет расположен на наших облачных мощностях. То есть мы подняли WTware через vpn (L2TP + IpSec). Тем самым удешевили процесс внедрения, повысили отказоустойчивость, имеем запас мощностей, пользователь получил возможность работать из любой точки мира. Примерная схема работы конечного продукта ниже.
Этап №1 сервер, vpn, перелив файлов
Ну начали с того, что был поднят терминальный сервер с wtware (если тема будет интересна опишу технически), с картинками и всеми примеры конфигураций. Между клиентским микротиком и микротиком в дата центре подняли l2tp-vpn.
Настроили dhcp на клиентском микротике на загрузку по сети на наш сервер за пределами сети клиента;
Пока пользователи работали в обычном режиме заходили по rdp на сервер и переливали их файлы. Помним, что пользовательские данные это святое.
Этап №2 переключение контрольной группы пользователей
После установки определенного ПО, которое необходимо пользователем для работы, перелива файлов мы были готовы в тестовом режиме запустить часть пользователей и собрать обратную связь.
Этап №3 отладка работы приложений
После переключения контрольной группы мы получили обратную связь. И начали отладку приложений. Были небольшие проблемы с разрешением и звуком. Пришлось немного повозиться с производительностью некоторых приложений (Битрикс24, outlook, etc);
Этап №4 вынимаем диски
Ну и конечным этапом стало полное вынимание дисков из рабочих станций пользователей.
Подводя итоги
Клиент получил рабочее окружение доступное 99% времени, снизил стоимость обслуживания рабочих станций пользователей. Есть, конечно, минусы, например, облака вещь тоже не бесплатная, но это уже ситуативная вещь.
Спустя три месяца могу заявить, что продукт wtware очень годный. Чувствуется, что сделан админами для админов. Если у вас стоит вопрос, стоит ли его внедрять? То однозначный ответ, что стоит попробовать. В тестовом режиме wtware распространяется бесплатно.
Если у вас возникли вопросы — с радостью отвечу в комментах.
Просмотры: 2 643
Если мой материал был полезен, то можете угостить меня кофе ☕️
Концепция тонких терминальных клиентов не нова. Действительно, зачем оборудовать рабочее место пользователя относительно производительным железом, приобретать лицензию на клиентскую ОС, устанавливать прикладное ПО, антивирус, обеспечивать должный уровень защиты рабочей станции и данных, если пользователь все свои операции выполняет на терминальном сервере, по сути, не используя локальные ресурсы (кроме периферийных устройств). В этой статье проведем краткий обзор отечественного решения для организации тонких терминальных клиентов – WTware.
WTware – это оптимизированный дистрибутив на базе Linux, включающий в себя все необходимые драйверы и клиенты для подключения к терминальным серверам Windows (rdesktop), Linux (xrdp), Hyper-V VDI, Mac Terminal Server.
Содержание:
- Основные преимущества WTware:
- Варианты загрузки клиента WTware
- Установка серверной части WTware
- Настройка параметров DHCP сервера
- Настройка параметров терминалов WTWare
- Настройка и работа с клиентом WTWare
- Графический конфигуратор WTware
- Лицензирование WTWare и цены
- Выводы
Основные преимущества WTware:
- Низкие требования к аппаратной части. WTware можно запустить практически на любом компьютере с как минимум 48 Мб RAM (для оптимальной работы потребуется 64 Мб). Для Raspberry Pi 2 существует бесплатная версия WTware (http://winterminal.com/ru/)
- Для запуска клиента не обязательно требуется жесткий диск. Поддерживается как сетевая загрузка, так и загрузка с любого носителя
- Простота установки и настройки клиентской части, не требует от администратора знаний по администрированию Linux
- Централизованное управление конфигурацией терминалов
- Поддержка широкого спектра оборудования. Возможность проброса в терминальную сессию локальных принтеров, сканеров штрих-кодов и другой периферии
- Поддержка удаленного подключения к консоли терминала службами техподдержки (через VNC)
- WTware – российский продукт, а это значит, что вся документация и техподдержка также осуществляется на русском языке.
- Возможность одновременного подключения к 4 терминальным серверам (переключение между сеансами с помощью сочетаний Win+1 – Win+ 4 )
Рассмотрим процедуру «быстрого» старта по использованию решения WTware для организации рабочего места с тонким терминальным клиентом в типовой офисной сети.
Варианты загрузки клиента WTware
Прежде, чем приступить к настройке и разворачиванию WTware, нужно выбрать предпочтительный способ загрузки тонких клиентов. WTware может загрузиться практически с чего угодно, будь то:
- Жесткий диск
- CD-Rom
- Флешка
- Дискета
- Сетевая карта с BootROM
В большинстве случаев предпочтительно использовать сетевую загрузку, т.к. это значительно облегчает разворачивание и централизованное управление клиентами. Именно такой вариант загрузки мы будем рассматривать.
Примечание. В том случае, если требуется подключить к терминалу единичных клиентов из удаленных офисов, подключенных по медленным каналам связи, для них можно использовать загрузку с физических носителей. В том случае, если в таких офисах есть несколько клиентов и любой сервер, стоит все-таки рассмотреть разворачивание на нем собственного TFTP сервера WTware.
Также отметим, что на сайте производителя указывается возможность загрузки терминалов по HTTP, которая должна уменьшить нагрузку на TFTP при большом количестве клиентов (более 300) и улучшить загрузку на медленных и ненадежных каналах связи.
Процесс загрузки WTware
Чтобы запустить клиент WTware на компьютере пользователя, нужно:
- Загрузить бинарные файлы дистрибутива с сервера (по TFTP) или локального носителя
- Получить сетевые настройки с DHCP сервера или из локальных конфигурационных файлов
- Получить конфигурационный файл с сервера (по TFTP) или загрузить его с диска
Установка серверной части WTware
Начнем с установки серверной части системы WTware. В нашем случае было принято решение установить ее на DHCP сервере, работающего под управлением ОС Windows Server 2012 R2.
Качаем дистрибутив с сайта разработчика – на момент написания статьи версия wtware.5.4.8.ru.exe (226 Мб) и запускаем установку.
Указываем путь для установки конфигурационных файлов (по-умолчанию, C:\ProgramData\WTware) и самой программы (C:\Program Files (x86)\WTware).
Далее предлагается выбрать устанавливаемые службы WTware:
- Служба WTFTP – необходима для загрузки по сети, ведет протокол обращений и позволяет диагностировать проблемы
- Служба WTUSBIP – служба WTware USBIP Initiator используется для автоматического подключения USB устройств терминала
- Службы WTDHCP – назначает терминалам IP адреса, необходима для загрузки по сети
Т.к. мы будем использовать уже имеющийся собственный DHCP сервер, поэтому службу WTDHCP устанавливать не будем. Настройка MS DHCP сервера описана в этом разделе.
Совет. В том случае, если в вашей сети еще не развернут DHCP-сервер, имеет смысл воспользоваться встроенным DHCP серверов WTware (WTDHCP). Использование WTDHCP позволяет быстро развернуть и запустить DHCP сервис для небольшой сети. Настройка службы WTDHCP выполняется при инсталляции и в дальнейшем с помощью графической утилиты – конфигуратора WTware (win32.exe), возможности которого рассмотрены в разделе ниже.
Примечание. В том случае, если ваша сеть разбита на сегменты, в каждом из которых будут присутствовать тонкие клиенты, нет необходимости поднимать в каждом собственный DHCP сервер. Один сервер может обслуживать большое количество зон (подсетей). Пересылка DHCP пакетов между сегментами возможна через DHCP relay.
Далее будет предложено указать адрес терминального сервера, к которому будут подключаться клиенты (в дальнейшем его можно изменить, или указать несколько адресов).
Запускаем установку.
После установки WTWare в системе появятся две дополнительные службы:
- WTware TFTP – исполняемый файл C:\Program Files (x86)\WTware\Bin\wtftp.exe – использует локальный порт UDP/69
- WTware USBIP Initiator — C:\Program Files (x86)\WTware\Bin\wtusbip.exe – порт TCP/780
Настройка параметров DHCP сервера
Предполагается, что в нашей сети уже развернут и используется DHCP сервер на любой серверной редакции Windows. Запускаем консоль управления DHCP (dhcpmgmt.msc) и находим интересующую нас DHCP зону (в нашем случае имя зоны – Managers). Нам нужно прописать дополнительные настройки зоны, необходимые для сетевой загрузки бездисковых терминалов.
В настройках зоны нужно дополнительно указать два параметра:
- 066 (Boot Server Host Name) – здесь указывается ip адрес сервера, на котором будет работать TFTP сервер WTware (у нас он совпадает с адресом DHCP сервера)
- 067 (Bootfile Name) – здесь указывается файл, с которого должна начаться загрузка терминала. Для загрузки с помощью PXE (если BootROM встроен в вашу сетевую карту или материнскую плату производителем) значение параметра задаем 5.4.8/wtware.pxe . Файл wtware.pxe находится в подкаталоге 5.4.8 корня tftp сервера (по умолчанию корень tftp расположен в каталоге C:\Program Files (x86)\WTware\TFTPDROOT\)
Примечание. Для загрузчика Etherboot (при использовании эмулятора BootROM) в качестве значения опции 067 нужно указать другой файл — 5.4.8/wtshell.nbi
После настройки этих двух параметров DHCP сервер предоставляет клиенту всю необходимую информацию для загрузки по сети.
Примечание. В том случае, если терминал WTWare будет устанавливаться на флешку или локальный диск, можно запретить пользователям менять конфигурацию своей станции. Для этого нужно защитить паролем меню настройки WTware Setup. Для этого можно воспользоваться еще одной опцией DHCP зоны — 018 (Extensions Path). В этом поле указывается хэш пароля, полученный с помощью специальной утилиты. Цель указания хэша – запрет передачи пароля в открытом виде в DHCP ответе.
Настройка параметров терминалов WTWare
Настройка терминальных клиентов WTWare, использующих сетевую загрузку выполняется с помощью конфигурационных файлов. Конфигурация клиентов формируется из трех файлов:
- Общесистемного конфигурационного файла all.wtc (C:\Program Files (x86)\WTware\TFTPDROOT\Everyone)
- Персонального конфигурационного файла config.wtc (хранится в персональном каталоге каждого клиента, идентифицируемого по MAC адресу, к примеру (C:\Program Files (x86)\WTware\TFTPDROOT\Terminals\00.50.56.BB.AD.80)
- Подключаемых файлов, определенных в файле list.wtc
В файле all.wtc нужно указать параметры, одинаковые для всех терминалов.
К примеру, можно задать адреса терминальных серверов, доступных для подключения, указав их IP адрес
server=10.24.181.44
или DNS имя сервера (при условии, что клиенты через DHCP получают адрес сервера имен в сети)
server= msk-term-1c.winitpro.ru
Или можно разрешить пользователю самому указывать имя терминального сервера, к которому нужно подключиться.
server=--new—
Примечание. По умолчанию, на клиенте запускается RDP клиент, но есть возможность запуска на тонком клиенте браузера Google Chrome. В этом случае на клиенте должно как минимум быть 512 Мб ОЗУ, а в конфигурационном файле указаны следующие строки (также мы зададим адрес прокси-сервера для браузера):
application = chrome
chrome_proxy=192.168.1.23:3128
Чтобы на терминальном сервере вместо рабочего стола сразу было открыто определенное приложение, нужно в конфигурационном файле указать параметр shell:
К примеру, для запуска клиента Directum нужно указать:
shell = C:\Program Files (x86)\DIRECTUM Company\DIRECTUM 5.1\SBRte.exe -S=msk-drc01 -D=DIRECTUMDB
Индивидуальные конфигурационные файлы каждого клиента хранятся в каталоге C:\Program Files (x86)\WTware\TFTPDROOT\Terminals\. Для каждого клиента создается персональный каталог с его MAC адресом. Именно в этом каталоге клиент будет искать файл config.wtc со своей конфигурацией.
На сайте разработчика представлены более чем подробные инструкции по этим и другим параметрами конфигурационных файлов.
Настройка и работа с клиентом WTWare
Итак, настройка серверной части закончена, перейдем к настройке клиента. В BIOS/ UEFI компьютера, который будет использоваться в качестве тонкого клиента в разделе, в котором настраивается порядок перебора загрузочных устройств, указываем высший приоритет сетевой загрузке с PXE (Network boot, LAN boot).
Сохраняем изменения и перезагружаем систему. Если на стороне сервера WTware и DHCP все настроено правильно, клиент должен получить IP адрес от DHCP сервера и по настроенным нами параметрам выполнить сетевую загрузка с указанного tftp сервера.
При первом запуске можно выполнить настройку терминала (F10 – мастер настройки терминала).
Нам будет предложено выбрать драйвер видеокарты и другие параметры отображения. Предпочтительные настройки можно сохранить в персональный конфигурационный файл клиента на сервере. В этом случае в следующий раз не нужно будет вручную править настройки отображения.
Для этого на TFTP сервере в каталоге C:\Program Files (x86)\WTware\TFTPDROOT\Terminals\00.50.56.BB.AD.80 (каталог с именем, содержащим MAC адрес клиента) создадим файл config.wtc, в котором будут указаны настройки клиента:
video= VESA(F)
bpp= 16
display = 800x600
При следующей загрузке терминал автоматически загрузится с этими параметрами.
В том случае, если адрес терминального сервера указан в конфигурационном файле, клиент WTWare автоматически инициирует RDP соединение. Осталось авторизоваться на сервере и перед нами откроется его рабочий стол.
Если конфигурационный файл предоставляет возможность самостоятельного выбора терминального сервера, клиент может указать его вручную.
Для диагностики работы клиентов, на каждом терминале функционирует маленький веб-сервер. Чтобы открыть диагностическую страничку, достаточно набрать ip адрес клиента в браузере. На открывшейся веб странице можно посмотреть текущие настройки клиента, состояние его компонентов, логи, кнопки выключения/перезагрузки клиента и т.д.
По-умолчанию доступ к этой странице не ограничен. Чтобы разрешить подключаться к веб серверу только с определенных адресов, в конфигурационном файле нужно указать строку:
httpd = 10.10.1.55, 10.10.1.56
Графический конфигуратор WTware
Помимо управления через текстовые конфигурационные файлы, есть возможность управления настройками системы и терминалов клиентов из отдельного графического приложения – конфигуратора WTware (C:\Program Files (x86)\WTware\Bin\ win32.exe), позволяющего более удобно работать с текстовыми конфиг файлами.
Для чего можно использовать данную утилиту:
- Управление общими настройками клиентами (файл all.wtc)
- Управление персональными настройками клиентов. Так например, утилита может сохранить в конфигурационный файл config.wtc текущие настройки видеорежима на клиенте (не требуется вручную править файл).
- Возможность удобного просмотра, добавления, удаления всех возможных параметров конфигурационных файлов.
- Просмотр логов клиентов и подключение к их консоли
- Ведение шаблонов с типовыми параметрами терминалов
- Создания экранов и соединений к терминальным серверам
- Управление лицензиями
- Управление настройками встроенного DHCP сервера
- Создание загрузочных CD/ USB носителей для клиентских станций
- Создание загрузочной CD карты для Raspberry Pi
В подавляющем большинстве случаев использование конфигуратора предпочтительнее ручной правки конфигурационных файлов, т.к. упрощается навигация по структуре конфигурационных файлов и уменьшается вероятность ошибки.
Лицензирование WTWare и цены
Лицензии WTWare привязываются к MAC адресу сетевой платы компьютера. Все лицензии нужно записать на сервер в файл wtware.lic.
Стоимость лицензии WTWare на одно рабочее место зависит от количества клиентов и начинается с 1000 рублей (при количестве клиентов от 1 до 9) и заканчиваются 350 рублями (при приобретении более 100 лицензий).
Выводы
WTware оставляет впечатление качественного и добротного продукта, который позволяет без существенных затрат развернуть тонких терминальных клиентов. Решение от WTware подкупает своей простотой и одновременной гибкостью с точки зрения централизованного администрирования и разворачивания. А невысокая стоимость лицензий практически сразу оставляет за бортом всех конкурентов.
Из бесплатных аналогов WTWare для организации тонкого клиента, можно вспомнить Thinstation, но последний существенно проигрывает в управляемости и развернуть его гораздо сложнее.