Как я могу заставить vboxweb правильно запускаться при загрузке

Недавно я обновил автономный сервер до Ubuntu Server 15.10.

  • Базовый сервер Ubuntu
  • LAMP
  • Xubuntu минимальная установка

Я установил 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

Итак, наконец, к моим вопросам:

  1. Есть ли конфликты между init.d и systemd, например, что virtualbox (из стандартных источников Ubuntu) использует файлы, относящиеся к init.d, в то время как Ubuntu перешел на systemd? ?
  2. Правильно ли было отредактировать файл vboxweb.service (особенно с параметром host).
  3. (и это главное) Как настроить и запустить службу vboxweb с правильными настройками IP / порта во время загрузки? У меня нет идей: /

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

BR, Рольф

3
задан 3 March 2016 в 14:52

3 ответа

Еще после некоторого поиска с помощью 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.phpphpvirtualbox папка) и в vboxweb.config файл (как упомянуто в исходном сообщении), не работал во время начальной загрузки. (Более поздний перезапуск сервиса работал бы все же.)

Решение: Обновленный оба config.php и vboxweb.config с IP-адресом 127.0.0.1 вместо 192.168.1.12.

Случай закрывается!: o)... независимо для всех вопросов о том, почему вещами является способ, которым они, но я могу жить с этим: o)

BR, Rolf

4
ответ дан 4 March 2016 в 00:52
  • 1
    В этом случае это было не установщик Ubuntu, которые устанавливают вещи тот путь - или Вы снова использовали разделы, или что-то еще изменило код типа. Ubuntu 16.04' s установщик использует корректные коды типа для разделов Ubuntu. – Rod Smith 6 June 2017 в 03:09

ответ 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 мог быть выполнен некорневым пользователем успешно.

0
ответ дан 4 March 2016 в 00:52
  • 1
    Единственная страница со всеми ответами на нем isn' t действительно полезный как, в то время как многие участники могут испытать одну из Ваших проблем, разногласия кого-то еще имеющего все Ваши проблемы крайне маловероятны. Рассмотрите askubuntu.com/tour для начала. – Elder Geek 26 January 2018 в 05:45

В моей версии установки были некоторые встроенные ошибки в службах:

$ 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

все должно работать нормально, и ошибки при загрузке должно исчезнуть.

2
ответ дан 7 December 2020 в 17:31

Другие вопросы по тегам:

Похожие вопросы: