Недавно я обновил автономный сервер до Ubuntu Server 15.10.
Я установил virtualbox 5.0.14 из исходных кодов Ubuntu по умолчанию. Я скачал и установил virtualbox/5.0.14/Oracle_VM_VirtualBox_Extension_Pack-5.0.14-105127.vbox-extpack
Я определил пользователя vbox
в группе vboxusers
, и в основном сам Virtualbox работает нормально. Но я хочу, чтобы его можно было настраивать удаленно с помощью phpvirtualbox.
Я скачал и установил phpvirtualbox-5.0-5.zip
Я добавил VBOXWEB_USER=vbox
в файл /etc/default/virtualbox
.
При посещении веб-страницы с другого компьютера я получил ошибку Could not connect to host
(см. msg1 и с более подробной информацией в msg2 , хотя, я думаю, это не очень важно). . [тысяча сто сорок четыре]
Используя sudo netstat -peanut
, выглядело, как будто vboxwebsrv не использовал правильный IP-адрес. Он показал местный адрес как ::1:18083
вместо ожидаемого 192.168.1.12:18083
.
После некоторого поиска, я добавил VBOXWEB_HOST=192.168.1.12
в файл /etc/default/virtualbox
, но после перезапуска службы все еще не изменился.
Однако, если я остановил службу с sudo systemctl stop vboxweb.service
и запустил ее вручную с sudo vboxwebsrv -H 192.168.1.12
, это работало нормально. sudo netstat -peanut
теперь сообщил об этом с ожидаемым IP / адресом порта.
Большая часть документации, на которую я смотрел, ссылалась на init.d, и я начал думать, что, возможно, systemd не использует файл /etc/default/virtualbox
... Я обнаружил, что могу редактировать файл /lib/systemd/system/vboxweb.service
, и добавил -H 192.168.1.12
] к команде ExecStart
. После перезапуска службы vboxweb все заработало! : o)
Включил службу, чтобы она автоматически запускалась во время загрузки:
sudo systemctl enable vboxweb.service
Но после перезагрузки vboxweb вообще не показывался в sudo netstat -peanut
, хотя ps -ef показал, что служба запущена:
$ ps -ef
root 1383 1 0 mars02? 00:00:00 / usr / lib / virtualbox / vboxwebsrv --pidfile /run/vboxweb.pid --background -H 192.168.1.12 -p 18083
Перезапуск службы исправит это , но он не будет корректно отображаться после перезагрузки.
Так что я подумал, что, возможно, vboxweb.service был запущен слишком рано в процессе инициализации systemd. Поэтому я снова отредактировал файл vboxweb.service
с помощью After=apache2.service
(а позже также попытался After=multi-user.target
) и проверил с помощью systemd-analyse plot
, что инициализация vboxweb действительно была перенесена в самый конец последовательности инициализации. Но все же, wboxweb не был указан в netstat -peanut
Итак, наконец, к моим вопросам:
PS: я знаю, что мог бы значительно сократить этот пост и просто оставить основной вопрос здесь, так как я решил остальное (оставив только пару вопросов), но я подумал, что другим будет интересно посмотреть как я работал над этой проблемой.
BR, Рольф
Еще после некоторого поиска с помощью Google и небрежно обращания, я наконец предложил решение:
1) Я пришел к заключению что /etc/defaults/virtualbox
файл, казалось, ни на что не имел эффекта (просто остаток с init.d дней?). Таким образом, настройки пользователя и группы в том файле были потрачены впустую.
Решение: добавленный User=vbox
и Group=vboxusers
в [Service]
раздел vboxweb.service
файл.
2) Некоторые проблемы, которые я имел, происходили из-за vboxweb.config
файл, относящийся к изодромному с предварением файлу в /run
папка, и vbox
не имеет никакого доступа для записи к той папке. Сначала я пытался сделать подпапку, принадлежавшую vbox
, в котором можно хранить изодромный с предварением файл, но я узнал что /run
папка вытерта во время начальной загрузки, включая все подпапки.
Решение: Созданный подпапка в vbox
homedir, и обновленный vboxweb.config
файл с тем местоположением.
3) По некоторым причинам (который все еще ускользает от меня), относясь к фактическому IP-адресу, 192.168.1.12, в config.php
(в phpvirtualbox
папка) и в vboxweb.config
файл (как упомянуто в исходном сообщении), не работал во время начальной загрузки. (Более поздний перезапуск сервиса работал бы все же.)
Решение: Обновленный оба config.php
и vboxweb.config
с IP-адресом 127.0.0.1 вместо 192.168.1.12.
Случай закрывается!: o)... независимо для всех вопросов о том, почему вещами является способ, которым они, но я могу жить с этим: o)
BR, Rolf
ответ rolfhsp действительно полезен.
Кроме того, если vboxweb.service
изменяется для выполнения как некоторый другой пользователь, который не является корнем, другой отказ произошел бы. В этой ситуации причина зарегистрирована, как "Отказавший открыть “/dev/vboxdrvu”, errno=13, rc=VERR_VM_DRIVER_NOT_ACCESSIBLE", что означает, что у пользователя нет разрешения получить доступ /dev/vboxdrvu
.
По умолчанию, /dev/vboxdrvu
наряду с /dev/vboxnetctl
и /dev/vboxdru
все разрешены для корня только (crw-------
). чтобы некорневые пользователи получили доступ к нему, разрешение должно быть изменено. Согласно этому блогу, это заархивировано путем простого помещения файла "правил" в/lib/udev/с содержанием ниже:
/lib/udev/rules.d/20-virtualbox2.rules:
KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"
KERNEL=="vboxdrvu", NAME="vboxdrvu", OWNER="root", GROUP="vboxusers", MODE="0660"
KERNEL=="vboxnetctl", NAME="vboxnetctl", OWNER="root",GROUP="vboxusers", MODE="0660"
Затем перезапустите систему, после того, как перезагрузка, те файлы будут иметь новые полномочия:
crw-------. 1 root root 10, 54 Mar 20 00:24 /dev/vboxdrv
crw-rw----. 1 root vboxusers 10, 53 Mar 20 00:24 /dev/vboxdrvu
crw-rw----. 1 root vboxusers 10, 52 Mar 20 00:24 /dev/vboxnetctl
Хотя vboxdru
все еще неизменно, vboxdrvu
уже имеет хорошее разрешение для некорневого (в vboxusers
группа) к доступу. После этой модификации, vboxweb.service
мог быть выполнен некорневым пользователем успешно.
В моей версии установки были некоторые встроенные ошибки в службах:
$ dpkg -l | grep -i virtualbox
ii virtualbox 6.1.10-dfsg-1~ubuntu1.20.04.1 amd64 x86 virtualization solution - base binaries
ii virtualbox-dkms 6.1.10-dfsg-1~ubuntu1.20.04.1 amd64 x86 virtualization solution - kernel module sources for dkms
ii virtualbox-qt 6.1.10-dfsg-1~ubuntu1.20.04.1 amd64 x86 virtualization solution - Qt based user interface
Плюс вы должны определить хотя бы один параметр согласно этому:
В Linux веб-службу можно запустить автоматически во время загрузки хоста, добавив соответствующие параметры в файл /etc/default/virtualbox. Существует один обязательный параметр, VBOXWEB_USER, который должен быть установлен для пользователя, который позже запустит виртуальные машины.
Предположим, что этим пользователем является pjfinn
. Вот исправление/моды.
Добавьте пользователя в группу vboxusers
:
$ sudo usermod -a -G vboxusers pjfinn
Создайте каталог run
в домашней папке pjfinn
:
$ mkdir /home/pjfinn/run
Затем примените следующие исправления.
Патч № 1:
*** /etc/default/virtualbox-orig 2020-12-07 17:02:51.567517505 +0100
--- /etc/default/virtualbox 2020-12-07 18:23:58.436155855 +0100
***************
*** 21,23 ****
--- 21,26 ----
# 30 seconds for the VMs to shutdown
SHUTDOWN_USERS=""
SHUTDOWN=poweroff
+
+ # 2020/12 pj_finnegan fix - define mandatory parameter
+ VBOXWEB_USER=pjfinn
Патч № 2:
*** /lib/systemd/system/vboxweb.service-orig 2020-12-07 16:13:43.776834092 +0100
--- /lib/systemd/system/vboxweb.service 2020-12-07 19:24:07.352940488 +0100
***************
*** 1,11 ****
[Unit]
Description=VirtualBox Web Service
! After=network.target
[Service]
Type=forking
ExecStart=/usr/lib/virtualbox/vboxweb-service.sh start
! PIDFile=/run/vboxweb.pid
[Install]
WantedBy=multi-user.target
--- 1,13 ----
[Unit]
Description=VirtualBox Web Service
! Requires=virtualbox.service
! After=network.target virtualbox.service
[Service]
Type=forking
ExecStart=/usr/lib/virtualbox/vboxweb-service.sh start
! ExecStop=/usr/lib/virtualbox/vboxweb-service.sh stop
! PIDFile=/home/pjfinn/run/vboxweb.pid
[Install]
WantedBy=multi-user.target
Патч № 3:
*** /usr/lib/virtualbox/vboxweb-service.sh-orig 2020-12-07 17:00:04.901783182 +0100
--- /usr/lib/virtualbox/vboxweb-service.sh 2020-12-07 18:08:43.586981699 +0100
***************
*** 29,34 ****
--- 29,37 ----
# X-Required-Target-Start: network-online
### END INIT INFO
+ # 2020/10 pj_finnegan fix - save binary PIDFILE received from systemd
+ VBOXWEB_PIDFILE="$PIDFILE"
+
PATH=$PATH:/bin:/sbin:/usr/sbin
SCRIPTNAME=vboxweb-service.sh
***************
*** 135,140 ****
--- 138,148 ----
[ -n "$VBOXWEB_ROTATE" ] && PARAMS="$PARAMS -R $VBOXWEB_ROTATE"
[ -n "$VBOXWEB_LOGSIZE" ] && PARAMS="$PARAMS -S $VBOXWEB_LOGSIZE"
[ -n "$VBOXWEB_LOGINTERVAL" ] && PARAMS="$PARAMS -I $VBOXWEB_LOGINTERVAL"
+
+ # 2020/12 pj_finnegan fix - avoid error:
+ # Can't open PID file /run/vboxweb.pid (yet?) after start: Operation not permitted
+ [ -n "$VBOXWEB_PIDFILE" ] && PARAMS="$PARAMS -P $VBOXWEB_PIDFILE"
+
# set authentication method + password hash
if [ -n "$VBOXWEB_AUTH_LIBRARY" ]; then
su - "$VBOXWEB_USER" -c "$vboxmanage setproperty websrvauthlibrary \"$VBOXWEB_AUTH_LIBRARY\""
Затем выполните команды:
$ sudo systemctl daemon-reload
Наконец, команды администратора:
$ sudo systemctl start vboxweb.service
$ systemctl status vboxweb.service
● vboxweb.service - VirtualBox Web Service
Loaded: loaded (/lib/systemd/system/vboxweb.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-12-07 18:13:42 CET; 2s ago
Process: 8997 ExecStart=/usr/lib/virtualbox/vboxweb-service.sh start (code=exited, status=0/SUCCESS)
Main PID: 9023 (vboxwebsrv)
Tasks: 20 (limit: 18850)
Memory: 15.0M
CGroup: /system.slice/vboxweb.service
├─9023 /usr/lib/virtualbox/vboxwebsrv --background -P /home/pjfinn/run/vboxweb.pid
├─9025 /usr/lib/virtualbox/VBoxXPCOMIPCD
└─9031 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
Dec 07 18:13:42 yourhost systemd[1]: Starting VirtualBox Web Service...
Dec 07 18:13:42 yourhost vboxweb-service.sh[8997]: vboxweb-service.sh: Starting VirtualBox web service.
Dec 07 18:13:42 yourhost vboxweb-service.sh[9014]: Starting VirtualBox web service.
Dec 07 18:13:42 yourhost systemd[1]: Started VirtualBox Web Service.
$ sudo systemctl stop vboxweb.service
$ systemctl status vboxweb.service
● vboxweb.service - VirtualBox Web Service
Loaded: loaded (/lib/systemd/system/vboxweb.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Mon 2020-12-07 18:19:45 CET; 2s ago
Process: 8997 ExecStart=/usr/lib/virtualbox/vboxweb-service.sh start (code=exited, status=0/SUCCESS)
Process: 9135 ExecStop=/usr/lib/virtualbox/vboxweb-service.sh stop (code=exited, status=0/SUCCESS)
Main PID: 9023 (code=exited, status=0/SUCCESS)
Dec 07 18:13:42 yourhost systemd[1]: Starting VirtualBox Web Service...
Dec 07 18:13:42 yourhost vboxweb-service.sh[8997]: vboxweb-service.sh: Starting VirtualBox web service.
Dec 07 18:13:42 yourhost vboxweb-service.sh[9014]: Starting VirtualBox web service.
Dec 07 18:13:42 yourhost systemd[1]: Started VirtualBox Web Service.
Dec 07 18:19:39 yourhost systemd[1]: Stopping VirtualBox Web Service...
Dec 07 18:19:39 yourhost vboxweb-service.sh[9135]: vboxweb-service.sh: Stopping VirtualBox web service.
Dec 07 18:19:45 yourhost systemd[1]: vboxweb.service: Succeeded.
Dec 07 18:19:45 yourhost systemd[1]: Stopped VirtualBox Web Service.
$ sudo systemctl restart vboxweb.service
все должно работать нормально, и ошибки при загрузке должно исчезнуть.