Виртуализация… виртуализация…
Сейчас все пытаются выжать из своих аппаратных ресурсов как можно больше. Иметь несколько отдельных компьютеров с различными ОС немного накладно и не все организации пойдут на это. Но выход есть, можно использовать виртуальные машины. И возможно, что многие используют для этих целей замечательный продукт от Sun «VirtualBox». Я уверен, что большинство для настройки используют GUI интерфейс, т.к. это очень наглядно и удобно. Но многие ли задумывались о возможности управления VirtualBox через консоль.
Была поставлена задача: На один сервер поставить две ОС (Ubuntu и Windows). При этом был работающий сервер под управлением Ubuntu 9.04 Server Edition. Поэтому было решено ставить Windows XP в качестве гостевой системы.
Но возникла проблема на Ubuntu НЕ УСТАНОВЛЕНА никакая графическая среда, т.е. там есть только голая консоль.
Итак, что у нас есть:
P.S. Windows XP была нужна только по одной причине. В проекте нужно было использовать MS SQL Server.
Иногда возникает необходимость запустить виртуальную машину на хосте без иксов. Я расскажу о том как это сделать, имея доступ к хостовой системе только по ssh + rdp (Remote Desktop Protocol). процесс я буду описывать для OC Ubuntu 9.10 в качестве хоста.
Начнем с установки VirtualBox.
Предварительно нужно установить пакет dkms (Dynamic Kernel Module Support Framework):
Sudo apt-get install dkms
На сайте предлагается 2 варианта: прописать источник пакетов (deb download.virtualbox.org/virtualbox/debian karmic non-free) в /etc/apt/sources.list либо скачать и установить deb-пакет. Когда я прописал источник и сделал sudo apt-get install virtualbox-3.1 у меня потянулась куча пакетов из зависимостей (в том числе и каких-то для GUI интерфейса). Поэтому лучше скачать deb-пакет. Качаем, устанавливаем:
Sudo dpkg -i virtualbox-3.1_3.1.0-55467_Ubuntu_karmic_i386.deb
Возможно тут также потребуются зависимости (какие-то библиотеки для парсинга xml, в котором хранятся конфиги, но их значительно меньше чем в первом случае). Если установка не завершилась из-за зависимостей, можно просто сделать
Sudo apt-get -f install
При этом установятся зависимости и VirtualBox
Ок. VirtualBox поставили. Начнем создавать guest-машины.
Создаем саму машину:
VBoxManage createvm --name ubuntu --ostype Ubuntu --register
(name - имя машины, ostype - тип системы. полный список всех типов можно узнать командой VBoxManage list ostypes)
Настраиваем
VBoxManage modifyvm ubuntu --memory 512 --floppy disabled --audio none --nic1 bridged --bridgeadapter1 eth0 --vram 4 --accelerate3d off --boot1 disk --acpi on --cableconnected1 on --usb off --vrdp on --vrdpport 3390
Тут с большего все понятно. в качестве типа сети можно указать также NAT (--nic1 nat). также включаем rdp
Создаем hdd диск для виртуальной машины:
VBoxManage createhd --filename /home/user/vbox/ubuntu.vdi --size 20000 --register
Добавляем контроллер IDE в нашу машину
VBoxManage storagectl ubuntu --name "IDE Controller" --add ide
Цепляем на IDE0 созданный ранее hdd
VBoxManage storageattach ubuntu --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium /home/user/vbox/ubuntu.vdi
На IDE1 цепляем установочный образ
VBoxManage storageattach ubuntu --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium /home/user/vbox/iso/ubuntu-9.10-alternate-i386.iso
Говорим машине грузиться с диска
VBoxManage modifyvm ubuntu --boot1 dvd
Запускаем машину
Для того чтобы поставить базовую систему воспользуемся rdp-клиентом (у меня KDE, в стандартную поставку входит KRDC). коннектимся на хостовую машину на порт, который указали в настройках (--vrdpport 3390), ставим систему, делаем sudo apt-get install openssh-server . теперь на виртуальную машину можно попасть по ssh
Останавливаем виртуальную машину
VBoxManage controlvm ubuntu acpipowerbutton
через acpi
Или более жестко
VBoxManage controlvm ubuntu poweroff
Говорим грузится с hdd
VBoxManage modifyvm ubuntu --boot1 disk
Можно также отцепить установочный диск
VBoxManage storageattach ubuntu --storagectl "IDE Controller" --port 1 --device 0 --medium none
И снова запускаем
Nohup VBoxHeadless --startvm ubuntu &
Еще полезные команды:
VBoxManage list runningvms
просмотр всех запущенных машин
VBoxManage showvminfo ubuntu
просмотр информации о виртуальной машине
Таким образом на одной машине с минимально установленной системой можно поднимать несколько виртуальных для различных целей и экспериментов
1.Создаем виртуальную машину с именем windows_xp
VBoxManage createvm --name windows_xp --regist er
Созданная виртуальная машина является XML файлом, который располагается в домашней директории /root/VirtualBox\ VMs/windows_xp/windows_xp.vbox
2. Далее нужно создать диск виртуальной машины
VBoxManage createhd --filename /date/VirtualBox/windows_xp.vdi --size 15000 --variant Fixe d
По умолчанию диск создается в домашней папке пользователя, мы создали диск windows_xp.vdi в диретроии /date/VirtualBox/ размером 15 гигабайт; размер фиксированный, т. е. его увеличение динамически не происходит.
3.Создаем контроллер виртуальных дисков
VBoxManage storagectl windows_xp --name "IDE Controller" --add ide --controller PIIX4
С помощью этой команды создается контроллер IDE с именем “IDE Controller”, тип контроллера – PIIX4.
4. Подключаем виртуальный диск к виртуальной машине:
VBoxManage storageattach windows_xp --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium /date/VirtualBox/windows_xp.vdi
5.Подключаем виртуальный образ ос которую хотим установить
VBoxManage storageattach windows_xp --storagectl "IDE Controller" --port 0 --device 1 --type dvddrive --medium /date/public/winxp_pro_eng_sp3.iso
6. Устанавливаем размер оперативной памяти для виртуальной машины 512мб
vboxmanage modifyvm windows_xp --memory 512
7. Устанавливаем тип системы VBoxManage modifyvm windows_xp --ostype WindowsX P
посмотреть все возможные ostype: VBoxManage list ostypes
8. Разрешаем подключаться к консоли по протоколу RDP
vboxmanage modifyvm windows_xp --vrde on
Чтобы удобней было управлять виртуалками нужно набор дополнений который включает USB 2.0 и встроенный RDP сервер. Скачиваем дополнения и устанавливаем: wget http://dlc.sun.com.edgesuite.net/virtualbox/4.2.12/Oracle_VM_VirtualBox_Extension_Pack-4.2.12-84980.vbox-extpack
VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.2.12-84980.vbox-extpack
9. Запускаем виртуальную машину
vboxheadless -s windows_xp или в фоне:
VBoxManage startvm windows_xp --type headless
чтобы запустить гостевую ОС на базовом компьютере с которым вы работаете через ssh, нужно использовать ключ –type=headless:
10. Подключаемся по RDP ip_servera и устанавливаем win_xp как обычно
11.Выключить машину можно так VBoxManage controlvm windows_xp poweroff
12.Монтируем диск VboxGuestAdditions
VBoxManage storageattach windows_xp --storagectl "IDE Controller" --port 0 --device 1 --type dvddrive --medium /usr/share/virtualbox/VBoxGuestAdditions.iso
Стартуем машину и устанавливаем VboxGuestAdditions
13. Подробную информацию о конкретной виртуальной ОС можно получить командой VBoxManage showvminfo windows_xp
14. С помощью этой команды создается сетевой интерфейс NIC типа «мост»
VBoxManage modifyvm windows_xp --nic1 bridged --bridgeadapter1 eth0
15. Если диск виртуальной машины нужно клонировать, то это делается с помощью утилиты VBoxManage:
VBoxManage clonehd /путь/откуда/копируем/image1.vdi /путь/куда/копируем/image2.vdi
После этого все замечательно подключается к новой виртуальной машине.
16.Создать расшаренную папку с сервером
vboxmanage sharedfolder add "windows_xp" --name share-name --hostpath /mnt
Подключить расшаренную папку из windows_xp выполнить
\\vboxsvr\share-name
Обычные пользователи VirtualBox могут не знать о той огромной силе, что таится в интерфейсе командной строки.
Обычно спрашивают: "Зачем работать в командной строке, когда у вас есть вполне хороший графический интерфейс?" Ответ - огромные возможности командной строки. С 1995 года существует целое поколение компьютерных пользователей, которые считают, что компьютер представляет собой набор окон и графики, но, в действительности, это очень далеко от истины. Почему, 1995 год, спросите вы? С появлением Windows 95 в 1995 году была открыта новая компьютерная эра — эра графических интерфейсов. Вскоре после того рокового августа был выпущен релиз FVWM95, который был ответом Linux на интерфейс Windows 95 Explorer. Мне кажется, что в те старые добрые времена командная строка исчезла навсегда. Никто не хотел больше пользоваться DOS и перестали бояться Linux. Но командной строки все еще жива и здравствует в среде Linux. Она все еще достаточно жива в Windows. И теперь, когда Маки базируются на Unix, в них также есть много чего, что не требует графического интерфейса.
Для вас может оказаться сюрпризом, что под миловидным графическим интерфейсом VirtuaBox , с его яркой графикой, понятной страницей настройки Settings и большим количеством выпадающих списков, притаился оккультный мир командной строки. Истинная сила этого темного мира откроется только тем, кто посмеет войти в эти затхлые катакомбы. После того, как вы разберетесь с командной строкой VirtualBox, вы, возможно, решите, что графический интерфейс — это чуть больше, чем просто красивая драпировка, созданная для тех, кто в противном случае будет просто игнорировать скучный черный прямоугольник реально работающего приложения.
Черный прямоугольник, о котором я говорил, является терминальным окном. Командная строка позволяет воспользоваться всей мощью автоматического исполнения команд. Единственный способ автоматизации, который известен мне в *nix системах, это использование скриптов, написанных на Perl-е, шелл-скрипты или скрипты на каком-нибудь другом языке. А демон системного планировщика (cron) поможет вам в нужное время запустить скрипт. Эта та сила командной строки, которая благодаря возможности автоматического запуска, что требует от системных администраторов также умения писать скрипты, является их багажом умения. В каждой вакансии, в которой требуется системный администратор, будет указано, что соискатель должен уметь писать скрипты хотя бы на одном из перечисленных в вакансии интерпретируемых языков.
Что касается виртуализации, то командная строка позволит вам быстро создавать виртуальные диски, добавлять новый сетевой интерфейс, запускать виртуальные машины и создавать новые виртуальные машины, причем все это — без использования графического интерфейса. Автоматическое выполнение с помощью скриптов также позволит вам спланировать запуск и остановку виртуальных машин без вашего непосредственного вмешательства. И, если вы действительно классный специалист по скриптам, вы сможете написать скрипт, который с помощью подсказок поможет вам с самыми минимальными вмешательствами с вашей стороны создать виртуальную машину, запустить ее или установить и изменить ее. Если вам не нравится все делать вручную, вы составите список виртуальных машин, используемых постоянно, затем настроите скрипты (шаблоны) для каждого типа используемых виртуальных машин и, при необходимости, в течение нескольких секунд создадите виртуальную машину.
Давайте рассмотрим простые и элегантные функциональные возможности командной строки в VirtualBox.
По ссылке VirtualBox Linux Downloads загрузите двоичный дистрибутив, предназначенный под вашу систему. Если хотите, то можете скачать исходный код. Для выбранного мною варианта (для RHEL5/CentOS5 в формате rpm) были созданы следующие директории:
Если в вашем дистрибутиве нет последней версии VirtualBox (версия 3.1.2 на момент написания данной статьи), то воспользуйтесь одним из пакетов, который можно загрузить, либо загрузите исходный код.
Самое трудное при использовании командной строки это — знать, с чего начинать. В графическом интерфейсе нужно воспользоваться кнопкой New. Командная строка немного сложнее открывает свои тайны. Для того, чтобы создать и настроить новую виртуальную машину, вы должны открыть терминальное окно, либо воспользоваться сеансом ssh для доступа к Linux системе, на которой установлен VirtualBox, и выполнить следующую команду:
$ /usr/bin/VBoxManage createvm --name Debian5 –register
С помощью этой команды создается новая виртуальная машина с именем Debian5, которая регистрируется в VirtualBox. Созданная виртуальная машина является XML файлом, который располагается в домашнем директории ~/.VirtualBox/Machines/Debian5/Debian5.xml .
Создаем виртуальный диск для вашей виртуальной машины:
$ /usr/bin/VBoxManage createhd --filename Debian5.vdi --size 4000 --variant Fixed
Вы создали виртуальный диск с именем Debian5.vdi размером в 4 Гбайта (4000 Мбайтов); размер фиксированный, т. е. его увеличение динамически не происходит.
Виртуальный диск создается в виде файла ~/.VirtualBox/HardDisks/Debian.vdi
Создайте контроллер дисковых устройств, к которому вы подсоедините виртуальный диск и виртуальное устройство CD/DVD
$ /usr/bin/VBoxManage storagectl Debian5 --name "IDE Controller" --add ide --controller PIIX4
С помощью этой команды создается контроллер IDE с именем “IDE Controller”, тип контроллера - PIIX4.
Теперь подсоединим виртуальный диск к вашей виртуальной машине:
$ /usr/bin/VBoxManage storageattach Debian5 --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium Debian5.vdi
Подсоединяем образ ISO той операционной системы, которую вы хотите установить:
$ /usr/bin/VBoxManage storageattach Debian5 --storagectl "IDE Controller" --port 0 --device 1 --type dvddrive --medium /ISO/debian-40r3-i386-netinst.iso
Настраиваем сеть:
$ /usr/bin/VBoxManage modifyvm Debian5 --nic1 bridged --cableconnected1 on --bridgeadapter1 eth0
С помощью этой команды создается сетевой интерфейс NIC типа "мост" (bridge): кабель подключается при запуске системы Linux, адаптер - eth0.
Запускаем виртуальную машину:
$ /usr/bin/VBoxManage startvm Debian5
Если все пойдет так, как планировалось, вы увидите следующее сообщение, а затем вы увидите окно виртуальной машины, готовое для инсталляции:
Waiting for the remote session to open... Remote session has been successfully opened.
Вы видите, что создание и настройка виртуальной машины в командной строке освобождает вас от бесконечных щелканий кнопками мыши и раскрывает целый мир новых возможностей автоматизации виртуальных машин. И мы здесь не углублялись, но надеюсь, изложенное пробудит в вас любопытство и подвигнет вас на освоение той огромной силы, которой обладает командная строка.
Иногда возникает необходимость запустить виртуальную машину на хосте без иксов. Я расскажу о том как это сделать, имея доступ к хостовой системе только по ssh + rdp (Remote Desktop Protocol). процесс я буду описывать для OC Ubuntu 9.10 в качестве хоста.
Начнем с установки VirtualBox.
Предварительно нужно установить пакет dkms (Dynamic Kernel Module Support Framework):
Sudo apt-get install dkms
На сайте предлагается 2 варианта: прописать источник пакетов (deb download.virtualbox.org/virtualbox/debian karmic non-free) в /etc/apt/sources.list либо скачать и установить deb-пакет. Когда я прописал источник и сделал sudo apt-get install virtualbox-3.1 у меня потянулась куча пакетов из зависимостей (в том числе и каких-то для GUI интерфейса). Поэтому лучше скачать deb-пакет. Качаем, устанавливаем:
Sudo dpkg -i virtualbox-3.1_3.1.0-55467_Ubuntu_karmic_i386.deb
Возможно тут также потребуются зависимости (какие-то библиотеки для парсинга xml, в котором хранятся конфиги, но их значительно меньше чем в первом случае). Если установка не завершилась из-за зависимостей, можно просто сделать
Sudo apt-get -f install
При этом установятся зависимости и VirtualBox
Ок. VirtualBox поставили. Начнем создавать guest-машины.
Создаем саму машину:
VBoxManage createvm --name ubuntu --ostype Ubuntu --register
(name - имя машины, ostype - тип системы. полный список всех типов можно узнать командой VBoxManage list ostypes)
Настраиваем
VBoxManage modifyvm ubuntu --memory 512 --floppy disabled --audio none --nic1 bridged --bridgeadapter1 eth0 --vram 4 --accelerate3d off --boot1 disk --acpi on --cableconnected1 on --usb off --vrdp on --vrdpport 3390
Тут с большего все понятно. в качестве типа сети можно указать также NAT (--nic1 nat). также включаем rdp
Создаем hdd диск для виртуальной машины:
VBoxManage createhd --filename /home/user/vbox/ubuntu.vdi --size 20000 --register
Добавляем контроллер IDE в нашу машину
VBoxManage storagectl ubuntu --name "IDE Controller" --add ide
Цепляем на IDE0 созданный ранее hdd
VBoxManage storageattach ubuntu --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium /home/user/vbox/ubuntu.vdi
На IDE1 цепляем установочный образ
VBoxManage storageattach ubuntu --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium /home/user/vbox/iso/ubuntu-9.10-alternate-i386.iso
Говорим машине грузиться с диска
VBoxManage modifyvm ubuntu --boot1 dvd
Запускаем машину
Для того чтобы поставить базовую систему воспользуемся rdp-клиентом (у меня KDE, в стандартную поставку входит KRDC). коннектимся на хостовую машину на порт, который указали в настройках (--vrdpport 3390), ставим систему, делаем sudo apt-get install openssh-server . теперь на виртуальную машину можно попасть по ssh
Останавливаем виртуальную машину
VBoxManage controlvm ubuntu acpipowerbutton
через acpi
Или более жестко
VBoxManage controlvm ubuntu poweroff
Говорим грузится с hdd
VBoxManage modifyvm ubuntu --boot1 disk
Можно также отцепить установочный диск
VBoxManage storageattach ubuntu --storagectl "IDE Controller" --port 1 --device 0 --medium none
И снова запускаем
Nohup VBoxHeadless --startvm ubuntu &
Еще полезные команды:
VBoxManage list runningvms
просмотр всех запущенных машин
VBoxManage showvminfo ubuntu
просмотр информации о виртуальной машине
Таким образом на одной машине с минимально установленной системой можно поднимать несколько виртуальных для различных целей и экспериментов