16 janvier 2019

Débuter avec Windows Subsytem for Linux (WSL)

Débuter avec Windows Subsytem for Linux  (WSL)


Il faut bien comprendre que le but de Microsoft en proposant WSL est de faire bénéficier Windows des possibilités de Linux et non l’inverse. Il n’est pas question pour Microsoft d’aider les développeurs d’applications Linux mais seulement d’aider les développeurs d’applications Windows.

Au début WSL s’appelait  “Bash for Windows”. Tout est dit.

WSL n'est pas cygwin puisque pour qu'une application Linux fonctionne avec cygwin elle doit être re-compilée. Avec WSL c'est exactement l’application Linux, au bit prés, qui s’exécute sous Windows 10.

WSL est un simulateur du kernel Linux, pas un émulateur. Son impact cpu, mémoire et disque est bien plus faible qu'une machine virtuelle. Les deux systèmes partagent le même espace disque et les deux systèmes voient les fichiers de l'autres. Ceci permet à Windows d’exécuter les applications Linux, et a Linux de lire et écrire les fichiers Windows. Les réciproques ne sont pas vraies.
Voir les avertissements plus bas.

1) Activer WSL

Ouvrir une ligne de commande PowerShell en tant qu’administrateur (Run as administrator) et taper la commande :
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Ou bien, exécuter OptionalFeatures.exe et sélectionner "Windows Subsystem for Linux":



Dans tous le cas il faut rebooter pour que l’installation de WSL se fasse.

2) Installer l’application ‘Ubuntu’ depuis Microsoft Store.

Maintenant que l'on a le simulateur de kernel en place on peut installer des distributions linux adaptées à ce contexte. La plus aboutie de ces distributions est Ubuntu puisque Microsoft et Canonical ont travailler main dans la main pour concevoir WSL.

En prenant l’application nommée 'Ubuntu' vous aurez la version la plus récente. Il existe cependant des applications Ubuntu XX.Y pour des versions spécifiques de Ubuntu: 18.04 LTS et 16.04 LTS 

A la première exécution vous devez créer un utilisateur Linux. Il est sans lien avec l'utilisateur Windows.

Important: L'installation n'est valable que pour l'utilisateur courant. Cette installation n'est pas partagée.

3) Configurer

- Le fichier /etc/resolv.conf est un lien vers un fichier généré à chaque exécution de WLS. Si son contenu est vide ou ne vous convient pas il faut
  - Supprimer le fichier /etc/resolv.conf (le lien en fait)
  - Le re-créer en tant que fichier normal avec vos infos
nameserver 8.8.8.8

- Mettre à jour la distribution
$ sudo apt-get update
$ sudo apt-get upgrade

$ uname -a

Linux PCDEV09 4.4.0-17763-Microsoft #253-Microsoft Mon Dec 31 17:49:00 PST 2018 x86_64 x86_64 x86_64 GNU/Linux

Un   top ou  ps faux vous montrera que l’environnement n'est pas réel.

- Pour pouvoir compiler du code C/C++ il faut installer la suite gcc:

$ sudo apt-get install build-essential

$ gcc --version
gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0


- L’émulation de terminal peut poser des problèmes. Par défaut TERM=xterm-256color. En cas de problèmes essayer d’autres émulations comme TERM=vt100 ou TERM=screen

4) Fichiers Linux

- Le nom du répertoire où se trouvent les fichiers Linux est désigné par la clé de registre :
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{xxxx-xxxx-xxxx-xx}\BasePath

Pour les versions de Windows 10 depuis 2018 ce chemin ressemble à: C:\Users\YourUserName\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

Notez (à nouveau) que tout est dans le profils de l'utilisateur, ce n'est pas une installation partagée.

- En faisant shift + bouton droit sur un répertoire vous aurez l’option « Open Linux shell here »

- Depuis la ligne de commande Windows, grâce à wsl.exe, on peut exécuter des commandes Linux


5) AVERTISSEMENT

* Il ne faut pas éditer les fichiers Linux depuis une application Windows (comme notepad++).
Par contre l’inverse est possible : On peut manipuler les fichiers Windows depuis les applications Linux. Les disques Windows sont d’ailleurs automatiquement montés sur  /mnt/c  /mnt/d

* L’environnement fournit par Microsoft WSL (malgré son nom) N'EST PAS LINUX. Il n'y a pas de noyau Linux, mais seulement une simulation (pas une émulation) des appels systèmes Il est impératif d'effectuer des tests sur de véritables distrib Linux car il y a une foule de petites différences, de limitations et d’incompatibilités.
- Environ 30% des appels systèmes implémentés échouent.
- Plus de 150 appels systèmes ne sont pas implémentés.

Voir le détails des tests faits par Microsoft en avril 2017.

* La liste des problèmes montre bien que ce c'est un environnement de développement fragile et en aucun cas un environnement de production.

* D'un autre coté, des choses non supportées par Microsoft WSL fonctionnent pas trop mal. Par exemple, on peut faire fonctionner, tant bien que mal, des application graphiques comme Firefox, ou même Xfce avec, coté Windows, un serveur X comme VcXsrv. Le principaux problèmes viennent de D-Bus et des drivers vidéo et audio.






Plus d'info:
https://blogs.msdn.microsoft.com/wsl/ (n’est plus actif mais très intéressant)
https://blogs.msdn.microsoft.com/commandline/ (actif)
https://github.com/Microsoft/WSL (ce n'est pas le code)