Citkit, 6 июня 2006 г
Сюжет этой заметки выкристаллизовался спонтанно - занесло меня на днях в фирму Kami, просто так, поговорить на взаимно интересные темы, имеющие отношение к Linux и Open Source. Однако в процессе дружеской беседы я увидел такое, о чем, как профессиональная гиена пера, просто не мог промолчать... Однако начну издалека.
Время от времени на всяческих форумах, имеющих отношение к Linux и Open Source вообще, раздаются пламенные призывы: "Даешь Linux в корпоративе!" и им подобные. Правда, при ближайшем рассмотрении обычно оказывается, что авторы таких призывов подразумевают примерно следующее: "Ребята, бросайте свои дела и сделайте так, чтобы я мог зарабатывать на Linux". Никаких реальных действий за такими призывами, как правило, не стоит.
Тем не менее, корпоративные решения на базе Linux и Open Source на Руси (сиречь в России и Украине) существуют. Просто они а) не очень афишируются их разработчиками, и б) используются в достаточно специфических сферах человеческой деятельности. На первом факторе заострять внимание не буду (sapienti sat, как говаривали древнегреческие римляне). А вот причины второго явления рассмотрения заслуживают.
Действительно, любой современный дистрибутив Linux общего назначения (и даже, скажем, такая ОС, как FreeBSD) содержат в своем составе почти все, что необходимо для организации внутрикорпоративного документооборота и коммуникаций с внешним миром. За двумя важными исключениями: средств векторной графики (и, особенно, CAD-систем) и ведения финансовой документации. Если первый фактор играет роль лишь в отдельных случаях (далеко не все фирмы и организации испытавают необходимость в векторных "рисовалках" и, тем более, системах автоматического проектирования), то без бухгалтерского учета и сопряженных с ним материй, как без воды - "ни туды и ни сюды). А когда мы говорим слова "бухгалтерский учет", под ними молчаливо подразумевается продукция фирмы 1C - так уж исторически сложилось в Государстве Российском. А продукция эта, как известно, функционирует исключительно под одной операционной системой - и вы знаете, под какой. Так что получается, что и "без винды, как без воды"...
Решить проблему с запуском жизненно важного Windows-софта под Linux можно - и даже не одним способом. Во-первых, существуют так называемые виртуальные машины - системы, обеспечивающие запуск, например, Windows (и, разумеется, ее приложений) под Linux или какой-либо BSD (как, впрочем, и наоборот). Наиболлшей известностью из средств такого рода пользуется VMWare - она же является и наиболее развитой. Но увы - это совсем не свободная программа (хотя, при некоторых условиях, и может использоваться бесплатно). А ее открытый аналог - Xen - лишь недавно приобрел достаточную устойчивость.
Тем не менее, использование любой виртуальной машины наталкивается на два ограничения - а) весьма высокие требования к ресурсам компьютера и б) необходимость в приобретении лицензий не только на прикладной софт, но и на саму ОС Windows - в количестве требуемых рабочих мест.
Другой путь использования Windows-софта в среде Linux - запуск его под эмуляторами, типа WINE. Правда, именно для прдукции 1C, защищаемой аппаратными ключами, это сопряжено с определенными трудностями (эмуляторы реагируют на аппаратные ключи весьма неадекватно), но, насколько мне извсестно, трудности эти преодолимы - примером чему разработки фирмы Этерсофт (http://etersoft.ru/). Однако и WINE не избавляет от необходимости лицензий - теперь уже только на приложения, но все равно в количестве рабочих мест.
Наконец, есть и третий путь решения озвученной проблемы - старая добрая клиент-серверная архитектура. И это - тот путь, которым пошли разработчики программного комплекса Ками-Терминал.
Для начала - на чем все это работает. Очевидно, что клиент-серверная архитектура предполагает наличие "железного" сервера и "железных" клиентов. О первом компоненте говорить особо не придется - это самый обычный сервер на базе Intel-совместимого процессора (процессоров), конфигурация которого определяется потребностями и возможностями организации. Замечу только, что он выступает и как сервер приложений, и как хранилища пользовательских данных (конечно, разделение этих ипостасей на отдельные сервера не возбраняется).
А вот предлагаемые фирмой Kami аппаратные решения с клиентской стороны (то есть собственно терминалы) заслуживают отдельного разговора. Это - классические "тонкие клиенты", то есть машины на базе материнских плат формата ITX с процессорами VIA (в ряде случаев не требующих активного охлаждения). Собственных средств хранения информации они не имеют, но снабжены внутренними винчестероподобными носителями, призванными обеспечить загрузку системы и подключение ее к сети. Впрочем, это можно проделать и с обычного флэш-драйва, подключаемого к USB-разъему.
Второй тип клиентских терминалов - это так называемые планшетные компьютеры. Которые представляют собой нечто вроде полноценных ноутбуков, лишенных клавиатуры, но имеющих сенсорные экраны и перо в качестве указательно-позиционирующего устройства (впрочем, допускается также подключение внешней клавиатур и мыши). Такие "планшетки" могут быть загружены с собственного винчестера, USB-флэшки или компакт-диска.
Разумеется, использование столь специфического (и, нужно заметить, недешевого) клиентского оборудования вовсе не обязательно. В качестве клиентских машин легко приспособить любые стандартные персоналки, в том числе и безнадежно устаревшие, в ином случае подлежавшие списанию в утиль.
Потому что главным составляющим терминального комплекса является, конечно же, не "железо", а софт. Что же представляет из себя он?
В двух словах, это - самый обычный Linux. Хотя нет - обычный, да не совсем... Начать с того, что управляющая система распадается на две части - клиентскую и серверную. Клиентская часть сделана на основе Slackware, только вот ядро и модули пересобраны так, чтобы одинаково успешно запускаться на всем потенциальном "зоопарке" терминального "железа". Однако запуск этого мини-Linux'а - удел только клиентстких машин. А, как уже было сказано, клиентское "железо" весьма разнообразно и специфично. Подчеркну еще раз - клиентская сторона софта обеспечивает только начальную загрузку терминальной станции и ее подключение к сети, все остальные заботы - об интерфейсе пользователя, запуске системных сервисов, обеспечивающих доступ к ресурсам, работе собственно пользовательских приложений, - берет на себя сервер.
А вот в качестве серверной ОС может выступать практически любой дистрибутив Linux (ALT, ASP, RedHat EL, SuSE etc - есть крамольная мысль, а не прикрутить ли туда какую-либо из BSD-систем?), куда спокойно "укладывается" серверная часть предлагаемого решения или в виде RPM-пакетов, или из тарболла. В результате могло бы получиться забавно - зоопарк "железа", наложенный на зоопарк софта, в том числе и системного. И потому разработчиками принято унифицирующее решение - использовать на серверной стороне Red Hat Enterprise Linux, как он нынче официально называется (сокращенно RHEL). Цель чего - оградить пользователей от всех "радостей" разнообразия интерфейсов. Ибо теперь интерфейс их рабочего стола предоставляется серверной стороной (о чем - чуть ниже).
Дополнительный плюс принятого решения - получение качественной техподдержки со стороны майнтайнера серверноой ОС: как известно, RedHat берет деньги (нужно заметить, немалые) не за сам дистрибутив, а за поддержку, включающую регулярные обновления, реакцию на проблемы пользователя в течении считанных бизнес-часов, и тому подобные прелести. Что, конечно, представляется излишеством пользователям-индивидуалам, но в корпоративной системе - очень не лишне.
Как выглядит в реале функционирование терминального комплекса? Подготовка к работе клиентской станции сводится к подключению ее к сетевому кабелю, обеспечению наличия загрузочного носителя (если он - внешний) и нжатию кнопки Power. После этого за дело последовательно берутся BIOS клиентской машины и ее системный загрузчик, завершая свою работу переходом в режим ожидания действий пользователя, длящийся 7 секунд. Под действиями пользователя подразумевается возможность настройки и обновления системного софта терминала. Однако это - отдельная история, о которой в настоящей заметке речи не будет.
Так что просто отказываемся от каких-либо действий и, по истечении 7 секунд, наблюдаем продолжение загрузки системы - то есть ядра Linux, виртуального диска initrd и необходимых модулей, подключение серверу, а в финале - запуск графического интерфейса пользователя.
В качестве терминального интерфейса пользователя выстпает не что иное, как "легкий" оконный менеджер Fluxbox, несколько модифицированный разработчиками Kami. В частности, его изначально аскетичная инструментальная панель снабжена дополнительной кнопкой, носящей имя (да простят меня читающие это дамы) Старт, выводящей системное меню терминала (оно же вызывается и щелчком правой кнопкой мыши на рабочем столе).
Системное меню позволяет запустить с терминала пользовательские сеансы различных типов доступа к Linux- и Windows-системам (сами они исполняются, разумеется на сервере). Так, работа в среде Linux возможна через клиенты OpenSSH, X11 и VNC. Первый обеспечивает авторизацию пользователя на сервере (разумеется, для этого соответствующий аккаунт должен быть там создан администратором) по одноименному защищенному (шифруемому) протоколу и дальнейшую работу в режиме командной строки - практически также, как на виртуальной консоли обоычной персоналки. Однако основная задача SSH-клиента - запуск на рабочем столе пользователя графических приложений (браузер, почтовый клиент и т.п.), "завернутых" в страхующу SSH-обертку. Причем это делается администратором прозрачно для пользователя (с помощью ключей авторизации), и не требует ради отдельного приложения "тащить" на терминал отдельную сессию Linux.
Кстати говоря, виртуальные консоли имеют место быть и на самом терминале. На одной из них запущен тот самый Fluxbox, который обеспечивает доступ ко всему остальному серверному богачеству, остальные же и служат для его отображения.
При запуске клиента X11 происходит авторизация пользователя на сервере в графическом режиме, после чего следует запуск (опять-таки на сервере) самого обычного сеанса работы в оконной систме X - и снова никаких отличий от работы за локальной машиной обнаружить не удастся. Точно также Иксовый сеанс отображается на отдельной виртуальной консоли терминала.
Ну а сеанс VNC - это запуск cистемы удаленного доступа к компьютеру (сиречь обратно же нашему серверу), использующей специальный протокол RFB (Remote FrameBuffer). Каковой обеспечивае передачу клавиатурных и "мышиных" манипуляций с терминала на сервер и вызванных ими обновлений экрана - в обратном направлении по сети. Подобно Иксовому сеансу, он отображается в графическом режиме, однако может быть запущен не только в полноэкранном режиме, но и в окне приложений.
В общем, пользователь Linux (или любой другой Unix-подобной системы), сев за Ками-терминал, не обнаружит для себя ничего неожиданного или непривычного. Кроме одного: параллельно с любым из перечисленных выше Linux-сеансов он может запустить еще и сеанс работы с Windows - и, более того, свободно переключаться между ними посредством своеобычной комбинации клавиш Alt+Control+F#.
Открыть Windows-сессию можно двумя способами - посредством Citrix-клиента и клиента RDP. К сожалению, разницы между ними объяснить не могу, так как, подобно д'Артаньяну, забыл о Windows даже то, чего не знал... Однако с точки зрения пользователя в любом случае это будет выглядеть также, как пользовательский сеанс в Windows XP на локальной машине. В котором можно открывать любые Windows-приложения, включая сакраментальные программы бухгалтерского учета и прочей бюрократии. Причем для этого достаточно иметь всего одну копию и самой ОС, и требуемых под нее софтин - ибо все это хозяйство все равно исполняется на сервере.
Таким образом, терминальный комплекс Ками и дает ту самую возможность "бархатной" миграции с Windows на Linux, о которой столько говорят на форумах адепты конецепции "Linux в корпоративе". Остается добавить только, что команду разработчиков возглавляет Леонид Уточкин - а до неданего времени он был и единственным ее представителем.
И в заключение: обсудить эту статью (и сам терминальный комплекс) можно в соответствующем трейде на форуме http://posix.ru. Ну и его непосредственный разработчик не откажет в дополнительной информации - с ним можно связаться так: leux@yandex.ru.