J'ai récemment mis à jour un serveur sans tête vers Ubuntu Server 15.10.
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:
VBOXWEB_Host
dans le fichier /etc/default/virtualbox
n'a aucun effet?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
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
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 vboxdru
soit toujours inchangé, vboxdrvu
dispose déjà de la bonne permission pour un accès non-root (dans le groupe vboxusers
name__). Après cette modification, vboxweb.service
pourrait être exécuté par un utilisateur non root avec succès.