воскресенье, 10 мая 2020 г.

Centos 7 + VirtualBox + phpvirtualbox

Исходные данные: 

Для работы существующей VM нужно подготовить удобное и теплое место на основе CentOS. Поскольку VM уже живет в среде virtualbox, эту среду и организуем. Краеугольным камнем является phpVirtualbox, последняя версия "заточена" под virtualbox-5.0

Шпаргалка:
phpvirtualbox (старый, авторский, есть еще свежий форк, - его искать на по ссылке на virtualbox.org) - https://sourceforge.net/projects/phpvirtualbox/
phpVirtualBox installation on Debian Linux and Apache2 web server - https://linuxconfig.org/phpvirtualbox-installation-on-debian-linux-and-apache2-web-server
Установка VirtualBox с PhpVirtualBox на CentOS 7 - https://voipnotes.ru/blog/install-virtualbox-with-phpvirtualbox-on-centos-7/ - наиболее нам близко.
Виртуализация с использованием Ubuntu Server 16.04 и pHpVirtualBox 5.0.5 - https://habr.com/ru/post/319286/ - еще один прекрасный пример

На момент написания phpvirtualbox поддерживал только 5.0 версии virtualbox-а (который родной, упомянутый выше форк выглядит "немного сырым", но он поддерживает 5.2 на Centos7, относительно Centos 8 - никаких упоминаний). Проверено, с 5.2 "родной" не работает - изменилась структура данных, не может даже получить список VM. Установка virtualbox версии 5.0.x на CentOS 8 так же оказалась занятием не из легких (нет поддержки соотв. ядер в dkms, теоретически можно скомбинировать нечто среднее из 5.2 и 5.0, но может и...). С практической точки зрения проще поставить CentOS 7 + virtualbox-5.0, а сэкономленные силы направить на избавление от virtualbox  в принципе (одна мутная лицензия на ext. pack этого требует!).

В /etc/selinux/config ставим
SELINUX=disabled
И ПЕРЕЗАГРУЖАЕМСЯ (можно создать примерно 5 правил... но что-то лень)

На новой голой системе
yum install screen mc wget
Теперь собственно virtualbox.
cd /etc/yum.repos.d/
wget http://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo
cd
wget www.virtualbox.org/download/oracle_vbox.asc
rpm -import oracle_vbox.asc
yum search virtualbox
покажет 6 разных версий. Выбираем и устанавливаем 5.0
yum install VirtualBox-5.0.x86_64
Теперь нам нужно поставить исходники ядра чтоб пересобрать модули (что бы было этого не сделать заранее - ядра в зависимостях virtualbox чего-то нет...). Ну и php+httpd заодно.
yum install httpd php php-devel php-common php-soap php-gd
yum groupinstall 'Development Tools'
yum install SDL kernel-devel kernel-headers
/sbin/rcvboxdrv setup ожидаемо выдает ошибку.
вот тут - https://superuser.com/questions/499059/unable-to-install-virtualbox-specify-kern-dir-directory-installing-vir
можно почерпнуть мудрости.
Например помогает обновление
после успешного завершения
/sbin/rcvboxdrv setup
проверяем
vboxmanage list vms
должен просто завершаться без ошибок.

Теперь extantion pack (в нем RDP)
cd
wget http://download.virtualbox.org/virtualbox/5.0.40/Oracle_VM_VirtualBox_Extension_Pack-5.0.40-115130.vbox-extpack
vboxmanage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.0.40-115130.vbox-extpack

Очистка...
rm *vbox*

Добавим юзера
useradd vbox -g vboxusers -m -N
и пароль ему зададим отдельно
paaswd vbox

В каталоге /etc/default создадим файл virtualbox и пропишем нашего юзера, от имени которого будет работать "родной" web-сервис
VBOXWEB_USER=vbox
LOAD_VBOXDRV_MODULE=1
SHUTDOWN=poweroff
Обязательна только первая строка, но опыт *buntu рекомендует и остальные две.

Наконец скачиваем phpvirtualbox-5.0.x по ссылке https://sourceforge.net/projects/phpvirtualbox/files/phpvirtualbox-5.0-5.zip/download
разворачиваем архив в /var/www/html/vbox
копируем
cp config.php-example config.php
и вносим в него имя (vbox) и пароль, боле ничего.

Немножко настраиваем httpd (если раньше сервер не был настроен)
в /etc/httpd/conf/httpd.conf прописываем Listen...  ServerName...
меняем владельца
cd /var/www
chown -R apache:apache html
Запускаем все
systemctl enable vboxweb-service
systemctl start vboxweb-service
systemctl start httpd.service
systemctl enable httpd.service
И местный firewall будем считать низложенным
systemctl disable firewalld
systemctl stop firewalld
Ну по адресу/vbox должно быть...