В нынешнем IT сообществе все чаще звучит слово “виртуализация”. Как крупные компании типа Microsoft, так и небольшие представили свои решения по работе с виртуальными компьютерами. Одним из таких решений является линейка программ от компании VMWare. Среди интересных возможностей этих продуктов нельзя не отметить возможность работать напрямую с жестким диском вашего компьютера в виртуальной среде, что может использоваться, к примеру, для запуска второй операционной системы с вашего компьютера.
Все дальнейшее относится к Debian 5.0 “Lenny”
Но, так как большинство дистрибутивов вполне похоже, то это должно подходить как к потомкам Debian (Ubuntu, Runtu , Mephis), так и к другим (типа Gentoo, Fedora). Вопросы установки на физический диск, равно и как вопрос установки самих ОС оставим на усмотрение читателя. Это в принципе не представляет сложности и доступно пользователю. К тому же все современные дистрибутивы уже обзавелись красивыми графическими установщиками, которые еще сильнее упрощают жизнь неподготовленным пользователям.
После установки ОС следует поставить некоторые пакеты, улучшающие производительность при запуске в виртуализированной среде VMWare. Нам требуются open-vm-tools, open-vm-source, open-vm-toolbox . Последнее ставим только если вам нужна графическая утилита для управления гостевой ОС.
aptitude install open-vm-tools open-vm-source
В комплекте с этими утилитами есть небольшая программа , которая проверяет, запущена ли ОС внутри VMWARE или на реальном железе. Например ее вывод может быть таким:
vmware-checkvm
VMware software version 6 (good)
Но при попытке запуска самих утилит ловим ошибку:
/etc/init.d/open-vm-tools start
Loading open-vm-tools modules: vmhgfsFATAL: Module vmhgfs not found.
vmmemctlFATAL: Module vmmemctl not found.
vmsyncFATAL: Module vmsync not found.
.
Starting open-vm guest daemon: vmware-guestd.
Чтобы собрать модули ядра, необходимые для работы, требуется поставить пакет module-assistant .
aptitude install module-assistant
И соберем с помощью него необходимые модули ядра:
m-a a-i open-vm
На вопросы о установке необходимых пакетов, отвечаем утвердительно “Y”
Перезапустим демон утилит и порадуемся загруженным модулям:
/etc/init.d/open-vm-tools restart
Stopping open-vm guest daemon: vmware-guestd.
Removing open-vm-tools modules: vmhgfs vmmemctl vmsync.
Loading open-vm-tools modules: vmhgfs vmmemctl vmsync.
Starting open-vm guest daemon: vmware-guestd.
Теперь у нас настроены основные драйвера для гостевой OS.
При просмотре стартового скрипта VM Tools видно, что перед запуском драйверов и утилит от VMWARE идет проверка запущено ли все на реальном или виртуальном железе. Соответственно при запуске вне виртуальной машины (при нормальном запуске) скрипты не отработают и не будут мешать нормальной работе.
Остается проблема смены имени сетевого интерфейса, которая решается небольшой правкой конфигурационых файлов демона udev.
Для начала следует узнать мак адреса сетевых карт (реальной и виртуальной) с помощью ifconfig (или другим удобным вам способом).
ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:40:10:d5
inet addr:192.168.136.128 Bcast:192.168.136.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe40:10d5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:26188 errors:0 dropped:0 overruns:0 frame:0
TX packets:12926 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:34105677 (32.5 MiB) TX bytes:1144113 (1.0 MiB)
Interrupt:19 Base address:0x2000
В данном случае имя интерфейса eth0 и он имеет MAC адрес 00:0c:29:40:10:d5. При запуске в другом окружении естественно адрес будет другим ( и имя интерфейса тоже). После того как мы получили список нужных нам адресов самое время заглянуть в папку /etc/udev/rules.d/ :
ls /etc/udev/rules.d/
50-udev.rules 75-cd-aliases-generator.rules
60-persistent-input.rules 75-persistent-net-generator.rules
60-persistent-storage.rules 80-drivers.rules
60-persistent-storage-tape.rules 91-permissions.rules
60-persistent-v4l.rules 95-late.rules
70-persistent-cd.rules z60_xserver-xorg-input-wacom.rules
70-persistent-net.rules
Самое интересное для нас хранится в файле 70-persistent-net.rules. Это строки вида:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:40:10:d5", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
Соответственно указав две строки с одинаковыми именами интерфейсов и разными MAC адресами, соответвующие определеным устройствам вашей реальнойвиртуальной сети мы вне зависимости от того как запущена ОС будет получать одни и теже адреса. Трудности могут возникнуть в связи с тем что в правилах в файле 75-persistent-net-generator.rules зачемто указано игнорировать интерфейсы VMWARE. Это можно обойти двумя методами на мой взгляд:
1. Комментирование строки ENV{MATCHADDR}==”00:0c:29:*|00:50:56:*”, ENV{MATCHADDR}=”” чтобы для виртуальных карт создавались правила ( обычно этого не происходит). 2. Изменение в конфигурационном файле *.vmx к примеру строк с
ethernet0.addressType = "generated"
ethernet0.generatedAddress = "00:0c:29:ee:30:5a"
ethernet0.generatedAddressOffset = "0"
на
ethernet0.addressType="static"
ethernet0.Address = "00:0c:29:40:10:d5"
При этом первые три числа вероятно надо будет сделать отличными от 00:0c:29:*|00:50:56:*. (Не знаю правда к чему может привести смена стандартных мак адресов для виртуальной сетевухи). Или можно комбинировать оба метода. Закомментировав строчку не создающую строчку в конфиге udev и вписав статический мак адрес для сетевой карты ( тогда адрес желательно начинать с 00:50:56:).
Заключение
Как видно настроить ваше операционную систему на работу в двух разных окружениях не составляет большого труда. И к тому же можно не использовать стандартные vmware-tools идущие в комплекте с программой, а полностью перейти на открытую версию, что упрощает дальнейшие обновления системы, т.к. не приходится следить за совместимоситью вручную, за вас это сделали мейнтейнеры ОС.