Инструменты пользователя

Инструменты сайта


wiki:freebsd:virtualbox

Установка VirtualBox и phpvirtualbox на FreeBSD

Виртуализация KVM (Kernel-based Virtual Machine) на самой открытой и быстрой операционной системе FreeBSD - что может быть лучше? Для теста здесь используется ОС freebsd 13.2. Обращаем внимание на то, что периодически при попытке сразу после установки ОС собрать virtualBox из сырцов наблюдаются ошибки, вероятно связанные с обновлением портов. В этом случае следует использовать установку через pkg

#
#
 
pkg install virtualbox-ose

После установки ОСи обновляем устанавливаем порты и обновляем их.

# 
portsnap fetch extract
portsnap fetch update

Получаем свежие src ОС

# Получаем свежие сырцы

fetch -o /tmp/src.txz http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/`uname -r`/src.txz
cd /; tar xJvf /tmp/src.txz

Собираем VirtualBox и модули ядра для его работы

# Устанавливаем tmux
/usr/ports/sysutils/tmux
make install clean BATCH=yes
 
#
# Запускаем tmux
tmux
 
# 
# Порт virtualbox-ose будет компилироваться несколько часов, поэтому выполняем это в tmux
# Порт virtualbox-ose-kmod подтянется сам.
 
cd /usr/ports/emulators/virtualbox-ose
make install clean BATCH=yes I_DONT_CARE_IF_MY_BUILDS_TARGET_THE_WRONG_RELEASE=yes -j 8
cd /usr/ports/sysutils/lsof
make install clean BATCH=yes -j 8
 
 
# Добавляем модуль в загрузку
echo 'vboxdrv_load="YES"' >> /boot/loader.conf
# Загружаем модуль в память
kldload vboxdrv

Устанавливаем PhpVirtualBox

# Добавляем пользователя, от которого будут работать VM на сервере.
# Пароль сохраняем, он нам потребуется чуть позднее.
adduser vbox
pw groupmod vboxusers -m vbox
 
# Устанавливаем web-сервер nginx
pkg install -y nginx
 
# Устанавливаем PhpVirtualBox
cd /usr/ports/www/phpvirtualbox
make install clean BATCH=yes

Обращаю внимание, что php установится автоматом при установке phpvirtualbox

Конфигурируем VirtualHost для вебморды

# Копируем конфиг для php.ini
cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
# Добавляем ссылку на каталог ngnix/conf.d
sed -i.bak '$s/}/\tinclude conf.d\/\*\.conf;\r\n\r\n}/'  /usr/local/etc/nginx/nginx.conf
# Создаем директорию для добавления собственных конфигов NgiNX
mkdir /usr/local/etc/nginx/conf.d/

Далее нужно создать конфиг /usr/local/etc/nginx/conf.d/vbox.conf Укажите URL, по которому будет работать веб-морда phpVBox

vbox.conf
server {
  listen 80;
  server_name URL-URL;
  root /usr/local/www;
  error_log /var/log/nginx/vbox-error.log warn;
  access_log /var/log/nginx/vbox.log;
 
  location / {
    root /usr/local/www/nginx;
    index index.php index.html;
    try_files $uri $uri/ =404;
  }
 
  location /phpvirtualbox {
    index index.html;
    try_files $uri $uri/ =404;
  }
 
  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }
}

Включаем phpVirtualBox

# Добавляем в автозагрузку nginx и php-fpm
sysrc nginx_enable=YES
sysrc php_fpm_enable=YES
 
# Стартуем сервисы
service php-fpm restart
service nginx restart

Стартуем vboxwebserver

sysrc vboxwebsrv_enable=YES
sysrc vboxwebsrv_user="vbox"
/usr/local/etc/rc.d/vboxwebsrv start

Сразу проверим, работает ли он:

lsof -i :18083
 
COMMAND     PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
vboxwebsr 87849 vbox    8u  IPv6 0xfffffe003e89b0e0      0t0  TCP localhost:18083 (LISTEN)

Конфигурируем PhpVirtualBox

nano  /usr/local/www/phpvirtualbox/config.php
config.php
/* Username / Password for system user that runs VirtualBox */
var $username = 'vbox';                       /* Тут указываем имя пользователя */
var $password = 'Pa$$w0rD';                   /* Тут указываем пароль пользователя */
 
/* SOAP URL of vboxwebsrv (not phpVirtualBox's URL) */
var $location = 'http://localhost:18083/';    /* Тут меняем 127.0.0.1 на locahost */

Стартуем все сервисы и проверяем работу VirtualBox и Вебморды

sysrc vboxguest_enable=YES
sysrc vboxnet_enable=YES
 
service vboxnet start

Переходите на http://URL-URL/phpvirtualbox/ и начинайте настройку виртуальных машин. Пароль admin по дефолту admin.

PS Не работает в веб-интерфейсе выбор файла для монтирования

Если не работает в веб-интерфейсе выбор файла для монтирования, то действуем так:

$ vboxmanage list vms
"app" {5e261d64-68d0-4f20-92eb-82dadde4c54b}
$ vboxmanage storageattach "5e261d64-68d0-4f20-92eb-82dadde4c54b" --storagectl IDE \
  --port 0 --device 0 --type dvddrive --medium /home/vbox/iso/debian-11.6.0-amd64-netinst.iso 

Если потребовалось сменить hdd диск у виртуальной машины:

# Находим UUID нужного диска в этом списке:
vboxmanage list hdd $DISKUUID
# Находим UUID машины, в которой хотим сменить диск
vboxmanage list vms $VMUUID
"app" {5e261d64-68d0-4f20-92eb-82dadde4c54b}
"mysql" {f5d595f0-c8a0-4359-83f5-185083710a40}
# Меняем диск
vboxmanage storageattach $VMUUID --storagectl "SATA" --device 0 --port 0 --type hdd --medium $DISKUUID
[PHP Modules]
Core
date
hash
json
libxml
mysqlnd
openssl
pcre
Reflection
session
SimpleXML
soap
SPL
standard
xml
 
[Zend Modules]

Предупреждение о возможных багах после установки virtualbox

 
Troubleshooting:
================
 
Running VirtualBox as non-root user may fail with a fatal error
NS_ERROR_FACTORY_NOT_REGISTERED. In this case delete /tmp/.vbox-*-ipc file.
 
If you experience "Network: write Failed: Cannot allocate memory" errors
try to increase net.graph.maxdata in /boot/loader.conf
 
If you are using AIO, then increase these limits (https://bugs.freebsd.org/168298):
vfs.aio.max_buf_aio=8192
vfs.aio.max_aio_queue_per_proc=65536
vfs.aio.max_aio_per_proc=8192
vfs.aio.max_aio_queue=65536
To check if AIO is used use: kldstat -v | grep aio
 
If you are experiencing VMs freezes with an error in VBox.log such as:
"
00:01:29.590192 AssertLogRel /usr/ports/emulators/virtualbox-ose/work/VirtualBox-6.1.44
/src/VBox/VMM/VMMR3/PGMPhys.cpp(5148) int PGMR3PhysAllocateHandyPages(PVM): RT_SUCCESS(rc)
00:01:29.590221 87/128: idPage=0x3d400 HCPhysGCPhys=000000027eaed000 rc=VERR_NO_MEMORY
00:01:29.590247 Changing the VM state from 'RUNNING' to 'GURU_MEDITATION'
00:01:29.590261 Console: Machine state changed to 'GuruMeditation'
00:01:29.590695 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
00:01:29.590696 !!
00:01:29.590697 !!         VCPU0: Guru Meditation -8 (VERR_NO_MEMORY)
"
and see a lot of free RAM, then increase sysctl vm.max_user_wired
(https://bugs.freebsd.org/252227).
For dedicated VM servers, a good start is:
("RAM in GB" - max(1, "RAM in GB" / 32)) * 1024*1024*1024 / PAGE_SIZE
PAGE_SIZE on x86 is 4096.
Examples with different RAM sizes in GB:
 16: ( 16-max(1, 16/32)*1024*1024*1024/4096 = 3932160  =>  15GB
 32: ( 32-max(1, 32/32)*1024*1024*1024/4096 = 8126464  =>  31GB
 48: ( 48-max(1, 48/32)*1024*1024*1024/4096 = 12189696 =>  46.5GB
 64: ( 64-max(1, 64/32)*1024*1024*1024/4096 = 16252928 =>  62GB
128: (128-max(1,128/32)*1024*1024*1024/4096 = 32505856 => 124GB
256: (256-max(1,256/32)*1024*1024*1024/4096 = 65011712 => 248GB
 
When assigning IP addresses in host-only mode from ranges outside
of VirtualBox's defaults, the respective ranges need to be listed
in /usr/local/etc/vbox/networks.conf (https://bugs.freebsd.org/259399).
 
Check the wiki page for known issues and troubleshooting:
https://wiki.freebsd.org/VirtualBox
 
Please report any problems to emulation@. Thanks!
wiki/freebsd/virtualbox.txt · Последнее изменение: 2024/06/12 13:13 — Diman

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki