Développer en Linux sous Windows

Récemment, je vous ai fait part de mon mécontentement en jouant avec Docker sous une VM Linux hébergée sous un Windows. Les temps de réponses des répertoires partagés étaient désastreux, les liens symboliques ne fonctionnaient pas… Mais tout ça, c’était avant WSL 2. WSL c’est l’intégration du noyau Linux directement dans Windows, et ca change tout ! Voyons ensemble comment intégrer tout cela.

Installation de WSL 2:

Pour commencer, vous devez être en Windows 10 et installer ce fichier:
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi.
Entrez ensuite les commandes suivantes dans un terminal en mode administrateur:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart
wsl --set-default-version 2

Installer Docker Desktop for Windows:


Installer Docker via https://hub.docker.com/editions/community/docker-ce-desktop-windows/
Lancer le, et dans les réglages, cocher Expose daemon on tcp://localhost:2375 without TLS
On redémarre le Windows

Dans le microsoft store, installer puis lancer debian
Faire un user VOTRENOM – password : VOTREPASSWORD
On y accède via \wsl$\Debian
Son ip se trouve avec wsl hostname -i, ici, on va lui mettre 192.168.50.16
Copier vos clés ssh dans \wsl$\Debian/root/.ssh

Activer SSH et l’IP fixe à chaque démarrage:

Par défaut ssh est désactivé, nous allons le réactiver et aussi passer l’ip en fixe:
Taper la touche Windows + R, puis
shell:startup et coller ce contenu dans un fichier startssh.vbs dans le répertoire.

Set WshShell = WScript.CreateObject("WScript.Shell")
If WScript.Arguments.Length = 0 Then
  Set ObjShell = CreateObject("Shell.Application")
  ObjShell.ShellExecute "wscript.exe" _
    , """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1
  WScript.Quit
End if

Set ws = CreateObject("Wscript.Shell") 
ws.run "wsl -d Debian -u root service ssh start", vbhide
WScript.Sleep 15000 'On attend que la VM se charge
ws.run "wsl -d Debian -u root ip addr add 192.168.50.16/24 broadcast 192.168.50.255 dev eth0 label eth0:1", 0 
ws.run "netsh interface ip add address " & chr(34) & "vEthernet (WSL)" & chr(34) & " 192.168.50.88 255.255.255.0", 0 
Set WshShell = Nothing

Paramétrage du SSH, et ajout de quelques commandes utiles:

Ensuite dans la console ssh, faites:
sudo su

Taper la commande
vi /etc/ssh/sshd_config
Ajouter la ligne suivante à la fin dans
%sudo ALL=NOPASSWD: /etc/init.d/ssh

Dans votre ~/.bashrc, ajouter les alias suivants:
alias gosite=’cd /application/VOTRESITE’
alias goweb=’gosite && docker-compose exec web /bin/bash’
alias godb=’gosite && docker-compose exec db /bin/bash’
alias doup=’gosite && docker-compose up’
alias gogulp=’docker exec -i web bash -c « cd /application/VOTRESITE && ./node_modules/gulp/bin/gulp.js »‘
alias godi=’docker exec -i web bash -c « cd /application/VOTRESITE && php bin/magento setup:di:compile »‘
alias gosu=’docker exec -i web bash -c « cd /application/VOTRESITE && php bin/magento setup:upgrade »‘

apt-get update
apt-get install iputils-ping stow apt-transport-https ca-certificates curl gnupg-agent software-properties-common docker git openssh-server docker-compose
git config –global user.name « VOTRENOM »
git config –global user.email « VOTRENOM@VOTREAGENCE.com »
service ssh start
mkdir /application
cd /application
chmod 777 -R /application #Pour donner les acces a Windows (en désactivant la sécurité)
git clone ssh://git@VOTREPROJET.git

Comment accéder à mon linux ?

Pour rappel ,vous pouvez y accéder via son IP, et pour la connaitre, il faut faire: wsl hostname -i
Ou via le réseau \\wsl$\Debian
Pour obtenir un shell, vous pouvez taper bash dans un invité de commande, ou encore lancer debian dans votre menu Windows. Si vous souhaitez y accéder via un autre terminal type ssh comme par exemple le fameux mobaXterm, alors il vous faut activer le serveur ssh comme indiqué ci-dessus.

Malgré tout, attention si vous un joueur:

Depuis quelques mois, j’avais noté une baisse des performances durant mes session de gaming lorsqu’il y avait beaucoup d’unités en mouvement, et en fait, tout était lié à l’installation de WSL. Ce n’est pas un service que vous pouvez arrêter (un wsl –terminate ne suffit pas). Donc, préférez un double boot si vous voulez conserver vos FPS.

Et pour monter un docker avec Apache, et le reste ?

Je vous renvoie à mon ancien tutoriel: Docker PHP / Apache / Magento qui explique tout. Le résultat est bluffant. On n’est plus dans de l’émulation, et là ca marche vraiment bien !

2 réflexions au sujet de “Développer en Linux sous Windows”

  1. Bonjour,
    J’avoue que c’est un peu confus pour moi :
    – dans quel but cochez-vous « Expose daemon on tcp://localhost:2375 without TLS » ? pour accéder directement à vos containers de votre magento via un terminal ssh plutôt que passer par l’interface Docker desktop ou une commande depuis le Windows terminal ?
    – dans quel but assignez-vous une IP fixe de type 192 à WSL2 sachant qu’il y a par défaut une IP fixe 127.0.1.1 ? pour y accéder depuis tout le réseau local ?
    – à quoi servent les commandes « utiles » du bashrc ?
    Merci pour vos éclaircissements

    Répondre
    • Le expose daemon permet effectivement de passer par le ssh.
      L’ip fixe est parfois nécessaire lorsque vous affectez un nom de domaine à une ip (pour tester le basculement dev / préprod), et cela permet de savoir quel port est affecté sur quel machine. Avec le 127.0.0.1 on ne sait plus trop si on arrive sur le windows ou le linux.
      Enfin les commandes du bashrc sont des raccourcis pour lancer des commandes docker pour lancer/accéder au container.
      Désolé pour le délai du commentaire, je n’avais pas regardé mes spams depuis longtemps…

      Répondre

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.