Mise en place de mon environnement de travail avec Windows 10 et WSL 2

Dès que l’on commence à se lancer dans le développement logiciel et web, il est connu et reconnu que Linux est le système d’exploitation à privilégier au niveau des outils, de la gestion des chemins d’accès et de la personnalisation.

Cependant, Windows étant l’OS le plus employé aujourd’hui, de nombreux logiciels métiers sont développés uniquement pour ce système, par exemple la suite logicielle ArcGIS. Ainsi, pour utiliser à la fois Linux et Windows, il était nécessaire de passer par un logiciel de virtualisation. Cependant, cela n’est plus nécessaire grâce au Windows Subsystem for Linux (WSL) qui intègre directement un noyau Linux qui s’exécute dans une machine virtuelle légère. Cette solution est plus rapide et moins coûteuse que la virtualisation classique et permet de travailler sur les mêmes fichiers en parallèle.

Personnellement, j’ai utilisé Ubuntu durant 3 ans pour faire du développement logiciel et web, et je ne voulais pas retourner sous Windows étant donné les limites que je pouvais y trouver pour mes activités. Cependant, en réponse à une obligation professionnelle, j’ai dû retourner sous Windows et fort heureusement, le WSL était disponible à ce moment-là. De là, j’ai trouvé cette combinaison tellement puissante que je ne retournerai plus sous une distribution Linux exclusive.

Le but de cet article est donc de vous présenter mon environnement de travail et si celui-ci vous intéresse, n’hésitez pas à le reproduire pour vos propres besoins !

Installation du WSL 2

La procédure d’installation est parfaitement décrite dans la documentation officielle de Microsoft qui est disponible ici, je vais donc en faire un résumé.

Tout d’abord, vous devez installer le WSL en rentrant cette commande en tant qu’administrateur dans le PowerShell :

PowerShell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

Puis, vous devez activer la fonctionnalité facultative « Plateforme de machine virtuelle » pour pouvoir utiliser le WSL 2 permettant d’avoir un noyau linux virtualisé :

PowerShell
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Redémarrez votre ordinateur pour terminer l’installation du WSL et mettre à jour vers WSL 2.

Puis, ouvrez à nouveau le PowerShell en tant qu’Administrateur pour définir le WSL 2 comme version par défaut (il est possible d’alterner entre le WSL 1 et 2 étant donné qu’ils n’ont pas les mêmes performances dans certains cas) :

PowerShell
wsl --set-default-version 2

Vous allez probablement voir ce message apparaître dans le terminal : « WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel« . Cela indique que vous devez suivre le lien pour télécharger et exécuter un fichier pour installer un noyau linux accessible au WSL 2. Puis, réexécutez la commande pour définir le WSL 2 comme version par défaut.

Bravo, vous avez installé le WSL 2 sur votre machine. Maintenant, il faut installer une distribution Linux.

Installer une distribution Linux (Ubuntu) sur le WSL

L’installation d’une distribution Linux passe par le Microsoft Store. Vous pouvez cliquer sur ce lien pour l’ouvrir ou bien, cherchez l’application par vous même sur votre machine. Puis, choisissez la distribution qui vous intéresse et cliquez sur le bouton « Obtenir« . Dans le cas présent, ce sera Ubuntu.

list_distrib_wsl

! Avant de passer à la configuration de la distribution, profitons de la présence sur le Microsoft Store pour installer le nouveau terminal de Microsoft.

Cliquez sur le bouton « Rechercher » et tapez : « Windows Terminal » puis installez-le. Personnellement, j’utilise ce terminal puisqu’il est possible d’avoir dans plusieurs onglets le WSL, PowerShell et l’invité de commande, mais aussi de personnaliser l’interface facilement.

Puis, configurez le terminal de la façon suivante pour lancer directement le terminal WSL à l’ouverture du Windows Terminal, changer la police d’écriture (important pour plus tard) et changer la taille de la police que je trouve trop grande par défaut.

  1. Allez à cette adresse pour télécharger la police Fira Code et installez-la en tant qu’administrateur;
  2. Lancez le Windows Terminal qui lancera le PowerShell par défaut. Puis, appuyez sur la combinaison de touches « Ctrl + , » pour ouvrir les Paramètres;
  3. Dans le fichier settings.json, nous allons tout d’abord remplacer la valeur de la variable « defaultProfile » avec la valeur de votre « guid » Ubuntu (profiles.list.guid);
  4. Enfin, dans profiles.defaults, nous allons rajouter les deux éléments suivants : « fontFace »: « Fira Code » et « fontSize »: 11;
  5. Enregistrez le fichier et fermez-le, ainsi que le terminal.

Maintenant, passons à la configuration de votre distribution Linux.

Initialisation de la distribution Linux (Ubuntu)

Lors du premier lancement d’une distribution Linux, une procédure de configuration se lance automatiquement. Au cours de celle-ci, vous allez définir votre nom d’utilisateur et votre mot de passe. Ainsi, lancez le Windows Terminal et suivez la procédure affichée (vous devriez directement lancer le WSL si vous avez configuré votre terminal comme moi).

Puis, mettez à jour votre distribution en faisant :

Terminal WSL
sudo apt update && sudo apt upgrade

Ensuite, avant de partir plus en détail dans la configuration de la distribution et du terminal, nous allons ajouter le disque virtuel WSL à l’explorateur de fichiers de Windows. De cette manière, vous pourrez naviguer, ajouter, modifier les fichiers de votre distribution comme vous le faites habituellement avec Windows. C’est en ça que le WSL est une incroyable technologie de mon point de vue ! Par exemple, vous pouvez créer un fichier via le terminal, le modifier avec le bloc-notes de Windows et l’exécuter avec votre terminal et afficher le résultat dans un logiciel installé sur votre Windows.

Pour faire cela, ouvrez l’explorateur de fichiers puis cliquez sur « Ce PC -> Ordinateur -> Connecter un lecteur réseau » :

Puis, choisissez un lecteur disponible sur votre machine et indiquez le dossier suivant : « wsl$ubuntu », puis Terminer.

L’explorateur de fichiers s’ouvre alors à la racine de votre distribution Linux et vous pouvez naviguer dans vos fichiers comme à votre habitude.

Nous allons maintenant pouvoir personnaliser notre distribution Linux en ayant la possibilité de modifier des fichiers à partir de l’explorateur.

Configuration de la distribution Linux (WSL)

La configuration de la distribution, du WSL et la mise en place de l’environnement de travail va concerner :

  • l’historique de commandes
  • le terminal avec powerline-go
  • Anaconda
  • Visual Studio Code + extensions
  • Serveur X (VcXsrv)

Pour réaliser ces personnalisations, nous allons exclusivement employer le terminal, même si vous pouvez utiliser l’explorateur de fichiers pour atteindre les fichiers à modifier et utiliser votre éditeur de texte habituel.

Amélioration de l’historique de commandes

Nous allons maintenant « améliorer » l’historique de commandes du terminal. L’objectif est de pouvoir, lorsque l’on commence à écrire des commandes, de rechercher les occurrences en employant les flèches du clavier. C’est une fonction que j’affectionne particulièrement puisque je peux retrouver très rapidement d’anciennes commandes.

Dans votre dossier utilisateur ( « /home/user/ » ou cd ~ ), vous devez ajouter des lignes de codes dans vos fichiers .bashrc et .inputrc. Vous devrez peut-être créer ces fichiers s’ils n’existent pas encore (probablement .inputrc).

Fichier .bashrc
# Improve history research
shopt -s histappend
PROMPT_COMMAND='history -a'
Fichier .inputrc
# Improve history research
"\e[A": history-search-backward
"\e[B": history-search-forward
set show-all-if-ambiguous on
set completion-ignore-case on

Vous pouvez maintenant relancer votre terminal et maintenant, si vous tapez « cd » dans le terminal et utilisez les flèches haut et bas, vous allez uniquement naviguer dans toutes les lignes de commandes précédentes qui commencent par « cd ».

Personnalisation du terminal avec powerline-go

Si comme moi vous avez souvent (tout le temps ?) le terminal d’ouvert, vous devez parfois vous demander dans quelle branche git vous êtes, quel répertoire, s’il y a des fichiers qui ont été modifiés, dans quel environnement / machine vous vous trouvez, etc. Avoir toutes ces informations d’un seul coup d’œil est très pratique et voici ce que ça donne :

Pour obtenir ce résultat, nous allons installer powerline-go qui possède des paramètres de personnalisation intéressants.

Pour pouvoir l’installer, il faut déjà installer Go sur votre machine, langage dans lequel cet outil a été développé, puis télécharger et exécuter les fichiers de powerline-go :

Terminal WSL
sudo apt install golang-go
go get -u github.com/justjanne/powerline-go

Puis, ouvrez votre fichier .bashrc pour ajouter les lignes suivantes (vérifiez que l’installation ne les a pas déjà ajoutées). Vous obtiendrez alors la même apparence que moi (retour à la ligne, répertoire de maximum 10 caractères, etc.). Vous pouvez retrouver l’ensemble des paramètres de personnalisation sur le répertoire Github de l’outil, section Customization :

Fichier .bashrc
GOPATH=$HOME/go
function _update_ps1() {
    PS1="$($GOPATH/bin/powerline-go -colorize-hostname -cwd-max-dir-size 10 -newline -hostname-only-if-ssh -error $?)"
}
if [ "$TERM" != "linux" ] && [ -f "$GOPATH/bin/powerline-go" ]; then
    PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi

! Attention, si vous obtenez d’étranges symboles, c’est parce que vous n’avez pas défini Fira Code comme police d’écriture dans le Windows terminal.

Installation d’Anaconda sur le WSL et création d’un environnement Python

Travaillant principalement avec les langages Python et R, j’utilise la distribution Anaconda pour gérer facilement mes environnements de développement, versions de langages et bibliothèques.

Étant donné que je développe exclusivement sur ma distribution Linux, nous allons installer Anaconda sur celle-ci.

  1. Tout d’abord, allez sur cette page pour choisir la version qui vous intéresse (optez tout de même pour la dernière en date). Puisque nous allons installer Anaconda sur le WSL, il faut prendre les fichiers Linux-x86_64.sh. Ne téléchargez pas le fichier, copiez juste le lien.
  2. Puis, entrez dans le terminal cette commande en indiquant l’url que vous avez copiée pour télécharger le fichier d’installation :
    Terminal WSL
    wget https://repo.anaconda.com/archive/Anaconda3-2020.07-Linux-x86_64.sh
    
  3. Lancez l'installation via cette commande en indiquant le fichier téléchargé :
    Terminal WSL
    bash Anaconda3-2020.07-Linux-x86_64.sh
    
  4. Suivez la procédure d'installation, acceptez la licence, choisissez votre répertoire d'installation et lorsqu'on vous demande "Do you wish the installer to prepend the Anaconda3 install location to PATH in your /home/dallery/.bashrc ?" faites "Yes", ça vous permettra d'utiliser la commande conda.
  5. Redémarrez le terminal ou exécutez cette commande pour finaliser l'installation et l'activer :
    Terminal WSL
    source ~/.bashrc
    

Normalement, vous devriez voir dans le terminal le terme "base" tout à gauche de la ligne en cours du terminal (dans un fond vert si vous avez installé powerline-go). Cela correspond à l'environnement par défaut d'Anaconda. Nous allons créer notre propre environnement en installant des bibliothèques en lien avec les SIG. De cette manière, il sera possible d'importer celles-ci dans Python, mais aussi d'utiliser des commandes directement dans le terminal en lien avec celles-ci, par exemple GDAL.

Pour créer un nouvel environnement, il faut utiliser la commande ci-après, en indiquant le nom que vous souhaitez lui donner et qui s'affichera dans le terminal, puis vous indiquez les packages que vous souhaitez installer directement (vous pourrez en ajouter plus tard). La version installée de Python sera la dernière en date vis-à-vis de la distribution installée, mais vous pouvez forcer la version en l'indiquant. Pour plus d'informations, n'hésitez pas à lire la documentation officielle.

Terminal WSL
conda create --name gis gdal shapely fiona rasterio matplotlib numba scipy scikit-learn scipy numpy pandas geopandas rasterstats scikit-image folium xarray descartes

Puis, vous devez activer l'environnement en tapant la commande ci-dessous dans le terminal et en indiquant le nom de votre environnement. Vous pouvez également ajouter cette ligne dans votre fichier .bashrc si vous voulez activer cet environnement à chaque ouverture du terminal.

Terminal WSL et/ou fichier .bashrc
conda activate gis

Maintenant, nous allons installer Visual Studio Code, avec ses extensions, pour pouvoir développer des chaines de traitements, applications, etc. L'intérêt d'utiliser cet éditeur provient de ses extensions, son interface et surtout, de sa capacité à se connecter directement au WSL pour exécuter les scripts directement sur celui-ci.

Installation et configuration de Visual Code Studio

Cette fois, l'installation va se passer sur Windows et non pas sur le WSL. Ainsi, allez à cette adresse pour télécharger l'exécutable du logiciel et installez-le.

Puis, lancez le logiciel, cliquez sur le bouton permettant de rechercher des extensions et recherchez "Remote - WSL" et installez-la.

Maintenant, il est possible de se connecter au WSL, ce qui aura pour effet de lancer une nouvelle instance de VSC. Pour cela, cliquez sur le bouton "><" en bas à gauche de l'écran et sélectionnez "Remote-WSL: New Window".

Dans la fenêtre qui vient de s'ouvrir, en bas à gauche, vous devriez voir maintenant "WSL: Ubuntu", ce qui indique que vous êtes connecté à votre WSL.

! Si vous avez un message d'erreur vis-à-vis du WSL, ouvrez le PowerShell et tapez cette commande : "wsl.exe --shutdown".

De cette façon, si vous ouvrez un fichier, vous verrez le code, mais aussi le terminal que nous avons configuré et qui permet d'avoir en un seul endroit votre code et votre terminal pour un développement rapide et efficace !

Concernant les extensions, elles s'installent de manière indépendante, entre Windows et le WSL.

Sur Windows, vous pouvez installer :

Sur le WSL, vous pouvez installer :

Enfin, nous allons choisir Fira Code comme police d'écriture, comme pour le terminal. Pour cela, appuyez sur "Ctrl + ," pour ouvrir les paramètres. Pour aller plus vite, cherchez "ligature" et cliquez sur "Edit in settings.json" pour ouvrir le fichier. Dans celui-ci, ajoutez les lignes suivantes (attention à ne pas dupliquer les paramètres) et enregistrez :

Settings.json
"editor.fontFamily": "Fira Code",
"editor.fontLigatures": true

Maintenant, nous allons installer un serveur X pour pouvoir récupérer dans une fenêtre indépendante les informations graphiques qui peuvent être générés par le WSL, par exemple des graphiques Matplotlib ou R.

Installation d'un serveur X (VcXsrv)

Téléchargez et installez le logiciel VcXsrv qui est disponible à cette adresse.

Puis, allez dans votre fichier ".bashrc" et commentez la ligne "export DISPLAY=:0.0" si elle existe (dans le cas où vous utilisez le WSL 2 comme présenté jusqu'à maintenant) et ajoutez les autres :

Fichier .bashrc
# export DISPLAY=:0.0
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
# to avoid libgl error
export LIBGL_ALWAYS_INDIRECT=1

Nous avons commenté cette ligne étant donné que le WSL 2 repose sur une machine virtuelle, faisant que le WSL 2 n'accède pas en local à notre écran. Ainsi, la ligne que nous avons ajoutée permet de récupérer automatiquement l'adresse IP de notre machine virtuelle pour pouvoir afficher des informations graphiques à l'écran. Si vous avez WSL 1, il ne faut pas réaliser cette étape. Concernant la ligne avec "libgl", il y a une erreur qui se déclenche à cause du fonctionnement du WSL. Ainsi, cette ligne permet de déporter le traitement graphique de la distribution Linux vers la machine Windows, ce qui permet d'accélérer les temps d'affichages au passage. Relancez votre terminal pour appliquer les changements.

Maintenant, nous allons lancer le serveur X :

  1. Choisissez l'option "Multiple Windows" pour ouvrir une nouvelle fenêtre par graphique généré et laissez "Display number" à -1 et faites "Suivant";
  2. Laissez l'option par défaut, c'est-à-dire "Start no client" et "Suivant";
  3. Cochez toutes les cases étant donné que nous allons utiliser Windows pour effectuer les traitements graphiques (Native opengl) et compte tenu du fonctionnement de WSL 2, il faut activer "Disable access control" puisqu'on se connecte à l'écran via l'adresse IP de la machine virtuelle. Faites "Suivant", puis "Terminer".

Maintenant que votre serveur X est lancé, nous allons tester celui-ci en générant un graphique via Python et la bibliothèque Matplotlib :

Python
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()

Vous devriez avoir ce résultat qui apparaît dans une fenêtre :

Voilà, votre environnement de travail est opérationnel ! Dans un autre article, j'indiquerai comment utiliser Visual Studio Code pour le développement Python de manière optimale en utilisant les fonctionnalités Jupyter Notebook et le debugging.