Accueil - Informatique - Systèmes d’exploitation - Windows

Configuration et utilisation de WSL (Windows Subsystem for Linux)

Publié le vendredi 15 mai 2020.


Mise à jour : 17 septembre 2020

Introduction

Le sous-système Windows pour Linux permet aux utilisateurs/développeurs d’exécuter un environnement GNU/Linux directement sur Windows sans avoir à utiliser une machine virtuelle.
Son introduction date de 2016 avec la mise à jour de Windows 10 version 1607.

Les principales fonctionnalités de WSL :

  1. Choisir et installer une ou plusieurs distributions GNU/Linux à partir du Microsoft Store
  2. Exécuter les utilitaires et logiciels en ligne de commande courants tels que grep, sed et awk, ssh ou d’autres fichiers binaires ELF-64 : git,
  3. Exécuter des scripts shell Bash et des applications en ligne de commande GNU/Linux, notamment :
    • Outils : vim, emacs,
    • Langages : Javascript/node.js, Php, Perl, Python, C/C++, Go, Rust, etc.
    • Services : SSHD, MySQL, PostgreSQL, Apache, Nginx, Tomcat, etc
  4. Installer des logiciels supplémentaires en utilisant le gestionnaire de paquets de votre distribution GNU/Linux
  5. Appeler des applications Windows à l’aide d’un shell de ligne de commande de type UNIX
  6. Appeler des applications GNU/Linux sur Windows
  7. Lancer des applications graphique Linux en utilisant un serveur X sous Windows

Actuellement, il existe deux versions de WSL :

La version 1, qui est disponible jusqu’à la dernière mise à jour de Windows 10 version 1909, est un driver pour Windows implémentant l’API du noyau Linux, driver qui transforme les appels au noyau en instructions compatibles Windows. Ce qui pose certains problèmes de compatibilité et de vitesse d’exécution, notamment avec l’API permettant d’accéder au système de fichiers.

La version 2 permet de résoudre les différents problèmes de compatibilité et de performances rencontrés avec la version 1. Cette nouvelle version de WSL 2 utilise les fonctionnalités Hyper-V pour créer une machine virtuelle légère avec un noyau Linux minimal. Elle permet une meilleure compatibilité avec les logiciels Linux, la prise en charge de Docker et une augmentation notable des performances du système de fichiers. Elle est disponible depuis le mois de juin avec la mise à jour Windows 10 version 2004.

Dans ce billet, nous allons décrire l’installation et la configuration de WSL pour une distribution Ubuntu LTS. Le principe sera identique pour les distributions Arch Linux ou Alpine.

Nous verrons dans un prochain billet comment utiliser et mettre en œuvre cette distribution Linux pour automatiser la collecte et le traitement des données acquises lors d’une campagne de recherche sur un navire océanographique.

Installation

Suivre pas à pas les instructions du Guide d’installation du sous-système Windows pour Linux pour Windows 10.

Avant d’installer des distributions Linux pour WSL, vous devez vous assurer que la fonctionnalité facultative « Sous-système Windows pour Linux » est activée :

  1. Ouvrez PowerShell en tant qu’administrateur et exécutez :
  2. Redémarrez votre ordinateur lorsque vous y êtes invité.
  3. Installer le nouveau terminal Windows depuis le Microsoft Store qui va remplacer l’invite de commande. La version actuelle est baptisée « Windows Terminal »

    Si vous avec déjà installé la version "preview", il semblerait que la mise à jour sur le store ne soit pas automatique, il est donc conseillé de vérifier la disponibilité d’une nouvelle version en cliquant sur les ... :
  4. Télécharger et installer à partir du Microsoft Store une distribution Ubuntu LTS, soit la 16.04, 18.04 ou la toute récente 20.04 :

    La première étape qu’il vous est demandé d’effectuer lors de l’ouverture de la distribution Linux nouvellement installée consiste à créer un compte avec un nom d’utilisateur et un mot de passe. Ce nom d’utilisateur et ce mot de passe sont propres à votre distribution Linux et n’ont aucune incidence sur votre nom d’utilisateur Windows. Une fois que vous avez créé ce nom d’utilisateur et ce mot de passe, le compte devient votre utilisateur par défaut pour la distribution et se connecte automatiquement au démarrage.
    Ce compte est considéré comme l’administrateur Linux, avec la capacité d’exécuter des commandes d’administration sudo (Super User Do).
  5. Une fois la session Linux (Ubuntu) démarrée et le compte utilisateur créé, vous pouvez lancer le Terminal Windows. Ce dernier ouvre par défaut une session PowerShell. Dans le menu (à droite de l’onglet, flèche vers le bas), sélectionner la distribution installée, soit ici : Ubuntu-18.04 :

    Pour ouvrir la session Ubuntu par défaut, il faut éditer le fichier de configuration (setting) et remplacer le guid par défaut du Powershell par celui d’Ubuntu. Voir « Editing Windows Terminal JSON Settings » sur la page Github du projet.
    Pour faciliter le copier/coller entre les 2 environnements, on mettra les variables ci-dessous à true. Ne pas oublier la virgule à la fin de chaque ligne !
  6. Mettre à jour la distribution :
  7. Installer un environnement X léger tel que Xfce (optionnel) si vous désirez faire de l’affichage graphique. Installer uniquement l’environnement Xfce avec la commande :
  8. Editer le fichier ~/.bashrc et ajouter la variable d’environnement DISPLAY pour rediriger l’affichage graphique sur le serveur X Windows (WSL1) :

    Recharger le fichier ~/.bashrc pour prendre en compte la nouvelle variable DISPLAY :

  9. Installer au choix un serveur X sous Windows comme :
    - Xming (libre)
    - VcXsrv (libre)
    - X401(payant depuis le Microsoft store)
    pour afficher les sorties graphiques sous X. Voir les détails sous : https://doc.ubuntu-fr.org/wsl
  10. Il faut exécuter le programme XLaunch pour configurez le serveur X avant la première utilisation, vous devez désactiver le contrôle d’accès (cocher la case : "Disable server access control")

    Sinon, vous risquez d’obtenir des erreurs suivante :
  11. Démarrer le serveur X sous Windows puis dans une fenêtre bash sous Linux, lancer le programme xeyes pour tester l’affichage, les pupilles doivent suivre votre souris :
  12. Installer ensuite les paquets suivants qui seront nécessaires pour les traitements ultérieurs des données scientifiques utilisés dans le dépôt CRDAP :
  13. Installer le module Perl Oceano si vous utilisez les scripts du dépôt CRDAP

Mettre à jour vers WSL 2

Pour effectuer une mise à jour de WSL1 vers WSL 2, il faut avoir installé la mise à jour Windows 10 de mai 2020 (version 2004).
Vérifiez votre version de Windows en sélectionnant simultanément les touches Windows + R puis entrez la commande :

Si ce n’est pas le cas, lancer l’assistant Windows Update, ou installer l’utilitaire de mise à jour vers la version 2004 depuis le site de Microsoft.

Si aucune option de mise à jour n’est proposée, ne pas insister, Microsoft diffuse progressivement Windows 10 2004 uniquement sur les machines qu’il estime compatibles et tente d’identifier celles qui présentent des problèmes. Dans tous les cas le choix est laissé à l’utilisateur d’installer ou non cette nouvelle version majeure.

Avant d’installer WSL 2, vous devez activer la fonctionnalité facultative « Plateforme de machine virtuelle ».

Ouvrez un terminal PowerShell en tant qu’administrateur et exécutez :

Récupérer le programme de mise à jour du noyau Linux depuis la page https://aka.ms/wsl2kernel

Exécuter le programme wsl_update_x64.msi :

Redémarrer votre ordinateur pour terminer l’installation la mise à jour vers WSL 2.

Définir WSL 2 comme version par défaut

Exécuter la commande suivante dans PowerShell pour définir WSL 2 comme version par défaut lors de l’installation d’une nouvelle distribution Linux :

Migrer une distribution WSL 1 vers WSL 2

en remplaçant par le nom de la distribution à migrer.

Configuration du serveur X sous WSL2

WSL2 a sa propre adresse IP et ne partage pas encore l’adresses de lookup localhost (127.0.0.1) ; lorsque vous vous connectez à 127.0.0.1 dans WSL2, vous vous connectez en fait à une machine virtuelle WSL2 plutôt qu’à la machine Windows sous-jacente. Vous devez donc utiliser directement l’adresse IP attribuée à Windows.
Nous vous recommandons d’utiliser l’adresse IP interne qui est extraite dynamiquement et de l’attribuer à la variable d’environnement DISPLAY, code à rajouter dans votre fichier d’initialisation .bashrc :

Ensuite, 2 solutions peuvent être choisies, la première, qui est conseillée car plus sécurisée, consiste, si vous utilisez Xming, à rajouter l’adresse IP obtenue dans le fichier C:\Program Files (x86)\Xming\X0.hosts.
Il faudra pour cela éditer en mode administrateur le fichier X0.hosts après chaque redémarrage car cette adresse n’est pas fixe :

La seconde nécessite de modifier les paramètres du pare feu Windows (firewall) avec WSL2, cette étape est en cours de résolution, voir le support technique de Windows10, car par défaut le pare feu bloque les requêtes sur l’interface WSL2. La solution que j’ai trouvé sur le net consiste à désactiver le pare feu sur l’interface WSL2 avec une commande powershell en mode administrateur puis à redonner les autorisations nécessaires au pare feu lors du premier lancement du serveur X (ouf !).
Lancer une fenêtre PowerShell en mode administrateur :

Démarrer le serveur X sous Windows, puis dans une fenêtre bash sous Linux, lancer le programme xeyes pour tester l’affichage, les pupilles doivent suivre votre souris comme décrit précédemment sous WSL1.

Installation et configuration de Python avec Miniconda

Miniconda est un installateur minimal pour Conda qui permet de gérer des bibliothèques pour développer en Python, notamment pour l’analyse de données. C’est une version réduite d’Anaconda qui inclut uniquement conda, une version de Python 3.7 plus récente que celle de la distribution Ubuntu 18.04 et les paquets dont ils dépendent.

Par rapport au gestionnaire de paquets pip, conda est très efficace. Il gère la version de Python et les paquets compatibles avec cette dernière de manière optimale.

Installation et configuration de miniconda

Pour l’installation de Miniconda,, nous partons du principe que vous l’installerez en tant qu’utilisateur, et non pas en tant qu’administrateur. Autrement dit, vous n’aurez pas besoin de droits spéciaux pour pouvoir installer Miniconda et les autres modules nécessaires. :

Dans un shell, lancez l’installation de Miniconda avec la commande et répondre aux questions suivantes :

Relancer votre shell afin qu’il prenne en compte la procédure d’initialisation de conda.

Tester la version de python et de conda :

Installation des modules scientifiques Python avec Miniconda :

Utilisation de VSC (Visual Studio Code) avec WSL

Le principe consiste à utiliser Visual Studio Code sous Windows tout en utilisant les chaînes d’outils de développement et les utilitaires spécifiques à Linux, d’exécuter et déboguer les applications basées sur Linux. Pour cela, il est nécessaire d’installer les 2 extensions "Remote WSL" et "Remote Development"

Ce paragraphe est en cours de rédaction
Developing in WSL Une fois lancé VSC sous Windows, installer l’extension "Remote WSL" qui permettra d’utiliser le sous-système Windows pour Linux (WSL) comme environnement de développement en utilisant les outils et utilitaires spécifiques à Linux.

Ensuite, rajouter la ligne suivante dans le fichier setting.json, voir documentation officielle :

pour utiliser le shell Bash Linux comme Terminal de Visual Studio Code.
Vous bénéficiez alors d’un environnement de développement simple, performant et aisé à maintenir.

Utilisation de WSL

Le répertoire utilisateur

Par défaut, une session WSL démarre depuis le répertoire utilisateur Windows, soit sous : /mnt/c/Users/nom d’utilisateur/ mais la variable HOME est définie comme /home/nom d’utilisateur, donc si vous taper cd, pour êtes redirigé vers votre répertoire utilisateur Linux :

Vous pouvez voir le contenu de ce disque sur le réseau en allant à \\wsl$\nom de la distribution\nom d’utilisateur\home dans l’explorateur Windows ou directement en tapant la commande explorer.exe . de votre invite de commande bash.

Le montage/partage des disques

Les disques internes de Windows sont automatiquement montés sous /mnt/, soit /mnt/c et /mnt/d sur mon PC portable qui possède 2 SSD.
Pour monter un partage réseau, un disque externe ou une clé USB, il suffit d’entrer la commande suivante pour monter le disque E : de 2To sous /mnt/e :

Commandes d’administration de WSL

Depuis une session PowerShell, lister les distributions installées :

Obtenir de l’aide :

Lancer wsl :

Monter la racine de la distribution Linux dans l’explorateur Windows comme un disque X :

Lister les distributions installées :

Lister la version WSL des distributions installées :

Changer l’utilisateur par défaut au lancement :

Depuis une fenêtre powershell, si vous avec installé ubuntu 1804 :-

si vous avec installé ubuntu 2004 :-

Le chemin de l’exécutable se trouve sous :

C:\Users\<username>\AppData\Local\Microsoft\WindowsApps

chemin qui peut etre obtenu avec l’équivalent de la commande Unix which
qui est get-command

Copie d’une distribution

Si vous avez besoin d’installer une deuxième machine avec WSL, vous pouvez dupliquer une distribution dans un fichier tar puis la restaurer sur un autre PC.
Ouvrez une fenêtre PowerShell dans le programme terminal :

Utiliser ensuite la commande wsl —import pour importer le fichier .tar dans une nouvelle distribution.

Problèmes

Sur un PC DELL Précision 5820, j’ai du attendre que Windows 10 propose la mise à jour en version 2004 avec Windows Update, l’outil de migration refusait la mise à jour avec un code d’erreur car semble t’il, certains drivers n’étaient pas compatibles.

J’ai eu ensuite des difficultés pour réaliser la migration de ma distribution Ubuntu 18.04 en WSL2. Il était impossible également d’installer une nouvelle distribution, avec le message d’erreur suivant :

The operation could not be started because a required feature is not installed.

En français :

L'opération n'a pas pu être démarrée car une fonctionnalité requise n'est pas
installée.

J’ai fini par trouver sur le net un article qui a résolu le problème :
Fix Hyper-V not working after Windows 10 v1809 upgraded

La difficulté consiste à retrouver les bons paramètres traduits en Français dans les méandres du panneau de configuration de Windows 10 à partir des informations en Anglais.

Depuis le panneau de contrôle, aller dans "Mise à jour et sécurité", puis "Sécurité Windows" et sélectionner "Control des applications et du navigateur"

puis en page de page, cliquer sur "Paramètres d’Exploit protection" et sélectionner l’onglet "Paramètres du programme" :

sélectionner C:\WINDOWS\System32\vmcompute.exe, puis cliquer sur "Modifier", dérouler l’ascenseur jusqu’au champs "Protection du flux de contrôle"

et décocher la case "Remplacer les paramètres du système" pour désactiver la protection.

Lancer une fenêtre DOS ou PowerShell en mode administrateur , lancer la commande net start vmcompute

Normalement, la migration de la distribution devrait bien se passer cette fois :

Liens