web-dev-qa-db-fra.com

Comment puis-je obtenir vboxweb pour démarrer correctement au démarrage

J'ai récemment mis à jour un serveur sans tête vers Ubuntu Server 15.10.

  • Serveur Ubuntu de base
  • LAMPE
  • Installation minimale de Xubuntu

J'ai installé virtualbox 5.0.14 à partir des sources Ubuntu par défaut. J'ai téléchargé et installé virtualbox/5.0.14/Oracle_VM_VirtualBox_Extension_Pack-5.0.14-105127.vbox-extpack

J'ai défini un utilisateur vbox dans le groupe vboxusers et, fondamentalement, virtualbox lui-même fonctionne bien. Mais je veux que ce soit configurable à distance en utilisant phpvirtualbox.

J'ai téléchargé et installé phpvirtualbox-5.0-5.Zip

J'ai ajouté le VBOXWEB_USER=vbox au fichier /etc/default/virtualbox.

En visitant la page Web à partir d'une autre machine, j'ai eu une erreur Could not connect to Host (voir msg1 , et avec plus de détails dans msg2 , ce n'est pas vraiment important, je pense.).

Avec Sudo netstat -peanut, il semblait que vboxwebsrv n’utilisait pas la bonne adresse IP. Il a montré l'adresse locale sous la forme ::1:18083 au lieu de la 192.168.1.12:18083 attendue.

Après quelques recherches sur Google, j'ai ajouté VBOXWEB_Host=192.168.1.12 au fichier /etc/default/virtualbox, mais toujours aucun changement après le redémarrage du service.

Cependant, si j'ai arrêté le service avec Sudo systemctl stop vboxweb.service et que je l'ai démarré manuellement avec Sudo vboxwebsrv -H 192.168.1.12, cela a bien fonctionné. Sudo netstat -peanut l'a signalé avec l'adresse IP/port attendue.

La plupart de la documentation que j'ai consultée faisait référence à init.d et j'ai commencé à penser que, éventuellement, systemd n'utilise pas le fichier /etc/default/virtualbox ... J'ai constaté que je pouvais éditer le fichier /lib/systemd/system/vboxweb.service et j'ai ajouté un -H 192.168.1.12 à la commande ExecStart. Après un redémarrage du service vboxweb, cela a fonctionné! : o)

Service activé pour qu'il démarre automatiquement au démarrage:

Sudo systemctl enable vboxweb.service

Mais après le redémarrage, vboxweb ne s'affiche plus dans Sudo netstat -peanut, bien que ps -ef ait indiqué que le service avait démarré:

$ ps -ef

racine 1383 1 0 mars02? 00:00:00/usr/lib/virtualbox/vboxwebsrv --pidfile /run/vboxweb.pid --background -H 192.168.1.12 --p 18083

Un redémarrage du service le corrigera, mais il ne s'affichera pas correctement après le redémarrage.

Je pensais donc que le service vboxweb.service avait été démarré trop tôt dans le processus d’initialisation de systemd. J'ai donc modifié à nouveau le fichier vboxweb.service, avec After=Apache2.service (et plus tard aussi essayé After=multi-user.target), et vérifié avec systemd-analyse plot que l'init de vboxweb avait bien été déplacé à la toute fin de la séquence d'initialisation. Mais quand même, wboxweb ne figurait pas dans netstat -peanut

Donc enfin à mes questions:

  1. Existe-t-il des conflits entre init.d et systemd, par exemple cette virtualbox (à partir de sources Ubuntu standard) repose sur des fichiers spécifiques à init.d, alors qu'Ubuntu est passé à systemd?
  2. Une autre raison pour laquelle le paramètre VBOXWEB_Host dans le fichier /etc/default/virtualbox n'a aucun effet?
  3. Était-il correct de modifier le fichier vboxweb.service (en particulier avec le paramètre Host).
  4. (et c’est l’important) Comment puis-je obtenir le service vboxweb opérationnel avec les paramètres IP/port corrects au démarrage? idées: /

PS: Je sais que j'aurais pu raccourcir ce post beaucoup et garder la question principale ici, car j'ai résolu le reste (ne laissant que quelques questions), mais j’ai pensé que cela pourrait être intéressant pour les autres de voir comment je pourrais ' J'ai travaillé sur ce problème.

BR, Rolf

3
rolfhsp

Après quelques recherches supplémentaires, j'ai finalement trouvé une solution:

1) J'ai conclu que le fichier /etc/defaults/virtualbox ne semblait avoir aucun effet sur rien (juste un vestige des jours init.d?). Les paramètres utilisateur et groupe de ce fichier ont donc été perdus.

Solution: Ajout de User=vbox et de Group=vboxusers dans la section [Service] du fichier vboxweb.service.

2) Certains des problèmes que je rencontrais étaient dus au fichier vboxweb.config qui faisait référence à un fichier pid dans le dossier /run et à vbox qui n’avait aucun accès en écriture à ce dossier. J'ai d'abord essayé de créer un sous-dossier, appartenant à vbox, dans lequel stocker le fichier pid, mais j'ai appris que le dossier /run était effacé au démarrage, y compris tous les sous-dossiers.

Solution: Créé un sous-dossier dans vbox homedir et mis à jour le fichier vboxweb.config avec cet emplacement.

3) Pour une raison quelconque (ce qui m’échappe toujours), en se référant à l’adresse IP réelle 192.168.1.12, dans config.php (dans le dossier phpvirtualbox) et dans le fichier vboxweb.config (comme indiqué dans le message d’origine), ne fonctionnait pas au démarrage temps. (Un redémarrage ultérieur du service fonctionnerait cependant.)

Solution: Mis à jour le config.php et le vboxweb.config avec l'adresse IP 127.0.0.1 au lieu de 192.168.1.12.

Affaire classée! : o) ... à part pour toutes les questions sur pourquoi les choses sont comme elles sont, mais je peux vivre avec ça: o)

BR, Rolf

4
rolfhsp

la réponse de Rolfhsp est vraiment utile.

De plus, si vboxweb.service est modifié pour s'exécuter en tant qu'utilisateur non root, un autre échec se produira. Dans ce cas, la cause est consignée en tant que "Échec d'ouverture du fichier"/dev/vboxdrvu ", numéro d'erreur, code d'erreur 13, code retour = VERR_VM_DRIVER_NOT_ACCESSIBLE", ce qui signifie que l'utilisateur n'est pas autorisé à accéder à /dev/vboxdrvu.

Par défaut, /dev/vboxdrvu, ainsi que /dev/vboxnetctl et /dev/vboxdru sont tous autorisés pour l'utilisateur racine uniquement (crw-------). pour que les utilisateurs non root puissent y accéder, l'autorisation doit être modifiée. Selon ce blog , il est archivé en mettant simplement un fichier "rules" dans/lib/udev/avec le contenu ci-dessous:

/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"

Ensuite, redémarrez le système. Après le redémarrage, ces fichiers disposent de nouvelles autorisations:

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

Bien que vboxdrusoit toujours inchangé, vboxdrvudispose déjà de la bonne permission pour un accès non-root (dans le groupe vboxusersname__). Après cette modification, vboxweb.service pourrait être exécuté par un utilisateur non root avec succès.

0
周默晗