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 5.1.2 не используйте профили ALT Linux при создании виртуальных машин. Из списка их убрать сложно, поэтому просто не используйте.


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

Чтобы воспользоваться Virtualbox, необходимо установить следующий набор пакетов
  • virtualbox-версия программы
  • virtualbox-common-версия программы
  • virtualbox-doc-версия программы
  • kernel-modules-virtualbox-std-def-версия-программы-"номер_сборки_ядра" (нужен для хостовой ОС)
  • kernel-modules-virtualbox-addition-std-def-версия-программы-"номер_сборки_ядра" (не нужен для хостовой ОС)
  • virtualbox-guest-additions-версия программы (не нужен для хостовой ОС)
Пример

Пусть у вас стоит:

  • virtualbox-4.3.22-alt0.M70P.1

и ядро

  • kernel-image-std-def-3.14.35-alt1
Cмотрим модули virtualbox
  • kernel-modules-virtualbox-addition-std-def-4.3.22-alt1.200227.1 (можно удалить - вы не внутри Virtualbox)
  • kernel-modules-virtualbox-std-def-4.3.22-alt1.200227.1 (актуальное ядро, от актуальной версии VirtualBox)
  • kernel-modules-virtualbox-std-def-4.3.22-alt1.200225.1 (для старой версии ядра)
  • kernel-modules-virtualbox-std-def-4.3.14-alt1.200225.1 (от старого Virtualbox и старого ядра)
  • virtualbox-common-4.3.22-alt0.M70P.1 - Ок
  • virtualbox-doc-4.3.22-alt0.M70P.1 - Ок
  • virtualbox-guest-additions-4.3.22-alt0.M70P.1 - (не нужный пакет, если вы не внутри VirtualBox)/

При этом, они должны быть одной версии (4.3.22-alt0.M70P.1 в данном случае) а модули ядра, от текущего ядра. Кроме того, модуль ядра должен соответствовать сборочной ветки ядра (std-def в данном случае). Чтобы это обеспечить, ядро и пакеты необходимо устанавливать из одного и того же репозитория.

Если VirtualBox был недавно обновлён в репозитарии, а ядро Вы давно не обновляли, вероятно, что VB не будет работать с Вашим старым ядром. Вам придётся обновить ядро и/или модули. Это всё можно сделать утилитой update-kernel.

update-kernel

Примечание: подробнее смотри Обновление модулей ядра


Узнать версию загруженного ядра можно так
 $ uname -r 
 3.14.35-std-def-alt1
Если у вас в виртуальной машине (гостевая система) тоже 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

Если такого файла нет -- следует проверить наличие соответствующего загруженному ядру (тип и версия) пакета kernel-modules-virtualbox-* и

chkconfig virtualbox on
service virtualbox start
Проверяем список установленных пакетов
 $ rpm -qa | grep virtual-*
 kernel-modules-virtualbox-addition-std-def-4.3.22-alt1.200227.1
 virtualbox-doc-4.3.22-alt0.M70P.1
 kernel-modules-virtualbox-4.3.22-alt1.200227.1 (не нужен в гостевой машине, можно удалить)
 virtualbox-4.3.22-alt0.M70P.1 - (можно смело удалять, если вы не хотитке устраивать "матрёшки").
 virtualbox-guest-additions-4.3.22-alt0.M70P.1
 virtualbox-common-4.3.22-alt0.M70P.1
Включаем своего пользователя в группу vboxusers и vboxadd (это только для коммерческой сборки)
 gpasswd -a user vboxusers

или

 gpasswd -a user vboxadd
Для работы с usb устройствами необходимо настроить fstab
Примечание: в p7 и старше не надо

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

  none /proc/bus/usb/ usbfs  devgid=500,devmode=666 0 0 где devgid=идентификатор пользователя

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

Для работы usb в режиме usb2, надо скачать с сайта Страница загрузки VirtualBox и установить "Oracle VM VirtualBox Extension Pack"
После чего, можно запускать Virtualbox, например, в KDE из меню
K- Система — Виртуализатор Virtualbox.

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

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

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

Настройка загрузки Linux в гостевых машинах в режиме UEFI

Основная статья UEFI

Следует отметить, что NVRAM на виртуальном железе VirtualBox не переживает выключение экземпляра (это известная проблема). Т.е. установщик/efibootmgr не может добавить ссылку на grub, а если добавить её руками, она исчезнет при следующем запуске экземпляра.

Решение:

1-ый вариант выполнить в ещё загруженной системе

echo "fs0:\EFI\altlinux\grubx64.efi" > /boot/efi/startup.nsh

Или то же самое сделать потом, из EFI Shell:

echo "fs0:\EFI\altlinux\grubx64.efi" > fs0:\startup.nsh

2-ой вариант (подсмотрено в | VirtualBox (Русский) на wiki.archlinux.org

после установки системы:

  • Если существует файл /boot/efi/boot/BOOTX64.EFI дать ему другое имя
  • Скопировать /EFI/altlinux/grubx64.efi в /boot/efi/boot/BOOTX64.EFI

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

При запуске дистрибутивов на Седьмой платформе как гостевых ОС в 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

В гостевой ОС после выбора подсказки Установка или LiveCD чёрный экран и ничего не происходит.
  • Выбирите PIIX3, и при запуске установки (или загрузки с LiveCD) выберите клавишеей F5 загрузка "Без локального APIC"
VirtualBox1.jpg
В гостевой системе не работает звук
Откройте регулятор громкости PulseAudio (pavucontrol) и на вкладке «Проигрывание» включите звук для виртуальной машины.
Примечание: VirtualBox через PulseAudio позволяет настраивать вывод звука для каждой виртуальной машины. При этом включение для первой машины включает звук и для других запускаемых виртуальных машин


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

Установка 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.
Примечание: новые версии Virtualbox умеют устанавливать это расширение от обычного пользователя


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

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

  • USB 2.0 EHCI
  • VirtualBox Remote Desktop Protocol, VRDP
  • Intel PXE boot ROM с поддержкой контроллера E1000
  • экспериментальная поддержка «проброса» PCI с хост-системы
Если установлен и используется плагин Oracle Extension Pack , то обязательно обновить его до последней версии (скачать с virtualbox.org), иначе виртуальная машина начинает грузится и «схлопывается».[2]


Установка проприетарной сборки 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-у автоматом обновлять пакеты kernel-headers-* ("захолдить") эти пакеты


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

Если вы ставите пакеты с диска с дистрибутивом, то версии ядер и заголовков совпадают (если только в дистрибутив не вкралась досадная ошибка). Однако, если вы делали точечные обновления системы, или обновляетесь с нестабильных репозиториев, то версии ядра и заголовков могут не совпадать.
Проверьте версии. Если они не совпадают, то обновите свою систему, обновите индексы 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, а затем обновили ядро, то при следующем запуске 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-vboxvideo


Перед любыми операщиями с установкой модуля ядра, надо обновить ядро с помощью команд:
apt-get update
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. Для монтирования общих папок VirtualBox должен быть загружен модуль vboxsf
modprobe vboxsf
4. В гостевой операционной системе выполните
mount -t vboxsf <имя папки> /mnt
Внимание! Использование параметра -t в команде mount разрешено только пользователю root.


5. Общая папка становится доступна в /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. Идеологически правильно дождаться, пока мейнтейнер соберёт новую версию драйверов в дистрибутив.