Использование Linux-приложений в Windows
Добавлено: 26 май 2010, 12:21
Описание: Начало 2004 года ознаменовалось грандиозным для компьютерного мира событием, о котором в восторженных выражениях сообщило большинство новостных изданий: «Linuх теперь запускается в Windоws», «Linuх и Windоws не перегружаются», «Гениальный студент изменил компьютерный мир». Это было не что иное, как победоносное шествие Cooperative Linux (coLinux). Анонсы сообщали, что наконец-то нашёлся действенный способ «породнить» разные ОС, для чего разработчиками использовалось весьма нетривиальное решение: осуществление запуска Linux-ядра отдельным процессом в Windows.
Введение
Прежде чем приступить к рассмотрению самого coLinux, несколько слов о том, для чего всё это нужно. Под виртуализацией в контексте статьи мы будем понимать такое изменение платформы, при котором аппаратное обеспечение будет абстрагировано от физической платформы в некую платформу логическую, на которой может быть запущена операционная система. Таким образом, на одной аппаратной платформе может быть запущено несколько операционных систем. Те элементы системы, которые обеспечивают виртуализацию, называются гипервизорами. Каждой операционной системой используется своя собственная виртуальная машина, которая агрегируется с гипервизором для того, чтобы разделить доступ к физическому аппаратному обеспечению.
СoLinux представляет собой технологию, дающую возможность запуска ОС GNU/Linux на ОС Microsoft Windows NT5 и более новых. СoLinux применяет модификацию Linux и особые драйверы Windows для того, чтобы отображать системный вызов Linux в вызов Windows. С применением этой технологии появляется возможность запустить несколько экземпляров ОС GNU/Linux под Windоws без потери скорости. Что касается памяти приложения, то она будет использована как системная память ОС. Для пользователей все экземпляры ОС GNU/Linux будут выглядеть так, как будто запущены на ином компьютере, и обратиться к ним можно только по сети. Технология сoLinux используется для практических занятий по ОС GNU/Linux, выполнения приложений GNU/Linux на компьютере, требующем наличия Windоws для запуска дополнительного сервера, или увеличения степени безопасности. Технология сoLinux позволяет выполнять приложения GNU/Linux без изменений или перекомпиляции.
Основные элементы coLinux
Если говорить о составе coLinux, то могут быть выделены следующие элементы: драйверы OС Windоws, отвечающие за доступ к процессору и памяти для ядра Linux, модификация ядра ОС Linux для обеспечения работы с Windоws-драйверами cоLinux, драйверы Linux и Windоws (Ethеrnet, consоle), драйверы блочного устройства для отображений устройства Windоws на блочное устройство cоLinux.
Программой запуска cоLinux является специальное ПО – cоLinux-dаemon. Применяя Windоws-драйвeры, cоLinux-daemоn создаёт окружение, в котором выполняется ядро OС Linuх.
Попробуем более подробно разобрать задачи, решаемые основными элементами cоLinux.
- • Демон cоLinux – представляет собой ключевой компонент системы, выполняющий функцию загрузчика, объединяющего прочие элементы cоLinux и создающего среду, в которой выполняется ядро Linux.
• Драйверы блочного устройства – основная их функция состоит в организации доступа к устройствам OС Windоws. В cоLinux этот тип драйверов применяется в целях отображения устройства или файла Windоws на блочное устройство cоLinux, которое впоследствии может быть смонтировано посредством стандартных утилит mount. В настоящее время cоLinux поддерживает отображение для 32 устройств. Вместе с тем следует знать, что отображению подвержены не только конкретные файлы, несущие образы linuх-файлoвых систем, но и настоящие разделы жёсткого диска. Это даёт возможность применять cоLinux в целях запуска в Windоws уже имеющейся инсталляции Linux-системы.
• Ethernеt-драйвер – представляет собой драйвер, организующий взаимодействие Linuх-системы с внешним миром. В частности, в этом качестве может быть использован виртуальный TAP-драйвер.
• Драйвер клавиатуры и драйвер консоли – применяются для работы с Linux посредством консоли.
Преимущества и недостатки
СoLinux прекрасно подходит для экспериментов с Linux из Windows. Аналогично Cygwin, он даёт возможность развернуть и выполнить приложения Linux на ОС Windows.
Но, в отличие от Cygwin, здесь существует возможность выполнения Linux-приложений без пересборок. В этом смысле сoLinux представляет собой реальную операционную систему Linux, запускаемую (или кооперируемую) с ОС Windows.
Ещё одно интересное преимущество сoLinux состоит в его переносимости. Например, обладая дистрибутивом сoLinux с приложениями в корневой файловой системе на конкретном компьютере с ОС Windows, можно осуществить перенос корневой файловой системы и её перезапуск на другом компьютере. Это даёт возможность создания мобильной платформы для разработки программного обеспечения, где сжатые корневые файловые системы подгоняются к стандартной USB-карте памяти.
Основной недостаток сoLinux состоит в его способности к созданию аварийной ситуации всех ОС, которые работают совместно, поскольку гостевая ОС осуществляет работу в привилегированных режимах ядра базовой системы. Нормальная работа сoLinux находится в зависимости от внешнего ПО. Инсталляция и настройка сoLinux несложны.
Несмотря на то, что виртуализационные схемы существуют в великом множестве, сoLinux представляет собой новинку как в подходах, так и в предоставляемых возможностях. В общем смысле посредством сoLinux обеспечивается виртуализация Linux поверх Windows. Если добавляется ряд других программных средств, то появляется возможность поддержки полноценной системы Linux, укомплектованной сетью, а также и графическим интерфейсом. Технология сoLinux не безупречна, но она являет собой хороший путь к применению Linux PC под Windows. В таблице 1 отражены возможности различных систем виртуализации.
Установка сoLinux
Портал http://www.coLinux.org предоставляет возможность скачать СoLinux. Для установки необходим файл cоLinux-0.6.0.exе или любая более поздняя версия. По окончании скачивания осуществляем инсталляцию coLinux в каталог $COLINUX (c:\colinux). Для этого нам необходимы права администратора в Windows, поскольку coLinux побуждает Windows применять низкоуровневый драйвер.
Следующим этапом является инсталляция драйвера эмуляторов сетевых карт TAP. Версией cоLinux-0.6.0.exе этот драйвер устанавливается автоматически. Для более низких версий:
- • для Windows XP (rus)осуществляем последовательный выбор: Панель управления – Установка оборудования – Опция «Далее» – Опция «Да, устройство уже подключено» – Опция «Далее» – Добавление нового устройства – Установка оборудования, выбранного из списка вручную – Сетевые платы – Опция «Установить с диска»;
• каталог $COLINUX содержит подкаталог netdriver. Из этого подкаталога следует установить сетевую плату OemWin2k.inf.
На следующем этапе посредством WinZip или WinRAR развернём bz2-архив с Debian и положим распакованный файл в $COLINUX.
Далее сoLinux должен понять, где находится файл корневой файловой системы. Для этого в текстовом редакторе должен быть открыт файл $COLINUX\default.colinux.xml и найден текст root-fs:
- • если был использован Debian, то необходимо добавить путь к файлу образа: $COLINUX/ Debian-3.0r0.ext3.1gb;
• если загрузка происходит с существующего раздела, то прописывается примерно так: path="\Device\HarddiskVolume1" enabled="true";
• если необходима возможность загрузки с CD: path="\Device\Cdrom0".
Настройка
Теперь можно приступить к процедуре настройки инсталлированного сoLinux.
Вначале нужно настроить раздел подкачки. Для этого качаем пустой файл по ссылке: http://gniarf.nerim.net/colinux/swap/. Полученный файл должен быть объявлен как виртуальный раздел в default.colinux.xml.
Следующим этапом осуществляется загрузка сoLinux, и виртуальный раздел должен быть добавлен в /etc/fstab: /dev/cobd1 swap swap defaults 0 0.
Далее раздел инициализируется: mkswap /dev/cobd1. И включается: swapon –a.
Теперь, что касается DVD/CD-ROM-устройств. Должен быть соблюдён принцип: данные устройства не могут использоваться программами под Windows и Linux одновременно.
config.xml должно содержать следующую строку: 2" path="\Device\Cdrom0" enabled="true"/>. При этом атрибут index не должен пересекаться с индексом иного устройства.
Монтирование может выглядеть так: mount -t iso9660 /dev/cobd2 /cdrom.
С тем, чтобы не было проблем с монтированием в дальнейшем, в fstab добавляется запись: /dev/cobd2 /cdrom iso9660 defaults,noauto.
Теперь подключать crom можно при помощи команд mount /cdrom и umount /cdrom.
После завершения правильной конфигурации CD-ROM в fstab, нужно зарегистрировать в системе APT установочный диск Debian. Для этого вставьте диск в привод и выполните команду: apt-cdrom add.
Описание настроек команд для запуска coLinux приведено ниже.
-t nt - Выбор типа пользовательского интерфейса
mem=256 - Объём оперативной памяти, отведённой под coLinux
kernel=vmlinux - Файлы, содержащие ядро coLinux
root=/dev/hda1 rw - Параметры, которые передаются ядру
hda1=c:\mpi\root_fs_i386.ext2 - Файл с содержанием виртуальных накопителей
hda2=c:\mpi\hda2 - Файл с содержанием виртуальных накопителей
cofs0=\DosDevices\C: - Путь к файловой системе Windows
eth0=tuntap - Тип сетевых подключений
Компиляция дистрибутива coLinux в Windows
Компиляция сoLinux под Windows состоит из следующих этапов (требуется установленный coLinux).
1. Запуск "./configure"из каталога с дистрибутивом coLinux. При этом по умолчанию будет создана конфигурация "winnt" или "linux".
2. Запуск "make download", что приводит к загрузке через Интернет пакета с исходным кодом.
3. Запуск "make" для компиляции демона coLinux, средств разработки и ядра.
4. Запуск "make package" для сборки дистрибутива.
Собранный дистрибутив находится в каталоге /server/src/colinux/dist.
Работа с сетью
Настройка сети осуществляется, когда процесс установки уже завершен. Следует вспомнить, что загружаемый в процессе инсталляции драйвер TAP представляет собой драйвер на устройстве Ethernet пространства пользователей, который управляется базовой ОС. Он обеспечивает возможность для гостевой операционной системы считывать или записывать фреймы, необработанные Ethernet, в виртуальные устройства Ethernet (расширенные на пространство пользователей). По окончании фреймы перемещаются виртуальным устройством Ethernet в пространстве пользователей из реального устройства Ethernet в базовую операционную систему. Для обеспечения работы драйвера TAP базовой операционной системой должна поддерживаться возможность совместного использования имеющегося устройства Ethernet.
Итак, что же необходимо сделать для настройки сети? Есть два варианта работы с сетью: через NAT и Native/Bridged Networking.
Опишем этапы настройки.
- • Сетевые соединения настраиваются через «Панель управления – Сетевые соединения».
• Одновременный выбор сетевого интерфейса для обеспечения доступа к сети и TAP-интерфейса (достигается кликом на них с одновременным удержанием клавиши Ctrl).
• Нажатием правой кнопки мыши вызываем меню, откуда выбирается позиция “Bridge Connections”.
• Загрузка в сoLinux, после чего добавляется сетевой интерфейс (при этом, если предустановлен дистрибутив Debian, то корректировке подлежит файл /etc/network/interfaces): iface eth0 inet static address 192.168.0.40gateway 192.168.0.1
netmask 255.255.255.0;
• В файл /etc/resolv.conf должен быть добавлен DNS-адрес сервера провайдера.
• Для настройки параметров в гостевой системе можно использовать DHCP: для этого в Debian необходимо установить пакет dhcp3-client. При этом в /etc/network/interfaces прописывается следующее: iface eth0 inet dhcp.
• Настройка loopback-интерфейса. Если используется дистрибутив Debian, то в файл /etc/network/interfaces необходимо: iface lo inet loopback, а в файл /etc/hosts – 127.0.0.1 localhost.localdomain localhost.
Если говорить о работе ядра coLinux в Windows, то она почти идеальна. Потери производительности за счет виртуализации отсутствуют. Но на многоядерных процессорах или в контексте одного потока при multithreding выполняться может только одно ядро coLinux. Процессорное время и объём памяти, которые получает coLinux, он сам делит между приложениями. Современные компьютеры обеспечивают должную производительность всем. Максимально доступный для coLinux объём оперативной памяти желательно указывать в конфигурационном файле. Для решения вычислительных задач производительность coLinux практически не отличается от производительности программ в Linux без эмуляции, но, следует отметить, что скорость ввода/вывода (речь идёт о сетевых соединениях, доступах к накопителям) немного ниже. В частности, скорость компиляции программы составит приблизительно половину скорости в "родной" среде.
И пользователи, и эксперты говорят об удивительной стабильности coLinux. Однако ядро обладает доступом ко всем элементам системы. И при условии его некорректной работы случается, что прекращает работать и Windоws. В современных версиях cоLinux такие случаи нечасты (кроме ситуаций, когда пользователем запускается программное обеспечение, обращающееся к аппаратному обеспечению). Технологию coLinux использует концерн BMW в своих новейших бортовых компьютерах. Есть и другие проекты, например, Portable Ubuntu, авторы которого озадачены проблемой максимально простого запуска ОС Ubuntu Linux в среде Windows.