M. Тим Джонс, инженер-консультант, Emulex
Описание: Виртуализация с помощью VMware, Xen и Kernel-based Virtual Machine (KVM) является теперь очень популярной. Но знаете ли вы, что вы можете запускать Linux® совместно с Microsoft® Windows®? В этой статье рассматривается Cooperative Linux (coLinux), начиная с краткого введения в виртуализацию, а затем рассматривается метод, используемый в coLinux. Вы также увидите, как настраивать coLinux и запускать его под Windows.
Вряд ли вы думаете о совместной работе, когда рассматриваете GNU/Linux и Microsoft Windows, но это именно то, что можно получить с ядром coLinux. Не уверены?
coLinux — это порт операционной системы Linux, работающий как один процесс в операционной системе Microsoft. Операционные системы работают совместно, передавая друг другу центральный процессор (CPU), как показано на Рисунке 1.
Рисунок 1. Microsoft Windows и Linux кооперируются друг с другом при помощи coLinux
Посредством использования драйверов ядра физические ресурсы, такие как сетевой интерфейс, также используются совместно. Более подробно об этом будет рассказано ниже. А сначала о том, что подразумевается под виртуализацией.
Спектр виртуализации
Эта статья посвящена кооперативной реализации виртуализации, но термин применим также и к другим технологиям. Например:
- В системах хранения вы можете виртуализировать много дисков, которые выглядят как пул систем хранения и могут быть распределены в зависимости от потребностей.
- Вы можете также виртуализировать сети, хотя это обычно называется зонирование.
- Виртуализация в ОС, которая является более простой формой виртуализации, виртуализирует сервера, работающие в этой операционной системе.
Виртуализация -- очень широко используемый термин. В контексте этой статьи я имею в виду изменение платформы. Виртуализация платформы (или аппаратного обеспечения) означает, что аппаратное обеспечение абстрагируется от физической платформы в набор логических платформ, на которых могут быть запущены операционные системы. В простейшем смысле это означает, что вы можете запускать множество операционных систем (одного или разных типов) на одной и той же аппаратной платформе.
Элемент системы, который обеспечивает виртуализацию, обычно называется монитором виртуальной машины или гипервизором. Каждая операционная система использует свою собственную виртуальную машину, которая кооперируется с гипервизором для разделения доступа к физическому аппаратному обеспечению (см. Рисунок 2).
Рисунок 2. Гипервизор осуществляет разделение доступа к физическому аппаратному обеспечению
Подобно операционным системам методы виртуализации обширны и разнообразны.
coLinux — это порт стандартного ядра Linux. Иными словами, coLinux является ядром Linux, которое модифицировано для того, чтобы запускаться совместно с другой операционной системой. Базовая операционная система (Windows или Linux) осуществляет контроль за физическими ресурсами операционной системы, в то время как гостевая операционная система (coLinux) снабжена виртуальной абстракцией аппаратного обеспечения. Базовая операционная система должна обеспечить средства для работы драйверов на привилегированном уровне (уровень 0) и экспорт средств для выделения памяти (см. Рисунок 3).
Рисунок 3. coLinux работает как процесс базовой операционной системы
Корневая файловая система для coLinux представляет собой обычный файл внутри базовой операционной системы. По отношению к Windows это действительно обычный файл, а для coLinux это файловая система ext3, которая доступна для чтения и записи.
Другие элементы, необходимые ядру Linux, такие как доступ к сети или видео, ретранслируются извне. Работа с сетью для coLinux осуществляется через драйвер TUN/TAP (который описан ниже в разделе "Работа с сетью"). Вкратце, этот драйвер обеспечивает доступ пространства пользователей к устройству Ethernet таким образом, что пакеты могут быть переданы и получены. Доступ к дисплею также ретранслируется. Вспомните, что X Window System представляет собой протокол, с помощью которого видеовывод может быть послан с одного компьютера на другой. Поэтому при использовании сервера X Window System на базовой операционной системе видеовывод может быть перенаправлен на доступный Х сервер.
Теперь перейдем к инсталлированию coLinux и настройке сети и видео.
Инсталляция coLinux удивительно проста. В нее входит всего несколько шагов, в зависимости от того, что вы намереваетесь делать, но эти шаги несложные и они работали на моем Windows XP без единой проблемы. В этом разделе рассматривается инсталляция coLinux и запуск сервисов, таких как работа с сетью.
Первым шагом является загрузка дистрибутива coLinux. Зайдите на http://www.colinux.org и выберите Downloads из левого бокового меню. Если вы не попадете на SourceForge, выберите ссылку, чтобы попасть туда непосредственно. Около середины страницы находится пакет coLinux-stable. Загрузите исполняемый файл coLinux (в то время, когда я писал эту статью, это был файл coLinux-0.6.4.exe). Релиз coLinux 0.6.4 представляет собой ядро Linux 2.6.11. Когда файл загрузится, для инсталляции кликните по файлу дважды.
После обычного лицензионного соглашения вас спросят о том, какие компоненты вы хотите установить. Оставьте все как есть (следует выбрать все), включая загрузку образа корневой файловой системы. Чтобы впоследствии упростить ситуацию, измените папку назначения для инсталляции coLinux на c:\colinux\, так как colinux является стандартным инсталляционным подкаталогом с точки зрения конфигурационных файлов.
Когда программа инсталляции спросит вас про образ корневой файловой системы, выберите дистрибутив Debian, потому что он является наименьшим и занимает только 1GB. Выберите Install, чтобы провести инсталляцию и загрузить корневую файловую систему.
После завершения инсталляции вам необходимо выполнить еще несколько операций. Следующий шаг состоит в том, чтобы открыть папку инсталляционного подкаталога для распаковки корневой файловой системы.
Файл coLinux README содержит много дополнительной информации о других опциях инсталляции. Он находится в подкаталоге (c:\colinux). Там будет файл со странным именем, которое заканчивается на .bz2. Переименуйте этот файл в root_fs (это по умолчанию файл корневой файловой системы в конфигурации).
Теперь инсталляция coLinux, в основном, завершена. Вы можете запустить coLinux daemon для работы совместно с Windows XP следующим образом (активируя из окна Command Prompt):
$ colinux-daemon.exe -c default.colinux.xml |
После активации colinux-daemon на экран выводится окно загрузки (см. Рисунок 4). Оно дает ту же информацию, что и традиционная загрузка Linux. Обратите внимание на то, что coLinux загружается чрезвычайно быстро.
Рисунок 4. Окно загрузки coLinux
Также создается окно консоли (см. Рисунок 5), которое подсоединяется к colinux-daemon. Из этого окна вы можете входить в систему coLinux, чтобы взаимодействовать с оболочкой. По умолчанию имя пользователя и пароль root/root.
Рисунок 5. Виртуальная консоль coLinux (оболочка)
На Рисунке 5 вы можете видеть, что консоль coLinux состоит из двух частей: традиционной консоли и виртуальной консоли, которая предоставляет информацию о мониторе.
Поддержка работы с сетью в Linux при работе с coLinux производится, когда установка уже завершена. Вспомните, что драйвер TAP загружается в процессе инсталляции. Драйвер TAP — это драйвер пространства пользователей на устройстве Ethernet, управляемый базовой операционной системой. Драйвер TAP позволяет гостевой операционной системе читать или записывать необработанные Ethernet фреймы в виртуальное устройство Ethernet (расширенное на пространство пользователей). Затем виртуальное устройство Ethernet в пространстве пользователей перемещает Ethernet фреймы в и из реального устройства Ethernet в базовой операционной системе. Обратите внимание на то, что драйвер TAP перемещает Ethernet фреймы, в то время как драйвер TUN используется для фреймов IP (Internet Protocol).
Для того чтобы драйвер TAP работал, базовая операционная система должна обеспечить совместное использование имеющегося устройства Ethernet. Чтобы разрешить совместное использование внутри Windows XP, откройте панель сетевых подключений (Network Connections) с панели управления (Control Panel). Выберите активное подключение по локальной сети (local area connection) и затем откройте Cвойства (Properties). Выберите закладку Дополнительно (Advanced), и затем выберите кнопку, разрешающую пользователям сети подключаться через это интернет соединение компьютера (см. Рисунок 6).
Рисунок 6. Свойства подключения по локальной сети для активирования совместного использования сетевых устройств
После того как включен совместный доступ к сети, вы можете запустить coLinux и использовать сеть так, как вы ее используете обычно. Это показано на Рисунке 7 с использованием команды ping.
Рисунок 7. Совместное использование сетевого устройства прозрачно для coLinux благодаря TAP драйверу
С небольшими усилиями и конфигурированием coLinux дает возможность доступа к внешней сети. Для получения дополнительной информации о работе с сетью с помощью TUN/TAP просмотрите раздел Ресурсы.
Консольное окно прекрасно, а графический оконный менеджер будет идеальным. С помощью open source X сервера, такого как Xming, вы можете создавать xterm или использовать другие графические приложения с coLinux. Существует много документированных опций, таких как Virtual Network Computing (VNC), но я покажу вам, как использовать Xming.
Первым шагом является загрузка Xming с SourceForge. После инсталлирования вам необходимо обновить один файл X0.hosts в инсталляционном подкаталоге. Он содержит удаленные компьютеры, которым разрешен доступ на X сервер. Просто добавьте IP адрес машины, которая является хозяином процесса coLinux. Запустите сервер Xming X и coLinux и затем выполните следующие команды в coLinux:
colinux:~# export DISPLAY=192.168.1.3:0.0 colinux:~# xterm & |
Заметьте, что IP адрес, указанный здесь, является IP адресом базовой системы, на которой запущен coLinux. После того как вы выполните команду xterm, появится новое окно xterm, как показано на Рисунке 8.
Рисунок 8. xterm, созданный с помощью Xming
Какую бы корневую файловую систему вы ни загрузили, она все равно не будет содержать все, что вы бы хотели. Но вы легко можете расширить корневую файловую систему. Например, с помощью Debian GNU/Linux, вы можете использовать Advanced Packaging Tool (APT), систему управления пакетами, для инсталлирования новых пакетов программ или обновления существующих. Первым шагом будет обновление метаданных APT, которые содержат управляющую информацию об инсталлированных пакетах (включая только что появившиеся пакеты и информацию о том, где их получить):
$ apt-get update |
Теперь вы можете обновить вашу корневую файловую систему другими пакетами, которые вам необходимы. Например, если вы хотите добавить замечательный язык Ruby в вашу корневую файловую систему, то вы должны выполнить следующую команду:
$ apt-get install ruby |
Таким способом вы можете использовать существующую корневую файловую систему и подстраивать ее для ваших конкретных нужд. Вы также можете заново пересобрать coLinux из исходников, если в нем не хватает того, что вам нужно.
coLinux — это прекрасный способ для использования и экспериментирования с Linux. Так же как и Cygwin, он позволяет вам разворачивать и выполнять приложения Linux на операционной системе Windows (с помощью coLinux). Вы также можете поддерживать операционную систему Linux, инсталлируя, модернизируя или удаляя приложения с помощью apt-get.
Но, в отличие от Cygwin, вы можете выполнять Linux-приложения без пересборки. В этом отношении coLinux является реальной операционной системой Linux, которая запускается (или кооперируется) с операционной системой Windows.
Другим интересным преимуществом coLinux является его переносимость. Вы можете иметь дистрибутив coLinux с пользовательским набором приложений (внутри корневой файловой системы) на данном компьютере с Windows. Вы можете перенести корневую файловую систему на другой компьютер и перезапустить ее. Это позволяет создать мобильную платформу для разработки программ, где сжатая корневая файловая система подгоняется к стандартной Universal Serial Bus (USB) карте памяти.
В конечном счете, coLinux быстрый, потому что он по существу работает на родном аппаратном обеспечении.
Основным недостатком coLinux является то, что он способен привести к аварии всей машины (всех совместно работающих операционных систем), так как гостевая операционная система работает в привилегированном режиме в ядре базовой системы. Его нормальная работа также зависит от внешнего программного обеспечения (окна и поддержка работы с сетью). За исключением этого, его достаточно легко инсталлировать и настраивать. Я использовал его в течение многих часов и никогда не видел сбоя.
Хотя существует много виртуализационных схем, coLinux является новинкой как в подходе, так и в возможностях, которые он предоставляет. Сам по себе coLinux обеспечивает виртуализацию Linux поверх Windows. При добавлении некоторых других open source программных средств вы можете поддерживать полноценную систему Linux, укомплектованную сетью и графическим интерфейсом. coLinux не безупречен, но он представляет собой прекрасный путь к использованию Linux на стандартных персональных компьютерах под Windows.
Научиться
- Оригинал этой статьи на developerWorks.
- Web-сайт coLinux дает текущее состояние coLinux, open source кода, позволяющего дистрибутиву Linux работать под управлением Windows.
- coLinux wiki обеспечивает документацию и другие ресурсы для начала работы с coLinux.
- Статья Дана Алони (Dan Aloni) Кооперативный Linux (Cooperative Linux) (PDF) рассматривает некоторые низкоуровневые технические детали реализации coLinux.
- "Виртуальный Linux (Virtual Linux)" (developerWorks, декабрь 2006) рассматривает историю виртуализации и различные методы виртуализации для Linux.
- "Введение в виртуализацию (An Introduction to Virtualization)", написанное Амит Сайн (Amit Singh), является прекрасным введением в виртуализацию и ее различные полезные реализации. Кроме Linux, в этой статье рассматривается виртуализация других операционных систем (Windows, Solaris) и другие средства виртуализации (такие как виртуализация сетевого стека).
- TUN и TAP виртуальные сетевые драйверы ядра.
- Xen — это open source монитор виртуальной машины (гипервизор), разработанный XenSource. Xen использует то, что называется паравиртуализацией, которая обычно требует модификации гостевой операционной системы, однако Xen может использовать преимущества CPU с поддержкой виртуализации для запуска не модифицированных гостевых операционных систем.
- APT — это система управления пакетами из дистрибутива Debian Linux. Это очень хорошая утилита, чтобы поддерживать вашу систему на уровне современных требований.
- Найдите дополнительные ресурсы для разработчиков Linux в разделе Linux сайта developerWorks .
- Оставайтесь постоянно с developerWorks technical events and Webcasts.
Получить продукты и технологии
- Загрузите самый последний исходный код и бинарные файлы для coLinux с SourceForge.
- Загрузите самые последние драйверы TUN/TAP с SourceForge.
- KVM — новинка в виртуализации Linux. Это решение на базе модуля ядра, которое требует минимальных изменений в ядре Linux и загружается как модуль ядра. KVM обеспечивает виртуализацию гостевой операционной системы, но требует QEMU для ввода/вывода. Прочитайте о введении KVM в ядро 2.6.20.
- Cygwin — это еще один интересный эмулятор Linux, который работает под Windows. coLinux может использовать возможности X сервера, которые предоставляет Cygwin.
- Xming — это open source X windows сервер для окружения Microsoft Windows.
- Закажите SEK для Linux, комплект из двух DVD, содержащих последнее пробное программное обеспечение DB2®, Lotus®, Rational®, Tivoli® и WebSphere® для Linux.
- С помощью пробного программного обеспечения IBM, которое можно загрузить прямо с developerWorks, создайте вашу следующую разработку на Linux.
Обсудить
- Примите участие в обсуждении материала на форуме.
- Просмотрите developerWorks blogs и включитесь в сообщество developerWorks.
M. Тим Джонс (M. Tim Jones) является архитектором встраиваимого программного обеспечения и автором работ: Программирование Приложений под GNU/Linux, Программирование AI-приложений и Использование BSD-сокетов в различных языках программирования. Он имеет опыт разработки процессоров для геостационарных космических летательных аппаратов, а также разработки архитектуры встраиваемых систем и сетевых протоколов. Сейчас Тим работает инженером-консультантом в корпорации Эмулекс (Emulex Corp.) в г.Лонгмонт, Колорадо.