The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Терминальное решение на базе Ltsp и Windows 2003 Terminal Server (ltsp windows xterm diskless)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: ltsp, windows, xterm, diskless,  (найти похожие документы)
From: Vyacheslav Khudyakov Date: Mon, 7 Nov 2010 17:02:14 +0000 (UTC) Subject: Терминальное решение на базе Ltsp и Windows 2003 Terminal Server Оригинал: http://www.linuxetc.ru/?p=6 О терминальном решении Говорят, что история развивается по спирали. Другие же утверждают что она вовсе движется по кругу. Так или иначе, но история терминальных решений довольна любопытна -- IT технологии, казалось, окончательно ушли от меинфреймов в сторону персональных компьютеров в начале девяностых, но вот теперь опять возвращаются к ним. Через 15 лет. Терминальные решения имеют множество недостатков перед архитектурой ПК. Это и меньшая гибкость, и жесткая зависимость от центрального сервера, повышенные требования к надежности сети, обязательна необходимость дублирования основных сервисов. Но в тоже время, они обеспечивают повышенную безопасность, простоту администрирования, высокий уровень контроля системы. А в ряде случаев позволяют и существенно экономить на ПО. Рассматриваемое решение комбинирует использование проприетарного и открытого программного обеспечения. Использование linux в качестве терминальных клиентов позволяет существенно сэкономить на программном обеспечении и повысить надежность решения. Ни для кого не секрет что решения на базе unix являются более надежными чем на базе windows. В тоже время, использование в качестве серверной операционной системы Windows 2003 TS избавляет нас от сложностей с совместимостью программного обеспечения, обучением пользователей и пр. -- ваши пользователи работают в родной для них среде, даже не догадываясь что на их терминальных машинах запущен линукс. Краткая схема используемого решения Решение основывается на трех составляющих: * Терминальный сервер с Windows 2003 Terminal Server * Linux сервер на котором запущены dhcp, tftp, nfs и хранится образ системы ltsp * Бездисковые терминальны станции с возможностью загрузки по сети Я не буду подробно останавливаться на особенностях настройки Windows 2003 Terminal Server. По данной тематике написано немало статей, да и сама настройка довольно тривиальна. Рекомендую лишь внимательно отнестись к аппаратному обеспечению -- хот-свап блоки питания, оперативная память с ECC выбирается из расчета -- не меньше 512 Мб оперативной памяти под систему и 64 Мб оперативной памяти на каждого пользователя обслуживаемого сервером, raid массивы с быстрыми дисками. Также обращаю ваше внимание на особенности лицензирования программного обеспечения Майкрософт -- версия Windows 2003 server standart edition допускает использование от 1-4 процессоров и не более 4 Гб оперативной памяти. Версия Enterprise Edition поддерживает до 64 Гб в 32-битной версии, и до 2 Тб в 64х. Линукс-часть состоит из линукс сервера, на котором запущены демоны dhcp, nfs, tftp и хранится загружаемый терминалом образ линукса. Впринципе, его можно создать и самостоятельно, но гораздо удобнее использовать готовую систему -- [9]Linux Terminal Server Project . Терминальный клиент загружается по сети: получает по dhcp ip адрес, за гружает по tftp ядро линукс, монтирует по nfs образ корневой файловой системы, загружает ramdisk, запускает графическую подсистему xwindow и стартует терминальный клиент rdesktop, с помощью которого подсоединяется к windows 2003 terminal server. Настройка Linux сервера I. DHCP Для загрузки ваших клиентских станций по сети необходимо наличие DHCP сервера. DHCP сервер выделяет ip адреса для терминалов, передает параметры загрузки и сообщает путь к образу ядра ОС. Рекомендуется, чтобы этим dhcp сервером был сервер linux или unix. В вашей сети могут существовать другие DHCP сервера, например от adsl роутера или какого-либо сетевого устройства. Чтобы исключить конфликт DHCP серверов, рекомендую оставить один главный DHCP сервер. Однако, если это невозможно, то предется цеплять ваш новый DHCP сервер на альтернативный порт, например 1067 и передавать загрузчику в параметрах ядра новый порт. В такой схеме раздачей ip адресов будет заниматься один DHCP сервер, а передачей ядра и параметров загрузки -- другой. Эта схема возможна, но неудобна, так что в общем случае рекомендую оставить один DHCP сервер. Инсталируем DHCP сервер. Скачиваем исходники с http://www.isc.org/index.pl?/sw/dhcp/ , конфигурируем, собираем и ставим. Переходим к файлу конфигурации, /etc/dhcp/dhcpd.conf # Глобальные настройки not authoritative; default-lease-time 28800; # 8 часов max-lease-time 86400; # 1 день use-host-decl-names on; # Задавать hostname клиента ddns-update-style none; # Сособ обновления динамического DNS # Сетевые настройки option subnet-mask 255.255.255.0; option broadcast-address 192.168.0.255; option routers 192.168.0.99; # Шлюз по умолчанию option domain-name-servers 192.168.0.99; # Наш сервер option log-servers 192.168.0.99; # Сервер remote logging option nntp-server 192.168.0.99; # time server next-server 192.168.1.2; # TFTP сервер # Настройки загрузки boot-unknown-clients false; # Запретить загрузку неизвстных клиентов allow booting; allow bootp; # Настройки PXE option option-128 code 128 = string; option option-129 code 129 = text; option option-128 e4:45:74:68:00:00; # magic value # Describe workstations shared-network LTSPCLIENTS { option domain-name "ltsp.works.kamrock.com"; # Имитация доменного имени для ltsp клиентов option root-path "192.168.0.99:/opt/ltsp-4.2/i386''; # NFS путь к корню образа ltsp клиента if substring (option vendor-class-identifier, 0, 9) = "PXEClient" { filename "/pxe/pxelinux.0''; # PXE bootrom } else if substring (option vendor-class-identifier, 0, 9) = "Etherboot" { filename "/lts/vmlinuz-2.6.17.8-ltsp-1''; # Etherboot kernel } subnet 192.168.0.0 netmask 255.255.255.0 { # Диапазон IP адресов для DHCP range 192.168.0.30 192.168.0.90; group DESKTOP { host ws001 { hardware ethernet 00:0C:29:72:48:44; fixed-address 192.168.0.30; } host ws002 { hardware ethernet 00:15:F2:60:18:67; fixed-address 192.168.0.31; } host ws003 { hardware ethernet 00:17:31:4B:35:45; fixed-address 192.168.0.32; } } # group LIBRARY { # # Пример для альтернативного DHCP порта 1067 (Etherboot) # host ws100 { # hardware ethernet 00:C0:4F:AD:5C:BC; # fixed-address 10.0.0.100; # option option-129 "DPORT=1067''; # } # # support for DHCP port 1067 & slow 3Com ISA NIC # host ws101 { # hardware ethernet 00:60:08:5C:CB:BE; # fixed-address 10.0.0.101; # option option-129 "DPORT=1067 NIC=3c509 MOPTS=nolock,ro,wsize=2048,rsize=2048''; # } # another client with a slow ISA NIC # host ws102 { # hardware ethernet 00:C0:4F:AD:5D:55; # fixed-address 10.0.0.102; # group LAB { # # trick to use, when there are two conflicting DHCP servers # # and the dumb one is authoritative # host ws103 { # hardware ethernet 00:C0:4F:AD:5D:55; # fixed-address 10.0.0.103; # option option-129 "nfsroot=10.0.0.11:/opt/ltsp/i386''; # # } # } } } Запускаем dhcp /etc/init.d/dhcpd start и проверяем его работу -- запускаем загрузку прописанного в dhcp клиента по сети. При этом мы должны получить примерно такую картину: Network boot from AMD Am79C970A Copyright (c) 2003-2005 VMware, Inc. Copyright (c) 1997-2000 Intel Corporation CLIENT MAC ADDR: 00 0C 29 72 48 44 GUID: 564D4E8E4-08DF-DAC3-A4C3-BDF5F9724844 CLIENT IP: 192.168.0.30 MASK: 255.255.255.0 DHCP IP: 192.168.0.99 GATEWAY IP: 192.168.0.99 PXE-E32: TFTP open timeout Она зависит от типа используемого адаптера, но смысл один -- клиент получает от DHCP сревера IP адрес и производит неудачную попытку загрузить ядро по TFTP. Это означает что DHCP сервер настроен и работает. II. TFTP При загрузке ltsp клиент получает образ ядра от сервер с помощью протокола tftp. Соответственно, необходимо установить некий tftp сервер. Существует несколько реализаций tftp серверов под unix. Я остановился на [10]tftp-hpa. Есть еще [11]atftp, по сути тоже самое. У tftp-hpa есть один неприятный баг. По крайней мере в использованной версии 0.48 и более ранних. При наличии нескольких сетевых интерфейсах он намертво цепляется к первому, несмотря на опции запуска -u nobody -s -a 192.168.0.99:69 /tftpboot которые должны цепляеть его к интерфейсу с ip 192.168.0.99. Причем цепляется таким образом, что принимает соединение и на 192.168.0.99, т.е. на тот интерфейс на который забинден, но отправлять пакеты хочет ТОЛЬКО от первого интерфейса, т.е. 192.168.1.2 в моем случае. Чувствуете разницу? Фактически по телнету ошибки не будет, но ядро не перешлется ) Имейте это в виду -- баг не фатальный, можно использовать и второй интерфейс для раздачи tftp, но крови попьет он массу -- клиент просто не будет загружаться, несмотря ни на что. Так что биндим сразу при запуске tftp на первый интерфейс -u nobody -s -a 192.168.1.2:69 /tftpboot и в настройках DHCP в директиве next-server 192.168.1.2; # TFTP сервер прописать ip адрес первого сетевого адаптера для TFTP сервера. Кроме того, необходимо открыть порт 69 udp на вашем фаерволе, если он у вас есть: #!/bin/sh IPTABLES = /sbin/iptables $IPTABLES -A INPUT -p udp -m state -state NEW -m udp -dport 69 -j ACCEPT $IPTABLES -A OUTPUT -p udp -m state -state NEW -m udp -dport 69 -j ACCEPT Все готово, запускаем tftp: /etc/init.d/in.tftpd start И заново пробуем загрузить ltsp клиента: Network boot from AMD Am79C970A Copyright (c) 2003-2005 VMware, Inc. Copyright (c) 1997-2000 Intel Corporation CLIENT MAC ADDR: 00 0C 29 72 48 44 GUID: 564D4E8E4-08DF-DAC3-A4C3-BDF5F9724844 CLIENT IP: 192.168.0.30 MASK: 255.255.255.0 DHCP IP: 192.168.0.99 GATEWAY IP: 192.168.0.99 PXELINUX 2.13 2004-12-14 Copyright (C) 1994-2004 H. Peter Anvin UNDI data segment at: 0009C7F0 ... Could not find kernel image: bzImage-2.6.17.8-ltsp-1 boot: Делаем вывод -- DHCP работает, TFTP работает. Приступаем к настройке ltsp. III. LTSP Метод инсталяции LTSP примечателен -- идем на [12]ltsp.org и утягиваем пакет ltsp-utils. Запускаем ltspadmin, выбираем "Install/Update LTSP Packages", выделяем все объекты и нажимаем "Q". Инсталятор скачивает нужные пакеты из сети и копирует их в /opt/ltsp-версия. После инсталяции скрипт возвращает нас в основное меню. Выбираем "Configure LTSP". Если при этом вываливаются какие-либо ошибки в тесте, игнорируем их. Дальше выполняем: # [c] # [8] # [enter] # [10] # [enter] # [11] # [enter] # [q] mkdir /tmp/{mnt,var} cd /opt/ ln -s ltsp-${VER} ltsp cd /tftpboot/ mv pxelinux.cfg/ pxe/ ln -s pxe/pxelinux.cfg pxelinux.cfg и выходим из скрипта инсталятора. Переходим к настройке LTSP. Основным файлом с настройками LTSP является /opt/ltsp/i386/etc/ltsp.conf: # LTSP Configuration Parameter Reference last modified: May 14, 2005 # # The lts.conf file is made of "sections". That is, there can be a # default section called `[default]'. There can also be sections # for each individual workstation. Entries in the specific workstation # sections take precedence over entries in the default section. # The workstation can be identified by hostname, IP address or MAC address. # That is, if ws004 has an IP address of 192.168.0.4 and a MAC # address of 00:50:56:59:7F:81, it can be specified by any of the following: # #----------------------------------------- # It test #----------------------------------------- [ws001] SCREEN_01 = rdesktop -k ru -f 192.168.0.97 SERVER = 192.168.0.99 XSERVER=auto X_MODE_0 = 1024 *768 X_MOUSE_PROTOCOL="PS/2'' X_MOUSE_DEVICE="/dev/psaux" X_MOUSE_RESOLUTION=200 X_MOUSE_BUTTONS=3 X_COLOR_DEPTH=16 #----------------------------------------- # IT Dima #----------------------------------------- [ws002] SCREEN_01 = rdesktop -k ru -f 192.168.0.97 SERVER = 192.168.0.99 XSERVER = auto PRINTER_0_DEVICE = /dev/usb/lp0 PRINTER_0_TYPE = U XF86CONFIG_FILE = X86Config.Samsung710N X_MOUSE_PROTOCOL = "ImPS/2'' X_MOUSE_DEVICE = "/dev/input/mice" X_MOUSE_RESOLUTION=200 X_MOUSE_BUTTONS=3 X_COLOR_DEPTH=16 Все прозрачно. Секции начинаются с имени конфигурируемого ltsp клиента. Первая строка -- открываемая сессия. Мы запускаем rdesktop, включаем русскую раскладку клавиатуры и соединяемся с терминальным серверов 192.168.0.97 в режиме фулл-скрин. Дальше идут параметры иксов -- разрешение, тип используемой мыши, разрешение отклика мыши, глубина цветности. Для первого клиента используем мышь PS/2, для второго USB. Если вы не знаете какой тип мыши на машине клиента -- перечислите оба. Кроме того, для второго клиента мы определили что подключаем локальный USB принтер, а настройки исков прописаны в отельном файле X86Config.Samsung710N. Об этом подробнее немного позже, когда я дойду до описания локальных устройств терминального клиента. Добавляем нужное число секций по числу клиентов. Кроме этого, не забываем отразить добавленного клиента в /etc/dhcp/dhcpd.conf в секции group DESKTOP: host ws001 { hardware ethernet 00:0C:29:72:48:44; fixed-address 192.168.0.30; } А также добавить строчку в /etc/hosts: 192.168.0.30 ws001.works.kamrock.com ws001 Проверяем работу. Запускаем нашего несчастного ltsp клиента, и получаем картину сливочным маслом: Network boot from AMD Am79C970A Copyright (c) 2003-2005 VMware, Inc. Copyright (c) 1997-2000 Intel Corporation CLIENT MAC ADDR: 00 0C 29 72 48 44 GUID: 564D4E8E4-08DF-DAC3-A4C3-BDF5F9724844 CLIENT IP: 192.168.0.30 MASK: 255.255.255.0 DHCP IP: 192.168.0.99 GATEWAY IP: 192.168.0.99 PXELINUX 2.13 2004-12-14 Copyright (C) 1994-2004 H. Peter Anvin UNDI data segment at: 0009C7F0 ... Mounting root filesystem: /opt/ltsp-4.2/i386 from: 192.168.0.99 mount: RPC: Unable to receive; errno = Connection refused mount: nfsmount failed: Bad file descriptor mount: Mounting 192.168.0.99:/opt/ltsp-4.2/i386 on /newroot/nfsroot failed: Inva lid argument ERROR! Failed to mount the root directory via NFS! Possible reasons include: 1) NFS services may not be running on the server 2) Workstation IP does not map to a hostname, either in /etc/hosts, or in DNS 3) Wrong address for NFS server in the DHCP config file 4) Wrong pathname for root directory in the DHCP config file Kernel panic -- not syncing: Attempted to kill init! IV. NFS После загрузки ядра ltsp клиент пытается подмонтировать файловую систему с образом системы клиента. Для этого необходимо установить и настроить на сервер NFS. Скачиваем и настраиваем nfs-utils. Подробно на этой части останавливаться не буду, в сети много примеров. Да и никаких багов на этом этапе замечено мною не было. Очень подробная инструкция: http://gentoo-wiki.com/HOWTO_Share_Directories_via_NFS После инталяции выполняем следущее: mkdir -p /var/opt/ltsp/swapfiles vim /etc/exports Правим /etc/exports: # NFS file systems being exported. See exports(5). /opt/ltsp-4.2/i386 192.168.0.99/255.255.255.0(ro,async,subtree_check) /var/opt/ltsp/swapfiles 192.168.0.99/255.255.255.0(rw,async,subtree_check) Кроме того, если у вас есть фаервол, вам необходимо произвести ряд действий для настройки портов по которым работает NFS и открытия их. Довольно подробно об этом тут: http://gentoo-wiki.com/HOWTO_Share_Directories_via_NFS#Setting_Up_Firewall_.28Server_Side.29 Запускаем и тестируем: /etc/init.d/portmap start /etc/init.d/nfs start Загружаем наш ltsp клиент. Если все сделано правильно, то запускается линукс, стартуют иксы и появляется интерфейс логина в windows 2003 server. Ну или просто иксы, если windows 2003 server у вас еще не настроен и не запущен ) V. Исправление багов. Ошибка залипающего ALT LTSP и RDESKTOP имеют некую особенность. Проявляется она при попытках переключения между раскладками с использованием ALT + SHIFT. При использовании такой комбинации возникает эффект залипания LEFT ALT, и клавиатура "зависает". Исправляется следующим образом: в файле /opt/ltsp/i386/usr/X11R6/lib/X11/xkb/keycodes/xfree86 комментируем строчку c < lalt > = 64; # < lalt > = 64; Таким образом отключаем левый алт в линуксе. Т.к. rdesktop работает с windows 2003 terminal server метом передачи кодов нажатых клавиш, то на функциональности клавишы LEFT ALT в windows это сказывается только положительно -- она перестает конфликтовать с такой же клавишей в linux и при переключении раскладок по LEFT ALT + SHIFT клавиши не залипают. VI. Русификация При запуске rdesktop мы используем русскую раскладку клавиатуры для rdesktop. Напоминаю строчку из /opt/ltsp/i386/etc/ltsp.conf: SCREEN_01 = rdesktop -k ru -f 192.168.0.97 К сожаленью, раскладка требует доработки. Я бы сказал -- кординальной. При использовании дефолтной ru раскладки не работает часть клавиш, в частности не ставится точка в русской раскладке (та что совмещена с клавишей "/"). Кроме того, не работает shift + \ . Т.е. не ставится бекслеш. Координальный метод исправления состоит в следующем: идем в /opt/ltsp/i386/usr/share/rdesktop/keymaps и замещаем файл с раскладкой ru файлом с раскладкой en-us: rm /opt/ltsp/i386/usr/share/rdesktop/keymaps/ru cp /opt/ltsp/i386/usr/share/rdesktop/keymaps/en-us /opt/ltsp/i386/usr/share/rdesktop/keymaps/ru После чего заменяем в /opt/ltsp/i386/usr/share/rdesktop/keymaps/ru map 0 *409 на map 0 *419 "Новая" ru раскладка готова. Все клавишы работают корректно. VII. Локальные устройства. Нестандартные мониторы В ряде случаев скрипт из ltsp, призванный автоопределить параметры устройств для запуска xorg, дает сбой. В частности, у меня некорректно определялись параметры горизонтальной развертки для части мониторов. Например, для Samsung 710N. Как результат, было невозможно выставить родное для данного монитора разрешение. Вариант решения проблемы следующий -- написать специальный X86Config для данного монитора. Т.к. угадывать параметры устройства самому и писать файл конфига довольно муторно, то можно воспользоваться следующим хитрым методом. Скачиваем дистрибутив с [15]Knoppix. Загружаемся с CD или DVD с Кнопиксом на проблемной машине с проблемным монитором. В составе Knoppix идет гениальный скрипт распознования параметров устройств, mkxf86config, практически не дающий сбоев. После загрузки копируем сгенирированный кнопиксом X86Config из рам диска Кнопикса к нам на сервер, в каталог с ltsp.conf. И задаем данный конфиг в параметрах запуска ltsp клиента в ltsp.conf: XF86CONFIG_FILE = X86Config.Samsung710N После загругзки ltsp получаем нужное родной разрешение монитора. VIII. Локальные устройства. Принтеры LTSP позволяет использовать локальные принтеры, подключенные к терминальной машине как по USB, так и по LTP. Для этого в /etc/ltsp.conf, в секции настройки клиента, прописываем для USB принтера: PRINTER_0_DEVICE = /dev/usb/lp0 PRINTER_0_TYPE = U После загрузки принтер работает и доступен. При этом, ltsp-клиент становится принт-сервером и принтер становится сетевым, обладая ip адресом ltsp клиента. Таким образом, для добавления принтера в windows надо произвести стандартную процедуру добавляения сетевого принтера: * выбрать добавление нового принтера * выбрать "Локальный принтер" * "Создать новый порт", тип порта установить в Standart TCP/IP Port * ввести ip адрес ltsp клиента Вуаля, принтер доступен. IX. Локальные устройства. USB флеш носители Rdesktop и LTSP позволяют использовать в терминальной схеме подключение локальных USB носителей. Подробную статью об этом процессе я описал тут: USB флеш диски в LTSP и Rdesktop

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:





  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor