VirtualBox (устарело)

Материал из ALT Linux Wiki
Логотип Википедии
В Википедии есть обзорная статья по теме «VirtualBox».

VirtualBox — программный продукт виртуализации для операционных систем Microsoft Windows, DOS, GNU/Linux, Mac OS X и SUN Solaris/OpenSolaris. Программа была создана компанией Innotek с использованием исходного кода Qemu. Первая публично доступная версия VirtualBox появилась 15 января 2007 года. Существует две версии — свободная (OSE, англ. Open Source Edition), выпущенная под GNU GPL, и проприетарная (PUEL), различающиеся по функциональности; полнофункциональная проприетарная версия для личного использования распространяется бесплатно. В феврале 2008 Innotek был приобретён компанией Sun Microsystems, модель распространения VirtualBox при этом не изменилась.

Пакеты свободной версии VirtualBox есть в составе дистрибутивов ALT Linux, начиная с Desktop 4.1. При установке системы можно выбрать группу "Виртуализация" для установки Virtualbox по умолчанию.

Установка свободной версии VirtualBox из пакетов

Чтобы воспользоваться Virtualbox, необходимо установить следующий набор пакетов:

virtualbox-версия программы
virtualbox-common-версия программы
virtualbox-doc-версия программы
kernel-modules-virtualbox-std-def-версия программы
kernel-modules-virtualbox-addition-std-def-версия программы
virtualbox-guest-additions-версия программы

Пример:

kernel-modules-virtualbox-addition-std-def-4.1.4-alt0.M60P.196628.0.M60P.1
kernel-modules-virtualbox-addition-std-def-4.1.4-alt3.196654.0.M60P.1
kernel-modules-virtualbox-std-def-4.1.4-alt2.196654.0.M60P.1
virtualbox-4.1.4-alt0.M60P.1
virtualbox-common-4.1.4-alt0.M60P.1
virtualbox-doc-4.1.4-alt0.M60P.1
virtualbox-guest-additions-4.1.4-alt0.M60P.1

При этом, они должны быть строго одной версии (4.1.4 в данном случае) Модуль ядра должен быть строго версии для вашего ядра (std-def в данном случае). Чтобы это обеспечить, ядро и пакеты необходимо устанавливать из одного и того же репозитория. Узнать версию загруженного ядра можно так:

$ uname -r 
3.0.46-std-def-alt0.M60P.1

Если у вас в виртуальной машине (гостевая система) тоже ALTLinux, то можно установить в ней "дополнения гостевой системы":

kernel-modules-virtualbox-addition-std-def-версия программы
virtualbox-guest-additions-версия программы

Virtualbox использует для работы устройство:

$ ls -l /dev/vboxdrv
crw-rw---- 1 root vboxusers 10, 58 Май  5 08:46 /dev/vboxdrv

Проверяем список установленных пакетов:

$ rpm -qa | grep virtual-*
kernel-modules-virtualbox-addition-std-def-4.1.4-alt0.M60P.196628.0.M60P.1
virtualbox-doc-4.1.4-alt0.M60P.1
kernel-modules-virtualbox-std-def-4.1.4-alt2.196654.0.M60P.1
virtualbox-4.1.4-alt0.M60P.1
virtualbox-guest-additions-4.1.4-alt0.M60P.1
kernel-modules-virtualbox-addition-std-def-4.1.4-alt3.196654.0.M60P.1
virtualbox-common-4.1.4-alt0.M60P.1

Включаем своего пользователя в группу vboxusers и vboxadd

gpasswd -a user vboxusers
gpasswd -a user vboxadd (Slinux 3.0.46-std-def-alt0.M60P.1)

Для работы с usb устройствами необходимо настроить fstab:

1. В конец /etc/fstab добавляем

  none /proc/bus/usb/ usbfs  devgid=500,devmode=666 0 0 где devgid=идентификатор пользователя (Slinux 3.0.46-std-def-alt0.M60P.1)

2. Перезагружаем систему

После чего, можно запускать Virtualbox, например, в KDE из меню: K- Система — Виртуализатор Virtualbox.

Настройка сети в гостевой системе Virtualbox

Чтобы гостевая система получила доступ к подсети, в которой находится хост-система, можно поступить следующим образом:

Настроить в хост-системе туннель и бридж, как описано в пунктах 3.7 и 3.6 статьи Etcnet — соответственно, сначала необходимо запустить интерфейс туннеля tap0 а затем объединить его в мост с интерфейсом вашей физической сетевой карты (например, eth0). После того, как вы убедитесь, что сеть на хост-системе после этой настройки работает как и раньше, вы можете использовать туннель в Virtualbox: зайдите в свойства виртуальной машины, раздел "сеть" и выберите "Подсоединён к" — "Хост-интерфейс", а ниже, в поле "Хост-интерфейсы" выберите tap0. После этого, при загрузке, гостевая система получит доступ к той же подсети, что и хост-система, и будет выступать равноправным компьютером в сети со своим IP адресом. IP адрес и другие настройки интерфейсу следует назначать средствами гостевой системы.

Решение проблем

При запуске дистрибутивов на Седьмой платформе как гостевых ОС в VirtualBox после загрузки ядра показывается чёрный экран, в журнале пишется
Guest Log: BIOS: KBD: unsupported int 16h function 03
Для современных ядер, на которых основаны дистрибутивы Седьмой платформы, нужно указывать в настройках виртуальной машины Система  ⇒ Материская плата  ⇒ Чипсет: ICH9 (заодно там же включите IO APIC). По умолчанию в альтовом VirtualBox стоит PIIX3, что и является причиной указанного поведения.
При запуске гостевой ОС на Седьмой платформе VirtualBox показывает сообщение о не достаточных правах доступа для /dev/vboxdrv и просит запустить "/etc/init.d/vboxdrv setup" которого нет
  • Необходимо выполнить:
chkconfig virtualbox on
service virtualbox start
В гостевой системе не работает звук
Откройте регулятор громкости PulseAudio (pavucontrol) и на вкладке «Проигрывание» включите звук для виртуальной машины.
Примечание: VirtualBox через PulseAudio позволяет настраивать вывод звука для каждой виртуальной машины. При этом включение для первой машины включает звук и для других запускаемых виртуальных машин


Плохо работает микрофон в гостевой системе (заикается)
Всё дело в PulseAudio. Для того, чтобы микрофон работал без заиканий, для виртуальной машины выставьте ALSA: Аудио  ⇒ Аудиодрайвер: ALSA и выключите на время работы PulseAudio: в терминале
pulseaudio -k
Если служба virtualbox запускается, но модули не загружаются, отключите автозапуск службы virtualbox и создайте файл /etc/modules-load.d/virtualbox.conf такого содержания
vboxdrv
vboxpci
vboxnetflt
vboxnetadp

Установка Oracle Extension Pack

Свободная версия VirtualBox OSE позволяет использовать только USB 1.0, однако иногда необходимо использовать USB 2.0. Для корректной работы USB 2.0 в VirtualBox (на момент написания актуальной версией в репозитарии Sisyphus является VirtualBox 4.0.12) требуется Oracle VM VirtualBox Extension Pack. Его можно скачать с сайта Oracle [1]. Установку дополнения можно запустить из графического интерфейса или из командной строки:

# VirtualBox extpack install /path/to/Oracle_VM_VirtualBox_Extension_Pack-...vbox-extpack

Для установки дополнения необходимо запустить VirtualBox с правами администратора, иначе установка не удастся с ошибкой:

The installer failed with exit code 127: Error creating textual authentication agent:
Error opening current controlling terminal for the process (`/dev/tty'): No such device or address.

Если в системе установлена программа gksu или kdesudo, то VirtualBox попытается с их помощью поднять уровень привилегий для выполнения установки

На данный момент Oracle VM VirtualBox Extension Pack является единственным дополнением. Оно обеспечивает следующую функциональность:

  • USB 2.0 EHCI
  • VirtualBox Remote Desktop Protocol, VRDP
  • Intel PXE boot ROM с поддержкой контроллера E1000
  • экспериментальная поддержка «проброса» PCI с хост-системы

Установка проприетарной сборки VirtualBox

Также можно использовать закрытую бинарную сборку с сайта разработчиков программы.

Что потребуется для установки?

Во-первых, очевидно, потребуется файл с инсталлятором VirtualBox с официального сайта. На данный момент страница со ссылками на нужный файл находится по адресу: www.virtualbox.org/wiki/Linux_Downloads. Дистрибутивы All distributions i386 или All distributions AMD64 для 32-х или 64-х битной системы, соответственно.

Во-вторых, вам потребуется компилятор. Например, на момент написания этой статьи, нужен пакет gcc4.1, а также программа make. Кроме того, вам потребуется пакет kernel-headers-modules для вашего ядра.

Об установке заголовков для сборки модулей ядра

Для сборки модулей ядра, которые нужны для VirtualBox или VM Ware, в системе должен быть установлен пакет kernel-headers-modules той же версии, что и используемое ядро.

Посмотрите, какая версия ядра установлена у вас в системе. Например:

[alexei@threebears ~]$ uname -r
2.6.27-std-ll-alt7

Как видно, в системе установлено ядро 2.6.27-std-ll-alt7. То есть, для сборки модулей под него нужно установить пакет kernle-headers-modules-std-ll версии 2.6.27-alt7.

Проверить, установлен ли у вас такой пакет, можно так:

[alexei@threebears ~]$ rpm -qa | grep headers-modules
kernel-headers-modules-std-ll-2.6.27-alt7
kernel-headers-modules-std-def-2.6.27-alt7

Как видно, в данной системе он установлен.

Если в вашей системе этого пакета нет, установите его командой:

apt-get install kernel-headers-modules-std-ll

К вопросу о несогласованности версий

Если вы ставите пакеты с диска с дистрибутивом, то версии ядер и заголовков совпадают (если только в дистрибутив не вкралась досадная ошибка). Однако, если вы делали точечные обновления системы, или обновляетесь с нестабильных репозиториев, то версии ядра и заголовков могут не совпадать.

Проверьте версии. Если они не совпадают, то обновите свою систему, обновите индексы apt (через apt-get update или "получить сведения" в Синаптике) или установите то ядро, для которого есть заголовки.

Установка

Общий план действий:

  • скачайте дистрибутив в любое удобное место, например в /tmp
  • сделайте файл исполняемым
  • переключитесь в рута, и выполните файл
    • в процессе установки выберите какой-либо каталог, отличный от /usr, например /opt
  • запускайте VirtualBox от пользователя и работайте

Вот пример:

[alexei@threebears ~]$ cd /tmp
[alexei@threebears tmp]$ wget http://download.virtualbox.org/virtualbox/2.1.0/VirtualBox-2.1.0-41146-Linux_x86.run
.......<skip>.........
100%[======================================>] 41 050 695  1,54M/s   в 23s      
2008-12-27 16:15:16 (1,71 MB/s) - `VirtualBox-2.1.0-41146-Linux_x86.run?e=1230383984&h=ff5f79c0533f3b71dd384e4c47e696c9' сохранён [41050695/41050695]
[alexei@threebears tmp]$ mv ./VirtualBox-2.1.0-41146-Linux_x86.run\?e\=1230383984\&h\=ff5f79c0533f3b71dd384e4c47e696c9 ./VirtualBox-2.1.0-41146-Linux_x86.run   
[alexei@threebears tmp]$ chmod a+x ./VirtualBox-2.1.0-41146-Linux_x86.run 
[alexei@threebears tmp]$ ll ./VirtualBox-2.1.0-41146-Linux_x86.run 
-rwxr-xr-x 1 alexei user 41050695 Дек 27 16:17 ./VirtualBox-2.1.0-41146-Linux_x86.run
[alexei@threebears tmp]$ su -
Password: 
[root@threebears ~]# cd /tmp/
[root@threebears tmp]# ./VirtualBox-2.1.0-41146-Linux_x86.run 
Verifying archive integrity... All good.
Uncompressing VirtualBox for Linux installation.........
VirtualBox Version 2.1.0 (2008-12-17T10:57:49Z) installer
Removing previous installation of VirtualBox 2.1.0 from /opt/VirtualBox-2.1.0
Installing VirtualBox to /opt/VirtualBox-2.1.0
Building the VirtualBox kernel module
Building the VirtualBox netflt kernel module
VirtualBox has been installed successfully.
You will find useful information about using VirtualBox in the user manual
  /opt/VirtualBox-2.1.0/UserManual.pdf
and in the user FAQ
  http://www.virtualbox.org/wiki/User_FAQ
We hope that you enjoy using VirtualBox.

Всё, программа установлена. Теперь от пользователя можно вызывать команду VirtualBox.

Второй вариант установки — с бывшей страницы Virtualbox, созданной пользователем Becase:

Прекрасно работает VirtualBox_*_Linux_x86.run

Необходимо обязательно иметь и в хост и в гостевой системе такие пакеты (версии не важны, важно, чтобы они были одинаковы и для вашего рабочего ядра):

  • kernel-headers-common
  • kernel-headers-std-smp
  • kernel-headers-modules-std-smp

Установка аддона — отдельная песня, но весьма несложная.

Аддон необходимо распаковать рутом, например, так:

./VBoxLinuxAdditions.run --noexec --keep --target /root/VBoxInstall

В install.sh необходимо добавить в проверку версии xorg. Найдите строчки

7.1.* | 7.2.* )
           install -o 0 -g 0 -m 0644 vboxvideo_drv_71.so
$modules_dir/drivers/vboxvideo_drv.so
           install -o 0 -g 0 -m 0644 vboxmouse_drv_71.so
$modules_dir/input/vboxmouse_drv.so

И замените первую на

7.1.* | 7.2.* | 7.3.* )
           install -o 0 -g 0 -m 0644 vboxvideo_drv_71.so
$modules_dir/drivers/vboxvideo_drv.so
           install -o 0 -g 0 -m 0644 vboxmouse_drv_71.so
$modules_dir/input/vboxmouse_drv.so

А ещё, чуть выше, в строку

for dir in /usr/lib/xorg/modules /usr/X11R6/lib/modules; do

добавьте «наш» каталог для модулей

for dir in /usr/lib/X11/modules /usr/lib/xorg/modules /usr/X11R6/lib/modules; do

После чего, можно просто запускать install.sh (от рута) и перегружать гостевую ОС… всё работает :)

Что делать после обновления ядра

Если вы установили VirtualBox, а затем обновили ядро, то при следующем запуске VirtualBox вы получите такое сообщение:

[alexei@threebears ~]$ VirtualBox 
WARNING: The vboxdrv kernel module is not loaded. Either there is no module
         available for the current kernel (2.6.27-std-ll-alt7) or it failed to
         load. Please recompile the kernel module and install it by
           sudo /etc/init.d/vboxdrv setup
         You will not be able to start VMs until this problem is fixed.

Это означает, что для нового ядра не собран нужный модуль, и программа подсказывает вам, как поступить:

[alexei@threebears ~]$ su -
Password: 
[root@threebears ~]# service vboxdrv setup
Stopping VirtualBox kernel module                                       [ DONE ]
Removing old VirtualBox netflt kernel module                            [ DONE ]
Removing old VirtualBox kernel module                                   [ DONE ]
Recompiling VirtualBox kernel module                                    [ DONE ]
Starting VirtualBox kernel module                                       [ DONE ]

Установка «Дополнений гостевой ОС» для гостевого ALT Linux

1. Установите модуль ядра kernel-modules-virtualbox-addition-<тип ядра> и вспомогательные пакеты для интеграции:

apt-get install kernel-modules-virtualbox-addition-$(uname -r|cut -f2,3 -d-) virtualbox-guest-additions xorg-drv-virtualbox
Примечание: Если модуль ядра из репозитория слишком новый и потянул новое ядро, рекомендуется обновить ядро целиком со всеми модулями командой
update-kernel

2. Выберите в Центре управления системой  ⇒ Дисплей драйвер vboxvideo.

Примечание: Можно сделать это в командной строке (под правами root):
alterator-cmdline /x11 action write _objects driver driver vboxvideo


Примечание: Если пункта «Дисплей» нет в Центре управления системой, установите пакет alterator-x11

3. Перезагрузите гостевую систему или только сеанс

4. Включите в меню виртуальной машины:

  • Устройства  ⇒ Общий буфер обмена  ⇒ Двунаправленный
  • Устройства  ⇒ Drag'n'Drop  ⇒ Двунаправленный.

Общие папки

1. Установите в гостевой операционной системе дополнения гостевой операционной системы и virtualbox-guest-utils:

apt-get install kernel-modules-virtualbox-addition-$(uname -r | cut -d "-" -f2,3) virtualbox-guest-utils
Примечание: Этот пункт не нужен, если уже установлен пакет virtualbox-guest-additions, как описано выше.


2. Добавьте в свойствах виртуальной машины (раздел «Общие папки») папку. Для этого выберите путь и укажите имя папки (по умолчанию используется имя последней папки в указанном пути).

3. В гостевой операционной системе выполните

mount -t vboxsf <имя папки> /mnt
Примечание: Для монтирования под пользователем его нужно включить в группу vboxsf


4. Общая папка становится доступна в /mnt.

Краткая инструкция для установки дополнений вручную

Внимание! идеологически неправильное решение!!![1]
  • Запускаем гостевой Линукс, и удаляем пакеты:
xorg-drv-vboxvideo
  • Ставим пакет kernel-headers-modules для своего ядра.
  • В окне VirtualBox, в меню "Устройства", выбираем "Установить дополнения гостевой ОС".
  • В гостевом Линуксе заходим на CD-ROM, находим там файл VBoxLinuxAdditions-x86.run (-amd64.run для соответствующей архитектуры), копируем его в /tmp.
  • В гостевом Линуксе открываем терминал, переходим в нём в рута (командой su -) и выполняем команду:
chmod a+x /tmp/VBoxLinuxAdditions-x86.run
/tmp/VBoxLinuxAdditions-x86.run
  • Далее исполняется скрипт, который сам все распакует, скомпилирует и установит.
  • Убеждаемся, что в гостевом Линуксе xorg.conf прописаны драйвер vboxvideo для видео.
  • Перезагружаем виртуальную машину.
  • Наслаждаемся автоизменением размеров окна, и "незалипающей" мышкой.

Примечания

  1. Идеологически правильно дождаться, пока мейнтейнер соберёт новую версию драйверов в дистрибутив.