Архивы: по дате | по разделам | по авторам

Трещина между мирами

Архив
автор : Алексей Дубовцев   10.12.2003

Многие Windows-пользователи хотели бы видеть вместо привычной оболочки Explorer что-либо другое. Осуществить задуманное поможет один из портов ядра Unix на Windows.

Многие Windows-пользователи хотели бы видеть вместо привычной оболочки Explorer что-либо другое. Не так давно («КТ» #497) мы уже писали, как ее модифицировать при помощи программ Talisman или Windows Blinds. Но эти программы лишь изменяют внешний вид Explorer, и до полноценных эмуляций им далеко. Если вам нужны только красивые кнопочки и менюшки, не читайте эту статью, поскольку в ней рассказывается о том, как установить на Windows, например, оболочку KDE, ничем не уступающую своим собратьям на *nix-платформах.

Осуществить задуманное поможет один из портов ядра Unix на Windows. Я выбрал наиболее популярный из них — Cygwin, созданный компанией Cygnus1. В последнее время интерес к проекту Cygwin со стороны программистов растет, и, как следствие, экспоненциально увеличивается число приложений, перенесенных на данную платформу. На Cygwin можно портировать практически любые *nix-программы, кроме, конечно, тех, которые активно взаимодействуют с низким уровнем ядра (драйверы, низкоуровневые демоны и т. п.). Для профессионалов это означает заметное сокращение времени и сил на перенос прикладных программ с одной платформы на другую2. Для обычных же пользователей — возможность войти в мир *nix, «не закрывая окон»: для первоначального изучения *nix-систем Cygwin идеален, поскольку в отличие от реальной ОС не оставляет вас один на один со зловещей чернотой консоли.

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

На первый взгляд эта технология может показаться несколько убогой — ведь выбирая ту или иную систему, мы в основном обращаем внимание на производительность ее ядра. А здесь получается какой-то странноватый гибрид с программным интерфейсом (API) от *nix и ядром Windows. Хорошо известно, что введение дополнительного чужеродного слоя в систему может резко снизить ее производительность. В данном случае чужеродным является слой *nix, потому что его архитектура кардинально отличается даже от внешнего API Windows, не говоря уже о ядре. Чтобы заставить работать этот внешний слой, нужны порой титанические усилия Cygwin, на ходу пересобирающего вызовы *nix в формат Windows. Тем не менее, такая технология куда быстрее, нежели полное эмулирование *nix-системы. Доказательством ее жизнеспособности является проект под кодовым именем Rotor, используемый для переноса виртуальной машины .NET на платформу FreeBSD. В его рамках программисты из Microsoft практически полностью переписали Windows API для реализации функций FreeBSD3.

Возможные проблемы

Во-первых, Cygwin вкупе c KDE на системе Windows 2003 Server работают нестабильно и частенько не запускаются (хотя раз на раз не приходится). Во-вторых, при установке иногда возникают проблемы с созданием командного файла, который запускает KDE и должен правильно прописывать пути к папкам KDE и Cygwin — чего он, к сожалению, может не делать. Но это легко поправимо, если пути вы укажете сами. Для этого вы можете либо создать командный файл, в котором прописать строку вида set path=%path%;…\cygwin\bin; …\cygwin\otp\kde3\bin\, а затем команду, запускающую KDE. Либо, если у вас установлена Windows 2000/XP, изменить переменную path глобально, нажав на кнопку Environment Variables, располагающуюся на закладке Advanced, в окне System Properties (Windows+Break).
Если же и после указания путей KDE отказывается запускаться, внимательно прочитайте сообщения об ошибках, которые оболочка выводит при попытке старта как в виде окон сообщений, так и на консоль Cygwin Bash. Скорее всего, вы забыли установить одну из необходимых библиотек. В таком случае запомните имя пакета и скачайте его при помощи утилиты установки Cygwin, после чего не забудьте установить библиотеку в среду Cygwin при помощи все того же setup.exe.

Поскольку при таком подходе для программы создается ее родная (Unix) среда с привычным окружением, то она даже не заметит подмены реальной системы на эмулируемую. Чтобы продемонстрировать возможности Cygwin, точно так же мы поступим и с KDE: поместим эту пользовательскую оболочку внутрь Cygwin, где она и будет исполняться.

Для упрощения задачи можно скачать уже готовый порт KDE под Cygwin4. Он поставляется в виде единственного, но внушительного файла размером 45 Мбайт. В отличие от программы установки Cygwin, он является типичным Windows-инсталлятором, так что единственным «сложным» моментом процесса установки будет выбор каталога, в который необходимо поместить порт (лучше всего …\cygwin\opt\kde3\).

После чего вы можете смело запускать ярлык Start KDE Desktop (full), расположенный на рабочем столе, — у вас должна получиться полноценная версия KDE, которая загрузится в обыкновенном Windows-окошке.

У Cygwin имеется одна не совсем очевидная, но крайне полезная возможность. Поскольку все свои настройки он хранит в скриптах и конфигурационных файлах, не прибегая к реестру Windows, вы всегда можете сделать полную резервную копию Cygwin, заархивировав или скопировав его файлы — благодаря чему можно легко и просто восстановить систему.

Есть и возможность параллельно запустить несколько копий KDE — предварительно сделав соответствующее количество копий системы Cygwin (во избежание конфликтов при совместном использовании файлов). Это наверняка оценят разработчики приложений: в одной копии можно создавать программы, а в другой их тестировать.

Напоследок — два слова о производительности портированной системы. Плавности, присущей реальной системе, обычно ожидать не приходится, но производительностью Cygwin я остался доволен — KDE работала на нем крайне стабильно и нареканий не вызывала.

Установка Cygwin

Пусть вас не пугает сей процесс — он гораздо проще, чем установка реальной *nix-системы. На сайте www.cygwin.com вы найдете файл setup.exe (259 Кбайт), который является интерактивной средой установки, позволяющей скачать и инсталлировать необходимые файлы. После его запуска вам будет предложено три варианта дальнейших действий (рис. 1): установить файлы из Интернета (Install from Internet), загрузить их из Интернета на локальный компьютер (Download from Internet), а также установить файлы с диска (Install from Local Directory). Советую выбрать второй пункт, поскольку, единожды скачав все необходимые пакеты, вы всегда сможете установить их с диска, не прибегая к повторному обращению к Сети.
После того как вы настроите тип соединения (можно соединиться через прокси-сервер), программа загрузит список доступных серверов (их около девяноста), на которых располагаются необходимые файлы. Приятно удивило, что в списке фигурирует ftp-сервер из зоны .ru (ftp.chg.ru). С выбранного сервера будет запрошен список доступных пакетов, после чего должно появиться довольно оригинальное и весьма непривычное для пользователей Windows окно выбора компонентов (рис. 2). Для запуска KDE нам понадобятся следующие пакеты: libiconv2, libintl2, jpeg, zlib, libpng12, libxslt, libxml2, libtiff, pcre, libbz2_1, openssl-0.9.7 и xfree-base. Правда, этим джентльменским набором обойтись не удастся, поскольку для работы многих из перечисленных пакетов необходимы другие — так называемые зависимые пакеты (они будут добавлены в список закачки автоматически). Прежде чем скачивать файлы, рекомендую обратить внимание на четвертую (Bin?) и пятую (Src?) колонку дерева выбора пакетов. Колонка Bin? отвечает за скачивание откомпилированных версий пакетов, а колонка Src? — за скачивание их исходных кодов. Если вы не планируете работать с исходниками, то и скачивать их не имеет смысла.
Завершив скачивание, снова запускаем утилиту установки Cygwin и выбираем последний пункт (Install from Local Directory), предполагающий установку файлов с жесткого диска. После их установки на вашем рабочем столе должен появиться ярлык Cygwin, при помощи которого вы можете запустить командный интерпретатор Bash. Это можно сделать и при помощи командного файла cygwin.bat, располагающегося в каталоге Cygwin (на который, собственно, и ссылается вышеупомянутый ярлык). Но, думаю, голая командная строка Bash является для большинства пользователей абсолютно бесполезным инструментом, хотя профессионалы порой творят в ней неописуемые вещи.

1 В настоящее время пакет Cygwin поддерживается компанией Red Hat, купившей Cygnus.
2 Простой пример: используя Cygwin, можно написать служебные скрипты, которые одинаково запускаются и работают под обеими платформами, а не делать отдельно bat- и отдельно shell-скрипты. Это сильно ускоряет написание и особенно модификацию скриптов — попробуйте параллельно править обе версии, в которых различий больше, чем сходства!
3 Rotor полуофициально входит в состав .NET Framework и поставляется в виде открытых исходных кодов по лицензии Shared Source от Microsoft совместно с .NET CLI Source Code, которые вы можете безвозмездно скачать с сайта Microsoft (sscli_20021101.tgz, 15 Мбайт).
4 kde-cygwin.sourceforge.net.

© ООО "Компьютерра-Онлайн", 1997-2024
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.