Solutions au partage de ficher extrêmement lent sur Virtualbox (Symfony sur Debian)

Hello 🙂

Aujourd’hui on va s’attaquer a un problème que beaucoup de dev Symfony 2 ont si ils utilisent Virtualbox, précédemment je vous parlais d’un soucis avec NGINX et le partage de fichiers Virtualbox, maintenant on va régler ce problème une bonne fois pour toute et oublier les temps de chargement de 30 secondes d’une page en dev (c’est chiant hein ?).

Il y a plusieurs solution là plus connu mais que je trouve pas si performante que ça est de modifié le kernel de votre app symfony pour qu’il mette le cache sur le disque de la VM pour ça il suffit d’ajouter ces deux méthodes dans votre kernel :

Cette méthode fonctionne pas trop mal mais bon c’est pas le top.

C’est quoi cet article pourris ou tu donne une solution connu et pas au top tu fatigue ou quoi ?

Euhhhh… j’y viens 😀

Comme autres solutions nous en avons plusieurs par exemple simplement faire tourner notre application Symfony dans l’environnement du système hôte ( :'( ) mais c’est selon moins la moins bonne des idées au monde pour les raisons suivantes :

  • Symfony tourne TRÈS MAL sous WIndows, utilisez un cache APC et regardez la catastrophe galactique, de plus Windows ne respecte pas la case, Unix / Linux si autrement dit en dev vous faites l’erreur de mettre une majuscule quelque part et la même « variable » sans majuscule autre part et BIMMMM (tout cassé :o) c’est très fréquent dans les requêtes DQL par exemple lors de la définition (dans l’entity qui definit a table), il y a une majuscule et dans la requête DQL pas de majuscule, sur Windows ça fonctionnera mais ça crashera sur *nix
  • Installer WAMP, LAMP, MAMP sur l’OS hôte je suis pas fan, on a des VM autant s’en servir et donc éviter de pourrir l’hôte avec des softs pas très utiles.
  • Il est préférable d’utiliser une VM pour que votre app Symfony ai les mêmes versions de PHP / Nginx / MYSQL en dev qu’en prod, je reprends l’exemple APC du dessus sur WIndows APC j’ai eu de gros problème avec (gros crash), sur certaines versions de PHP sous Debian il crash (notamment la première version disponible avec Wheezy, dotdeb à la rescousse ou une recompilation de PHP 😀 ), Donc il est préférable de dev sur une machine qui ai le même environnement que la (les) machine(s) de production cible (dans mon cas, Debian), en VM vous avez le même environnement en prod qu’en dev donc pas de de surprise du a l’environnement d’exécution de votre code (si si te jure :o)

Bref pour certains c’est la solution, pas pour moi (je sais je suis chiant 😀 )

Alors toi GROS MALIN, comment tu fais ?

C’est simple je met tous les fichiers du projet sur la VM et j’y accède via le réseau depuis l’hôte pour crée / modifier mon code. certains diront « bah oué mais tu as le problème mais dans l’autre sens du coup » Oui… mais non (ça veut rien dire je sais) accéder à quelques fichiers PHP à la fois se fait aussi rapidement que si c’était en « local ». c’est très rapide et du coup l’exécution l’ai aussi cette méthode fonctionne sur tous les OS hôte (Windows / OS X / Linux et même BSD mais je détaillerais pas pour BSD ici c’est plus ou moins la même chose que pour Linux de toute façon).

Pour cela configurer l’interface réseau de votre VM en « accès par pont » (attention ça veut dire que votre VM sera purement et simplement connecté au même réseau que l’hôte si vous êtes sur un réseau Universitaire / Public protégez bien votre VM :p)

virtualbox_network

(Cette capture à été prise sous Windows mais sous OS X, Linux c’est exactement la même chose)

Si vous êtes sur OS X ou Linux c’est par ici.

OS X étant très proche de Linux (sans déconner ?) je les met tous les deux dans la même section, la différence est que sous OS X il vous faudra suivre le tuto SSHFS sur OS X avant de continuer, pour les adeptes du pinguin un simple

suffira (yum, pacman … en fonction de la distribution bien sure 😉 )

Une fois SSHFS installé (OS X / Linux) le reste de procédure est EXACTEMENT la même (fait bisou à ton cousin le pinguin OS X, allez fait bisou !)

Pour la suite il faut crée le point de montage SSHFS vers la machine virtuel, pour ça un terminal hop hop hop

Ici SSH va vous demandez si vous souhaitez faire confiance à la machine distante (enfin sauf si vous vous y êtes connectés avant. ensuite soit il vous demandera votre MDP root soit vous vous logez par clef RSA dépend de votre config.

NE FAITES CA QU’EN DEV, COMME VOUS LE VOYEZ J’UTILISE LE COMPTE ROOT POUR CREE LE MONTAGE DONC VOUS AVEZ LES MÊMES DROITS QUE ROOT SUR LES FICHIERS DU SYSTÈME DE FICHIER DE LA VM DE DEV, si votre petit frère décide de tout virer dans le dossier qui représente la racine de votre machine de dev bah tout es cassé 🙁

Et maintenant si vous allez regarder dans votre petit explorateur de fichier (Finder sur OS X / Nautilus sur Gnome) dans le répertoire ~/MonSuperDossierDeMontage vous verrez les fichiers de votre VM (sont pas beaux vos fichiers hein hein hein ?).

Et Windows alors hein ? tu n’y pense pas a Windows c’est quand même 90% de part de marché alors il est ou Windows ?

Pour les utilisateurs de Windows on va faire différemment, on va monter un lecteur réseau, Windows gère le ftp comme protocol pour connecter un lecteur réseau mais flemme de configurer un vsftpd juste pour ça, on va utiliser SAMBAAAAAA 😀 et non Windows ne gère pas nativement SFTP (naze !)

(Il existe aussi des softs commerciaux qui permettent de directement monter des lecteurs réseaux SFTP, « Expandrive » pour ne pas le citer mais un dev n’a pas besoin d’argent ! il a juste besoin d’un cerveau 😀 )

Sur votre machine de dev (Chez moi Debian) il va falloir installer Samba :

Du coup on a déplacer le fichier de config de samba et on va crée le notre plus simpliste (on est en dev on a pas besoin de beaucoup)

du coup :

Ici il faudra voir dans quel workgroup est votre machine par défaut sur Windows ils mettent WORKGROUP pour le voir clique droit sur le « poste de travail » -> propriété -> paramétrés systèmes avancés -> Nom de l’ordinateur.

WorkGroup

Au niveau de « groupe de travail » vous avez le nom de votre groupe de travail, par defaut WORKGROUP, si vous l’avez changer vous devez le connaitre :p

Maintenant on va configurer samba

dans ce fichier mettez y :

Maintenant on crée et autorise l’utilisateur myuser a accéder au partage.

Dans WIndows il ne vous reste plus qu’a aller dans « réseau » et vous devriez voir « DEVBOX » si vous avez laisser ce nom :

network

Et dans DEVBOX un dossier www quand vous cliquerez dessus un mdp vous sera demander.

Vous pouvez aussi maintenant monter ce dossier en lecteur réseau pour ça rien de plus simple, clique droit sur le poste de travail -> « connecter un lecteur réseau » et dans parcourir vous devriez facilement retrouver DEVBOX/WWW du coup vos projets sont accessibles depuis l’hôte et vous pouvez bosser tranquille (si jamais vous avez pas le droit d’écrire sur les fichiers jetez un œil du coté de chmod, chown, n’oubliez pas que c’est myuser qui accède aux fichiers donc il lui fait les droits :p).

Et voilà c’est maintenant terminé, bon dev 😉

Vous avez aimé cet article ? Partagez-le :)

Facebook Google Plus Twitter Linkedin email

Une réflexion au sujet de « Solutions au partage de ficher extrêmement lent sur Virtualbox (Symfony sur Debian) »

  1. Ping : Samba et Windows 10 | Silentkernel

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *